@nordsym/apiclaw 1.0.0 → 1.1.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 (154) hide show
  1. package/AGENTS.md +74 -0
  2. package/HEARTBEAT.md +4 -0
  3. package/IDENTITY.md +22 -0
  4. package/README.md +197 -202
  5. package/SOUL.md +36 -0
  6. package/STATUS.md +237 -0
  7. package/TOOLS.md +36 -0
  8. package/USER.md +17 -0
  9. package/{backend/convex → convex}/_generated/api.d.ts +6 -6
  10. package/convex/credits.ts +211 -0
  11. package/convex/http.ts +490 -0
  12. package/convex/providers.ts +516 -0
  13. package/convex/purchases.ts +183 -0
  14. package/convex/schema.ts +180 -0
  15. package/convex.json +3 -0
  16. package/dist/credentials.d.ts +19 -0
  17. package/dist/credentials.d.ts.map +1 -0
  18. package/dist/credentials.js +158 -0
  19. package/dist/credentials.js.map +1 -0
  20. package/dist/credits.d.ts +14 -11
  21. package/dist/credits.d.ts.map +1 -1
  22. package/dist/credits.js +151 -99
  23. package/dist/credits.js.map +1 -1
  24. package/dist/discovery.d.ts +7 -16
  25. package/dist/discovery.d.ts.map +1 -1
  26. package/dist/discovery.js +33 -40
  27. package/dist/discovery.js.map +1 -1
  28. package/dist/execute.d.ts +19 -0
  29. package/dist/execute.d.ts.map +1 -0
  30. package/dist/execute.js +285 -0
  31. package/dist/execute.js.map +1 -0
  32. package/dist/index.js +106 -30
  33. package/dist/index.js.map +1 -1
  34. package/dist/proxy.d.ts +6 -0
  35. package/dist/proxy.d.ts.map +1 -0
  36. package/dist/proxy.js +19 -0
  37. package/dist/proxy.js.map +1 -0
  38. package/dist/registry/apis.json +95362 -202
  39. package/dist/registry/apis_expanded.json +100853 -0
  40. package/dist/stripe.d.ts +68 -0
  41. package/dist/stripe.d.ts.map +1 -0
  42. package/dist/stripe.js +196 -0
  43. package/dist/stripe.js.map +1 -0
  44. package/dist/test.d.ts +3 -2
  45. package/dist/test.d.ts.map +1 -1
  46. package/dist/test.js +105 -75
  47. package/dist/test.js.map +1 -1
  48. package/dist/types.d.ts +0 -28
  49. package/dist/types.d.ts.map +1 -1
  50. package/dist/webhook.d.ts +2 -0
  51. package/dist/webhook.d.ts.map +1 -0
  52. package/dist/webhook.js +90 -0
  53. package/dist/webhook.js.map +1 -0
  54. package/landing/DESIGN.md +343 -0
  55. package/landing/package-lock.json +1190 -40
  56. package/landing/package.json +5 -2
  57. package/landing/public/android-chrome-192x192.png +0 -0
  58. package/landing/public/android-chrome-512x512.png +0 -0
  59. package/landing/public/apple-touch-icon.png +0 -0
  60. package/landing/public/demo.gif +0 -0
  61. package/landing/public/demo.mp4 +0 -0
  62. package/landing/public/favicon-16x16.png +0 -0
  63. package/landing/public/favicon-32x32.png +0 -0
  64. package/landing/public/favicon.ico +0 -0
  65. package/landing/public/favicon.svg +3 -0
  66. package/landing/public/icon.svg +47 -0
  67. package/landing/public/logo-mono.svg +37 -0
  68. package/landing/public/logo-simple.svg +45 -0
  69. package/landing/public/logo.svg +84 -0
  70. package/landing/public/og-image.png +0 -0
  71. package/landing/public/og-template.html +184 -0
  72. package/landing/public/site.webmanifest +31 -0
  73. package/landing/scripts/generate-assets.js +284 -0
  74. package/landing/scripts/generate-pngs.js +48 -0
  75. package/landing/scripts/generate-stats.js +42 -0
  76. package/landing/src/app/admin/page.tsx +348 -0
  77. package/landing/src/app/api/auth/magic-link/route.ts +73 -0
  78. package/landing/src/app/api/auth/session/route.ts +38 -0
  79. package/landing/src/app/api/auth/verify/route.ts +43 -0
  80. package/landing/src/app/api/og/route.tsx +74 -0
  81. package/landing/src/app/globals.css +439 -100
  82. package/landing/src/app/layout.tsx +37 -9
  83. package/landing/src/app/page.tsx +640 -552
  84. package/landing/src/app/providers/dashboard/login/page.tsx +176 -0
  85. package/landing/src/app/providers/dashboard/page.tsx +589 -0
  86. package/landing/src/app/providers/dashboard/verify/page.tsx +106 -0
  87. package/landing/src/app/providers/layout.tsx +14 -0
  88. package/landing/src/app/providers/page.tsx +402 -0
  89. package/landing/src/app/providers/register/page.tsx +670 -0
  90. package/landing/src/components/ProviderDashboard.tsx +794 -0
  91. package/landing/src/hooks/useDashboardData.ts +99 -0
  92. package/landing/src/lib/apis.json +116054 -0
  93. package/landing/src/lib/convex-client.ts +106 -0
  94. package/landing/src/lib/mock-data.ts +285 -0
  95. package/landing/src/lib/stats.json +6 -0
  96. package/landing/tailwind.config.ts +12 -11
  97. package/landing/tsconfig.tsbuildinfo +1 -0
  98. package/package.json +21 -20
  99. package/scripts/SYMBOT-FIX.md +238 -0
  100. package/scripts/demo-simulation.py +177 -0
  101. package/scripts/expand-more.py +502 -0
  102. package/scripts/expand-registry.py +434 -0
  103. package/scripts/history-sanitizer.ts +272 -0
  104. package/scripts/mass-scrape.py +1308 -0
  105. package/scripts/sync-and-deploy.sh +36 -0
  106. package/src/credentials.ts +177 -0
  107. package/src/credits.ts +190 -122
  108. package/src/discovery.ts +45 -58
  109. package/src/execute.ts +350 -0
  110. package/src/index.ts +113 -31
  111. package/src/proxy.ts +24 -0
  112. package/src/registry/apis.json +95362 -202
  113. package/src/registry/apis_expanded.json +100853 -0
  114. package/src/stripe.ts +243 -0
  115. package/src/test.ts +127 -89
  116. package/src/types.ts +0 -34
  117. package/src/webhook.ts +107 -0
  118. package/.github/ISSUE_TEMPLATE/add-api.yml +0 -123
  119. package/BRIEFING.md +0 -30
  120. package/backend/convex/apiKeys.ts +0 -75
  121. package/backend/convex/purchases.ts +0 -74
  122. package/backend/convex/schema.ts +0 -45
  123. package/backend/convex/transactions.ts +0 -57
  124. package/backend/convex/users.ts +0 -94
  125. package/backend/package-lock.json +0 -521
  126. package/backend/package.json +0 -15
  127. package/dist/registry/parse_apis.py +0 -146
  128. package/dist/revenuecat.d.ts +0 -61
  129. package/dist/revenuecat.d.ts.map +0 -1
  130. package/dist/revenuecat.js +0 -166
  131. package/dist/revenuecat.js.map +0 -1
  132. package/dist/webhooks/revenuecat.d.ts +0 -48
  133. package/dist/webhooks/revenuecat.d.ts.map +0 -1
  134. package/dist/webhooks/revenuecat.js +0 -119
  135. package/dist/webhooks/revenuecat.js.map +0 -1
  136. package/docs/revenuecat-setup.md +0 -89
  137. package/landing/src/app/api/keys/route.ts +0 -71
  138. package/landing/src/app/api/log/route.ts +0 -37
  139. package/landing/src/app/api/stats/route.ts +0 -37
  140. package/landing/src/app/page.tsx.bak +0 -567
  141. package/landing/src/components/AddKeyModal.tsx +0 -159
  142. package/newsletter-template.html +0 -71
  143. package/outreach/OUTREACH-SYSTEM.md +0 -211
  144. package/outreach/email-template.html +0 -179
  145. package/outreach/targets.md +0 -133
  146. package/src/registry/parse_apis.py +0 -146
  147. package/src/revenuecat.ts +0 -239
  148. package/src/webhooks/revenuecat.ts +0 -187
  149. /package/{backend/convex → convex}/README.md +0 -0
  150. /package/{backend/convex → convex}/_generated/api.js +0 -0
  151. /package/{backend/convex → convex}/_generated/dataModel.d.ts +0 -0
  152. /package/{backend/convex → convex}/_generated/server.d.ts +0 -0
  153. /package/{backend/convex → convex}/_generated/server.js +0 -0
  154. /package/{backend/convex → convex}/tsconfig.json +0 -0
@@ -1,521 +0,0 @@
1
- {
2
- "name": "backend",
3
- "version": "1.0.0",
4
- "lockfileVersion": 3,
5
- "requires": true,
6
- "packages": {
7
- "": {
8
- "name": "backend",
9
- "version": "1.0.0",
10
- "license": "ISC",
11
- "dependencies": {
12
- "convex": "^1.31.7"
13
- }
14
- },
15
- "node_modules/@esbuild/aix-ppc64": {
16
- "version": "0.27.0",
17
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz",
18
- "integrity": "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==",
19
- "cpu": [
20
- "ppc64"
21
- ],
22
- "license": "MIT",
23
- "optional": true,
24
- "os": [
25
- "aix"
26
- ],
27
- "engines": {
28
- "node": ">=18"
29
- }
30
- },
31
- "node_modules/@esbuild/android-arm": {
32
- "version": "0.27.0",
33
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz",
34
- "integrity": "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==",
35
- "cpu": [
36
- "arm"
37
- ],
38
- "license": "MIT",
39
- "optional": true,
40
- "os": [
41
- "android"
42
- ],
43
- "engines": {
44
- "node": ">=18"
45
- }
46
- },
47
- "node_modules/@esbuild/android-arm64": {
48
- "version": "0.27.0",
49
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz",
50
- "integrity": "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==",
51
- "cpu": [
52
- "arm64"
53
- ],
54
- "license": "MIT",
55
- "optional": true,
56
- "os": [
57
- "android"
58
- ],
59
- "engines": {
60
- "node": ">=18"
61
- }
62
- },
63
- "node_modules/@esbuild/android-x64": {
64
- "version": "0.27.0",
65
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz",
66
- "integrity": "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==",
67
- "cpu": [
68
- "x64"
69
- ],
70
- "license": "MIT",
71
- "optional": true,
72
- "os": [
73
- "android"
74
- ],
75
- "engines": {
76
- "node": ">=18"
77
- }
78
- },
79
- "node_modules/@esbuild/darwin-arm64": {
80
- "version": "0.27.0",
81
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz",
82
- "integrity": "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==",
83
- "cpu": [
84
- "arm64"
85
- ],
86
- "license": "MIT",
87
- "optional": true,
88
- "os": [
89
- "darwin"
90
- ],
91
- "engines": {
92
- "node": ">=18"
93
- }
94
- },
95
- "node_modules/@esbuild/darwin-x64": {
96
- "version": "0.27.0",
97
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz",
98
- "integrity": "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==",
99
- "cpu": [
100
- "x64"
101
- ],
102
- "license": "MIT",
103
- "optional": true,
104
- "os": [
105
- "darwin"
106
- ],
107
- "engines": {
108
- "node": ">=18"
109
- }
110
- },
111
- "node_modules/@esbuild/freebsd-arm64": {
112
- "version": "0.27.0",
113
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz",
114
- "integrity": "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==",
115
- "cpu": [
116
- "arm64"
117
- ],
118
- "license": "MIT",
119
- "optional": true,
120
- "os": [
121
- "freebsd"
122
- ],
123
- "engines": {
124
- "node": ">=18"
125
- }
126
- },
127
- "node_modules/@esbuild/freebsd-x64": {
128
- "version": "0.27.0",
129
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz",
130
- "integrity": "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==",
131
- "cpu": [
132
- "x64"
133
- ],
134
- "license": "MIT",
135
- "optional": true,
136
- "os": [
137
- "freebsd"
138
- ],
139
- "engines": {
140
- "node": ">=18"
141
- }
142
- },
143
- "node_modules/@esbuild/linux-arm": {
144
- "version": "0.27.0",
145
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz",
146
- "integrity": "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==",
147
- "cpu": [
148
- "arm"
149
- ],
150
- "license": "MIT",
151
- "optional": true,
152
- "os": [
153
- "linux"
154
- ],
155
- "engines": {
156
- "node": ">=18"
157
- }
158
- },
159
- "node_modules/@esbuild/linux-arm64": {
160
- "version": "0.27.0",
161
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz",
162
- "integrity": "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==",
163
- "cpu": [
164
- "arm64"
165
- ],
166
- "license": "MIT",
167
- "optional": true,
168
- "os": [
169
- "linux"
170
- ],
171
- "engines": {
172
- "node": ">=18"
173
- }
174
- },
175
- "node_modules/@esbuild/linux-ia32": {
176
- "version": "0.27.0",
177
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz",
178
- "integrity": "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==",
179
- "cpu": [
180
- "ia32"
181
- ],
182
- "license": "MIT",
183
- "optional": true,
184
- "os": [
185
- "linux"
186
- ],
187
- "engines": {
188
- "node": ">=18"
189
- }
190
- },
191
- "node_modules/@esbuild/linux-loong64": {
192
- "version": "0.27.0",
193
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz",
194
- "integrity": "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==",
195
- "cpu": [
196
- "loong64"
197
- ],
198
- "license": "MIT",
199
- "optional": true,
200
- "os": [
201
- "linux"
202
- ],
203
- "engines": {
204
- "node": ">=18"
205
- }
206
- },
207
- "node_modules/@esbuild/linux-mips64el": {
208
- "version": "0.27.0",
209
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz",
210
- "integrity": "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==",
211
- "cpu": [
212
- "mips64el"
213
- ],
214
- "license": "MIT",
215
- "optional": true,
216
- "os": [
217
- "linux"
218
- ],
219
- "engines": {
220
- "node": ">=18"
221
- }
222
- },
223
- "node_modules/@esbuild/linux-ppc64": {
224
- "version": "0.27.0",
225
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz",
226
- "integrity": "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==",
227
- "cpu": [
228
- "ppc64"
229
- ],
230
- "license": "MIT",
231
- "optional": true,
232
- "os": [
233
- "linux"
234
- ],
235
- "engines": {
236
- "node": ">=18"
237
- }
238
- },
239
- "node_modules/@esbuild/linux-riscv64": {
240
- "version": "0.27.0",
241
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz",
242
- "integrity": "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==",
243
- "cpu": [
244
- "riscv64"
245
- ],
246
- "license": "MIT",
247
- "optional": true,
248
- "os": [
249
- "linux"
250
- ],
251
- "engines": {
252
- "node": ">=18"
253
- }
254
- },
255
- "node_modules/@esbuild/linux-s390x": {
256
- "version": "0.27.0",
257
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz",
258
- "integrity": "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==",
259
- "cpu": [
260
- "s390x"
261
- ],
262
- "license": "MIT",
263
- "optional": true,
264
- "os": [
265
- "linux"
266
- ],
267
- "engines": {
268
- "node": ">=18"
269
- }
270
- },
271
- "node_modules/@esbuild/linux-x64": {
272
- "version": "0.27.0",
273
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz",
274
- "integrity": "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==",
275
- "cpu": [
276
- "x64"
277
- ],
278
- "license": "MIT",
279
- "optional": true,
280
- "os": [
281
- "linux"
282
- ],
283
- "engines": {
284
- "node": ">=18"
285
- }
286
- },
287
- "node_modules/@esbuild/netbsd-arm64": {
288
- "version": "0.27.0",
289
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz",
290
- "integrity": "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==",
291
- "cpu": [
292
- "arm64"
293
- ],
294
- "license": "MIT",
295
- "optional": true,
296
- "os": [
297
- "netbsd"
298
- ],
299
- "engines": {
300
- "node": ">=18"
301
- }
302
- },
303
- "node_modules/@esbuild/netbsd-x64": {
304
- "version": "0.27.0",
305
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz",
306
- "integrity": "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==",
307
- "cpu": [
308
- "x64"
309
- ],
310
- "license": "MIT",
311
- "optional": true,
312
- "os": [
313
- "netbsd"
314
- ],
315
- "engines": {
316
- "node": ">=18"
317
- }
318
- },
319
- "node_modules/@esbuild/openbsd-arm64": {
320
- "version": "0.27.0",
321
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz",
322
- "integrity": "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==",
323
- "cpu": [
324
- "arm64"
325
- ],
326
- "license": "MIT",
327
- "optional": true,
328
- "os": [
329
- "openbsd"
330
- ],
331
- "engines": {
332
- "node": ">=18"
333
- }
334
- },
335
- "node_modules/@esbuild/openbsd-x64": {
336
- "version": "0.27.0",
337
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz",
338
- "integrity": "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==",
339
- "cpu": [
340
- "x64"
341
- ],
342
- "license": "MIT",
343
- "optional": true,
344
- "os": [
345
- "openbsd"
346
- ],
347
- "engines": {
348
- "node": ">=18"
349
- }
350
- },
351
- "node_modules/@esbuild/openharmony-arm64": {
352
- "version": "0.27.0",
353
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz",
354
- "integrity": "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==",
355
- "cpu": [
356
- "arm64"
357
- ],
358
- "license": "MIT",
359
- "optional": true,
360
- "os": [
361
- "openharmony"
362
- ],
363
- "engines": {
364
- "node": ">=18"
365
- }
366
- },
367
- "node_modules/@esbuild/sunos-x64": {
368
- "version": "0.27.0",
369
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz",
370
- "integrity": "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==",
371
- "cpu": [
372
- "x64"
373
- ],
374
- "license": "MIT",
375
- "optional": true,
376
- "os": [
377
- "sunos"
378
- ],
379
- "engines": {
380
- "node": ">=18"
381
- }
382
- },
383
- "node_modules/@esbuild/win32-arm64": {
384
- "version": "0.27.0",
385
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz",
386
- "integrity": "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==",
387
- "cpu": [
388
- "arm64"
389
- ],
390
- "license": "MIT",
391
- "optional": true,
392
- "os": [
393
- "win32"
394
- ],
395
- "engines": {
396
- "node": ">=18"
397
- }
398
- },
399
- "node_modules/@esbuild/win32-ia32": {
400
- "version": "0.27.0",
401
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz",
402
- "integrity": "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==",
403
- "cpu": [
404
- "ia32"
405
- ],
406
- "license": "MIT",
407
- "optional": true,
408
- "os": [
409
- "win32"
410
- ],
411
- "engines": {
412
- "node": ">=18"
413
- }
414
- },
415
- "node_modules/@esbuild/win32-x64": {
416
- "version": "0.27.0",
417
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz",
418
- "integrity": "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==",
419
- "cpu": [
420
- "x64"
421
- ],
422
- "license": "MIT",
423
- "optional": true,
424
- "os": [
425
- "win32"
426
- ],
427
- "engines": {
428
- "node": ">=18"
429
- }
430
- },
431
- "node_modules/convex": {
432
- "version": "1.31.7",
433
- "resolved": "https://registry.npmjs.org/convex/-/convex-1.31.7.tgz",
434
- "integrity": "sha512-PtNMe1mAIOvA8Yz100QTOaIdgt2rIuWqencVXrb4McdhxBHZ8IJ1eXTnrgCC9HydyilGT1pOn+KNqT14mqn9fQ==",
435
- "license": "Apache-2.0",
436
- "dependencies": {
437
- "esbuild": "0.27.0",
438
- "prettier": "^3.0.0"
439
- },
440
- "bin": {
441
- "convex": "bin/main.js"
442
- },
443
- "engines": {
444
- "node": ">=18.0.0",
445
- "npm": ">=7.0.0"
446
- },
447
- "peerDependencies": {
448
- "@auth0/auth0-react": "^2.0.1",
449
- "@clerk/clerk-react": "^4.12.8 || ^5.0.0",
450
- "react": "^18.0.0 || ^19.0.0-0 || ^19.0.0"
451
- },
452
- "peerDependenciesMeta": {
453
- "@auth0/auth0-react": {
454
- "optional": true
455
- },
456
- "@clerk/clerk-react": {
457
- "optional": true
458
- },
459
- "react": {
460
- "optional": true
461
- }
462
- }
463
- },
464
- "node_modules/esbuild": {
465
- "version": "0.27.0",
466
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz",
467
- "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==",
468
- "hasInstallScript": true,
469
- "license": "MIT",
470
- "bin": {
471
- "esbuild": "bin/esbuild"
472
- },
473
- "engines": {
474
- "node": ">=18"
475
- },
476
- "optionalDependencies": {
477
- "@esbuild/aix-ppc64": "0.27.0",
478
- "@esbuild/android-arm": "0.27.0",
479
- "@esbuild/android-arm64": "0.27.0",
480
- "@esbuild/android-x64": "0.27.0",
481
- "@esbuild/darwin-arm64": "0.27.0",
482
- "@esbuild/darwin-x64": "0.27.0",
483
- "@esbuild/freebsd-arm64": "0.27.0",
484
- "@esbuild/freebsd-x64": "0.27.0",
485
- "@esbuild/linux-arm": "0.27.0",
486
- "@esbuild/linux-arm64": "0.27.0",
487
- "@esbuild/linux-ia32": "0.27.0",
488
- "@esbuild/linux-loong64": "0.27.0",
489
- "@esbuild/linux-mips64el": "0.27.0",
490
- "@esbuild/linux-ppc64": "0.27.0",
491
- "@esbuild/linux-riscv64": "0.27.0",
492
- "@esbuild/linux-s390x": "0.27.0",
493
- "@esbuild/linux-x64": "0.27.0",
494
- "@esbuild/netbsd-arm64": "0.27.0",
495
- "@esbuild/netbsd-x64": "0.27.0",
496
- "@esbuild/openbsd-arm64": "0.27.0",
497
- "@esbuild/openbsd-x64": "0.27.0",
498
- "@esbuild/openharmony-arm64": "0.27.0",
499
- "@esbuild/sunos-x64": "0.27.0",
500
- "@esbuild/win32-arm64": "0.27.0",
501
- "@esbuild/win32-ia32": "0.27.0",
502
- "@esbuild/win32-x64": "0.27.0"
503
- }
504
- },
505
- "node_modules/prettier": {
506
- "version": "3.8.1",
507
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz",
508
- "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
509
- "license": "MIT",
510
- "bin": {
511
- "prettier": "bin/prettier.cjs"
512
- },
513
- "engines": {
514
- "node": ">=14"
515
- },
516
- "funding": {
517
- "url": "https://github.com/prettier/prettier?sponsor=1"
518
- }
519
- }
520
- }
521
- }
@@ -1,15 +0,0 @@
1
- {
2
- "name": "backend",
3
- "version": "1.0.0",
4
- "main": "index.js",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
7
- },
8
- "keywords": [],
9
- "author": "",
10
- "license": "ISC",
11
- "description": "",
12
- "dependencies": {
13
- "convex": "^1.31.7"
14
- }
15
- }
@@ -1,146 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Parse public-apis README and convert to APIClaw registry format
4
- """
5
- import re
6
- import json
7
- import hashlib
8
-
9
- # Read the README content
10
- with open('/tmp/public-apis-readme.md', 'r') as f:
11
- content = f.read()
12
-
13
- apis = []
14
- current_category = None
15
-
16
- # Split by lines
17
- lines = content.split('\n')
18
-
19
- for i, line in enumerate(lines):
20
- # Check for category headers (### Animals, ### Anime, etc.)
21
- if line.startswith('### ') and not line.startswith('### API'):
22
- current_category = line[4:].strip()
23
- continue
24
-
25
- # Skip non-table rows
26
- if not line.startswith('|'):
27
- continue
28
-
29
- # Skip header rows and separator rows
30
- if '---' in line or 'API | Description' in line or 'API|Description' in line:
31
- continue
32
-
33
- # Parse table row
34
- # Format: | [Name](url) | Description | Auth | HTTPS | CORS |
35
- parts = line.split('|')
36
- if len(parts) < 5:
37
- continue
38
-
39
- # Extract API info
40
- api_cell = parts[1].strip() if len(parts) > 1 else ''
41
- desc_cell = parts[2].strip() if len(parts) > 2 else ''
42
- auth_cell = parts[3].strip() if len(parts) > 3 else ''
43
- https_cell = parts[4].strip() if len(parts) > 4 else ''
44
- cors_cell = parts[5].strip() if len(parts) > 5 else ''
45
-
46
- # Extract name and link from markdown link format [Name](url)
47
- link_match = re.match(r'\[([^\]]+)\]\(([^)]+)\)', api_cell)
48
- if not link_match:
49
- continue
50
-
51
- name = link_match.group(1)
52
- link = link_match.group(2)
53
-
54
- # Generate slug ID
55
- slug = re.sub(r'[^a-z0-9]+', '-', name.lower()).strip('-')
56
-
57
- # Parse auth type
58
- auth = 'None'
59
- if '`apiKey`' in auth_cell or 'apiKey' in auth_cell:
60
- auth = 'apiKey'
61
- elif '`OAuth`' in auth_cell or 'OAuth' in auth_cell:
62
- auth = 'OAuth'
63
- elif '`X-Mashape-Key`' in auth_cell:
64
- auth = 'apiKey'
65
- elif '`User-Agent`' in auth_cell:
66
- auth = 'User-Agent'
67
- elif 'No' in auth_cell:
68
- auth = 'None'
69
-
70
- # Parse HTTPS
71
- https = 'Yes' in https_cell
72
-
73
- # Parse CORS
74
- cors = 'unknown'
75
- if 'Yes' in cors_cell:
76
- cors = 'yes'
77
- elif 'No' in cors_cell:
78
- cors = 'no'
79
-
80
- # Generate keywords from category and description
81
- keywords = []
82
- if current_category:
83
- keywords.append(current_category.lower().replace(' & ', '-').replace(' ', '-'))
84
-
85
- # Add some common keywords from description
86
- desc_lower = desc_cell.lower()
87
- for keyword in ['data', 'api', 'free', 'real-time', 'json', 'rest', 'graphql']:
88
- if keyword in desc_lower:
89
- keywords.append(keyword)
90
-
91
- api_entry = {
92
- "id": slug,
93
- "name": name,
94
- "description": desc_cell,
95
- "category": current_category or "Uncategorized",
96
- "auth": auth,
97
- "https": https,
98
- "cors": cors,
99
- "link": link,
100
- "pricing": "unknown", # public-apis doesn't have pricing info
101
- "keywords": list(set(keywords))
102
- }
103
-
104
- apis.append(api_entry)
105
-
106
- # Remove duplicates by ID (keep first occurrence)
107
- seen_ids = set()
108
- unique_apis = []
109
- for api in apis:
110
- if api['id'] not in seen_ids:
111
- seen_ids.add(api['id'])
112
- unique_apis.append(api)
113
- else:
114
- # Make ID unique by appending category
115
- cat_slug = re.sub(r'[^a-z0-9]+', '-', api['category'].lower()).strip('-')
116
- new_id = f"{api['id']}-{cat_slug}"
117
- if new_id not in seen_ids:
118
- api['id'] = new_id
119
- seen_ids.add(new_id)
120
- unique_apis.append(api)
121
-
122
- print(f"Parsed {len(unique_apis)} unique APIs")
123
-
124
- # Write to JSON
125
- output = {
126
- "version": "1.0.0",
127
- "source": "https://github.com/public-apis/public-apis",
128
- "lastUpdated": "2026-02-16",
129
- "count": len(unique_apis),
130
- "apis": unique_apis
131
- }
132
-
133
- with open('/Users/gustavhemmingsson/clawd/products/api-discovery/src/registry/apis.json', 'w') as f:
134
- json.dump(output, f, indent=2)
135
-
136
- print(f"Wrote to apis.json")
137
-
138
- # Print some stats
139
- categories = {}
140
- for api in unique_apis:
141
- cat = api['category']
142
- categories[cat] = categories.get(cat, 0) + 1
143
-
144
- print("\nAPIs per category:")
145
- for cat, count in sorted(categories.items(), key=lambda x: -x[1]):
146
- print(f" {cat}: {count}")