@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
@@ -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
+ }