Files
website/apps/docs-new/scripts/fix-openapi.mjs
Mauricio Siu 418c7a2d33 fix: update shiki dependency and enhance OpenAPI security scheme
- Updated shiki package version from 1.22.2 to 3.19.0 in package.json and pnpm-lock.yaml.
- Modified OpenAPI security scheme to include 'x-default' for the API key in the fix-openapi script and openapi.json.
2025-12-07 06:08:53 -06:00

106 lines
2.9 KiB
JavaScript

import { readFileSync, writeFileSync } from 'fs';
import { join } from 'path';
const openapiPath = join(process.cwd(), 'public', 'openapi.json');
console.log('Fixing OpenAPI schema...');
try {
const openapi = JSON.parse(readFileSync(openapiPath, 'utf8'));
let fixed = 0;
let securityFixed = false;
// Remove Authorization security scheme and add x-api-key
if (!openapi.components) {
openapi.components = {};
}
if (!openapi.components.securitySchemes) {
openapi.components.securitySchemes = {};
}
// Remove old Authorization scheme
if (openapi.components.securitySchemes['Authorization']) {
delete openapi.components.securitySchemes['Authorization'];
securityFixed = true;
}
// Add x-api-key scheme
openapi.components.securitySchemes['x-api-key'] = {
type: 'apiKey',
in: 'header',
name: 'x-api-key',
description: 'API key authentication. Use YOUR-GENERATED-API-KEY',
'x-default': 'your-key'
};
securityFixed = true;
// Replace global security from Authorization to x-api-key
if (openapi.security) {
openapi.security = openapi.security.filter(
sec => !sec['Authorization']
);
} else {
openapi.security = [];
}
const hasApiKeySecurity = openapi.security.some(
sec => sec['x-api-key']
);
if (!hasApiKeySecurity) {
openapi.security.push({ 'x-api-key': [] });
securityFixed = true;
}
// Replace Authorization with x-api-key in all operation security
for (const [path, pathItem] of Object.entries(openapi.paths || {})) {
for (const [method, operation] of Object.entries(pathItem)) {
if (operation && operation.security) {
// Replace Authorization with x-api-key
operation.security = operation.security.map(sec => {
if (sec['Authorization'] !== undefined) {
securityFixed = true;
return { 'x-api-key': [] };
}
return sec;
});
}
}
}
// Fix empty response schemas
for (const [path, pathItem] of Object.entries(openapi.paths || {})) {
for (const [method, operation] of Object.entries(pathItem)) {
if (operation.responses) {
for (const [status, response] of Object.entries(operation.responses)) {
if (response.content && response.content['application/json']) {
const content = response.content['application/json'];
// Check if schema is completely empty or missing
if (Object.keys(content).length === 0 || !content.schema) {
response.content['application/json'] = {
schema: {
type: 'object',
description: 'Successful response'
}
};
fixed++;
}
}
}
}
}
}
if (fixed > 0 || securityFixed) {
writeFileSync(openapiPath, JSON.stringify(openapi, null, 2));
if (fixed > 0) console.log(`✓ Fixed ${fixed} empty response schemas`);
if (securityFixed) console.log("✓ Added x-api-key security scheme");
} else {
console.log('✓ No fixes needed');
}
} catch (error) {
console.error('Error fixing OpenAPI schema:', error.message);
process.exit(1);
}