@nordsym/apiclaw 1.1.1 → 1.1.3

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 (43) hide show
  1. package/STATUS.md +1 -1
  2. package/dist/credentials.d.ts.map +1 -1
  3. package/dist/credentials.js +26 -0
  4. package/dist/credentials.js.map +1 -1
  5. package/dist/execute.d.ts.map +1 -1
  6. package/dist/execute.js +162 -0
  7. package/dist/execute.js.map +1 -1
  8. package/dist/index.js +2 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/proxy.d.ts.map +1 -1
  11. package/dist/proxy.js +1 -1
  12. package/dist/proxy.js.map +1 -1
  13. package/dist/registry/apis.json +1 -116054
  14. package/landing/src/app/docs/page.tsx +300 -0
  15. package/landing/src/app/page.tsx +1 -1
  16. package/landing/src/lib/apis.json +1 -116054
  17. package/landing/src/lib/stats.json +4 -4
  18. package/package.json +1 -1
  19. package/scripts/add-public-apis.py +625 -0
  20. package/scripts/apisguru-data.json +158837 -0
  21. package/scripts/bonus-batch.py +250 -0
  22. package/scripts/bulk-add-apisguru.js +122 -0
  23. package/scripts/expand-2026-batch.py +335 -0
  24. package/scripts/expand-from-github.py +460 -0
  25. package/scripts/expand-n4ze3m.py +198 -0
  26. package/scripts/expand-niche-batch.py +269 -0
  27. package/scripts/expand-nordic-niche.py +189 -0
  28. package/scripts/expand-tonnyL.py +343 -0
  29. package/scripts/final-batch.py +315 -0
  30. package/scripts/final-push-06.py +242 -0
  31. package/scripts/mega-expansion.py +495 -0
  32. package/scripts/mega-final-06.py +512 -0
  33. package/scripts/more-apis.py +353 -0
  34. package/scripts/night-batch-05.py +546 -0
  35. package/scripts/night-batch-05b.py +427 -0
  36. package/scripts/night-expansion-06.py +325 -0
  37. package/scripts/night-expansion.py +441 -0
  38. package/scripts/super-final-06.py +341 -0
  39. package/src/credentials.ts +28 -0
  40. package/src/execute.ts +193 -0
  41. package/src/index.ts +2 -1
  42. package/src/proxy.ts +1 -1
  43. package/src/registry/apis.json +1 -116054
@@ -0,0 +1,250 @@
1
+ #!/usr/bin/env python3
2
+ """Bonus batch to push over 1000 APIs added"""
3
+
4
+ import json
5
+ import re
6
+ import hashlib
7
+ from datetime import datetime
8
+ from pathlib import Path
9
+
10
+ REGISTRY_PATH = Path(__file__).parent.parent / "src" / "registry" / "apis.json"
11
+
12
+ def gid(name): return re.sub(r'[^a-z0-9]+', '-', name.lower()).strip('-')[:50]
13
+ def uhash(s): return hashlib.md5(s.encode()).hexdigest()[:6]
14
+ def load():
15
+ with open(REGISTRY_PATH, 'r') as f: return json.load(f)
16
+ def save(r):
17
+ with open(REGISTRY_PATH, 'w') as f: json.dump(r, f, indent=2)
18
+
19
+ BONUS = {
20
+ "AI Agents": [
21
+ ("LangChain API", "LLM application framework", "https://python.langchain.com/"),
22
+ ("LlamaIndex API", "Data framework for LLMs", "https://docs.llamaindex.ai/"),
23
+ ("AutoGPT API", "Autonomous AI agent", "https://github.com/Significant-Gravitas/AutoGPT"),
24
+ ("CrewAI API", "AI agent orchestration", "https://www.crewai.io/"),
25
+ ("Semantic Kernel", "AI orchestration SDK", "https://learn.microsoft.com/semantic-kernel/"),
26
+ ("Haystack API", "NLP framework API", "https://haystack.deepset.ai/"),
27
+ ("Flowise API", "LLM workflow builder", "https://flowiseai.com/"),
28
+ ("Dify API", "LLM application platform", "https://docs.dify.ai/"),
29
+ ("Botpress API", "Chatbot platform API", "https://botpress.com/docs/"),
30
+ ("Rasa API", "Conversational AI API", "https://rasa.com/docs/"),
31
+ ("Dialogflow API", "Google chatbot API", "https://cloud.google.com/dialogflow/docs/"),
32
+ ("Amazon Lex API", "Conversational AI", "https://docs.aws.amazon.com/lex/"),
33
+ ("Voiceflow API", "Voice app builder", "https://www.voiceflow.com/"),
34
+ ("Chatfuel API", "Chatbot platform", "https://docs.chatfuel.com/"),
35
+ ("ManyChat API", "Chat marketing API", "https://manychat.com/"),
36
+ ],
37
+ "Vector Databases": [
38
+ ("Pinecone API", "Vector database", "https://docs.pinecone.io/"),
39
+ ("Weaviate API", "Vector search engine", "https://weaviate.io/developers/weaviate/"),
40
+ ("Qdrant API", "Vector similarity search", "https://qdrant.tech/documentation/"),
41
+ ("Milvus API", "Vector database", "https://milvus.io/docs/"),
42
+ ("Chroma API", "AI-native embedding DB", "https://docs.trychroma.com/"),
43
+ ("LanceDB API", "Vector database", "https://lancedb.com/"),
44
+ ("Vespa API", "Big data serving engine", "https://vespa.ai/"),
45
+ ("Zilliz Cloud API", "Managed Milvus", "https://docs.zilliz.com/"),
46
+ ("Deep Lake API", "Data lake for AI", "https://docs.deeplake.ai/"),
47
+ ("SingleStore API", "Real-time database", "https://docs.singlestore.com/"),
48
+ ],
49
+ "API Gateways": [
50
+ ("Kong Gateway API", "API gateway", "https://docs.konghq.com/"),
51
+ ("Tyk API", "API management", "https://tyk.io/docs/"),
52
+ ("AWS API Gateway", "Serverless API management", "https://docs.aws.amazon.com/apigateway/"),
53
+ ("Azure API Management", "API gateway", "https://docs.microsoft.com/azure/api-management/"),
54
+ ("Apigee API", "Google API management", "https://cloud.google.com/apigee/docs"),
55
+ ("MuleSoft API", "Integration platform", "https://docs.mulesoft.com/"),
56
+ ("Postman API", "API development", "https://www.postman.com/"),
57
+ ("Insomnia API", "API client", "https://docs.insomnia.rest/"),
58
+ ("Hoppscotch API", "API development", "https://hoppscotch.io/"),
59
+ ("RapidAPI Hub", "API marketplace", "https://rapidapi.com/"),
60
+ ],
61
+ "Serverless": [
62
+ ("AWS Lambda API", "Serverless compute", "https://docs.aws.amazon.com/lambda/"),
63
+ ("Google Cloud Functions", "Serverless functions", "https://cloud.google.com/functions/docs/"),
64
+ ("Azure Functions", "Serverless compute", "https://docs.microsoft.com/azure/azure-functions/"),
65
+ ("Vercel Functions", "Edge functions", "https://vercel.com/docs/functions"),
66
+ ("Netlify Functions", "Serverless functions", "https://docs.netlify.com/functions/"),
67
+ ("Cloudflare Workers", "Edge compute", "https://developers.cloudflare.com/workers/"),
68
+ ("Deno Deploy", "Edge runtime", "https://deno.com/deploy/docs"),
69
+ ("Supabase Functions", "Edge functions", "https://supabase.com/docs/guides/functions"),
70
+ ("Firebase Functions", "Cloud functions", "https://firebase.google.com/docs/functions"),
71
+ ("Fastly Compute@Edge", "Edge compute", "https://developer.fastly.com/"),
72
+ ],
73
+ "Container/K8s": [
74
+ ("Docker Hub API", "Container registry", "https://docs.docker.com/docker-hub/api/"),
75
+ ("Kubernetes API", "Container orchestration", "https://kubernetes.io/docs/reference/"),
76
+ ("Helm API", "K8s package manager", "https://helm.sh/docs/"),
77
+ ("ArgoCD API", "GitOps for K8s", "https://argo-cd.readthedocs.io/"),
78
+ ("Rancher API", "K8s management", "https://rancher.com/docs/rancher/"),
79
+ ("OpenShift API", "K8s platform", "https://docs.openshift.com/"),
80
+ ("Portainer API", "Container management", "https://docs.portainer.io/api/"),
81
+ ("Nomad API", "Orchestration API", "https://developer.hashicorp.com/nomad/api-docs"),
82
+ ("Podman API", "Container runtime", "https://docs.podman.io/"),
83
+ ("containerd API", "Container runtime", "https://containerd.io/"),
84
+ ],
85
+ "CI/CD": [
86
+ ("GitHub Actions API", "CI/CD platform", "https://docs.github.com/actions"),
87
+ ("GitLab CI API", "CI/CD platform", "https://docs.gitlab.com/ee/api/"),
88
+ ("CircleCI API", "CI/CD platform", "https://circleci.com/docs/api/"),
89
+ ("Travis CI API", "CI/CD platform", "https://docs.travis-ci.com/api/"),
90
+ ("Jenkins API", "Automation server", "https://www.jenkins.io/doc/book/using/remote-access-api/"),
91
+ ("Buildkite API", "CI/CD platform", "https://buildkite.com/docs/apis/"),
92
+ ("Drone CI API", "CI/CD platform", "https://docs.drone.io/api/"),
93
+ ("Semaphore API", "CI/CD platform", "https://docs.semaphoreci.com/reference/api-v2/"),
94
+ ("Codefresh API", "CI/CD platform", "https://codefresh.io/docs/docs/integrations/codefresh-api/"),
95
+ ("Harness API", "CI/CD platform", "https://apidocs.harness.io/"),
96
+ ],
97
+ "Domain/DNS": [
98
+ ("Cloudflare DNS API", "DNS management", "https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-list-dns-records"),
99
+ ("AWS Route 53 API", "DNS service", "https://docs.aws.amazon.com/Route53/"),
100
+ ("Google Cloud DNS", "DNS service", "https://cloud.google.com/dns/docs/reference/"),
101
+ ("GoDaddy API", "Domain registrar", "https://developer.godaddy.com/"),
102
+ ("Namecheap API", "Domain registrar", "https://www.namecheap.com/support/api/"),
103
+ ("Porkbun API", "Domain registrar", "https://porkbun.com/api/json/v3/documentation"),
104
+ ("Dynadot API", "Domain registrar", "https://www.dynadot.com/domain/api.html"),
105
+ ("DNSimple API", "DNS hosting", "https://developer.dnsimple.com/"),
106
+ ("NS1 API", "DNS platform", "https://ns1.com/api"),
107
+ ("Gandi API", "Domain registrar", "https://api.gandi.net/docs/"),
108
+ ],
109
+ "SSL/Security": [
110
+ ("Let's Encrypt API", "Free SSL certificates", "https://letsencrypt.org/docs/"),
111
+ ("DigiCert API", "SSL certificates", "https://dev.digicert.com/"),
112
+ ("Sectigo API", "SSL certificates", "https://sectigo.com/"),
113
+ ("SSL.com API", "SSL certificates", "https://www.ssl.com/"),
114
+ ("ZeroSSL API", "Free SSL certificates", "https://zerossl.com/"),
115
+ ("Cloudflare SSL API", "SSL management", "https://developers.cloudflare.com/ssl/"),
116
+ ("AWS Certificate Manager", "SSL service", "https://docs.aws.amazon.com/acm/"),
117
+ ("Google Certificate Authority", "SSL service", "https://cloud.google.com/certificate-authority-service/docs/"),
118
+ ("Venafi API", "Certificate management", "https://docs.venafi.com/"),
119
+ ("KeyFactor API", "PKI platform", "https://www.keyfactor.com/"),
120
+ ],
121
+ "Data Visualization": [
122
+ ("Tableau API", "BI platform API", "https://www.tableau.com/developer"),
123
+ ("Power BI API", "Microsoft BI API", "https://docs.microsoft.com/power-bi/"),
124
+ ("Looker API", "Google BI platform", "https://cloud.google.com/looker/docs/reference"),
125
+ ("Metabase API", "Open-source BI", "https://www.metabase.com/docs/latest/api-documentation"),
126
+ ("Superset API", "Open-source BI", "https://superset.apache.org/docs/api/"),
127
+ ("Redash API", "Data visualization", "https://redash.io/help/user-guide/integrations-and-api/api"),
128
+ ("Mode Analytics API", "Analytics platform", "https://mode.com/developer/api-reference/"),
129
+ ("Sisense API", "BI platform API", "https://documentation.sisense.com/"),
130
+ ("ThoughtSpot API", "Analytics platform", "https://docs.thoughtspot.com/"),
131
+ ("Domo API", "BI platform API", "https://developer.domo.com/"),
132
+ ("Chartio API", "BI platform (legacy)", "https://chartio.com/"),
133
+ ("Observable API", "Data visualization", "https://observablehq.com/documentation/"),
134
+ ("Plotly API", "Graphing library API", "https://plotly.com/python/"),
135
+ ("D3.js", "Data visualization library", "https://d3js.org/"),
136
+ ("Chart.js", "JavaScript charting", "https://www.chartjs.org/docs/"),
137
+ ],
138
+ "Geospatial": [
139
+ ("ArcGIS API", "GIS platform API", "https://developers.arcgis.com/"),
140
+ ("QGIS API", "Open-source GIS", "https://qgis.org/pyqgis/"),
141
+ ("Cesium API", "3D geospatial", "https://cesium.com/platform/cesium-ion/"),
142
+ ("Mapbox GL API", "Map rendering", "https://docs.mapbox.com/mapbox-gl-js/api/"),
143
+ ("Leaflet API", "Map library", "https://leafletjs.com/reference.html"),
144
+ ("OpenLayers API", "Map library", "https://openlayers.org/en/latest/apidoc/"),
145
+ ("Google Earth Engine", "Geospatial analysis", "https://developers.google.com/earth-engine/"),
146
+ ("Planet API", "Satellite imagery", "https://developers.planet.com/"),
147
+ ("Maxar API", "Satellite imagery", "https://www.maxar.com/"),
148
+ ("Sentinel Hub API", "Satellite data", "https://www.sentinel-hub.com/"),
149
+ ("Nearmap API", "Aerial imagery", "https://www.nearmap.com/"),
150
+ ("UP42 API", "Geospatial platform", "https://docs.up42.com/"),
151
+ ("TomTom Maps API", "Maps and traffic", "https://developer.tomtom.com/"),
152
+ ("What3Words API", "Location encoding", "https://developer.what3words.com/"),
153
+ ("GeoNames API", "Geographical database", "http://www.geonames.org/export/web-services.html"),
154
+ ],
155
+ "Maritime": [
156
+ ("MarineTraffic API", "Ship tracking", "https://www.marinetraffic.com/en/ais-api-services"),
157
+ ("VesselFinder API", "Vessel tracking", "https://www.vesselfinder.com/"),
158
+ ("FleetMon API", "Ship tracking", "https://www.fleetmon.com/api/"),
159
+ ("Spire Maritime API", "AIS data", "https://spire.com/maritime/"),
160
+ ("Pole Star API", "Maritime tracking", "https://www.polestarglobal.com/"),
161
+ ("Windward API", "Maritime analytics", "https://windward.ai/"),
162
+ ("Kpler API", "Commodity tracking", "https://www.kpler.com/"),
163
+ ("VT Explorer API", "Ship tracking", "https://www.vtexplorer.com/"),
164
+ ],
165
+ "Aviation": [
166
+ ("FlightAware API", "Flight tracking", "https://flightaware.com/commercial/aeroapi/"),
167
+ ("FlightRadar24 API", "Flight tracking", "https://www.flightradar24.com/"),
168
+ ("AviationStack API", "Flight data", "https://aviationstack.com/documentation"),
169
+ ("OpenSky Network API", "Air traffic data", "https://openskynetwork.github.io/opensky-api/"),
170
+ ("Amadeus Flight API", "Flight search", "https://developers.amadeus.com/"),
171
+ ("Cirium API", "Aviation analytics", "https://developer.cirium.com/"),
172
+ ("OAG API", "Flight schedules", "https://www.oag.com/"),
173
+ ("ADSB Exchange API", "ADS-B data", "https://www.adsbexchange.com/"),
174
+ ],
175
+ "Space": [
176
+ ("NASA API", "Space and science data", "https://api.nasa.gov/"),
177
+ ("SpaceX API", "SpaceX launch data", "https://github.com/r-spacex/SpaceX-API"),
178
+ ("Open Notify API", "ISS location", "http://open-notify.org/"),
179
+ ("Satellite Passes API", "Satellite visibility", "https://www.n2yo.com/api/"),
180
+ ("Space-Track API", "Orbital data", "https://www.space-track.org/"),
181
+ ("Celestrak API", "TLE data", "https://celestrak.org/"),
182
+ ("JPL Horizons API", "Solar system data", "https://ssd-api.jpl.nasa.gov/"),
183
+ ("NOAA Space Weather", "Space weather API", "https://www.swpc.noaa.gov/"),
184
+ ],
185
+ "Scientific": [
186
+ ("PubMed API", "Biomedical literature", "https://www.ncbi.nlm.nih.gov/home/develop/api/"),
187
+ ("arXiv API", "Scientific papers", "https://arxiv.org/help/api/"),
188
+ ("Semantic Scholar API", "Research papers", "https://www.semanticscholar.org/product/api"),
189
+ ("CrossRef API", "Publication metadata", "https://api.crossref.org/"),
190
+ ("ORCID API", "Researcher IDs", "https://info.orcid.org/documentation/"),
191
+ ("Unpaywall API", "Open access papers", "https://unpaywall.org/products/api"),
192
+ ("OpenAlex API", "Academic graph", "https://docs.openalex.org/"),
193
+ ("Europe PMC API", "Life sciences literature", "https://europepmc.org/RestfulWebService"),
194
+ ("CORE API", "Open research papers", "https://core.ac.uk/services/api"),
195
+ ("Dimensions API", "Research intelligence", "https://docs.dimensions.ai/"),
196
+ ],
197
+ "Climate/Environment": [
198
+ ("OpenAQ API", "Air quality data", "https://docs.openaq.org/"),
199
+ ("AirVisual API", "Air quality", "https://www.iqair.com/air-pollution-data-api"),
200
+ ("Breezometer API", "Environmental data", "https://docs.breezometer.com/"),
201
+ ("AQICN API", "Air quality index", "https://aqicn.org/api/"),
202
+ ("EPA AQS API", "US air quality", "https://aqs.epa.gov/aqsweb/documents/data_api.html"),
203
+ ("Carbon Interface API", "Carbon emissions", "https://docs.carboninterface.com/"),
204
+ ("Climatiq API", "Carbon footprint", "https://www.climatiq.io/docs"),
205
+ ("Watt Time API", "Grid carbon intensity", "https://www.watttime.org/"),
206
+ ("Electricity Maps API", "Carbon intensity", "https://static.electricitymaps.com/api/docs/index.html"),
207
+ ("Global Forest Watch API", "Deforestation data", "https://www.globalforestwatch.org/"),
208
+ ],
209
+ }
210
+
211
+ def main():
212
+ print(f"🎁 Bonus Batch - {datetime.now().strftime('%H:%M')}")
213
+
214
+ registry = load()
215
+ existing = {api['id'] for api in registry['apis']}
216
+
217
+ added = 0
218
+ for cat, apis in BONUS.items():
219
+ for name, desc, link in apis:
220
+ api_id = gid(name)
221
+ if api_id not in existing:
222
+ registry['apis'].append({
223
+ "id": api_id, "name": name, "description": desc,
224
+ "category": cat, "auth": "apiKey", "https": True,
225
+ "cors": "unknown", "link": link, "pricing": "unknown",
226
+ "keywords": [], "source": "bonus_02_22"
227
+ })
228
+ existing.add(api_id)
229
+ added += 1
230
+ else:
231
+ uid = f"{api_id}-{uhash(link)}"
232
+ if uid not in existing:
233
+ registry['apis'].append({
234
+ "id": uid, "name": name, "description": desc,
235
+ "category": cat, "auth": "apiKey", "https": True,
236
+ "cors": "unknown", "link": link, "pricing": "unknown",
237
+ "keywords": [], "source": "bonus_02_22"
238
+ })
239
+ existing.add(uid)
240
+ added += 1
241
+
242
+ registry['count'] = len(registry['apis'])
243
+ registry['lastUpdated'] = datetime.now().strftime('%Y-%m-%d')
244
+ save(registry)
245
+
246
+ print(f"✅ Added {added} | Total: {registry['count']}")
247
+ return added
248
+
249
+ if __name__ == "__main__":
250
+ main()
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * APIClaw Natt-Expansion: Bulk add APIs from APIs.guru
4
+ * Adds ~2500+ OpenAPI-documented APIs
5
+ */
6
+
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+ import { fileURLToPath } from 'url';
10
+
11
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
12
+ const registryPath = path.join(__dirname, '../src/registry/apis.json');
13
+
14
+ // Read existing registry
15
+ const registry = JSON.parse(fs.readFileSync(registryPath, 'utf-8'));
16
+ const existingIds = new Set(registry.apis.map(a => a.id.toLowerCase()));
17
+ const existingNames = new Set(registry.apis.map(a => a.name.toLowerCase()));
18
+
19
+ // APIs.guru data (fetched earlier)
20
+ const apisguru = JSON.parse(fs.readFileSync(path.join(__dirname, 'apisguru-data.json'), 'utf-8'));
21
+
22
+ let added = 0;
23
+ let skipped = 0;
24
+
25
+ // Category mapping from APIs.guru categories
26
+ const categoryMap = {
27
+ 'financial': 'Finance',
28
+ 'payment': 'Finance',
29
+ 'security': 'Security',
30
+ 'cloud': 'Cloud',
31
+ 'developer_tools': 'Development',
32
+ 'location': 'Geocoding',
33
+ 'iot': 'IoT',
34
+ 'marketing': 'Marketing',
35
+ 'social': 'Social',
36
+ 'open_data': 'Open Data',
37
+ 'messaging': 'Communication',
38
+ 'analytics': 'Analytics',
39
+ 'media': 'Media',
40
+ 'search': 'Search',
41
+ 'ecommerce': 'Business',
42
+ 'transportation': 'Transportation',
43
+ 'energy': 'Environment',
44
+ 'telecom': 'Communication',
45
+ 'machine_learning': 'Machine Learning'
46
+ };
47
+
48
+ for (const [key, api] of Object.entries(apisguru)) {
49
+ const preferred = api.preferred;
50
+ const version = api.versions[preferred];
51
+ if (!version || !version.info) continue;
52
+
53
+ const info = version.info;
54
+ const name = info.title || key;
55
+ const id = key.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
56
+
57
+ // Skip if already exists
58
+ if (existingIds.has(id) || existingNames.has(name.toLowerCase())) {
59
+ skipped++;
60
+ continue;
61
+ }
62
+
63
+ // Extract category
64
+ let category = 'Uncategorized';
65
+ const cats = info['x-apisguru-categories'] || [];
66
+ for (const c of cats) {
67
+ if (categoryMap[c]) {
68
+ category = categoryMap[c];
69
+ break;
70
+ }
71
+ }
72
+
73
+ // Extract auth type
74
+ let auth = 'None';
75
+ if (info.securityDefinitions || version.openapiVer?.startsWith('3')) {
76
+ // Most APIs.guru APIs require some auth
77
+ auth = 'apiKey';
78
+ }
79
+
80
+ // Build keywords
81
+ const keywords = [];
82
+ if (info.description) {
83
+ const desc = info.description.toLowerCase();
84
+ if (desc.includes('rest')) keywords.push('rest');
85
+ if (desc.includes('json')) keywords.push('json');
86
+ if (desc.includes('real-time') || desc.includes('realtime')) keywords.push('realtime');
87
+ if (desc.includes('free')) keywords.push('free');
88
+ if (desc.includes('open source') || desc.includes('opensource')) keywords.push('opensource');
89
+ }
90
+ keywords.push(category.toLowerCase());
91
+
92
+ const newApi = {
93
+ id,
94
+ name,
95
+ description: (info.description || 'No description').substring(0, 500).split('\n')[0],
96
+ category,
97
+ auth,
98
+ https: version.swaggerUrl?.startsWith('https') ?? true,
99
+ cors: 'unknown',
100
+ link: version.externalDocs?.url || version.swaggerUrl || `https://api.apis.guru/v2/specs/${key}/${preferred}.json`,
101
+ pricing: 'unknown',
102
+ keywords,
103
+ source: 'apis.guru',
104
+ openapiSpec: version.swaggerUrl
105
+ };
106
+
107
+ registry.apis.push(newApi);
108
+ existingIds.add(id);
109
+ added++;
110
+ }
111
+
112
+ // Update metadata
113
+ registry.count = registry.apis.length;
114
+ registry.lastUpdated = new Date().toISOString().split('T')[0];
115
+
116
+ // Write back
117
+ fs.writeFileSync(registryPath, JSON.stringify(registry, null, 2));
118
+
119
+ console.log(`✅ APIClaw Natt-Expansion Complete`);
120
+ console.log(` Added: ${added} new APIs`);
121
+ console.log(` Skipped: ${skipped} (already exist)`);
122
+ console.log(` Total: ${registry.count} APIs`);