@zackbart/connecta 0.34.0 → 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 (428) hide show
  1. package/CHANGELOG.md +393 -0
  2. package/README.md +62 -105
  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 +15 -7
  53. package/dist/connectors/api-connector.js +147 -57
  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/option-shapes.js +1 -1
  58. package/dist/connectors/remote-mcp.d.ts +12 -30
  59. package/dist/connectors/remote-mcp.js +960 -564
  60. package/dist/d1.js +10 -243
  61. package/dist/derived-context.js +5 -0
  62. package/dist/describe-config.d.ts +5 -1
  63. package/dist/describe-config.js +3 -0
  64. package/dist/downstream-input.js +347 -260
  65. package/dist/errors.d.ts +87 -6
  66. package/dist/errors.js +114 -4
  67. package/dist/execute.js +87 -50
  68. package/dist/executor-admission.js +3 -0
  69. package/dist/executors/quickjs.js +163 -112
  70. package/dist/guarded-transport.js +50 -0
  71. package/dist/guest-runtime.js +1 -1
  72. package/dist/http/client.js +439 -0
  73. package/dist/http/errors.js +558 -0
  74. package/dist/http/fields.js +49 -0
  75. package/dist/http/hatch-paging.js +318 -0
  76. package/dist/http/hatch.js +1279 -0
  77. package/dist/http/json-schema.js +267 -0
  78. package/dist/http/node-transport.js +241 -0
  79. package/dist/http/oauth.js +162 -0
  80. package/dist/http/paging.js +228 -0
  81. package/dist/http/provider.js +221 -0
  82. package/dist/http/safety.js +82 -0
  83. package/dist/http/services.js +79 -0
  84. package/dist/http/tools.js +383 -0
  85. package/dist/http/vendor-index.js +138 -0
  86. package/dist/http/vendor.js +448 -0
  87. package/dist/http/write-request.js +66 -0
  88. package/dist/http-policy.d.ts +11 -0
  89. package/dist/http-policy.js +45 -0
  90. package/dist/inbound-credential.js +1 -1
  91. package/dist/index.d.ts +2 -2
  92. package/dist/index.js +4 -0
  93. package/dist/invocation-auth.js +30 -19
  94. package/dist/invocation.js +221 -87
  95. package/dist/mcp-result.js +0 -4
  96. package/dist/membership.d.ts +4 -0
  97. package/dist/meta-output.js +1 -1
  98. package/dist/meta-tools.js +534 -408
  99. package/dist/native-recovery.js +52 -0
  100. package/dist/native-tools.js +382 -0
  101. package/dist/node.d.ts +4 -3
  102. package/dist/node.js +45 -8
  103. package/dist/oauth-handoff.js +177 -104
  104. package/dist/oauth-partition.js +6 -20
  105. package/dist/oauth-sealing.js +6 -7
  106. package/dist/operation-vocabulary.js +101 -0
  107. package/dist/operator-record.d.ts +2 -2
  108. package/dist/operator-record.js +17 -4
  109. package/dist/operator-ui/agents.d.ts +5 -4
  110. package/dist/operator-ui/agents.js +17 -7
  111. package/dist/operator-ui/config-summary.js +8 -4
  112. package/dist/operator-ui/connection-map.js +9 -6
  113. package/dist/operator-ui/contract.d.ts +7 -3
  114. package/dist/operator-ui/endpoints.js +5 -14
  115. package/dist/operator-ui/fix-prompts.d.ts +1 -1
  116. package/dist/operator-ui/fix-prompts.js +0 -8
  117. package/dist/operator-ui/generated.js +3 -3
  118. package/dist/operator-ui/health.js +52 -0
  119. package/dist/operator-ui/model.d.ts +2 -3
  120. package/dist/operator-ui/overview.js +11 -19
  121. package/dist/operator-ui/setup-commands.js +0 -4
  122. package/dist/operator-ui/view.d.ts +5 -29
  123. package/dist/operator-ui/view.js +3 -59
  124. package/dist/program-writes.js +47 -26
  125. package/dist/provider-call-facts.d.ts +115 -0
  126. package/dist/provider-call-facts.js +182 -0
  127. package/dist/provider-call.d.ts +112 -0
  128. package/dist/provider-call.js +271 -0
  129. package/dist/provider.d.ts +71 -32
  130. package/dist/provider.js +134 -40
  131. package/dist/providers/_shared/google/hatch.js +91 -0
  132. package/dist/providers/_shared/google/kit.js +537 -0
  133. package/dist/providers/_shared/google/result-size.js +15 -2
  134. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  135. package/dist/providers/_shared/google/service-account.js +8 -4
  136. package/dist/providers/_shared/google/workspace.d.ts +8 -209
  137. package/dist/providers/_shared/google/workspace.js +7 -426
  138. package/dist/providers/_shared/rest/compact-index.js +86 -0
  139. package/dist/providers/_shared/rest/dispatch.js +3 -23
  140. package/dist/providers/_shared/rest/kit.js +546 -0
  141. package/dist/providers/_shared/rest/operation-index.js +230 -14
  142. package/dist/providers/_shared/rest/response-media.js +11 -0
  143. package/dist/providers/_shared/rest/tools.js +101 -78
  144. package/dist/providers/_shared/rest/value-safety.js +353 -195
  145. package/dist/providers/_shared/sensitive-fields.js +27 -0
  146. package/dist/providers/breeze/api.js +584 -0
  147. package/dist/providers/breeze/index.d.ts +3 -3
  148. package/dist/providers/breeze/index.js +67 -1420
  149. package/dist/providers/breeze/openapi.generated.js +60 -0
  150. package/dist/providers/breeze/skill.generated.js +2 -6
  151. package/dist/providers/breeze/tools.js +696 -0
  152. package/dist/providers/ccb/api.js +496 -0
  153. package/dist/providers/ccb/index.d.ts +17 -37
  154. package/dist/providers/ccb/index.js +77 -1702
  155. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  156. package/dist/providers/ccb/lib/constants.js +74 -0
  157. package/dist/providers/ccb/lib/guide.js +9 -0
  158. package/dist/providers/ccb/lib/verdicts.js +387 -0
  159. package/dist/providers/ccb/openapi.generated.js +397 -0
  160. package/dist/providers/ccb/safety.js +295 -0
  161. package/dist/providers/ccb/skill.generated.js +2 -6
  162. package/dist/providers/ccb/tools.js +853 -0
  163. package/dist/providers/cloudflare/api.js +1066 -0
  164. package/dist/providers/cloudflare/index.d.ts +7 -22
  165. package/dist/providers/cloudflare/index.js +80 -194
  166. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  167. package/dist/providers/cloudflare/lib/config.js +2 -0
  168. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  169. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  170. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  171. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  172. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  173. package/dist/providers/cloudflare/openapi.generated.js +3299 -3208
  174. package/dist/providers/cloudflare/{value-safety.js → safety.js} +538 -18
  175. package/dist/providers/cloudflare/skill.generated.js +2 -10
  176. package/dist/providers/cloudflare/tools.js +360 -0
  177. package/dist/providers/docs/api.js +51 -0
  178. package/dist/providers/docs/index.d.ts +1 -12
  179. package/dist/providers/docs/index.js +53 -1165
  180. package/dist/providers/docs/lib/constants.d.ts +18 -0
  181. package/dist/providers/docs/lib/constants.js +18 -0
  182. package/dist/providers/docs/lib/discovery.js +26 -0
  183. package/dist/providers/docs/lib/requests.js +48 -0
  184. package/dist/providers/docs/lib/schemas.js +168 -0
  185. package/dist/providers/docs/openapi.generated.js +16 -0
  186. package/dist/providers/docs/safety.js +54 -0
  187. package/dist/providers/docs/skill.generated.js +2 -6
  188. package/dist/providers/docs/tools.js +802 -0
  189. package/dist/providers/drive/api.js +177 -0
  190. package/dist/providers/drive/index.d.ts +1 -12
  191. package/dist/providers/drive/index.js +38 -1448
  192. package/dist/providers/drive/lib/constants.d.ts +6 -0
  193. package/dist/providers/drive/lib/constants.js +6 -0
  194. package/dist/providers/drive/lib/contracts.js +532 -0
  195. package/dist/providers/drive/lib/hatch.js +197 -0
  196. package/dist/providers/drive/openapi.generated.js +77 -0
  197. package/dist/providers/drive/safety.js +90 -0
  198. package/dist/providers/drive/skill.generated.js +2 -6
  199. package/dist/providers/drive/tools.js +1290 -0
  200. package/dist/providers/forms/api.js +71 -0
  201. package/dist/providers/forms/index.d.ts +1 -12
  202. package/dist/providers/forms/index.js +49 -1145
  203. package/dist/providers/forms/lib/constants.d.ts +14 -0
  204. package/dist/providers/forms/lib/constants.js +19 -0
  205. package/dist/providers/forms/lib/hatch.js +72 -0
  206. package/dist/providers/forms/openapi.generated.js +23 -0
  207. package/dist/providers/forms/safety.js +34 -0
  208. package/dist/providers/forms/skill.generated.js +2 -8
  209. package/dist/providers/forms/tools.js +1024 -0
  210. package/dist/providers/github/api.js +150 -0
  211. package/dist/providers/github/index.d.ts +4 -5
  212. package/dist/providers/github/index.js +30 -87
  213. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  214. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  215. package/dist/providers/github/lib/discovery.js +132 -0
  216. package/dist/providers/github/lib/operations.js +58 -0
  217. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  218. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  219. package/dist/providers/github/openapi.generated.js +1216 -0
  220. package/dist/providers/github/safety.js +216 -0
  221. package/dist/providers/github/skill.generated.js +2 -5
  222. package/dist/providers/github/tools.js +506 -0
  223. package/dist/providers/gmail/api.js +114 -0
  224. package/dist/providers/gmail/index.d.ts +1 -12
  225. package/dist/providers/gmail/index.js +73 -1621
  226. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  227. package/dist/providers/gmail/lib/constants.js +16 -0
  228. package/dist/providers/gmail/lib/index.js +173 -0
  229. package/dist/providers/gmail/lib/schemas.js +176 -0
  230. package/dist/providers/gmail/lib/threading.js +120 -0
  231. package/dist/providers/gmail/openapi.generated.js +92 -0
  232. package/dist/providers/gmail/safety.js +21 -0
  233. package/dist/providers/gmail/skill.generated.js +2 -6
  234. package/dist/providers/gmail/tools.js +1435 -0
  235. package/dist/providers/overflow/api.js +1008 -0
  236. package/dist/providers/overflow/index.d.ts +3 -17
  237. package/dist/providers/overflow/index.js +60 -1488
  238. package/dist/providers/overflow/skill.generated.js +2 -5
  239. package/dist/providers/overflow/tools.js +873 -0
  240. package/dist/providers/planning-center/api.js +467 -0
  241. package/dist/providers/planning-center/index.d.ts +6 -35
  242. package/dist/providers/planning-center/index.js +69 -2445
  243. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  244. package/dist/providers/planning-center/lib/constants.js +83 -0
  245. package/dist/providers/planning-center/lib/discovery.js +40 -0
  246. package/dist/providers/planning-center/lib/guide.js +39 -0
  247. package/dist/providers/planning-center/lib/json-api.js +83 -0
  248. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  249. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  250. package/dist/providers/planning-center/safety.js +188 -0
  251. package/dist/providers/planning-center/skill.generated.js +2 -27
  252. package/dist/providers/planning-center/tools.js +1010 -0
  253. package/dist/providers/sheets/api.js +133 -0
  254. package/dist/providers/sheets/index.d.ts +4 -16
  255. package/dist/providers/sheets/index.js +61 -1172
  256. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  257. package/dist/providers/sheets/lib/constants.js +14 -0
  258. package/dist/providers/sheets/lib/hatch.js +163 -0
  259. package/dist/providers/sheets/lib/requests.js +105 -0
  260. package/dist/providers/sheets/lib/schemas.js +138 -0
  261. package/dist/providers/sheets/openapi.generated.js +30 -0
  262. package/dist/providers/sheets/safety.js +27 -0
  263. package/dist/providers/sheets/skill.generated.js +2 -7
  264. package/dist/providers/sheets/tools.js +734 -0
  265. package/dist/providers/slides/api.js +147 -0
  266. package/dist/providers/slides/index.d.ts +2 -10
  267. package/dist/providers/slides/index.js +48 -2555
  268. package/dist/providers/slides/lib/constants.d.ts +11 -0
  269. package/dist/providers/slides/lib/constants.js +11 -0
  270. package/dist/providers/slides/lib/requests.js +60 -0
  271. package/dist/providers/slides/lib/schemas.js +565 -0
  272. package/dist/providers/slides/openapi.generated.js +18 -0
  273. package/dist/providers/slides/skill.generated.js +2 -6
  274. package/dist/providers/slides/tools.js +1968 -0
  275. package/dist/providers/stripe/api.js +401 -0
  276. package/dist/providers/stripe/index.d.ts +7 -27
  277. package/dist/providers/stripe/index.js +75 -191
  278. package/dist/providers/stripe/lib/config.d.ts +4 -0
  279. package/dist/providers/stripe/lib/config.js +2 -0
  280. package/dist/providers/stripe/openapi.generated.js +4 -3
  281. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  282. package/dist/providers/stripe/skill.generated.js +2 -10
  283. package/dist/providers/stripe/tools.js +77 -0
  284. package/dist/providers/tithely/api.js +531 -0
  285. package/dist/providers/tithely/index.d.ts +19 -0
  286. package/dist/providers/tithely/index.js +86 -965
  287. package/dist/providers/tithely/skill.generated.js +2 -5
  288. package/dist/providers/tithely/tools.js +426 -0
  289. package/dist/providers/vercel/api.js +551 -0
  290. package/dist/providers/vercel/index.d.ts +11 -25
  291. package/dist/providers/vercel/index.js +67 -261
  292. package/dist/providers/vercel/lib/config.d.ts +2 -0
  293. package/dist/providers/vercel/lib/config.js +2 -0
  294. package/dist/providers/vercel/lib/index.js +117 -0
  295. package/dist/providers/vercel/lib/logs.js +100 -0
  296. package/dist/providers/vercel/lib/pin.js +270 -0
  297. package/dist/providers/vercel/openapi.generated.js +398 -376
  298. package/dist/providers/vercel/{value-safety.js → safety.js} +261 -42
  299. package/dist/providers/vercel/skill.generated.js +2 -7
  300. package/dist/providers/vercel/tools.js +642 -0
  301. package/dist/redaction-identity.js +47 -0
  302. package/dist/redaction-marker.js +125 -0
  303. package/dist/registry.d.ts +30 -28
  304. package/dist/registry.js +446 -413
  305. package/dist/routes/access-tokens.js +1 -1
  306. package/dist/routes/actor-labels.js +1 -1
  307. package/dist/routes/connect.js +1 -1
  308. package/dist/routes/dispatch.js +103 -0
  309. package/dist/routes/mcp.js +170 -79
  310. package/dist/routes/oauth.js +3 -1
  311. package/dist/routes/operator.js +2 -2
  312. package/dist/routes/shared.d.ts +5 -4
  313. package/dist/routes/shared.js +244 -177
  314. package/dist/routes/skills.js +10 -8
  315. package/dist/routes/ui-config.js +27 -3
  316. package/dist/routes/ui-data.js +29 -22
  317. package/dist/routes/ui.js +1 -1
  318. package/dist/runtime/call-admission.js +0 -26
  319. package/dist/runtime/call-entry.js +30 -0
  320. package/dist/runtime/call.js +556 -0
  321. package/dist/runtime/connector-scope.js +7 -0
  322. package/dist/runtime/credential-probe.js +34 -0
  323. package/dist/runtime/executor.js +40 -0
  324. package/dist/runtime/native-storage.js +63 -0
  325. package/dist/runtime/registry.js +27 -0
  326. package/dist/runtime/request-scope.js +72 -0
  327. package/dist/runtime/run.js +15 -7
  328. package/dist/runtime/shared-read.js +34 -5
  329. package/dist/runtime/storage.js +34 -21
  330. package/dist/sent-secrets.d.ts +194 -37
  331. package/dist/sent-secrets.js +1743 -340
  332. package/dist/server.js +5 -56
  333. package/dist/skills.js +330 -224
  334. package/dist/sqlite.js +15 -14
  335. package/dist/storage/d1-copy.js +255 -0
  336. package/dist/storage/d1-driver.js +15 -0
  337. package/dist/storage/keys.js +28 -0
  338. package/dist/storage/sql-driver.js +88 -0
  339. package/dist/storage/sql-native.js +544 -0
  340. package/dist/storage/sql-schema.d.ts +6 -0
  341. package/dist/storage/sql-schema.js +15 -0
  342. package/dist/storage/sql.d.ts +14 -20
  343. package/dist/storage/sql.js +29 -535
  344. package/dist/timeout.js +0 -26
  345. package/dist/tool-safety.js +20 -10
  346. package/dist/types.d.ts +11 -99
  347. package/dist/upward.js +3 -0
  348. package/dist/usage-guide.js +3 -1
  349. package/dist/validate.d.ts +4 -2
  350. package/dist/validate.js +86 -9
  351. package/dist/version.d.ts +1 -1
  352. package/dist/version.js +1 -1
  353. package/dist/worker.js +312 -292
  354. package/dist/workspace-subject.js +5 -1
  355. package/dist/write-outcome.js +454 -34
  356. package/documentation/README.md +27 -7
  357. package/documentation/architecture.md +2550 -186
  358. package/documentation/auth.md +821 -98
  359. package/documentation/code-mode.md +56 -21
  360. package/documentation/deploying.md +164 -20
  361. package/documentation/hosted-mcp-migration.md +460 -0
  362. package/documentation/integrating.md +144 -105
  363. package/documentation/meta-tools.md +411 -34
  364. package/documentation/operating.md +28 -4
  365. package/documentation/operator-tests.md +11 -2
  366. package/documentation/operator-ui.md +103 -33
  367. package/documentation/provider-auth-migration.md +38 -63
  368. package/documentation/provider-migration-0.29.md +10 -5
  369. package/documentation/provider-migration-0.35.md +975 -0
  370. package/documentation/providers.md +965 -0
  371. package/examples/worker/AGENTS.md +23 -9
  372. package/examples/worker/README.md +254 -135
  373. package/examples/worker/alchemy.run.ts +116 -0
  374. package/examples/worker/gitignore +10 -0
  375. package/examples/worker/src/connecta.config.ts +23 -21
  376. package/examples/worker/wrangler.jsonc +14 -5
  377. package/guides/connecting-agents.md +157 -0
  378. package/guides/how-it-works.md +156 -0
  379. package/guides/safety-and-trust.md +153 -0
  380. package/package.json +27 -42
  381. package/templates/node/.env.example +3 -0
  382. package/templates/node/README.md +22 -2
  383. package/templates/node/docker-compose.yml +1 -0
  384. package/templates/node/package.json +3 -2
  385. package/templates/node/src/connecta.config.ts +8 -0
  386. package/dist/catalog-drift.d.ts +0 -134
  387. package/dist/catalog-drift.js +0 -493
  388. package/dist/providers/_shared/request-token.js +0 -83
  389. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  390. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  391. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  392. package/dist/providers/basecamp/index.d.ts +0 -43
  393. package/dist/providers/basecamp/index.js +0 -997
  394. package/dist/providers/basecamp/skill.generated.js +0 -9
  395. package/dist/providers/cloudflare/rest.d.ts +0 -37
  396. package/dist/providers/cloudflare/rest.js +0 -1078
  397. package/dist/providers/github/hosted.js +0 -218
  398. package/dist/providers/github/rest.js +0 -321
  399. package/dist/providers/infisical/index.d.ts +0 -7
  400. package/dist/providers/infisical/index.js +0 -713
  401. package/dist/providers/infisical/skill.generated.js +0 -8
  402. package/dist/providers/linear/index.d.ts +0 -55
  403. package/dist/providers/linear/index.js +0 -352
  404. package/dist/providers/linear/skill.generated.js +0 -8
  405. package/dist/providers/mixpanel/index.d.ts +0 -57
  406. package/dist/providers/mixpanel/index.js +0 -468
  407. package/dist/providers/mixpanel/operations.js +0 -20
  408. package/dist/providers/mixpanel/rest.js +0 -603
  409. package/dist/providers/mixpanel/skill.generated.js +0 -10
  410. package/dist/providers/mixpanel/value-safety.js +0 -16
  411. package/dist/providers/notion/index.d.ts +0 -65
  412. package/dist/providers/notion/index.js +0 -368
  413. package/dist/providers/notion/openapi.generated.js +0 -75
  414. package/dist/providers/notion/rest.d.ts +0 -24
  415. package/dist/providers/notion/rest.js +0 -1226
  416. package/dist/providers/notion/skill.generated.js +0 -11
  417. package/dist/providers/notion/value-safety.js +0 -56
  418. package/dist/providers/revenuecat/index.d.ts +0 -49
  419. package/dist/providers/revenuecat/index.js +0 -557
  420. package/dist/providers/revenuecat/skill.generated.js +0 -11
  421. package/dist/providers/stripe/rest.d.ts +0 -14
  422. package/dist/providers/stripe/rest.js +0 -402
  423. package/dist/providers/vercel/rest.d.ts +0 -20
  424. package/dist/providers/vercel/rest.js +0 -1020
  425. package/dist/providers/wispr-flow/index.d.ts +0 -14
  426. package/dist/providers/wispr-flow/index.js +0 -117
  427. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  428. /package/dist/providers/github/{key.js → lib/key.js} +0 -0
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Gmail's API root, confined to the delegated user's own mailbox: `me` is the
3
+ * token's subject, and no path can climb out of it.
4
+ */
5
+ export declare const GMAIL_API_BASE_URL = "https://gmail.googleapis.com/gmail/v1/users/me";
6
+ /**
7
+ * Exactly the scopes this connection requests, and exactly what the Admin
8
+ * console's domain-wide delegation entry must list (comma-separated there).
9
+ * `gmail.compose` technically permits sending; the tool surface does not.
10
+ */
11
+ export declare const GMAIL_SCOPES: readonly ["https://www.googleapis.com/auth/gmail.readonly", "https://www.googleapis.com/auth/gmail.compose"];
12
+ /** A full thread without attachment bodies; Gmail's message cap is 25 MB. */
13
+ export declare const GMAIL_MAX_RESPONSE_BYTES: number;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Gmail's API root, confined to the delegated user's own mailbox: `me` is the
3
+ * token's subject, and no path can climb out of it.
4
+ */
5
+ export const GMAIL_API_BASE_URL = "https://gmail.googleapis.com/gmail/v1/users/me";
6
+ /**
7
+ * Exactly the scopes this connection requests, and exactly what the Admin
8
+ * console's domain-wide delegation entry must list (comma-separated there).
9
+ * `gmail.compose` technically permits sending; the tool surface does not.
10
+ */
11
+ export const GMAIL_SCOPES = [
12
+ "https://www.googleapis.com/auth/gmail.readonly",
13
+ "https://www.googleapis.com/auth/gmail.compose",
14
+ ];
15
+ /** A full thread without attachment bodies; Gmail's message cap is 25 MB. */
16
+ export const GMAIL_MAX_RESPONSE_BYTES = 16 * 1024 * 1024;
@@ -0,0 +1,173 @@
1
+ // Reviewed frozen Gmail v1 inventory: 79 indexed keys, eleven executable reads.
2
+ import { OperationIndex } from "../../_shared/rest/operation-index.js";
3
+ import { googlePageToken } from "../../../http/hatch-paging.js";
4
+ import { openapi } from "../openapi.generated.js";
5
+ export const index = new OperationIndex(openapi, { vendor: "gmail", title: "Gmail", pathMatching: "uri-template" });
6
+ export const verdicts = {
7
+ "GET /drafts": "read",
8
+ "POST /drafts": "refuse",
9
+ "POST /drafts/send": "refuse",
10
+ "DELETE /drafts/{id}": "refuse",
11
+ "GET /drafts/{id}": "read",
12
+ "PUT /drafts/{id}": "refuse",
13
+ "GET /history": "read",
14
+ "GET /labels": "read",
15
+ "POST /labels": "refuse",
16
+ "DELETE /labels/{id}": "refuse",
17
+ "GET /labels/{id}": "read",
18
+ "PATCH /labels/{id}": "refuse",
19
+ "PUT /labels/{id}": "refuse",
20
+ "GET /messages": "read",
21
+ "POST /messages": "refuse",
22
+ "POST /messages/batchDelete": "refuse",
23
+ "POST /messages/batchModify": "refuse",
24
+ "POST /messages/import": "refuse",
25
+ "POST /messages/send": "refuse",
26
+ "DELETE /messages/{id}": "refuse",
27
+ "GET /messages/{id}": "read",
28
+ "POST /messages/{id}/modify": "refuse",
29
+ "POST /messages/{id}/trash": "refuse",
30
+ "POST /messages/{id}/untrash": "refuse",
31
+ "GET /messages/{messageId}/attachments/{id}": "read",
32
+ "GET /profile": "read",
33
+ "GET /settings/autoForwarding": "refuse",
34
+ "PUT /settings/autoForwarding": "refuse",
35
+ "GET /settings/cse/identities": "refuse",
36
+ "POST /settings/cse/identities": "refuse",
37
+ "DELETE /settings/cse/identities/{cseEmailAddress}": "refuse",
38
+ "GET /settings/cse/identities/{cseEmailAddress}": "refuse",
39
+ "PATCH /settings/cse/identities/{emailAddress}": "refuse",
40
+ "GET /settings/cse/keypairs": "refuse",
41
+ "POST /settings/cse/keypairs": "refuse",
42
+ "GET /settings/cse/keypairs/{keyPairId}": "refuse",
43
+ "POST /settings/cse/keypairs/{keyPairId}:disable": "refuse",
44
+ "POST /settings/cse/keypairs/{keyPairId}:enable": "refuse",
45
+ "POST /settings/cse/keypairs/{keyPairId}:obliterate": "refuse",
46
+ "GET /settings/delegates": "refuse",
47
+ "POST /settings/delegates": "refuse",
48
+ "DELETE /settings/delegates/{delegateEmail}": "refuse",
49
+ "GET /settings/delegates/{delegateEmail}": "refuse",
50
+ "GET /settings/filters": "refuse",
51
+ "POST /settings/filters": "refuse",
52
+ "DELETE /settings/filters/{id}": "refuse",
53
+ "GET /settings/filters/{id}": "refuse",
54
+ "GET /settings/forwardingAddresses": "refuse",
55
+ "POST /settings/forwardingAddresses": "refuse",
56
+ "DELETE /settings/forwardingAddresses/{forwardingEmail}": "refuse",
57
+ "GET /settings/forwardingAddresses/{forwardingEmail}": "refuse",
58
+ "GET /settings/imap": "refuse",
59
+ "PUT /settings/imap": "refuse",
60
+ "GET /settings/language": "refuse",
61
+ "PUT /settings/language": "refuse",
62
+ "GET /settings/pop": "refuse",
63
+ "PUT /settings/pop": "refuse",
64
+ "GET /settings/sendAs": "refuse",
65
+ "POST /settings/sendAs": "refuse",
66
+ "DELETE /settings/sendAs/{sendAsEmail}": "refuse",
67
+ "GET /settings/sendAs/{sendAsEmail}": "refuse",
68
+ "PATCH /settings/sendAs/{sendAsEmail}": "refuse",
69
+ "PUT /settings/sendAs/{sendAsEmail}": "refuse",
70
+ "GET /settings/sendAs/{sendAsEmail}/smimeInfo": "refuse",
71
+ "POST /settings/sendAs/{sendAsEmail}/smimeInfo": "refuse",
72
+ "DELETE /settings/sendAs/{sendAsEmail}/smimeInfo/{id}": "refuse",
73
+ "GET /settings/sendAs/{sendAsEmail}/smimeInfo/{id}": "refuse",
74
+ "POST /settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault": "refuse",
75
+ "POST /settings/sendAs/{sendAsEmail}/verify": "refuse",
76
+ "GET /settings/vacation": "refuse",
77
+ "PUT /settings/vacation": "refuse",
78
+ "POST /stop": "refuse",
79
+ "GET /threads": "read",
80
+ "DELETE /threads/{id}": "refuse",
81
+ "GET /threads/{id}": "read",
82
+ "POST /threads/{id}/modify": "refuse",
83
+ "POST /threads/{id}/trash": "refuse",
84
+ "POST /threads/{id}/untrash": "refuse",
85
+ "POST /watch": "refuse",
86
+ };
87
+ export const named = {
88
+ "GET /threads": "search_threads",
89
+ "GET /threads/{id}": "get_thread",
90
+ "GET /messages/{id}": "get_message",
91
+ "GET /messages/{messageId}/attachments/{id}": "get_attachment",
92
+ "GET /labels": "list_labels",
93
+ "GET /drafts": "list_drafts",
94
+ "GET /drafts/{id}": "get_draft",
95
+ "POST /drafts": "create_draft",
96
+ "PUT /drafts/{id}": "update_draft",
97
+ };
98
+ export const pages = {
99
+ "GET /threads": googlePageToken,
100
+ "GET /messages": googlePageToken,
101
+ "GET /drafts": googlePageToken,
102
+ "GET /history": googlePageToken,
103
+ };
104
+ export const refusalReasons = {
105
+ "POST /drafts": "Draft writes are available only through create_draft, which builds guarded reply MIME.",
106
+ "POST /drafts/send": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
107
+ "DELETE /drafts/{id}": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
108
+ "PUT /drafts/{id}": "Draft writes are available only through update_draft, which preserves headers and refuses attachments.",
109
+ "POST /labels": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
110
+ "DELETE /labels/{id}": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
111
+ "PATCH /labels/{id}": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
112
+ "PUT /labels/{id}": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
113
+ "POST /messages": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
114
+ "POST /messages/batchDelete": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
115
+ "POST /messages/batchModify": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
116
+ "POST /messages/import": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
117
+ "POST /messages/send": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
118
+ "DELETE /messages/{id}": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
119
+ "POST /messages/{id}/modify": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
120
+ "POST /messages/{id}/trash": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
121
+ "POST /messages/{id}/untrash": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
122
+ "GET /settings/autoForwarding": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
123
+ "PUT /settings/autoForwarding": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
124
+ "GET /settings/cse/identities": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
125
+ "POST /settings/cse/identities": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
126
+ "DELETE /settings/cse/identities/{cseEmailAddress}": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
127
+ "GET /settings/cse/identities/{cseEmailAddress}": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
128
+ "PATCH /settings/cse/identities/{emailAddress}": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
129
+ "GET /settings/cse/keypairs": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
130
+ "POST /settings/cse/keypairs": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
131
+ "GET /settings/cse/keypairs/{keyPairId}": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
132
+ "POST /settings/cse/keypairs/{keyPairId}:disable": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
133
+ "POST /settings/cse/keypairs/{keyPairId}:enable": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
134
+ "POST /settings/cse/keypairs/{keyPairId}:obliterate": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
135
+ "GET /settings/delegates": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
136
+ "POST /settings/delegates": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
137
+ "DELETE /settings/delegates/{delegateEmail}": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
138
+ "GET /settings/delegates/{delegateEmail}": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
139
+ "GET /settings/filters": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
140
+ "POST /settings/filters": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
141
+ "DELETE /settings/filters/{id}": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
142
+ "GET /settings/filters/{id}": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
143
+ "GET /settings/forwardingAddresses": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
144
+ "POST /settings/forwardingAddresses": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
145
+ "DELETE /settings/forwardingAddresses/{forwardingEmail}": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
146
+ "GET /settings/forwardingAddresses/{forwardingEmail}": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
147
+ "GET /settings/imap": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
148
+ "PUT /settings/imap": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
149
+ "GET /settings/language": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
150
+ "PUT /settings/language": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
151
+ "GET /settings/pop": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
152
+ "PUT /settings/pop": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
153
+ "GET /settings/sendAs": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
154
+ "POST /settings/sendAs": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
155
+ "DELETE /settings/sendAs/{sendAsEmail}": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
156
+ "GET /settings/sendAs/{sendAsEmail}": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
157
+ "PATCH /settings/sendAs/{sendAsEmail}": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
158
+ "PUT /settings/sendAs/{sendAsEmail}": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
159
+ "GET /settings/sendAs/{sendAsEmail}/smimeInfo": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
160
+ "POST /settings/sendAs/{sendAsEmail}/smimeInfo": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
161
+ "DELETE /settings/sendAs/{sendAsEmail}/smimeInfo/{id}": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
162
+ "GET /settings/sendAs/{sendAsEmail}/smimeInfo/{id}": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
163
+ "POST /settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
164
+ "POST /settings/sendAs/{sendAsEmail}/verify": "Sending is never available; use create_draft or update_draft to save a draft for review in Gmail.",
165
+ "GET /settings/vacation": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
166
+ "PUT /settings/vacation": "Mailbox settings, forwarding, delegation, CSE and S/MIME are outside this draft-only connection; use create_draft or update_draft for drafts.",
167
+ "POST /stop": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
168
+ "DELETE /threads/{id}": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
169
+ "POST /threads/{id}/modify": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
170
+ "POST /threads/{id}/trash": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
171
+ "POST /threads/{id}/untrash": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
172
+ "POST /watch": "This operation is outside the reviewed read allowlist; use create_draft or update_draft for draft writes. Sending is never available.",
173
+ };
@@ -0,0 +1,176 @@
1
+ // Real Effect declarations for Gmail's curated surface. MIME interpretation stays in tools.ts.
2
+ import { Schema } from "effect";
3
+ import { Integer, isMinChars, isMaxChars } from "../../../http/json-schema.js";
4
+ import { StandardPage } from "../../../http/paging.js";
5
+ import { fieldsInput } from "../../../http/fields.js";
6
+ const optional = Schema.optionalKey;
7
+ const pattern = (regex) => Schema.makeFilter((value) => regex.test(value), { toJsonSchema: () => ({ pattern: regex.source }) });
8
+ const string = (description, max, min = 0) => Schema.String.check(isMinChars(min), isMaxChars(max)).annotate({ description });
9
+ const id = (description) => string(description, 256, 1).check(pattern(/^[A-Za-z0-9_-]+$/));
10
+ const cursor = optional(string("Opaque page.nextCursor from the same call. Pass it back unchanged.", 4096, 1));
11
+ const limit = optional(Integer.check(Schema.isBetween({ minimum: 1, maximum: 25 })).annotate({
12
+ default: 10,
13
+ description: "Rows per page, default 10, at most 25. Each summary costs a metadata read.",
14
+ }));
15
+ const query = optional(string("Gmail search syntax: from:, subject:, label:, is:unread, newer_than:7d. Omit for everything.", 2048));
16
+ const bodyChars = (value) => optional(Integer.check(Schema.isBetween({ minimum: 0, maximum: 100000 })).annotate({
17
+ default: value,
18
+ description: "Body characters kept per message; size cuts appear in truncated.",
19
+ }));
20
+ const recipients = (description) => optional(Schema.Array(string("Address or Name <address@example.com>.", 320, 3).check(pattern(/^[^\r\n]*$/)))
21
+ .check(Schema.isMaxLength(100))
22
+ .annotate({ description }));
23
+ const compose = {
24
+ to: recipients("To recipients; replies default to Reply-To, else From."),
25
+ cc: recipients("Cc recipients."),
26
+ bcc: recipients("Bcc recipients."),
27
+ subject: optional(string("Subject; replies default to Re: and the original subject.", 900).check(pattern(/^[^\r\n]*$/))),
28
+ body: string("Full new plain-text body.", 200000),
29
+ htmlBody: optional(string("Optional HTML alternative to the plain-text body.", 500000)),
30
+ replyToMessageId: optional(id("Message to reply to; sets its thread and guarded In-Reply-To/References.")),
31
+ };
32
+ const resultFields = optional(fieldsInput("Dot paths to keep in the result. It only narrows the result."));
33
+ const itemFields = optional(fieldsInput("Dot paths to keep in each item. It only narrows the projection."));
34
+ export const inputs = {
35
+ search_threads: Schema.Struct({
36
+ query,
37
+ includeSpamTrash: optional(Schema.Boolean),
38
+ limit,
39
+ cursor,
40
+ fields: itemFields,
41
+ }),
42
+ get_thread: Schema.Struct({
43
+ threadId: id("Thread id from search_threads or a message."),
44
+ maxBodyChars: bodyChars(3000),
45
+ cursor,
46
+ fields: resultFields,
47
+ }),
48
+ get_message: Schema.Struct({
49
+ messageId: id("Message id from a thread or draft."),
50
+ maxBodyChars: bodyChars(12000),
51
+ fields: resultFields,
52
+ }),
53
+ get_attachment: Schema.Struct({
54
+ fields: resultFields,
55
+ messageId: id("Message carrying the attachment."),
56
+ partId: optional(string("Immutable partId from the attachment listing, including an empty root id. Takes precedence over attachmentId.", 256)),
57
+ attachmentId: optional(string("Alternative rotating attachmentId from a fresh listing; prefer partId.", 2048, 1).check(pattern(/^[A-Za-z0-9_-]+$/))),
58
+ maxChars: optional(Integer.check(Schema.isBetween({ minimum: 1, maximum: 100000 })).annotate({
59
+ default: 12000,
60
+ description: "Text code points kept; ignored for binaries.",
61
+ })),
62
+ maxBytes: optional(Integer.check(Schema.isBetween({ minimum: 65536, maximum: 4194304 })).annotate({
63
+ default: 196608,
64
+ description: "Whole-result byte budget. Raise only for a direct call_tool; execute_code cannot receive large results.",
65
+ })),
66
+ }),
67
+ list_labels: Schema.Struct({ fields: itemFields }),
68
+ list_drafts: Schema.Struct({ query, limit, cursor, fields: itemFields }),
69
+ get_draft: Schema.Struct({
70
+ fields: resultFields,
71
+ draftId: id("Stable draft id from list_drafts or create_draft."),
72
+ maxBodyChars: bodyChars(12000),
73
+ }),
74
+ create_draft: Schema.Struct(compose),
75
+ update_draft: Schema.Struct({
76
+ draftId: id("Draft to replace; attachments and inline images are refused."),
77
+ ...compose,
78
+ }),
79
+ };
80
+ const loose = (fields) => Schema.Struct(Object.fromEntries(Object.entries(fields).map(([key, value]) => [key, optional(value)])));
81
+ const truncated = optional(Schema.Array(Schema.String));
82
+ const Attachment = loose({
83
+ filename: Schema.String,
84
+ mimeType: Schema.String,
85
+ size: Integer,
86
+ attachmentId: Schema.String,
87
+ partId: Schema.String,
88
+ });
89
+ const messageFields = {
90
+ id: Schema.String,
91
+ threadId: Schema.String,
92
+ labelIds: Schema.Array(Schema.String),
93
+ date: Schema.String,
94
+ from: Schema.String,
95
+ to: Schema.String,
96
+ cc: Schema.String,
97
+ bcc: Schema.String,
98
+ replyTo: Schema.String,
99
+ subject: Schema.String,
100
+ messageIdHeader: Schema.String,
101
+ inReplyTo: Schema.String,
102
+ snippet: Schema.String,
103
+ body: Schema.String,
104
+ bodyFormat: Schema.Literals(["text", "html", "none", "unavailable"]),
105
+ bodyNote: Schema.String,
106
+ attachments: Schema.Array(Attachment),
107
+ };
108
+ const Message = loose(messageFields);
109
+ const { id: _id, ...draftFields } = messageFields;
110
+ export const rows = {
111
+ search_threads: loose({
112
+ id: Schema.String,
113
+ subject: Schema.String,
114
+ from: Schema.String,
115
+ lastFrom: Schema.String,
116
+ messageCount: Integer,
117
+ lastMessageAt: Schema.String,
118
+ unread: Schema.Boolean,
119
+ labelIds: Schema.Array(Schema.String),
120
+ snippet: Schema.String,
121
+ }),
122
+ list_labels: loose({ id: Schema.String, name: Schema.String, type: Schema.Literals(["system", "user"]) }),
123
+ list_drafts: loose({
124
+ draftId: Schema.String,
125
+ messageId: Schema.String,
126
+ threadId: Schema.String,
127
+ subject: Schema.String,
128
+ to: Schema.String,
129
+ updatedAt: Schema.String,
130
+ snippet: Schema.String,
131
+ }),
132
+ };
133
+ const listOutput = (row) => Schema.Struct({ items: Schema.Array(row), page: StandardPage, truncated });
134
+ const Saved = Schema.Struct({
135
+ draftId: optional(Schema.String),
136
+ messageId: optional(Schema.String),
137
+ threadId: optional(Schema.String),
138
+ saved: Schema.Literal(true),
139
+ sent: Schema.Literal(false),
140
+ note: optional(Schema.String),
141
+ truncated,
142
+ });
143
+ export const outputs = {
144
+ search_threads: listOutput(rows.search_threads),
145
+ list_labels: Schema.Struct({
146
+ items: Schema.Array(rows.list_labels),
147
+ page: Schema.Struct({ hasMore: Schema.Literal(false) }),
148
+ truncated,
149
+ }),
150
+ list_drafts: listOutput(rows.list_drafts),
151
+ get_thread: loose({
152
+ id: Schema.String,
153
+ messageCount: Integer,
154
+ messages: Schema.Array(Message),
155
+ page: loose({ hasMore: Schema.Boolean, nextCursor: Schema.String }),
156
+ truncated: Schema.Array(Schema.String),
157
+ }),
158
+ get_message: Schema.Struct({ ...Message.fields, truncated }),
159
+ get_draft: Schema.Struct({
160
+ ...loose({ draftId: Schema.String, messageId: Schema.String, ...draftFields }).fields,
161
+ truncated,
162
+ }),
163
+ get_attachment: loose({
164
+ messageId: Schema.String,
165
+ partId: Schema.String,
166
+ filename: Schema.String,
167
+ mimeType: Schema.String,
168
+ size: Integer,
169
+ format: Schema.Literals(["text", "base64", "unavailable"]),
170
+ content: Schema.String,
171
+ note: Schema.String,
172
+ truncated: Schema.Array(Schema.String),
173
+ }),
174
+ create_draft: Saved,
175
+ update_draft: Saved,
176
+ };
@@ -0,0 +1,120 @@
1
+ import { ConnectorCallError } from "../../../errors.js";
2
+ /** RFC 5322 sections 3.6.4/4.5.4, with H8's stricter ASCII/control boundary. */
3
+ export function threadingIds(value, legacyPhrases = false) {
4
+ if (value === undefined)
5
+ return [];
6
+ const fail = () => {
7
+ throw new ConnectorCallError("invalid_args", "The copied Message-ID, In-Reply-To or References header is malformed or withheld. No draft was changed; repair its threading in Gmail.");
8
+ };
9
+ // Unfold before parsing; a bare CR/LF, control, non-ASCII or withheld lane
10
+ // must never become a different, apparently usable threading token.
11
+ const source = value.replace(/\r\n(?=[ \t])/g, "");
12
+ if (value.length > 32768 || !/^[\x20-\x7e\t]*$/.test(source) || source.includes("[redacted]"))
13
+ fail();
14
+ let at = 0;
15
+ const atom = () => {
16
+ const start = at;
17
+ while (at < source.length && /[A-Za-z0-9!#$%&'*+\-/=?^_`{|}~]/.test(source[at]))
18
+ at++;
19
+ if (at === start)
20
+ fail();
21
+ };
22
+ const quoted = (close) => {
23
+ at++;
24
+ while (at < source.length) {
25
+ const character = source[at++];
26
+ if (character === close)
27
+ return;
28
+ if (character === "\\") {
29
+ if (at === source.length)
30
+ fail();
31
+ at++;
32
+ }
33
+ else if (close === "]" && character === "[")
34
+ fail();
35
+ }
36
+ fail();
37
+ };
38
+ const cfws = () => {
39
+ while (at < source.length) {
40
+ if (source[at] === " " || source[at] === "\t")
41
+ at++;
42
+ else if (source[at] === "(") {
43
+ let depth = 1;
44
+ at++;
45
+ while (depth && at < source.length) {
46
+ const character = source[at++];
47
+ if (character === "\\") {
48
+ if (at === source.length)
49
+ fail();
50
+ at++;
51
+ }
52
+ else if (character === "(")
53
+ depth++;
54
+ else if (character === ")")
55
+ depth--;
56
+ }
57
+ if (depth)
58
+ fail();
59
+ }
60
+ else
61
+ return;
62
+ }
63
+ };
64
+ const word = () => {
65
+ if (source[at] === '"')
66
+ quoted('"');
67
+ else
68
+ atom();
69
+ };
70
+ const side = (left) => {
71
+ cfws();
72
+ if (!left && source[at] === "[")
73
+ quoted("]");
74
+ else {
75
+ if (left)
76
+ word();
77
+ else
78
+ atom();
79
+ cfws();
80
+ while (source[at] === ".") {
81
+ at++;
82
+ cfws();
83
+ if (left)
84
+ word();
85
+ else
86
+ atom();
87
+ cfws();
88
+ }
89
+ }
90
+ cfws();
91
+ };
92
+ const ids = [];
93
+ while (at < source.length) {
94
+ cfws();
95
+ if (at === source.length)
96
+ break;
97
+ if (source[at] === "<") {
98
+ const start = at++;
99
+ side(true);
100
+ if (source[at++] !== "@")
101
+ fail();
102
+ side(false);
103
+ if (source[at++] !== ">")
104
+ fail();
105
+ const id = source.slice(start, at);
106
+ if (id.length > 998)
107
+ fail();
108
+ ids.push(id);
109
+ }
110
+ else if (legacyPhrases && (source[at] === "," || source[at] === "."))
111
+ at++;
112
+ else if (legacyPhrases)
113
+ word();
114
+ else
115
+ fail();
116
+ }
117
+ if (!legacyPhrases && ids.length !== 1)
118
+ fail();
119
+ return ids;
120
+ }