@zackbart/connecta 0.34.1 → 0.36.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 (441) hide show
  1. package/CHANGELOG.md +418 -0
  2. package/README.md +65 -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 +2044 -1161
  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 +751 -281
  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 +29 -7
  53. package/dist/connectors/api-connector.js +145 -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/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 +227 -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 +379 -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/contract.d.ts +8 -3
  109. package/dist/operator-ui/generated.js +4 -4
  110. package/dist/operator-ui/model.d.ts +2 -3
  111. package/dist/program-writes.js +47 -26
  112. package/dist/provider-call-facts.d.ts +115 -0
  113. package/dist/provider-call-facts.js +182 -0
  114. package/dist/provider-call.d.ts +112 -0
  115. package/dist/provider-call.js +271 -0
  116. package/dist/provider.d.ts +65 -31
  117. package/dist/provider.js +116 -39
  118. package/dist/providers/_shared/google/hatch.js +91 -0
  119. package/dist/providers/_shared/google/kit.js +427 -0
  120. package/dist/providers/_shared/google/result-size.js +15 -2
  121. package/dist/providers/_shared/google/service-account.d.ts +2 -1
  122. package/dist/providers/_shared/google/service-account.js +8 -4
  123. package/dist/providers/_shared/google/workspace.d.ts +6 -210
  124. package/dist/providers/_shared/google/workspace.js +6 -425
  125. package/dist/providers/_shared/rest/compact-index.js +86 -0
  126. package/dist/providers/_shared/rest/kit.js +146 -0
  127. package/dist/providers/_shared/rest/operation-index.js +230 -14
  128. package/dist/providers/_shared/rest/response-media.js +11 -0
  129. package/dist/providers/_shared/rest/value-safety.js +353 -195
  130. package/dist/providers/_shared/sensitive-fields.js +27 -0
  131. package/dist/providers/breeze/api.js +584 -0
  132. package/dist/providers/breeze/index.d.ts +1 -3
  133. package/dist/providers/breeze/index.js +67 -1420
  134. package/dist/providers/breeze/openapi.generated.js +60 -0
  135. package/dist/providers/breeze/skill.generated.js +2 -6
  136. package/dist/providers/breeze/tools.js +696 -0
  137. package/dist/providers/ccb/api.js +496 -0
  138. package/dist/providers/ccb/index.d.ts +15 -37
  139. package/dist/providers/ccb/index.js +77 -1702
  140. package/dist/providers/ccb/lib/constants.d.ts +34 -0
  141. package/dist/providers/ccb/lib/constants.js +74 -0
  142. package/dist/providers/ccb/lib/guide.js +9 -0
  143. package/dist/providers/ccb/lib/verdicts.js +387 -0
  144. package/dist/providers/ccb/openapi.generated.js +397 -0
  145. package/dist/providers/ccb/safety.js +295 -0
  146. package/dist/providers/ccb/skill.generated.js +2 -6
  147. package/dist/providers/ccb/tools.js +853 -0
  148. package/dist/providers/cloudflare/api.js +1066 -0
  149. package/dist/providers/cloudflare/index.d.ts +5 -22
  150. package/dist/providers/cloudflare/index.js +79 -197
  151. package/dist/providers/cloudflare/lib/config.d.ts +16 -0
  152. package/dist/providers/cloudflare/lib/config.js +2 -0
  153. package/dist/providers/cloudflare/lib/discovery.js +29 -0
  154. package/dist/providers/cloudflare/{graphql.js → lib/graphql.js} +1 -1
  155. package/dist/providers/cloudflare/lib/hatch.js +103 -0
  156. package/dist/providers/cloudflare/lib/path-bounds.js +28 -0
  157. package/dist/providers/cloudflare/lib/response-media.js +75 -0
  158. package/dist/providers/cloudflare/openapi.generated.js +4 -3
  159. package/dist/providers/cloudflare/{value-safety.js → safety.js} +487 -0
  160. package/dist/providers/cloudflare/skill.generated.js +2 -10
  161. package/dist/providers/cloudflare/tools.js +360 -0
  162. package/dist/providers/docs/api.js +51 -0
  163. package/dist/providers/docs/index.d.ts +1 -12
  164. package/dist/providers/docs/index.js +53 -1165
  165. package/dist/providers/docs/lib/constants.d.ts +18 -0
  166. package/dist/providers/docs/lib/constants.js +18 -0
  167. package/dist/providers/docs/lib/discovery.js +26 -0
  168. package/dist/providers/docs/lib/requests.js +48 -0
  169. package/dist/providers/docs/lib/schemas.js +168 -0
  170. package/dist/providers/docs/openapi.generated.js +16 -0
  171. package/dist/providers/docs/safety.js +54 -0
  172. package/dist/providers/docs/skill.generated.js +2 -6
  173. package/dist/providers/docs/tools.js +801 -0
  174. package/dist/providers/drive/api.js +177 -0
  175. package/dist/providers/drive/index.d.ts +1 -12
  176. package/dist/providers/drive/index.js +38 -1448
  177. package/dist/providers/drive/lib/constants.d.ts +6 -0
  178. package/dist/providers/drive/lib/constants.js +6 -0
  179. package/dist/providers/drive/lib/contracts.js +532 -0
  180. package/dist/providers/drive/lib/hatch.js +197 -0
  181. package/dist/providers/drive/openapi.generated.js +77 -0
  182. package/dist/providers/drive/safety.js +90 -0
  183. package/dist/providers/drive/skill.generated.js +2 -6
  184. package/dist/providers/drive/tools.js +1290 -0
  185. package/dist/providers/forms/api.js +71 -0
  186. package/dist/providers/forms/index.d.ts +1 -12
  187. package/dist/providers/forms/index.js +49 -1145
  188. package/dist/providers/forms/lib/constants.d.ts +14 -0
  189. package/dist/providers/forms/lib/constants.js +19 -0
  190. package/dist/providers/forms/lib/hatch.js +72 -0
  191. package/dist/providers/forms/openapi.generated.js +23 -0
  192. package/dist/providers/forms/safety.js +34 -0
  193. package/dist/providers/forms/skill.generated.js +2 -8
  194. package/dist/providers/forms/tools.js +1023 -0
  195. package/dist/providers/github/api.js +150 -0
  196. package/dist/providers/github/index.d.ts +4 -5
  197. package/dist/providers/github/index.js +30 -87
  198. package/dist/providers/github/{auth.d.ts → lib/auth.d.ts} +5 -3
  199. package/dist/providers/github/{auth.js → lib/auth.js} +40 -43
  200. package/dist/providers/github/lib/discovery.js +132 -0
  201. package/dist/providers/github/lib/operations.js +58 -0
  202. package/dist/providers/github/{scope.d.ts → lib/scope.d.ts} +2 -0
  203. package/dist/providers/github/{scope.js → lib/scope.js} +25 -1
  204. package/dist/providers/github/openapi.generated.js +1216 -0
  205. package/dist/providers/github/safety.js +216 -0
  206. package/dist/providers/github/skill.generated.js +2 -5
  207. package/dist/providers/github/tools.js +506 -0
  208. package/dist/providers/gmail/api.js +114 -0
  209. package/dist/providers/gmail/index.d.ts +1 -12
  210. package/dist/providers/gmail/index.js +73 -1621
  211. package/dist/providers/gmail/lib/constants.d.ts +13 -0
  212. package/dist/providers/gmail/lib/constants.js +16 -0
  213. package/dist/providers/gmail/lib/index.js +173 -0
  214. package/dist/providers/gmail/lib/schemas.js +176 -0
  215. package/dist/providers/gmail/lib/threading.js +120 -0
  216. package/dist/providers/gmail/openapi.generated.js +92 -0
  217. package/dist/providers/gmail/safety.js +21 -0
  218. package/dist/providers/gmail/skill.generated.js +2 -6
  219. package/dist/providers/gmail/tools.js +1435 -0
  220. package/dist/providers/overflow/api.js +1008 -0
  221. package/dist/providers/overflow/index.d.ts +1 -17
  222. package/dist/providers/overflow/index.js +60 -1488
  223. package/dist/providers/overflow/skill.generated.js +2 -5
  224. package/dist/providers/overflow/tools.js +873 -0
  225. package/dist/providers/planning-center/api.js +467 -0
  226. package/dist/providers/planning-center/index.d.ts +4 -35
  227. package/dist/providers/planning-center/index.js +69 -2445
  228. package/dist/providers/planning-center/lib/constants.d.ts +58 -0
  229. package/dist/providers/planning-center/lib/constants.js +83 -0
  230. package/dist/providers/planning-center/lib/discovery.js +40 -0
  231. package/dist/providers/planning-center/lib/guide.js +39 -0
  232. package/dist/providers/planning-center/lib/json-api.js +83 -0
  233. package/dist/providers/planning-center/lib/verdicts.js +1758 -0
  234. package/dist/providers/planning-center/openapi.generated.js +1764 -0
  235. package/dist/providers/planning-center/safety.js +188 -0
  236. package/dist/providers/planning-center/skill.generated.js +2 -27
  237. package/dist/providers/planning-center/tools.js +1010 -0
  238. package/dist/providers/quickbooks/api.js +299 -0
  239. package/dist/providers/quickbooks/index.d.ts +13 -0
  240. package/dist/providers/quickbooks/index.js +93 -0
  241. package/dist/providers/quickbooks/lib/query.js +118 -0
  242. package/dist/providers/quickbooks/lib/writes.js +168 -0
  243. package/dist/providers/quickbooks/safety.js +222 -0
  244. package/dist/providers/quickbooks/skill.generated.js +5 -0
  245. package/dist/providers/quickbooks/tools.js +117 -0
  246. package/dist/providers/sheets/api.js +133 -0
  247. package/dist/providers/sheets/index.d.ts +4 -16
  248. package/dist/providers/sheets/index.js +61 -1172
  249. package/dist/providers/sheets/lib/constants.d.ts +14 -0
  250. package/dist/providers/sheets/lib/constants.js +14 -0
  251. package/dist/providers/sheets/lib/hatch.js +163 -0
  252. package/dist/providers/sheets/lib/requests.js +105 -0
  253. package/dist/providers/sheets/lib/schemas.js +138 -0
  254. package/dist/providers/sheets/openapi.generated.js +30 -0
  255. package/dist/providers/sheets/safety.js +27 -0
  256. package/dist/providers/sheets/skill.generated.js +2 -7
  257. package/dist/providers/sheets/tools.js +733 -0
  258. package/dist/providers/slides/api.js +147 -0
  259. package/dist/providers/slides/index.d.ts +2 -10
  260. package/dist/providers/slides/index.js +48 -2555
  261. package/dist/providers/slides/lib/constants.d.ts +11 -0
  262. package/dist/providers/slides/lib/constants.js +11 -0
  263. package/dist/providers/slides/lib/requests.js +60 -0
  264. package/dist/providers/slides/lib/schemas.js +565 -0
  265. package/dist/providers/slides/openapi.generated.js +18 -0
  266. package/dist/providers/slides/skill.generated.js +2 -6
  267. package/dist/providers/slides/tools.js +1968 -0
  268. package/dist/providers/stripe/api.js +401 -0
  269. package/dist/providers/stripe/index.d.ts +5 -27
  270. package/dist/providers/stripe/index.js +74 -210
  271. package/dist/providers/stripe/lib/config.d.ts +4 -0
  272. package/dist/providers/stripe/lib/config.js +2 -0
  273. package/dist/providers/stripe/openapi.generated.js +4 -3
  274. package/dist/providers/stripe/{value-safety.js → safety.js} +5 -5
  275. package/dist/providers/stripe/skill.generated.js +2 -11
  276. package/dist/providers/stripe/tools.js +77 -0
  277. package/dist/providers/tithely/api.js +531 -0
  278. package/dist/providers/tithely/index.d.ts +17 -0
  279. package/dist/providers/tithely/index.js +86 -965
  280. package/dist/providers/tithely/skill.generated.js +2 -5
  281. package/dist/providers/tithely/tools.js +426 -0
  282. package/dist/providers/vercel/api.js +551 -0
  283. package/dist/providers/vercel/index.d.ts +9 -25
  284. package/dist/providers/vercel/index.js +65 -260
  285. package/dist/providers/vercel/lib/config.d.ts +2 -0
  286. package/dist/providers/vercel/lib/config.js +2 -0
  287. package/dist/providers/vercel/lib/index.js +117 -0
  288. package/dist/providers/vercel/lib/logs.js +100 -0
  289. package/dist/providers/vercel/lib/pin.js +270 -0
  290. package/dist/providers/vercel/openapi.generated.js +10 -5
  291. package/dist/providers/vercel/{value-safety.js → safety.js} +247 -38
  292. package/dist/providers/vercel/skill.generated.js +2 -7
  293. package/dist/providers/vercel/tools.js +642 -0
  294. package/dist/redaction-identity.js +47 -0
  295. package/dist/redaction-marker.js +125 -0
  296. package/dist/registry.d.ts +21 -15
  297. package/dist/registry.js +409 -376
  298. package/dist/routes/access-tokens.js +1 -1
  299. package/dist/routes/actor-labels.js +1 -1
  300. package/dist/routes/connect.js +1 -1
  301. package/dist/routes/dispatch.js +103 -0
  302. package/dist/routes/mcp.js +170 -79
  303. package/dist/routes/oauth.js +6 -1
  304. package/dist/routes/operator.js +2 -2
  305. package/dist/routes/shared.d.ts +5 -4
  306. package/dist/routes/shared.js +244 -177
  307. package/dist/routes/skills.js +10 -8
  308. package/dist/routes/ui-config.js +27 -3
  309. package/dist/routes/ui-data.js +21 -20
  310. package/dist/routes/ui.js +1 -1
  311. package/dist/runtime/call-admission.js +0 -26
  312. package/dist/runtime/call-entry.js +30 -0
  313. package/dist/runtime/call.js +552 -0
  314. package/dist/runtime/connector-scope.js +7 -0
  315. package/dist/runtime/credential-probe.js +34 -0
  316. package/dist/runtime/executor.js +40 -0
  317. package/dist/runtime/native-storage.js +63 -0
  318. package/dist/runtime/registry.js +27 -0
  319. package/dist/runtime/request-scope.js +72 -0
  320. package/dist/runtime/run.js +15 -7
  321. package/dist/runtime/shared-read.js +34 -5
  322. package/dist/runtime/storage.js +34 -21
  323. package/dist/sent-secrets.d.ts +194 -37
  324. package/dist/sent-secrets.js +1743 -340
  325. package/dist/server.js +5 -56
  326. package/dist/skills.js +322 -223
  327. package/dist/sqlite.js +15 -14
  328. package/dist/storage/d1-copy.js +255 -0
  329. package/dist/storage/d1-driver.js +15 -0
  330. package/dist/storage/keys.js +28 -0
  331. package/dist/storage/sql-driver.js +88 -0
  332. package/dist/storage/sql-native.js +544 -0
  333. package/dist/storage/sql-schema.d.ts +6 -0
  334. package/dist/storage/sql-schema.js +15 -0
  335. package/dist/storage/sql.d.ts +14 -20
  336. package/dist/storage/sql.js +29 -535
  337. package/dist/timeout.js +0 -26
  338. package/dist/tool-safety.js +20 -10
  339. package/dist/types.d.ts +9 -109
  340. package/dist/ui.d.ts +1 -1
  341. package/dist/ui.js +0 -1
  342. package/dist/upward.js +3 -0
  343. package/dist/usage-guide.js +3 -1
  344. package/dist/validate.d.ts +4 -2
  345. package/dist/validate.js +86 -9
  346. package/dist/version.d.ts +1 -1
  347. package/dist/version.js +1 -1
  348. package/dist/worker.js +312 -292
  349. package/dist/workspace-subject.js +5 -1
  350. package/dist/write-outcome.js +454 -34
  351. package/documentation/README.md +28 -7
  352. package/documentation/architecture.md +2409 -255
  353. package/documentation/auth.md +867 -114
  354. package/documentation/code-mode.md +49 -16
  355. package/documentation/deploying.md +164 -20
  356. package/documentation/hosted-mcp-migration.md +460 -0
  357. package/documentation/integrating.md +129 -144
  358. package/documentation/meta-tools.md +409 -32
  359. package/documentation/operating.md +27 -3
  360. package/documentation/operator-tests.md +3 -0
  361. package/documentation/operator-ui.md +84 -48
  362. package/documentation/provider-auth-migration.md +16 -63
  363. package/documentation/provider-migration-0.29.md +10 -5
  364. package/documentation/provider-migration-0.35.md +975 -0
  365. package/documentation/providers.md +1347 -0
  366. package/examples/worker/AGENTS.md +23 -9
  367. package/examples/worker/README.md +254 -135
  368. package/examples/worker/alchemy.run.ts +116 -0
  369. package/examples/worker/gitignore +10 -0
  370. package/examples/worker/src/connecta.config.ts +23 -21
  371. package/examples/worker/wrangler.jsonc +14 -5
  372. package/guides/connecting-agents.md +157 -0
  373. package/guides/how-it-works.md +156 -0
  374. package/guides/safety-and-trust.md +153 -0
  375. package/package.json +30 -50
  376. package/templates/node/.env.example +3 -0
  377. package/templates/node/README.md +22 -2
  378. package/templates/node/docker-compose.yml +1 -0
  379. package/templates/node/package.json +3 -2
  380. package/templates/node/src/connecta.config.ts +8 -0
  381. package/dist/catalog-drift.d.ts +0 -138
  382. package/dist/catalog-drift.js +0 -578
  383. package/dist/operator-ui/agents.d.ts +0 -74
  384. package/dist/operator-ui/agents.js +0 -104
  385. package/dist/operator-ui/config-summary.js +0 -565
  386. package/dist/operator-ui/connection-map.js +0 -376
  387. package/dist/operator-ui/endpoints.js +0 -221
  388. package/dist/operator-ui/fix-prompts.d.ts +0 -18
  389. package/dist/operator-ui/fix-prompts.js +0 -87
  390. package/dist/operator-ui/health.js +0 -52
  391. package/dist/operator-ui/member-page.js +0 -97
  392. package/dist/operator-ui/overview.js +0 -123
  393. package/dist/operator-ui/setup-commands.js +0 -51
  394. package/dist/operator-ui/view.d.ts +0 -401
  395. package/dist/operator-ui/view.js +0 -705
  396. package/dist/providers/_shared/request-token.js +0 -83
  397. package/dist/providers/_shared/rest/dispatch.js +0 -41
  398. package/dist/providers/_shared/rest/operation-index.d.ts +0 -133
  399. package/dist/providers/_shared/rest/tools.d.ts +0 -141
  400. package/dist/providers/_shared/rest/tools.js +0 -569
  401. package/dist/providers/_shared/rest/value-safety.d.ts +0 -201
  402. package/dist/providers/basecamp/index.d.ts +0 -45
  403. package/dist/providers/basecamp/index.js +0 -997
  404. package/dist/providers/basecamp/skill.generated.js +0 -9
  405. package/dist/providers/cloudflare/rest.d.ts +0 -37
  406. package/dist/providers/cloudflare/rest.js +0 -1097
  407. package/dist/providers/github/hosted.js +0 -218
  408. package/dist/providers/github/rest.js +0 -321
  409. package/dist/providers/infisical/index.d.ts +0 -7
  410. package/dist/providers/infisical/index.js +0 -713
  411. package/dist/providers/infisical/skill.generated.js +0 -8
  412. package/dist/providers/intercom/index.d.ts +0 -24
  413. package/dist/providers/intercom/index.js +0 -121
  414. package/dist/providers/intercom/skill.generated.js +0 -8
  415. package/dist/providers/linear/index.d.ts +0 -55
  416. package/dist/providers/linear/index.js +0 -537
  417. package/dist/providers/linear/skill.generated.js +0 -8
  418. package/dist/providers/mixpanel/index.d.ts +0 -59
  419. package/dist/providers/mixpanel/index.js +0 -472
  420. package/dist/providers/mixpanel/operations.js +0 -20
  421. package/dist/providers/mixpanel/rest.js +0 -603
  422. package/dist/providers/mixpanel/skill.generated.js +0 -10
  423. package/dist/providers/mixpanel/value-safety.js +0 -16
  424. package/dist/providers/notion/index.d.ts +0 -67
  425. package/dist/providers/notion/index.js +0 -368
  426. package/dist/providers/notion/openapi.generated.js +0 -75
  427. package/dist/providers/notion/rest.d.ts +0 -24
  428. package/dist/providers/notion/rest.js +0 -1226
  429. package/dist/providers/notion/skill.generated.js +0 -11
  430. package/dist/providers/notion/value-safety.js +0 -56
  431. package/dist/providers/revenuecat/index.d.ts +0 -51
  432. package/dist/providers/revenuecat/index.js +0 -697
  433. package/dist/providers/revenuecat/skill.generated.js +0 -11
  434. package/dist/providers/stripe/rest.d.ts +0 -14
  435. package/dist/providers/stripe/rest.js +0 -402
  436. package/dist/providers/vercel/rest.d.ts +0 -20
  437. package/dist/providers/vercel/rest.js +0 -1020
  438. package/dist/providers/wispr-flow/index.d.ts +0 -14
  439. package/dist/providers/wispr-flow/index.js +0 -117
  440. package/dist/providers/wispr-flow/skill.generated.js +0 -8
  441. /package/dist/providers/github/{key.js → lib/key.js} +0 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The Sheets API root. Every path the tools send is beneath
3
+ * `/spreadsheets`; the delegated token decides which ones the user can open.
4
+ */
5
+ export declare const SHEETS_API_BASE_URL = "https://sheets.googleapis.com/v4";
6
+ /**
7
+ * Exactly the scope this connection requests, and what the Admin console's
8
+ * domain-wide delegation entry must add for it. One scope reads and writes
9
+ * every spreadsheet the user can open; Google offers no narrower one that
10
+ * writes.
11
+ */
12
+ export declare const SHEETS_SCOPES: readonly ["https://www.googleapis.com/auth/spreadsheets"];
13
+ /** A wide values read; Google itself recommends payloads under 2 MB. */
14
+ export declare const SHEETS_MAX_RESPONSE_BYTES: number;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The Sheets API root. Every path the tools send is beneath
3
+ * `/spreadsheets`; the delegated token decides which ones the user can open.
4
+ */
5
+ export const SHEETS_API_BASE_URL = "https://sheets.googleapis.com/v4";
6
+ /**
7
+ * Exactly the scope this connection requests, and what the Admin console's
8
+ * domain-wide delegation entry must add for it. One scope reads and writes
9
+ * every spreadsheet the user can open; Google offers no narrower one that
10
+ * writes.
11
+ */
12
+ export const SHEETS_SCOPES = ["https://www.googleapis.com/auth/spreadsheets"];
13
+ /** A wide values read; Google itself recommends payloads under 2 MB. */
14
+ export const SHEETS_MAX_RESPONSE_BYTES = 16 * 1024 * 1024;
@@ -0,0 +1,163 @@
1
+ import { codePoints } from "../../../http/json-schema.js";
2
+ import { googleBatchGuard, googleHatchBinding } from "../../_shared/google/hatch.js";
3
+ import { OperationIndex } from "../../_shared/rest/operation-index.js";
4
+ import { openapi } from "../openapi.generated.js";
5
+ import { SHEETS_ADMITTED_KINDS, SHEETS_REFUSED_KINDS, sheetsExternalDataProblem } from "./requests.js";
6
+ // Keep range/header nouns searchable alongside the reviewed 115-character action summary.
7
+ // This discovery-only category changes no method, path, schema or execution verdict.
8
+ const sheetsDiscovery = {
9
+ ...openapi,
10
+ tags: [...openapi.tags, "spreadsheets ranges headers", "spreadsheets.values rows headers"],
11
+ ops: openapi.ops.map((row) => {
12
+ const [method, path, operationId, summary, , ...server] = row;
13
+ if (row[2] === "sheets.spreadsheets.values.get" || row[2] === "sheets.spreadsheets.values.batchGet")
14
+ return [method, path, operationId, summary, openapi.tags.length + 1, ...server];
15
+ if (row[2] !== "sheets.spreadsheets.batchUpdate")
16
+ return row;
17
+ return [method, path, operationId, summary, openapi.tags.length, ...server];
18
+ }),
19
+ };
20
+ export const sheetsIndex = new OperationIndex(sheetsDiscovery, {
21
+ vendor: "sheets",
22
+ title: "Google Sheets",
23
+ pathMatching: "uri-template",
24
+ });
25
+ /** Decode range colons only. Encoded actions, ids and unreserved bytes still fail the shared backstop. */
26
+ export function sheetsPath(path) {
27
+ const match = /^(\/spreadsheets\/[A-Za-z0-9_-]+\/values\/)([^/?#]+)$/.exec(path);
28
+ if (!match)
29
+ return path;
30
+ const tail = match[2];
31
+ const action = /:(append|clear)$/.exec(tail)?.[0] ?? "";
32
+ const range = action ? tail.slice(0, -action.length) : tail;
33
+ // An encoded trailing action could change the matched method; preserve its refusal.
34
+ if (/%3a(?:append|clear)$/i.test(range))
35
+ return path;
36
+ return `${match[1]}${range.replace(/%3a/gi, ":")}${action}`;
37
+ }
38
+ const record = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
39
+ /** Same scalar, range and write-cell ceilings as the named workflows, including filter-selected writes. */
40
+ export function sheetsRequestProblem(call) {
41
+ const body = record(call.body);
42
+ if (call.op.path === "/spreadsheets/{spreadsheetId}:batchUpdate") {
43
+ const requests = body["requests"];
44
+ if (Array.isArray(requests))
45
+ for (const request of requests) {
46
+ for (const kind of Object.keys(record(request)))
47
+ if (Object.hasOwn(SHEETS_REFUSED_KINDS, kind))
48
+ return SHEETS_REFUSED_KINDS[kind];
49
+ }
50
+ const problem = googleBatchGuard(body, { kinds: SHEETS_ADMITTED_KINDS, revision: false });
51
+ if (problem)
52
+ return problem;
53
+ }
54
+ if (call.method !== "GET" &&
55
+ SHEETS_HATCH.verdicts[`${call.method} ${call.op.path}`] !== "read") {
56
+ const problem = sheetsExternalDataProblem(body);
57
+ if (problem)
58
+ return problem;
59
+ }
60
+ const isValue = call.op.path.includes("/values");
61
+ for (const [key, max] of [
62
+ ["ranges", 20],
63
+ ["dataFilters", 20],
64
+ ["data", 100],
65
+ ]) {
66
+ const list = body[key] ?? call.query[key];
67
+ if (Array.isArray(list) && (!list.length || list.length > max))
68
+ return `${key} needs 1–${max} entries.`;
69
+ }
70
+ const rangeProblem = (value) => typeof value !== "string" ||
71
+ !value.length ||
72
+ codePoints(value) > 512 ||
73
+ /[\r\n]/.test(value) ||
74
+ /^\.+$/.test(value);
75
+ const ranges = [
76
+ ...(Array.isArray(body["ranges"]) ? body["ranges"] : []),
77
+ ...(Array.isArray(call.query["ranges"]) ? call.query["ranges"] : []),
78
+ ];
79
+ if (call.params["range"] !== undefined)
80
+ ranges.push(call.params["range"]);
81
+ if (ranges.some(rangeProblem))
82
+ return "Ranges must be nonempty single-line A1 strings of at most 512 characters.";
83
+ let cells = 0;
84
+ const stack = [body];
85
+ while (stack.length) {
86
+ const value = stack.pop();
87
+ if (Array.isArray(value)) {
88
+ stack.push(...value);
89
+ continue;
90
+ }
91
+ const obj = record(value);
92
+ if (typeof obj["a1Range"] === "string" && rangeProblem(obj["a1Range"]))
93
+ return "Data-filter A1 ranges must be nonempty single-line strings of at most 512 characters.";
94
+ if (isValue && obj["range"] !== undefined && rangeProblem(obj["range"]))
95
+ return "Value ranges must be nonempty single-line strings of at most 512 characters.";
96
+ if (isValue && obj["values"] !== undefined) {
97
+ const rows = obj["values"];
98
+ if (!Array.isArray(rows) || !rows.length || rows.length > (obj["majorDimension"] === "COLUMNS" ? 18278 : 10000))
99
+ return "Values need 1–10000 rows or columns.";
100
+ for (const row of rows) {
101
+ if (!Array.isArray(row) || row.length > (obj["majorDimension"] === "COLUMNS" ? 10000 : 18278))
102
+ return "Values must be a bounded two-dimensional cell array.";
103
+ cells += row.length;
104
+ for (const cell of row)
105
+ if (!(cell === null ||
106
+ typeof cell === "boolean" ||
107
+ (typeof cell === "number" && Number.isFinite(cell)) ||
108
+ (typeof cell === "string" && codePoints(cell) <= 50000)))
109
+ return "Cells must be scalar strings (at most 50000 characters), finite numbers, booleans or null.";
110
+ }
111
+ if (cells > 50000)
112
+ return "A values write carries at most 50000 cells; split it into several calls.";
113
+ }
114
+ stack.push(...Object.values(obj));
115
+ }
116
+ return undefined;
117
+ }
118
+ export function sheetsBinding(connection) {
119
+ return {
120
+ ...googleHatchBinding(connection, {
121
+ index: sheetsIndex,
122
+ review: "Seventeen explicitly reviewed Sheets JSON methods, seven reads including three side-effect-free POST reads; bounded scalar value writes and reviewed non-preview batch kinds, delegated subject and permanent value safety.",
123
+ refuse: sheetsRequestProblem,
124
+ }),
125
+ // A1 references supply cell addresses, not resource nouns; technical nouns in other providers stay searchable.
126
+ searchNoun: (term) => !/^[a-z]{1,3}[1-9]\d*$/.test(term),
127
+ path: sheetsPath,
128
+ };
129
+ }
130
+ export const SHEETS_HATCH = {
131
+ name: "sheets",
132
+ title: "Google Sheets",
133
+ index: sheetsIndex,
134
+ pathExample: "/spreadsheets/sheet_123",
135
+ verdicts: {
136
+ "GET /spreadsheets/{spreadsheetId}": "read",
137
+ "GET /spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}": "read",
138
+ "POST /spreadsheets/{spreadsheetId}/developerMetadata:search": "read",
139
+ "POST /spreadsheets/{spreadsheetId}:getByDataFilter": "read",
140
+ "GET /spreadsheets/{spreadsheetId}/values/{range}": "read",
141
+ "GET /spreadsheets/{spreadsheetId}/values:batchGet": "read",
142
+ "POST /spreadsheets/{spreadsheetId}/values:batchGetByDataFilter": "read",
143
+ "POST /spreadsheets": "write",
144
+ "POST /spreadsheets/{spreadsheetId}:batchUpdate": "destructive",
145
+ "POST /spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo": "write",
146
+ "PUT /spreadsheets/{spreadsheetId}/values/{range}": "destructive",
147
+ "POST /spreadsheets/{spreadsheetId}/values/{range}:append": "destructive",
148
+ "POST /spreadsheets/{spreadsheetId}/values/{range}:clear": "destructive",
149
+ "POST /spreadsheets/{spreadsheetId}/values:batchUpdate": "destructive",
150
+ "POST /spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter": "destructive",
151
+ "POST /spreadsheets/{spreadsheetId}/values:batchClear": "destructive",
152
+ "POST /spreadsheets/{spreadsheetId}/values:batchClearByDataFilter": "destructive",
153
+ },
154
+ named: {
155
+ "GET /spreadsheets/{spreadsheetId}": "get_spreadsheet",
156
+ "GET /spreadsheets/{spreadsheetId}/values:batchGet": "get_values",
157
+ "POST /spreadsheets": "create_spreadsheet",
158
+ "POST /spreadsheets/{spreadsheetId}:batchUpdate": "batch_update_spreadsheet",
159
+ "POST /spreadsheets/{spreadsheetId}/values/{range}:append": "append_values",
160
+ "POST /spreadsheets/{spreadsheetId}/values:batchUpdate": "batch_update_values",
161
+ "POST /spreadsheets/{spreadsheetId}/values:batchClear": "clear_values",
162
+ },
163
+ };
@@ -0,0 +1,105 @@
1
+ export const SHEETS_REQUEST_KINDS = [
2
+ "addBanding",
3
+ "addChart",
4
+ "addCommentReply",
5
+ "addConditionalFormatRule",
6
+ "addDataSource",
7
+ "addDimensionGroup",
8
+ "addFilterView",
9
+ "addNamedRange",
10
+ "addProtectedRange",
11
+ "addSheet",
12
+ "addSlicer",
13
+ "addTable",
14
+ "appendCells",
15
+ "appendDimension",
16
+ "autoFill",
17
+ "autoResizeDimensions",
18
+ "cancelDataSourceRefresh",
19
+ "clearBasicFilter",
20
+ "copyPaste",
21
+ "createDeveloperMetadata",
22
+ "cutPaste",
23
+ "deleteBanding",
24
+ "deleteComment",
25
+ "deleteCommentReply",
26
+ "deleteConditionalFormatRule",
27
+ "deleteDataSource",
28
+ "deleteDeveloperMetadata",
29
+ "deleteDimension",
30
+ "deleteDimensionGroup",
31
+ "deleteDuplicates",
32
+ "deleteEmbeddedObject",
33
+ "deleteFilterView",
34
+ "deleteNamedRange",
35
+ "deleteProtectedRange",
36
+ "deleteRange",
37
+ "deleteSheet",
38
+ "deleteTable",
39
+ "duplicateFilterView",
40
+ "duplicateSheet",
41
+ "findReplace",
42
+ "insertComment",
43
+ "insertDimension",
44
+ "insertRange",
45
+ "mergeCells",
46
+ "moveDimension",
47
+ "pasteData",
48
+ "randomizeRange",
49
+ "refreshDataSource",
50
+ "repeatCell",
51
+ "setBasicFilter",
52
+ "setDataValidation",
53
+ "sortRange",
54
+ "textToColumns",
55
+ "trimWhitespace",
56
+ "unmergeCells",
57
+ "updateBanding",
58
+ "updateBorders",
59
+ "updateCells",
60
+ "updateChartSpec",
61
+ "updateCommentPost",
62
+ "updateConditionalFormatRule",
63
+ "updateDataSource",
64
+ "updateDeveloperMetadata",
65
+ "updateDimensionGroup",
66
+ "updateDimensionProperties",
67
+ "updateEmbeddedObjectBorder",
68
+ "updateEmbeddedObjectPosition",
69
+ "updateFilterView",
70
+ "updateNamedRange",
71
+ "updateProtectedRange",
72
+ "updateSheetProperties",
73
+ "updateSlicerSpec",
74
+ "updateSpreadsheetProperties",
75
+ "updateTable",
76
+ ];
77
+ export const SHEETS_REFUSED_KINDS = {
78
+ addDataSource: "External data-source creation and execution are outside this connection.",
79
+ updateDataSource: "External data-source configuration and execution are outside this connection.",
80
+ deleteDataSource: "External data-source administration is outside this connection.",
81
+ refreshDataSource: "External data-source execution is outside this connection.",
82
+ cancelDataSourceRefresh: "External data-source execution is outside this connection.",
83
+ insertComment: "Preview comment mutations require separate product review.",
84
+ addCommentReply: "Preview comment mutations require separate product review.",
85
+ updateCommentPost: "Preview comment mutations require separate product review.",
86
+ deleteComment: "Preview comment mutations require separate product review.",
87
+ deleteCommentReply: "Preview comment mutations require separate product review.",
88
+ };
89
+ export const SHEETS_ADMITTED_KINDS = SHEETS_REQUEST_KINDS.filter((kind) => !SHEETS_REFUSED_KINDS[kind]);
90
+ /** Creation and ordinary batch kinds must not smuggle external data-source configuration. */
91
+ export function sheetsExternalDataProblem(body) {
92
+ const stack = [body];
93
+ while (stack.length) {
94
+ const value = stack.pop();
95
+ if (!value || typeof value !== "object")
96
+ continue;
97
+ if (!Array.isArray(value))
98
+ for (const key of ["dataSources", "dataSourceSheetProperties", "dataSourceId"]) {
99
+ if (Object.hasOwn(value, key))
100
+ return "External data-source configuration and execution are outside this connection.";
101
+ }
102
+ stack.push(...Object.values(value));
103
+ }
104
+ return undefined;
105
+ }
@@ -0,0 +1,138 @@
1
+ import { Schema } from "effect";
2
+ import { Integer, isMinChars, isMaxChars } from "../../../http/json-schema.js";
3
+ const optional = (fields) => Schema.Struct(Object.fromEntries(Object.entries(fields).map(([key, value]) => [key, Schema.optionalKey(value)])));
4
+ const str = (description, max, pattern) => Schema.String.check(isMinChars(1), isMaxChars(max), ...(pattern
5
+ ? [
6
+ Schema.makeFilter((value) => pattern.test(value), {
7
+ expected: `matching ${pattern.source}`,
8
+ toJsonSchema: () => ({ pattern: pattern.source }),
9
+ }),
10
+ ]
11
+ : [])).annotate({ description });
12
+ const int = (description, min, max) => Integer.check(Schema.isGreaterThanOrEqualTo(min), Schema.isLessThanOrEqualTo(max)).annotate({ description });
13
+ const id = str("Use a supplied spreadsheet id as is; search Drive only for a name.", 256, /^[A-Za-z0-9_-]+$/);
14
+ const range = str("A1 range or named range; quote sheet titles and double internal apostrophes.", 512, /^[^\r\n]*[^.\r\n][^\r\n]*$/);
15
+ const ranges = Schema.Array(range).check(Schema.isMinLength(1), Schema.isMaxLength(20));
16
+ const cell = Schema.Union([Schema.String.check(isMaxChars(50000)), Schema.Finite, Schema.Boolean, Schema.Null]);
17
+ const rows = Schema.Array(Schema.Array(cell).check(Schema.isMaxLength(18278)))
18
+ .check(Schema.isMinLength(1), Schema.isMaxLength(10000))
19
+ .annotate({
20
+ description: "Rows of scalar cells, at most 50000 cells total. null skips a cell; empty string clears it.",
21
+ });
22
+ const mode = Schema.Literals(["RAW", "USER_ENTERED"]).annotate({
23
+ description: "RAW stores literals; USER_ENTERED parses formulas, dates and numbers as typed.",
24
+ });
25
+ const title = (max) => str("Title on one line.", max, /^[^\r\n]*$/);
26
+ const sheetFields = {
27
+ sheetId: Integer,
28
+ title: Schema.String,
29
+ index: Integer,
30
+ type: Schema.String,
31
+ hidden: Schema.Boolean,
32
+ rowCount: Integer,
33
+ columnCount: Integer,
34
+ frozenRowCount: Integer,
35
+ frozenColumnCount: Integer,
36
+ };
37
+ const updateFields = {
38
+ updatedRange: Schema.String,
39
+ updatedRows: Integer,
40
+ updatedColumns: Integer,
41
+ updatedCells: Integer,
42
+ };
43
+ const cuts = { truncated: Schema.Array(Schema.String) };
44
+ const AnyObject = Schema.Record(Schema.String, Schema.Unknown);
45
+ export const inputs = {
46
+ get_spreadsheet: Schema.Struct({ spreadsheetId: id }),
47
+ get_values: Schema.Struct({
48
+ spreadsheetId: id,
49
+ ranges,
50
+ valueRenderOption: Schema.optionalKey(Schema.Literals(["FORMATTED_VALUE", "UNFORMATTED_VALUE", "FORMULA"])),
51
+ dateTimeRenderOption: Schema.optionalKey(Schema.Literals(["SERIAL_NUMBER", "FORMATTED_STRING"])),
52
+ maxCells: Schema.optionalKey(int("Whole-row content budget; defaults to 2000 cells.", 1, 10000)),
53
+ maxBytes: Schema.optionalKey(int("Whole-page JSON byte budget; defaults to 192 KiB. Above that use a direct call.", 1024, 4194304)),
54
+ maxCellChars: Schema.optionalKey(int("Characters kept per cell; defaults to 5000. Read a cut cell alone with up to 50000.", 1, 50000)),
55
+ cursor: Schema.optionalKey(str("Opaque page.nextCursor; keep spreadsheet, ranges and render options unchanged.", 1024)),
56
+ }),
57
+ update_values: Schema.Struct({ spreadsheetId: id, range, values: rows, valueInputOption: mode }),
58
+ batch_update_values: Schema.Struct({
59
+ spreadsheetId: id,
60
+ data: Schema.Array(Schema.Struct({ range, values: rows })).check(Schema.isMinLength(1), Schema.isMaxLength(100)),
61
+ valueInputOption: mode,
62
+ }),
63
+ append_values: Schema.Struct({ spreadsheetId: id, range, values: rows, valueInputOption: mode }),
64
+ clear_values: Schema.Struct({ spreadsheetId: id, ranges }),
65
+ create_spreadsheet: Schema.Struct({
66
+ title: title(255),
67
+ sheetTitles: Schema.optionalKey(Schema.Array(title(100)).check(Schema.isMinLength(1), Schema.isMaxLength(50), Schema.makeFilter((values) => new Set(values).size === values.length, {
68
+ expected: "unique sheet titles",
69
+ toJsonSchema: () => ({ uniqueItems: true }),
70
+ }))),
71
+ }),
72
+ add_sheet: Schema.Struct({
73
+ spreadsheetId: id,
74
+ title: title(100),
75
+ index: Schema.optionalKey(int("Zero-based tab position; omit for last.", 0, 1000)),
76
+ rowCount: Schema.optionalKey(int("Grid rows.", 1, 1000000)),
77
+ columnCount: Schema.optionalKey(int("Grid columns.", 1, 18278)),
78
+ }),
79
+ batch_update_spreadsheet: Schema.Struct({
80
+ spreadsheetId: id,
81
+ requests: Schema.Array(Schema.Record(Schema.String, AnyObject)
82
+ .annotate({
83
+ description: "One reviewed Sheets Request kind and its object body; details provides nested contracts.",
84
+ })
85
+ .check(Schema.makeFilter((value) => Object.keys(value).length === 1, {
86
+ expected: "exactly one reviewed Sheets request kind",
87
+ toJsonSchema: () => ({ minProperties: 1, maxProperties: 1 }),
88
+ }))).check(Schema.isMinLength(1), Schema.isMaxLength(100)),
89
+ }),
90
+ };
91
+ export const outputs = {
92
+ get_spreadsheet: optional({
93
+ spreadsheetId: Schema.String,
94
+ title: Schema.String,
95
+ url: Schema.String,
96
+ locale: Schema.String,
97
+ timeZone: Schema.String,
98
+ sheets: Schema.Array(optional(sheetFields)),
99
+ namedRanges: Schema.Array(optional({ namedRangeId: Schema.String, name: Schema.String, sheetId: Integer, range: Schema.String })),
100
+ ...cuts,
101
+ }),
102
+ get_values: optional({
103
+ spreadsheetId: Schema.String,
104
+ valueRanges: Schema.Array(optional({
105
+ range: Schema.String,
106
+ values: Schema.Array(Schema.Array(cell)),
107
+ rowOffset: Integer,
108
+ rowCount: Integer,
109
+ })),
110
+ cellCount: Integer,
111
+ page: Schema.Struct({ hasMore: Schema.Boolean, nextCursor: Schema.optionalKey(Schema.String) }),
112
+ ...cuts,
113
+ }),
114
+ update_values: optional({ spreadsheetId: Schema.String, ...updateFields }),
115
+ batch_update_values: optional({
116
+ spreadsheetId: Schema.String,
117
+ totalUpdatedRows: Integer,
118
+ totalUpdatedColumns: Integer,
119
+ totalUpdatedCells: Integer,
120
+ totalUpdatedSheets: Integer,
121
+ updates: Schema.Array(optional(updateFields)),
122
+ }),
123
+ append_values: optional({ spreadsheetId: Schema.String, tableRange: Schema.String, ...updateFields }),
124
+ clear_values: optional({ spreadsheetId: Schema.String, clearedRanges: Schema.Array(Schema.String) }),
125
+ create_spreadsheet: optional({
126
+ spreadsheetId: Schema.String,
127
+ title: Schema.String,
128
+ url: Schema.String,
129
+ sheets: Schema.Array(optional({ sheetId: Integer, title: Schema.String })),
130
+ }),
131
+ add_sheet: optional({ spreadsheetId: Schema.String, ...sheetFields }),
132
+ batch_update_spreadsheet: optional({
133
+ spreadsheetId: Schema.String,
134
+ replies: Schema.Array(AnyObject),
135
+ note: Schema.String,
136
+ ...cuts,
137
+ }),
138
+ };