@codeqr/ts-mcp 0.9.0 → 0.19.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 (479) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +16 -218
  3. package/auth.d.mts +6 -0
  4. package/auth.d.mts.map +1 -0
  5. package/auth.d.ts +6 -0
  6. package/auth.d.ts.map +1 -0
  7. package/auth.js +37 -0
  8. package/auth.js.map +1 -0
  9. package/{headers.mjs → auth.mjs} +16 -2
  10. package/auth.mjs.map +1 -0
  11. package/code-tool-paths.cjs +8 -0
  12. package/code-tool-paths.cjs.map +1 -0
  13. package/code-tool-paths.d.cts +2 -0
  14. package/code-tool-paths.d.cts.map +1 -0
  15. package/code-tool-types.d.mts +7 -9
  16. package/code-tool-types.d.mts.map +1 -1
  17. package/code-tool-types.d.ts +7 -9
  18. package/code-tool-types.d.ts.map +1 -1
  19. package/code-tool-worker.d.mts +5 -0
  20. package/code-tool-worker.d.mts.map +1 -0
  21. package/code-tool-worker.d.ts +5 -0
  22. package/code-tool-worker.d.ts.map +1 -0
  23. package/code-tool-worker.js +249 -0
  24. package/code-tool-worker.js.map +1 -0
  25. package/code-tool-worker.mjs +244 -0
  26. package/code-tool-worker.mjs.map +1 -0
  27. package/code-tool.d.mts +12 -45
  28. package/code-tool.d.mts.map +1 -1
  29. package/code-tool.d.ts +12 -45
  30. package/code-tool.d.ts.map +1 -1
  31. package/code-tool.js +315 -27
  32. package/code-tool.js.map +1 -1
  33. package/code-tool.mjs +282 -27
  34. package/code-tool.mjs.map +1 -1
  35. package/docs-search-tool.d.mts +10 -3
  36. package/docs-search-tool.d.mts.map +1 -1
  37. package/docs-search-tool.d.ts +10 -3
  38. package/docs-search-tool.d.ts.map +1 -1
  39. package/docs-search-tool.js +29 -6
  40. package/docs-search-tool.js.map +1 -1
  41. package/docs-search-tool.mjs +29 -6
  42. package/docs-search-tool.mjs.map +1 -1
  43. package/http.d.mts +6 -3
  44. package/http.d.mts.map +1 -1
  45. package/http.d.ts +6 -3
  46. package/http.d.ts.map +1 -1
  47. package/http.js +108 -49
  48. package/http.js.map +1 -1
  49. package/http.mjs +108 -49
  50. package/http.mjs.map +1 -1
  51. package/index.js +19 -50
  52. package/index.js.map +1 -1
  53. package/index.mjs +19 -50
  54. package/index.mjs.map +1 -1
  55. package/instructions.d.mts +2 -0
  56. package/instructions.d.mts.map +1 -0
  57. package/instructions.d.ts +2 -0
  58. package/instructions.d.ts.map +1 -0
  59. package/instructions.js +42 -0
  60. package/instructions.js.map +1 -0
  61. package/instructions.mjs +39 -0
  62. package/instructions.mjs.map +1 -0
  63. package/logger.d.mts +7 -0
  64. package/logger.d.mts.map +1 -0
  65. package/logger.d.ts +7 -0
  66. package/logger.d.ts.map +1 -0
  67. package/logger.js +29 -0
  68. package/logger.js.map +1 -0
  69. package/logger.mjs +22 -0
  70. package/logger.mjs.map +1 -0
  71. package/methods.d.mts +10 -0
  72. package/methods.d.mts.map +1 -0
  73. package/methods.d.ts +10 -0
  74. package/methods.d.ts.map +1 -0
  75. package/methods.js +215 -0
  76. package/methods.js.map +1 -0
  77. package/methods.mjs +211 -0
  78. package/methods.mjs.map +1 -0
  79. package/options.d.mts +9 -9
  80. package/options.d.mts.map +1 -1
  81. package/options.d.ts +9 -9
  82. package/options.d.ts.map +1 -1
  83. package/options.js +54 -359
  84. package/options.js.map +1 -1
  85. package/options.mjs +54 -359
  86. package/options.mjs.map +1 -1
  87. package/package.json +83 -60
  88. package/server.d.mts +11 -16
  89. package/server.d.mts.map +1 -1
  90. package/server.d.ts +11 -16
  91. package/server.d.ts.map +1 -1
  92. package/server.js +86 -101
  93. package/server.js.map +1 -1
  94. package/server.mjs +85 -96
  95. package/server.mjs.map +1 -1
  96. package/src/{headers.ts → auth.ts} +18 -1
  97. package/src/code-tool-paths.cts +5 -0
  98. package/src/code-tool-types.ts +8 -9
  99. package/src/code-tool-worker.ts +295 -0
  100. package/src/code-tool.ts +371 -34
  101. package/src/docs-search-tool.ts +48 -7
  102. package/src/http.ts +128 -54
  103. package/src/index.ts +22 -63
  104. package/src/instructions.ts +60 -0
  105. package/src/logger.ts +28 -0
  106. package/src/methods.ts +236 -0
  107. package/src/options.ts +72 -384
  108. package/src/server.ts +99 -116
  109. package/src/stdio.ts +6 -5
  110. package/src/{tools/types.ts → types.ts} +14 -5
  111. package/src/util.ts +25 -0
  112. package/stdio.d.mts +1 -1
  113. package/stdio.d.mts.map +1 -1
  114. package/stdio.d.ts +1 -1
  115. package/stdio.d.ts.map +1 -1
  116. package/stdio.js +5 -4
  117. package/stdio.js.map +1 -1
  118. package/stdio.mjs +5 -4
  119. package/stdio.mjs.map +1 -1
  120. package/{tools/types.d.mts → types.d.mts} +10 -2
  121. package/types.d.mts.map +1 -0
  122. package/{tools/types.d.ts → types.d.ts} +10 -2
  123. package/types.d.ts.map +1 -0
  124. package/types.js.map +1 -0
  125. package/types.mjs.map +1 -0
  126. package/util.d.mts +4 -0
  127. package/util.d.mts.map +1 -0
  128. package/util.d.ts +4 -0
  129. package/util.d.ts.map +1 -0
  130. package/util.js +30 -0
  131. package/util.js.map +1 -0
  132. package/util.mjs +24 -0
  133. package/util.mjs.map +1 -0
  134. package/compat.d.mts +0 -58
  135. package/compat.d.mts.map +0 -1
  136. package/compat.d.ts +0 -58
  137. package/compat.d.ts.map +0 -1
  138. package/compat.js +0 -387
  139. package/compat.js.map +0 -1
  140. package/compat.mjs +0 -378
  141. package/compat.mjs.map +0 -1
  142. package/dynamic-tools.d.mts +0 -12
  143. package/dynamic-tools.d.mts.map +0 -1
  144. package/dynamic-tools.d.ts +0 -12
  145. package/dynamic-tools.d.ts.map +0 -1
  146. package/dynamic-tools.js +0 -135
  147. package/dynamic-tools.js.map +0 -1
  148. package/dynamic-tools.mjs +0 -132
  149. package/dynamic-tools.mjs.map +0 -1
  150. package/filtering.d.mts +0 -3
  151. package/filtering.d.mts.map +0 -1
  152. package/filtering.d.ts +0 -3
  153. package/filtering.d.ts.map +0 -1
  154. package/filtering.js +0 -24
  155. package/filtering.js.map +0 -1
  156. package/filtering.mjs +0 -16
  157. package/filtering.mjs.map +0 -1
  158. package/headers.d.mts +0 -4
  159. package/headers.d.mts.map +0 -1
  160. package/headers.d.ts +0 -4
  161. package/headers.d.ts.map +0 -1
  162. package/headers.js +0 -22
  163. package/headers.js.map +0 -1
  164. package/headers.mjs.map +0 -1
  165. package/src/compat.ts +0 -483
  166. package/src/dynamic-tools.ts +0 -153
  167. package/src/filtering.ts +0 -18
  168. package/src/tools/analytics/retrieve-analytics.ts +0 -441
  169. package/src/tools/domains/create-domains.ts +0 -75
  170. package/src/tools/domains/delete-domains.ts +0 -55
  171. package/src/tools/domains/list-domains.ts +0 -68
  172. package/src/tools/domains/update-domains.ts +0 -79
  173. package/src/tools/events/list-events.ts +0 -421
  174. package/src/tools/index.ts +0 -133
  175. package/src/tools/links/bulk/create-links-bulk.ts +0 -966
  176. package/src/tools/links/bulk/delete-links-bulk.ts +0 -59
  177. package/src/tools/links/count-links.ts +0 -957
  178. package/src/tools/links/create-links.ts +0 -957
  179. package/src/tools/links/delete-links.ts +0 -56
  180. package/src/tools/links/list-links.ts +0 -980
  181. package/src/tools/links/retrieve-info-links.ts +0 -75
  182. package/src/tools/links/update-links.ts +0 -964
  183. package/src/tools/links/upsert-links.ts +0 -958
  184. package/src/tools/projects/list-projects.ts +0 -51
  185. package/src/tools/projects/retrieve-projects.ts +0 -56
  186. package/src/tools/qrcodes/bulk/create-qrcodes-bulk.ts +0 -1077
  187. package/src/tools/qrcodes/bulk/delete-qrcodes-bulk.ts +0 -59
  188. package/src/tools/qrcodes/count-qrcodes.ts +0 -220
  189. package/src/tools/qrcodes/create-qrcodes.ts +0 -1067
  190. package/src/tools/qrcodes/delete-qrcodes.ts +0 -56
  191. package/src/tools/qrcodes/list-qrcodes.ts +0 -221
  192. package/src/tools/qrcodes/retrieve-qrcodes.ts +0 -67
  193. package/src/tools/qrcodes/update-qrcodes.ts +0 -1074
  194. package/src/tools/qrcodes/upsert-qrcodes.ts +0 -1068
  195. package/src/tools/tags/create-tags.ts +0 -59
  196. package/src/tools/tags/delete-tags.ts +0 -55
  197. package/src/tools/tags/list-tags.ts +0 -87
  198. package/src/tools/tags/update-tags.ts +0 -63
  199. package/src/tools/track/track-lead-track.ts +0 -93
  200. package/src/tools/track/track-sale-track.ts +0 -108
  201. package/src/tools.ts +0 -1
  202. package/tools/analytics/retrieve-analytics.d.mts +0 -51
  203. package/tools/analytics/retrieve-analytics.d.mts.map +0 -1
  204. package/tools/analytics/retrieve-analytics.d.ts +0 -51
  205. package/tools/analytics/retrieve-analytics.d.ts.map +0 -1
  206. package/tools/analytics/retrieve-analytics.js +0 -438
  207. package/tools/analytics/retrieve-analytics.js.map +0 -1
  208. package/tools/analytics/retrieve-analytics.mjs +0 -431
  209. package/tools/analytics/retrieve-analytics.mjs.map +0 -1
  210. package/tools/domains/create-domains.d.mts +0 -51
  211. package/tools/domains/create-domains.d.mts.map +0 -1
  212. package/tools/domains/create-domains.d.ts +0 -51
  213. package/tools/domains/create-domains.d.ts.map +0 -1
  214. package/tools/domains/create-domains.js +0 -74
  215. package/tools/domains/create-domains.js.map +0 -1
  216. package/tools/domains/create-domains.mjs +0 -67
  217. package/tools/domains/create-domains.mjs.map +0 -1
  218. package/tools/domains/delete-domains.d.mts +0 -51
  219. package/tools/domains/delete-domains.d.mts.map +0 -1
  220. package/tools/domains/delete-domains.d.ts +0 -51
  221. package/tools/domains/delete-domains.d.ts.map +0 -1
  222. package/tools/domains/delete-domains.js +0 -55
  223. package/tools/domains/delete-domains.js.map +0 -1
  224. package/tools/domains/delete-domains.mjs +0 -48
  225. package/tools/domains/delete-domains.mjs.map +0 -1
  226. package/tools/domains/list-domains.d.mts +0 -51
  227. package/tools/domains/list-domains.d.mts.map +0 -1
  228. package/tools/domains/list-domains.d.ts +0 -51
  229. package/tools/domains/list-domains.d.ts.map +0 -1
  230. package/tools/domains/list-domains.js +0 -67
  231. package/tools/domains/list-domains.js.map +0 -1
  232. package/tools/domains/list-domains.mjs +0 -60
  233. package/tools/domains/list-domains.mjs.map +0 -1
  234. package/tools/domains/update-domains.d.mts +0 -51
  235. package/tools/domains/update-domains.d.mts.map +0 -1
  236. package/tools/domains/update-domains.d.ts +0 -51
  237. package/tools/domains/update-domains.d.ts.map +0 -1
  238. package/tools/domains/update-domains.js +0 -78
  239. package/tools/domains/update-domains.js.map +0 -1
  240. package/tools/domains/update-domains.mjs +0 -71
  241. package/tools/domains/update-domains.mjs.map +0 -1
  242. package/tools/events/list-events.d.mts +0 -51
  243. package/tools/events/list-events.d.mts.map +0 -1
  244. package/tools/events/list-events.d.ts +0 -51
  245. package/tools/events/list-events.d.ts.map +0 -1
  246. package/tools/events/list-events.js +0 -418
  247. package/tools/events/list-events.js.map +0 -1
  248. package/tools/events/list-events.mjs +0 -411
  249. package/tools/events/list-events.mjs.map +0 -1
  250. package/tools/index.d.mts +0 -10
  251. package/tools/index.d.mts.map +0 -1
  252. package/tools/index.d.ts +0 -10
  253. package/tools/index.d.ts.map +0 -1
  254. package/tools/index.js +0 -117
  255. package/tools/index.js.map +0 -1
  256. package/tools/index.mjs +0 -110
  257. package/tools/index.mjs.map +0 -1
  258. package/tools/links/bulk/create-links-bulk.d.mts +0 -51
  259. package/tools/links/bulk/create-links-bulk.d.mts.map +0 -1
  260. package/tools/links/bulk/create-links-bulk.d.ts +0 -51
  261. package/tools/links/bulk/create-links-bulk.d.ts.map +0 -1
  262. package/tools/links/bulk/create-links-bulk.js +0 -956
  263. package/tools/links/bulk/create-links-bulk.js.map +0 -1
  264. package/tools/links/bulk/create-links-bulk.mjs +0 -949
  265. package/tools/links/bulk/create-links-bulk.mjs.map +0 -1
  266. package/tools/links/bulk/delete-links-bulk.d.mts +0 -51
  267. package/tools/links/bulk/delete-links-bulk.d.mts.map +0 -1
  268. package/tools/links/bulk/delete-links-bulk.d.ts +0 -51
  269. package/tools/links/bulk/delete-links-bulk.d.ts.map +0 -1
  270. package/tools/links/bulk/delete-links-bulk.js +0 -58
  271. package/tools/links/bulk/delete-links-bulk.js.map +0 -1
  272. package/tools/links/bulk/delete-links-bulk.mjs +0 -51
  273. package/tools/links/bulk/delete-links-bulk.mjs.map +0 -1
  274. package/tools/links/count-links.d.mts +0 -51
  275. package/tools/links/count-links.d.mts.map +0 -1
  276. package/tools/links/count-links.d.ts +0 -51
  277. package/tools/links/count-links.d.ts.map +0 -1
  278. package/tools/links/count-links.js +0 -951
  279. package/tools/links/count-links.js.map +0 -1
  280. package/tools/links/count-links.mjs +0 -944
  281. package/tools/links/count-links.mjs.map +0 -1
  282. package/tools/links/create-links.d.mts +0 -51
  283. package/tools/links/create-links.d.mts.map +0 -1
  284. package/tools/links/create-links.d.ts +0 -51
  285. package/tools/links/create-links.d.ts.map +0 -1
  286. package/tools/links/create-links.js +0 -947
  287. package/tools/links/create-links.js.map +0 -1
  288. package/tools/links/create-links.mjs +0 -940
  289. package/tools/links/create-links.mjs.map +0 -1
  290. package/tools/links/delete-links.d.mts +0 -51
  291. package/tools/links/delete-links.d.mts.map +0 -1
  292. package/tools/links/delete-links.d.ts +0 -51
  293. package/tools/links/delete-links.d.ts.map +0 -1
  294. package/tools/links/delete-links.js +0 -55
  295. package/tools/links/delete-links.js.map +0 -1
  296. package/tools/links/delete-links.mjs +0 -48
  297. package/tools/links/delete-links.mjs.map +0 -1
  298. package/tools/links/list-links.d.mts +0 -51
  299. package/tools/links/list-links.d.mts.map +0 -1
  300. package/tools/links/list-links.d.ts +0 -51
  301. package/tools/links/list-links.d.ts.map +0 -1
  302. package/tools/links/list-links.js +0 -973
  303. package/tools/links/list-links.js.map +0 -1
  304. package/tools/links/list-links.mjs +0 -966
  305. package/tools/links/list-links.mjs.map +0 -1
  306. package/tools/links/retrieve-info-links.d.mts +0 -51
  307. package/tools/links/retrieve-info-links.d.mts.map +0 -1
  308. package/tools/links/retrieve-info-links.d.ts +0 -51
  309. package/tools/links/retrieve-info-links.d.ts.map +0 -1
  310. package/tools/links/retrieve-info-links.js +0 -71
  311. package/tools/links/retrieve-info-links.js.map +0 -1
  312. package/tools/links/retrieve-info-links.mjs +0 -64
  313. package/tools/links/retrieve-info-links.mjs.map +0 -1
  314. package/tools/links/update-links.d.mts +0 -51
  315. package/tools/links/update-links.d.mts.map +0 -1
  316. package/tools/links/update-links.d.ts +0 -51
  317. package/tools/links/update-links.d.ts.map +0 -1
  318. package/tools/links/update-links.js +0 -953
  319. package/tools/links/update-links.js.map +0 -1
  320. package/tools/links/update-links.mjs +0 -946
  321. package/tools/links/update-links.mjs.map +0 -1
  322. package/tools/links/upsert-links.d.mts +0 -51
  323. package/tools/links/upsert-links.d.mts.map +0 -1
  324. package/tools/links/upsert-links.d.ts +0 -51
  325. package/tools/links/upsert-links.d.ts.map +0 -1
  326. package/tools/links/upsert-links.js +0 -947
  327. package/tools/links/upsert-links.js.map +0 -1
  328. package/tools/links/upsert-links.mjs +0 -940
  329. package/tools/links/upsert-links.mjs.map +0 -1
  330. package/tools/projects/list-projects.d.mts +0 -51
  331. package/tools/projects/list-projects.d.mts.map +0 -1
  332. package/tools/projects/list-projects.d.ts +0 -51
  333. package/tools/projects/list-projects.d.ts.map +0 -1
  334. package/tools/projects/list-projects.js +0 -51
  335. package/tools/projects/list-projects.js.map +0 -1
  336. package/tools/projects/list-projects.mjs +0 -44
  337. package/tools/projects/list-projects.mjs.map +0 -1
  338. package/tools/projects/retrieve-projects.d.mts +0 -51
  339. package/tools/projects/retrieve-projects.d.mts.map +0 -1
  340. package/tools/projects/retrieve-projects.d.ts +0 -51
  341. package/tools/projects/retrieve-projects.d.ts.map +0 -1
  342. package/tools/projects/retrieve-projects.js +0 -55
  343. package/tools/projects/retrieve-projects.js.map +0 -1
  344. package/tools/projects/retrieve-projects.mjs +0 -48
  345. package/tools/projects/retrieve-projects.mjs.map +0 -1
  346. package/tools/qrcodes/bulk/create-qrcodes-bulk.d.mts +0 -51
  347. package/tools/qrcodes/bulk/create-qrcodes-bulk.d.mts.map +0 -1
  348. package/tools/qrcodes/bulk/create-qrcodes-bulk.d.ts +0 -51
  349. package/tools/qrcodes/bulk/create-qrcodes-bulk.d.ts.map +0 -1
  350. package/tools/qrcodes/bulk/create-qrcodes-bulk.js +0 -1068
  351. package/tools/qrcodes/bulk/create-qrcodes-bulk.js.map +0 -1
  352. package/tools/qrcodes/bulk/create-qrcodes-bulk.mjs +0 -1061
  353. package/tools/qrcodes/bulk/create-qrcodes-bulk.mjs.map +0 -1
  354. package/tools/qrcodes/bulk/delete-qrcodes-bulk.d.mts +0 -51
  355. package/tools/qrcodes/bulk/delete-qrcodes-bulk.d.mts.map +0 -1
  356. package/tools/qrcodes/bulk/delete-qrcodes-bulk.d.ts +0 -51
  357. package/tools/qrcodes/bulk/delete-qrcodes-bulk.d.ts.map +0 -1
  358. package/tools/qrcodes/bulk/delete-qrcodes-bulk.js +0 -58
  359. package/tools/qrcodes/bulk/delete-qrcodes-bulk.js.map +0 -1
  360. package/tools/qrcodes/bulk/delete-qrcodes-bulk.mjs +0 -51
  361. package/tools/qrcodes/bulk/delete-qrcodes-bulk.mjs.map +0 -1
  362. package/tools/qrcodes/count-qrcodes.d.mts +0 -51
  363. package/tools/qrcodes/count-qrcodes.d.mts.map +0 -1
  364. package/tools/qrcodes/count-qrcodes.d.ts +0 -51
  365. package/tools/qrcodes/count-qrcodes.d.ts.map +0 -1
  366. package/tools/qrcodes/count-qrcodes.js +0 -215
  367. package/tools/qrcodes/count-qrcodes.js.map +0 -1
  368. package/tools/qrcodes/count-qrcodes.mjs +0 -208
  369. package/tools/qrcodes/count-qrcodes.mjs.map +0 -1
  370. package/tools/qrcodes/create-qrcodes.d.mts +0 -51
  371. package/tools/qrcodes/create-qrcodes.d.mts.map +0 -1
  372. package/tools/qrcodes/create-qrcodes.d.ts +0 -51
  373. package/tools/qrcodes/create-qrcodes.d.ts.map +0 -1
  374. package/tools/qrcodes/create-qrcodes.js +0 -1059
  375. package/tools/qrcodes/create-qrcodes.js.map +0 -1
  376. package/tools/qrcodes/create-qrcodes.mjs +0 -1052
  377. package/tools/qrcodes/create-qrcodes.mjs.map +0 -1
  378. package/tools/qrcodes/delete-qrcodes.d.mts +0 -51
  379. package/tools/qrcodes/delete-qrcodes.d.mts.map +0 -1
  380. package/tools/qrcodes/delete-qrcodes.d.ts +0 -51
  381. package/tools/qrcodes/delete-qrcodes.d.ts.map +0 -1
  382. package/tools/qrcodes/delete-qrcodes.js +0 -55
  383. package/tools/qrcodes/delete-qrcodes.js.map +0 -1
  384. package/tools/qrcodes/delete-qrcodes.mjs +0 -48
  385. package/tools/qrcodes/delete-qrcodes.mjs.map +0 -1
  386. package/tools/qrcodes/list-qrcodes.d.mts +0 -51
  387. package/tools/qrcodes/list-qrcodes.d.mts.map +0 -1
  388. package/tools/qrcodes/list-qrcodes.d.ts +0 -51
  389. package/tools/qrcodes/list-qrcodes.d.ts.map +0 -1
  390. package/tools/qrcodes/list-qrcodes.js +0 -217
  391. package/tools/qrcodes/list-qrcodes.js.map +0 -1
  392. package/tools/qrcodes/list-qrcodes.mjs +0 -210
  393. package/tools/qrcodes/list-qrcodes.mjs.map +0 -1
  394. package/tools/qrcodes/retrieve-qrcodes.d.mts +0 -51
  395. package/tools/qrcodes/retrieve-qrcodes.d.mts.map +0 -1
  396. package/tools/qrcodes/retrieve-qrcodes.d.ts +0 -51
  397. package/tools/qrcodes/retrieve-qrcodes.d.ts.map +0 -1
  398. package/tools/qrcodes/retrieve-qrcodes.js +0 -65
  399. package/tools/qrcodes/retrieve-qrcodes.js.map +0 -1
  400. package/tools/qrcodes/retrieve-qrcodes.mjs +0 -58
  401. package/tools/qrcodes/retrieve-qrcodes.mjs.map +0 -1
  402. package/tools/qrcodes/update-qrcodes.d.mts +0 -51
  403. package/tools/qrcodes/update-qrcodes.d.mts.map +0 -1
  404. package/tools/qrcodes/update-qrcodes.d.ts +0 -51
  405. package/tools/qrcodes/update-qrcodes.d.ts.map +0 -1
  406. package/tools/qrcodes/update-qrcodes.js +0 -1065
  407. package/tools/qrcodes/update-qrcodes.js.map +0 -1
  408. package/tools/qrcodes/update-qrcodes.mjs +0 -1058
  409. package/tools/qrcodes/update-qrcodes.mjs.map +0 -1
  410. package/tools/qrcodes/upsert-qrcodes.d.mts +0 -51
  411. package/tools/qrcodes/upsert-qrcodes.d.mts.map +0 -1
  412. package/tools/qrcodes/upsert-qrcodes.d.ts +0 -51
  413. package/tools/qrcodes/upsert-qrcodes.d.ts.map +0 -1
  414. package/tools/qrcodes/upsert-qrcodes.js +0 -1059
  415. package/tools/qrcodes/upsert-qrcodes.js.map +0 -1
  416. package/tools/qrcodes/upsert-qrcodes.mjs +0 -1052
  417. package/tools/qrcodes/upsert-qrcodes.mjs.map +0 -1
  418. package/tools/tags/create-tags.d.mts +0 -51
  419. package/tools/tags/create-tags.d.mts.map +0 -1
  420. package/tools/tags/create-tags.d.ts +0 -51
  421. package/tools/tags/create-tags.d.ts.map +0 -1
  422. package/tools/tags/create-tags.js +0 -58
  423. package/tools/tags/create-tags.js.map +0 -1
  424. package/tools/tags/create-tags.mjs +0 -51
  425. package/tools/tags/create-tags.mjs.map +0 -1
  426. package/tools/tags/delete-tags.d.mts +0 -51
  427. package/tools/tags/delete-tags.d.mts.map +0 -1
  428. package/tools/tags/delete-tags.d.ts +0 -51
  429. package/tools/tags/delete-tags.d.ts.map +0 -1
  430. package/tools/tags/delete-tags.js +0 -55
  431. package/tools/tags/delete-tags.js.map +0 -1
  432. package/tools/tags/delete-tags.mjs +0 -48
  433. package/tools/tags/delete-tags.mjs.map +0 -1
  434. package/tools/tags/list-tags.d.mts +0 -51
  435. package/tools/tags/list-tags.d.mts.map +0 -1
  436. package/tools/tags/list-tags.d.ts +0 -51
  437. package/tools/tags/list-tags.d.ts.map +0 -1
  438. package/tools/tags/list-tags.js +0 -87
  439. package/tools/tags/list-tags.js.map +0 -1
  440. package/tools/tags/list-tags.mjs +0 -80
  441. package/tools/tags/list-tags.mjs.map +0 -1
  442. package/tools/tags/update-tags.d.mts +0 -51
  443. package/tools/tags/update-tags.d.mts.map +0 -1
  444. package/tools/tags/update-tags.d.ts +0 -51
  445. package/tools/tags/update-tags.d.ts.map +0 -1
  446. package/tools/tags/update-tags.js +0 -63
  447. package/tools/tags/update-tags.js.map +0 -1
  448. package/tools/tags/update-tags.mjs +0 -56
  449. package/tools/tags/update-tags.mjs.map +0 -1
  450. package/tools/track/track-lead-track.d.mts +0 -51
  451. package/tools/track/track-lead-track.d.mts.map +0 -1
  452. package/tools/track/track-lead-track.d.ts +0 -51
  453. package/tools/track/track-lead-track.d.ts.map +0 -1
  454. package/tools/track/track-lead-track.js +0 -87
  455. package/tools/track/track-lead-track.js.map +0 -1
  456. package/tools/track/track-lead-track.mjs +0 -80
  457. package/tools/track/track-lead-track.mjs.map +0 -1
  458. package/tools/track/track-sale-track.d.mts +0 -51
  459. package/tools/track/track-sale-track.d.mts.map +0 -1
  460. package/tools/track/track-sale-track.d.ts +0 -51
  461. package/tools/track/track-sale-track.d.ts.map +0 -1
  462. package/tools/track/track-sale-track.js +0 -99
  463. package/tools/track/track-sale-track.js.map +0 -1
  464. package/tools/track/track-sale-track.mjs +0 -92
  465. package/tools/track/track-sale-track.mjs.map +0 -1
  466. package/tools/types.d.mts.map +0 -1
  467. package/tools/types.d.ts.map +0 -1
  468. package/tools/types.js.map +0 -1
  469. package/tools/types.mjs.map +0 -1
  470. package/tools.d.mts +0 -2
  471. package/tools.d.mts.map +0 -1
  472. package/tools.d.ts +0 -2
  473. package/tools.d.ts.map +0 -1
  474. package/tools.js +0 -18
  475. package/tools.js.map +0 -1
  476. package/tools.mjs +0 -2
  477. package/tools.mjs.map +0 -1
  478. /package/{tools/types.js → types.js} +0 -0
  479. /package/{tools/types.mjs → types.mjs} +0 -0
package/server.mjs CHANGED
@@ -1,43 +1,24 @@
1
1
  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
- import { endpoints, query } from "./tools.mjs";
4
3
  import { CallToolRequestSchema, ListToolsRequestSchema, SetLevelRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
4
  import Codeqr from '@codeqr/ts';
6
- import { applyCompatibilityTransformations, defaultClientCapabilities, knownClients, parseEmbeddedJSON, } from "./compat.mjs";
7
- import { dynamicTools } from "./dynamic-tools.mjs";
8
5
  import { codeTool } from "./code-tool.mjs";
9
6
  import docsSearchTool from "./docs-search-tool.mjs";
10
- export { ClientType } from "./compat.mjs";
11
- export { endpoints } from "./tools.mjs";
12
- export const newMcpServer = () => new McpServer({
7
+ import { getInstructions } from "./instructions.mjs";
8
+ import { blockedMethodsForCodeTool } from "./methods.mjs";
9
+ export const newMcpServer = async (stainlessApiKey) => new McpServer({
13
10
  name: 'codeqr_ts_api',
14
- version: '0.9.0',
15
- }, { capabilities: { tools: {}, logging: {} } });
16
- // Create server instance
17
- export const server = newMcpServer();
11
+ version: '0.19.3',
12
+ }, {
13
+ instructions: await getInstructions(stainlessApiKey),
14
+ capabilities: { tools: {}, logging: {} },
15
+ });
18
16
  /**
19
17
  * Initializes the provided MCP Server with the given tools and handlers.
20
18
  * If not provided, the default client, tools and handlers will be used.
21
19
  */
22
- export function initMcpServer(params) {
20
+ export async function initMcpServer(params) {
23
21
  const server = params.server instanceof McpServer ? params.server.server : params.server;
24
- const mcpOptions = params.mcpOptions ?? {};
25
- let providedEndpoints = null;
26
- let endpointMap = null;
27
- const initTools = async (implementation) => {
28
- if (implementation && (!mcpOptions.client || mcpOptions.client === 'infer')) {
29
- mcpOptions.client =
30
- implementation.name.toLowerCase().includes('claude') ? 'claude'
31
- : implementation.name.toLowerCase().includes('cursor') ? 'cursor'
32
- : undefined;
33
- mcpOptions.capabilities = {
34
- ...(mcpOptions.client && knownClients[mcpOptions.client]),
35
- ...mcpOptions.capabilities,
36
- };
37
- }
38
- providedEndpoints ?? (providedEndpoints = await selectTools(endpoints, mcpOptions));
39
- endpointMap ?? (endpointMap = Object.fromEntries(providedEndpoints.map((endpoint) => [endpoint.tool.name, endpoint])));
40
- };
41
22
  const logAtLevel = (level) => (message, ...rest) => {
42
23
  void server.sendLoggingMessage({
43
24
  level,
@@ -50,111 +31,119 @@ export function initMcpServer(params) {
50
31
  warn: logAtLevel('warning'),
51
32
  error: logAtLevel('error'),
52
33
  };
53
- let client = new Codeqr({
54
- logger,
55
- ...params.clientOptions,
56
- defaultHeaders: {
57
- ...params.clientOptions?.defaultHeaders,
58
- 'X-Stainless-MCP': 'true',
59
- },
60
- });
61
- server.setRequestHandler(ListToolsRequestSchema, async () => {
62
- if (providedEndpoints === null) {
63
- await initTools(server.getClientVersion());
34
+ let _client;
35
+ let _clientError;
36
+ let _logLevel;
37
+ const getClient = () => {
38
+ if (_clientError)
39
+ throw _clientError;
40
+ if (!_client) {
41
+ try {
42
+ _client = new Codeqr({
43
+ logger,
44
+ ...params.clientOptions,
45
+ defaultHeaders: {
46
+ ...params.clientOptions?.defaultHeaders,
47
+ 'X-Stainless-MCP': 'true',
48
+ },
49
+ });
50
+ if (_logLevel) {
51
+ _client = _client.withOptions({ logLevel: _logLevel });
52
+ }
53
+ }
54
+ catch (e) {
55
+ _clientError = e instanceof Error ? e : new Error(String(e));
56
+ throw _clientError;
57
+ }
64
58
  }
59
+ return _client;
60
+ };
61
+ const providedTools = selectTools(params.mcpOptions);
62
+ const toolMap = Object.fromEntries(providedTools.map((mcpTool) => [mcpTool.tool.name, mcpTool]));
63
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
65
64
  return {
66
- tools: providedEndpoints.map((endpoint) => endpoint.tool),
65
+ tools: providedTools.map((mcpTool) => mcpTool.tool),
67
66
  };
68
67
  });
69
68
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
70
- if (endpointMap === null) {
71
- await initTools(server.getClientVersion());
72
- }
73
69
  const { name, arguments: args } = request.params;
74
- const endpoint = endpointMap[name];
75
- if (!endpoint) {
70
+ const mcpTool = toolMap[name];
71
+ if (!mcpTool) {
76
72
  throw new Error(`Unknown tool: ${name}`);
77
73
  }
78
- return executeHandler(endpoint.tool, endpoint.handler, client, args, mcpOptions.capabilities);
74
+ let client;
75
+ try {
76
+ client = getClient();
77
+ }
78
+ catch (error) {
79
+ return {
80
+ content: [
81
+ {
82
+ type: 'text',
83
+ text: `Failed to initialize client: ${error instanceof Error ? error.message : String(error)}`,
84
+ },
85
+ ],
86
+ isError: true,
87
+ };
88
+ }
89
+ return executeHandler({
90
+ handler: mcpTool.handler,
91
+ reqContext: {
92
+ client,
93
+ stainlessApiKey: params.stainlessApiKey ?? params.mcpOptions?.stainlessApiKey,
94
+ upstreamClientEnvs: params.upstreamClientEnvs,
95
+ },
96
+ args,
97
+ });
79
98
  });
80
99
  server.setRequestHandler(SetLevelRequestSchema, async (request) => {
81
100
  const { level } = request.params;
101
+ let logLevel;
82
102
  switch (level) {
83
103
  case 'debug':
84
- client = client.withOptions({ logLevel: 'debug' });
104
+ logLevel = 'debug';
85
105
  break;
86
106
  case 'info':
87
- client = client.withOptions({ logLevel: 'info' });
107
+ logLevel = 'info';
88
108
  break;
89
109
  case 'notice':
90
110
  case 'warning':
91
- client = client.withOptions({ logLevel: 'warn' });
111
+ logLevel = 'warn';
92
112
  break;
93
113
  case 'error':
94
- client = client.withOptions({ logLevel: 'error' });
114
+ logLevel = 'error';
95
115
  break;
96
116
  default:
97
- client = client.withOptions({ logLevel: 'off' });
117
+ logLevel = 'off';
98
118
  break;
99
119
  }
120
+ _logLevel = logLevel;
121
+ if (_client) {
122
+ _client = _client.withOptions({ logLevel });
123
+ }
100
124
  return {};
101
125
  });
102
126
  }
103
127
  /**
104
128
  * Selects the tools to include in the MCP Server based on the provided options.
105
129
  */
106
- export async function selectTools(endpoints, options) {
107
- const filteredEndpoints = query(options?.filters ?? [], endpoints);
108
- let includedTools = filteredEndpoints.slice();
109
- if (includedTools.length > 0) {
110
- if (options?.includeDynamicTools) {
111
- includedTools = dynamicTools(includedTools);
112
- }
113
- }
114
- else {
115
- if (options?.includeAllTools) {
116
- includedTools = endpoints.slice();
117
- }
118
- else if (options?.includeDynamicTools) {
119
- includedTools = dynamicTools(endpoints);
120
- }
121
- else if (options?.includeCodeTools) {
122
- includedTools = [await codeTool()];
123
- }
124
- else {
125
- includedTools = endpoints.slice();
126
- }
130
+ export function selectTools(options) {
131
+ const includedTools = [];
132
+ if (options?.includeCodeTool ?? true) {
133
+ includedTools.push(codeTool({
134
+ blockedMethods: blockedMethodsForCodeTool(options),
135
+ codeExecutionMode: options?.codeExecutionMode ?? 'stainless-sandbox',
136
+ }));
127
137
  }
128
138
  if (options?.includeDocsTools ?? true) {
129
139
  includedTools.push(docsSearchTool);
130
140
  }
131
- const capabilities = { ...defaultClientCapabilities, ...options?.capabilities };
132
- return applyCompatibilityTransformations(includedTools, capabilities);
141
+ return includedTools;
133
142
  }
134
143
  /**
135
144
  * Runs the provided handler with the given client and arguments.
136
145
  */
137
- export async function executeHandler(tool, handler, client, args, compatibilityOptions) {
138
- const options = { ...defaultClientCapabilities, ...compatibilityOptions };
139
- if (!options.validJson && args) {
140
- args = parseEmbeddedJSON(args, tool.inputSchema);
141
- }
142
- return await handler(client, args || {});
146
+ export async function executeHandler({ handler, reqContext, args, }) {
147
+ return await handler({ reqContext, args: args || {} });
143
148
  }
144
- export const readEnv = (env) => {
145
- if (typeof globalThis.process !== 'undefined') {
146
- return globalThis.process.env?.[env]?.trim();
147
- }
148
- else if (typeof globalThis.Deno !== 'undefined') {
149
- return globalThis.Deno.env?.get?.(env)?.trim();
150
- }
151
- return;
152
- };
153
- export const readEnvOrError = (env) => {
154
- let envValue = readEnv(env);
155
- if (envValue === undefined) {
156
- throw new Error(`Environment variable ${env} is not set`);
157
- }
158
- return envValue;
159
- };
160
149
  //# sourceMappingURL=server.mjs.map
package/server.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"server.mjs","sourceRoot":"","sources":["src/server.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAG/E,EAAE,SAAS,EAAE,MAAM,yCAAyC;OAC5D,EAAY,SAAS,EAAmB,KAAK,EAAE;OAC/C,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GAGtB,MAAM,oCAAoC;OAEpC,MAAM,MAAM,YAAY;OACxB,EACL,iCAAiC,EAEjC,yBAAyB,EACzB,YAAY,EACZ,iBAAiB,GAClB;OACM,EAAE,YAAY,EAAE;OAChB,EAAE,QAAQ,EAAE;OACZ,cAAc;OAId,EAAE,UAAU,EAAE;OAGd,EAAE,SAAS,EAAE;AAEpB,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAC/B,IAAI,SAAS,CACX;IACE,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,OAAO;CACjB,EACD,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAC7C,CAAC;AAEJ,yBAAyB;AACzB,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAI7B;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,YAAY,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IACzF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IAE3C,IAAI,iBAAiB,GAAsB,IAAI,CAAC;IAChD,IAAI,WAAW,GAAoC,IAAI,CAAC;IAExD,MAAM,SAAS,GAAG,KAAK,EAAE,cAA+B,EAAE,EAAE;QAC1D,IAAI,cAAc,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC,EAAE,CAAC;YAC5E,UAAU,CAAC,MAAM;gBACf,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;oBAC/D,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;wBACjE,CAAC,CAAC,SAAS,CAAC;YACd,UAAU,CAAC,YAAY,GAAG;gBACxB,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACzD,GAAG,UAAU,CAAC,YAAY;aAC3B,CAAC;QACJ,CAAC;QACD,iBAAiB,KAAjB,iBAAiB,GAAK,MAAM,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,EAAC;QAC/D,WAAW,KAAX,WAAW,GAAK,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAC;IAC1G,CAAC,CAAC;IAEF,MAAM,UAAU,GACd,CAAC,KAA6C,EAAE,EAAE,CAClD,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QACtC,KAAK,MAAM,CAAC,kBAAkB,CAAC;YAC7B,KAAK;YACL,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;QAC1B,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;QACxB,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;QAC3B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;KAC3B,CAAC;IAEF,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC;QACtB,MAAM;QACN,GAAG,MAAM,CAAC,aAAa;QACvB,cAAc,EAAE;YACd,GAAG,MAAM,CAAC,aAAa,EAAE,cAAc;YACvC,iBAAiB,EAAE,MAAM;SAC1B;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO;YACL,KAAK,EAAE,iBAAkB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;SAC3D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM,QAAQ,GAAG,WAAY,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO;gBACV,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBAClD,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBAClD,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACnD,MAAM;YACR;gBACE,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;gBACjD,MAAM;QACV,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAqB,EAAE,OAAoB;IAC3E,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAEnE,IAAI,aAAa,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAE9C,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAC;YACjC,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;YAC7B,aAAa,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAC;YACxC,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;YACrC,aAAa,GAAG,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,gBAAgB,IAAI,IAAI,EAAE,CAAC;QACtC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,YAAY,GAAG,EAAE,GAAG,yBAAyB,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,CAAC;IAChF,OAAO,iCAAiC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAU,EACV,OAAwB,EACxB,MAAc,EACd,IAAyC,EACzC,oBAAkD;IAElD,MAAM,OAAO,GAAG,EAAE,GAAG,yBAAyB,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAC1E,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC/B,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAsB,EAAE;IACzD,IAAI,OAAQ,UAAkB,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACvD,OAAQ,UAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;SAAM,IAAI,OAAQ,UAAkB,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC3D,OAAQ,UAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO;AACT,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAU,EAAE;IACpD,IAAI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,aAAa,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
1
+ {"version":3,"file":"server.mjs","sourceRoot":"","sources":["src/server.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAG/E,EAAE,SAAS,EAAE,MAAM,yCAAyC;OAC5D,EACL,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,oCAAoC;OAEpC,MAAM,MAAM,YAAY;OACxB,EAAE,QAAQ,EAAE;OACZ,cAAc;OACd,EAAE,eAAe,EAAE;OAEnB,EAAE,yBAAyB,EAAE;AAGpC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,eAAmC,EAAE,EAAE,CACxE,IAAI,SAAS,CACX;IACE,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,QAAQ;CAClB,EACD;IACE,YAAY,EAAE,MAAM,eAAe,CAAC,eAAe,CAAC;IACpD,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;CACzC,CACF,CAAC;AAEJ;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAMnC;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,YAAY,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAEzF,MAAM,UAAU,GACd,CAAC,KAA6C,EAAE,EAAE,CAClD,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QACtC,KAAK,MAAM,CAAC,kBAAkB,CAAC;YAC7B,KAAK;YACL,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;IACL,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;QAC1B,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;QACxB,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;QAC3B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;KAC3B,CAAC;IAEF,IAAI,OAA2B,CAAC;IAChC,IAAI,YAA+B,CAAC;IACpC,IAAI,SAAkE,CAAC;IAEvE,MAAM,SAAS,GAAG,GAAW,EAAE;QAC7B,IAAI,YAAY;YAAE,MAAM,YAAY,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,MAAM,CAAC;oBACnB,MAAM;oBACN,GAAG,MAAM,CAAC,aAAa;oBACvB,cAAc,EAAE;wBACd,GAAG,MAAM,CAAC,aAAa,EAAE,cAAc;wBACvC,iBAAiB,EAAE,MAAM;qBAC1B;iBACF,CAAC,CAAC;gBACH,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,YAAY,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,MAAM,YAAY,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjG,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,OAAO;YACL,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;SACpD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,SAAS,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;qBAC/F;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO,cAAc,CAAC;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE;gBACV,MAAM;gBACN,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,UAAU,EAAE,eAAe;gBAC7E,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;aAC9C;YACD,IAAI;SACL,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,IAAI,QAAqD,CAAC;QAC1D,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO;gBACV,QAAQ,GAAG,OAAO,CAAC;gBACnB,MAAM;YACR,KAAK,MAAM;gBACT,QAAQ,GAAG,MAAM,CAAC;gBAClB,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,QAAQ,GAAG,MAAM,CAAC;gBAClB,MAAM;YACR,KAAK,OAAO;gBACV,QAAQ,GAAG,OAAO,CAAC;gBACnB,MAAM;YACR;gBACE,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM;QACV,CAAC;QACD,SAAS,GAAG,QAAQ,CAAC;QACrB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,MAAM,aAAa,GAAG,EAAE,CAAC;IAEzB,IAAI,OAAO,EAAE,eAAe,IAAI,IAAI,EAAE,CAAC;QACrC,aAAa,CAAC,IAAI,CAChB,QAAQ,CAAC;YACP,cAAc,EAAE,yBAAyB,CAAC,OAAO,CAAC;YAClD,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,IAAI,mBAAmB;SACrE,CAAC,CACH,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,EAAE,gBAAgB,IAAI,IAAI,EAAE,CAAC;QACtC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,OAAO,EACP,UAAU,EACV,IAAI,GAKL;IACC,OAAO,MAAM,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -2,8 +2,9 @@
2
2
 
3
3
  import { IncomingMessage } from 'node:http';
4
4
  import { ClientOptions } from '@codeqr/ts';
5
+ import { McpOptions } from './options';
5
6
 
6
- export const parseAuthHeaders = (req: IncomingMessage): Partial<ClientOptions> => {
7
+ export const parseClientAuthHeaders = (req: IncomingMessage, required?: boolean): Partial<ClientOptions> => {
7
8
  if (req.headers.authorization) {
8
9
  const scheme = req.headers.authorization.split(' ')[0]!;
9
10
  const value = req.headers.authorization.slice(scheme.length + 1);
@@ -15,6 +16,8 @@ export const parseAuthHeaders = (req: IncomingMessage): Partial<ClientOptions> =
15
16
  'Unsupported authorization scheme. Expected the "Authorization" header to be a supported scheme (Bearer).',
16
17
  );
17
18
  }
19
+ } else if (required) {
20
+ throw new Error('Missing required Authorization header; see WWW-Authenticate header for details.');
18
21
  }
19
22
 
20
23
  const apiKey =
@@ -23,3 +26,17 @@ export const parseAuthHeaders = (req: IncomingMessage): Partial<ClientOptions> =
23
26
  : req.headers['x-codeqr-api-key'];
24
27
  return { apiKey };
25
28
  };
29
+
30
+ export const getStainlessApiKey = (req: IncomingMessage, mcpOptions: McpOptions): string | undefined => {
31
+ // Try to get the key from the x-stainless-api-key header
32
+ const headerKey =
33
+ Array.isArray(req.headers['x-stainless-api-key']) ?
34
+ req.headers['x-stainless-api-key'][0]
35
+ : req.headers['x-stainless-api-key'];
36
+ if (headerKey && typeof headerKey === 'string') {
37
+ return headerKey;
38
+ }
39
+
40
+ // Fall back to value set in the mcpOptions (e.g. from environment variable), if provided
41
+ return mcpOptions.stainlessApiKey;
42
+ };
@@ -0,0 +1,5 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ export function getWorkerPath(): string {
4
+ return require.resolve('./code-tool-worker.mjs');
5
+ }
@@ -3,16 +3,15 @@
3
3
  import { ClientOptions } from '@codeqr/ts';
4
4
 
5
5
  export type WorkerInput = {
6
- opts: ClientOptions;
6
+ project_name: string;
7
7
  code: string;
8
+ client_opts: ClientOptions;
9
+ intent?: string | undefined;
8
10
  };
9
- export type WorkerSuccess = {
11
+
12
+ export type WorkerOutput = {
13
+ is_error: boolean;
10
14
  result: unknown | null;
11
- logLines: string[];
12
- errLines: string[];
13
- };
14
- export type WorkerError = {
15
- message: string | undefined;
16
- logLines: string[];
17
- errLines: string[];
15
+ log_lines: string[];
16
+ err_lines: string[];
18
17
  };
@@ -0,0 +1,295 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import path from 'node:path';
4
+ import util from 'node:util';
5
+ import Fuse from 'fuse.js';
6
+ import ts from 'typescript';
7
+ import { WorkerOutput } from './code-tool-types';
8
+ import { Codeqr, ClientOptions } from '@codeqr/ts';
9
+
10
+ function getRunFunctionSource(code: string): {
11
+ type: 'declaration' | 'expression';
12
+ client: string | undefined;
13
+ code: string;
14
+ } | null {
15
+ const sourceFile = ts.createSourceFile('code.ts', code, ts.ScriptTarget.Latest, true);
16
+ const printer = ts.createPrinter();
17
+
18
+ for (const statement of sourceFile.statements) {
19
+ // Check for top-level function declarations
20
+ if (ts.isFunctionDeclaration(statement)) {
21
+ if (statement.name?.text === 'run') {
22
+ return {
23
+ type: 'declaration',
24
+ client: statement.parameters[0]?.name.getText(),
25
+ code: printer.printNode(ts.EmitHint.Unspecified, statement.body!, sourceFile),
26
+ };
27
+ }
28
+ }
29
+
30
+ // Check for variable declarations: const run = () => {} or const run = function() {}
31
+ if (ts.isVariableStatement(statement)) {
32
+ for (const declaration of statement.declarationList.declarations) {
33
+ if (
34
+ ts.isIdentifier(declaration.name) &&
35
+ declaration.name.text === 'run' &&
36
+ // Check if it's initialized with a function
37
+ declaration.initializer &&
38
+ (ts.isFunctionExpression(declaration.initializer) || ts.isArrowFunction(declaration.initializer))
39
+ ) {
40
+ return {
41
+ type: 'expression',
42
+ client: declaration.initializer.parameters[0]?.name.getText(),
43
+ code: printer.printNode(ts.EmitHint.Unspecified, declaration.initializer, sourceFile),
44
+ };
45
+ }
46
+ }
47
+ }
48
+ }
49
+
50
+ return null;
51
+ }
52
+
53
+ function getTSDiagnostics(code: string): string[] {
54
+ const functionSource = getRunFunctionSource(code)!;
55
+ const codeWithImport = [
56
+ 'import { Codeqr } from "@codeqr/ts";',
57
+ functionSource.type === 'declaration' ?
58
+ `async function run(${functionSource.client}: Codeqr)`
59
+ : `const run: (${functionSource.client}: Codeqr) => Promise<unknown> =`,
60
+ functionSource.code,
61
+ ].join('\n');
62
+ const sourcePath = path.resolve('code.ts');
63
+ const ast = ts.createSourceFile(sourcePath, codeWithImport, ts.ScriptTarget.Latest, true);
64
+ const options = ts.getDefaultCompilerOptions();
65
+ options.target = ts.ScriptTarget.Latest;
66
+ options.module = ts.ModuleKind.NodeNext;
67
+ options.moduleResolution = ts.ModuleResolutionKind.NodeNext;
68
+ const host = ts.createCompilerHost(options, true);
69
+ const newHost: typeof host = {
70
+ ...host,
71
+ getSourceFile: (...args) => {
72
+ if (path.resolve(args[0]) === sourcePath) {
73
+ return ast;
74
+ }
75
+ return host.getSourceFile(...args);
76
+ },
77
+ readFile: (...args) => {
78
+ if (path.resolve(args[0]) === sourcePath) {
79
+ return codeWithImport;
80
+ }
81
+ return host.readFile(...args);
82
+ },
83
+ fileExists: (...args) => {
84
+ if (path.resolve(args[0]) === sourcePath) {
85
+ return true;
86
+ }
87
+ return host.fileExists(...args);
88
+ },
89
+ };
90
+ const program = ts.createProgram({
91
+ options,
92
+ rootNames: [sourcePath],
93
+ host: newHost,
94
+ });
95
+ const diagnostics = ts.getPreEmitDiagnostics(program, ast);
96
+ return diagnostics.map((d) => {
97
+ const message = ts.flattenDiagnosticMessageText(d.messageText, '\n');
98
+ if (!d.file || !d.start) return `- ${message}`;
99
+ const { line: lineNumber } = ts.getLineAndCharacterOfPosition(d.file, d.start);
100
+ const line = codeWithImport.split('\n').at(lineNumber)?.trim();
101
+ return line ? `- ${message}\n ${line}` : `- ${message}`;
102
+ });
103
+ }
104
+
105
+ const fuse = new Fuse(
106
+ [
107
+ 'client.links.create',
108
+ 'client.links.delete',
109
+ 'client.links.list',
110
+ 'client.links.retrieveInfo',
111
+ 'client.links.update',
112
+ 'client.links.bulk.create',
113
+ 'client.qrcodes.create',
114
+ 'client.qrcodes.delete',
115
+ 'client.qrcodes.list',
116
+ 'client.qrcodes.retrieve',
117
+ 'client.qrcodes.update',
118
+ 'client.qrcodes.bulk.create',
119
+ 'client.analytics.retrieve',
120
+ 'client.events.list',
121
+ 'client.tags.create',
122
+ 'client.tags.delete',
123
+ 'client.tags.list',
124
+ 'client.tags.update',
125
+ 'client.domains.create',
126
+ 'client.domains.delete',
127
+ 'client.domains.list',
128
+ 'client.domains.update',
129
+ 'client.track.trackLead',
130
+ 'client.track.trackSale',
131
+ 'client.projects.list',
132
+ ],
133
+ { threshold: 1, shouldSort: true },
134
+ );
135
+
136
+ function getMethodSuggestions(fullyQualifiedMethodName: string): string[] {
137
+ return fuse
138
+ .search(fullyQualifiedMethodName)
139
+ .map(({ item }) => item)
140
+ .slice(0, 5);
141
+ }
142
+
143
+ const proxyToObj = new WeakMap<any, any>();
144
+ const objToProxy = new WeakMap<any, any>();
145
+
146
+ type ClientProxyConfig = {
147
+ path: string[];
148
+ isBelievedBad?: boolean;
149
+ };
150
+
151
+ function makeSdkProxy<T extends object>(obj: T, { path, isBelievedBad = false }: ClientProxyConfig): T {
152
+ let proxy: T = objToProxy.get(obj);
153
+
154
+ if (!proxy) {
155
+ proxy = new Proxy(obj, {
156
+ get(target, prop, receiver) {
157
+ const propPath = [...path, String(prop)];
158
+ const value = Reflect.get(target, prop, receiver);
159
+
160
+ if (isBelievedBad || (!(prop in target) && value === undefined)) {
161
+ // If we're accessing a path that doesn't exist, it will probably eventually error.
162
+ // Let's proxy it and mark it bad so that we can control the error message.
163
+ // We proxy an empty class so that an invocation or construction attempt is possible.
164
+ return makeSdkProxy(class {}, { path: propPath, isBelievedBad: true });
165
+ }
166
+
167
+ if (value !== null && (typeof value === 'object' || typeof value === 'function')) {
168
+ return makeSdkProxy(value, { path: propPath, isBelievedBad });
169
+ }
170
+
171
+ return value;
172
+ },
173
+
174
+ apply(target, thisArg, args) {
175
+ if (isBelievedBad || typeof target !== 'function') {
176
+ const fullyQualifiedMethodName = path.join('.');
177
+ const suggestions = getMethodSuggestions(fullyQualifiedMethodName);
178
+ throw new Error(
179
+ `${fullyQualifiedMethodName} is not a function. Did you mean: ${suggestions.join(', ')}`,
180
+ );
181
+ }
182
+
183
+ return Reflect.apply(target, proxyToObj.get(thisArg) ?? thisArg, args);
184
+ },
185
+
186
+ construct(target, args, newTarget) {
187
+ if (isBelievedBad || typeof target !== 'function') {
188
+ const fullyQualifiedMethodName = path.join('.');
189
+ const suggestions = getMethodSuggestions(fullyQualifiedMethodName);
190
+ throw new Error(
191
+ `${fullyQualifiedMethodName} is not a constructor. Did you mean: ${suggestions.join(', ')}`,
192
+ );
193
+ }
194
+
195
+ return Reflect.construct(target, args, newTarget);
196
+ },
197
+ });
198
+
199
+ objToProxy.set(obj, proxy);
200
+ proxyToObj.set(proxy, obj);
201
+ }
202
+
203
+ return proxy;
204
+ }
205
+
206
+ function parseError(code: string, error: unknown): string | undefined {
207
+ if (!(error instanceof Error)) return;
208
+ const message = error.name ? `${error.name}: ${error.message}` : error.message;
209
+ try {
210
+ // Deno uses V8; the first "<anonymous>:LINE:COLUMN" is the top of stack.
211
+ const lineNumber = error.stack?.match(/<anonymous>:([0-9]+):[0-9]+/)?.[1];
212
+ // -1 for the zero-based indexing
213
+ const line =
214
+ lineNumber &&
215
+ code
216
+ .split('\n')
217
+ .at(parseInt(lineNumber, 10) - 1)
218
+ ?.trim();
219
+ return line ? `${message}\n at line ${lineNumber}\n ${line}` : message;
220
+ } catch {
221
+ return message;
222
+ }
223
+ }
224
+
225
+ const fetch = async (req: Request): Promise<Response> => {
226
+ const { opts, code } = (await req.json()) as { opts: ClientOptions; code: string };
227
+
228
+ const runFunctionSource = code ? getRunFunctionSource(code) : null;
229
+ if (!runFunctionSource) {
230
+ const message =
231
+ code ?
232
+ 'The code is missing a top-level `run` function.'
233
+ : 'The code argument is missing. Provide one containing a top-level `run` function.';
234
+ return Response.json(
235
+ {
236
+ is_error: true,
237
+ result: `${message} Write code within this template:\n\n\`\`\`\nasync function run(client) {\n // Fill this out\n}\n\`\`\``,
238
+ log_lines: [],
239
+ err_lines: [],
240
+ } satisfies WorkerOutput,
241
+ { status: 400, statusText: 'Code execution error' },
242
+ );
243
+ }
244
+
245
+ const diagnostics = getTSDiagnostics(code);
246
+ if (diagnostics.length > 0) {
247
+ return Response.json(
248
+ {
249
+ is_error: true,
250
+ result: `The code contains TypeScript diagnostics:\n${diagnostics.join('\n')}`,
251
+ log_lines: [],
252
+ err_lines: [],
253
+ } satisfies WorkerOutput,
254
+ { status: 400, statusText: 'Code execution error' },
255
+ );
256
+ }
257
+
258
+ const client = new Codeqr({
259
+ ...opts,
260
+ });
261
+
262
+ const log_lines: string[] = [];
263
+ const err_lines: string[] = [];
264
+ const console = {
265
+ log: (...args: unknown[]) => {
266
+ log_lines.push(util.format(...args));
267
+ },
268
+ error: (...args: unknown[]) => {
269
+ err_lines.push(util.format(...args));
270
+ },
271
+ };
272
+ try {
273
+ let run_ = async (client: any) => {};
274
+ eval(`${code}\nrun_ = run;`);
275
+ const result = await run_(makeSdkProxy(client, { path: ['client'] }));
276
+ return Response.json({
277
+ is_error: false,
278
+ result,
279
+ log_lines,
280
+ err_lines,
281
+ } satisfies WorkerOutput);
282
+ } catch (e) {
283
+ return Response.json(
284
+ {
285
+ is_error: true,
286
+ result: parseError(code, e),
287
+ log_lines,
288
+ err_lines,
289
+ } satisfies WorkerOutput,
290
+ { status: 400, statusText: 'Code execution error' },
291
+ );
292
+ }
293
+ };
294
+
295
+ export default { fetch };