@zackbart/connecta 0.34.1 → 0.35.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 (429) hide show
  1. package/CHANGELOG.md +363 -0
  2. package/README.md +62 -106
  3. package/SECURITY.md +3 -2
  4. package/bin/connecta.mjs +41 -16
  5. package/bin/version.mjs +1 -1
  6. package/dist/access-tokens.d.ts +2 -1
  7. package/dist/access-tokens.js +66 -30
  8. package/dist/activity.d.ts +1 -1
  9. package/dist/activity.js +2 -0
  10. package/dist/agent-config.d.ts +23 -0
  11. package/dist/agent-config.js +59 -0
  12. package/dist/agent-description.js +16 -0
  13. package/dist/agent-identity.js +4 -4
  14. package/dist/agent-observation.js +39 -0
  15. package/dist/auth/clerk-sdk/client.d.ts +2 -0
  16. package/dist/auth/clerk-sdk/generated.js +554 -563
  17. package/dist/auth/clerk-transport.js +70 -3
  18. package/dist/auth/clerk.d.ts +13 -0
  19. package/dist/auth/clerk.js +653 -246
  20. package/dist/auth/cloudflare-access.js +46 -42
  21. package/dist/auth/downstream-client-metadata.js +2 -2
  22. package/dist/auth/downstream-oauth.js +2051 -1160
  23. package/dist/auth/downstream-revocation.js +88 -88
  24. package/dist/auth/native-call.js +20 -0
  25. package/dist/auth/native.js +184 -0
  26. package/dist/auth/oauth-start-reset.js +11 -5
  27. package/dist/auth/oauth-token-response.js +121 -102
  28. package/dist/auth/oauth-v2-migration.js +97 -78
  29. package/dist/auth/renewable-grant.js +10 -0
  30. package/dist/auth/static-oauth.js +663 -271
  31. package/dist/auth/vercel-agent.js +266 -0
  32. package/dist/auth-admission.js +204 -0
  33. package/dist/auth-elicitation.js +350 -241
  34. package/dist/authorization-handoff.js +164 -90
  35. package/dist/call-admission-context.js +3 -10
  36. package/dist/call-admission.js +2 -0
  37. package/dist/call-classification.js +9 -0
  38. package/dist/call-recovery.js +32 -13
  39. package/dist/canonical-json.js +8 -0
  40. package/dist/catalog-cache.js +369 -213
  41. package/dist/catalog-service.js +659 -530
  42. package/dist/catalog.js +5 -1
  43. package/dist/concurrency.js +0 -25
  44. package/dist/config-defaults.d.ts +1 -0
  45. package/dist/config-defaults.js +1 -0
  46. package/dist/config-schema.d.ts +3 -1
  47. package/dist/config-schema.js +13 -3
  48. package/dist/config.d.ts +40 -6
  49. package/dist/config.js +40 -26
  50. package/dist/connector-caller.d.ts +4 -0
  51. package/dist/connector-caller.js +17 -4
  52. package/dist/connectors/api-connector.d.ts +12 -7
  53. package/dist/connectors/api-connector.js +142 -56
  54. package/dist/connectors/guarded-fetch.d.ts +51 -17
  55. package/dist/connectors/guarded-fetch.js +215 -121
  56. package/dist/connectors/negotiation-cache.js +20 -10
  57. package/dist/connectors/remote-mcp.d.ts +10 -30
  58. package/dist/connectors/remote-mcp.js +955 -563
  59. package/dist/d1.js +10 -243
  60. package/dist/derived-context.js +5 -0
  61. package/dist/describe-config.d.ts +3 -1
  62. package/dist/describe-config.js +2 -0
  63. package/dist/downstream-input.js +347 -260
  64. package/dist/errors.d.ts +87 -6
  65. package/dist/errors.js +114 -4
  66. package/dist/execute.js +87 -50
  67. package/dist/executor-admission.js +3 -0
  68. package/dist/executors/quickjs.js +163 -112
  69. package/dist/guarded-transport.js +50 -0
  70. package/dist/guest-runtime.js +1 -1
  71. package/dist/http/client.js +439 -0
  72. package/dist/http/errors.js +558 -0
  73. package/dist/http/fields.js +49 -0
  74. package/dist/http/hatch-paging.js +318 -0
  75. package/dist/http/hatch.js +1279 -0
  76. package/dist/http/json-schema.js +267 -0
  77. package/dist/http/node-transport.js +241 -0
  78. package/dist/http/oauth.js +162 -0
  79. package/dist/http/paging.js +228 -0
  80. package/dist/http/provider.js +221 -0
  81. package/dist/http/safety.js +82 -0
  82. package/dist/http/services.js +79 -0
  83. package/dist/http/tools.js +383 -0
  84. package/dist/http/vendor-index.js +138 -0
  85. package/dist/http/vendor.js +448 -0
  86. package/dist/http/write-request.js +66 -0
  87. package/dist/http-policy.d.ts +11 -0
  88. package/dist/http-policy.js +45 -0
  89. package/dist/inbound-credential.js +1 -1
  90. package/dist/index.d.ts +2 -2
  91. package/dist/index.js +4 -0
  92. package/dist/invocation-auth.js +30 -19
  93. package/dist/invocation.js +218 -85
  94. package/dist/mcp-result.js +0 -4
  95. package/dist/membership.d.ts +4 -0
  96. package/dist/meta-output.js +1 -1
  97. package/dist/meta-tools.js +531 -406
  98. package/dist/native-recovery.js +52 -0
  99. package/dist/native-tools.js +382 -0
  100. package/dist/node.d.ts +4 -3
  101. package/dist/node.js +45 -8
  102. package/dist/oauth-handoff.js +177 -104
  103. package/dist/oauth-partition.js +6 -20
  104. package/dist/oauth-sealing.js +6 -7
  105. package/dist/operation-vocabulary.js +101 -0
  106. package/dist/operator-record.d.ts +2 -2
  107. package/dist/operator-record.js +17 -4
  108. package/dist/operator-ui/agents.d.ts +5 -4
  109. package/dist/operator-ui/agents.js +17 -7
  110. package/dist/operator-ui/config-summary.js +5 -4
  111. package/dist/operator-ui/connection-map.js +7 -5
  112. package/dist/operator-ui/contract.d.ts +7 -3
  113. package/dist/operator-ui/endpoints.js +4 -13
  114. package/dist/operator-ui/fix-prompts.d.ts +1 -1
  115. package/dist/operator-ui/fix-prompts.js +0 -8
  116. package/dist/operator-ui/generated.js +3 -3
  117. package/dist/operator-ui/model.d.ts +2 -3
  118. package/dist/operator-ui/overview.js +5 -2
  119. package/dist/operator-ui/setup-commands.js +0 -4
  120. package/dist/operator-ui/view.d.ts +2 -25
  121. package/dist/operator-ui/view.js +2 -76
  122. package/dist/program-writes.js +47 -26
  123. package/dist/provider-call-facts.d.ts +115 -0
  124. package/dist/provider-call-facts.js +182 -0
  125. package/dist/provider-call.d.ts +112 -0
  126. package/dist/provider-call.js +271 -0
  127. package/dist/provider.d.ts +65 -31
  128. package/dist/provider.js +116 -39
  129. package/dist/providers/_shared/google/hatch.js +91 -0
  130. package/dist/providers/_shared/google/kit.js +537 -0
  131. package/dist/providers/_shared/google/result-size.js +15 -2
  132. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  133. package/dist/providers/_shared/google/service-account.js +8 -4
  134. package/dist/providers/_shared/google/workspace.d.ts +6 -210
  135. package/dist/providers/_shared/google/workspace.js +6 -425
  136. package/dist/providers/_shared/rest/compact-index.js +86 -0
  137. package/dist/providers/_shared/rest/dispatch.js +3 -23
  138. package/dist/providers/_shared/rest/kit.js +546 -0
  139. package/dist/providers/_shared/rest/operation-index.js +230 -14
  140. package/dist/providers/_shared/rest/response-media.js +11 -0
  141. package/dist/providers/_shared/rest/tools.js +101 -78
  142. package/dist/providers/_shared/rest/value-safety.js +353 -195
  143. package/dist/providers/_shared/sensitive-fields.js +27 -0
  144. package/dist/providers/breeze/api.js +584 -0
  145. package/dist/providers/breeze/index.d.ts +1 -3
  146. package/dist/providers/breeze/index.js +67 -1420
  147. package/dist/providers/breeze/openapi.generated.js +60 -0
  148. package/dist/providers/breeze/skill.generated.js +2 -6
  149. package/dist/providers/breeze/tools.js +696 -0
  150. package/dist/providers/ccb/api.js +496 -0
  151. package/dist/providers/ccb/index.d.ts +15 -37
  152. package/dist/providers/ccb/index.js +77 -1702
  153. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  154. package/dist/providers/ccb/lib/constants.js +74 -0
  155. package/dist/providers/ccb/lib/guide.js +9 -0
  156. package/dist/providers/ccb/lib/verdicts.js +387 -0
  157. package/dist/providers/ccb/openapi.generated.js +397 -0
  158. package/dist/providers/ccb/safety.js +295 -0
  159. package/dist/providers/ccb/skill.generated.js +2 -6
  160. package/dist/providers/ccb/tools.js +853 -0
  161. package/dist/providers/cloudflare/api.js +1066 -0
  162. package/dist/providers/cloudflare/index.d.ts +5 -22
  163. package/dist/providers/cloudflare/index.js +79 -197
  164. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  165. package/dist/providers/cloudflare/lib/config.js +2 -0
  166. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  167. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  168. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  169. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  170. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  171. package/dist/providers/cloudflare/openapi.generated.js +4 -3
  172. package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
  173. package/dist/providers/cloudflare/skill.generated.js +2 -10
  174. package/dist/providers/cloudflare/tools.js +360 -0
  175. package/dist/providers/docs/api.js +51 -0
  176. package/dist/providers/docs/index.d.ts +1 -12
  177. package/dist/providers/docs/index.js +53 -1165
  178. package/dist/providers/docs/lib/constants.d.ts +18 -0
  179. package/dist/providers/docs/lib/constants.js +18 -0
  180. package/dist/providers/docs/lib/discovery.js +26 -0
  181. package/dist/providers/docs/lib/requests.js +48 -0
  182. package/dist/providers/docs/lib/schemas.js +168 -0
  183. package/dist/providers/docs/openapi.generated.js +16 -0
  184. package/dist/providers/docs/safety.js +54 -0
  185. package/dist/providers/docs/skill.generated.js +2 -6
  186. package/dist/providers/docs/tools.js +802 -0
  187. package/dist/providers/drive/api.js +177 -0
  188. package/dist/providers/drive/index.d.ts +1 -12
  189. package/dist/providers/drive/index.js +38 -1448
  190. package/dist/providers/drive/lib/constants.d.ts +6 -0
  191. package/dist/providers/drive/lib/constants.js +6 -0
  192. package/dist/providers/drive/lib/contracts.js +532 -0
  193. package/dist/providers/drive/lib/hatch.js +197 -0
  194. package/dist/providers/drive/openapi.generated.js +77 -0
  195. package/dist/providers/drive/safety.js +90 -0
  196. package/dist/providers/drive/skill.generated.js +2 -6
  197. package/dist/providers/drive/tools.js +1290 -0
  198. package/dist/providers/forms/api.js +71 -0
  199. package/dist/providers/forms/index.d.ts +1 -12
  200. package/dist/providers/forms/index.js +49 -1145
  201. package/dist/providers/forms/lib/constants.d.ts +14 -0
  202. package/dist/providers/forms/lib/constants.js +19 -0
  203. package/dist/providers/forms/lib/hatch.js +72 -0
  204. package/dist/providers/forms/openapi.generated.js +23 -0
  205. package/dist/providers/forms/safety.js +34 -0
  206. package/dist/providers/forms/skill.generated.js +2 -8
  207. package/dist/providers/forms/tools.js +1024 -0
  208. package/dist/providers/github/api.js +150 -0
  209. package/dist/providers/github/index.d.ts +4 -5
  210. package/dist/providers/github/index.js +30 -87
  211. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  212. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  213. package/dist/providers/github/lib/discovery.js +132 -0
  214. package/dist/providers/github/lib/operations.js +58 -0
  215. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  216. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  217. package/dist/providers/github/openapi.generated.js +1216 -0
  218. package/dist/providers/github/safety.js +216 -0
  219. package/dist/providers/github/skill.generated.js +2 -5
  220. package/dist/providers/github/tools.js +506 -0
  221. package/dist/providers/gmail/api.js +114 -0
  222. package/dist/providers/gmail/index.d.ts +1 -12
  223. package/dist/providers/gmail/index.js +73 -1621
  224. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  225. package/dist/providers/gmail/lib/constants.js +16 -0
  226. package/dist/providers/gmail/lib/index.js +173 -0
  227. package/dist/providers/gmail/lib/schemas.js +176 -0
  228. package/dist/providers/gmail/lib/threading.js +120 -0
  229. package/dist/providers/gmail/openapi.generated.js +92 -0
  230. package/dist/providers/gmail/safety.js +21 -0
  231. package/dist/providers/gmail/skill.generated.js +2 -6
  232. package/dist/providers/gmail/tools.js +1435 -0
  233. package/dist/providers/overflow/api.js +1008 -0
  234. package/dist/providers/overflow/index.d.ts +1 -17
  235. package/dist/providers/overflow/index.js +60 -1488
  236. package/dist/providers/overflow/skill.generated.js +2 -5
  237. package/dist/providers/overflow/tools.js +873 -0
  238. package/dist/providers/planning-center/api.js +467 -0
  239. package/dist/providers/planning-center/index.d.ts +4 -35
  240. package/dist/providers/planning-center/index.js +69 -2445
  241. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  242. package/dist/providers/planning-center/lib/constants.js +83 -0
  243. package/dist/providers/planning-center/lib/discovery.js +40 -0
  244. package/dist/providers/planning-center/lib/guide.js +39 -0
  245. package/dist/providers/planning-center/lib/json-api.js +83 -0
  246. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  247. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  248. package/dist/providers/planning-center/safety.js +188 -0
  249. package/dist/providers/planning-center/skill.generated.js +2 -27
  250. package/dist/providers/planning-center/tools.js +1010 -0
  251. package/dist/providers/sheets/api.js +133 -0
  252. package/dist/providers/sheets/index.d.ts +4 -16
  253. package/dist/providers/sheets/index.js +61 -1172
  254. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  255. package/dist/providers/sheets/lib/constants.js +14 -0
  256. package/dist/providers/sheets/lib/hatch.js +163 -0
  257. package/dist/providers/sheets/lib/requests.js +105 -0
  258. package/dist/providers/sheets/lib/schemas.js +138 -0
  259. package/dist/providers/sheets/openapi.generated.js +30 -0
  260. package/dist/providers/sheets/safety.js +27 -0
  261. package/dist/providers/sheets/skill.generated.js +2 -7
  262. package/dist/providers/sheets/tools.js +734 -0
  263. package/dist/providers/slides/api.js +147 -0
  264. package/dist/providers/slides/index.d.ts +2 -10
  265. package/dist/providers/slides/index.js +48 -2555
  266. package/dist/providers/slides/lib/constants.d.ts +11 -0
  267. package/dist/providers/slides/lib/constants.js +11 -0
  268. package/dist/providers/slides/lib/requests.js +60 -0
  269. package/dist/providers/slides/lib/schemas.js +565 -0
  270. package/dist/providers/slides/openapi.generated.js +18 -0
  271. package/dist/providers/slides/skill.generated.js +2 -6
  272. package/dist/providers/slides/tools.js +1968 -0
  273. package/dist/providers/stripe/api.js +401 -0
  274. package/dist/providers/stripe/index.d.ts +5 -27
  275. package/dist/providers/stripe/index.js +74 -210
  276. package/dist/providers/stripe/lib/config.d.ts +4 -0
  277. package/dist/providers/stripe/lib/config.js +2 -0
  278. package/dist/providers/stripe/openapi.generated.js +4 -3
  279. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  280. package/dist/providers/stripe/skill.generated.js +2 -11
  281. package/dist/providers/stripe/tools.js +77 -0
  282. package/dist/providers/tithely/api.js +531 -0
  283. package/dist/providers/tithely/index.d.ts +17 -0
  284. package/dist/providers/tithely/index.js +86 -965
  285. package/dist/providers/tithely/skill.generated.js +2 -5
  286. package/dist/providers/tithely/tools.js +426 -0
  287. package/dist/providers/vercel/api.js +551 -0
  288. package/dist/providers/vercel/index.d.ts +9 -25
  289. package/dist/providers/vercel/index.js +66 -260
  290. package/dist/providers/vercel/lib/config.d.ts +2 -0
  291. package/dist/providers/vercel/lib/config.js +2 -0
  292. package/dist/providers/vercel/lib/index.js +117 -0
  293. package/dist/providers/vercel/lib/logs.js +100 -0
  294. package/dist/providers/vercel/lib/pin.js +270 -0
  295. package/dist/providers/vercel/openapi.generated.js +10 -5
  296. package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
  297. package/dist/providers/vercel/skill.generated.js +2 -7
  298. package/dist/providers/vercel/tools.js +642 -0
  299. package/dist/redaction-identity.js +47 -0
  300. package/dist/redaction-marker.js +125 -0
  301. package/dist/registry.d.ts +21 -15
  302. package/dist/registry.js +409 -376
  303. package/dist/routes/access-tokens.js +1 -1
  304. package/dist/routes/actor-labels.js +1 -1
  305. package/dist/routes/connect.js +1 -1
  306. package/dist/routes/dispatch.js +103 -0
  307. package/dist/routes/mcp.js +170 -79
  308. package/dist/routes/oauth.js +3 -1
  309. package/dist/routes/operator.js +2 -2
  310. package/dist/routes/shared.d.ts +5 -4
  311. package/dist/routes/shared.js +244 -177
  312. package/dist/routes/skills.js +10 -8
  313. package/dist/routes/ui-config.js +27 -3
  314. package/dist/routes/ui-data.js +21 -20
  315. package/dist/routes/ui.js +1 -1
  316. package/dist/runtime/call-admission.js +0 -26
  317. package/dist/runtime/call-entry.js +30 -0
  318. package/dist/runtime/call.js +556 -0
  319. package/dist/runtime/connector-scope.js +7 -0
  320. package/dist/runtime/credential-probe.js +34 -0
  321. package/dist/runtime/executor.js +40 -0
  322. package/dist/runtime/native-storage.js +63 -0
  323. package/dist/runtime/registry.js +27 -0
  324. package/dist/runtime/request-scope.js +72 -0
  325. package/dist/runtime/run.js +15 -7
  326. package/dist/runtime/shared-read.js +34 -5
  327. package/dist/runtime/storage.js +34 -21
  328. package/dist/sent-secrets.d.ts +194 -37
  329. package/dist/sent-secrets.js +1743 -340
  330. package/dist/server.js +5 -56
  331. package/dist/skills.js +322 -222
  332. package/dist/sqlite.js +15 -14
  333. package/dist/storage/d1-copy.js +255 -0
  334. package/dist/storage/d1-driver.js +15 -0
  335. package/dist/storage/keys.js +28 -0
  336. package/dist/storage/sql-driver.js +88 -0
  337. package/dist/storage/sql-native.js +544 -0
  338. package/dist/storage/sql-schema.d.ts +6 -0
  339. package/dist/storage/sql-schema.js +15 -0
  340. package/dist/storage/sql.d.ts +14 -20
  341. package/dist/storage/sql.js +29 -535
  342. package/dist/timeout.js +0 -26
  343. package/dist/tool-safety.js +20 -10
  344. package/dist/types.d.ts +7 -109
  345. package/dist/upward.js +3 -0
  346. package/dist/usage-guide.js +3 -1
  347. package/dist/validate.d.ts +4 -2
  348. package/dist/validate.js +86 -9
  349. package/dist/version.d.ts +1 -1
  350. package/dist/version.js +1 -1
  351. package/dist/worker.js +312 -292
  352. package/dist/workspace-subject.js +5 -1
  353. package/dist/write-outcome.js +454 -34
  354. package/documentation/README.md +27 -7
  355. package/documentation/architecture.md +2547 -226
  356. package/documentation/auth.md +821 -98
  357. package/documentation/code-mode.md +49 -16
  358. package/documentation/deploying.md +164 -20
  359. package/documentation/hosted-mcp-migration.md +460 -0
  360. package/documentation/integrating.md +129 -144
  361. package/documentation/meta-tools.md +409 -32
  362. package/documentation/operating.md +27 -3
  363. package/documentation/operator-tests.md +3 -0
  364. package/documentation/operator-ui.md +68 -45
  365. package/documentation/provider-auth-migration.md +16 -63
  366. package/documentation/provider-migration-0.29.md +10 -5
  367. package/documentation/provider-migration-0.35.md +975 -0
  368. package/documentation/providers.md +965 -0
  369. package/examples/worker/AGENTS.md +23 -9
  370. package/examples/worker/README.md +254 -135
  371. package/examples/worker/alchemy.run.ts +116 -0
  372. package/examples/worker/gitignore +10 -0
  373. package/examples/worker/src/connecta.config.ts +23 -21
  374. package/examples/worker/wrangler.jsonc +14 -5
  375. package/guides/connecting-agents.md +157 -0
  376. package/guides/how-it-works.md +156 -0
  377. package/guides/safety-and-trust.md +153 -0
  378. package/package.json +27 -46
  379. package/templates/node/.env.example +3 -0
  380. package/templates/node/README.md +22 -2
  381. package/templates/node/docker-compose.yml +1 -0
  382. package/templates/node/package.json +3 -2
  383. package/templates/node/src/connecta.config.ts +8 -0
  384. package/dist/catalog-drift.d.ts +0 -138
  385. package/dist/catalog-drift.js +0 -578
  386. package/dist/providers/_shared/request-token.js +0 -83
  387. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  388. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  389. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  390. package/dist/providers/basecamp/index.d.ts +0 -45
  391. package/dist/providers/basecamp/index.js +0 -997
  392. package/dist/providers/basecamp/skill.generated.js +0 -9
  393. package/dist/providers/cloudflare/rest.d.ts +0 -37
  394. package/dist/providers/cloudflare/rest.js +0 -1097
  395. package/dist/providers/github/hosted.js +0 -218
  396. package/dist/providers/github/rest.js +0 -321
  397. package/dist/providers/infisical/index.d.ts +0 -7
  398. package/dist/providers/infisical/index.js +0 -713
  399. package/dist/providers/infisical/skill.generated.js +0 -8
  400. package/dist/providers/intercom/index.d.ts +0 -24
  401. package/dist/providers/intercom/index.js +0 -121
  402. package/dist/providers/intercom/skill.generated.js +0 -8
  403. package/dist/providers/linear/index.d.ts +0 -55
  404. package/dist/providers/linear/index.js +0 -537
  405. package/dist/providers/linear/skill.generated.js +0 -8
  406. package/dist/providers/mixpanel/index.d.ts +0 -59
  407. package/dist/providers/mixpanel/index.js +0 -472
  408. package/dist/providers/mixpanel/operations.js +0 -20
  409. package/dist/providers/mixpanel/rest.js +0 -603
  410. package/dist/providers/mixpanel/skill.generated.js +0 -10
  411. package/dist/providers/mixpanel/value-safety.js +0 -16
  412. package/dist/providers/notion/index.d.ts +0 -67
  413. package/dist/providers/notion/index.js +0 -368
  414. package/dist/providers/notion/openapi.generated.js +0 -75
  415. package/dist/providers/notion/rest.d.ts +0 -24
  416. package/dist/providers/notion/rest.js +0 -1226
  417. package/dist/providers/notion/skill.generated.js +0 -11
  418. package/dist/providers/notion/value-safety.js +0 -56
  419. package/dist/providers/revenuecat/index.d.ts +0 -51
  420. package/dist/providers/revenuecat/index.js +0 -697
  421. package/dist/providers/revenuecat/skill.generated.js +0 -11
  422. package/dist/providers/stripe/rest.d.ts +0 -14
  423. package/dist/providers/stripe/rest.js +0 -402
  424. package/dist/providers/vercel/rest.d.ts +0 -20
  425. package/dist/providers/vercel/rest.js +0 -1020
  426. package/dist/providers/wispr-flow/index.d.ts +0 -14
  427. package/dist/providers/wispr-flow/index.js +0 -117
  428. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  429. /package/dist/providers/github/{key.js → lib/key.js} +0 -0
@@ -3,6 +3,7 @@ import { ConnectorCallError } from "../errors.js";
3
3
  import { fromSignal, runEdge } from "../runtime/run.js";
4
4
  import { classifyHost } from "../url-safety.js";
5
5
  import { authenticateRemoteClient, remoteClientAuthMethod, } from "./downstream-client-metadata.js";
6
+ import { authCall, authFlow, authProgram, registerAuth } from "./native.js";
6
7
  import { discoveryIssuer } from "./oauth-v2-migration.js";
7
8
  /** Local removal succeeded; provider-side removal needs the operator's attention. */
8
9
  export class OAuthRevocationError extends ConnectorCallError {
@@ -12,95 +13,94 @@ export class OAuthRevocationError extends ConnectorCallError {
12
13
  }
13
14
  const REVOCATION_DEADLINE_MS = 20_000;
14
15
  /** Revoke only the issuer-bound snapshot removed by a successful reset CAS, once. */
15
- export async function revokeDownstreamGrant(body, send, configuredClient) {
16
- const metadata = body.discovery?.authorizationServerMetadata;
17
- const revocation = metadata;
18
- const endpoint = revocation?.revocation_endpoint;
19
- if (endpoint === undefined || !body.tokens)
20
- return;
21
- const deadline = new AbortController();
22
- const timer = setTimeout(() => deadline.abort(), REVOCATION_DEADLINE_MS);
23
- try {
24
- if (typeof endpoint !== "string" ||
25
- !body.issuer ||
26
- discoveryIssuer(body.discovery) !== body.issuer ||
27
- !body.client ||
28
- (body.client.value.issuer !== undefined && body.client.value.issuer !== body.issuer))
29
- throw new OAuthRevocationError();
30
- const target = new URL(endpoint);
31
- // An operator-trusted HTTP MCP origin does not authorize plaintext
32
- // credential endpoints. Only the existing loopback development exception
33
- // is eligible; the connector's destination guard still checks that scope.
34
- if ((target.protocol !== "https:" &&
35
- !(target.protocol === "http:" && classifyHost(target.hostname) === "loopback")) ||
36
- target.username ||
37
- target.password ||
38
- target.hash)
39
- throw new OAuthRevocationError();
40
- const information = body.client.value;
41
- const secret = configuredClient ? configuredClient.clientSecret : information.client_secret;
42
- if (configuredClient &&
43
- (body.issuer !== configuredClient.issuer || information.client_id !== configuredClient.clientId))
44
- throw new OAuthRevocationError();
45
- const advertisedMethods = revocation?.revocation_endpoint_auth_methods_supported;
46
- if (advertisedMethods !== undefined &&
47
- (!Array.isArray(advertisedMethods) || !advertisedMethods.every((method) => typeof method === "string")))
48
- throw new OAuthRevocationError();
49
- const methods = advertisedMethods;
50
- const declared = configuredClient
51
- ? remoteClientAuthMethod(configuredClient)
52
- : "token_endpoint_auth_method" in information
53
- ? information.token_endpoint_auth_method
54
- : undefined;
55
- const method = declared ??
56
- (secret === undefined
57
- ? "none"
58
- : methods?.includes("client_secret_basic") || !methods
59
- ? "client_secret_basic"
60
- : "client_secret_post");
61
- if ((method !== "none" && method !== "client_secret_basic" && method !== "client_secret_post") ||
62
- (method === "none") !== (secret === undefined) ||
63
- (methods && !methods.includes(method)))
64
- throw new OAuthRevocationError();
65
- const token = body.tokens.refresh_token ?? body.tokens.access_token;
66
- if (typeof token !== "string" || !token)
67
- throw new OAuthRevocationError();
68
- const params = new URLSearchParams({
69
- token,
70
- token_type_hint: body.tokens.refresh_token ? "refresh_token" : "access_token",
71
- });
72
- const headers = new Headers({ "Content-Type": "application/x-www-form-urlencoded" });
73
- authenticateRemoteClient({
74
- issuer: body.issuer,
75
- clientId: information.client_id,
76
- ...(secret !== undefined ? { clientSecret: secret } : {}),
77
- tokenEndpointAuthMethod: method,
78
- }, headers, params);
79
- await runEdge(Effect.raceAllFirst([
80
- fromSignal(deadline.signal),
81
- Effect.tryPromise({
82
- try: async () => {
83
- const response = await send(target, {
84
- method: "POST",
85
- headers,
86
- body: params,
87
- redirect: "manual",
88
- signal: deadline.signal,
89
- });
16
+ export function revokeDownstreamGrant(body, send, configuredClient) {
17
+ return runEdge(authProgram(revokeDownstreamGrantNative, [body, send, configuredClient]));
18
+ }
19
+ const revokeDownstreamGrantNative = /* @__PURE__ */ registerAuth(revokeDownstreamGrant, function (body, send, configuredClient) {
20
+ return authFlow(function* () {
21
+ const metadata = body.discovery?.authorizationServerMetadata;
22
+ const revocation = metadata;
23
+ const endpoint = revocation?.revocation_endpoint;
24
+ if (endpoint === undefined || !body.tokens)
25
+ return;
26
+ const deadline = new AbortController();
27
+ const timer = setTimeout(() => deadline.abort(), REVOCATION_DEADLINE_MS);
28
+ try {
29
+ if (typeof endpoint !== "string" ||
30
+ !body.issuer ||
31
+ discoveryIssuer(body.discovery) !== body.issuer ||
32
+ !body.client ||
33
+ (body.client.value.issuer !== undefined && body.client.value.issuer !== body.issuer))
34
+ throw new OAuthRevocationError();
35
+ const target = new URL(endpoint);
36
+ // An operator-trusted HTTP MCP origin does not authorize plaintext
37
+ // credential endpoints. Only the existing loopback development exception
38
+ // is eligible; the connector's destination guard still checks that scope.
39
+ if ((target.protocol !== "https:" &&
40
+ !(target.protocol === "http:" && classifyHost(target.hostname) === "loopback")) ||
41
+ target.username ||
42
+ target.password ||
43
+ target.hash)
44
+ throw new OAuthRevocationError();
45
+ const information = body.client.value;
46
+ const secret = configuredClient ? configuredClient.clientSecret : information.client_secret;
47
+ if (configuredClient &&
48
+ (body.issuer !== configuredClient.issuer || information.client_id !== configuredClient.clientId))
49
+ throw new OAuthRevocationError();
50
+ const advertisedMethods = revocation?.revocation_endpoint_auth_methods_supported;
51
+ if (advertisedMethods !== undefined &&
52
+ (!Array.isArray(advertisedMethods) || !advertisedMethods.every((method) => typeof method === "string")))
53
+ throw new OAuthRevocationError();
54
+ const methods = advertisedMethods;
55
+ const declared = configuredClient
56
+ ? remoteClientAuthMethod(configuredClient)
57
+ : "token_endpoint_auth_method" in information
58
+ ? information.token_endpoint_auth_method
59
+ : undefined;
60
+ const method = declared ??
61
+ (secret === undefined
62
+ ? "none"
63
+ : methods?.includes("client_secret_basic") || !methods
64
+ ? "client_secret_basic"
65
+ : "client_secret_post");
66
+ if ((method !== "none" && method !== "client_secret_basic" && method !== "client_secret_post") ||
67
+ (method === "none") !== (secret === undefined) ||
68
+ (methods && !methods.includes(method)))
69
+ throw new OAuthRevocationError();
70
+ const token = body.tokens.refresh_token ?? body.tokens.access_token;
71
+ if (typeof token !== "string" || !token)
72
+ throw new OAuthRevocationError();
73
+ const params = new URLSearchParams({
74
+ token,
75
+ token_type_hint: body.tokens.refresh_token ? "refresh_token" : "access_token",
76
+ });
77
+ const headers = new Headers({ "Content-Type": "application/x-www-form-urlencoded" });
78
+ authenticateRemoteClient({
79
+ issuer: body.issuer,
80
+ clientId: information.client_id,
81
+ ...(secret !== undefined ? { clientSecret: secret } : {}),
82
+ tokenEndpointAuthMethod: method,
83
+ }, headers, params);
84
+ (yield Effect.raceAllFirst([
85
+ fromSignal(deadline.signal),
86
+ authFlow(function* () {
87
+ const response = (yield authCall(send, [
88
+ target,
89
+ { method: "POST", headers, body: params, redirect: "manual", signal: deadline.signal },
90
+ ]));
90
91
  // RFC 7009's success is HTTP 200. Bodies and headers never explain a failure.
91
92
  void response.body?.cancel().catch(() => { });
92
93
  if (response.status !== 200)
93
94
  throw new OAuthRevocationError();
94
- },
95
- catch: () => new OAuthRevocationError(),
96
- }),
97
- ]));
98
- }
99
- catch {
100
- // No provider text, credential-bearing URL, original exception, or cause survives.
101
- throw new OAuthRevocationError();
102
- }
103
- finally {
104
- clearTimeout(timer);
105
- }
106
- }
95
+ }),
96
+ ]));
97
+ }
98
+ catch {
99
+ // No provider text, credential-bearing URL, original exception, or cause survives.
100
+ throw new OAuthRevocationError();
101
+ }
102
+ finally {
103
+ clearTimeout(timer);
104
+ }
105
+ });
106
+ });
@@ -0,0 +1,20 @@
1
+ // Request/call Context belongs only to downstream auth, outside metadata/UI.
2
+ import { Effect } from "effect";
3
+ import { viewServices, viewSignal } from "../runtime/call.js";
4
+ import { RequestScope } from "../runtime/request-scope.js";
5
+ import { fromSignal } from "../runtime/run.js";
6
+ import { authCall } from "./native.js";
7
+ export function authView(ctx, work, requestOwned = false) {
8
+ return RequestScope.use((owner) => {
9
+ const signal = viewSignal(ctx, requestOwned);
10
+ if (!owner.open || signal.aborted)
11
+ return Effect.fail(signal.reason);
12
+ // Settlement facts from all synchronous abort observers precede cleanup,
13
+ // as they did at the Promise boundary. This grants no live authority.
14
+ const abort = Effect.catch(fromSignal(signal), (error) => Effect.andThen(Effect.yieldNow, Effect.fail(error)));
15
+ return Effect.raceFirst(authCall(work, [signal]), abort).pipe(Effect.flatMap((value) => {
16
+ const current = viewSignal(ctx, requestOwned);
17
+ return current.aborted ? Effect.fail(current.reason) : Effect.succeed(value);
18
+ }));
19
+ }).pipe(Effect.provideContext(viewServices(ctx)));
20
+ }
@@ -0,0 +1,184 @@
1
+ // Private auth programs. Promise methods are SDK/custom edges; owned programs
2
+ // compose directly by function identity, including inherited implementations.
3
+ import { Cause, Context, Effect, Exit, Scheduler } from "effect";
4
+ import { getNativeStorage } from "../runtime/native-storage.js";
5
+ import { causeError, detach, fromSignal, runEdge } from "../runtime/run.js";
6
+ const programs = new WeakMap();
7
+ const methods = new WeakMap();
8
+ export class AuthenticationWork extends Context.Service()("connecta/auth/Work") {
9
+ }
10
+ export function hasAuthProgram(edge) {
11
+ return programs.has(edge);
12
+ }
13
+ /** A bounded coordinator/submitted platform operation has its own settlement. */
14
+ export function authDetached(effect, waitUntil) {
15
+ return Effect.flatMap(Effect.serviceOption(AuthenticationWork), (work) => Effect.callback((resume) => {
16
+ const settlement = detach(effect.pipe(Effect.onExit((exit) => Effect.sync(() => {
17
+ resume(Exit.isSuccess(exit) ? Effect.succeed(exit.value) : Effect.failCause(exit.cause));
18
+ }))));
19
+ if (work._tag === "Some")
20
+ work.value.track(settlement);
21
+ try {
22
+ waitUntil?.(settlement);
23
+ }
24
+ catch {
25
+ /* The bounded coordinator is already running. */
26
+ }
27
+ }));
28
+ }
29
+ export function registerAuth(edge, program) {
30
+ programs.set(edge, program);
31
+ return program;
32
+ }
33
+ export function authProgram(program, args) {
34
+ return Effect.suspend(() => program(...args)).pipe(Effect.catchDefect(Effect.fail));
35
+ }
36
+ export function registerAuthMethod(prototype, key, program, own) {
37
+ let entries = methods.get(prototype);
38
+ if (!entries)
39
+ methods.set(prototype, (entries = new Map()));
40
+ entries.set(key, program);
41
+ registerAuth(own, program);
42
+ }
43
+ export function authOwnMethod(prototype, receiver, key, args) {
44
+ return Effect.suspend(() => methods.get(prototype).get(key).apply(receiver, args)).pipe(Effect.catchDefect(Effect.fail));
45
+ }
46
+ function authOwn(edge, receiver, args) {
47
+ return Effect.suspend(() => programs.get(edge).apply(receiver, args)).pipe(Effect.catchDefect(Effect.fail));
48
+ }
49
+ export function authMethod(program) {
50
+ function edge(...args) {
51
+ return runEdge(authOwn(edge, this, args));
52
+ }
53
+ registerAuth(edge, program);
54
+ return edge;
55
+ }
56
+ export function authValue(work) {
57
+ return Effect.suspend(() => {
58
+ const value = work();
59
+ if (Effect.isEffect(value))
60
+ return value;
61
+ if (!value || typeof value.then !== "function")
62
+ return Effect.succeed(value);
63
+ const pending = Promise.resolve(value);
64
+ return Effect.flatMap(Effect.serviceOption(AuthenticationWork), (lifetime) => {
65
+ if (lifetime._tag === "Some")
66
+ lifetime.value.track(pending);
67
+ return awaitAuthPromise(pending);
68
+ });
69
+ }).pipe(Effect.catchDefect(Effect.fail));
70
+ }
71
+ // Keep the platform wait separate from the synchronous service lookup.
72
+ // Accounting remains attached to the actual platform promise's settlement.
73
+ function awaitAuthPromise(pending) {
74
+ return Effect.tryPromise({ try: () => pending, catch: (error) => error });
75
+ }
76
+ export function authCall(fn, args, receiver) {
77
+ return fn === undefined
78
+ ? Effect.succeed(undefined)
79
+ : Effect.suspend(() => programs.has(fn) ? authOwn(fn, receiver, args) : authValue(() => fn.apply(receiver, args)));
80
+ }
81
+ export function authInvoke(receiver, key, args) {
82
+ return Effect.suspend(() => {
83
+ const method = receiver[key];
84
+ return typeof method === "function"
85
+ ? authCall(method, args, receiver)
86
+ : authValue(() => Reflect.apply(method, receiver, args));
87
+ }).pipe(Effect.catchDefect(Effect.fail));
88
+ }
89
+ export function authStorage(storage, key, args, beforeSubmit) {
90
+ return Effect.suspend(() => {
91
+ const native = getNativeStorage(storage);
92
+ const operation = native
93
+ ? authValue(() => Reflect.get(native, key).apply(native, args))
94
+ : authInvoke(storage, key, args);
95
+ // Ownership transfer and native/custom storage submission are one JS
96
+ // reaction, including D2's lazy typed wrapper. Actual I/O can still wait.
97
+ const submitted = beforeSubmit ? authSubmission(operation, beforeSubmit) : operation;
98
+ if (!native)
99
+ return submitted;
100
+ return Effect.flatMap(Effect.serviceOption(AuthenticationWork), (work) => work._tag === "Some" ? authDetached(submitted) : submitted);
101
+ });
102
+ }
103
+ function authSubmission(operation, beforeSubmit) {
104
+ return Effect.flatMap(Scheduler.Scheduler, (parent) => {
105
+ let submitting = false;
106
+ const scheduler = {
107
+ executionMode: parent.executionMode,
108
+ shouldYield: (fiber) => !submitting && parent.shouldYield(fiber),
109
+ makeDispatcher: () => parent.makeDispatcher(),
110
+ };
111
+ return Effect.suspend(() => {
112
+ submitting = true;
113
+ // Resume ordinary scheduling before any pending I/O can continue. This
114
+ // gate covers only submission's current JS reaction, including throws.
115
+ queueMicrotask(() => {
116
+ submitting = false;
117
+ });
118
+ beforeSubmit();
119
+ return operation;
120
+ }).pipe(Effect.provideService(Scheduler.Scheduler, scheduler));
121
+ });
122
+ }
123
+ export function authThen(effect, success, failure) {
124
+ return Effect.matchEffect(effect, {
125
+ onSuccess: (value) => (success ? authCall(success, [value]) : Effect.succeed(value)),
126
+ onFailure: (error) => (failure ? authCall(failure, [error]) : Effect.fail(error)),
127
+ });
128
+ }
129
+ export function authCatch(effect, failure) {
130
+ return Effect.catch(effect, (error) => authCall(failure, [error]));
131
+ }
132
+ export function authAll(values, settled = false) {
133
+ return Effect.all(Array.from(values, (value) => {
134
+ const effect = authValue(() => value);
135
+ return settled
136
+ ? Effect.match(effect, {
137
+ onSuccess: (value) => ({ status: "fulfilled", value }),
138
+ onFailure: (reason) => ({ status: "rejected", reason }),
139
+ })
140
+ : effect;
141
+ }), { concurrency: "unbounded" });
142
+ }
143
+ export function authAwait(effect, signal) {
144
+ return signal ? Effect.raceFirst(effect, fromSignal(signal)) : effect;
145
+ }
146
+ /**
147
+ * Drive native auth control flow, delivering typed failures to its local
148
+ * catch clauses. Interruption remains interruption and closes the generator;
149
+ * its yielded finally blocks still run, including asynchronous body cleanup.
150
+ * Every yielded operation is an Effect, never an async orchestration thunk.
151
+ */
152
+ export function authFlow(make) {
153
+ return Effect.suspend(() => {
154
+ const iterator = make();
155
+ let done = false;
156
+ const drive = (step) => Effect.gen(function* () {
157
+ while (!step.done) {
158
+ const result = yield* Effect.exit(step.value.pipe(Effect.catchDefect(Effect.fail)));
159
+ if (Exit.isSuccess(result))
160
+ step = iterator.next(result.value);
161
+ else {
162
+ if (result.cause.reasons.some(Cause.isInterruptReason))
163
+ return yield* Effect.failCause(result.cause);
164
+ step = iterator.throw(causeError(result.cause));
165
+ }
166
+ }
167
+ done = true;
168
+ return step.value;
169
+ }).pipe(Effect.catchDefect(Effect.fail));
170
+ return Effect.suspend(() => drive(iterator.next())).pipe(Effect.ensuring(Effect.suspend(() => done ? Effect.void : drive(iterator.return(undefined)).pipe(Effect.orDie, Effect.asVoid))));
171
+ });
172
+ }
173
+ /** Parallel native mapping without eagerly starting Promise shells. */
174
+ export function authMap(values, program, settled = false) {
175
+ return authAll(values.map((value) => program(value)), settled);
176
+ }
177
+ /** The physical fetch leaf also owns cancellation of a late response body. */
178
+ export function authFetch(input, init) {
179
+ return authValue(() => fetch(input, init).then((response) => {
180
+ if (init?.signal?.aborted)
181
+ void response.body?.cancel().catch(() => { });
182
+ return response;
183
+ }));
184
+ }
@@ -1,3 +1,5 @@
1
+ import { runEdge } from "../runtime/run.js";
2
+ import { authAll, authFlow, authProgram, registerAuth } from "./native.js";
1
3
  // The operator route must not answer while a storage reset it started can
2
4
  // still publish an older generation. Storage has no cancellation contract.
3
5
  const startResets = new WeakMap();
@@ -12,9 +14,13 @@ export function trackOAuthStartReset(scope, reset) {
12
14
  // unhandled rejection merely because its caller timed out first.
13
15
  void reset.then(() => pending.delete(reset), () => pending.delete(reset));
14
16
  }
15
- export async function drainOAuthStartResets(scope) {
16
- const pending = startResets.get(scope);
17
- while (pending && pending.size > 0) {
18
- await Promise.allSettled(pending);
19
- }
17
+ export function drainOAuthStartResets(scope) {
18
+ return runEdge(authProgram(drainOAuthStartResetsNative, [scope]));
20
19
  }
20
+ const drainOAuthStartResetsNative = /* @__PURE__ */ registerAuth(drainOAuthStartResets, function (scope) {
21
+ return authFlow(function* () {
22
+ const pending = startResets.get(scope);
23
+ while (pending && pending.size > 0)
24
+ yield authAll(pending, true);
25
+ });
26
+ });