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.
Files changed (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +281 -0
  3. package/dist/index.d.ts +16 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +275 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/embeddings.d.ts +18 -0
  8. package/dist/lib/embeddings.d.ts.map +1 -0
  9. package/dist/lib/embeddings.js +52 -0
  10. package/dist/lib/embeddings.js.map +1 -0
  11. package/dist/lib/indexer.d.ts +13 -0
  12. package/dist/lib/indexer.d.ts.map +1 -0
  13. package/dist/lib/indexer.js +305 -0
  14. package/dist/lib/indexer.js.map +1 -0
  15. package/dist/lib/loader.d.ts +34 -0
  16. package/dist/lib/loader.d.ts.map +1 -0
  17. package/dist/lib/loader.js +267 -0
  18. package/dist/lib/loader.js.map +1 -0
  19. package/dist/lib/openapi-tools.d.ts +38 -0
  20. package/dist/lib/openapi-tools.d.ts.map +1 -0
  21. package/dist/lib/openapi-tools.js +63 -0
  22. package/dist/lib/openapi-tools.js.map +1 -0
  23. package/dist/lib/schema-resolver.d.ts +17 -0
  24. package/dist/lib/schema-resolver.d.ts.map +1 -0
  25. package/dist/lib/schema-resolver.js +173 -0
  26. package/dist/lib/schema-resolver.js.map +1 -0
  27. package/dist/lib/types.d.ts +207 -0
  28. package/dist/lib/types.d.ts.map +1 -0
  29. package/dist/lib/types.js +2 -0
  30. package/dist/lib/types.js.map +1 -0
  31. package/dist/lib/vector-store.d.ts +46 -0
  32. package/dist/lib/vector-store.d.ts.map +1 -0
  33. package/dist/lib/vector-store.js +66 -0
  34. package/dist/lib/vector-store.js.map +1 -0
  35. package/dist/scripts/compare-extraction.d.ts +7 -0
  36. package/dist/scripts/compare-extraction.d.ts.map +1 -0
  37. package/dist/scripts/compare-extraction.js +223 -0
  38. package/dist/scripts/compare-extraction.js.map +1 -0
  39. package/dist/scripts/compare-with-docs-site.d.ts +7 -0
  40. package/dist/scripts/compare-with-docs-site.d.ts.map +1 -0
  41. package/dist/scripts/compare-with-docs-site.js +264 -0
  42. package/dist/scripts/compare-with-docs-site.js.map +1 -0
  43. package/dist/scripts/field-coverage-report.d.ts +14 -0
  44. package/dist/scripts/field-coverage-report.d.ts.map +1 -0
  45. package/dist/scripts/field-coverage-report.js +352 -0
  46. package/dist/scripts/field-coverage-report.js.map +1 -0
  47. package/dist/scripts/final-coverage-report.d.ts +1 -0
  48. package/dist/scripts/final-coverage-report.d.ts.map +1 -0
  49. package/dist/scripts/final-coverage-report.js +2 -0
  50. package/dist/scripts/final-coverage-report.js.map +1 -0
  51. package/dist/scripts/inspect-endpoint.d.ts +15 -0
  52. package/dist/scripts/inspect-endpoint.d.ts.map +1 -0
  53. package/dist/scripts/inspect-endpoint.js +292 -0
  54. package/dist/scripts/inspect-endpoint.js.map +1 -0
  55. package/dist/scripts/performance-validation.d.ts +10 -0
  56. package/dist/scripts/performance-validation.d.ts.map +1 -0
  57. package/dist/scripts/performance-validation.js +123 -0
  58. package/dist/scripts/performance-validation.js.map +1 -0
  59. package/dist/scripts/test-all.d.ts +7 -0
  60. package/dist/scripts/test-all.d.ts.map +1 -0
  61. package/dist/scripts/test-all.js +76 -0
  62. package/dist/scripts/test-all.js.map +1 -0
  63. package/dist/scripts/test-new-fields.d.ts +6 -0
  64. package/dist/scripts/test-new-fields.d.ts.map +1 -0
  65. package/dist/scripts/test-new-fields.js +243 -0
  66. package/dist/scripts/test-new-fields.js.map +1 -0
  67. package/dist/scripts/test-schema-fields.d.ts +7 -0
  68. package/dist/scripts/test-schema-fields.d.ts.map +1 -0
  69. package/dist/scripts/test-schema-fields.js +198 -0
  70. package/dist/scripts/test-schema-fields.js.map +1 -0
  71. package/dist/scripts/validate-extraction.d.ts +15 -0
  72. package/dist/scripts/validate-extraction.d.ts.map +1 -0
  73. package/dist/scripts/validate-extraction.js +294 -0
  74. package/dist/scripts/validate-extraction.js.map +1 -0
  75. package/dist/scripts/validate-full-extraction.d.ts +6 -0
  76. package/dist/scripts/validate-full-extraction.d.ts.map +1 -0
  77. package/dist/scripts/validate-full-extraction.js +399 -0
  78. package/dist/scripts/validate-full-extraction.js.map +1 -0
  79. package/dist/scripts/validate-phase1-fields.d.ts +6 -0
  80. package/dist/scripts/validate-phase1-fields.d.ts.map +1 -0
  81. package/dist/scripts/validate-phase1-fields.js +162 -0
  82. package/dist/scripts/validate-phase1-fields.js.map +1 -0
  83. package/dist/scripts/validate-phase2-fields.d.ts +6 -0
  84. package/dist/scripts/validate-phase2-fields.d.ts.map +1 -0
  85. package/dist/scripts/validate-phase2-fields.js +127 -0
  86. package/dist/scripts/validate-phase2-fields.js.map +1 -0
  87. package/dist/scripts/validate-phase3-fields.d.ts +6 -0
  88. package/dist/scripts/validate-phase3-fields.d.ts.map +1 -0
  89. package/dist/scripts/validate-phase3-fields.js +106 -0
  90. package/dist/scripts/validate-phase3-fields.js.map +1 -0
  91. package/dist/tools/compare-with-openapi-spec.d.ts +10 -0
  92. package/dist/tools/compare-with-openapi-spec.d.ts.map +1 -0
  93. package/dist/tools/compare-with-openapi-spec.js +266 -0
  94. package/dist/tools/compare-with-openapi-spec.js.map +1 -0
  95. package/dist/tools/compare-with-postman.d.ts +25 -0
  96. package/dist/tools/compare-with-postman.d.ts.map +1 -0
  97. package/dist/tools/compare-with-postman.js +257 -0
  98. package/dist/tools/compare-with-postman.js.map +1 -0
  99. package/dist/tools/describe.d.ts +39 -0
  100. package/dist/tools/describe.d.ts.map +1 -0
  101. package/dist/tools/describe.js +64 -0
  102. package/dist/tools/describe.js.map +1 -0
  103. package/dist/tools/get-auth-info.d.ts +33 -0
  104. package/dist/tools/get-auth-info.d.ts.map +1 -0
  105. package/dist/tools/get-auth-info.js +27 -0
  106. package/dist/tools/get-auth-info.js.map +1 -0
  107. package/dist/tools/get-endpoint-details.d.ts +27 -0
  108. package/dist/tools/get-endpoint-details.d.ts.map +1 -0
  109. package/dist/tools/get-endpoint-details.js +59 -0
  110. package/dist/tools/get-endpoint-details.js.map +1 -0
  111. package/dist/tools/get-schema.d.ts +34 -0
  112. package/dist/tools/get-schema.d.ts.map +1 -0
  113. package/dist/tools/get-schema.js +64 -0
  114. package/dist/tools/get-schema.js.map +1 -0
  115. package/dist/tools/list-tags.d.ts +29 -0
  116. package/dist/tools/list-tags.d.ts.map +1 -0
  117. package/dist/tools/list-tags.js +23 -0
  118. package/dist/tools/list-tags.js.map +1 -0
  119. package/dist/tools/read-documentation-page.d.ts +23 -0
  120. package/dist/tools/read-documentation-page.d.ts.map +1 -0
  121. package/dist/tools/read-documentation-page.js +73 -0
  122. package/dist/tools/read-documentation-page.js.map +1 -0
  123. package/dist/tools/search-documentation.d.ts +26 -0
  124. package/dist/tools/search-documentation.d.ts.map +1 -0
  125. package/dist/tools/search-documentation.js +91 -0
  126. package/dist/tools/search-documentation.js.map +1 -0
  127. package/dist/tools/search-endpoints.d.ts +35 -0
  128. package/dist/tools/search-endpoints.d.ts.map +1 -0
  129. package/dist/tools/search-endpoints.js +120 -0
  130. package/dist/tools/search-endpoints.js.map +1 -0
  131. package/dist/tools/search-schemas.d.ts +30 -0
  132. package/dist/tools/search-schemas.d.ts.map +1 -0
  133. package/dist/tools/search-schemas.js +36 -0
  134. package/dist/tools/search-schemas.js.map +1 -0
  135. package/dist/tools/validate-spec.d.ts +44 -0
  136. package/dist/tools/validate-spec.d.ts.map +1 -0
  137. package/dist/tools/validate-spec.js +186 -0
  138. package/dist/tools/validate-spec.js.map +1 -0
  139. package/docs/ajuda_como_gerar_o_access_token.md +8 -0
  140. package/docs/ajuda_como_gerar_o_client_id_e_o_client_secret.md +8 -0
  141. package/docs/ajuda_full.md +35 -0
  142. package/docs/ajuda_preciso_criar_uma_conta_no_bling_para_utilizar_a_api.md +9 -0
  143. package/docs/ajuda_quais_sao_os_limites_da_api.md +9 -0
  144. package/docs/ajuda_qual_e_a_utilidade_do_campo_state.md +9 -0
  145. package/docs/ajuda_qual_e_o_formato_de_retorno_das_respostas_da_api.md +18 -0
  146. package/docs/ajuda_quantos_registros_sao_retornados_por_pagina_em_cada_requisicao.md +9 -0
  147. package/docs/aplicativos_acesso_ao_modulo.md +12 -0
  148. package/docs/aplicativos_como_cadastrar.md +258 -0
  149. package/docs/aplicativos_full.md +276 -0
  150. package/docs/aplicativos_gerenciamento.md +9 -0
  151. package/docs/aplicativos_inscricao.md +8 -0
  152. package/docs/aplicativos_introducao.md +8 -0
  153. package/docs/changelogs-webhooks_2026.md +88 -0
  154. package/docs/changelogs-webhooks_full.md +90 -0
  155. package/docs/changelogs_2026.md +88 -0
  156. package/docs/changelogs_full.md +90 -0
  157. package/docs/guias_como_utilizar_os_tokens.md +20 -0
  158. package/docs/guias_full.md +72 -0
  159. package/docs/guias_fundamentos.md +11 -0
  160. package/docs/guias_introducao.md +9 -0
  161. package/docs/guias_o_que_e_api.md +10 -0
  162. package/docs/guias_oauth_e_tokens_de_acesso.md +9 -0
  163. package/docs/guias_padrao_rest.md +34 -0
  164. package/docs/guias_para_quem_e_destinada_a_api.md +9 -0
  165. package/docs/guias_sobre_o_bling.md +9 -0
  166. package/docs/limites_filtros.md +9 -0
  167. package/docs/limites_full.md +56 -0
  168. package/docs/limites_requisicoes.md +50 -0
  169. package/docs/migracao-jwt_estrutura_e_tamanho_do_token.md +9 -0
  170. package/docs/migracao-jwt_full.md +107 -0
  171. package/docs/migracao-jwt_ganhos_computacionais_e_de_infraestrutura.md +11 -0
  172. package/docs/migracao-jwt_introducao.md +15 -0
  173. package/docs/migracao-jwt_motivacao_da_alteracao.md +9 -0
  174. package/docs/migracao-jwt_tratamento_de_erros_comuns.md +13 -0
  175. package/docs/migracao-jwt_utilizando_jwt_no_bling.md +74 -0
  176. package/docs/publicando_full.md +118 -0
  177. package/docs/publicando_processo.md +9 -0
  178. package/docs/publicando_revisao.md +86 -0
  179. package/docs/publicando_situacoes.md +16 -0
  180. package/docs/publicando_validacao_de_dados.md +23 -0
  181. package/docs/webhooks_acoes.md +12 -0
  182. package/docs/webhooks_autenticacao.md +22 -0
  183. package/docs/webhooks_como_cadastrar.md +20 -0
  184. package/docs/webhooks_entrega_nao_ordenada.md +9 -0
  185. package/docs/webhooks_full.md +453 -0
  186. package/docs/webhooks_idempotencia.md +9 -0
  187. package/docs/webhooks_introducao.md +9 -0
  188. package/docs/webhooks_recebimento_de_eventos.md +8 -0
  189. package/docs/webhooks_recursos.md +374 -0
  190. package/docs/webhooks_retentativas.md +9 -0
  191. package/docs/webhooks_webhooks_vs_polling.md +13 -0
  192. 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"}