bling-docs-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +281 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +275 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/embeddings.d.ts +18 -0
- package/dist/lib/embeddings.d.ts.map +1 -0
- package/dist/lib/embeddings.js +52 -0
- package/dist/lib/embeddings.js.map +1 -0
- package/dist/lib/indexer.d.ts +13 -0
- package/dist/lib/indexer.d.ts.map +1 -0
- package/dist/lib/indexer.js +305 -0
- package/dist/lib/indexer.js.map +1 -0
- package/dist/lib/loader.d.ts +34 -0
- package/dist/lib/loader.d.ts.map +1 -0
- package/dist/lib/loader.js +267 -0
- package/dist/lib/loader.js.map +1 -0
- package/dist/lib/openapi-tools.d.ts +38 -0
- package/dist/lib/openapi-tools.d.ts.map +1 -0
- package/dist/lib/openapi-tools.js +63 -0
- package/dist/lib/openapi-tools.js.map +1 -0
- package/dist/lib/schema-resolver.d.ts +17 -0
- package/dist/lib/schema-resolver.d.ts.map +1 -0
- package/dist/lib/schema-resolver.js +173 -0
- package/dist/lib/schema-resolver.js.map +1 -0
- package/dist/lib/types.d.ts +207 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/vector-store.d.ts +46 -0
- package/dist/lib/vector-store.d.ts.map +1 -0
- package/dist/lib/vector-store.js +66 -0
- package/dist/lib/vector-store.js.map +1 -0
- package/dist/scripts/compare-extraction.d.ts +7 -0
- package/dist/scripts/compare-extraction.d.ts.map +1 -0
- package/dist/scripts/compare-extraction.js +223 -0
- package/dist/scripts/compare-extraction.js.map +1 -0
- package/dist/scripts/compare-with-docs-site.d.ts +7 -0
- package/dist/scripts/compare-with-docs-site.d.ts.map +1 -0
- package/dist/scripts/compare-with-docs-site.js +264 -0
- package/dist/scripts/compare-with-docs-site.js.map +1 -0
- package/dist/scripts/field-coverage-report.d.ts +14 -0
- package/dist/scripts/field-coverage-report.d.ts.map +1 -0
- package/dist/scripts/field-coverage-report.js +352 -0
- package/dist/scripts/field-coverage-report.js.map +1 -0
- package/dist/scripts/final-coverage-report.d.ts +1 -0
- package/dist/scripts/final-coverage-report.d.ts.map +1 -0
- package/dist/scripts/final-coverage-report.js +2 -0
- package/dist/scripts/final-coverage-report.js.map +1 -0
- package/dist/scripts/inspect-endpoint.d.ts +15 -0
- package/dist/scripts/inspect-endpoint.d.ts.map +1 -0
- package/dist/scripts/inspect-endpoint.js +292 -0
- package/dist/scripts/inspect-endpoint.js.map +1 -0
- package/dist/scripts/performance-validation.d.ts +10 -0
- package/dist/scripts/performance-validation.d.ts.map +1 -0
- package/dist/scripts/performance-validation.js +123 -0
- package/dist/scripts/performance-validation.js.map +1 -0
- package/dist/scripts/test-all.d.ts +7 -0
- package/dist/scripts/test-all.d.ts.map +1 -0
- package/dist/scripts/test-all.js +76 -0
- package/dist/scripts/test-all.js.map +1 -0
- package/dist/scripts/test-new-fields.d.ts +6 -0
- package/dist/scripts/test-new-fields.d.ts.map +1 -0
- package/dist/scripts/test-new-fields.js +243 -0
- package/dist/scripts/test-new-fields.js.map +1 -0
- package/dist/scripts/test-schema-fields.d.ts +7 -0
- package/dist/scripts/test-schema-fields.d.ts.map +1 -0
- package/dist/scripts/test-schema-fields.js +198 -0
- package/dist/scripts/test-schema-fields.js.map +1 -0
- package/dist/scripts/validate-extraction.d.ts +15 -0
- package/dist/scripts/validate-extraction.d.ts.map +1 -0
- package/dist/scripts/validate-extraction.js +294 -0
- package/dist/scripts/validate-extraction.js.map +1 -0
- package/dist/scripts/validate-full-extraction.d.ts +6 -0
- package/dist/scripts/validate-full-extraction.d.ts.map +1 -0
- package/dist/scripts/validate-full-extraction.js +399 -0
- package/dist/scripts/validate-full-extraction.js.map +1 -0
- package/dist/scripts/validate-phase1-fields.d.ts +6 -0
- package/dist/scripts/validate-phase1-fields.d.ts.map +1 -0
- package/dist/scripts/validate-phase1-fields.js +162 -0
- package/dist/scripts/validate-phase1-fields.js.map +1 -0
- package/dist/scripts/validate-phase2-fields.d.ts +6 -0
- package/dist/scripts/validate-phase2-fields.d.ts.map +1 -0
- package/dist/scripts/validate-phase2-fields.js +127 -0
- package/dist/scripts/validate-phase2-fields.js.map +1 -0
- package/dist/scripts/validate-phase3-fields.d.ts +6 -0
- package/dist/scripts/validate-phase3-fields.d.ts.map +1 -0
- package/dist/scripts/validate-phase3-fields.js +106 -0
- package/dist/scripts/validate-phase3-fields.js.map +1 -0
- package/dist/tools/compare-with-openapi-spec.d.ts +10 -0
- package/dist/tools/compare-with-openapi-spec.d.ts.map +1 -0
- package/dist/tools/compare-with-openapi-spec.js +266 -0
- package/dist/tools/compare-with-openapi-spec.js.map +1 -0
- package/dist/tools/compare-with-postman.d.ts +25 -0
- package/dist/tools/compare-with-postman.d.ts.map +1 -0
- package/dist/tools/compare-with-postman.js +257 -0
- package/dist/tools/compare-with-postman.js.map +1 -0
- package/dist/tools/describe.d.ts +39 -0
- package/dist/tools/describe.d.ts.map +1 -0
- package/dist/tools/describe.js +64 -0
- package/dist/tools/describe.js.map +1 -0
- package/dist/tools/get-auth-info.d.ts +33 -0
- package/dist/tools/get-auth-info.d.ts.map +1 -0
- package/dist/tools/get-auth-info.js +27 -0
- package/dist/tools/get-auth-info.js.map +1 -0
- package/dist/tools/get-endpoint-details.d.ts +27 -0
- package/dist/tools/get-endpoint-details.d.ts.map +1 -0
- package/dist/tools/get-endpoint-details.js +59 -0
- package/dist/tools/get-endpoint-details.js.map +1 -0
- package/dist/tools/get-schema.d.ts +34 -0
- package/dist/tools/get-schema.d.ts.map +1 -0
- package/dist/tools/get-schema.js +64 -0
- package/dist/tools/get-schema.js.map +1 -0
- package/dist/tools/list-tags.d.ts +29 -0
- package/dist/tools/list-tags.d.ts.map +1 -0
- package/dist/tools/list-tags.js +23 -0
- package/dist/tools/list-tags.js.map +1 -0
- package/dist/tools/read-documentation-page.d.ts +23 -0
- package/dist/tools/read-documentation-page.d.ts.map +1 -0
- package/dist/tools/read-documentation-page.js +73 -0
- package/dist/tools/read-documentation-page.js.map +1 -0
- package/dist/tools/search-documentation.d.ts +26 -0
- package/dist/tools/search-documentation.d.ts.map +1 -0
- package/dist/tools/search-documentation.js +91 -0
- package/dist/tools/search-documentation.js.map +1 -0
- package/dist/tools/search-endpoints.d.ts +35 -0
- package/dist/tools/search-endpoints.d.ts.map +1 -0
- package/dist/tools/search-endpoints.js +120 -0
- package/dist/tools/search-endpoints.js.map +1 -0
- package/dist/tools/search-schemas.d.ts +30 -0
- package/dist/tools/search-schemas.d.ts.map +1 -0
- package/dist/tools/search-schemas.js +36 -0
- package/dist/tools/search-schemas.js.map +1 -0
- package/dist/tools/validate-spec.d.ts +44 -0
- package/dist/tools/validate-spec.d.ts.map +1 -0
- package/dist/tools/validate-spec.js +186 -0
- package/dist/tools/validate-spec.js.map +1 -0
- package/docs/ajuda_como_gerar_o_access_token.md +8 -0
- package/docs/ajuda_como_gerar_o_client_id_e_o_client_secret.md +8 -0
- package/docs/ajuda_full.md +35 -0
- package/docs/ajuda_preciso_criar_uma_conta_no_bling_para_utilizar_a_api.md +9 -0
- package/docs/ajuda_quais_sao_os_limites_da_api.md +9 -0
- package/docs/ajuda_qual_e_a_utilidade_do_campo_state.md +9 -0
- package/docs/ajuda_qual_e_o_formato_de_retorno_das_respostas_da_api.md +18 -0
- package/docs/ajuda_quantos_registros_sao_retornados_por_pagina_em_cada_requisicao.md +9 -0
- package/docs/aplicativos_acesso_ao_modulo.md +12 -0
- package/docs/aplicativos_como_cadastrar.md +258 -0
- package/docs/aplicativos_full.md +276 -0
- package/docs/aplicativos_gerenciamento.md +9 -0
- package/docs/aplicativos_inscricao.md +8 -0
- package/docs/aplicativos_introducao.md +8 -0
- package/docs/changelogs-webhooks_2026.md +88 -0
- package/docs/changelogs-webhooks_full.md +90 -0
- package/docs/changelogs_2026.md +88 -0
- package/docs/changelogs_full.md +90 -0
- package/docs/guias_como_utilizar_os_tokens.md +20 -0
- package/docs/guias_full.md +72 -0
- package/docs/guias_fundamentos.md +11 -0
- package/docs/guias_introducao.md +9 -0
- package/docs/guias_o_que_e_api.md +10 -0
- package/docs/guias_oauth_e_tokens_de_acesso.md +9 -0
- package/docs/guias_padrao_rest.md +34 -0
- package/docs/guias_para_quem_e_destinada_a_api.md +9 -0
- package/docs/guias_sobre_o_bling.md +9 -0
- package/docs/limites_filtros.md +9 -0
- package/docs/limites_full.md +56 -0
- package/docs/limites_requisicoes.md +50 -0
- package/docs/migracao-jwt_estrutura_e_tamanho_do_token.md +9 -0
- package/docs/migracao-jwt_full.md +107 -0
- package/docs/migracao-jwt_ganhos_computacionais_e_de_infraestrutura.md +11 -0
- package/docs/migracao-jwt_introducao.md +15 -0
- package/docs/migracao-jwt_motivacao_da_alteracao.md +9 -0
- package/docs/migracao-jwt_tratamento_de_erros_comuns.md +13 -0
- package/docs/migracao-jwt_utilizando_jwt_no_bling.md +74 -0
- package/docs/publicando_full.md +118 -0
- package/docs/publicando_processo.md +9 -0
- package/docs/publicando_revisao.md +86 -0
- package/docs/publicando_situacoes.md +16 -0
- package/docs/publicando_validacao_de_dados.md +23 -0
- package/docs/webhooks_acoes.md +12 -0
- package/docs/webhooks_autenticacao.md +22 -0
- package/docs/webhooks_como_cadastrar.md +20 -0
- package/docs/webhooks_entrega_nao_ordenada.md +9 -0
- package/docs/webhooks_full.md +453 -0
- package/docs/webhooks_idempotencia.md +9 -0
- package/docs/webhooks_introducao.md +9 -0
- package/docs/webhooks_recebimento_de_eventos.md +8 -0
- package/docs/webhooks_recursos.md +374 -0
- package/docs/webhooks_retentativas.md +9 -0
- package/docs/webhooks_webhooks_vs_polling.md +13 -0
- package/package.json +67 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Embeddings Module
|
|
3
|
+
* Uses Google's text-embedding-004 model to generate embeddings
|
|
4
|
+
* for semantic search over API endpoints and schemas
|
|
5
|
+
*/
|
|
6
|
+
import { GoogleGenerativeAI } from '@google/generative-ai';
|
|
7
|
+
const MODEL_NAME = 'text-embedding-004';
|
|
8
|
+
const BATCH_SIZE = 100; // Google allows up to 100 texts per batch request
|
|
9
|
+
let genAI = null;
|
|
10
|
+
function getClient() {
|
|
11
|
+
if (!genAI) {
|
|
12
|
+
const apiKey = process.env.GOOGLE_API_KEY;
|
|
13
|
+
if (!apiKey) {
|
|
14
|
+
throw new Error('GOOGLE_API_KEY environment variable is required for semantic search');
|
|
15
|
+
}
|
|
16
|
+
genAI = new GoogleGenerativeAI(apiKey);
|
|
17
|
+
}
|
|
18
|
+
return genAI;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generate an embedding for a single text
|
|
22
|
+
*/
|
|
23
|
+
export async function embedText(text) {
|
|
24
|
+
const client = getClient();
|
|
25
|
+
const model = client.getGenerativeModel({ model: MODEL_NAME });
|
|
26
|
+
const result = await model.embedContent(text);
|
|
27
|
+
return result.embedding.values;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Generate embeddings for multiple texts in batches
|
|
31
|
+
*/
|
|
32
|
+
export async function embedTexts(texts) {
|
|
33
|
+
const client = getClient();
|
|
34
|
+
const model = client.getGenerativeModel({ model: MODEL_NAME });
|
|
35
|
+
const embeddings = [];
|
|
36
|
+
for (let i = 0; i < texts.length; i += BATCH_SIZE) {
|
|
37
|
+
const batch = texts.slice(i, i + BATCH_SIZE);
|
|
38
|
+
const requests = batch.map(text => ({ content: { parts: [{ text }], role: 'user' } }));
|
|
39
|
+
const result = await model.batchEmbedContents({ requests });
|
|
40
|
+
for (const e of result.embeddings) {
|
|
41
|
+
embeddings.push(e.values);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return embeddings;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if the Google API key is configured
|
|
48
|
+
*/
|
|
49
|
+
export function isEmbeddingEnabled() {
|
|
50
|
+
return !!process.env.GOOGLE_API_KEY;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/lib/embeddings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,UAAU,GAAG,oBAAoB,CAAC;AACxC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,kDAAkD;AAE1E,IAAI,KAAK,GAA8B,IAAI,CAAC;AAE5C,SAAS,SAAS;IAChB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QACD,KAAK,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAe;IAC9C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAe,EAAE,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexer Module
|
|
3
|
+
* Processes OpenAPI specification and creates indexed data structures
|
|
4
|
+
* for fast lookup and search operations
|
|
5
|
+
*/
|
|
6
|
+
import type { OpenAPISpec } from './loader.js';
|
|
7
|
+
import type { IndexedData } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Index an OpenAPI specification
|
|
10
|
+
* Extracts and organizes endpoints, schemas, tags, and security schemes
|
|
11
|
+
*/
|
|
12
|
+
export declare function indexOpenAPISpec(spec: OpenAPISpec): IndexedData;
|
|
13
|
+
//# sourceMappingURL=indexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/lib/indexer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EACV,WAAW,EAQZ,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAoG/D"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexer Module
|
|
3
|
+
* Processes OpenAPI specification and creates indexed data structures
|
|
4
|
+
* for fast lookup and search operations
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Index an OpenAPI specification
|
|
8
|
+
* Extracts and organizes endpoints, schemas, tags, and security schemes
|
|
9
|
+
*/
|
|
10
|
+
export function indexOpenAPISpec(spec) {
|
|
11
|
+
const endpoints = [];
|
|
12
|
+
const endpointsByTag = new Map();
|
|
13
|
+
const endpointsByPath = new Map();
|
|
14
|
+
const tagCounts = new Map();
|
|
15
|
+
// Extract base URL
|
|
16
|
+
const baseUrl = spec.servers?.[0]?.url || '';
|
|
17
|
+
// Process all paths and methods
|
|
18
|
+
for (const [path, pathItem] of Object.entries(spec.paths)) {
|
|
19
|
+
if (!pathItem || typeof pathItem !== 'object')
|
|
20
|
+
continue;
|
|
21
|
+
const methods = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head', 'trace'];
|
|
22
|
+
for (const method of methods) {
|
|
23
|
+
const operation = pathItem[method];
|
|
24
|
+
if (!operation || typeof operation !== 'object')
|
|
25
|
+
continue;
|
|
26
|
+
// Extract endpoint info
|
|
27
|
+
const endpointInfo = {
|
|
28
|
+
path,
|
|
29
|
+
method: method.toUpperCase(),
|
|
30
|
+
operationId: operation.operationId,
|
|
31
|
+
summary: operation.summary || '',
|
|
32
|
+
description: operation.description || '',
|
|
33
|
+
tags: Array.isArray(operation.tags) ? operation.tags : [],
|
|
34
|
+
parameters: extractParameters(operation.parameters, pathItem.parameters, spec),
|
|
35
|
+
requestBody: extractRequestBody(operation.requestBody),
|
|
36
|
+
responses: extractResponses(operation.responses),
|
|
37
|
+
security: extractSecurity(operation.security),
|
|
38
|
+
deprecated: operation.deprecated === true,
|
|
39
|
+
servers: extractServers(operation.servers || pathItem.servers),
|
|
40
|
+
externalDocs: extractExternalDocs(operation.externalDocs),
|
|
41
|
+
callbacks: operation.callbacks,
|
|
42
|
+
extensions: extractExtensions(operation),
|
|
43
|
+
raw: operation,
|
|
44
|
+
};
|
|
45
|
+
// Add to flat list
|
|
46
|
+
endpoints.push(endpointInfo);
|
|
47
|
+
// Index by path+method
|
|
48
|
+
const key = `${method.toUpperCase()} ${path}`;
|
|
49
|
+
endpointsByPath.set(key, endpointInfo);
|
|
50
|
+
// Index by tags
|
|
51
|
+
for (const tag of endpointInfo.tags) {
|
|
52
|
+
if (!endpointsByTag.has(tag)) {
|
|
53
|
+
endpointsByTag.set(tag, []);
|
|
54
|
+
}
|
|
55
|
+
endpointsByTag.get(tag).push(endpointInfo);
|
|
56
|
+
// Count tags
|
|
57
|
+
tagCounts.set(tag, (tagCounts.get(tag) || 0) + 1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Build tag info list
|
|
62
|
+
const tags = Array.from(tagCounts.entries())
|
|
63
|
+
.map(([name, endpointCount]) => {
|
|
64
|
+
// Try to find tag description from spec (if tags array exists)
|
|
65
|
+
const specTags = spec.tags;
|
|
66
|
+
const tagDef = Array.isArray(specTags)
|
|
67
|
+
? specTags.find((t) => t.name === name)
|
|
68
|
+
: undefined;
|
|
69
|
+
return {
|
|
70
|
+
name,
|
|
71
|
+
description: tagDef?.description,
|
|
72
|
+
endpointCount,
|
|
73
|
+
};
|
|
74
|
+
})
|
|
75
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
76
|
+
// Extract security schemes
|
|
77
|
+
const securitySchemes = extractSecuritySchemes(spec);
|
|
78
|
+
// Extract schemas (will be resolved by schema-resolver)
|
|
79
|
+
const schemas = new Map();
|
|
80
|
+
if (spec.components?.schemas) {
|
|
81
|
+
for (const [name, schema] of Object.entries(spec.components.schemas)) {
|
|
82
|
+
if (schema && typeof schema === 'object') {
|
|
83
|
+
// Store raw schema for now - will be resolved later
|
|
84
|
+
const rawSchema = schema;
|
|
85
|
+
rawSchema.raw = schema;
|
|
86
|
+
schemas.set(name, rawSchema);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
endpoints,
|
|
92
|
+
endpointsByTag,
|
|
93
|
+
endpointsByPath,
|
|
94
|
+
schemas,
|
|
95
|
+
tags,
|
|
96
|
+
securitySchemes,
|
|
97
|
+
baseUrl,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Extract parameters from operation and path item
|
|
102
|
+
* Note: $ref are already resolved by @scalar/openapi-parser
|
|
103
|
+
*/
|
|
104
|
+
function extractParameters(operationParams, pathParams, spec) {
|
|
105
|
+
const params = [];
|
|
106
|
+
const allParams = [...(pathParams || []), ...(operationParams || [])];
|
|
107
|
+
for (const param of allParams) {
|
|
108
|
+
if (!param || typeof param !== 'object')
|
|
109
|
+
continue;
|
|
110
|
+
// Parameters are already dereferenced by @scalar/openapi-parser
|
|
111
|
+
const resolvedParam = param;
|
|
112
|
+
const paramInfo = {
|
|
113
|
+
name: resolvedParam.name || '',
|
|
114
|
+
in: resolvedParam.in || 'query',
|
|
115
|
+
required: resolvedParam.required === true,
|
|
116
|
+
description: resolvedParam.description,
|
|
117
|
+
type: extractType(resolvedParam.schema || resolvedParam),
|
|
118
|
+
example: resolvedParam.example,
|
|
119
|
+
schema: resolvedParam.schema,
|
|
120
|
+
deprecated: resolvedParam.deprecated === true,
|
|
121
|
+
style: resolvedParam.style,
|
|
122
|
+
explode: resolvedParam.explode,
|
|
123
|
+
allowEmptyValue: resolvedParam.allowEmptyValue,
|
|
124
|
+
examples: resolvedParam.examples,
|
|
125
|
+
content: resolvedParam.content,
|
|
126
|
+
raw: resolvedParam,
|
|
127
|
+
};
|
|
128
|
+
params.push(paramInfo);
|
|
129
|
+
}
|
|
130
|
+
return params;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Extract request body information
|
|
134
|
+
* Note: $ref are already resolved by @scalar/openapi-parser
|
|
135
|
+
*/
|
|
136
|
+
function extractRequestBody(requestBody) {
|
|
137
|
+
if (!requestBody || typeof requestBody !== 'object')
|
|
138
|
+
return undefined;
|
|
139
|
+
const content = requestBody.content;
|
|
140
|
+
if (!content || typeof content !== 'object')
|
|
141
|
+
return undefined;
|
|
142
|
+
// Get first content type (usually application/json)
|
|
143
|
+
const contentTypes = Object.keys(content);
|
|
144
|
+
const contentType = contentTypes[0];
|
|
145
|
+
if (!contentType)
|
|
146
|
+
return undefined;
|
|
147
|
+
const mediaType = content[contentType];
|
|
148
|
+
if (!mediaType || !mediaType.schema)
|
|
149
|
+
return undefined;
|
|
150
|
+
return {
|
|
151
|
+
required: requestBody.required === true,
|
|
152
|
+
contentType,
|
|
153
|
+
schema: mediaType.schema,
|
|
154
|
+
description: requestBody.description,
|
|
155
|
+
allContentTypes: contentTypes,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Extract responses information
|
|
160
|
+
* Note: $ref are already resolved by @scalar/openapi-parser
|
|
161
|
+
*/
|
|
162
|
+
function extractResponses(responses) {
|
|
163
|
+
if (!responses || typeof responses !== 'object')
|
|
164
|
+
return [];
|
|
165
|
+
const responseList = [];
|
|
166
|
+
for (const [statusCode, response] of Object.entries(responses)) {
|
|
167
|
+
if (!response || typeof response !== 'object')
|
|
168
|
+
continue;
|
|
169
|
+
const responseInfo = {
|
|
170
|
+
statusCode,
|
|
171
|
+
description: response.description || '',
|
|
172
|
+
allContentTypes: undefined,
|
|
173
|
+
links: response.links,
|
|
174
|
+
};
|
|
175
|
+
// Extract schema if present
|
|
176
|
+
const content = response.content;
|
|
177
|
+
if (content && typeof content === 'object') {
|
|
178
|
+
const contentTypes = Object.keys(content);
|
|
179
|
+
responseInfo.allContentTypes = contentTypes;
|
|
180
|
+
const contentType = contentTypes[0];
|
|
181
|
+
if (contentType) {
|
|
182
|
+
const mediaType = content[contentType];
|
|
183
|
+
if (mediaType?.schema) {
|
|
184
|
+
responseInfo.schema = mediaType.schema;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Extract headers if present
|
|
189
|
+
const headers = response.headers;
|
|
190
|
+
if (headers && typeof headers === 'object') {
|
|
191
|
+
responseInfo.headers = {};
|
|
192
|
+
for (const [headerName, headerDef] of Object.entries(headers)) {
|
|
193
|
+
if (headerDef && typeof headerDef === 'object') {
|
|
194
|
+
responseInfo.headers[headerName] = {
|
|
195
|
+
description: headerDef.description,
|
|
196
|
+
required: headerDef.required === true,
|
|
197
|
+
schema: headerDef.schema,
|
|
198
|
+
deprecated: headerDef.deprecated === true,
|
|
199
|
+
example: headerDef.example,
|
|
200
|
+
examples: headerDef.examples,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
responseList.push(responseInfo);
|
|
206
|
+
}
|
|
207
|
+
return responseList;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Extract security requirements
|
|
211
|
+
*/
|
|
212
|
+
function extractSecurity(security) {
|
|
213
|
+
if (!Array.isArray(security) || security.length === 0)
|
|
214
|
+
return undefined;
|
|
215
|
+
const schemes = [];
|
|
216
|
+
for (const secReq of security) {
|
|
217
|
+
if (secReq && typeof secReq === 'object') {
|
|
218
|
+
schemes.push(...Object.keys(secReq));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return schemes.length > 0 ? schemes : undefined;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Extract security schemes from spec
|
|
225
|
+
*/
|
|
226
|
+
function extractSecuritySchemes(spec) {
|
|
227
|
+
const schemes = [];
|
|
228
|
+
if (!spec.components?.securitySchemes)
|
|
229
|
+
return schemes;
|
|
230
|
+
for (const [name, scheme] of Object.entries(spec.components.securitySchemes)) {
|
|
231
|
+
if (!scheme || typeof scheme !== 'object')
|
|
232
|
+
continue;
|
|
233
|
+
const securityScheme = {
|
|
234
|
+
name,
|
|
235
|
+
type: scheme.type || '',
|
|
236
|
+
description: scheme.description,
|
|
237
|
+
scheme: scheme.scheme,
|
|
238
|
+
bearerFormat: scheme.bearerFormat,
|
|
239
|
+
in: scheme.in,
|
|
240
|
+
flows: scheme.flows,
|
|
241
|
+
};
|
|
242
|
+
schemes.push(securityScheme);
|
|
243
|
+
}
|
|
244
|
+
return schemes;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Extract type from schema object
|
|
248
|
+
*/
|
|
249
|
+
function extractType(schema) {
|
|
250
|
+
if (!schema || typeof schema !== 'object')
|
|
251
|
+
return 'string';
|
|
252
|
+
if (schema.type) {
|
|
253
|
+
if (schema.type === 'array' && schema.items) {
|
|
254
|
+
const itemType = extractType(schema.items);
|
|
255
|
+
return `${itemType}[]`;
|
|
256
|
+
}
|
|
257
|
+
return schema.type;
|
|
258
|
+
}
|
|
259
|
+
if (schema.$ref) {
|
|
260
|
+
// Extract type name from $ref
|
|
261
|
+
const parts = schema.$ref.split('/');
|
|
262
|
+
return parts[parts.length - 1] || 'object';
|
|
263
|
+
}
|
|
264
|
+
return 'object';
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Extract servers information
|
|
268
|
+
*/
|
|
269
|
+
function extractServers(servers) {
|
|
270
|
+
if (!Array.isArray(servers) || servers.length === 0)
|
|
271
|
+
return undefined;
|
|
272
|
+
return servers.map((server) => ({
|
|
273
|
+
url: server.url || '',
|
|
274
|
+
description: server.description,
|
|
275
|
+
variables: server.variables,
|
|
276
|
+
}));
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Extract external documentation
|
|
280
|
+
*/
|
|
281
|
+
function extractExternalDocs(externalDocs) {
|
|
282
|
+
if (!externalDocs || typeof externalDocs !== 'object')
|
|
283
|
+
return undefined;
|
|
284
|
+
return {
|
|
285
|
+
url: externalDocs.url || '',
|
|
286
|
+
description: externalDocs.description,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Extract custom vendor extensions (x-* fields)
|
|
291
|
+
*/
|
|
292
|
+
function extractExtensions(obj) {
|
|
293
|
+
if (!obj || typeof obj !== 'object')
|
|
294
|
+
return undefined;
|
|
295
|
+
const extensions = {};
|
|
296
|
+
let hasExtensions = false;
|
|
297
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
298
|
+
if (key.startsWith('x-')) {
|
|
299
|
+
extensions[key] = value;
|
|
300
|
+
hasExtensions = true;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return hasExtensions ? extensions : undefined;
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/lib/indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI Loader Module
|
|
3
|
+
* Uses @scalar/openapi-parser for robust OpenAPI loading and validation
|
|
4
|
+
*/
|
|
5
|
+
import { OpenAPIV3 } from 'openapi-types';
|
|
6
|
+
export type OpenAPISpec = OpenAPIV3.Document;
|
|
7
|
+
export declare class LoaderError extends Error {
|
|
8
|
+
code: 'NETWORK_ERROR' | 'PARSE_ERROR' | 'VALIDATION_ERROR';
|
|
9
|
+
cause?: Error | undefined;
|
|
10
|
+
constructor(message: string, code: 'NETWORK_ERROR' | 'PARSE_ERROR' | 'VALIDATION_ERROR', cause?: Error | undefined);
|
|
11
|
+
}
|
|
12
|
+
interface LoadOptions {
|
|
13
|
+
maxRetries?: number;
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
retryDelayMs?: number;
|
|
16
|
+
dereference?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Discover the current Bling OpenAPI spec URL automatically.
|
|
20
|
+
*
|
|
21
|
+
* Strategy (handles SPA where URL is embedded in JS bundles, not HTML):
|
|
22
|
+
* 1. Fetch the /referencia page HTML
|
|
23
|
+
* 2. Extract the reference JS bundle URL from <link rel="modulepreload"> tags
|
|
24
|
+
* 3. Fetch that JS bundle
|
|
25
|
+
* 4. Extract the openapi-XXXX.json path from the bundle
|
|
26
|
+
*/
|
|
27
|
+
export declare function discoverOpenAPIUrl(): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Load OpenAPI specification from URL with validation and dereferencing.
|
|
30
|
+
* Uses a disk cache (TTL 15 days) to avoid downloading on every startup.
|
|
31
|
+
*/
|
|
32
|
+
export declare function loadOpenAPISpec(url: string, options?: LoadOptions): Promise<OpenAPISpec>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/lib/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK1C,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;AAE7C,qBAAa,WAAY,SAAQ,KAAK;IAG3B,IAAI,EAAE,eAAe,GAAG,aAAa,GAAG,kBAAkB;IAC1D,KAAK,CAAC,EAAE,KAAK;gBAFpB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,eAAe,GAAG,aAAa,GAAG,kBAAkB,EAC1D,KAAK,CAAC,EAAE,KAAK,YAAA;CAKvB;AAED,UAAU,WAAW;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA+HD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAsD1D;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CA8GtB"}
|