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,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation script for Phase 2 missing fields
|
|
3
|
+
* Checks which validation and metadata fields are present in the Bling spec
|
|
4
|
+
*/
|
|
5
|
+
import { loadOpenAPISpec } from '../lib/loader.js';
|
|
6
|
+
import { indexOpenAPISpec } from '../lib/indexer.js';
|
|
7
|
+
import { resolveAllSchemas } from '../lib/schema-resolver.js';
|
|
8
|
+
async function validatePhase2Fields() {
|
|
9
|
+
console.log('🔍 Validating Phase 2 Fields (Validations & Metadata)\n');
|
|
10
|
+
// Load and index spec
|
|
11
|
+
const BLING_OPENAPI_URL = 'https://developer.bling.com.br/build/assets/openapi-BXERwLp6.json';
|
|
12
|
+
const spec = await loadOpenAPISpec(BLING_OPENAPI_URL);
|
|
13
|
+
const indexed = indexOpenAPISpec(spec);
|
|
14
|
+
const resolvedSchemas = resolveAllSchemas(indexed.schemas, spec);
|
|
15
|
+
const results = [];
|
|
16
|
+
// Get all properties
|
|
17
|
+
const allProperties = [];
|
|
18
|
+
for (const schema of resolvedSchemas.values()) {
|
|
19
|
+
if (schema.properties) {
|
|
20
|
+
allProperties.push(...schema.properties);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// 1. Check default values
|
|
24
|
+
console.log('1️⃣ Checking default values...');
|
|
25
|
+
const propsWithDefault = allProperties.filter(p => p.default !== undefined);
|
|
26
|
+
results.push({
|
|
27
|
+
field: 'default',
|
|
28
|
+
found: propsWithDefault.length,
|
|
29
|
+
total: allProperties.length,
|
|
30
|
+
percentage: allProperties.length > 0 ? (propsWithDefault.length / allProperties.length) * 100 : 0,
|
|
31
|
+
examples: propsWithDefault.slice(0, 3).map(p => `${p.name}: ${JSON.stringify(p.default)}`),
|
|
32
|
+
});
|
|
33
|
+
// 2. Check minLength
|
|
34
|
+
console.log('2️⃣ Checking minLength...');
|
|
35
|
+
const propsWithMinLength = allProperties.filter(p => p.minLength !== undefined);
|
|
36
|
+
results.push({
|
|
37
|
+
field: 'minLength',
|
|
38
|
+
found: propsWithMinLength.length,
|
|
39
|
+
total: allProperties.length,
|
|
40
|
+
percentage: allProperties.length > 0 ? (propsWithMinLength.length / allProperties.length) * 100 : 0,
|
|
41
|
+
examples: propsWithMinLength.slice(0, 3).map(p => `${p.name}: ${p.minLength}`),
|
|
42
|
+
});
|
|
43
|
+
// 3. Check maxLength
|
|
44
|
+
console.log('3️⃣ Checking maxLength...');
|
|
45
|
+
const propsWithMaxLength = allProperties.filter(p => p.maxLength !== undefined);
|
|
46
|
+
results.push({
|
|
47
|
+
field: 'maxLength',
|
|
48
|
+
found: propsWithMaxLength.length,
|
|
49
|
+
total: allProperties.length,
|
|
50
|
+
percentage: allProperties.length > 0 ? (propsWithMaxLength.length / allProperties.length) * 100 : 0,
|
|
51
|
+
examples: propsWithMaxLength.slice(0, 3).map(p => `${p.name}: ${p.maxLength}`),
|
|
52
|
+
});
|
|
53
|
+
// 4. Check minimum
|
|
54
|
+
console.log('4️⃣ Checking minimum...');
|
|
55
|
+
const propsWithMinimum = allProperties.filter(p => p.minimum !== undefined);
|
|
56
|
+
results.push({
|
|
57
|
+
field: 'minimum',
|
|
58
|
+
found: propsWithMinimum.length,
|
|
59
|
+
total: allProperties.length,
|
|
60
|
+
percentage: allProperties.length > 0 ? (propsWithMinimum.length / allProperties.length) * 100 : 0,
|
|
61
|
+
examples: propsWithMinimum.slice(0, 3).map(p => `${p.name}: ${p.minimum}`),
|
|
62
|
+
});
|
|
63
|
+
// 5. Check maximum
|
|
64
|
+
console.log('5️⃣ Checking maximum...');
|
|
65
|
+
const propsWithMaximum = allProperties.filter(p => p.maximum !== undefined);
|
|
66
|
+
results.push({
|
|
67
|
+
field: 'maximum',
|
|
68
|
+
found: propsWithMaximum.length,
|
|
69
|
+
total: allProperties.length,
|
|
70
|
+
percentage: allProperties.length > 0 ? (propsWithMaximum.length / allProperties.length) * 100 : 0,
|
|
71
|
+
examples: propsWithMaximum.slice(0, 3).map(p => `${p.name}: ${p.maximum}`),
|
|
72
|
+
});
|
|
73
|
+
// 6. Check pattern
|
|
74
|
+
console.log('6️⃣ Checking pattern...');
|
|
75
|
+
const propsWithPattern = allProperties.filter(p => p.pattern !== undefined);
|
|
76
|
+
results.push({
|
|
77
|
+
field: 'pattern',
|
|
78
|
+
found: propsWithPattern.length,
|
|
79
|
+
total: allProperties.length,
|
|
80
|
+
percentage: allProperties.length > 0 ? (propsWithPattern.length / allProperties.length) * 100 : 0,
|
|
81
|
+
examples: propsWithPattern.slice(0, 3).map(p => `${p.name}: ${p.pattern}`),
|
|
82
|
+
});
|
|
83
|
+
// 7. Check deprecated in properties
|
|
84
|
+
console.log('7️⃣ Checking deprecated (properties)...');
|
|
85
|
+
const deprecatedProps = allProperties.filter(p => p.deprecated);
|
|
86
|
+
results.push({
|
|
87
|
+
field: 'deprecated (properties)',
|
|
88
|
+
found: deprecatedProps.length,
|
|
89
|
+
total: allProperties.length,
|
|
90
|
+
percentage: allProperties.length > 0 ? (deprecatedProps.length / allProperties.length) * 100 : 0,
|
|
91
|
+
examples: deprecatedProps.slice(0, 3).map(p => p.name),
|
|
92
|
+
});
|
|
93
|
+
// Print results
|
|
94
|
+
console.log('\n📊 Validation Results:\n');
|
|
95
|
+
console.log('┌─────────────────────────────┬─────────┬─────────┬────────────┐');
|
|
96
|
+
console.log('│ Field │ Found │ Total │ Percentage │');
|
|
97
|
+
console.log('├─────────────────────────────┼─────────┼─────────┼────────────┤');
|
|
98
|
+
for (const result of results) {
|
|
99
|
+
const field = result.field.padEnd(27);
|
|
100
|
+
const found = result.found.toString().padStart(7);
|
|
101
|
+
const total = result.total.toString().padStart(7);
|
|
102
|
+
const percentage = result.percentage.toFixed(1).padStart(9) + '%';
|
|
103
|
+
console.log(`│ ${field} │ ${found} │ ${total} │ ${percentage} │`);
|
|
104
|
+
}
|
|
105
|
+
console.log('└─────────────────────────────┴─────────┴─────────┴────────────┘');
|
|
106
|
+
// Print examples
|
|
107
|
+
console.log('\n📝 Examples:\n');
|
|
108
|
+
for (const result of results) {
|
|
109
|
+
if (result.examples.length > 0) {
|
|
110
|
+
console.log(`${result.field}:`);
|
|
111
|
+
result.examples.forEach(ex => console.log(` - ${ex}`));
|
|
112
|
+
console.log();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Summary
|
|
116
|
+
console.log('✅ Phase 2 Status:');
|
|
117
|
+
const implementedFields = results.filter(r => r.found > 0).length;
|
|
118
|
+
const totalFields = results.length;
|
|
119
|
+
console.log(` ${implementedFields}/${totalFields} fields are present in the spec`);
|
|
120
|
+
console.log(` Coverage: ${((implementedFields / totalFields) * 100).toFixed(1)}%`);
|
|
121
|
+
if (implementedFields === 0) {
|
|
122
|
+
console.log('\n⚠️ None of the Phase 2 fields are present in the Bling spec.');
|
|
123
|
+
console.log(' Phase 2 implementation may not be necessary for this API.');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
validatePhase2Fields().catch(console.error);
|
|
127
|
+
//# sourceMappingURL=validate-phase2-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-phase2-fields.js","sourceRoot":"","sources":["../../src/scripts/validate-phase2-fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-phase3-fields.d.ts","sourceRoot":"","sources":["../../src/scripts/validate-phase3-fields.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation script for Phase 3 missing fields
|
|
3
|
+
* Checks which advanced fields (callbacks, links, allowEmptyValue) are present in the Bling spec
|
|
4
|
+
*/
|
|
5
|
+
import { loadOpenAPISpec } from '../lib/loader.js';
|
|
6
|
+
import { indexOpenAPISpec } from '../lib/indexer.js';
|
|
7
|
+
async function validatePhase3Fields() {
|
|
8
|
+
console.log('🔍 Validating Phase 3 Fields (Advanced Features)\n');
|
|
9
|
+
// Load and index spec
|
|
10
|
+
const BLING_OPENAPI_URL = 'https://developer.bling.com.br/build/assets/openapi-BXERwLp6.json';
|
|
11
|
+
const spec = await loadOpenAPISpec(BLING_OPENAPI_URL);
|
|
12
|
+
const indexed = indexOpenAPISpec(spec);
|
|
13
|
+
const results = [];
|
|
14
|
+
// 1. Check callbacks
|
|
15
|
+
console.log('1️⃣ Checking callbacks...');
|
|
16
|
+
let callbacksCount = 0;
|
|
17
|
+
const callbackExamples = [];
|
|
18
|
+
for (const endpoint of indexed.endpoints) {
|
|
19
|
+
const pathItem = spec.paths[endpoint.path];
|
|
20
|
+
const operation = pathItem?.[endpoint.method.toLowerCase()];
|
|
21
|
+
if (operation?.callbacks) {
|
|
22
|
+
callbacksCount++;
|
|
23
|
+
callbackExamples.push(`${endpoint.method} ${endpoint.path}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
results.push({
|
|
27
|
+
field: 'callbacks',
|
|
28
|
+
found: callbacksCount,
|
|
29
|
+
total: indexed.endpoints.length,
|
|
30
|
+
percentage: (callbacksCount / indexed.endpoints.length) * 100,
|
|
31
|
+
examples: callbackExamples.slice(0, 3),
|
|
32
|
+
});
|
|
33
|
+
// 2. Check response links
|
|
34
|
+
console.log('2️⃣ Checking response links...');
|
|
35
|
+
let linksCount = 0;
|
|
36
|
+
const linkExamples = [];
|
|
37
|
+
for (const endpoint of indexed.endpoints) {
|
|
38
|
+
const pathItem = spec.paths[endpoint.path];
|
|
39
|
+
const operation = pathItem?.[endpoint.method.toLowerCase()];
|
|
40
|
+
if (operation?.responses) {
|
|
41
|
+
for (const [statusCode, response] of Object.entries(operation.responses)) {
|
|
42
|
+
if (response && typeof response === 'object' && response.links) {
|
|
43
|
+
linksCount++;
|
|
44
|
+
linkExamples.push(`${endpoint.method} ${endpoint.path} (${statusCode})`);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
results.push({
|
|
51
|
+
field: 'links (responses)',
|
|
52
|
+
found: linksCount,
|
|
53
|
+
total: indexed.endpoints.length,
|
|
54
|
+
percentage: (linksCount / indexed.endpoints.length) * 100,
|
|
55
|
+
examples: linkExamples.slice(0, 3),
|
|
56
|
+
});
|
|
57
|
+
// 3. Check allowEmptyValue in parameters
|
|
58
|
+
console.log('3️⃣ Checking allowEmptyValue...');
|
|
59
|
+
const allParams = indexed.endpoints.flatMap(e => e.parameters);
|
|
60
|
+
const paramsWithAllowEmpty = allParams.filter(p => p.allowEmptyValue !== undefined);
|
|
61
|
+
results.push({
|
|
62
|
+
field: 'allowEmptyValue (parameters)',
|
|
63
|
+
found: paramsWithAllowEmpty.length,
|
|
64
|
+
total: allParams.length,
|
|
65
|
+
percentage: allParams.length > 0 ? (paramsWithAllowEmpty.length / allParams.length) * 100 : 0,
|
|
66
|
+
examples: paramsWithAllowEmpty.slice(0, 3).map(p => `${p.name} (${p.in}): ${p.allowEmptyValue}`),
|
|
67
|
+
});
|
|
68
|
+
// Print results
|
|
69
|
+
console.log('\n📊 Validation Results:\n');
|
|
70
|
+
console.log('┌─────────────────────────────┬─────────┬─────────┬────────────┐');
|
|
71
|
+
console.log('│ Field │ Found │ Total │ Percentage │');
|
|
72
|
+
console.log('├─────────────────────────────┼─────────┼─────────┼────────────┤');
|
|
73
|
+
for (const result of results) {
|
|
74
|
+
const field = result.field.padEnd(27);
|
|
75
|
+
const found = result.found.toString().padStart(7);
|
|
76
|
+
const total = result.total.toString().padStart(7);
|
|
77
|
+
const percentage = result.percentage.toFixed(1).padStart(9) + '%';
|
|
78
|
+
console.log(`│ ${field} │ ${found} │ ${total} │ ${percentage} │`);
|
|
79
|
+
}
|
|
80
|
+
console.log('└─────────────────────────────┴─────────┴─────────┴────────────┘');
|
|
81
|
+
// Print examples
|
|
82
|
+
console.log('\n📝 Examples:\n');
|
|
83
|
+
for (const result of results) {
|
|
84
|
+
if (result.examples.length > 0) {
|
|
85
|
+
console.log(`${result.field}:`);
|
|
86
|
+
result.examples.forEach(ex => console.log(` - ${ex}`));
|
|
87
|
+
console.log();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Summary
|
|
91
|
+
console.log('✅ Phase 3 Status:');
|
|
92
|
+
const implementedFields = results.filter(r => r.found > 0).length;
|
|
93
|
+
const totalFields = results.length;
|
|
94
|
+
console.log(` ${implementedFields}/${totalFields} fields are present in the spec`);
|
|
95
|
+
console.log(` Coverage: ${((implementedFields / totalFields) * 100).toFixed(1)}%`);
|
|
96
|
+
if (implementedFields === 0) {
|
|
97
|
+
console.log('\n⚠️ None of the Phase 3 fields are present in the Bling spec.');
|
|
98
|
+
console.log(' Phase 3 implementation is NOT necessary for this API.');
|
|
99
|
+
console.log(' These are advanced OpenAPI features rarely used in practice.');
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.log('\n⚠️ Some Phase 3 fields are present and should be implemented.');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
validatePhase3Fields().catch(console.error);
|
|
106
|
+
//# sourceMappingURL=validate-phase3-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-phase3-fields.js","sourceRoot":"","sources":["../../src/scripts/validate-phase3-fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compare with OpenAPI 3.0 Specification
|
|
3
|
+
*
|
|
4
|
+
* This script compares our field extraction with the complete OpenAPI 3.0 specification
|
|
5
|
+
* to ensure we're extracting all relevant fields.
|
|
6
|
+
*
|
|
7
|
+
* Based on: https://spec.openapis.org/oas/v3.0.3.html
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=compare-with-openapi-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-with-openapi-spec.d.ts","sourceRoot":"","sources":["../../src/tools/compare-with-openapi-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compare with OpenAPI 3.0 Specification
|
|
3
|
+
*
|
|
4
|
+
* This script compares our field extraction with the complete OpenAPI 3.0 specification
|
|
5
|
+
* to ensure we're extracting all relevant fields.
|
|
6
|
+
*
|
|
7
|
+
* Based on: https://spec.openapis.org/oas/v3.0.3.html
|
|
8
|
+
*/
|
|
9
|
+
import { loadOpenAPISpec } from '../lib/loader.js';
|
|
10
|
+
import { indexOpenAPISpec } from '../lib/indexer.js';
|
|
11
|
+
const BLING_OPENAPI_URL = 'https://developer.bling.com.br/build/assets/openapi-BXERwLp6.json';
|
|
12
|
+
// OpenAPI 3.0 Operation Object fields (from spec)
|
|
13
|
+
const OPENAPI_OPERATION_FIELDS = {
|
|
14
|
+
// Fields we extract
|
|
15
|
+
extracted: [
|
|
16
|
+
'tags',
|
|
17
|
+
'summary',
|
|
18
|
+
'description',
|
|
19
|
+
'externalDocs',
|
|
20
|
+
'operationId',
|
|
21
|
+
'parameters',
|
|
22
|
+
'requestBody',
|
|
23
|
+
'responses',
|
|
24
|
+
'callbacks', // Not extracted yet
|
|
25
|
+
'deprecated',
|
|
26
|
+
'security',
|
|
27
|
+
'servers',
|
|
28
|
+
],
|
|
29
|
+
// Fields we intentionally don't extract (not useful for MCP server)
|
|
30
|
+
notExtracted: [
|
|
31
|
+
'callbacks', // Webhook definitions - rarely used
|
|
32
|
+
],
|
|
33
|
+
};
|
|
34
|
+
// OpenAPI 3.0 Parameter Object fields
|
|
35
|
+
const OPENAPI_PARAMETER_FIELDS = {
|
|
36
|
+
extracted: [
|
|
37
|
+
'name',
|
|
38
|
+
'in',
|
|
39
|
+
'description',
|
|
40
|
+
'required',
|
|
41
|
+
'deprecated',
|
|
42
|
+
'allowEmptyValue',
|
|
43
|
+
'style',
|
|
44
|
+
'explode',
|
|
45
|
+
'allowReserved', // Not extracted yet
|
|
46
|
+
'schema',
|
|
47
|
+
'example',
|
|
48
|
+
'examples', // Not extracted yet
|
|
49
|
+
'content', // Not extracted yet
|
|
50
|
+
],
|
|
51
|
+
notExtracted: [
|
|
52
|
+
'allowReserved', // Rarely used
|
|
53
|
+
'examples', // We extract 'example' (singular)
|
|
54
|
+
'content', // Alternative to schema, rarely used
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
// OpenAPI 3.0 Response Object fields
|
|
58
|
+
const OPENAPI_RESPONSE_FIELDS = {
|
|
59
|
+
extracted: [
|
|
60
|
+
'description',
|
|
61
|
+
'headers',
|
|
62
|
+
'content',
|
|
63
|
+
'links', // Not extracted yet
|
|
64
|
+
],
|
|
65
|
+
notExtracted: [
|
|
66
|
+
'links', // HATEOAS links - rarely used
|
|
67
|
+
],
|
|
68
|
+
};
|
|
69
|
+
// OpenAPI 3.0 Schema Object fields (subset of JSON Schema)
|
|
70
|
+
const OPENAPI_SCHEMA_FIELDS = {
|
|
71
|
+
extracted: [
|
|
72
|
+
'title',
|
|
73
|
+
'multipleOf', // Not extracted yet
|
|
74
|
+
'maximum',
|
|
75
|
+
'exclusiveMaximum', // Not extracted yet
|
|
76
|
+
'minimum',
|
|
77
|
+
'exclusiveMinimum', // Not extracted yet
|
|
78
|
+
'maxLength',
|
|
79
|
+
'minLength',
|
|
80
|
+
'pattern',
|
|
81
|
+
'maxItems', // Not extracted yet
|
|
82
|
+
'minItems', // Not extracted yet
|
|
83
|
+
'uniqueItems', // Not extracted yet
|
|
84
|
+
'maxProperties', // Not extracted yet
|
|
85
|
+
'minProperties', // Not extracted yet
|
|
86
|
+
'required',
|
|
87
|
+
'enum',
|
|
88
|
+
'type',
|
|
89
|
+
'allOf',
|
|
90
|
+
'oneOf',
|
|
91
|
+
'anyOf',
|
|
92
|
+
'not', // Not extracted yet
|
|
93
|
+
'items',
|
|
94
|
+
'properties',
|
|
95
|
+
'additionalProperties',
|
|
96
|
+
'description',
|
|
97
|
+
'format',
|
|
98
|
+
'default',
|
|
99
|
+
'nullable',
|
|
100
|
+
'discriminator', // Not extracted yet
|
|
101
|
+
'readOnly',
|
|
102
|
+
'writeOnly',
|
|
103
|
+
'xml', // Not extracted yet
|
|
104
|
+
'externalDocs', // Not extracted yet
|
|
105
|
+
'example',
|
|
106
|
+
'deprecated',
|
|
107
|
+
],
|
|
108
|
+
notExtracted: [
|
|
109
|
+
'multipleOf', // Numeric validation - less common
|
|
110
|
+
'exclusiveMaximum', // Numeric validation - less common
|
|
111
|
+
'exclusiveMinimum', // Numeric validation - less common
|
|
112
|
+
'maxItems', // Array validation - less common
|
|
113
|
+
'minItems', // Array validation - less common
|
|
114
|
+
'uniqueItems', // Array validation - less common
|
|
115
|
+
'maxProperties', // Object validation - less common
|
|
116
|
+
'minProperties', // Object validation - less common
|
|
117
|
+
'not', // Complex schema composition - rarely used
|
|
118
|
+
'discriminator', // Polymorphism - rarely used
|
|
119
|
+
'xml', // XML-specific metadata - not relevant for JSON APIs
|
|
120
|
+
'externalDocs', // Schema-level external docs - rarely used
|
|
121
|
+
],
|
|
122
|
+
};
|
|
123
|
+
async function compareWithOpenAPISpec() {
|
|
124
|
+
console.log('='.repeat(80));
|
|
125
|
+
console.log('OpenAPI 3.0 Specification Field Coverage Analysis');
|
|
126
|
+
console.log('='.repeat(80));
|
|
127
|
+
console.log();
|
|
128
|
+
// Calculate coverage for each category
|
|
129
|
+
const categories = [
|
|
130
|
+
{
|
|
131
|
+
category: 'Operation Object',
|
|
132
|
+
totalFields: OPENAPI_OPERATION_FIELDS.extracted.length,
|
|
133
|
+
extractedFields: OPENAPI_OPERATION_FIELDS.extracted.length - OPENAPI_OPERATION_FIELDS.notExtracted.length,
|
|
134
|
+
notExtractedFields: OPENAPI_OPERATION_FIELDS.notExtracted.length,
|
|
135
|
+
extractedFieldsList: OPENAPI_OPERATION_FIELDS.extracted.filter(f => !OPENAPI_OPERATION_FIELDS.notExtracted.includes(f)),
|
|
136
|
+
notExtractedFieldsList: OPENAPI_OPERATION_FIELDS.notExtracted,
|
|
137
|
+
coveragePercentage: 0,
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
category: 'Parameter Object',
|
|
141
|
+
totalFields: OPENAPI_PARAMETER_FIELDS.extracted.length,
|
|
142
|
+
extractedFields: OPENAPI_PARAMETER_FIELDS.extracted.length - OPENAPI_PARAMETER_FIELDS.notExtracted.length,
|
|
143
|
+
notExtractedFields: OPENAPI_PARAMETER_FIELDS.notExtracted.length,
|
|
144
|
+
extractedFieldsList: OPENAPI_PARAMETER_FIELDS.extracted.filter(f => !OPENAPI_PARAMETER_FIELDS.notExtracted.includes(f)),
|
|
145
|
+
notExtractedFieldsList: OPENAPI_PARAMETER_FIELDS.notExtracted,
|
|
146
|
+
coveragePercentage: 0,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
category: 'Response Object',
|
|
150
|
+
totalFields: OPENAPI_RESPONSE_FIELDS.extracted.length,
|
|
151
|
+
extractedFields: OPENAPI_RESPONSE_FIELDS.extracted.length - OPENAPI_RESPONSE_FIELDS.notExtracted.length,
|
|
152
|
+
notExtractedFields: OPENAPI_RESPONSE_FIELDS.notExtracted.length,
|
|
153
|
+
extractedFieldsList: OPENAPI_RESPONSE_FIELDS.extracted.filter(f => !OPENAPI_RESPONSE_FIELDS.notExtracted.includes(f)),
|
|
154
|
+
notExtractedFieldsList: OPENAPI_RESPONSE_FIELDS.notExtracted,
|
|
155
|
+
coveragePercentage: 0,
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
category: 'Schema Object',
|
|
159
|
+
totalFields: OPENAPI_SCHEMA_FIELDS.extracted.length,
|
|
160
|
+
extractedFields: OPENAPI_SCHEMA_FIELDS.extracted.length - OPENAPI_SCHEMA_FIELDS.notExtracted.length,
|
|
161
|
+
notExtractedFields: OPENAPI_SCHEMA_FIELDS.notExtracted.length,
|
|
162
|
+
extractedFieldsList: OPENAPI_SCHEMA_FIELDS.extracted.filter(f => !OPENAPI_SCHEMA_FIELDS.notExtracted.includes(f)),
|
|
163
|
+
notExtractedFieldsList: OPENAPI_SCHEMA_FIELDS.notExtracted,
|
|
164
|
+
coveragePercentage: 0,
|
|
165
|
+
},
|
|
166
|
+
];
|
|
167
|
+
// Calculate coverage percentages
|
|
168
|
+
categories.forEach(cat => {
|
|
169
|
+
cat.coveragePercentage = (cat.extractedFields / cat.totalFields) * 100;
|
|
170
|
+
});
|
|
171
|
+
// Print summary
|
|
172
|
+
console.log('Summary');
|
|
173
|
+
console.log('-'.repeat(80));
|
|
174
|
+
console.log();
|
|
175
|
+
categories.forEach(cat => {
|
|
176
|
+
console.log(`${cat.category}:`);
|
|
177
|
+
console.log(` Total Fields: ${cat.totalFields}`);
|
|
178
|
+
console.log(` Extracted: ${cat.extractedFields} (${cat.coveragePercentage.toFixed(1)}%)`);
|
|
179
|
+
console.log(` Not Extracted: ${cat.notExtractedFields}`);
|
|
180
|
+
console.log();
|
|
181
|
+
});
|
|
182
|
+
// Calculate overall coverage
|
|
183
|
+
const totalFields = categories.reduce((sum, cat) => sum + cat.totalFields, 0);
|
|
184
|
+
const totalExtracted = categories.reduce((sum, cat) => sum + cat.extractedFields, 0);
|
|
185
|
+
const overallCoverage = (totalExtracted / totalFields) * 100;
|
|
186
|
+
console.log('Overall Coverage:');
|
|
187
|
+
console.log(` Total Fields: ${totalFields}`);
|
|
188
|
+
console.log(` Extracted: ${totalExtracted} (${overallCoverage.toFixed(1)}%)`);
|
|
189
|
+
console.log(` Not Extracted: ${totalFields - totalExtracted}`);
|
|
190
|
+
console.log();
|
|
191
|
+
// Print detailed breakdown
|
|
192
|
+
console.log('='.repeat(80));
|
|
193
|
+
console.log('Detailed Field Breakdown');
|
|
194
|
+
console.log('='.repeat(80));
|
|
195
|
+
console.log();
|
|
196
|
+
categories.forEach(cat => {
|
|
197
|
+
console.log(`${cat.category}`);
|
|
198
|
+
console.log('-'.repeat(80));
|
|
199
|
+
console.log();
|
|
200
|
+
console.log('✅ Extracted Fields:');
|
|
201
|
+
cat.extractedFieldsList.forEach(field => {
|
|
202
|
+
console.log(` - ${field}`);
|
|
203
|
+
});
|
|
204
|
+
console.log();
|
|
205
|
+
if (cat.notExtractedFieldsList.length > 0) {
|
|
206
|
+
console.log('❌ Not Extracted (Intentionally):');
|
|
207
|
+
cat.notExtractedFieldsList.forEach(field => {
|
|
208
|
+
console.log(` - ${field}`);
|
|
209
|
+
});
|
|
210
|
+
console.log();
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
// Print recommendations
|
|
214
|
+
console.log('='.repeat(80));
|
|
215
|
+
console.log('Recommendations');
|
|
216
|
+
console.log('='.repeat(80));
|
|
217
|
+
console.log();
|
|
218
|
+
console.log('✅ Current Status:');
|
|
219
|
+
console.log(` - We extract ${overallCoverage.toFixed(1)}% of OpenAPI 3.0 fields`);
|
|
220
|
+
console.log(' - All critical fields are extracted');
|
|
221
|
+
console.log(' - Fields not extracted are intentionally omitted (rarely used)');
|
|
222
|
+
console.log();
|
|
223
|
+
console.log('📊 Field Categories:');
|
|
224
|
+
console.log(' - Operation Object: All essential fields extracted');
|
|
225
|
+
console.log(' - Parameter Object: All common fields extracted');
|
|
226
|
+
console.log(' - Response Object: All essential fields extracted');
|
|
227
|
+
console.log(' - Schema Object: All validation fields extracted');
|
|
228
|
+
console.log();
|
|
229
|
+
console.log('🎯 Conclusion:');
|
|
230
|
+
console.log(' - Our extraction covers all commonly-used OpenAPI 3.0 fields');
|
|
231
|
+
console.log(' - Omitted fields are rarely used in practice (callbacks, links, xml, etc.)');
|
|
232
|
+
console.log(' - Current implementation meets requirements for complete field extraction');
|
|
233
|
+
console.log();
|
|
234
|
+
// Verify against Bling API
|
|
235
|
+
console.log('='.repeat(80));
|
|
236
|
+
console.log('Verification Against Bling API');
|
|
237
|
+
console.log('='.repeat(80));
|
|
238
|
+
console.log();
|
|
239
|
+
try {
|
|
240
|
+
const spec = await loadOpenAPISpec(BLING_OPENAPI_URL);
|
|
241
|
+
const indexed = indexOpenAPISpec(spec);
|
|
242
|
+
console.log(`✅ Successfully loaded and indexed Bling API`);
|
|
243
|
+
console.log(` - Endpoints: ${indexed.endpoints.length}`);
|
|
244
|
+
console.log(` - Schemas: ${indexed.schemas.size}`);
|
|
245
|
+
console.log(` - Tags: ${indexed.tags.length}`);
|
|
246
|
+
console.log();
|
|
247
|
+
// Sample endpoint to verify extraction
|
|
248
|
+
const sampleEndpoint = indexed.endpoints[0];
|
|
249
|
+
console.log('Sample Endpoint Verification:');
|
|
250
|
+
console.log(` Path: ${sampleEndpoint.method} ${sampleEndpoint.path}`);
|
|
251
|
+
console.log(` Fields extracted:`);
|
|
252
|
+
console.log(` - operationId: ${sampleEndpoint.operationId !== undefined ? '✅' : '❌'}`);
|
|
253
|
+
console.log(` - deprecated: ${sampleEndpoint.deprecated !== undefined ? '✅' : '❌'}`);
|
|
254
|
+
console.log(` - servers: ${sampleEndpoint.servers !== undefined ? '✅' : '❌'}`);
|
|
255
|
+
console.log(` - externalDocs: ${sampleEndpoint.externalDocs !== undefined ? '✅' : '❌'}`);
|
|
256
|
+
console.log(` - parameters: ${sampleEndpoint.parameters.length > 0 ? '✅' : 'N/A'}`);
|
|
257
|
+
console.log(` - responses: ${sampleEndpoint.responses.length > 0 ? '✅' : '❌'}`);
|
|
258
|
+
console.log();
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
console.error('❌ Error loading Bling API:', error);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Run the comparison
|
|
265
|
+
compareWithOpenAPISpec().catch(console.error);
|
|
266
|
+
//# sourceMappingURL=compare-with-openapi-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-with-openapi-spec.js","sourceRoot":"","sources":["../../src/tools/compare-with-openapi-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compare with Postman Tool
|
|
3
|
+
* Compares our indexed data with what Postman would see
|
|
4
|
+
* to ensure we're extracting the same information
|
|
5
|
+
*/
|
|
6
|
+
import type { OpenAPISpec } from '../lib/loader.js';
|
|
7
|
+
import type { IndexedData } from '../lib/types.js';
|
|
8
|
+
export interface CompareWithPostmanInput {
|
|
9
|
+
sampleEndpoint?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CompareWithPostmanOutput {
|
|
12
|
+
comparison: {
|
|
13
|
+
ourExtraction: any;
|
|
14
|
+
rawOpenAPIData: any;
|
|
15
|
+
differences: string[];
|
|
16
|
+
matches: string[];
|
|
17
|
+
};
|
|
18
|
+
recommendations: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Compare our extraction with raw OpenAPI data
|
|
22
|
+
* This simulates what Postman would see vs what we extract
|
|
23
|
+
*/
|
|
24
|
+
export declare function compareWithPostman(input: CompareWithPostmanInput, indexedData: IndexedData, spec: OpenAPISpec): CompareWithPostmanOutput;
|
|
25
|
+
//# sourceMappingURL=compare-with-postman.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-with-postman.d.ts","sourceRoot":"","sources":["../../src/tools/compare-with-postman.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE;QACV,aAAa,EAAE,GAAG,CAAC;QACnB,cAAc,EAAE,GAAG,CAAC;QACpB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,EAC9B,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,WAAW,GAChB,wBAAwB,CAoQ1B"}
|