History

executor v1.5: integrations and connections rework

Rhys Sullivan committed 5 months ago

Commit a30f26b1 parent bec7b7b497 files · +41191 −81846Browse files

Unified · Split

497 files
  1. .gitignore +3 −0
  2. .vscode/settings.json +1 −2
  3. apps/cli/src/daemon-state.test.ts +2 −2
  4. apps/cli/src/daemon.test.ts +54 −1
  5. apps/cli/src/daemon.ts +18 −0
  6. apps/cli/src/main.ts +23 −63
  7. apps/cloud/drizzle.config.ts +1 −1
  8. apps/cloud/drizzle/0000_lame_rage.sql +0 −179
  9. apps/cloud/drizzle/0000_v2_baseline.sql +165 −0
  10. apps/cloud/drizzle/0001_harsh_meltdown.sql +0 −1
  11. apps/cloud/drizzle/0002_fat_white_tiger.sql +0 −1
  12. apps/cloud/drizzle/0003_add_connections.sql +0 −20
  13. apps/cloud/drizzle/0004_openapi_source_bindings.sql +0 −19
  14. apps/cloud/drizzle/0005_drop_connection_kind.sql +0 −1
  15. apps/cloud/drizzle/0006_add_tool_policy.sql +0 −17
  16. apps/cloud/drizzle/0007_military_young_avengers.sql +0 −22
  17. apps/cloud/drizzle/0008_normalize_plugin_secret_refs.sql +0 −388
  18. apps/cloud/drizzle/0009_scoped_credentials_cutover.sql +0 −1116
  19. apps/cloud/drizzle/0010_repair_mcp_connection_binding_scopes.sql +0 −70
  20. apps/cloud/drizzle/0011_repair_openapi_connection_binding_scopes.sql +0 −68
  21. apps/cloud/drizzle/0012_repair_openapi_secret_binding_scopes.sql +0 −73
  22. apps/cloud/drizzle/0013_cleanup_orphan_oauth_rows.sql +0 −23
  23. apps/cloud/drizzle/0014_repair_openapi_oauth_cutover_residue.sql +0 −241
  24. apps/cloud/drizzle/0015_add_credential_binding_secret_scope.sql +0 −2
  25. apps/cloud/drizzle/0016_fumadb_cutover.sql +0 −114
  26. apps/cloud/drizzle/0017_plugin_storage_sources.sql +0 −172
  27. apps/cloud/drizzle/0018_repair_openapi_oauth_authorization_url.sql +0 −9
  28. apps/cloud/drizzle/0019_workos_vault_plugin_storage.sql +0 −28
  29. apps/cloud/drizzle/0020_add_connection_identity_override.sql +0 −1
  30. apps/cloud/drizzle/meta/0000_snapshot.json +584 −593
  31. apps/cloud/drizzle/meta/0001_snapshot.json +0 −1223
  32. apps/cloud/drizzle/meta/0002_snapshot.json +0 −1223
  33. apps/cloud/drizzle/meta/0003_snapshot.json +0 −1365
  34. apps/cloud/drizzle/meta/0004_snapshot.json +0 −1487
  35. apps/cloud/drizzle/meta/0005_snapshot.json +0 −1481
  36. apps/cloud/drizzle/meta/0006_snapshot.json +0 −1563
  37. apps/cloud/drizzle/meta/0007_snapshot.json +0 −1583
  38. apps/cloud/drizzle/meta/0008_snapshot.json +0 −2517
  39. apps/cloud/drizzle/meta/0009_snapshot.json +0 −2468
  40. apps/cloud/drizzle/meta/0016_snapshot.json +0 −2258
  41. apps/cloud/drizzle/meta/_journal.json +2 −142
  42. apps/cloud/scripts/migrate-v1-v2.ts +1206 −0
  43. apps/cloud/src/api.request-scope.node.test.ts +4 −3
  44. apps/cloud/src/api/secrets-api.node.test.ts +115 −97
  45. apps/cloud/src/api/sources-api.node.test.ts +205 −470
  46. apps/cloud/src/api/sources-refresh.node.test.ts +79 −77
  47. apps/cloud/src/api/tenant-isolation.node.test.ts +84 −264
  48. apps/cloud/src/app.ts +2 −1
  49. apps/cloud/src/auth/auth-tool-failures.node.test.ts +50 −19
  50. apps/cloud/src/db/executor-schema.ts +137 −102
  51. apps/cloud/src/db/fumadb-cutover-migration.node.test.ts +0 −126
  52. apps/cloud/src/engine/execution-stack.ts +16 −0
  53. apps/cloud/src/extensions-reachability.test.ts +4 −4
  54. apps/cloud/src/mcp-miniflare.e2e.node.test.ts +10 −12
  55. apps/cloud/src/mcp-session.e2e.node.test.ts +16 −15
  56. apps/cloud/src/mcp/mcp-oauth.node.test.ts +83 −166
  57. apps/cloud/src/mcp/session-durable-object.ts +25 −10
  58. apps/cloud/src/routeTree.gen.ts +62 −61
  59. apps/cloud/src/routes/__root.tsx +9 −8
  60. apps/cloud/src/routes/connections.tsx +0 −6
  61. apps/cloud/src/routes/index.tsx +2 −2
  62. apps/cloud/src/routes/integrations.$namespace.tsx +9 −0
  63. apps/cloud/src/routes/integrations.add.$pluginKey.tsx +5 −3
  64. apps/cloud/src/routes/oauth-apps.tsx +6 −0
  65. apps/cloud/src/routes/org.tsx +7 −34
  66. apps/cloud/src/routes/secrets.tsx +7 −24
  67. apps/cloud/src/routes/sources.$namespace.tsx +0 −9
  68. apps/cloud/src/secrets-isolation.e2e.node.test.ts +108 −159
  69. apps/cloud/src/testing/api-harness.ts +26 −27
  70. apps/cloud/src/web/shell.tsx +1 −1
  71. apps/desktop/src/main/index.ts +37 −13
  72. apps/host-cloudflare/src/worker.e2e.node.test.ts +48 −20
  73. apps/host-cloudflare/web/routeTree.gen.ts +0 −21
  74. apps/host-cloudflare/web/routes/__root.tsx +18 −6
  75. apps/host-cloudflare/web/routes/connections.tsx +0 −6
  76. apps/host-cloudflare/web/routes/index.tsx +2 −2
  77. apps/host-cloudflare/web/routes/sources.$namespace.tsx +2 −2
  78. apps/host-cloudflare/web/routes/sources.add.$pluginKey.tsx +2 −2
  79. apps/host-selfhost/src/admin/invites.node.test.ts +8 −4
  80. apps/host-selfhost/src/auth/better-auth.test.ts +22 −15
  81. apps/host-selfhost/src/boot.test.ts +57 −7
  82. apps/host-selfhost/src/multi-user.test.ts +112 −33
  83. apps/host-selfhost/src/scope-isolation.test.ts +95 −25
  84. apps/host-selfhost/src/secrets-integration.test.ts +69 −32
  85. apps/host-selfhost/src/sources-mcp.test.ts +23 −12
  86. apps/host-selfhost/src/sources.test.ts +26 −12
  87. apps/host-selfhost/web/routeTree.gen.ts +0 −21
  88. apps/host-selfhost/web/routes/__root.tsx +18 −6
  89. apps/host-selfhost/web/routes/connections.tsx +0 −6
  90. apps/host-selfhost/web/routes/index.tsx +2 −2
  91. apps/host-selfhost/web/routes/sources.$namespace.tsx +2 −2
  92. apps/host-selfhost/web/routes/sources.add.$pluginKey.tsx +4 −2
  93. apps/local/drizzle/0000_overconfident_sharon_carter.sql +0 −180
  94. apps/local/drizzle/0000_v2_baseline.sql +140 −0
  95. apps/local/drizzle/0001_sour_catseye.sql +0 −1
  96. apps/local/drizzle/0002_lively_sue_storm.sql +0 −20
  97. apps/local/drizzle/0003_little_silk_fever.sql +0 −16
  98. apps/local/drizzle/0004_add_tool_policy.sql +0 −17
  99. apps/local/drizzle/0005_repair_mcp_oauth_session.sql +0 −10
  100. apps/local/drizzle/0006_neat_terror.sql +0 −23
  101. apps/local/drizzle/0007_normalize_plugin_secret_refs.sql +0 −579
  102. apps/local/drizzle/0008_scoped_credentials_cutover.sql +0 −1220
  103. apps/local/drizzle/0009_repair_openapi_oauth_cutover_residue.sql +0 −253
  104. apps/local/drizzle/0010_add_credential_binding_secret_scope.sql +0 −2
  105. apps/local/drizzle/0011_plugin_storage_sources.sql +0 −215
  106. apps/local/drizzle/0012_connection_identity_override.sql +0 −1
  107. apps/local/drizzle/meta/0000_snapshot.json +381 −527
  108. apps/local/drizzle/meta/0001_snapshot.json +0 −1045
  109. apps/local/drizzle/meta/0002_snapshot.json +0 −1167
  110. apps/local/drizzle/meta/0003_snapshot.json +0 −1247
  111. apps/local/drizzle/meta/0004_snapshot.json +0 −1317
  112. apps/local/drizzle/meta/0005_snapshot.json +0 −1317
  113. apps/local/drizzle/meta/0006_snapshot.json +0 −1285
  114. apps/local/drizzle/meta/0007_snapshot.json +0 −2206
  115. apps/local/drizzle/meta/0008_snapshot.json +0 −2242
  116. apps/local/drizzle/meta/_journal.json +2 −86
  117. apps/local/src/auth-tool-failures.test.ts +63 −21
  118. apps/local/src/db/db-upgrade.test.ts +0 −255
  119. apps/local/src/db/db-upgrade.ts +0 −117
  120. apps/local/src/db/executor-schema.ts +155 −217
  121. apps/local/src/db/google-discovery-openapi-migration.test.ts +0 −350
  122. apps/local/src/db/google-discovery-openapi-migration.ts +0 −594
  123. apps/local/src/db/libsql.ts +13 −36
  124. apps/local/src/db/migrate-google-discovery-bindings.test.ts +0 −212
  125. apps/local/src/db/migrate-graphql-bindings.test.ts +0 −322
  126. apps/local/src/db/migrate-mcp-bindings.test.ts +0 −276
  127. apps/local/src/db/migrate-oauth-connections.test.ts +0 −328
  128. apps/local/src/db/migrate-openapi-bindings.test.ts +0 −469
  129. apps/local/src/db/sqlite-fumadb.ts +9 −3
  130. apps/local/src/db/sqlite-import.test.ts +0 −600
  131. apps/local/src/db/sqlite-import.ts +0 −252
  132. apps/local/src/db/v1-v2-migration.test.ts +889 −0
  133. apps/local/src/db/v1-v2-migration.ts +788 −0
  134. apps/local/src/executor.ts +55 −596
  135. apps/local/src/mcp-browser-resume.test.ts +11 −10
  136. apps/local/src/mcp-oauth.test.ts +69 −55
  137. apps/local/src/testing/libsql-test-db.ts +0 −100
  138. apps/local/src/testing/pre-0007-schema.ts +0 −140
  139. apps/local/vite.config.ts +1 −1
  140. bun.lock +56 −0
  141. docs/sdk/quickstart.mdx +15 −6
  142. docs/snippets/sdk/quickstart/add-integration.mdx +26 −0
  143. docs/snippets/sdk/quickstart/add-source.mdx +0 −12
  144. docs/snippets/sdk/quickstart/create-connection.mdx +17 −0
  145. docs/snippets/sdk/quickstart/create-executor.mdx +16 −1
  146. docs/snippets/sdk/quickstart/inspect-schema.mdx +2 −1
  147. docs/snippets/sdk/quickstart/list-tools.mdx +2 −2
  148. examples/all-plugins/src/main.ts +184 −123
  149. examples/docs-sdk-quickstart/package.json +2 −1
  150. examples/docs-sdk-quickstart/src/main.ts +55 −11
  151. examples/promise-sdk/src/main.ts +114 −42
  152. packages/app/src/routeTree.gen.ts +39 −59
  153. packages/app/src/routes/__root.tsx +1 −47
  154. packages/app/src/routes/connections.tsx +0 −6
  155. packages/app/src/routes/index.tsx +2 −2
  156. packages/app/src/routes/integrations.$namespace.tsx +9 −0
  157. packages/app/src/routes/integrations.add.$pluginKey.tsx +3 −3
  158. packages/app/src/routes/secrets.tsx +3 −20
  159. packages/app/src/routes/sources.$namespace.tsx +0 −9
  160. packages/app/src/web/shell.tsx +34 −69
  161. packages/core/api/src/api.ts +4 −6
  162. packages/core/api/src/client.ts +2 −3
  163. packages/core/api/src/connections/api.ts +117 −50
  164. packages/core/api/src/handlers/connection-identity.test.ts +0 −348
  165. packages/core/api/src/handlers/connection-identity.ts +0 −315
  166. packages/core/api/src/handlers/connections.ts +65 −40
  167. packages/core/api/src/handlers/index.ts +6 −9
  168. packages/core/api/src/handlers/integrations.ts +80 −0
  169. packages/core/api/src/handlers/oauth.ts +110 −93
  170. packages/core/api/src/handlers/policies.ts +10 −7
  171. packages/core/api/src/handlers/providers.ts +28 −0
  172. packages/core/api/src/handlers/scope.ts +0 −31
  173. packages/core/api/src/handlers/secrets.ts +0 −85
  174. packages/core/api/src/handlers/sources.ts +0 −142
  175. packages/core/api/src/handlers/tools.ts +26 −19
  176. packages/core/api/src/index.ts +2 −3
  177. packages/core/api/src/integrations/api.ts +128 −0
  178. packages/core/api/src/integrations/integrations-auth-methods.test.ts +169 −0
  179. packages/core/api/src/oauth-popup.ts +10 −1
  180. packages/core/api/src/oauth/api.ts +206 −87
  181. packages/core/api/src/policies/api.ts +22 −12
  182. packages/core/api/src/providers/api.ts +48 −0
  183. packages/core/api/src/scope/api.ts +0 −31
  184. packages/core/api/src/scoped-targets.test.ts +131 −166
  185. packages/core/api/src/secrets/api.ts +0 −101
  186. packages/core/api/src/server.ts +5 −3
  187. packages/core/api/src/server/execution-stack-middleware.ts +36 −1
  188. packages/core/api/src/server/fixed-execution-middleware.ts +8 −8
  189. packages/core/api/src/server/oauth-origin.test.ts +42 −0
  190. packages/core/api/src/server/scoped-executor.ts +88 −19
  191. packages/core/api/src/sources/api.ts +0 −175
  192. packages/core/api/src/tools/api.ts +49 −28
  193. packages/core/cli/src/commands/schema.test.ts +2 −2
  194. packages/core/config/src/schema.ts +4 −2
  195. packages/core/execution/src/description.test.ts +55 −69
  196. packages/core/execution/src/description.ts +30 −31
  197. packages/core/execution/src/engine.ts +1 −1
  198. packages/core/execution/src/promise.ts +69 −93
  199. packages/core/execution/src/tool-invoker.test.ts +420 −269
  200. packages/core/execution/src/tool-invoker.ts +121 −71
  201. packages/core/sdk/package.json +8 −8
  202. packages/core/sdk/src/blob.test.ts +37 −32
  203. packages/core/sdk/src/blob.ts +63 −53
  204. packages/core/sdk/src/client.ts +46 −22
  205. packages/core/sdk/src/connection.ts +90 −0
  206. packages/core/sdk/src/connections.test.ts +189 −1020
  207. packages/core/sdk/src/connections.ts +0 −201
  208. packages/core/sdk/src/core-schema.ts +228 −222
  209. packages/core/sdk/src/core-tools.ts +539 −813
  210. packages/core/sdk/src/credential-bindings.test.ts +0 −847
  211. packages/core/sdk/src/credential-bindings.ts +0 −242
  212. packages/core/sdk/src/elicitation.ts +24 −28
  213. packages/core/sdk/src/errors.ts +80 −134
  214. packages/core/sdk/src/executor.test.ts +344 −755
  215. packages/core/sdk/src/executor.ts +2000 −3678
  216. packages/core/sdk/src/http-source.ts +0 −210
  217. packages/core/sdk/src/ids.ts +66 −10
  218. packages/core/sdk/src/index.ts +121 −172
  219. packages/core/sdk/src/integration.ts +97 −0
  220. packages/core/sdk/src/migration-spec.test.ts +1199 −0
  221. packages/core/sdk/src/migration-spec.ts +1618 −0
  222. packages/core/sdk/src/oauth-client.ts +203 −0
  223. packages/core/sdk/src/oauth-discovery.ts +4 −0
  224. packages/core/sdk/src/oauth-flow.test.ts +432 −0
  225. packages/core/sdk/src/oauth-helpers.test.ts +17 −3
  226. packages/core/sdk/src/oauth-helpers.ts +68 −3
  227. packages/core/sdk/src/oauth-list-clients.test.ts +126 −0
  228. packages/core/sdk/src/oauth-register-dynamic.test.ts +128 −0
  229. packages/core/sdk/src/oauth-remove-client.test.ts +178 −0
  230. packages/core/sdk/src/oauth-scope-union.test.ts +251 −0
  231. packages/core/sdk/src/oauth-service.ts +754 −1309
  232. packages/core/sdk/src/oauth.ts +31 −365
  233. packages/core/sdk/src/owner-policy.ts +135 −0
  234. packages/core/sdk/src/plugin-storage.test.ts +26 −53
  235. packages/core/sdk/src/plugin-storage.ts +6 −6
  236. packages/core/sdk/src/plugin.ts +218 −445
  237. packages/core/sdk/src/policies.test.ts +188 −299
  238. packages/core/sdk/src/policies.ts +66 −94
  239. packages/core/sdk/src/promise-executor.ts +26 −29
  240. packages/core/sdk/src/promise.test.ts +73 −12
  241. packages/core/sdk/src/promise.ts +33 −30
  242. packages/core/sdk/src/provider.ts +35 −0
  243. packages/core/sdk/src/scope-policy.test.ts +0 −126
  244. packages/core/sdk/src/scope-policy.ts +0 −150
  245. packages/core/sdk/src/scope.test.ts +0 −76
  246. packages/core/sdk/src/scope.ts +0 −96
  247. packages/core/sdk/src/secret-backed-value.ts +0 −69
  248. packages/core/sdk/src/secrets.ts +0 −106
  249. packages/core/sdk/src/shared.ts +103 −84
  250. packages/core/sdk/src/test-config.ts +62 −39
  251. packages/core/sdk/src/testing.test.ts +19 −259
  252. packages/core/sdk/src/testing.ts +1 −1
  253. packages/core/sdk/src/tool.ts +58 −0
  254. packages/core/sdk/src/tools-list-merge.test.ts +205 −0
  255. packages/core/sdk/src/types.ts +19 −99
  256. packages/core/sdk/src/usage-visibility.test.ts +0 −75
  257. packages/core/sdk/src/usages.ts +0 −43
  258. packages/core/sdk/tsup.config.ts +1 −1
  259. packages/hosts/mcp/src/tool-server.test.ts +9 −9
  260. packages/hosts/mcp/src/tool-server.ts +1 −1
  261. packages/kernel/runtime-dynamic-worker/src/integration.test.ts +58 −40
  262. packages/plugins/desktop-settings/src/server.test.ts +7 −8
  263. packages/plugins/encrypted-secrets/src/index.test.ts +0 −0
  264. packages/plugins/encrypted-secrets/src/index.ts +39 −36
  265. packages/plugins/file-secrets/src/index.ts +46 −65
  266. packages/plugins/file-secrets/src/promise.ts +3 −4
  267. packages/plugins/graphql-greenfield/CHANGELOG.md +6 −0
  268. packages/plugins/graphql-greenfield/package.json +56 −0
  269. packages/plugins/graphql-greenfield/src/api/group.ts +83 −0
  270. packages/plugins/graphql-greenfield/src/api/handlers.ts +70 −0
  271. packages/plugins/graphql-greenfield/src/api/index.ts +20 −0
  272. packages/plugins/graphql-greenfield/src/promise.ts +7 −0
  273. packages/plugins/graphql-greenfield/src/sdk/errors.ts +40 −0
  274. packages/plugins/graphql-greenfield/src/sdk/extract.ts +252 −0
  275. packages/plugins/graphql-greenfield/src/sdk/index.ts +31 −0
  276. packages/plugins/graphql-greenfield/src/sdk/introspect.ts +343 −0
  277. packages/plugins/graphql-greenfield/src/sdk/invoke.ts +147 −0
  278. packages/plugins/graphql-greenfield/src/sdk/plugin.test.ts +512 −0
  279. packages/plugins/graphql-greenfield/src/sdk/plugin.ts +730 −0
  280. packages/plugins/graphql-greenfield/src/sdk/presets.ts +55 −0
  281. packages/plugins/graphql-greenfield/src/sdk/types.ts +147 −0
  282. packages/plugins/graphql-greenfield/src/testing/index.ts +258 −0
  283. packages/plugins/graphql-greenfield/tsconfig.json +26 −0
  284. packages/plugins/graphql-greenfield/tsup.config.ts +14 −0
  285. packages/plugins/graphql-greenfield/vitest.config.ts +13 −0
  286. packages/plugins/graphql/src/api/group.ts +69 −66
  287. packages/plugins/graphql/src/api/handlers.test.ts +205 −0
  288. packages/plugins/graphql/src/api/handlers.ts +41 −26
  289. packages/plugins/graphql/src/promise.ts +2 −3
  290. packages/plugins/graphql/src/react/AddGraphqlSource.tsx +110 −213
  291. packages/plugins/graphql/src/react/EditGraphqlSource.tsx +188 −241
  292. packages/plugins/graphql/src/react/GraphqlAccountsPanel.tsx +81 −0
  293. packages/plugins/graphql/src/react/GraphqlSignInButton.tsx +86 −62
  294. packages/plugins/graphql/src/react/GraphqlSourceFields.tsx +5 −5
  295. packages/plugins/graphql/src/react/GraphqlSourceSummary.tsx +45 −56
  296. packages/plugins/graphql/src/react/atoms.ts +55 −38
  297. packages/plugins/graphql/src/react/auth-method-config.test.ts +98 −0
  298. packages/plugins/graphql/src/react/auth-method-config.ts +84 −0
  299. packages/plugins/graphql/src/react/defaults.test.ts +25 −8
  300. packages/plugins/graphql/src/react/defaults.ts +33 −5
  301. packages/plugins/graphql/src/react/index.ts +2 −2
  302. packages/plugins/graphql/src/react/plugin-client.tsx +2 −2
  303. packages/plugins/graphql/src/react/source-plugin.ts +5 −2
  304. packages/plugins/graphql/src/sdk/configure.test.ts +150 −0
  305. packages/plugins/graphql/src/sdk/describe-auth-methods.test.ts +134 −0
  306. packages/plugins/graphql/src/sdk/errors.ts +7 −5
  307. packages/plugins/graphql/src/sdk/index.ts +14 −20
  308. packages/plugins/graphql/src/sdk/invoke.ts +1 −36
  309. packages/plugins/graphql/src/sdk/plugin.test.ts +321 −1175
  310. packages/plugins/graphql/src/sdk/plugin.ts +641 −953
  311. packages/plugins/graphql/src/sdk/store.ts +50 −190
  312. packages/plugins/graphql/src/sdk/types.ts +63 −60
  313. packages/plugins/http-source/CHANGELOG.md +6 −0
  314. packages/plugins/http-source/package.json +79 −0
  315. packages/plugins/http-source/src/index.ts +1 −0
  316. packages/plugins/http-source/src/react/index.ts +25 −0
  317. packages/plugins/http-source/src/sdk/configure.test.ts +223 −0
  318. packages/plugins/http-source/src/sdk/errors.ts +18 −0
  319. packages/plugins/http-source/src/sdk/index.ts +33 −0
  320. packages/plugins/http-source/src/sdk/plugin.test.ts +209 −0
  321. packages/plugins/http-source/src/sdk/plugin.ts +404 −0
  322. packages/plugins/http-source/src/sdk/request.test.ts +142 −0
  323. packages/plugins/http-source/src/sdk/request.ts +134 −0
  324. packages/plugins/http-source/src/sdk/template.test.ts +113 −0
  325. packages/plugins/http-source/src/sdk/template.ts +106 −0
  326. packages/plugins/http-source/src/sdk/types.ts +97 −0
  327. packages/plugins/http-source/tsconfig.json +23 −0
  328. packages/plugins/http-source/tsup.config.ts +14 −0
  329. packages/plugins/http-source/vitest.config.ts +7 −0
  330. packages/plugins/keychain/src/index.test.ts +56 −52
  331. packages/plugins/keychain/src/index.ts +16 −27
  332. packages/plugins/keychain/src/promise.ts +2 −2
  333. packages/plugins/keychain/src/provider.ts +24 −17
  334. packages/plugins/mcp/src/api/group.ts +56 −81
  335. packages/plugins/mcp/src/api/handlers.test.ts +5 −6
  336. packages/plugins/mcp/src/api/handlers.ts +36 −60
  337. packages/plugins/mcp/src/promise.ts +4 −4
  338. packages/plugins/mcp/src/react/AddMcpSource.tsx +174 −422
  339. packages/plugins/mcp/src/react/EditMcpSource.tsx +169 −221
  340. packages/plugins/mcp/src/react/McpRemoteSourceFields.tsx +7 −7
  341. packages/plugins/mcp/src/react/McpSignInButton.tsx +65 −73
  342. packages/plugins/mcp/src/react/McpSourceSummary.tsx +48 −92
  343. packages/plugins/mcp/src/react/atoms.ts +13 −44
  344. packages/plugins/mcp/src/react/auth-method-config.test.ts +65 −0
  345. packages/plugins/mcp/src/react/auth-method-config.ts +34 −0
  346. packages/plugins/mcp/src/react/index.ts +3 −3
  347. packages/plugins/mcp/src/react/plugin-client.tsx +2 −2
  348. packages/plugins/mcp/src/react/source-plugin.tsx +8 −6
  349. packages/plugins/mcp/src/sdk/binding-store.ts +0 −224
  350. packages/plugins/mcp/src/sdk/connection-pool.test.ts +0 −193
  351. packages/plugins/mcp/src/sdk/connection.ts +4 −4
  352. packages/plugins/mcp/src/sdk/cross-user-isolation.test.ts +0 −131
  353. packages/plugins/mcp/src/sdk/describe-auth-methods.test.ts +103 −0
  354. packages/plugins/mcp/src/sdk/elicitation.test.ts +77 −113
  355. packages/plugins/mcp/src/sdk/errors.ts +1 −17
  356. packages/plugins/mcp/src/sdk/index.ts +24 −16
  357. packages/plugins/mcp/src/sdk/invoke.ts +36 −127
  358. packages/plugins/mcp/src/sdk/owner-isolation.test.ts +118 −0
  359. packages/plugins/mcp/src/sdk/per-user-auth-isolation.test.ts +0 −328
  360. packages/plugins/mcp/src/sdk/plugin.test.ts +87 −895
  361. packages/plugins/mcp/src/sdk/plugin.ts +476 −1908
  362. packages/plugins/mcp/src/sdk/stored-source.ts +0 −19
  363. packages/plugins/mcp/src/sdk/types.ts +59 −73
  364. packages/plugins/mcp/vitest.config.ts +3 −1
  365. packages/plugins/onepassword/src/api/group.ts +26 −27
  366. packages/plugins/onepassword/src/api/handlers.ts +5 −5
  367. packages/plugins/onepassword/src/react/OnePasswordSettings.tsx +66 −51
  368. packages/plugins/onepassword/src/react/atoms.ts +16 −17
  369. packages/plugins/onepassword/src/sdk/index.ts +3 −0
  370. packages/plugins/onepassword/src/sdk/plugin.test.ts +58 −30
  371. packages/plugins/onepassword/src/sdk/plugin.ts +92 −122
  372. packages/plugins/onepassword/src/sdk/types.ts +39 −2
  373. packages/plugins/openapi/src/api/group.ts +95 −109
  374. packages/plugins/openapi/src/api/handlers.ts +70 −54
  375. packages/plugins/openapi/src/promise.ts +12 −2
  376. packages/plugins/openapi/src/react/AddOpenApiSource.tsx +501 −2309
  377. packages/plugins/openapi/src/react/EditOpenApiSource.tsx +66 −941
  378. packages/plugins/openapi/src/react/GoogleProductPicker.tsx +366 −0
  379. packages/plugins/openapi/src/react/OpenApiAccountsPanel.tsx +120 −0
  380. packages/plugins/openapi/src/react/OpenApiSourceDetailsFields.tsx +7 −7
  381. packages/plugins/openapi/src/react/OpenApiSourceSummary.tsx +25 −176
  382. packages/plugins/openapi/src/react/atoms.ts +27 −45
  383. packages/plugins/openapi/src/react/auth-method-config.test.ts +111 −0
  384. packages/plugins/openapi/src/react/auth-method-config.ts +222 −0
  385. packages/plugins/openapi/src/react/index.ts +11 −2
  386. packages/plugins/openapi/src/react/plugin-client.tsx +2 −2
  387. packages/plugins/openapi/src/react/source-plugin.ts +5 −2
  388. packages/plugins/openapi/src/sdk/__snapshots__/real-specs.test.ts.snap +2 −2
  389. packages/plugins/openapi/src/sdk/client-credentials-oauth.test.ts +18 −315
  390. packages/plugins/openapi/src/sdk/config.ts +145 −0
  391. packages/plugins/openapi/src/sdk/configure.test.ts +251 −0
  392. packages/plugins/openapi/src/sdk/credential-status.test.ts +0 −137
  393. packages/plugins/openapi/src/sdk/credential-status.ts +0 −112
  394. packages/plugins/openapi/src/sdk/describe-auth-methods.test.ts +97 −0
  395. packages/plugins/openapi/src/sdk/errors.ts +8 −5
  396. packages/plugins/openapi/src/sdk/form-urlencoded-body.test.ts +11 −41
  397. packages/plugins/openapi/src/sdk/google-bundle.test.ts +270 −0
  398. packages/plugins/openapi/src/sdk/google-discovery.test.ts +164 −2
  399. packages/plugins/openapi/src/sdk/google-discovery.ts +60 −37
  400. packages/plugins/openapi/src/sdk/google-presets.ts +78 −0
  401. packages/plugins/openapi/src/sdk/google-product-picker-scopes.test.ts +122 −0
  402. packages/plugins/openapi/src/sdk/index.ts +17 −10
  403. packages/plugins/openapi/src/sdk/invoke.ts +0 −68
  404. packages/plugins/openapi/src/sdk/multi-scope-bearer.test.ts +72 −952
  405. packages/plugins/openapi/src/sdk/multi-scope-oauth.test.ts +18 −733
  406. packages/plugins/openapi/src/sdk/non-json-body.test.ts +63 −219
  407. packages/plugins/openapi/src/sdk/oauth-refresh.test.ts +23 −376
  408. packages/plugins/openapi/src/sdk/plugin.test.ts +285 −1348
  409. packages/plugins/openapi/src/sdk/plugin.ts +646 −1406
  410. packages/plugins/openapi/src/sdk/real-specs.test.ts +31 −21
  411. packages/plugins/openapi/src/sdk/source-contracts.ts +0 −58
  412. packages/plugins/openapi/src/sdk/store.ts +61 −276
  413. packages/plugins/openapi/src/sdk/types.ts +39 −59
  414. packages/plugins/openapi/src/sdk/upstream-failures.test.ts +42 −83
  415. packages/plugins/openapi/src/sdk/usage-scope-isolation.test.ts +22 −197
  416. packages/plugins/openapi/src/testing/index.ts +105 −44
  417. packages/plugins/openapi/vitest.config.ts +4 −1
  418. packages/plugins/workos-vault/src/sdk/index.ts +2 −4
  419. packages/plugins/workos-vault/src/sdk/plugin.ts +13 −21
  420. packages/plugins/workos-vault/src/sdk/secret-store.test.ts +437 −341
  421. packages/plugins/workos-vault/src/sdk/secret-store.ts +200 −122
  422. packages/react/package.json +1 −0
  423. packages/react/src/api/atoms.tsx +303 −195
  424. packages/react/src/api/oauth-popup.ts +25 −0
  425. packages/react/src/api/provider.tsx +4 −22
  426. packages/react/src/api/reactivity-keys.tsx +19 −20
  427. packages/react/src/api/scope-context.tsx +39 −87
  428. packages/react/src/components/accounts-section.tsx +352 −0
  429. packages/react/src/components/add-account-modal.test.ts +324 −0
  430. packages/react/src/components/add-account-modal.tsx +1197 −0
  431. packages/react/src/components/add-custom-method-modal.tsx +128 −0
  432. packages/react/src/components/auth-template-editor.test.ts +46 −0
  433. packages/react/src/components/auth-template-editor.tsx +216 −0
  434. packages/react/src/components/command-palette.tsx +34 −41
  435. packages/react/src/components/integration-account-badge.tsx +18 −0
  436. packages/react/src/components/integration-favicon.test.tsx +16 −12
  437. packages/react/src/components/integration-favicon.tsx +9 −9
  438. packages/react/src/components/integration-icon-with-account.tsx +20 −0
  439. packages/react/src/components/json-schema-form.test.ts +150 −0
  440. packages/react/src/components/json-schema-form.tsx +715 −0
  441. packages/react/src/components/mcp-install-card.tsx +0 −3
  442. packages/react/src/components/oauth-client-form.tsx +452 −0
  443. packages/react/src/components/placement-editor.tsx +102 −0
  444. packages/react/src/components/source-account-badge.tsx +0 −40
  445. packages/react/src/components/source-icon-with-account.tsx +0 −27
  446. packages/react/src/components/tool-detail.tsx +118 −19
  447. packages/react/src/components/tool-run-panel.test.ts +73 −0
  448. packages/react/src/components/tool-run-panel.tsx +400 −0
  449. packages/react/src/components/tool-tree.test.ts +109 −0
  450. packages/react/src/components/tool-tree.tsx +224 −73
  451. packages/react/src/hooks/use-owner.ts +1 −0
  452. packages/react/src/hooks/use-policy-actions.ts +35 −22
  453. packages/react/src/hooks/use-scope.ts +0 −1
  454. packages/react/src/lib/auth-placements.test.ts +92 −0
  455. packages/react/src/lib/auth-placements.tsx +185 −0
  456. packages/react/src/lib/policy-pattern.ts +31 −0
  457. packages/react/src/multiplayer/shell.tsx +31 −28
  458. packages/react/src/pages/connections.tsx +0 −494
  459. packages/react/src/pages/integration-add.tsx +13 −9
  460. packages/react/src/pages/integration-detail.tsx +641 −0
  461. packages/react/src/pages/integrations.tsx +74 −95
  462. packages/react/src/pages/oauth-apps.test.ts +117 −0
  463. packages/react/src/pages/oauth-apps.tsx +488 −0
  464. packages/react/src/pages/org.tsx +31 −8
  465. packages/react/src/pages/policies.tsx +109 −138
  466. packages/react/src/pages/secrets.test.ts +0 −18
  467. packages/react/src/pages/secrets.tsx +51 −401
  468. packages/react/src/pages/source-detail.tsx +0 −337
  469. packages/react/src/pages/tools.tsx +57 −20
  470. packages/react/src/plugins/credential-bindings.test.ts +0 −58
  471. packages/react/src/plugins/credential-bindings.tsx +0 −84
  472. packages/react/src/plugins/credential-slot-bindings.tsx +0 −195
  473. packages/react/src/plugins/credential-target-scope.test.ts +40 −34
  474. packages/react/src/plugins/credential-target-scope.tsx +88 −84
  475. packages/react/src/plugins/headers-list.tsx +0 −333
  476. packages/react/src/plugins/http-credentials.test.ts +0 −64
  477. packages/react/src/plugins/http-credentials.tsx +0 −430
  478. packages/react/src/plugins/integration-credential-status.tsx +39 −0
  479. packages/react/src/plugins/integration-identity.test.ts +6 −6
  480. packages/react/src/plugins/integration-identity.tsx +13 −11
  481. packages/react/src/plugins/oauth-reconnect.test.ts +97 −0
  482. packages/react/src/plugins/oauth-reconnect.ts +100 −0
  483. packages/react/src/plugins/oauth-sign-in.tsx +67 −159
  484. packages/react/src/plugins/secret-credential-scope.ts +0 −40
  485. packages/react/src/plugins/secret-form.tsx +37 −55
  486. packages/react/src/plugins/secret-header-auth.test.ts +0 −90
  487. packages/react/src/plugins/secret-header-auth.tsx +0 −598
  488. packages/react/src/plugins/secret-picker.tsx +35 −25
  489. packages/react/src/plugins/source-credential-bindings.tsx +0 −158
  490. packages/react/src/plugins/source-credential-status-core.ts +0 −79
  491. packages/react/src/plugins/source-credential-status.test.ts +0 −88
  492. packages/react/src/plugins/source-credential-status.tsx +0 −69
  493. packages/react/src/plugins/source-oauth-connection.test.ts +0 −49
  494. packages/react/src/plugins/source-oauth-connection.tsx +0 −140
  495. packages/react/src/plugins/use-effective-oauth-client.test.ts +117 −0
  496. packages/react/src/plugins/use-effective-oauth-client.tsx +194 −0
  497. packages/react/src/plugins/use-secret-picker-secrets.tsx +16 −15
.gitignore+3−0
@@ -100,3 +100,6 @@ LEARNINGS.md · 99 unmodified lines
100 100
101# Pi coding agent101# Pi coding agent
102.pi/102.pi/
103
104# Throwaway UX prototype (not part of the app)
105ux-demo/
.vscode/settings.json+1−2
@@ -2,6 +2,5 @@ · 1 unmodified line
2 "typescript.tsdk": "./node_modules/typescript/lib",2 "typescript.tsdk": "./node_modules/typescript/lib",
3 "typescript.enablePromptUseWorkspaceTsdk": true,3 "typescript.enablePromptUseWorkspaceTsdk": true,
4 "typescript.native-preview.tsdk": "node_modules/@typescript/native-preview",4 "typescript.native-preview.tsdk": "node_modules/@typescript/native-preview",
5 "typescript.experimental.useTsgo": true,5 "typescript.experimental.useTsgo": false
6 "js/ts.experimental.useTsgo": true
7}6}
apps/cli/src/daemon-state.test.ts+2−2
@@ -2,7 +2,7 @@ import { afterEach, describe, expect, it } from "@effect/vitest"; · 1 unmodified line
2import { BunServices } from "@effect/platform-bun";2import { BunServices } from "@effect/platform-bun";
3import { mkdtempSync, rmSync } from "node:fs";3import { mkdtempSync, rmSync } from "node:fs";
4import { tmpdir } from "node:os";4import { tmpdir } from "node:os";
5import { join } from "node:path";5import { join, resolve } from "node:path";
6import * as Effect from "effect/Effect";6import * as Effect from "effect/Effect";
7 7
8import {8import {
@@ -44,7 +44,7 @@ describe("daemon host and scope identity", () => { · 35 unmodified lines
44 process.chdir(workspace);44 process.chdir(workspace);
45 process.env.EXECUTOR_SCOPE_DIR = "executor.jsonc";45 process.env.EXECUTOR_SCOPE_DIR = "executor.jsonc";
46 46
47 expect(currentDaemonScopeId()).toBe(`scope:${join(workspace, "executor.jsonc")}`);47 expect(currentDaemonScopeId()).toBe(`scope:${resolve("executor.jsonc")}`);
48 } finally {48 } finally {
49 rmSync(workspace, { recursive: true, force: true });49 rmSync(workspace, { recursive: true, force: true });
50 }50 }
apps/cli/src/daemon.test.ts+54−1
@@ -1,6 +1,9 @@
1import { describe, expect, it } from "@effect/vitest";1import { describe, expect, it } from "@effect/vitest";
2import { createServer, type Server } from "node:http";
3import type { AddressInfo } from "node:net";
4import * as Effect from "effect/Effect";
2 5
3import { canAutoStartLocalDaemonForHost } from "./daemon";6import { canAutoStartLocalDaemonForHost, isExecutorServerReachable } from "./daemon";
4 7
5describe("canAutoStartLocalDaemonForHost", () => {8describe("canAutoStartLocalDaemonForHost", () => {
6 it("allows loopback hosts", () => {9 it("allows loopback hosts", () => {
@@ -14,3 +17,53 @@ describe("canAutoStartLocalDaemonForHost", () => { · 7 unmodified lines
14 expect(canAutoStartLocalDaemonForHost("::")).toBe(false);17 expect(canAutoStartLocalDaemonForHost("::")).toBe(false);
15 });18 });
16});19});
20
21describe("isExecutorServerReachable", () => {
22 it.effect("checks the v1.5 API surface instead of the removed scope endpoint", () =>
23 Effect.gen(function* () {
24 const server = yield* Effect.acquireRelease(
25 Effect.tryPromise(
26 () =>
27 new Promise<{ server: Server; port: number }>((resolve, reject) => {
28 const server = createServer((request, response) => {
29 const url = new URL(request.url ?? "/", "http://127.0.0.1");
30 if (url.pathname === "/api/integrations") {
31 response.writeHead(200, { "content-type": "application/json" });
32 response.end("[]");
33 return;
34 }
35 response.writeHead(404);
36 response.end();
37 });
38 const onError = (error: Error) => reject(error);
39 server.once("error", onError);
40 server.listen(0, "127.0.0.1", () => {
41 server.off("error", onError);
42 const address = server.address() as AddressInfo;
43 resolve({ server, port: address.port });
44 });
45 }),
46 ),
47 ({ server }) =>
48 Effect.tryPromise(
49 () =>
50 new Promise<void>((resolve) => {
51 server.close(() => resolve());
52 }),
53 ),
54 );
55
56 const legacyScopeStatus = yield* Effect.tryPromise(() =>
57 fetch(`http://127.0.0.1:${server.port}/api/scope`),
58 ).pipe(Effect.map((response) => response.status));
59
60 expect(legacyScopeStatus).toBe(404);
61
62 const reachable = yield* isExecutorServerReachable({
63 baseUrl: `http://127.0.0.1:${server.port}`,
64 });
65
66 expect(reachable).toBe(true);
67 }),
68 );
69});
apps/cli/src/daemon.ts+18−0
@@ -17,6 +17,11 @@ export interface DaemonSpawnSpec { · 16 unmodified lines
17 readonly args: ReadonlyArray<string>;17 readonly args: ReadonlyArray<string>;
18}18}
19 19
20export interface ExecutorServerReachabilityInput {
21 readonly baseUrl: string;
22 readonly authorization?: string;
23}
24
20type ProbeServer = ReturnType<typeof createServer> & {25type ProbeServer = ReturnType<typeof createServer> & {
21 removeAllListeners: () => void;26 removeAllListeners: () => void;
22 once: (event: "error" | "listening", listener: (...args: unknown[]) => void) => void;27 once: (event: "error" | "listening", listener: (...args: unknown[]) => void) => void;
@@ -60,6 +65,19 @@ export const isDevCliEntrypoint = (scriptPath: string | undefined): boolean => { · 37 unmodified lines
60 return scriptPath.endsWith(".ts") || scriptPath.endsWith(".js");65 return scriptPath.endsWith(".ts") || scriptPath.endsWith(".js");
61};66};
62 67
68export const isExecutorServerReachable = (
69 input: ExecutorServerReachabilityInput,
70): Effect.Effect<boolean> =>
71 Effect.tryPromise(async () => {
72 const url = new URL("/api/integrations", input.baseUrl);
73 const response = await fetch(url, {
74 ...(input.authorization ? { headers: { authorization: input.authorization } } : {}),
75 signal: AbortSignal.timeout(2000),
76 });
77 await response.body?.cancel();
78 return response.ok;
79 }).pipe(Effect.catchCause(() => Effect.succeed(false)));
80
63// ---------------------------------------------------------------------------81// ---------------------------------------------------------------------------
64// Process spec82// Process spec
65// ---------------------------------------------------------------------------83// ---------------------------------------------------------------------------
apps/cli/src/main.ts+23−63
@@ -62,6 +62,7 @@ import { · 61 unmodified lines
62 buildDaemonSpawnSpec,62 buildDaemonSpawnSpec,
63 chooseDaemonPort,63 chooseDaemonPort,
64 canAutoStartLocalDaemonForHost,64 canAutoStartLocalDaemonForHost,
65 isExecutorServerReachable,
65 isDevCliEntrypoint,66 isDevCliEntrypoint,
66 parseDaemonBaseUrl,67 parseDaemonBaseUrl,
67 spawnDetached,68 spawnDetached,
@@ -157,51 +158,8 @@ const waitForShutdownSignal = () => · 89 unmodified lines
157// Background server management158// Background server management
158// ---------------------------------------------------------------------------159// ---------------------------------------------------------------------------
159 160
160const isRecord = (value: unknown): value is Record<string, unknown> =>
161 typeof value === "object" && value !== null && !Array.isArray(value);
162
163interface DaemonScopeInfo {
164 readonly id: string;
165 readonly name: string;
166 readonly dir: string;
167}
168
169const readDaemonScopeInfo = (
170 baseUrl: string,
171 authorization?: string,
172): Effect.Effect<DaemonScopeInfo | null> =>
173 Effect.tryPromise(() =>
174 fetch(`${baseUrl}/api/scope`, {
175 ...(authorization ? { headers: { authorization } } : {}),
176 signal: AbortSignal.timeout(2000),
177 }),
178 ).pipe(
179 Effect.flatMap((res) => {
180 if (!res.ok) return Effect.succeed(null);
181 return Effect.tryPromise(() => res.json()).pipe(
182 Effect.map((payload) => {
183 if (!isRecord(payload)) return null;
184 if (
185 typeof payload.id === "string" &&
186 typeof payload.name === "string" &&
187 typeof payload.dir === "string"
188 ) {
189 return {
190 id: payload.id,
191 name: payload.name,
192 dir: payload.dir,
193 };
194 }
195 return null;
196 }),
197 Effect.catchCause(() => Effect.succeed(null)),
198 );
199 }),
200 Effect.catchCause(() => Effect.succeed(null)),
201 );
202
203const isServerReachable = (baseUrl: string, authorization?: string): Effect.Effect<boolean> =>161const isServerReachable = (baseUrl: string, authorization?: string): Effect.Effect<boolean> =>
204 readDaemonScopeInfo(baseUrl, authorization).pipe(Effect.map((scopeInfo) => scopeInfo !== null));162 isExecutorServerReachable({ baseUrl, authorization });
205 163
206const readActiveLocalServerManifest = (): Effect.Effect<164const readActiveLocalServerManifest = (): Effect.Effect<
207 ExecutorLocalServerManifest | null,165 ExecutorLocalServerManifest | null,
@@ -238,9 +196,6 @@ const normalizeDaemonScopeDir = (dir: string): string => { · 30 unmodified lines
238 return existsSync(resolved) ? realpathSync.native(resolved) : resolved;196 return existsSync(resolved) ? realpathSync.native(resolved) : resolved;
239};197};
240 198
241const currentDaemonScopeDir = (): string =>
242 normalizeDaemonScopeDir(process.env.EXECUTOR_SCOPE_DIR ?? process.cwd());
243
244const currentScopeDirForManifest = (): string | null =>199const currentScopeDirForManifest = (): string | null =>
245 process.env.EXECUTOR_SCOPE_DIR ? normalizeDaemonScopeDir(process.env.EXECUTOR_SCOPE_DIR) : null;200 process.env.EXECUTOR_SCOPE_DIR ? normalizeDaemonScopeDir(process.env.EXECUTOR_SCOPE_DIR) : null;
246 201
@@ -382,6 +337,7 @@ const resolveDaemonTarget = (baseUrl: string) => · 135 unmodified lines
382 hostname: pointer.hostname,337 hostname: pointer.hostname,
383 port: pointer.port,338 port: pointer.port,
384 scopeId,339 scopeId,
340 fromPointer: true,
385 };341 };
386 }342 }
387 343
@@ -393,6 +349,7 @@ const resolveDaemonTarget = (baseUrl: string) => · 5 unmodified lines
393 hostname: host,349 hostname: host,
394 port: parsed.port,350 port: parsed.port,
395 scopeId,351 scopeId,
352 fromPointer: false,
396 };353 };
397 });354 });
398 355
@@ -484,17 +441,22 @@ const ensureDaemon = ( · 85 unmodified lines
484): Effect.Effect<string, Error, FileSystem.FileSystem | PlatformPath.Path> =>441): Effect.Effect<string, Error, FileSystem.FileSystem | PlatformPath.Path> =>
485 Effect.gen(function* () {442 Effect.gen(function* () {
486 const resolvedTarget = yield* resolveDaemonTarget(baseUrl);443 const resolvedTarget = yield* resolveDaemonTarget(baseUrl);
487 const reachableScope = yield* readDaemonScopeInfo(resolvedTarget.baseUrl);444 if (resolvedTarget.fromPointer && (yield* isServerReachable(resolvedTarget.baseUrl))) {
488 if (reachableScope && normalizeDaemonScopeDir(reachableScope.dir) === currentDaemonScopeDir()) {
489 return resolvedTarget.baseUrl;445 return resolvedTarget.baseUrl;
490 }446 }
491 447
492 const active = yield* readActiveLocalServerManifest();448 const active = yield* readActiveLocalServerManifest();
493 if (449 const activeOrigin = active
494 active &&450 ? normalizeExecutorServerConnection({ origin: active.connection.origin }).origin
495 normalizeExecutorServerConnection({ origin: active.connection.origin }).origin !==451 : null;
496 normalizeExecutorServerConnection({ origin: resolvedTarget.baseUrl }).origin452 const targetOrigin = normalizeExecutorServerConnection({
497 ) {453 origin: resolvedTarget.baseUrl,
454 }).origin;
455 if (activeOrigin === targetOrigin) {
456 return resolvedTarget.baseUrl;
457 }
458
459 if (active && activeOrigin !== targetOrigin) {
498 return yield* Effect.fail(460 return yield* Effect.fail(
499 new Error(461 new Error(
500 [462 [
@@ -1507,9 +1469,8 @@ const runCallHelp = ( · 1006 unmodified lines
1507 serverName: args.serverName,1469 serverName: args.serverName,
1508 });1470 });
1509 const client = yield* makeApiClient(connection);1471 const client = yield* makeApiClient(connection);
1510 const scopeInfo = yield* client.scope.info();1472 const tools = yield* client.tools.list({ query: {} });
1511 const tools = yield* client.tools.list({ params: { scopeId: scopeInfo.id } });1473 const toolPaths = tools.map((tool) => tool.address);
1512 const toolPaths = tools.map((tool) => tool.id);
1513 1474
1514 const inspection = yield* Effect.try({1475 const inspection = yield* Effect.try({
1515 try: () =>1476 try: () =>
@@ -1575,15 +1536,14 @@ const runCallHelp = ( · 59 unmodified lines
1575 }1536 }
1576 1537
1577 const exactTool = inspection.exactPath1538 const exactTool = inspection.exactPath
1578 ? tools.find((tool) => tool.id === inspection.exactPath)1539 ? tools.find((tool) => tool.address === inspection.exactPath)
1579 : undefined;1540 : undefined;
1580 1541
1581 if (exactTool && inspection.children.length === 0) {1542 if (exactTool && inspection.children.length === 0) {
1582 const schema = yield* client.tools1543 const schema = yield* client.tools
1583 .schema({1544 .schema({
1584 params: {1545 query: {
1585 scopeId: scopeInfo.id,1546 address: exactTool.address,
1586 toolId: exactTool.id,
1587 },1547 },
1588 })1548 })
1589 .pipe(1549 .pipe(
@@ -1596,7 +1556,7 @@ const runCallHelp = ( · 6 unmodified lines
1596 1556
1597 yield* printCallLeafHelp({1557 yield* printCallLeafHelp({
1598 tool: {1558 tool: {
1599 id: exactTool.id,1559 id: exactTool.address,
1600 description: exactTool.description,1560 description: exactTool.description,
1601 },1561 },
1602 schema,1562 schema,
@@ -1618,7 +1578,7 @@ const runCallHelp = ( · 15 unmodified lines
1618 limit: args.limit,1578 limit: args.limit,
1619 exactTool: exactTool1579 exactTool: exactTool
1620 ? {1580 ? {
1621 id: exactTool.id,1581 id: exactTool.address,
1622 description: exactTool.description,1582 description: exactTool.description,
1623 }1583 }
1624 : undefined,1584 : undefined,
apps/cloud/drizzle.config.ts+1−1
@@ -15,7 +15,7 @@ const withSslMode = (url: string): string => { · 14 unmodified lines
15};15};
16 16
17export default defineConfig({17export default defineConfig({
18 schema: ["./src/services/schema.ts", "./src/services/executor-schema.ts"],18 schema: ["./src/db/schema.ts", "./src/db/executor-schema.ts"],
19 out: "./drizzle",19 out: "./drizzle",
20 dialect: "postgresql",20 dialect: "postgresql",
21 dbCredentials: {21 dbCredentials: {
apps/cloud/drizzle/0000_lame_rage.sql+0−179
@@ -1,179 +0,0 @@
1CREATE TABLE "accounts" (
2 "id" text PRIMARY KEY NOT NULL,
3 "created_at" timestamp with time zone DEFAULT now() NOT NULL
4);
5--> statement-breakpoint
6CREATE TABLE "memberships" (
7 "account_id" text NOT NULL,
8 "organization_id" text NOT NULL,
9 "created_at" timestamp with time zone DEFAULT now() NOT NULL,
10 CONSTRAINT "memberships_account_id_organization_id_pk" PRIMARY KEY("account_id","organization_id")
11);
12--> statement-breakpoint
13CREATE TABLE "organizations" (
14 "id" text PRIMARY KEY NOT NULL,
15 "name" text NOT NULL,
16 "created_at" timestamp with time zone DEFAULT now() NOT NULL
17);
18--> statement-breakpoint
19CREATE TABLE "blob" (
20 "namespace" text NOT NULL,
21 "key" text NOT NULL,
22 "value" text NOT NULL,
23 CONSTRAINT "blob_namespace_key_pk" PRIMARY KEY("namespace","key")
24);
25--> statement-breakpoint
26CREATE TABLE "definition" (
27 "id" text NOT NULL,
28 "scope_id" text NOT NULL,
29 "source_id" text NOT NULL,
30 "plugin_id" text NOT NULL,
31 "name" text NOT NULL,
32 "schema" jsonb NOT NULL,
33 "created_at" timestamp NOT NULL,
34 CONSTRAINT "definition_scope_id_id_pk" PRIMARY KEY("scope_id","id")
35);
36--> statement-breakpoint
37CREATE TABLE "graphql_operation" (
38 "id" text NOT NULL,
39 "scope_id" text NOT NULL,
40 "source_id" text NOT NULL,
41 "binding" jsonb NOT NULL,
42 CONSTRAINT "graphql_operation_scope_id_id_pk" PRIMARY KEY("scope_id","id")
43);
44--> statement-breakpoint
45CREATE TABLE "graphql_source" (
46 "id" text NOT NULL,
47 "scope_id" text NOT NULL,
48 "name" text NOT NULL,
49 "endpoint" text NOT NULL,
50 "headers" jsonb,
51 CONSTRAINT "graphql_source_scope_id_id_pk" PRIMARY KEY("scope_id","id")
52);
53--> statement-breakpoint
54CREATE TABLE "mcp_binding" (
55 "id" text NOT NULL,
56 "scope_id" text NOT NULL,
57 "source_id" text NOT NULL,
58 "binding" jsonb NOT NULL,
59 "created_at" timestamp NOT NULL,
60 CONSTRAINT "mcp_binding_scope_id_id_pk" PRIMARY KEY("scope_id","id")
61);
62--> statement-breakpoint
63CREATE TABLE "mcp_oauth_session" (
64 "id" text NOT NULL,
65 "scope_id" text NOT NULL,
66 "session" jsonb NOT NULL,
67 "expires_at" integer NOT NULL,
68 "created_at" timestamp NOT NULL,
69 CONSTRAINT "mcp_oauth_session_scope_id_id_pk" PRIMARY KEY("scope_id","id")
70);
71--> statement-breakpoint
72CREATE TABLE "mcp_source" (
73 "id" text NOT NULL,
74 "scope_id" text NOT NULL,
75 "name" text NOT NULL,
76 "config" jsonb NOT NULL,
77 "created_at" timestamp NOT NULL,
78 CONSTRAINT "mcp_source_scope_id_id_pk" PRIMARY KEY("scope_id","id")
79);
80--> statement-breakpoint
81CREATE TABLE "openapi_oauth_session" (
82 "id" text NOT NULL,
83 "scope_id" text NOT NULL,
84 "session" jsonb NOT NULL,
85 "created_at" timestamp NOT NULL,
86 CONSTRAINT "openapi_oauth_session_scope_id_id_pk" PRIMARY KEY("scope_id","id")
87);
88--> statement-breakpoint
89CREATE TABLE "openapi_operation" (
90 "id" text NOT NULL,
91 "scope_id" text NOT NULL,
92 "source_id" text NOT NULL,
93 "binding" jsonb NOT NULL,
94 CONSTRAINT "openapi_operation_scope_id_id_pk" PRIMARY KEY("scope_id","id")
95);
96--> statement-breakpoint
97CREATE TABLE "openapi_source" (
98 "id" text NOT NULL,
99 "scope_id" text NOT NULL,
100 "name" text NOT NULL,
101 "spec" text NOT NULL,
102 "base_url" text,
103 "headers" jsonb,
104 "oauth2" jsonb,
105 "invocation_config" jsonb NOT NULL,
106 CONSTRAINT "openapi_source_scope_id_id_pk" PRIMARY KEY("scope_id","id")
107);
108--> statement-breakpoint
109CREATE TABLE "secret" (
110 "id" text NOT NULL,
111 "scope_id" text NOT NULL,
112 "name" text NOT NULL,
113 "provider" text NOT NULL,
114 "created_at" timestamp NOT NULL,
115 CONSTRAINT "secret_scope_id_id_pk" PRIMARY KEY("scope_id","id")
116);
117--> statement-breakpoint
118CREATE TABLE "source" (
119 "id" text NOT NULL,
120 "scope_id" text NOT NULL,
121 "plugin_id" text NOT NULL,
122 "kind" text NOT NULL,
123 "name" text NOT NULL,
124 "url" text,
125 "can_remove" boolean DEFAULT true NOT NULL,
126 "can_refresh" boolean DEFAULT false NOT NULL,
127 "can_edit" boolean DEFAULT false NOT NULL,
128 "created_at" timestamp NOT NULL,
129 "updated_at" timestamp NOT NULL,
130 CONSTRAINT "source_scope_id_id_pk" PRIMARY KEY("scope_id","id")
131);
132--> statement-breakpoint
133CREATE TABLE "tool" (
134 "id" text NOT NULL,
135 "scope_id" text NOT NULL,
136 "source_id" text NOT NULL,
137 "plugin_id" text NOT NULL,
138 "name" text NOT NULL,
139 "description" text NOT NULL,
140 "input_schema" jsonb,
141 "output_schema" jsonb,
142 "created_at" timestamp NOT NULL,
143 "updated_at" timestamp NOT NULL,
144 CONSTRAINT "tool_scope_id_id_pk" PRIMARY KEY("scope_id","id")
145);
146--> statement-breakpoint
147CREATE TABLE "workos_vault_metadata" (
148 "id" text NOT NULL,
149 "scope_id" text NOT NULL,
150 "name" text NOT NULL,
151 "purpose" text,
152 "created_at" timestamp NOT NULL,
153 CONSTRAINT "workos_vault_metadata_scope_id_id_pk" PRIMARY KEY("scope_id","id")
154);
155--> statement-breakpoint
156ALTER TABLE "memberships" ADD CONSTRAINT "memberships_account_id_accounts_id_fk" FOREIGN KEY ("account_id") REFERENCES "public"."accounts"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
157ALTER TABLE "memberships" ADD CONSTRAINT "memberships_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
158CREATE INDEX "definition_scope_id_idx" ON "definition" USING btree ("scope_id");--> statement-breakpoint
159CREATE INDEX "definition_source_id_idx" ON "definition" USING btree ("source_id");--> statement-breakpoint
160CREATE INDEX "definition_plugin_id_idx" ON "definition" USING btree ("plugin_id");--> statement-breakpoint
161CREATE INDEX "graphql_operation_scope_id_idx" ON "graphql_operation" USING btree ("scope_id");--> statement-breakpoint
162CREATE INDEX "graphql_operation_source_id_idx" ON "graphql_operation" USING btree ("source_id");--> statement-breakpoint
163CREATE INDEX "graphql_source_scope_id_idx" ON "graphql_source" USING btree ("scope_id");--> statement-breakpoint
164CREATE INDEX "mcp_binding_scope_id_idx" ON "mcp_binding" USING btree ("scope_id");--> statement-breakpoint
165CREATE INDEX "mcp_binding_source_id_idx" ON "mcp_binding" USING btree ("source_id");--> statement-breakpoint
166CREATE INDEX "mcp_oauth_session_scope_id_idx" ON "mcp_oauth_session" USING btree ("scope_id");--> statement-breakpoint
167CREATE INDEX "mcp_source_scope_id_idx" ON "mcp_source" USING btree ("scope_id");--> statement-breakpoint
168CREATE INDEX "openapi_oauth_session_scope_id_idx" ON "openapi_oauth_session" USING btree ("scope_id");--> statement-breakpoint
169CREATE INDEX "openapi_operation_scope_id_idx" ON "openapi_operation" USING btree ("scope_id");--> statement-breakpoint
170CREATE INDEX "openapi_operation_source_id_idx" ON "openapi_operation" USING btree ("source_id");--> statement-breakpoint
171CREATE INDEX "openapi_source_scope_id_idx" ON "openapi_source" USING btree ("scope_id");--> statement-breakpoint
172CREATE INDEX "secret_scope_id_idx" ON "secret" USING btree ("scope_id");--> statement-breakpoint
173CREATE INDEX "secret_provider_idx" ON "secret" USING btree ("provider");--> statement-breakpoint
174CREATE INDEX "source_scope_id_idx" ON "source" USING btree ("scope_id");--> statement-breakpoint
175CREATE INDEX "source_plugin_id_idx" ON "source" USING btree ("plugin_id");--> statement-breakpoint
176CREATE INDEX "tool_scope_id_idx" ON "tool" USING btree ("scope_id");--> statement-breakpoint
177CREATE INDEX "tool_source_id_idx" ON "tool" USING btree ("source_id");--> statement-breakpoint
178CREATE INDEX "tool_plugin_id_idx" ON "tool" USING btree ("plugin_id");--> statement-breakpoint
179CREATE INDEX "workos_vault_metadata_scope_id_idx" ON "workos_vault_metadata" USING btree ("scope_id");
apps/cloud/drizzle/0000_v2_baseline.sql+165−0
@@ -0,0 +1,165 @@
1CREATE TABLE "accounts" (
2 "id" text PRIMARY KEY NOT NULL,
3 "created_at" timestamp with time zone DEFAULT now() NOT NULL
4);
5--> statement-breakpoint
6CREATE TABLE "memberships" (
7 "account_id" text NOT NULL,
8 "organization_id" text NOT NULL,
9 "created_at" timestamp with time zone DEFAULT now() NOT NULL,
10 CONSTRAINT "memberships_account_id_organization_id_pk" PRIMARY KEY("account_id","organization_id")
11);
12--> statement-breakpoint
13CREATE TABLE "organizations" (
14 "id" text PRIMARY KEY NOT NULL,
15 "name" text NOT NULL,
16 "created_at" timestamp with time zone DEFAULT now() NOT NULL
17);
18--> statement-breakpoint
19CREATE TABLE "blob" (
20 "namespace" varchar(255) NOT NULL,
21 "key" varchar(255) NOT NULL,
22 "value" text NOT NULL,
23 "row_id" varchar(255) PRIMARY KEY NOT NULL,
24 "id" varchar(255) NOT NULL
25);
26--> statement-breakpoint
27CREATE TABLE "connection" (
28 "integration" varchar(255) NOT NULL,
29 "name" varchar(255) NOT NULL,
30 "template" text NOT NULL,
31 "provider" text NOT NULL,
32 "item_ids" json NOT NULL,
33 "identity_label" text,
34 "oauth_client" text,
35 "oauth_client_owner" text,
36 "refresh_item_id" text,
37 "expires_at" bigint,
38 "oauth_scope" text,
39 "provider_state" json,
40 "created_at" timestamp NOT NULL,
41 "updated_at" timestamp NOT NULL,
42 "row_id" varchar(255) PRIMARY KEY NOT NULL,
43 "tenant" varchar(255) NOT NULL,
44 "owner" varchar(255) NOT NULL,
45 "subject" varchar(255) NOT NULL
46);
47--> statement-breakpoint
48CREATE TABLE "definition" (
49 "integration" varchar(255) NOT NULL,
50 "connection" varchar(255) NOT NULL,
51 "plugin_id" text NOT NULL,
52 "name" varchar(255) NOT NULL,
53 "schema" json NOT NULL,
54 "created_at" timestamp NOT NULL,
55 "row_id" varchar(255) PRIMARY KEY NOT NULL,
56 "tenant" varchar(255) NOT NULL,
57 "owner" varchar(255) NOT NULL,
58 "subject" varchar(255) NOT NULL
59);
60--> statement-breakpoint
61CREATE TABLE "integration" (
62 "slug" varchar(255) NOT NULL,
63 "plugin_id" text NOT NULL,
64 "description" text NOT NULL,
65 "config" json,
66 "can_remove" boolean DEFAULT true NOT NULL,
67 "can_refresh" boolean DEFAULT false NOT NULL,
68 "created_at" timestamp NOT NULL,
69 "updated_at" timestamp NOT NULL,
70 "row_id" varchar(255) PRIMARY KEY NOT NULL,
71 "tenant" varchar(255) NOT NULL
72);
73--> statement-breakpoint
74CREATE TABLE "oauth_client" (
75 "slug" varchar(255) NOT NULL,
76 "authorization_url" text NOT NULL,
77 "token_url" text NOT NULL,
78 "grant" text NOT NULL,
79 "client_id" text NOT NULL,
80 "client_secret_item_id" text,
81 "resource" text,
82 "created_at" timestamp NOT NULL,
83 "row_id" varchar(255) PRIMARY KEY NOT NULL,
84 "tenant" varchar(255) NOT NULL,
85 "owner" varchar(255) NOT NULL,
86 "subject" varchar(255) NOT NULL
87);
88--> statement-breakpoint
89CREATE TABLE "oauth_session" (
90 "state" varchar(255) NOT NULL,
91 "client_slug" text NOT NULL,
92 "integration" text NOT NULL,
93 "name" text NOT NULL,
94 "template" text NOT NULL,
95 "redirect_url" text NOT NULL,
96 "pkce_verifier" text,
97 "identity_label" text,
98 "payload" json NOT NULL,
99 "expires_at" bigint NOT NULL,
100 "created_at" timestamp NOT NULL,
101 "row_id" varchar(255) PRIMARY KEY NOT NULL,
102 "tenant" varchar(255) NOT NULL,
103 "owner" varchar(255) NOT NULL,
104 "subject" varchar(255) NOT NULL
105);
106--> statement-breakpoint
107CREATE TABLE "plugin_storage" (
108 "plugin_id" varchar(255) NOT NULL,
109 "collection" varchar(255) NOT NULL,
110 "key" varchar(255) NOT NULL,
111 "data" json NOT NULL,
112 "created_at" timestamp NOT NULL,
113 "updated_at" timestamp NOT NULL,
114 "row_id" varchar(255) PRIMARY KEY NOT NULL,
115 "tenant" varchar(255) NOT NULL,
116 "owner" varchar(255) NOT NULL,
117 "subject" varchar(255) NOT NULL
118);
119--> statement-breakpoint
120CREATE TABLE "private_executor_cloud_settings" (
121 "id" varchar(255) PRIMARY KEY NOT NULL,
122 "version" varchar(255) DEFAULT '1.0.0' NOT NULL
123);
124--> statement-breakpoint
125CREATE TABLE "tool" (
126 "integration" varchar(255) NOT NULL,
127 "connection" varchar(255) NOT NULL,
128 "plugin_id" text NOT NULL,
129 "name" varchar(255) NOT NULL,
130 "description" text NOT NULL,
131 "input_schema" json,
132 "output_schema" json,
133 "annotations" json,
134 "created_at" timestamp NOT NULL,
135 "updated_at" timestamp NOT NULL,
136 "row_id" varchar(255) PRIMARY KEY NOT NULL,
137 "tenant" varchar(255) NOT NULL,
138 "owner" varchar(255) NOT NULL,
139 "subject" varchar(255) NOT NULL
140);
141--> statement-breakpoint
142CREATE TABLE "tool_policy" (
143 "id" varchar(255) NOT NULL,
144 "pattern" text NOT NULL,
145 "action" text NOT NULL,
146 "position" text NOT NULL,
147 "created_at" timestamp NOT NULL,
148 "updated_at" timestamp NOT NULL,
149 "row_id" varchar(255) PRIMARY KEY NOT NULL,
150 "tenant" varchar(255) NOT NULL,
151 "owner" varchar(255) NOT NULL,
152 "subject" varchar(255) NOT NULL
153);
154--> statement-breakpoint
155ALTER TABLE "memberships" ADD CONSTRAINT "memberships_account_id_accounts_id_fk" FOREIGN KEY ("account_id") REFERENCES "public"."accounts"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
156ALTER TABLE "memberships" ADD CONSTRAINT "memberships_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
157CREATE UNIQUE INDEX "blob_id_uidx" ON "blob" USING btree ("id");--> statement-breakpoint
158CREATE UNIQUE INDEX "connection_uidx" ON "connection" USING btree ("tenant","owner","subject","integration","name");--> statement-breakpoint
159CREATE UNIQUE INDEX "definition_uidx" ON "definition" USING btree ("tenant","owner","subject","integration","connection","name");--> statement-breakpoint
160CREATE UNIQUE INDEX "integration_uidx" ON "integration" USING btree ("tenant","slug");--> statement-breakpoint
161CREATE UNIQUE INDEX "oauth_client_uidx" ON "oauth_client" USING btree ("tenant","owner","subject","slug");--> statement-breakpoint
162CREATE UNIQUE INDEX "oauth_session_uidx" ON "oauth_session" USING btree ("tenant","state");--> statement-breakpoint
163CREATE UNIQUE INDEX "plugin_storage_uidx" ON "plugin_storage" USING btree ("tenant","owner","subject","plugin_id","collection","key");--> statement-breakpoint
164CREATE UNIQUE INDEX "tool_uidx" ON "tool" USING btree ("tenant","owner","subject","integration","connection","name");--> statement-breakpoint
165CREATE UNIQUE INDEX "tool_policy_uidx" ON "tool_policy" USING btree ("tenant","owner","subject","id");
apps/cloud/drizzle/0001_harsh_meltdown.sql+0−1
@@ -1 +0,0 @@
1ALTER TABLE "openapi_source" ADD COLUMN "source_url" text;
apps/cloud/drizzle/0002_fat_white_tiger.sql+0−1
@@ -1 +0,0 @@
1ALTER TABLE "mcp_oauth_session" ALTER COLUMN "expires_at" SET DATA TYPE bigint;
apps/cloud/drizzle/0003_add_connections.sql+0−20
@@ -1,20 +0,0 @@
1CREATE TABLE "connection" (
2 "id" text NOT NULL,
3 "scope_id" text NOT NULL,
4 "provider" text NOT NULL,
5 "kind" text NOT NULL,
6 "identity_label" text,
7 "access_token_secret_id" text NOT NULL,
8 "refresh_token_secret_id" text,
9 "expires_at" bigint,
10 "scope" text,
11 "provider_state" jsonb,
12 "created_at" timestamp NOT NULL,
13 "updated_at" timestamp NOT NULL,
14 CONSTRAINT "connection_scope_id_id_pk" PRIMARY KEY("scope_id","id")
15);
16--> statement-breakpoint
17ALTER TABLE "secret" ADD COLUMN "owned_by_connection_id" text;--> statement-breakpoint
18CREATE INDEX "connection_scope_id_idx" ON "connection" USING btree ("scope_id");--> statement-breakpoint
19CREATE INDEX "connection_provider_idx" ON "connection" USING btree ("provider");--> statement-breakpoint
20CREATE INDEX "secret_owned_by_connection_id_idx" ON "secret" USING btree ("owned_by_connection_id");
apps/cloud/drizzle/0004_openapi_source_bindings.sql+0−19
@@ -1,19 +0,0 @@
1CREATE TABLE "openapi_source_binding" (
2 "id" text NOT NULL,
3 "source_id" text NOT NULL,
4 "source_scope_id" text NOT NULL,
5 "target_scope_id" text NOT NULL,
6 "slot" text NOT NULL,
7 "value" jsonb NOT NULL,
8 "created_at" timestamp NOT NULL,
9 "updated_at" timestamp NOT NULL,
10 CONSTRAINT "openapi_source_binding_id_pk" PRIMARY KEY("id")
11);
12--> statement-breakpoint
13CREATE INDEX "openapi_source_binding_source_id_idx" ON "openapi_source_binding" USING btree ("source_id");
14--> statement-breakpoint
15CREATE INDEX "openapi_source_binding_source_scope_id_idx" ON "openapi_source_binding" USING btree ("source_scope_id");
16--> statement-breakpoint
17CREATE INDEX "openapi_source_binding_target_scope_id_idx" ON "openapi_source_binding" USING btree ("target_scope_id");
18--> statement-breakpoint
19CREATE INDEX "openapi_source_binding_slot_idx" ON "openapi_source_binding" USING btree ("slot");
apps/cloud/drizzle/0005_drop_connection_kind.sql+0−1
@@ -1 +0,0 @@
1ALTER TABLE "connection" DROP COLUMN "kind";
apps/cloud/drizzle/0006_add_tool_policy.sql+0−17
@@ -1,17 +0,0 @@
1CREATE TABLE "tool_policy" (
2 "id" text NOT NULL,
3 "scope_id" text NOT NULL,
4 "pattern" text NOT NULL,
5 "action" text NOT NULL,
6 -- Fractional-indexing key (Jira lexorank style). Lex-ordered text;
7 -- always subdivisible by lengthening, so reorders never run out of
8 -- room.
9 "position" text NOT NULL,
10 "created_at" timestamp NOT NULL,
11 "updated_at" timestamp NOT NULL,
12 CONSTRAINT "tool_policy_scope_id_id_pk" PRIMARY KEY("scope_id","id")
13);
14--> statement-breakpoint
15-- List queries are always `WHERE scope_id = ? ORDER BY position`, so the
16-- composite index serves both the filter and the sort from one btree.
17CREATE INDEX "tool_policy_scope_id_position_idx" ON "tool_policy" USING btree ("scope_id", "position");
apps/cloud/drizzle/0007_military_young_avengers.sql+0−22
@@ -1,22 +0,0 @@
1CREATE TABLE "oauth2_session" (
2 "id" text NOT NULL,
3 "scope_id" text NOT NULL,
4 "plugin_id" text NOT NULL,
5 "strategy" text NOT NULL,
6 "connection_id" text NOT NULL,
7 "token_scope" text NOT NULL,
8 "redirect_url" text NOT NULL,
9 "payload" jsonb NOT NULL,
10 "expires_at" bigint NOT NULL,
11 "created_at" timestamp NOT NULL,
12 CONSTRAINT "oauth2_session_scope_id_id_pk" PRIMARY KEY("scope_id","id")
13);
14--> statement-breakpoint
15DROP TABLE "mcp_oauth_session" CASCADE;--> statement-breakpoint
16DROP TABLE "openapi_oauth_session" CASCADE;--> statement-breakpoint
17ALTER TABLE "graphql_source" ADD COLUMN "query_params" jsonb;--> statement-breakpoint
18ALTER TABLE "graphql_source" ADD COLUMN "auth" jsonb;--> statement-breakpoint
19ALTER TABLE "openapi_source" ADD COLUMN "query_params" jsonb;--> statement-breakpoint
20CREATE INDEX "oauth2_session_scope_id_idx" ON "oauth2_session" USING btree ("scope_id");--> statement-breakpoint
21CREATE INDEX "oauth2_session_plugin_id_idx" ON "oauth2_session" USING btree ("plugin_id");--> statement-breakpoint
22CREATE INDEX "oauth2_session_connection_id_idx" ON "oauth2_session" USING btree ("connection_id");
apps/cloud/drizzle/0008_normalize_plugin_secret_refs.sql+0−388
@@ -1,388 +0,0 @@
1-- Normalize all plugin secret/connection refs out of JSON columns
2-- into proper relational shape: graphql, openapi, mcp.
3-- pg port of apps/local/drizzle/0007_normalize_plugin_secret_refs.sql.
4-- (google-discovery is local-only — not in cloud's plugin list.)
5
6-- ============================================================
7-- graphql
8-- ============================================================
9
10-- Normalize graphql plugin: move secret/connection refs out of JSON
11-- columns into proper relational shape so usagesForSecret /
12-- usagesForConnection are one indexed SELECT instead of a JSON scan.
13-- pg port of apps/local/drizzle/0007_normalize_graphql.sql.
14
15CREATE TABLE "graphql_source_header" (
16 "id" text NOT NULL,
17 "scope_id" text NOT NULL,
18 "source_id" text NOT NULL,
19 "name" text NOT NULL,
20 "kind" text NOT NULL,
21 "text_value" text,
22 "secret_id" text,
23 "secret_prefix" text,
24 CONSTRAINT "graphql_source_header_scope_id_id_pk" PRIMARY KEY("scope_id","id")
25);
26--> statement-breakpoint
27CREATE INDEX "graphql_source_header_scope_id_idx" ON "graphql_source_header" USING btree ("scope_id");--> statement-breakpoint
28CREATE INDEX "graphql_source_header_source_id_idx" ON "graphql_source_header" USING btree ("source_id");--> statement-breakpoint
29CREATE INDEX "graphql_source_header_secret_id_idx" ON "graphql_source_header" USING btree ("secret_id");--> statement-breakpoint
30
31CREATE TABLE "graphql_source_query_param" (
32 "id" text NOT NULL,
33 "scope_id" text NOT NULL,
34 "source_id" text NOT NULL,
35 "name" text NOT NULL,
36 "kind" text NOT NULL,
37 "text_value" text,
38 "secret_id" text,
39 "secret_prefix" text,
40 CONSTRAINT "graphql_source_query_param_scope_id_id_pk" PRIMARY KEY("scope_id","id")
41);
42--> statement-breakpoint
43CREATE INDEX "graphql_source_query_param_scope_id_idx" ON "graphql_source_query_param" USING btree ("scope_id");--> statement-breakpoint
44CREATE INDEX "graphql_source_query_param_source_id_idx" ON "graphql_source_query_param" USING btree ("source_id");--> statement-breakpoint
45CREATE INDEX "graphql_source_query_param_secret_id_idx" ON "graphql_source_query_param" USING btree ("secret_id");--> statement-breakpoint
46
47-- New auth columns. `auth_kind` defaults to "none" so existing rows that
48-- predate this migration are valid even if the json was null.
49ALTER TABLE "graphql_source" ADD COLUMN "auth_kind" text DEFAULT 'none' NOT NULL;--> statement-breakpoint
50ALTER TABLE "graphql_source" ADD COLUMN "auth_connection_id" text;--> statement-breakpoint
51CREATE INDEX "graphql_source_auth_connection_id_idx" ON "graphql_source" USING btree ("auth_connection_id");--> statement-breakpoint
52
53-- Backfill auth from the JSON column. Missing keys yield NULL, so a row
54-- with auth=NULL or kind="none" leaves auth_connection_id NULL and
55-- auth_kind defaulted to "none".
56UPDATE "graphql_source"
57SET
58 "auth_kind" = COALESCE("auth"->>'kind', 'none'),
59 "auth_connection_id" = "auth"->>'connectionId'
60WHERE "auth" IS NOT NULL;--> statement-breakpoint
61
62-- Backfill headers. For each (source, header_name) pair: if the value
63-- is a json object with .secretId, write a kind=secret row; otherwise
64-- write a kind=text row with the literal string. jsonb_each iterates
65-- the keys of the headers object.
66INSERT INTO "graphql_source_header"
67 ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
68SELECT
69 s."scope_id",
70 '[' || to_jsonb(s."id")::text || ',' || to_jsonb(h.key)::text || ']',
71 s."id",
72 h.key,
73 CASE
74 WHEN jsonb_typeof(h.value) = 'object' AND h.value ? 'secretId' THEN 'secret'
75 ELSE 'text'
76 END,
77 CASE WHEN jsonb_typeof(h.value) = 'string' THEN h.value #>> '{}' ELSE NULL END,
78 CASE WHEN jsonb_typeof(h.value) = 'object' THEN h.value->>'secretId' ELSE NULL END,
79 CASE WHEN jsonb_typeof(h.value) = 'object' THEN h.value->>'prefix' ELSE NULL END
80FROM "graphql_source" s, jsonb_each(s."headers") h
81WHERE s."headers" IS NOT NULL
82ON CONFLICT DO NOTHING;--> statement-breakpoint
83
84-- Same for query_params.
85INSERT INTO "graphql_source_query_param"
86 ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
87SELECT
88 s."scope_id",
89 '[' || to_jsonb(s."id")::text || ',' || to_jsonb(q.key)::text || ']',
90 s."id",
91 q.key,
92 CASE
93 WHEN jsonb_typeof(q.value) = 'object' AND q.value ? 'secretId' THEN 'secret'
94 ELSE 'text'
95 END,
96 CASE WHEN jsonb_typeof(q.value) = 'string' THEN q.value #>> '{}' ELSE NULL END,
97 CASE WHEN jsonb_typeof(q.value) = 'object' THEN q.value->>'secretId' ELSE NULL END,
98 CASE WHEN jsonb_typeof(q.value) = 'object' THEN q.value->>'prefix' ELSE NULL END
99FROM "graphql_source" s, jsonb_each(s."query_params") q
100WHERE s."query_params" IS NOT NULL
101ON CONFLICT DO NOTHING;--> statement-breakpoint
102
103ALTER TABLE "graphql_source" DROP COLUMN "headers";--> statement-breakpoint
104ALTER TABLE "graphql_source" DROP COLUMN "query_params";--> statement-breakpoint
105ALTER TABLE "graphql_source" DROP COLUMN "auth";
106
107--> statement-breakpoint
108
109-- ============================================================
110-- openapi
111-- ============================================================
112
113-- Normalize openapi plugin: move every direct secret/connection ref out
114-- of JSON columns into proper relational shape. pg port of
115-- apps/local/drizzle/0008_normalize_openapi.sql.
116
117CREATE TABLE "openapi_source_query_param" (
118 "id" text NOT NULL,
119 "scope_id" text NOT NULL,
120 "source_id" text NOT NULL,
121 "name" text NOT NULL,
122 "kind" text NOT NULL,
123 "text_value" text,
124 "secret_id" text,
125 "secret_prefix" text,
126 CONSTRAINT "openapi_source_query_param_scope_id_id_pk" PRIMARY KEY("scope_id","id")
127);
128--> statement-breakpoint
129CREATE INDEX "openapi_source_query_param_scope_id_idx" ON "openapi_source_query_param" USING btree ("scope_id");--> statement-breakpoint
130CREATE INDEX "openapi_source_query_param_source_id_idx" ON "openapi_source_query_param" USING btree ("source_id");--> statement-breakpoint
131CREATE INDEX "openapi_source_query_param_secret_id_idx" ON "openapi_source_query_param" USING btree ("secret_id");--> statement-breakpoint
132
133CREATE TABLE "openapi_source_spec_fetch_header" (
134 "id" text NOT NULL,
135 "scope_id" text NOT NULL,
136 "source_id" text NOT NULL,
137 "name" text NOT NULL,
138 "kind" text NOT NULL,
139 "text_value" text,
140 "secret_id" text,
141 "secret_prefix" text,
142 CONSTRAINT "openapi_source_spec_fetch_header_scope_id_id_pk" PRIMARY KEY("scope_id","id")
143);
144--> statement-breakpoint
145CREATE INDEX "openapi_source_spec_fetch_header_scope_id_idx" ON "openapi_source_spec_fetch_header" USING btree ("scope_id");--> statement-breakpoint
146CREATE INDEX "openapi_source_spec_fetch_header_source_id_idx" ON "openapi_source_spec_fetch_header" USING btree ("source_id");--> statement-breakpoint
147CREATE INDEX "openapi_source_spec_fetch_header_secret_id_idx" ON "openapi_source_spec_fetch_header" USING btree ("secret_id");--> statement-breakpoint
148
149CREATE TABLE "openapi_source_spec_fetch_query_param" (
150 "id" text NOT NULL,
151 "scope_id" text NOT NULL,
152 "source_id" text NOT NULL,
153 "name" text NOT NULL,
154 "kind" text NOT NULL,
155 "text_value" text,
156 "secret_id" text,
157 "secret_prefix" text,
158 CONSTRAINT "openapi_source_spec_fetch_query_param_scope_id_id_pk" PRIMARY KEY("scope_id","id")
159);
160--> statement-breakpoint
161CREATE INDEX "openapi_source_spec_fetch_query_param_scope_id_idx" ON "openapi_source_spec_fetch_query_param" USING btree ("scope_id");--> statement-breakpoint
162CREATE INDEX "openapi_source_spec_fetch_query_param_source_id_idx" ON "openapi_source_spec_fetch_query_param" USING btree ("source_id");--> statement-breakpoint
163CREATE INDEX "openapi_source_spec_fetch_query_param_secret_id_idx" ON "openapi_source_spec_fetch_query_param" USING btree ("secret_id");--> statement-breakpoint
164
165-- New columns on openapi_source_binding to flatten the value json.
166-- `kind` defaults to 'text' so the ALTER works on existing rows; the
167-- backfill below stamps the real value.
168ALTER TABLE "openapi_source_binding" ADD COLUMN "kind" text DEFAULT 'text' NOT NULL;--> statement-breakpoint
169ALTER TABLE "openapi_source_binding" ADD COLUMN "secret_id" text;--> statement-breakpoint
170ALTER TABLE "openapi_source_binding" ADD COLUMN "connection_id" text;--> statement-breakpoint
171ALTER TABLE "openapi_source_binding" ADD COLUMN "text_value" text;--> statement-breakpoint
172CREATE INDEX "openapi_source_binding_secret_id_idx" ON "openapi_source_binding" USING btree ("secret_id");--> statement-breakpoint
173CREATE INDEX "openapi_source_binding_connection_id_idx" ON "openapi_source_binding" USING btree ("connection_id");--> statement-breakpoint
174
175UPDATE "openapi_source_binding"
176SET
177 "kind" = COALESCE("value"->>'kind', 'text'),
178 "secret_id" = CASE WHEN "value"->>'kind' = 'secret' THEN "value"->>'secretId' ELSE NULL END,
179 "connection_id" = CASE WHEN "value"->>'kind' = 'connection' THEN "value"->>'connectionId' ELSE NULL END,
180 "text_value" = CASE WHEN "value"->>'kind' = 'text' THEN "value"->>'text' ELSE NULL END
181WHERE "value" IS NOT NULL;--> statement-breakpoint
182
183INSERT INTO "openapi_source_query_param"
184 ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
185SELECT
186 s."scope_id",
187 '[' || to_jsonb(s."id")::text || ',' || to_jsonb(q.key)::text || ']',
188 s."id",
189 q.key,
190 CASE
191 WHEN jsonb_typeof(q.value) = 'object' AND q.value ? 'secretId' THEN 'secret'
192 ELSE 'text'
193 END,
194 CASE WHEN jsonb_typeof(q.value) = 'string' THEN q.value #>> '{}' ELSE NULL END,
195 CASE WHEN jsonb_typeof(q.value) = 'object' THEN q.value->>'secretId' ELSE NULL END,
196 CASE WHEN jsonb_typeof(q.value) = 'object' THEN q.value->>'prefix' ELSE NULL END
197FROM "openapi_source" s, jsonb_each(s."query_params") q
198WHERE s."query_params" IS NOT NULL
199ON CONFLICT DO NOTHING;--> statement-breakpoint
200
201INSERT INTO "openapi_source_spec_fetch_header"
202 ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
203SELECT
204 s."scope_id",
205 '[' || to_jsonb(s."id")::text || ',' || to_jsonb(h.key)::text || ']',
206 s."id",
207 h.key,
208 CASE
209 WHEN jsonb_typeof(h.value) = 'object' AND h.value ? 'secretId' THEN 'secret'
210 ELSE 'text'
211 END,
212 CASE WHEN jsonb_typeof(h.value) = 'string' THEN h.value #>> '{}' ELSE NULL END,
213 CASE WHEN jsonb_typeof(h.value) = 'object' THEN h.value->>'secretId' ELSE NULL END,
214 CASE WHEN jsonb_typeof(h.value) = 'object' THEN h.value->>'prefix' ELSE NULL END
215FROM "openapi_source" s, jsonb_each(s."invocation_config"->'specFetchCredentials'->'headers') h
216WHERE s."invocation_config"->'specFetchCredentials'->'headers' IS NOT NULL
217ON CONFLICT DO NOTHING;--> statement-breakpoint
218
219INSERT INTO "openapi_source_spec_fetch_query_param"
220 ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
221SELECT
222 s."scope_id",
223 '[' || to_jsonb(s."id")::text || ',' || to_jsonb(q.key)::text || ']',
224 s."id",
225 q.key,
226 CASE
227 WHEN jsonb_typeof(q.value) = 'object' AND q.value ? 'secretId' THEN 'secret'
228 ELSE 'text'
229 END,
230 CASE WHEN jsonb_typeof(q.value) = 'string' THEN q.value #>> '{}' ELSE NULL END,
231 CASE WHEN jsonb_typeof(q.value) = 'object' THEN q.value->>'secretId' ELSE NULL END,
232 CASE WHEN jsonb_typeof(q.value) = 'object' THEN q.value->>'prefix' ELSE NULL END
233FROM "openapi_source" s, jsonb_each(s."invocation_config"->'specFetchCredentials'->'queryParams') q
234WHERE s."invocation_config"->'specFetchCredentials'->'queryParams' IS NOT NULL
235ON CONFLICT DO NOTHING;--> statement-breakpoint
236
237-- Preserve any legacy OAuth payload from invocation_config.oauth2 into
238-- the still-existing oauth2 column before we drop invocation_config.
239-- migrateLegacyConnections runs after drizzle migrations and reads
240-- oauth2 to detect the legacy shape; without this, rows that only had
241-- their OAuth payload under invocation_config.oauth2 would lose it.
242UPDATE "openapi_source"
243SET "oauth2" = "invocation_config"->'oauth2'
244WHERE "oauth2" IS NULL
245 AND "invocation_config"->'oauth2' IS NOT NULL;--> statement-breakpoint
246
247ALTER TABLE "openapi_source_binding" DROP COLUMN "value";--> statement-breakpoint
248ALTER TABLE "openapi_source" DROP COLUMN "query_params";--> statement-breakpoint
249ALTER TABLE "openapi_source" DROP COLUMN "invocation_config";
250
251--> statement-breakpoint
252
253-- ============================================================
254-- mcp
255-- ============================================================
256
257-- Normalize mcp plugin: lift the McpConnectionAuth secret/connection
258-- refs and the SecretBackedMap headers/query_params out of
259-- mcp_source.config JSON into proper columns / child tables. pg port
260-- of apps/local/drizzle/0009_normalize_mcp.sql.
261
262CREATE TABLE "mcp_source_header" (
263 "id" text NOT NULL,
264 "scope_id" text NOT NULL,
265 "source_id" text NOT NULL,
266 "name" text NOT NULL,
267 "kind" text NOT NULL,
268 "text_value" text,
269 "secret_id" text,
270 "secret_prefix" text,
271 CONSTRAINT "mcp_source_header_scope_id_id_pk" PRIMARY KEY("scope_id","id")
272);
273--> statement-breakpoint
274CREATE INDEX "mcp_source_header_scope_id_idx" ON "mcp_source_header" USING btree ("scope_id");--> statement-breakpoint
275CREATE INDEX "mcp_source_header_source_id_idx" ON "mcp_source_header" USING btree ("source_id");--> statement-breakpoint
276CREATE INDEX "mcp_source_header_secret_id_idx" ON "mcp_source_header" USING btree ("secret_id");--> statement-breakpoint
277
278CREATE TABLE "mcp_source_query_param" (
279 "id" text NOT NULL,
280 "scope_id" text NOT NULL,
281 "source_id" text NOT NULL,
282 "name" text NOT NULL,
283 "kind" text NOT NULL,
284 "text_value" text,
285 "secret_id" text,
286 "secret_prefix" text,
287 CONSTRAINT "mcp_source_query_param_scope_id_id_pk" PRIMARY KEY("scope_id","id")
288);
289--> statement-breakpoint
290CREATE INDEX "mcp_source_query_param_scope_id_idx" ON "mcp_source_query_param" USING btree ("scope_id");--> statement-breakpoint
291CREATE INDEX "mcp_source_query_param_source_id_idx" ON "mcp_source_query_param" USING btree ("source_id");--> statement-breakpoint
292CREATE INDEX "mcp_source_query_param_secret_id_idx" ON "mcp_source_query_param" USING btree ("secret_id");--> statement-breakpoint
293
294ALTER TABLE "mcp_source" ADD COLUMN "auth_kind" text DEFAULT 'none' NOT NULL;--> statement-breakpoint
295ALTER TABLE "mcp_source" ADD COLUMN "auth_header_name" text;--> statement-breakpoint
296ALTER TABLE "mcp_source" ADD COLUMN "auth_secret_id" text;--> statement-breakpoint
297ALTER TABLE "mcp_source" ADD COLUMN "auth_secret_prefix" text;--> statement-breakpoint
298ALTER TABLE "mcp_source" ADD COLUMN "auth_connection_id" text;--> statement-breakpoint
299ALTER TABLE "mcp_source" ADD COLUMN "auth_client_id_secret_id" text;--> statement-breakpoint
300ALTER TABLE "mcp_source" ADD COLUMN "auth_client_secret_secret_id" text;--> statement-breakpoint
301CREATE INDEX "mcp_source_auth_secret_id_idx" ON "mcp_source" USING btree ("auth_secret_id");--> statement-breakpoint
302CREATE INDEX "mcp_source_auth_connection_id_idx" ON "mcp_source" USING btree ("auth_connection_id");--> statement-breakpoint
303CREATE INDEX "mcp_source_auth_client_id_secret_id_idx" ON "mcp_source" USING btree ("auth_client_id_secret_id");--> statement-breakpoint
304CREATE INDEX "mcp_source_auth_client_secret_secret_id_idx" ON "mcp_source" USING btree ("auth_client_secret_secret_id");--> statement-breakpoint
305
306-- Only update rows with explicitly current-shape auth (kind=header w/
307-- secretId, or kind=oauth2 w/ connectionId). Legacy inline-OAuth rows
308-- are left untouched so the post-migrate migrateLegacyConnections
309-- script can convert them to a Connection.
310UPDATE "mcp_source"
311SET
312 "auth_kind" = "config"#>>'{auth,kind}',
313 "auth_header_name" = "config"#>>'{auth,headerName}',
314 "auth_secret_id" = "config"#>>'{auth,secretId}',
315 "auth_secret_prefix" = "config"#>>'{auth,prefix}',
316 "auth_connection_id" = "config"#>>'{auth,connectionId}',
317 "auth_client_id_secret_id" = "config"#>>'{auth,clientIdSecretId}',
318 "auth_client_secret_secret_id" = "config"#>>'{auth,clientSecretSecretId}'
319WHERE "config" IS NOT NULL
320 AND (
321 (
322 "config"#>>'{auth,kind}' = 'header'
323 AND "config"#>>'{auth,secretId}' IS NOT NULL
324 )
325 OR (
326 "config"#>>'{auth,kind}' = 'oauth2'
327 AND "config"#>>'{auth,connectionId}' IS NOT NULL
328 )
329 );--> statement-breakpoint
330
331INSERT INTO "mcp_source_header"
332 ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
333SELECT
334 s."scope_id",
335 '[' || to_jsonb(s."id")::text || ',' || to_jsonb(h.key)::text || ']',
336 s."id",
337 h.key,
338 CASE
339 WHEN jsonb_typeof(h.value) = 'object' AND h.value ? 'secretId' THEN 'secret'
340 ELSE 'text'
341 END,
342 CASE WHEN jsonb_typeof(h.value) = 'string' THEN h.value #>> '{}' ELSE NULL END,
343 CASE WHEN jsonb_typeof(h.value) = 'object' THEN h.value->>'secretId' ELSE NULL END,
344 CASE WHEN jsonb_typeof(h.value) = 'object' THEN h.value->>'prefix' ELSE NULL END
345FROM "mcp_source" s, jsonb_each(s."config"->'headers') h
346WHERE s."config"->'headers' IS NOT NULL
347ON CONFLICT DO NOTHING;--> statement-breakpoint
348
349INSERT INTO "mcp_source_query_param"
350 ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
351SELECT
352 s."scope_id",
353 '[' || to_jsonb(s."id")::text || ',' || to_jsonb(q.key)::text || ']',
354 s."id",
355 q.key,
356 CASE
357 WHEN jsonb_typeof(q.value) = 'object' AND q.value ? 'secretId' THEN 'secret'
358 ELSE 'text'
359 END,
360 CASE WHEN jsonb_typeof(q.value) = 'string' THEN q.value #>> '{}' ELSE NULL END,
361 CASE WHEN jsonb_typeof(q.value) = 'object' THEN q.value->>'secretId' ELSE NULL END,
362 CASE WHEN jsonb_typeof(q.value) = 'object' THEN q.value->>'prefix' ELSE NULL END
363FROM "mcp_source" s, jsonb_each(s."config"->'queryParams') q
364WHERE s."config"->'queryParams' IS NOT NULL
365ON CONFLICT DO NOTHING;--> statement-breakpoint
366
367-- Strip already-copied fields from config JSON. headers/queryParams
368-- are always safe; auth is only stripped on rows whose auth was the
369-- current shape (legacy inline-OAuth rows keep config.auth so
370-- migrateLegacyConnections can mint a Connection from it).
371UPDATE "mcp_source"
372SET "config" = "config" - 'headers' - 'queryParams'
373WHERE "config" IS NOT NULL;--> statement-breakpoint
374
375UPDATE "mcp_source"
376SET "config" = "config" - 'auth'
377WHERE "config" IS NOT NULL
378 AND (
379 "config"#>>'{auth,kind}' = 'none'
380 OR (
381 "config"#>>'{auth,kind}' = 'header'
382 AND "config"#>>'{auth,secretId}' IS NOT NULL
383 )
384 OR (
385 "config"#>>'{auth,kind}' = 'oauth2'
386 AND "config"#>>'{auth,connectionId}' IS NOT NULL
387 )
388 );
apps/cloud/drizzle/0009_scoped_credentials_cutover.sql+0−1116
@@ -1,1116 +0,0 @@
1-- cloud scoped credential/source-slot/OAuth cutover.
2-- Squashes the PR-local migration chain into one runtime schema transition.
3-- 0009_add_credential_binding.sql
4CREATE TABLE "credential_binding" (
5 "id" text NOT NULL,
6 "scope_id" text NOT NULL,
7 "plugin_id" text NOT NULL,
8 "source_id" text NOT NULL,
9 "source_scope_id" text NOT NULL,
10 "slot_key" text NOT NULL,
11 "kind" text NOT NULL,
12 "text_value" text,
13 "secret_id" text,
14 "connection_id" text,
15 "created_at" timestamp NOT NULL,
16 "updated_at" timestamp NOT NULL,
17 CONSTRAINT "credential_binding_scope_id_id_pk" PRIMARY KEY("scope_id","id")
18);
19--> statement-breakpoint
20ALTER TABLE "graphql_source" ALTER COLUMN "auth_kind" SET DEFAULT 'none';--> statement-breakpoint
21ALTER TABLE "openapi_source_binding" ALTER COLUMN "kind" DROP DEFAULT;--> statement-breakpoint
22CREATE INDEX "credential_binding_scope_id_idx" ON "credential_binding" USING btree ("scope_id");--> statement-breakpoint
23CREATE INDEX "credential_binding_plugin_id_idx" ON "credential_binding" USING btree ("plugin_id");--> statement-breakpoint
24CREATE INDEX "credential_binding_source_id_idx" ON "credential_binding" USING btree ("source_id");--> statement-breakpoint
25CREATE INDEX "credential_binding_source_scope_id_idx" ON "credential_binding" USING btree ("source_scope_id");--> statement-breakpoint
26CREATE INDEX "credential_binding_slot_key_idx" ON "credential_binding" USING btree ("slot_key");--> statement-breakpoint
27CREATE INDEX "credential_binding_kind_idx" ON "credential_binding" USING btree ("kind");--> statement-breakpoint
28CREATE INDEX "credential_binding_secret_id_idx" ON "credential_binding" USING btree ("secret_id");--> statement-breakpoint
29CREATE INDEX "credential_binding_connection_id_idx" ON "credential_binding" USING btree ("connection_id");--> statement-breakpoint
30
31CREATE FUNCTION pg_temp.executor_credential_binding_id(plugin_id text, source_scope_id text, source_id text, slot_key text)
32RETURNS text
33LANGUAGE sql
34IMMUTABLE
35AS $$
36 SELECT '[' || to_jsonb($1)::text || ',' || to_jsonb($2)::text || ',' || to_jsonb($3)::text || ',' || to_jsonb($4)::text || ']'
37$$;--> statement-breakpoint
38
39-- 0010_migrate_openapi_source_bindings.sql
40INSERT INTO "credential_binding" (
41 "id",
42 "scope_id",
43 "plugin_id",
44 "source_id",
45 "source_scope_id",
46 "slot_key",
47 "kind",
48 "text_value",
49 "secret_id",
50 "connection_id",
51 "created_at",
52 "updated_at"
53)
54SELECT
55 pg_temp.executor_credential_binding_id('openapi', "source_scope_id", "source_id", "slot"),
56 "target_scope_id",
57 'openapi',
58 "source_id",
59 "source_scope_id",
60 "slot",
61 "kind",
62 "text_value",
63 "secret_id",
64 "connection_id",
65 "created_at",
66 "updated_at"
67FROM "openapi_source_binding"
68ON CONFLICT ("scope_id", "id") DO UPDATE SET
69 "plugin_id" = excluded."plugin_id",
70 "source_id" = excluded."source_id",
71 "source_scope_id" = excluded."source_scope_id",
72 "slot_key" = excluded."slot_key",
73 "kind" = excluded."kind",
74 "text_value" = excluded."text_value",
75 "secret_id" = excluded."secret_id",
76 "connection_id" = excluded."connection_id",
77 "updated_at" = excluded."updated_at";--> statement-breakpoint
78DROP TABLE "openapi_source_binding" CASCADE;--> statement-breakpoint
79
80-- 0011_openapi_credential_slots.sql
81-- Convert OpenAPI's remaining direct credential references to source-owned
82-- slot structure plus shared core credential_binding rows. Runtime code only
83-- reads the final slot model; this migration is the one-shot bridge.
84
85CREATE TEMP TABLE "__openapi_header_slot_preflight" (
86 "scope_id" text NOT NULL,
87 "source_id" text NOT NULL,
88 "slot_key" text NOT NULL,
89 PRIMARY KEY ("scope_id", "source_id", "slot_key")
90) ON COMMIT DROP;--> statement-breakpoint
91
92INSERT INTO "__openapi_header_slot_preflight" ("scope_id", "source_id", "slot_key")
93SELECT
94 s."scope_id",
95 s."id",
96 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(h.key), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key"
97FROM "openapi_source" s, jsonb_each(s."headers") h
98WHERE s."headers" IS NOT NULL
99 AND jsonb_typeof(h.value) = 'object'
100 AND NOT (h.value ? 'kind')
101 AND h.value ? 'secretId';--> statement-breakpoint
102
103DROP TABLE "__openapi_header_slot_preflight";--> statement-breakpoint
104
105WITH header_rows AS (
106 SELECT
107 s."scope_id",
108 s."id" AS "source_id",
109 h.key AS "name",
110 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(h.key), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key",
111 h.value->>'secretId' AS "secret_id"
112 FROM "openapi_source" s, jsonb_each(s."headers") h
113 WHERE s."headers" IS NOT NULL
114 AND jsonb_typeof(h.value) = 'object'
115 AND NOT (h.value ? 'kind')
116 AND h.value ? 'secretId'
117)
118INSERT INTO "credential_binding" (
119 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
120 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
121)
122SELECT
123 pg_temp.executor_credential_binding_id('openapi', r."scope_id", r."source_id", r."slot_key"),
124 r."scope_id",
125 'openapi',
126 r."source_id",
127 r."scope_id",
128 r."slot_key",
129 'secret',
130 NULL,
131 r."secret_id",
132 NULL,
133 now(),
134 now()
135FROM header_rows r
136WHERE NOT EXISTS (
137 SELECT 1 FROM "credential_binding" b
138 WHERE b."scope_id" = r."scope_id"
139 AND b."plugin_id" = 'openapi'
140 AND b."source_id" = r."source_id"
141 AND b."source_scope_id" = r."scope_id"
142 AND b."slot_key" = r."slot_key"
143)
144ON CONFLICT DO NOTHING;--> statement-breakpoint
145
146UPDATE "openapi_source" s
147SET "headers" = (
148 SELECT jsonb_object_agg(
149 h.key,
150 CASE
151 WHEN jsonb_typeof(h.value) = 'object'
152 AND NOT (h.value ? 'kind')
153 AND h.value ? 'secretId'
154 THEN jsonb_strip_nulls(jsonb_build_object(
155 'kind', 'binding',
156 'slot', 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(h.key), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default'),
157 'prefix', h.value->>'prefix'
158 ))
159 ELSE h.value
160 END
161 )
162 FROM jsonb_each(s."headers") h
163)
164WHERE s."headers" IS NOT NULL;--> statement-breakpoint
165
166WITH oauth_rows AS (
167 SELECT
168 s."scope_id",
169 s."id" AS "source_id",
170 'oauth2:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(s."oauth2"->>'securitySchemeName'), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') || ':client-id' AS "client_id_slot",
171 s."oauth2"->>'clientIdSecretId' AS "client_id_secret_id"
172 FROM "openapi_source" s
173 WHERE s."oauth2" IS NOT NULL
174 AND s."oauth2"->>'connectionId' IS NOT NULL
175 AND s."oauth2"->>'clientIdSecretId' IS NOT NULL
176)
177INSERT INTO "credential_binding" (
178 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
179 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
180)
181SELECT
182 pg_temp.executor_credential_binding_id('openapi', r."scope_id", r."source_id", r."client_id_slot"),
183 r."scope_id",
184 'openapi',
185 r."source_id",
186 r."scope_id",
187 r."client_id_slot",
188 'secret',
189 NULL,
190 r."client_id_secret_id",
191 NULL,
192 now(),
193 now()
194FROM oauth_rows r
195WHERE NOT EXISTS (
196 SELECT 1 FROM "credential_binding" b
197 WHERE b."scope_id" = r."scope_id"
198 AND b."plugin_id" = 'openapi'
199 AND b."source_id" = r."source_id"
200 AND b."source_scope_id" = r."scope_id"
201 AND b."slot_key" = r."client_id_slot"
202)
203ON CONFLICT DO NOTHING;--> statement-breakpoint
204
205WITH oauth_rows AS (
206 SELECT
207 s."scope_id",
208 s."id" AS "source_id",
209 'oauth2:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(s."oauth2"->>'securitySchemeName'), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') || ':client-secret' AS "client_secret_slot",
210 s."oauth2"->>'clientSecretSecretId' AS "client_secret_secret_id"
211 FROM "openapi_source" s
212 WHERE s."oauth2" IS NOT NULL
213 AND s."oauth2"->>'connectionId' IS NOT NULL
214 AND s."oauth2"->>'clientSecretSecretId' IS NOT NULL
215)
216INSERT INTO "credential_binding" (
217 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
218 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
219)
220SELECT
221 pg_temp.executor_credential_binding_id('openapi', r."scope_id", r."source_id", r."client_secret_slot"),
222 r."scope_id",
223 'openapi',
224 r."source_id",
225 r."scope_id",
226 r."client_secret_slot",
227 'secret',
228 NULL,
229 r."client_secret_secret_id",
230 NULL,
231 now(),
232 now()
233FROM oauth_rows r
234WHERE NOT EXISTS (
235 SELECT 1 FROM "credential_binding" b
236 WHERE b."scope_id" = r."scope_id"
237 AND b."plugin_id" = 'openapi'
238 AND b."source_id" = r."source_id"
239 AND b."source_scope_id" = r."scope_id"
240 AND b."slot_key" = r."client_secret_slot"
241)
242ON CONFLICT DO NOTHING;--> statement-breakpoint
243
244WITH oauth_rows AS (
245 SELECT
246 s."scope_id",
247 s."id" AS "source_id",
248 'oauth2:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(s."oauth2"->>'securitySchemeName'), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') || ':connection' AS "connection_slot",
249 s."oauth2"->>'connectionId' AS "connection_id"
250 FROM "openapi_source" s
251 WHERE s."oauth2" IS NOT NULL
252 AND s."oauth2"->>'connectionId' IS NOT NULL
253)
254INSERT INTO "credential_binding" (
255 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
256 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
257)
258SELECT
259 pg_temp.executor_credential_binding_id('openapi', r."scope_id", r."source_id", r."connection_slot"),
260 r."scope_id",
261 'openapi',
262 r."source_id",
263 r."scope_id",
264 r."connection_slot",
265 'connection',
266 NULL,
267 NULL,
268 r."connection_id",
269 now(),
270 now()
271FROM oauth_rows r
272WHERE NOT EXISTS (
273 SELECT 1 FROM "credential_binding" b
274 WHERE b."scope_id" = r."scope_id"
275 AND b."plugin_id" = 'openapi'
276 AND b."source_id" = r."source_id"
277 AND b."source_scope_id" = r."scope_id"
278 AND b."slot_key" = r."connection_slot"
279)
280ON CONFLICT DO NOTHING;--> statement-breakpoint
281
282UPDATE "openapi_source" s
283SET "oauth2" = jsonb_build_object(
284 'kind', 'oauth2',
285 'securitySchemeName', s."oauth2"->>'securitySchemeName',
286 'flow', s."oauth2"->>'flow',
287 'tokenUrl', s."oauth2"->>'tokenUrl',
288 'authorizationUrl', s."oauth2"->'authorizationUrl',
289 'issuerUrl', s."oauth2"->'issuerUrl',
290 'clientIdSlot', 'oauth2:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(s."oauth2"->>'securitySchemeName'), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') || ':client-id',
291 'clientSecretSlot',
292 CASE
293 WHEN s."oauth2"->>'clientSecretSecretId' IS NULL THEN NULL
294 ELSE 'oauth2:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(s."oauth2"->>'securitySchemeName'), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') || ':client-secret'
295 END,
296 'connectionSlot', 'oauth2:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(s."oauth2"->>'securitySchemeName'), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') || ':connection',
297 'scopes', COALESCE(s."oauth2"->'scopes', '[]'::jsonb)
298)
299WHERE s."oauth2" IS NOT NULL
300 AND s."oauth2"->>'connectionId' IS NOT NULL;--> statement-breakpoint
301
302CREATE TEMP TABLE "__openapi_query_param_slot_preflight" (
303 "scope_id" text NOT NULL,
304 "source_id" text NOT NULL,
305 "slot_key" text NOT NULL,
306 PRIMARY KEY ("scope_id", "source_id", "slot_key")
307) ON COMMIT DROP;--> statement-breakpoint
308
309INSERT INTO "__openapi_query_param_slot_preflight" ("scope_id", "source_id", "slot_key")
310SELECT
311 r."scope_id",
312 r."source_id",
313 'query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(r."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key"
314FROM "openapi_source_query_param" r
315WHERE r."kind" = 'secret' AND r."secret_id" IS NOT NULL;--> statement-breakpoint
316
317DROP TABLE "__openapi_query_param_slot_preflight";--> statement-breakpoint
318
319WITH rows AS (
320 SELECT
321 r."scope_id",
322 r."source_id",
323 'query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(r."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key",
324 r."secret_id"
325 FROM "openapi_source_query_param" r
326 WHERE r."kind" = 'secret' AND r."secret_id" IS NOT NULL
327)
328INSERT INTO "credential_binding" (
329 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
330 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
331)
332SELECT
333 pg_temp.executor_credential_binding_id('openapi', r."scope_id", r."source_id", r."slot_key"),
334 r."scope_id",
335 'openapi',
336 r."source_id",
337 r."scope_id",
338 r."slot_key",
339 'secret',
340 NULL,
341 r."secret_id",
342 NULL,
343 now(),
344 now()
345FROM rows r
346WHERE NOT EXISTS (
347 SELECT 1 FROM "credential_binding" b
348 WHERE b."scope_id" = r."scope_id"
349 AND b."plugin_id" = 'openapi'
350 AND b."source_id" = r."source_id"
351 AND b."source_scope_id" = r."scope_id"
352 AND b."slot_key" = r."slot_key"
353)
354ON CONFLICT DO NOTHING;--> statement-breakpoint
355
356ALTER TABLE "openapi_source_query_param" ADD COLUMN "slot_key" text;--> statement-breakpoint
357ALTER TABLE "openapi_source_query_param" ADD COLUMN "prefix" text;--> statement-breakpoint
358UPDATE "openapi_source_query_param"
359SET
360 "slot_key" = 'query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim("name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default'),
361 "prefix" = "secret_prefix",
362 "kind" = 'binding'
363WHERE "kind" = 'secret';--> statement-breakpoint
364DROP INDEX IF EXISTS "openapi_source_query_param_secret_id_idx";--> statement-breakpoint
365ALTER TABLE "openapi_source_query_param" DROP COLUMN "secret_id";--> statement-breakpoint
366ALTER TABLE "openapi_source_query_param" DROP COLUMN "secret_prefix";--> statement-breakpoint
367
368CREATE TEMP TABLE "__openapi_spec_fetch_header_slot_preflight" (
369 "scope_id" text NOT NULL,
370 "source_id" text NOT NULL,
371 "slot_key" text NOT NULL,
372 PRIMARY KEY ("scope_id", "source_id", "slot_key")
373) ON COMMIT DROP;--> statement-breakpoint
374
375INSERT INTO "__openapi_spec_fetch_header_slot_preflight" ("scope_id", "source_id", "slot_key")
376SELECT
377 r."scope_id",
378 r."source_id",
379 'spec_fetch_header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(r."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key"
380FROM "openapi_source_spec_fetch_header" r
381WHERE r."kind" = 'secret' AND r."secret_id" IS NOT NULL;--> statement-breakpoint
382
383DROP TABLE "__openapi_spec_fetch_header_slot_preflight";--> statement-breakpoint
384
385WITH rows AS (
386 SELECT
387 r."scope_id",
388 r."source_id",
389 'spec_fetch_header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(r."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key",
390 r."secret_id"
391 FROM "openapi_source_spec_fetch_header" r
392 WHERE r."kind" = 'secret' AND r."secret_id" IS NOT NULL
393)
394INSERT INTO "credential_binding" (
395 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
396 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
397)
398SELECT
399 pg_temp.executor_credential_binding_id('openapi', r."scope_id", r."source_id", r."slot_key"),
400 r."scope_id",
401 'openapi',
402 r."source_id",
403 r."scope_id",
404 r."slot_key",
405 'secret',
406 NULL,
407 r."secret_id",
408 NULL,
409 now(),
410 now()
411FROM rows r
412WHERE NOT EXISTS (
413 SELECT 1 FROM "credential_binding" b
414 WHERE b."scope_id" = r."scope_id"
415 AND b."plugin_id" = 'openapi'
416 AND b."source_id" = r."source_id"
417 AND b."source_scope_id" = r."scope_id"
418 AND b."slot_key" = r."slot_key"
419)
420ON CONFLICT DO NOTHING;--> statement-breakpoint
421
422ALTER TABLE "openapi_source_spec_fetch_header" ADD COLUMN "slot_key" text;--> statement-breakpoint
423ALTER TABLE "openapi_source_spec_fetch_header" ADD COLUMN "prefix" text;--> statement-breakpoint
424UPDATE "openapi_source_spec_fetch_header"
425SET
426 "slot_key" = 'spec_fetch_header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim("name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default'),
427 "prefix" = "secret_prefix",
428 "kind" = 'binding'
429WHERE "kind" = 'secret';--> statement-breakpoint
430DROP INDEX IF EXISTS "openapi_source_spec_fetch_header_secret_id_idx";--> statement-breakpoint
431ALTER TABLE "openapi_source_spec_fetch_header" DROP COLUMN "secret_id";--> statement-breakpoint
432ALTER TABLE "openapi_source_spec_fetch_header" DROP COLUMN "secret_prefix";--> statement-breakpoint
433
434CREATE TEMP TABLE "__openapi_spec_fetch_query_param_slot_preflight" (
435 "scope_id" text NOT NULL,
436 "source_id" text NOT NULL,
437 "slot_key" text NOT NULL,
438 PRIMARY KEY ("scope_id", "source_id", "slot_key")
439) ON COMMIT DROP;--> statement-breakpoint
440
441INSERT INTO "__openapi_spec_fetch_query_param_slot_preflight" ("scope_id", "source_id", "slot_key")
442SELECT
443 r."scope_id",
444 r."source_id",
445 'spec_fetch_query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(r."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key"
446FROM "openapi_source_spec_fetch_query_param" r
447WHERE r."kind" = 'secret' AND r."secret_id" IS NOT NULL;--> statement-breakpoint
448
449DROP TABLE "__openapi_spec_fetch_query_param_slot_preflight";--> statement-breakpoint
450
451WITH rows AS (
452 SELECT
453 r."scope_id",
454 r."source_id",
455 'spec_fetch_query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(r."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key",
456 r."secret_id"
457 FROM "openapi_source_spec_fetch_query_param" r
458 WHERE r."kind" = 'secret' AND r."secret_id" IS NOT NULL
459)
460INSERT INTO "credential_binding" (
461 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
462 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
463)
464SELECT
465 pg_temp.executor_credential_binding_id('openapi', r."scope_id", r."source_id", r."slot_key"),
466 r."scope_id",
467 'openapi',
468 r."source_id",
469 r."scope_id",
470 r."slot_key",
471 'secret',
472 NULL,
473 r."secret_id",
474 NULL,
475 now(),
476 now()
477FROM rows r
478WHERE NOT EXISTS (
479 SELECT 1 FROM "credential_binding" b
480 WHERE b."scope_id" = r."scope_id"
481 AND b."plugin_id" = 'openapi'
482 AND b."source_id" = r."source_id"
483 AND b."source_scope_id" = r."scope_id"
484 AND b."slot_key" = r."slot_key"
485)
486ON CONFLICT DO NOTHING;--> statement-breakpoint
487
488ALTER TABLE "openapi_source_spec_fetch_query_param" ADD COLUMN "slot_key" text;--> statement-breakpoint
489ALTER TABLE "openapi_source_spec_fetch_query_param" ADD COLUMN "prefix" text;--> statement-breakpoint
490UPDATE "openapi_source_spec_fetch_query_param"
491SET
492 "slot_key" = 'spec_fetch_query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim("name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default'),
493 "prefix" = "secret_prefix",
494 "kind" = 'binding'
495WHERE "kind" = 'secret';--> statement-breakpoint
496DROP INDEX IF EXISTS "openapi_source_spec_fetch_query_param_secret_id_idx";--> statement-breakpoint
497ALTER TABLE "openapi_source_spec_fetch_query_param" DROP COLUMN "secret_id";--> statement-breakpoint
498ALTER TABLE "openapi_source_spec_fetch_query_param" DROP COLUMN "secret_prefix";--> statement-breakpoint
499
500-- 0012_graphql_credential_slots.sql
501-- Convert GraphQL's direct credential references to source-owned slot
502-- structure plus shared core credential_binding rows. Runtime code only
503-- reads the final slot model; this migration is the one-shot bridge.
504
505DROP INDEX "graphql_source_auth_connection_id_idx";--> statement-breakpoint
506DROP INDEX "graphql_source_header_secret_id_idx";--> statement-breakpoint
507DROP INDEX "graphql_source_query_param_secret_id_idx";--> statement-breakpoint
508
509ALTER TABLE "graphql_source" ADD COLUMN "auth_connection_slot" text;--> statement-breakpoint
510
511UPDATE "graphql_source"
512SET "auth_connection_slot" = 'auth:oauth2:connection'
513WHERE "auth_kind" = 'oauth2'
514 AND "auth_connection_id" IS NOT NULL;--> statement-breakpoint
515
516INSERT INTO "credential_binding" (
517 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
518 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
519)
520SELECT
521 pg_temp.executor_credential_binding_id('graphql', s."scope_id", s."id", 'auth:oauth2:connection'),
522 s."scope_id",
523 'graphql',
524 s."id",
525 s."scope_id",
526 'auth:oauth2:connection',
527 'connection',
528 NULL,
529 NULL,
530 s."auth_connection_id",
531 now(),
532 now()
533FROM "graphql_source" s
534WHERE s."auth_kind" = 'oauth2'
535 AND s."auth_connection_id" IS NOT NULL
536ON CONFLICT DO NOTHING;--> statement-breakpoint
537
538ALTER TABLE "graphql_source" DROP COLUMN "auth_connection_id";--> statement-breakpoint
539
540ALTER TABLE "graphql_source_header" ADD COLUMN "slot_key" text;--> statement-breakpoint
541ALTER TABLE "graphql_source_header" ADD COLUMN "prefix" text;--> statement-breakpoint
542
543CREATE TEMP TABLE "__graphql_header_slot_preflight" (
544 "scope_id" text NOT NULL,
545 "source_id" text NOT NULL,
546 "slot_key" text NOT NULL,
547 PRIMARY KEY ("scope_id", "source_id", "slot_key")
548) ON COMMIT DROP;--> statement-breakpoint
549
550INSERT INTO "__graphql_header_slot_preflight" ("scope_id", "source_id", "slot_key")
551SELECT
552 h."scope_id",
553 h."source_id",
554 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(h."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key"
555FROM "graphql_source_header" h
556WHERE h."kind" = 'secret'
557 AND h."secret_id" IS NOT NULL;--> statement-breakpoint
558
559DROP TABLE "__graphql_header_slot_preflight";--> statement-breakpoint
560
561WITH header_rows AS (
562 SELECT
563 h."scope_id",
564 h."source_id",
565 h."name",
566 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(h."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key",
567 h."secret_id",
568 h."secret_prefix"
569 FROM "graphql_source_header" h
570 WHERE h."kind" = 'secret'
571 AND h."secret_id" IS NOT NULL
572)
573INSERT INTO "credential_binding" (
574 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
575 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
576)
577SELECT
578 pg_temp.executor_credential_binding_id('graphql', r."scope_id", r."source_id", r."slot_key"),
579 r."scope_id",
580 'graphql',
581 r."source_id",
582 r."scope_id",
583 r."slot_key",
584 'secret',
585 NULL,
586 r."secret_id",
587 NULL,
588 now(),
589 now()
590FROM header_rows r
591ON CONFLICT DO NOTHING;--> statement-breakpoint
592
593UPDATE "graphql_source_header"
594SET
595 "kind" = 'binding',
596 "slot_key" = 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim("name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default'),
597 "prefix" = "secret_prefix",
598 "text_value" = NULL
599WHERE "kind" = 'secret'
600 AND "secret_id" IS NOT NULL;--> statement-breakpoint
601
602ALTER TABLE "graphql_source_header" DROP COLUMN "secret_id";--> statement-breakpoint
603ALTER TABLE "graphql_source_header" DROP COLUMN "secret_prefix";--> statement-breakpoint
604
605ALTER TABLE "graphql_source_query_param" ADD COLUMN "slot_key" text;--> statement-breakpoint
606ALTER TABLE "graphql_source_query_param" ADD COLUMN "prefix" text;--> statement-breakpoint
607
608CREATE TEMP TABLE "__graphql_query_param_slot_preflight" (
609 "scope_id" text NOT NULL,
610 "source_id" text NOT NULL,
611 "slot_key" text NOT NULL,
612 PRIMARY KEY ("scope_id", "source_id", "slot_key")
613) ON COMMIT DROP;--> statement-breakpoint
614
615INSERT INTO "__graphql_query_param_slot_preflight" ("scope_id", "source_id", "slot_key")
616SELECT
617 q."scope_id",
618 q."source_id",
619 'query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(q."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key"
620FROM "graphql_source_query_param" q
621WHERE q."kind" = 'secret'
622 AND q."secret_id" IS NOT NULL;--> statement-breakpoint
623
624DROP TABLE "__graphql_query_param_slot_preflight";--> statement-breakpoint
625
626WITH query_param_rows AS (
627 SELECT
628 q."scope_id",
629 q."source_id",
630 q."name",
631 'query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(q."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key",
632 q."secret_id",
633 q."secret_prefix"
634 FROM "graphql_source_query_param" q
635 WHERE q."kind" = 'secret'
636 AND q."secret_id" IS NOT NULL
637)
638INSERT INTO "credential_binding" (
639 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
640 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
641)
642SELECT
643 pg_temp.executor_credential_binding_id('graphql', r."scope_id", r."source_id", r."slot_key"),
644 r."scope_id",
645 'graphql',
646 r."source_id",
647 r."scope_id",
648 r."slot_key",
649 'secret',
650 NULL,
651 r."secret_id",
652 NULL,
653 now(),
654 now()
655FROM query_param_rows r
656ON CONFLICT DO NOTHING;--> statement-breakpoint
657
658UPDATE "graphql_source_query_param"
659SET
660 "kind" = 'binding',
661 "slot_key" = 'query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim("name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default'),
662 "prefix" = "secret_prefix",
663 "text_value" = NULL
664WHERE "kind" = 'secret'
665 AND "secret_id" IS NOT NULL;--> statement-breakpoint
666
667ALTER TABLE "graphql_source_query_param" DROP COLUMN "secret_id";--> statement-breakpoint
668ALTER TABLE "graphql_source_query_param" DROP COLUMN "secret_prefix";--> statement-breakpoint
669
670-- 0013_mcp_credential_slots.sql
671-- Convert MCP direct credential references to source-owned slot structure
672-- plus shared core credential_binding rows. Runtime code only reads the
673-- final slot model; this migration is the one-shot bridge from old data.
674
675DROP INDEX "mcp_source_auth_secret_id_idx";--> statement-breakpoint
676DROP INDEX "mcp_source_auth_connection_id_idx";--> statement-breakpoint
677DROP INDEX "mcp_source_auth_client_id_secret_id_idx";--> statement-breakpoint
678DROP INDEX "mcp_source_auth_client_secret_secret_id_idx";--> statement-breakpoint
679DROP INDEX "mcp_source_header_secret_id_idx";--> statement-breakpoint
680DROP INDEX "mcp_source_query_param_secret_id_idx";--> statement-breakpoint
681
682ALTER TABLE "mcp_source" ADD COLUMN "auth_header_slot" text;--> statement-breakpoint
683ALTER TABLE "mcp_source" ADD COLUMN "auth_header_prefix" text;--> statement-breakpoint
684ALTER TABLE "mcp_source" ADD COLUMN "auth_connection_slot" text;--> statement-breakpoint
685ALTER TABLE "mcp_source" ADD COLUMN "auth_client_id_slot" text;--> statement-breakpoint
686ALTER TABLE "mcp_source" ADD COLUMN "auth_client_secret_slot" text;--> statement-breakpoint
687
688UPDATE "mcp_source"
689SET
690 "auth_header_slot" = 'auth:header',
691 "auth_header_prefix" = "auth_secret_prefix"
692WHERE "auth_kind" = 'header'
693 AND "auth_secret_id" IS NOT NULL;--> statement-breakpoint
694
695INSERT INTO "credential_binding" (
696 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
697 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
698)
699SELECT
700 pg_temp.executor_credential_binding_id('mcp', s."scope_id", s."id", 'auth:header'),
701 s."scope_id",
702 'mcp',
703 s."id",
704 s."scope_id",
705 'auth:header',
706 'secret',
707 NULL,
708 s."auth_secret_id",
709 NULL,
710 now(),
711 now()
712FROM "mcp_source" s
713WHERE s."auth_kind" = 'header'
714 AND s."auth_secret_id" IS NOT NULL
715ON CONFLICT DO NOTHING;--> statement-breakpoint
716
717UPDATE "mcp_source"
718SET
719 "auth_connection_slot" = 'auth:oauth2:connection',
720 "auth_client_id_slot" = CASE
721 WHEN "auth_client_id_secret_id" IS NOT NULL THEN 'auth:oauth2:client-id'
722 ELSE NULL
723 END,
724 "auth_client_secret_slot" = CASE
725 WHEN "auth_client_secret_secret_id" IS NOT NULL THEN 'auth:oauth2:client-secret'
726 ELSE NULL
727 END
728WHERE "auth_kind" = 'oauth2'
729 AND "auth_connection_id" IS NOT NULL;--> statement-breakpoint
730
731INSERT INTO "credential_binding" (
732 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
733 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
734)
735SELECT
736 pg_temp.executor_credential_binding_id('mcp', s."scope_id", s."id", 'auth:oauth2:connection'),
737 s."scope_id",
738 'mcp',
739 s."id",
740 s."scope_id",
741 'auth:oauth2:connection',
742 'connection',
743 NULL,
744 NULL,
745 s."auth_connection_id",
746 now(),
747 now()
748FROM "mcp_source" s
749WHERE s."auth_kind" = 'oauth2'
750 AND s."auth_connection_id" IS NOT NULL
751ON CONFLICT DO NOTHING;--> statement-breakpoint
752
753INSERT INTO "credential_binding" (
754 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
755 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
756)
757SELECT
758 pg_temp.executor_credential_binding_id('mcp', s."scope_id", s."id", 'auth:oauth2:client-id'),
759 s."scope_id",
760 'mcp',
761 s."id",
762 s."scope_id",
763 'auth:oauth2:client-id',
764 'secret',
765 NULL,
766 s."auth_client_id_secret_id",
767 NULL,
768 now(),
769 now()
770FROM "mcp_source" s
771WHERE s."auth_kind" = 'oauth2'
772 AND s."auth_client_id_secret_id" IS NOT NULL
773ON CONFLICT DO NOTHING;--> statement-breakpoint
774
775INSERT INTO "credential_binding" (
776 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
777 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
778)
779SELECT
780 pg_temp.executor_credential_binding_id('mcp', s."scope_id", s."id", 'auth:oauth2:client-secret'),
781 s."scope_id",
782 'mcp',
783 s."id",
784 s."scope_id",
785 'auth:oauth2:client-secret',
786 'secret',
787 NULL,
788 s."auth_client_secret_secret_id",
789 NULL,
790 now(),
791 now()
792FROM "mcp_source" s
793WHERE s."auth_kind" = 'oauth2'
794 AND s."auth_client_secret_secret_id" IS NOT NULL
795ON CONFLICT DO NOTHING;--> statement-breakpoint
796
797ALTER TABLE "mcp_source" DROP COLUMN "auth_secret_id";--> statement-breakpoint
798ALTER TABLE "mcp_source" DROP COLUMN "auth_secret_prefix";--> statement-breakpoint
799ALTER TABLE "mcp_source" DROP COLUMN "auth_connection_id";--> statement-breakpoint
800ALTER TABLE "mcp_source" DROP COLUMN "auth_client_id_secret_id";--> statement-breakpoint
801ALTER TABLE "mcp_source" DROP COLUMN "auth_client_secret_secret_id";--> statement-breakpoint
802
803ALTER TABLE "mcp_source_header" ADD COLUMN "slot_key" text;--> statement-breakpoint
804ALTER TABLE "mcp_source_header" ADD COLUMN "prefix" text;--> statement-breakpoint
805
806CREATE TEMP TABLE "__mcp_header_slot_preflight" (
807 "scope_id" text NOT NULL,
808 "source_id" text NOT NULL,
809 "slot_key" text NOT NULL,
810 PRIMARY KEY ("scope_id", "source_id", "slot_key")
811) ON COMMIT DROP;--> statement-breakpoint
812
813INSERT INTO "__mcp_header_slot_preflight" ("scope_id", "source_id", "slot_key")
814SELECT
815 h."scope_id",
816 h."source_id",
817 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(h."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key"
818FROM "mcp_source_header" h
819WHERE h."kind" = 'secret'
820 AND h."secret_id" IS NOT NULL;--> statement-breakpoint
821
822DROP TABLE "__mcp_header_slot_preflight";--> statement-breakpoint
823
824WITH header_rows AS (
825 SELECT
826 h."scope_id",
827 h."source_id",
828 h."name",
829 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(h."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key",
830 h."secret_id",
831 h."secret_prefix"
832 FROM "mcp_source_header" h
833 WHERE h."kind" = 'secret'
834 AND h."secret_id" IS NOT NULL
835)
836INSERT INTO "credential_binding" (
837 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
838 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
839)
840SELECT
841 pg_temp.executor_credential_binding_id('mcp', r."scope_id", r."source_id", r."slot_key"),
842 r."scope_id",
843 'mcp',
844 r."source_id",
845 r."scope_id",
846 r."slot_key",
847 'secret',
848 NULL,
849 r."secret_id",
850 NULL,
851 now(),
852 now()
853FROM header_rows r
854ON CONFLICT DO NOTHING;--> statement-breakpoint
855
856UPDATE "mcp_source_header"
857SET
858 "kind" = 'binding',
859 "slot_key" = 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim("name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default'),
860 "prefix" = "secret_prefix",
861 "text_value" = NULL
862WHERE "kind" = 'secret'
863 AND "secret_id" IS NOT NULL;--> statement-breakpoint
864
865ALTER TABLE "mcp_source_header" DROP COLUMN "secret_id";--> statement-breakpoint
866ALTER TABLE "mcp_source_header" DROP COLUMN "secret_prefix";--> statement-breakpoint
867
868ALTER TABLE "mcp_source_query_param" ADD COLUMN "slot_key" text;--> statement-breakpoint
869ALTER TABLE "mcp_source_query_param" ADD COLUMN "prefix" text;--> statement-breakpoint
870
871CREATE TEMP TABLE "__mcp_query_param_slot_preflight" (
872 "scope_id" text NOT NULL,
873 "source_id" text NOT NULL,
874 "slot_key" text NOT NULL,
875 PRIMARY KEY ("scope_id", "source_id", "slot_key")
876) ON COMMIT DROP;--> statement-breakpoint
877
878INSERT INTO "__mcp_query_param_slot_preflight" ("scope_id", "source_id", "slot_key")
879SELECT
880 q."scope_id",
881 q."source_id",
882 'query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(q."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key"
883FROM "mcp_source_query_param" q
884WHERE q."kind" = 'secret'
885 AND q."secret_id" IS NOT NULL;--> statement-breakpoint
886
887DROP TABLE "__mcp_query_param_slot_preflight";--> statement-breakpoint
888
889WITH query_param_rows AS (
890 SELECT
891 q."scope_id",
892 q."source_id",
893 q."name",
894 'query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(q."name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key",
895 q."secret_id",
896 q."secret_prefix"
897 FROM "mcp_source_query_param" q
898 WHERE q."kind" = 'secret'
899 AND q."secret_id" IS NOT NULL
900)
901INSERT INTO "credential_binding" (
902 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
903 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
904)
905SELECT
906 pg_temp.executor_credential_binding_id('mcp', r."scope_id", r."source_id", r."slot_key"),
907 r."scope_id",
908 'mcp',
909 r."source_id",
910 r."scope_id",
911 r."slot_key",
912 'secret',
913 NULL,
914 r."secret_id",
915 NULL,
916 now(),
917 now()
918FROM query_param_rows r
919ON CONFLICT DO NOTHING;--> statement-breakpoint
920
921UPDATE "mcp_source_query_param"
922SET
923 "kind" = 'binding',
924 "slot_key" = 'query_param:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim("name"), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default'),
925 "prefix" = "secret_prefix",
926 "text_value" = NULL
927WHERE "kind" = 'secret'
928 AND "secret_id" IS NOT NULL;--> statement-breakpoint
929
930ALTER TABLE "mcp_source_query_param" DROP COLUMN "secret_id";--> statement-breakpoint
931ALTER TABLE "mcp_source_query_param" DROP COLUMN "secret_prefix";--> statement-breakpoint
932
933-- 0014_normalize_oauth_connections.sql
934-- Normalize pre-unified OAuth connection rows to the canonical core
935-- provider/provider_state shape. Runtime refresh only reads provider='oauth2'
936-- and provider_state.kind after this one-shot data migration.
937
938UPDATE "connection"
939SET
940 "provider" = 'oauth2',
941 "provider_state" = jsonb_build_object(
942 'kind', CASE "provider_state"->>'flow'
943 WHEN 'authorizationCode' THEN 'authorization-code'
944 ELSE 'client-credentials'
945 END,
946 'tokenEndpoint', "provider_state"->>'tokenUrl',
947 'issuerUrl', NULL,
948 'clientIdSecretId', "provider_state"->>'clientIdSecretId',
949 'clientSecretSecretId', CASE "provider_state"->>'flow'
950 WHEN 'clientCredentials' THEN coalesce("provider_state"->>'clientSecretSecretId', '')
951 ELSE "provider_state"->>'clientSecretSecretId'
952 END,
953 'clientAuth', 'body',
954 'scopes', coalesce("provider_state"->'scopes', '[]'::jsonb),
955 'scope', "scope"
956 ),
957 "updated_at" = now()
958WHERE "provider" = 'openapi:oauth2'
959 AND "provider_state"->>'flow' IN ('authorizationCode', 'clientCredentials');--> statement-breakpoint
960
961UPDATE "connection"
962SET
963 "provider" = 'oauth2',
964 "provider_state" = jsonb_build_object(
965 'kind', 'dynamic-dcr',
966 'tokenEndpoint', coalesce(
967 "provider_state"->>'tokenEndpoint',
968 "provider_state"#>>'{authorizationServerMetadata,token_endpoint}',
969 ''
970 ),
971 'issuerUrl', "provider_state"#>>'{authorizationServerMetadata,issuer}',
972 'authorizationServerUrl', "provider_state"->>'authorizationServerUrl',
973 'authorizationServerMetadataUrl', "provider_state"->>'authorizationServerMetadataUrl',
974 'idTokenSigningAlgValuesSupported', coalesce(
975 "provider_state"#>'{authorizationServerMetadata,id_token_signing_alg_values_supported}',
976 '[]'::jsonb
977 ),
978 'clientId', coalesce("provider_state"#>>'{clientInformation,client_id}', ''),
979 'clientSecretSecretId', NULL,
980 'clientAuth', CASE "provider_state"#>>'{clientInformation,token_endpoint_auth_method}'
981 WHEN 'client_secret_basic' THEN 'basic'
982 ELSE 'body'
983 END,
984 'scopes', '[]'::jsonb,
985 'scope', "scope",
986 'resource', "provider_state"->>'endpoint'
987 ),
988 "updated_at" = now()
989WHERE "provider" = 'mcp:oauth2';--> statement-breakpoint
990
991-- 0015_openapi_header_rows.sql
992-- Move OpenAPI request headers out of openapi_source.headers JSON and into
993-- the same child-row slot model used by query params and spec-fetch
994-- credentials. Runtime code reads only openapi_source_header after this.
995
996CREATE TABLE "openapi_source_header" (
997 "id" text NOT NULL,
998 "scope_id" text NOT NULL,
999 "source_id" text NOT NULL,
1000 "name" text NOT NULL,
1001 "kind" text NOT NULL,
1002 "text_value" text,
1003 "slot_key" text,
1004 "prefix" text,
1005 CONSTRAINT "openapi_source_header_scope_id_id_pk" PRIMARY KEY("scope_id","id")
1006);--> statement-breakpoint
1007CREATE INDEX "openapi_source_header_scope_id_idx" ON "openapi_source_header" USING btree ("scope_id");--> statement-breakpoint
1008CREATE INDEX "openapi_source_header_source_id_idx" ON "openapi_source_header" USING btree ("source_id");--> statement-breakpoint
1009
1010CREATE TEMP TABLE "__openapi_header_row_slot_preflight" (
1011 "scope_id" text NOT NULL,
1012 "source_id" text NOT NULL,
1013 "slot_key" text NOT NULL,
1014 PRIMARY KEY ("scope_id", "source_id", "slot_key")
1015) ON COMMIT DROP;--> statement-breakpoint
1016
1017INSERT INTO "__openapi_header_row_slot_preflight" ("scope_id", "source_id", "slot_key")
1018SELECT
1019 s."scope_id",
1020 s."id",
1021 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(h.key), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key"
1022FROM "openapi_source" s, jsonb_each(s."headers") h
1023WHERE s."headers" IS NOT NULL
1024 AND jsonb_typeof(h.value) = 'object'
1025 AND h.value ? 'secretId'
1026 AND COALESCE(h.value->>'kind', 'secret') = 'secret';--> statement-breakpoint
1027
1028DROP TABLE "__openapi_header_row_slot_preflight";--> statement-breakpoint
1029
1030WITH header_rows AS (
1031 SELECT
1032 s."scope_id",
1033 s."id" AS "source_id",
1034 h.key AS "name",
1035 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(h.key), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') AS "slot_key",
1036 h.value->>'secretId' AS "secret_id"
1037 FROM "openapi_source" s, jsonb_each(s."headers") h
1038 WHERE s."headers" IS NOT NULL
1039 AND jsonb_typeof(h.value) = 'object'
1040 AND h.value ? 'secretId'
1041 AND COALESCE(h.value->>'kind', 'secret') = 'secret'
1042)
1043INSERT INTO "credential_binding" (
1044 "id", "scope_id", "plugin_id", "source_id", "source_scope_id", "slot_key",
1045 "kind", "text_value", "secret_id", "connection_id", "created_at", "updated_at"
1046)
1047SELECT
1048 pg_temp.executor_credential_binding_id('openapi', r."scope_id", r."source_id", r."slot_key"),
1049 r."scope_id",
1050 'openapi',
1051 r."source_id",
1052 r."scope_id",
1053 r."slot_key",
1054 'secret',
1055 NULL,
1056 r."secret_id",
1057 NULL,
1058 now(),
1059 now()
1060FROM header_rows r
1061WHERE NOT EXISTS (
1062 SELECT 1 FROM "credential_binding" b
1063 WHERE b."scope_id" = r."scope_id"
1064 AND b."plugin_id" = 'openapi'
1065 AND b."source_id" = r."source_id"
1066 AND b."source_scope_id" = r."scope_id"
1067 AND b."slot_key" = r."slot_key"
1068)
1069ON CONFLICT DO NOTHING;--> statement-breakpoint
1070
1071INSERT INTO "openapi_source_header" (
1072 "id", "scope_id", "source_id", "name", "kind", "text_value", "slot_key", "prefix"
1073)
1074SELECT
1075 jsonb_build_array(s."id", h.key)::text,
1076 s."scope_id",
1077 s."id",
1078 h.key,
1079 CASE
1080 WHEN jsonb_typeof(h.value) = 'string' THEN 'text'
1081 WHEN jsonb_typeof(h.value) = 'object' AND h.value->>'kind' = 'text' THEN 'text'
1082 ELSE 'binding'
1083 END,
1084 CASE
1085 WHEN jsonb_typeof(h.value) = 'string' THEN h.value #>> '{}'
1086 WHEN jsonb_typeof(h.value) = 'object' AND h.value->>'kind' = 'text'
1087 THEN h.value->>'text'
1088 ELSE NULL
1089 END,
1090 CASE
1091 WHEN jsonb_typeof(h.value) = 'object' AND h.value->>'kind' = 'binding'
1092 THEN h.value->>'slot'
1093 WHEN jsonb_typeof(h.value) = 'object' AND h.value ? 'secretId'
1094 THEN 'header:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(h.key), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default')
1095 ELSE NULL
1096 END,
1097 CASE
1098 WHEN jsonb_typeof(h.value) = 'object'
1099 THEN COALESCE(h.value->>'prefix', h.value->>'secretPrefix')
1100 ELSE NULL
1101 END
1102FROM "openapi_source" s, jsonb_each(s."headers") h
1103WHERE s."headers" IS NOT NULL
1104 AND (
1105 jsonb_typeof(h.value) = 'string'
1106 OR (
1107 jsonb_typeof(h.value) = 'object'
1108 AND (
1109 h.value->>'kind' IN ('binding', 'text')
1110 OR h.value ? 'secretId'
1111 )
1112 )
1113)
1114ON CONFLICT DO NOTHING;--> statement-breakpoint
1115
1116ALTER TABLE "openapi_source" DROP COLUMN "headers";
apps/cloud/drizzle/0010_repair_mcp_connection_binding_scopes.sql+0−70
@@ -1,70 +0,0 @@
1-- Repair MCP OAuth connection bindings created by the scoped credential cutover.
2--
3-- The cutover copied legacy mcp_source.auth_connection_id rows into
4-- credential_binding at the source owner scope. For shared org MCP sources,
5-- the referenced Connection rows are user-owned and live at user-org scope, so
6-- those migrated bindings cannot resolve. Copy each invalid binding to every
7-- matching user-org scope under the same org, then remove invalid rows that
8-- still point at a scope without the referenced Connection.
9
10INSERT INTO "credential_binding" (
11 "id",
12 "scope_id",
13 "plugin_id",
14 "source_id",
15 "source_scope_id",
16 "slot_key",
17 "kind",
18 "text_value",
19 "secret_id",
20 "connection_id",
21 "created_at",
22 "updated_at"
23)
24SELECT
25 b."id",
26 c."scope_id",
27 b."plugin_id",
28 b."source_id",
29 b."source_scope_id",
30 b."slot_key",
31 b."kind",
32 b."text_value",
33 b."secret_id",
34 b."connection_id",
35 b."created_at",
36 now()
37FROM "credential_binding" b
38JOIN "connection" c
39 ON c."id" = b."connection_id"
40 AND c."scope_id" LIKE 'user-org:%:' || b."source_scope_id"
41WHERE b."plugin_id" = 'mcp'
42 AND b."kind" = 'connection'
43 AND b."slot_key" = 'auth:oauth2:connection'
44 AND NOT EXISTS (
45 SELECT 1
46 FROM "connection" exact
47 WHERE exact."id" = b."connection_id"
48 AND exact."scope_id" = b."scope_id"
49 )
50ON CONFLICT ("scope_id", "id") DO UPDATE SET
51 "plugin_id" = excluded."plugin_id",
52 "source_id" = excluded."source_id",
53 "source_scope_id" = excluded."source_scope_id",
54 "slot_key" = excluded."slot_key",
55 "kind" = excluded."kind",
56 "text_value" = excluded."text_value",
57 "secret_id" = excluded."secret_id",
58 "connection_id" = excluded."connection_id",
59 "updated_at" = excluded."updated_at";--> statement-breakpoint
60
61DELETE FROM "credential_binding" b
62WHERE b."plugin_id" = 'mcp'
63 AND b."kind" = 'connection'
64 AND b."slot_key" = 'auth:oauth2:connection'
65 AND NOT EXISTS (
66 SELECT 1
67 FROM "connection" c
68 WHERE c."id" = b."connection_id"
69 AND c."scope_id" = b."scope_id"
70 );--> statement-breakpoint
apps/cloud/drizzle/0011_repair_openapi_connection_binding_scopes.sql+0−68
@@ -1,68 +0,0 @@
1-- Repair OpenAPI OAuth connection bindings that still point at scopes without
2-- the referenced Connection row.
3--
4-- Shared org sources can use user-owned OAuth connections. If a migrated
5-- binding landed at org scope while the Connection lives at user-org scope,
6-- copy it to the matching user-org scope under the same org. Any remaining
7-- invalid connection binding has no backing Connection and should be removed
8-- so the source falls back to sign-in.
9
10INSERT INTO "credential_binding" (
11 "id",
12 "scope_id",
13 "plugin_id",
14 "source_id",
15 "source_scope_id",
16 "slot_key",
17 "kind",
18 "text_value",
19 "secret_id",
20 "connection_id",
21 "created_at",
22 "updated_at"
23)
24SELECT
25 b."id",
26 c."scope_id",
27 b."plugin_id",
28 b."source_id",
29 b."source_scope_id",
30 b."slot_key",
31 b."kind",
32 b."text_value",
33 b."secret_id",
34 b."connection_id",
35 b."created_at",
36 now()
37FROM "credential_binding" b
38JOIN "connection" c
39 ON c."id" = b."connection_id"
40 AND c."scope_id" LIKE 'user-org:%:' || b."source_scope_id"
41WHERE b."plugin_id" = 'openapi'
42 AND b."kind" = 'connection'
43 AND NOT EXISTS (
44 SELECT 1
45 FROM "connection" exact
46 WHERE exact."id" = b."connection_id"
47 AND exact."scope_id" = b."scope_id"
48 )
49ON CONFLICT ("scope_id", "id") DO UPDATE SET
50 "plugin_id" = excluded."plugin_id",
51 "source_id" = excluded."source_id",
52 "source_scope_id" = excluded."source_scope_id",
53 "slot_key" = excluded."slot_key",
54 "kind" = excluded."kind",
55 "text_value" = excluded."text_value",
56 "secret_id" = excluded."secret_id",
57 "connection_id" = excluded."connection_id",
58 "updated_at" = excluded."updated_at";--> statement-breakpoint
59
60DELETE FROM "credential_binding" b
61WHERE b."plugin_id" = 'openapi'
62 AND b."kind" = 'connection'
63 AND NOT EXISTS (
64 SELECT 1
65 FROM "connection" c
66 WHERE c."id" = b."connection_id"
67 AND c."scope_id" = b."scope_id"
68 );--> statement-breakpoint
apps/cloud/drizzle/0012_repair_openapi_secret_binding_scopes.sql+0−73
@@ -1,73 +0,0 @@
1-- Repair OpenAPI secret bindings that point at scopes without the referenced
2-- Secret row.
3--
4-- Most affected rows are user-org bindings for shared org sources where the
5-- backing Secret lives at the source/org scope. A smaller case is the inverse:
6-- an org binding whose matching Secret is user-owned under the same org. Copy
7-- each invalid binding to the matching in-org Secret scope, then remove any
8-- invalid OpenAPI secret binding that still has no Secret at its own scope.
9-- This deliberately does not copy secrets across org boundaries.
10
11INSERT INTO "credential_binding" (
12 "id",
13 "scope_id",
14 "plugin_id",
15 "source_id",
16 "source_scope_id",
17 "slot_key",
18 "kind",
19 "text_value",
20 "secret_id",
21 "connection_id",
22 "created_at",
23 "updated_at"
24)
25SELECT DISTINCT ON (s."scope_id", b."id")
26 b."id",
27 s."scope_id",
28 b."plugin_id",
29 b."source_id",
30 b."source_scope_id",
31 b."slot_key",
32 b."kind",
33 b."text_value",
34 b."secret_id",
35 b."connection_id",
36 b."created_at",
37 now()
38FROM "credential_binding" b
39JOIN "secret" s
40 ON s."id" = b."secret_id"
41 AND (
42 s."scope_id" = b."source_scope_id"
43 OR s."scope_id" LIKE 'user-org:%:' || b."source_scope_id"
44 )
45WHERE b."plugin_id" = 'openapi'
46 AND b."kind" = 'secret'
47 AND NOT EXISTS (
48 SELECT 1
49 FROM "secret" exact
50 WHERE exact."id" = b."secret_id"
51 AND exact."scope_id" = b."scope_id"
52 )
53ORDER BY s."scope_id", b."id", b."updated_at" DESC
54ON CONFLICT ("scope_id", "id") DO UPDATE SET
55 "plugin_id" = excluded."plugin_id",
56 "source_id" = excluded."source_id",
57 "source_scope_id" = excluded."source_scope_id",
58 "slot_key" = excluded."slot_key",
59 "kind" = excluded."kind",
60 "text_value" = excluded."text_value",
61 "secret_id" = excluded."secret_id",
62 "connection_id" = excluded."connection_id",
63 "updated_at" = excluded."updated_at";--> statement-breakpoint
64
65DELETE FROM "credential_binding" b
66WHERE b."plugin_id" = 'openapi'
67 AND b."kind" = 'secret'
68 AND NOT EXISTS (
69 SELECT 1
70 FROM "secret" s
71 WHERE s."id" = b."secret_id"
72 AND s."scope_id" = b."scope_id"
73 );--> statement-breakpoint
apps/cloud/drizzle/0013_cleanup_orphan_oauth_rows.sql+0−23
@@ -1,23 +0,0 @@
1-- Remove stale OAuth rows left behind after connection cleanup.
2--
3-- Connection-owned Secret rows are hidden implementation details for a
4-- Connection. If the owning Connection row no longer exists at the same scope,
5-- the Secret row is unreachable and should not remain as dangling metadata.
6-- Likewise, OAuth sessions for missing Connections cannot complete safely.
7
8DELETE FROM "secret" s
9WHERE s."owned_by_connection_id" IS NOT NULL
10 AND NOT EXISTS (
11 SELECT 1
12 FROM "connection" c
13 WHERE c."id" = s."owned_by_connection_id"
14 AND c."scope_id" = s."scope_id"
15 );--> statement-breakpoint
16
17DELETE FROM "oauth2_session" o
18WHERE NOT EXISTS (
19 SELECT 1
20 FROM "connection" c
21 WHERE c."id" = o."connection_id"
22 AND c."scope_id" = o."scope_id"
23 );--> statement-breakpoint
apps/cloud/drizzle/0014_repair_openapi_oauth_cutover_residue.sql+0−241
@@ -1,241 +0,0 @@
1-- Repair OpenAPI OAuth residue from the scoped-credential cutover.
2--
3-- 0009 only normalized provider='openapi:oauth2' rows whose provider_state
4-- still had the old `flow` shape. Some live rows already had canonical
5-- `kind` provider_state, so the provider key was skipped. 0012 also collapsed
6-- user-scoped OpenAPI OAuth client credential bindings when the backing Secret
7-- row lived at the source/org scope. Runtime refresh reads provider_state
8-- directly, but edit/refresh UI reads credential_binding rows, so recreate
9-- those explicit bindings from the already-canonical Connection rows.
10
11UPDATE "connection"
12SET "provider" = 'oauth2',
13 "updated_at" = now()
14WHERE "provider" = 'openapi:oauth2'
15 AND "provider_state" ? 'kind';--> statement-breakpoint
16
17WITH oauth_connections AS (
18 SELECT
19 b."scope_id",
20 b."id" AS "binding_id",
21 b."plugin_id",
22 b."source_id",
23 b."source_scope_id",
24 s."oauth2"->>'clientIdSlot' AS "slot_key",
25 c."provider_state"->>'clientIdSecretId' AS "secret_id",
26 b."created_at"
27 FROM "credential_binding" b
28 JOIN "openapi_source" s
29 ON s."id" = b."source_id"
30 AND s."scope_id" = b."source_scope_id"
31 JOIN "connection" c
32 ON c."id" = b."connection_id"
33 AND c."scope_id" = b."scope_id"
34 WHERE b."plugin_id" = 'openapi'
35 AND b."kind" = 'connection'
36 AND s."oauth2" IS NOT NULL
37 AND c."provider" = 'oauth2'
38 AND c."provider_state" ? 'clientIdSecretId'
39 AND coalesce(c."provider_state"->>'clientIdSecretId', '') <> ''
40)
41UPDATE "credential_binding" b
42SET "secret_id" = r."secret_id",
43 "text_value" = NULL,
44 "connection_id" = NULL,
45 "updated_at" = now()
46FROM oauth_connections r
47WHERE b."scope_id" = r."scope_id"
48 AND b."plugin_id" = r."plugin_id"
49 AND b."source_id" = r."source_id"
50 AND b."source_scope_id" = r."source_scope_id"
51 AND b."slot_key" = r."slot_key"
52 AND b."kind" = 'secret';--> statement-breakpoint
53
54WITH oauth_connections AS (
55 SELECT
56 b."scope_id",
57 b."id" AS "binding_id",
58 b."plugin_id",
59 b."source_id",
60 b."source_scope_id",
61 s."oauth2"->>'clientIdSlot' AS "slot_key",
62 c."provider_state"->>'clientIdSecretId' AS "secret_id",
63 b."created_at"
64 FROM "credential_binding" b
65 JOIN "openapi_source" s
66 ON s."id" = b."source_id"
67 AND s."scope_id" = b."source_scope_id"
68 JOIN "connection" c
69 ON c."id" = b."connection_id"
70 AND c."scope_id" = b."scope_id"
71 WHERE b."plugin_id" = 'openapi'
72 AND b."kind" = 'connection'
73 AND s."oauth2" IS NOT NULL
74 AND c."provider" = 'oauth2'
75 AND c."provider_state" ? 'clientIdSecretId'
76 AND coalesce(c."provider_state"->>'clientIdSecretId', '') <> ''
77)
78INSERT INTO "credential_binding" (
79 "id",
80 "scope_id",
81 "plugin_id",
82 "source_id",
83 "source_scope_id",
84 "slot_key",
85 "kind",
86 "text_value",
87 "secret_id",
88 "connection_id",
89 "created_at",
90 "updated_at"
91)
92SELECT
93 '[' || to_jsonb('oconn-openapi-oauth-client'::text)::text || ',' || to_jsonb(r."binding_id")::text || ',' || to_jsonb(r."scope_id")::text || ',' || to_jsonb(r."slot_key")::text || ']',
94 r."scope_id",
95 r."plugin_id",
96 r."source_id",
97 r."source_scope_id",
98 r."slot_key",
99 'secret',
100 NULL,
101 r."secret_id",
102 NULL,
103 r."created_at",
104 now()
105FROM oauth_connections r
106WHERE r."slot_key" IS NOT NULL
107 AND NOT EXISTS (
108 SELECT 1
109 FROM "credential_binding" existing
110 WHERE existing."scope_id" = r."scope_id"
111 AND existing."plugin_id" = r."plugin_id"
112 AND existing."source_id" = r."source_id"
113 AND existing."source_scope_id" = r."source_scope_id"
114 AND existing."slot_key" = r."slot_key"
115 )
116ON CONFLICT ("scope_id", "id") DO UPDATE SET
117 "plugin_id" = excluded."plugin_id",
118 "source_id" = excluded."source_id",
119 "source_scope_id" = excluded."source_scope_id",
120 "slot_key" = excluded."slot_key",
121 "kind" = excluded."kind",
122 "text_value" = excluded."text_value",
123 "secret_id" = excluded."secret_id",
124 "connection_id" = excluded."connection_id",
125 "updated_at" = excluded."updated_at";--> statement-breakpoint
126
127WITH oauth_connections AS (
128 SELECT
129 b."scope_id",
130 b."id" AS "binding_id",
131 b."plugin_id",
132 b."source_id",
133 b."source_scope_id",
134 coalesce(
135 s."oauth2"->>'clientSecretSlot',
136 'oauth2:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(s."oauth2"->>'securitySchemeName'), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') || ':client-secret'
137 ) AS "slot_key",
138 c."provider_state"->>'clientSecretSecretId' AS "secret_id",
139 b."created_at"
140 FROM "credential_binding" b
141 JOIN "openapi_source" s
142 ON s."id" = b."source_id"
143 AND s."scope_id" = b."source_scope_id"
144 JOIN "connection" c
145 ON c."id" = b."connection_id"
146 AND c."scope_id" = b."scope_id"
147 WHERE b."plugin_id" = 'openapi'
148 AND b."kind" = 'connection'
149 AND s."oauth2" IS NOT NULL
150 AND c."provider" = 'oauth2'
151 AND c."provider_state" ? 'clientSecretSecretId'
152 AND coalesce(c."provider_state"->>'clientSecretSecretId', '') <> ''
153)
154UPDATE "credential_binding" b
155SET "secret_id" = r."secret_id",
156 "text_value" = NULL,
157 "connection_id" = NULL,
158 "updated_at" = now()
159FROM oauth_connections r
160WHERE b."scope_id" = r."scope_id"
161 AND b."plugin_id" = r."plugin_id"
162 AND b."source_id" = r."source_id"
163 AND b."source_scope_id" = r."source_scope_id"
164 AND b."slot_key" = r."slot_key"
165 AND b."kind" = 'secret';--> statement-breakpoint
166
167WITH oauth_connections AS (
168 SELECT
169 b."scope_id",
170 b."id" AS "binding_id",
171 b."plugin_id",
172 b."source_id",
173 b."source_scope_id",
174 coalesce(
175 s."oauth2"->>'clientSecretSlot',
176 'oauth2:' || COALESCE(NULLIF(trim(both '-' from lower(regexp_replace(trim(s."oauth2"->>'securitySchemeName'), '[^a-zA-Z0-9]+', '-', 'g'))), ''), 'default') || ':client-secret'
177 ) AS "slot_key",
178 c."provider_state"->>'clientSecretSecretId' AS "secret_id",
179 b."created_at"
180 FROM "credential_binding" b
181 JOIN "openapi_source" s
182 ON s."id" = b."source_id"
183 AND s."scope_id" = b."source_scope_id"
184 JOIN "connection" c
185 ON c."id" = b."connection_id"
186 AND c."scope_id" = b."scope_id"
187 WHERE b."plugin_id" = 'openapi'
188 AND b."kind" = 'connection'
189 AND s."oauth2" IS NOT NULL
190 AND c."provider" = 'oauth2'
191 AND c."provider_state" ? 'clientSecretSecretId'
192 AND coalesce(c."provider_state"->>'clientSecretSecretId', '') <> ''
193)
194INSERT INTO "credential_binding" (
195 "id",
196 "scope_id",
197 "plugin_id",
198 "source_id",
199 "source_scope_id",
200 "slot_key",
201 "kind",
202 "text_value",
203 "secret_id",
204 "connection_id",
205 "created_at",
206 "updated_at"
207)
208SELECT
209 '[' || to_jsonb('oconn-openapi-oauth-secret'::text)::text || ',' || to_jsonb(r."binding_id")::text || ',' || to_jsonb(r."scope_id")::text || ',' || to_jsonb(r."slot_key")::text || ']',
210 r."scope_id",
211 r."plugin_id",
212 r."source_id",
213 r."source_scope_id",
214 r."slot_key",
215 'secret',
216 NULL,
217 r."secret_id",
218 NULL,
219 r."created_at",
220 now()
221FROM oauth_connections r
222WHERE r."slot_key" IS NOT NULL
223 AND NOT EXISTS (
224 SELECT 1
225 FROM "credential_binding" existing
226 WHERE existing."scope_id" = r."scope_id"
227 AND existing."plugin_id" = r."plugin_id"
228 AND existing."source_id" = r."source_id"
229 AND existing."source_scope_id" = r."source_scope_id"
230 AND existing."slot_key" = r."slot_key"
231 )
232ON CONFLICT ("scope_id", "id") DO UPDATE SET
233 "plugin_id" = excluded."plugin_id",
234 "source_id" = excluded."source_id",
235 "source_scope_id" = excluded."source_scope_id",
236 "slot_key" = excluded."slot_key",
237 "kind" = excluded."kind",
238 "text_value" = excluded."text_value",
239 "secret_id" = excluded."secret_id",
240 "connection_id" = excluded."connection_id",
241 "updated_at" = excluded."updated_at";
apps/cloud/drizzle/0015_add_credential_binding_secret_scope.sql+0−2
@@ -1,2 +0,0 @@
1ALTER TABLE "credential_binding" ADD COLUMN "secret_scope_id" text;--> statement-breakpoint
2CREATE INDEX "credential_binding_secret_scope_id_idx" ON "credential_binding" USING btree ("secret_scope_id");
apps/cloud/drizzle/0016_fumadb_cutover.sql+0−114
@@ -1,114 +0,0 @@
1CREATE TABLE IF NOT EXISTS "private_executor_cloud_settings" (
2 "id" varchar(255) PRIMARY KEY NOT NULL,
3 "version" varchar(255) DEFAULT '1.0.0' NOT NULL
4);
5--> statement-breakpoint
6INSERT INTO "private_executor_cloud_settings" ("id", "version")
7VALUES ('default', '1.0.0')
8ON CONFLICT ("id") DO UPDATE SET "version" = excluded."version";
9--> statement-breakpoint
10ALTER TABLE "credential_binding" ADD COLUMN IF NOT EXISTS "secret_scope_id" text;
11--> statement-breakpoint
12ALTER TABLE "blob" ADD COLUMN IF NOT EXISTS "row_id" varchar(255);
13--> statement-breakpoint
14ALTER TABLE "blob" ADD COLUMN IF NOT EXISTS "id" varchar(255);
15--> statement-breakpoint
16UPDATE "blob"
17SET
18 "id" = COALESCE("id", '[' || to_json("namespace")::text || ',' || to_json("key")::text || ']'),
19 "row_id" = COALESCE("row_id", 'legacy_' || md5("namespace" || chr(31) || "key"))
20WHERE "id" IS NULL OR "row_id" IS NULL;
21--> statement-breakpoint
22ALTER TABLE "blob" ALTER COLUMN "id" SET NOT NULL;
23--> statement-breakpoint
24ALTER TABLE "blob" ALTER COLUMN "row_id" SET NOT NULL;
25--> statement-breakpoint
26DO $$
27BEGIN
28 IF EXISTS (
29 SELECT 1 FROM pg_constraint
30 WHERE conrelid = 'public.blob'::regclass
31 AND conname = 'blob_namespace_key_pk'
32 ) THEN
33 ALTER TABLE "blob" DROP CONSTRAINT "blob_namespace_key_pk";
34 END IF;
35
36 IF NOT EXISTS (
37 SELECT 1 FROM pg_constraint
38 WHERE conrelid = 'public.blob'::regclass
39 AND conname = 'blob_pkey'
40 ) THEN
41 ALTER TABLE "blob" ADD CONSTRAINT "blob_pkey" PRIMARY KEY ("row_id");
42 END IF;
43END $$;
44--> statement-breakpoint
45CREATE UNIQUE INDEX IF NOT EXISTS "blob_id_uidx" ON "blob" USING btree ("id");
46--> statement-breakpoint
47DO $$
48DECLARE
49 table_name text;
50 legacy_pk_name text;
51 new_pk_name text;
52 new_unique_name text;
53BEGIN
54 FOREACH table_name IN ARRAY ARRAY[
55 'connection',
56 'credential_binding',
57 'definition',
58 'graphql_operation',
59 'graphql_source',
60 'graphql_source_header',
61 'graphql_source_query_param',
62 'mcp_binding',
63 'mcp_source',
64 'mcp_source_header',
65 'mcp_source_query_param',
66 'oauth2_session',
67 'openapi_operation',
68 'openapi_source',
69 'openapi_source_header',
70 'openapi_source_query_param',
71 'openapi_source_spec_fetch_header',
72 'openapi_source_spec_fetch_query_param',
73 'secret',
74 'source',
75 'tool',
76 'tool_policy',
77 'workos_vault_metadata'
78 ]
79 LOOP
80 legacy_pk_name := table_name || '_scope_id_id_pk';
81 new_pk_name := table_name || '_pkey';
82 new_unique_name := table_name || '_scope_id_id_uidx';
83
84 EXECUTE format('ALTER TABLE %I ADD COLUMN IF NOT EXISTS "row_id" varchar(255)', table_name);
85 EXECUTE format(
86 'UPDATE %I SET "row_id" = COALESCE("row_id", %L || md5("scope_id" || chr(31) || "id")) WHERE "row_id" IS NULL',
87 table_name,
88 'legacy_'
89 );
90 EXECUTE format('ALTER TABLE %I ALTER COLUMN "row_id" SET NOT NULL', table_name);
91
92 IF EXISTS (
93 SELECT 1 FROM pg_constraint
94 WHERE conrelid = format('public.%I', table_name)::regclass
95 AND conname = legacy_pk_name
96 ) THEN
97 EXECUTE format('ALTER TABLE %I DROP CONSTRAINT %I', table_name, legacy_pk_name);
98 END IF;
99
100 IF NOT EXISTS (
101 SELECT 1 FROM pg_constraint
102 WHERE conrelid = format('public.%I', table_name)::regclass
103 AND conname = new_pk_name
104 ) THEN
105 EXECUTE format('ALTER TABLE %I ADD CONSTRAINT %I PRIMARY KEY ("row_id")', table_name, new_pk_name);
106 END IF;
107
108 EXECUTE format(
109 'CREATE UNIQUE INDEX IF NOT EXISTS %I ON %I USING btree ("scope_id", "id")',
110 new_unique_name,
111 table_name
112 );
113 END LOOP;
114END $$;
apps/cloud/drizzle/0017_plugin_storage_sources.sql+0−172
@@ -1,172 +0,0 @@
1CREATE TABLE IF NOT EXISTS "plugin_storage" (
2 "row_id" varchar(255) PRIMARY KEY NOT NULL,
3 "id" varchar(255) NOT NULL,
4 "scope_id" varchar(255) NOT NULL,
5 "plugin_id" text NOT NULL,
6 "collection" text NOT NULL,
7 "key" text NOT NULL,
8 "data" json NOT NULL,
9 "created_at" timestamp NOT NULL,
10 "updated_at" timestamp NOT NULL
11);
12--> statement-breakpoint
13CREATE UNIQUE INDEX IF NOT EXISTS "plugin_storage_scope_id_id_uidx" ON "plugin_storage" USING btree ("scope_id","id");
14--> statement-breakpoint
15INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
16SELECT
17 'plugin_storage_' || md5('openapi:source:' || s."scope_id" || ':' || s."id"),
18 '["openapi","source",' || to_json(s."id")::text || ']',
19 s."scope_id",
20 'openapi',
21 'source',
22 s."id",
23 json_build_object(
24 'namespace', s."id",
25 'scope', s."scope_id",
26 'name', s."name",
27 'config', json_strip_nulls(json_build_object(
28 'spec', s."spec",
29 'sourceUrl', s."source_url",
30 'baseUrl', s."base_url",
31 'headers', h."headers",
32 'queryParams', q."queryParams",
33 'specFetchCredentials', CASE WHEN sfh."headers" IS NULL AND sfq."queryParams" IS NULL THEN NULL ELSE json_strip_nulls(json_build_object('headers', sfh."headers", 'queryParams', sfq."queryParams")) END,
34 'oauth2', s."oauth2"
35 ))
36 ),
37 now(),
38 now()
39FROM "openapi_source" s
40LEFT JOIN (
41 SELECT "scope_id", "source_id", json_object_agg("name", CASE WHEN "kind" = 'text' THEN to_json("text_value") ELSE json_build_object('kind', 'binding', 'slot', "slot_key", 'prefix', "prefix") END) AS "headers"
42 FROM "openapi_source_header"
43 GROUP BY "scope_id", "source_id"
44) h ON h."scope_id" = s."scope_id" AND h."source_id" = s."id"
45LEFT JOIN (
46 SELECT "scope_id", "source_id", json_object_agg("name", CASE WHEN "kind" = 'text' THEN to_json("text_value") ELSE json_build_object('kind', 'binding', 'slot', "slot_key", 'prefix', "prefix") END) AS "queryParams"
47 FROM "openapi_source_query_param"
48 GROUP BY "scope_id", "source_id"
49) q ON q."scope_id" = s."scope_id" AND q."source_id" = s."id"
50LEFT JOIN (
51 SELECT "scope_id", "source_id", json_object_agg("name", CASE WHEN "kind" = 'text' THEN to_json("text_value") ELSE json_build_object('kind', 'binding', 'slot', "slot_key", 'prefix', "prefix") END) AS "headers"
52 FROM "openapi_source_spec_fetch_header"
53 GROUP BY "scope_id", "source_id"
54) sfh ON sfh."scope_id" = s."scope_id" AND sfh."source_id" = s."id"
55LEFT JOIN (
56 SELECT "scope_id", "source_id", json_object_agg("name", CASE WHEN "kind" = 'text' THEN to_json("text_value") ELSE json_build_object('kind', 'binding', 'slot', "slot_key", 'prefix', "prefix") END) AS "queryParams"
57 FROM "openapi_source_spec_fetch_query_param"
58 GROUP BY "scope_id", "source_id"
59) sfq ON sfq."scope_id" = s."scope_id" AND sfq."source_id" = s."id"
60ON CONFLICT DO NOTHING;
61--> statement-breakpoint
62INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
63SELECT 'plugin_storage_' || md5('openapi:operation:' || o."scope_id" || ':' || o."id"), '["openapi","operation",' || to_json(o."id")::text || ']', o."scope_id", 'openapi', 'operation', o."id", json_build_object('toolId', o."id", 'sourceId', o."source_id", 'binding', o."binding"), now(), now()
64FROM "openapi_operation" o
65ON CONFLICT DO NOTHING;
66--> statement-breakpoint
67INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
68SELECT
69 'plugin_storage_' || md5('graphql:source:' || s."scope_id" || ':' || s."id"),
70 '["graphql","source",' || to_json(s."id")::text || ']',
71 s."scope_id",
72 'graphql',
73 'source',
74 s."id",
75 json_build_object(
76 'namespace', s."id",
77 'scope', s."scope_id",
78 'name', s."name",
79 'endpoint', s."endpoint",
80 'headers', COALESCE(h."headers", '{}'::json),
81 'queryParams', COALESCE(q."queryParams", '{}'::json),
82 'auth', CASE WHEN s."auth_kind" = 'oauth2' AND s."auth_connection_slot" IS NOT NULL THEN json_build_object('kind', 'oauth2', 'connectionSlot', s."auth_connection_slot") ELSE json_build_object('kind', 'none') END
83 ),
84 now(),
85 now()
86FROM "graphql_source" s
87LEFT JOIN (
88 SELECT "scope_id", "source_id", json_object_agg("name", CASE WHEN "kind" = 'text' THEN to_json("text_value") ELSE json_build_object('kind', 'binding', 'slot', "slot_key", 'prefix', "prefix") END) AS "headers"
89 FROM "graphql_source_header"
90 GROUP BY "scope_id", "source_id"
91) h ON h."scope_id" = s."scope_id" AND h."source_id" = s."id"
92LEFT JOIN (
93 SELECT "scope_id", "source_id", json_object_agg("name", CASE WHEN "kind" = 'text' THEN to_json("text_value") ELSE json_build_object('kind', 'binding', 'slot', "slot_key", 'prefix', "prefix") END) AS "queryParams"
94 FROM "graphql_source_query_param"
95 GROUP BY "scope_id", "source_id"
96) q ON q."scope_id" = s."scope_id" AND q."source_id" = s."id"
97ON CONFLICT DO NOTHING;
98--> statement-breakpoint
99INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
100SELECT 'plugin_storage_' || md5('graphql:operation:' || o."scope_id" || ':' || o."id"), '["graphql","operation",' || to_json(o."id")::text || ']', o."scope_id", 'graphql', 'operation', o."id", json_build_object('toolId', o."id", 'sourceId', o."source_id", 'binding', o."binding"), now(), now()
101FROM "graphql_operation" o
102ON CONFLICT DO NOTHING;
103--> statement-breakpoint
104INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
105SELECT
106 'plugin_storage_' || md5('mcp:source:' || s."scope_id" || ':' || s."id"),
107 '["mcp","source",' || to_json(s."id")::text || ']',
108 s."scope_id",
109 'mcp',
110 'source',
111 s."id",
112 json_build_object(
113 'namespace', s."id",
114 'scope', s."scope_id",
115 'name', s."name",
116 'config', CASE WHEN s."config"->>'transport' = 'remote' THEN jsonb_strip_nulls(s."config"::jsonb || jsonb_build_object(
117 'headers', h."headers",
118 'queryParams', q."queryParams",
119 'auth', CASE
120 WHEN s."auth_kind" = 'header' THEN json_build_object('kind', 'header', 'headerName', COALESCE(s."auth_header_name", ''), 'secretSlot', s."auth_header_slot", 'prefix', s."auth_header_prefix")
121 WHEN s."auth_kind" = 'oauth2' THEN json_build_object('kind', 'oauth2', 'connectionSlot', s."auth_connection_slot", 'clientIdSlot', s."auth_client_id_slot", 'clientSecretSlot', s."auth_client_secret_slot")
122 ELSE json_build_object('kind', 'none')
123 END
124 )) ELSE s."config"::jsonb END
125 ),
126 now(),
127 now()
128FROM "mcp_source" s
129LEFT JOIN (
130 SELECT "scope_id", "source_id", json_object_agg("name", CASE WHEN "kind" = 'text' THEN to_json("text_value") ELSE json_build_object('kind', 'binding', 'slot', "slot_key", 'prefix', "prefix") END) AS "headers"
131 FROM "mcp_source_header"
132 GROUP BY "scope_id", "source_id"
133) h ON h."scope_id" = s."scope_id" AND h."source_id" = s."id"
134LEFT JOIN (
135 SELECT "scope_id", "source_id", json_object_agg("name", CASE WHEN "kind" = 'text' THEN to_json("text_value") ELSE json_build_object('kind', 'binding', 'slot', "slot_key", 'prefix', "prefix") END) AS "queryParams"
136 FROM "mcp_source_query_param"
137 GROUP BY "scope_id", "source_id"
138) q ON q."scope_id" = s."scope_id" AND q."source_id" = s."id"
139ON CONFLICT DO NOTHING;
140--> statement-breakpoint
141INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
142SELECT 'plugin_storage_' || md5('mcp:binding:' || b."scope_id" || ':' || b."id"), '["mcp","binding",' || to_json(b."id")::text || ']', b."scope_id", 'mcp', 'binding', b."id", json_build_object('namespace', b."source_id", 'toolId', b."id", 'binding', b."binding"), b."created_at", now()
143FROM "mcp_binding" b
144ON CONFLICT DO NOTHING;
145--> statement-breakpoint
146DROP TABLE IF EXISTS "openapi_source";
147--> statement-breakpoint
148DROP TABLE IF EXISTS "openapi_operation";
149--> statement-breakpoint
150DROP TABLE IF EXISTS "openapi_source_header";
151--> statement-breakpoint
152DROP TABLE IF EXISTS "openapi_source_query_param";
153--> statement-breakpoint
154DROP TABLE IF EXISTS "openapi_source_spec_fetch_header";
155--> statement-breakpoint
156DROP TABLE IF EXISTS "openapi_source_spec_fetch_query_param";
157--> statement-breakpoint
158DROP TABLE IF EXISTS "graphql_source";
159--> statement-breakpoint
160DROP TABLE IF EXISTS "graphql_source_header";
161--> statement-breakpoint
162DROP TABLE IF EXISTS "graphql_source_query_param";
163--> statement-breakpoint
164DROP TABLE IF EXISTS "graphql_operation";
165--> statement-breakpoint
166DROP TABLE IF EXISTS "mcp_source";
167--> statement-breakpoint
168DROP TABLE IF EXISTS "mcp_source_header";
169--> statement-breakpoint
170DROP TABLE IF EXISTS "mcp_source_query_param";
171--> statement-breakpoint
172DROP TABLE IF EXISTS "mcp_binding";
apps/cloud/drizzle/0018_repair_openapi_oauth_authorization_url.sql+0−9
@@ -1,9 +0,0 @@
1UPDATE "plugin_storage"
2SET
3 "data" = jsonb_set("data"::jsonb, '{config,oauth2,authorizationUrl}', 'null'::jsonb, true)::json,
4 "updated_at" = now()
5WHERE
6 "plugin_id" = 'openapi'
7 AND "collection" = 'source'
8 AND "data" #> '{config,oauth2}' IS NOT NULL
9 AND NOT ("data"::jsonb #> '{config,oauth2}' ? 'authorizationUrl');
apps/cloud/drizzle/0019_workos_vault_plugin_storage.sql+0−28
@@ -1,28 +0,0 @@
1INSERT INTO "plugin_storage" (
2 "row_id",
3 "id",
4 "scope_id",
5 "plugin_id",
6 "collection",
7 "key",
8 "data",
9 "created_at",
10 "updated_at"
11)
12SELECT
13 'plugin_storage_' || md5('workosVault:metadata:' || m."scope_id" || ':' || m."id"),
14 '["workosVault","metadata",' || to_json(m."id")::text || ']',
15 m."scope_id",
16 'workosVault',
17 'metadata',
18 m."id",
19 json_build_object('name', m."name", 'purpose', m."purpose", 'createdAt', m."created_at"),
20 m."created_at",
21 now()
22FROM "workos_vault_metadata" m
23ON CONFLICT ("scope_id", "id") DO UPDATE SET
24 "data" = EXCLUDED."data",
25 "updated_at" = EXCLUDED."updated_at";
26--> statement-breakpoint
27
28DROP TABLE IF EXISTS "workos_vault_metadata";
apps/cloud/drizzle/0020_add_connection_identity_override.sql+0−1
@@ -1 +0,0 @@
1ALTER TABLE "connection" ADD COLUMN IF NOT EXISTS "identity_override" json;
apps/cloud/drizzle/meta/0000_snapshot.json+584−593
@@ -1,5 +1,5 @@
1{1{
2 "id": "93e9f8ef-fe9a-4a8c-b326-329464d876ca",2 "id": "16a06c56-535a-4774-a9e7-c0807ba74688",
3 "prevId": "00000000-0000-0000-0000-000000000000",3 "prevId": "00000000-0000-0000-0000-000000000000",
4 "version": "7",4 "version": "7",
5 "dialect": "postgresql",5 "dialect": "postgresql",
@@ -124,13 +124,13 @@ · 118 unmodified lines
124 "columns": {124 "columns": {
125 "namespace": {125 "namespace": {
126 "name": "namespace",126 "name": "namespace",
127 "type": "text",127 "type": "varchar(255)",
128 "primaryKey": false,128 "primaryKey": false,
129 "notNull": true129 "notNull": true
130 },130 },
131 "key": {131 "key": {
132 "name": "key",132 "name": "key",
133 "type": "text",133 "type": "varchar(255)",
134 "primaryKey": false,134 "primaryKey": false,
135 "notNull": true135 "notNull": true
136 },136 },
@@ -139,368 +139,236 @@ · 2 unmodified lines
139 "type": "text",139 "type": "text",
140 "primaryKey": false,140 "primaryKey": false,
141 "notNull": true141 "notNull": true
142 }
143 },
144 "indexes": {},
145 "foreignKeys": {},
146 "compositePrimaryKeys": {
147 "blob_namespace_key_pk": {
148 "name": "blob_namespace_key_pk",
149 "columns": ["namespace", "key"]
150 }
151 },
152 "uniqueConstraints": {},
153 "policies": {},
154 "checkConstraints": {},
155 "isRLSEnabled": false
156 },
157 "public.definition": {
158 "name": "definition",
159 "schema": "",
160 "columns": {
161 "id": {
162 "name": "id",
163 "type": "text",
164 "primaryKey": false,
165 "notNull": true
166 },142 },
167 "scope_id": {143 "row_id": {
168 "name": "scope_id",144 "name": "row_id",
169 "type": "text",145 "type": "varchar(255)",
170 "primaryKey": false,146 "primaryKey": true,
171 "notNull": true
172 },
173 "source_id": {
174 "name": "source_id",
175 "type": "text",
176 "primaryKey": false,
177 "notNull": true
178 },
179 "plugin_id": {
180 "name": "plugin_id",
181 "type": "text",
182 "primaryKey": false,
183 "notNull": true
184 },
185 "name": {
186 "name": "name",
187 "type": "text",
188 "primaryKey": false,
189 "notNull": true
190 },
191 "schema": {
192 "name": "schema",
193 "type": "jsonb",
194 "primaryKey": false,
195 "notNull": true147 "notNull": true
196 },148 },
197 "created_at": {149 "id": {
198 "name": "created_at",150 "name": "id",
199 "type": "timestamp",151 "type": "varchar(255)",
200 "primaryKey": false,152 "primaryKey": false,
201 "notNull": true153 "notNull": true
202 }154 }
203 },155 },
204 "indexes": {156 "indexes": {
205 "definition_scope_id_idx": {157 "blob_id_uidx": {
206 "name": "definition_scope_id_idx",158 "name": "blob_id_uidx",
207 "columns": [
208 {
209 "expression": "scope_id",
210 "isExpression": false,
211 "asc": true,
212 "nulls": "last"
213 }
214 ],
215 "isUnique": false,
216 "concurrently": false,
217 "method": "btree",
218 "with": {}
219 },
220 "definition_source_id_idx": {
221 "name": "definition_source_id_idx",
222 "columns": [
223 {
224 "expression": "source_id",
225 "isExpression": false,
226 "asc": true,
227 "nulls": "last"
228 }
229 ],
230 "isUnique": false,
231 "concurrently": false,
232 "method": "btree",
233 "with": {}
234 },
235 "definition_plugin_id_idx": {
236 "name": "definition_plugin_id_idx",
237 "columns": [159 "columns": [
238 {160 {
239 "expression": "plugin_id",161 "expression": "id",
240 "isExpression": false,162 "isExpression": false,
241 "asc": true,163 "asc": true,
242 "nulls": "last"164 "nulls": "last"
243 }165 }
244 ],166 ],
245 "isUnique": false,167 "isUnique": true,
246 "concurrently": false,168 "concurrently": false,
247 "method": "btree",169 "method": "btree",
248 "with": {}170 "with": {}
249 }171 }
250 },172 },
251 "foreignKeys": {},173 "foreignKeys": {},
252 "compositePrimaryKeys": {174 "compositePrimaryKeys": {},
253 "definition_scope_id_id_pk": {
254 "name": "definition_scope_id_id_pk",
255 "columns": ["scope_id", "id"]
256 }
257 },
258 "uniqueConstraints": {},175 "uniqueConstraints": {},
259 "policies": {},176 "policies": {},
260 "checkConstraints": {},177 "checkConstraints": {},
261 "isRLSEnabled": false178 "isRLSEnabled": false
262 },179 },
263 "public.graphql_operation": {180 "public.connection": {
264 "name": "graphql_operation",181 "name": "connection",
265 "schema": "",182 "schema": "",
266 "columns": {183 "columns": {
267 "id": {184 "integration": {
268 "name": "id",185 "name": "integration",
269 "type": "text",186 "type": "varchar(255)",
187 "primaryKey": false,
188 "notNull": true
189 },
190 "name": {
191 "name": "name",
192 "type": "varchar(255)",
270 "primaryKey": false,193 "primaryKey": false,
271 "notNull": true194 "notNull": true
272 },195 },
273 "scope_id": {196 "template": {
274 "name": "scope_id",197 "name": "template",
275 "type": "text",198 "type": "text",
276 "primaryKey": false,199 "primaryKey": false,
277 "notNull": true200 "notNull": true
278 },201 },
279 "source_id": {202 "provider": {
280 "name": "source_id",203 "name": "provider",
281 "type": "text",204 "type": "text",
282 "primaryKey": false,205 "primaryKey": false,
283 "notNull": true206 "notNull": true
284 },207 },
285 "binding": {208 "item_ids": {
286 "name": "binding",209 "name": "item_ids",
287 "type": "jsonb",210 "type": "json",
288 "primaryKey": false,211 "primaryKey": false,
289 "notNull": true212 "notNull": true
290 }
291 },
292 "indexes": {
293 "graphql_operation_scope_id_idx": {
294 "name": "graphql_operation_scope_id_idx",
295 "columns": [
296 {
297 "expression": "scope_id",
298 "isExpression": false,
299 "asc": true,
300 "nulls": "last"
301 }
302 ],
303 "isUnique": false,
304 "concurrently": false,
305 "method": "btree",
306 "with": {}
307 },213 },
308 "graphql_operation_source_id_idx": {214 "identity_label": {
309 "name": "graphql_operation_source_id_idx",215 "name": "identity_label",
310 "columns": [
311 {
312 "expression": "source_id",
313 "isExpression": false,
314 "asc": true,
315 "nulls": "last"
316 }
317 ],
318 "isUnique": false,
319 "concurrently": false,
320 "method": "btree",
321 "with": {}
322 }
323 },
324 "foreignKeys": {},
325 "compositePrimaryKeys": {
326 "graphql_operation_scope_id_id_pk": {
327 "name": "graphql_operation_scope_id_id_pk",
328 "columns": ["scope_id", "id"]
329 }
330 },
331 "uniqueConstraints": {},
332 "policies": {},
333 "checkConstraints": {},
334 "isRLSEnabled": false
335 },
336 "public.graphql_source": {
337 "name": "graphql_source",
338 "schema": "",
339 "columns": {
340 "id": {
341 "name": "id",
342 "type": "text",216 "type": "text",
343 "primaryKey": false,217 "primaryKey": false,
344 "notNull": true218 "notNull": false
345 },219 },
346 "scope_id": {220 "oauth_client": {
347 "name": "scope_id",221 "name": "oauth_client",
348 "type": "text",222 "type": "text",
349 "primaryKey": false,223 "primaryKey": false,
350 "notNull": true224 "notNull": false
351 },225 },
352 "name": {226 "oauth_client_owner": {
353 "name": "name",227 "name": "oauth_client_owner",
354 "type": "text",228 "type": "text",
355 "primaryKey": false,229 "primaryKey": false,
356 "notNull": true230 "notNull": false
357 },231 },
358 "endpoint": {232 "refresh_item_id": {
359 "name": "endpoint",233 "name": "refresh_item_id",
360 "type": "text",234 "type": "text",
361 "primaryKey": false,235 "primaryKey": false,
362 "notNull": true236 "notNull": false
363 },237 },
364 "headers": {238 "expires_at": {
365 "name": "headers",239 "name": "expires_at",
366 "type": "jsonb",240 "type": "bigint",
367 "primaryKey": false,241 "primaryKey": false,
368 "notNull": false242 "notNull": false
369 }243 },
370 },244 "oauth_scope": {
371 "indexes": {245 "name": "oauth_scope",
372 "graphql_source_scope_id_idx": {
373 "name": "graphql_source_scope_id_idx",
374 "columns": [
375 {
376 "expression": "scope_id",
377 "isExpression": false,
378 "asc": true,
379 "nulls": "last"
380 }
381 ],
382 "isUnique": false,
383 "concurrently": false,
384 "method": "btree",
385 "with": {}
386 }
387 },
388 "foreignKeys": {},
389 "compositePrimaryKeys": {
390 "graphql_source_scope_id_id_pk": {
391 "name": "graphql_source_scope_id_id_pk",
392 "columns": ["scope_id", "id"]
393 }
394 },
395 "uniqueConstraints": {},
396 "policies": {},
397 "checkConstraints": {},
398 "isRLSEnabled": false
399 },
400 "public.mcp_binding": {
401 "name": "mcp_binding",
402 "schema": "",
403 "columns": {
404 "id": {
405 "name": "id",
406 "type": "text",246 "type": "text",
407 "primaryKey": false,247 "primaryKey": false,
248 "notNull": false
249 },
250 "provider_state": {
251 "name": "provider_state",
252 "type": "json",
253 "primaryKey": false,
254 "notNull": false
255 },
256 "created_at": {
257 "name": "created_at",
258 "type": "timestamp",
259 "primaryKey": false,
408 "notNull": true260 "notNull": true
409 },261 },
410 "scope_id": {262 "updated_at": {
411 "name": "scope_id",263 "name": "updated_at",
412 "type": "text",264 "type": "timestamp",
413 "primaryKey": false,265 "primaryKey": false,
414 "notNull": true266 "notNull": true
415 },267 },
416 "source_id": {268 "row_id": {
417 "name": "source_id",269 "name": "row_id",
418 "type": "text",270 "type": "varchar(255)",
271 "primaryKey": true,
272 "notNull": true
273 },
274 "tenant": {
275 "name": "tenant",
276 "type": "varchar(255)",
419 "primaryKey": false,277 "primaryKey": false,
420 "notNull": true278 "notNull": true
421 },279 },
422 "binding": {280 "owner": {
423 "name": "binding",281 "name": "owner",
424 "type": "jsonb",282 "type": "varchar(255)",
425 "primaryKey": false,283 "primaryKey": false,
426 "notNull": true284 "notNull": true
427 },285 },
428 "created_at": {286 "subject": {
429 "name": "created_at",287 "name": "subject",
430 "type": "timestamp",288 "type": "varchar(255)",
431 "primaryKey": false,289 "primaryKey": false,
432 "notNull": true290 "notNull": true
433 }291 }
434 },292 },
435 "indexes": {293 "indexes": {
436 "mcp_binding_scope_id_idx": {294 "connection_uidx": {
437 "name": "mcp_binding_scope_id_idx",295 "name": "connection_uidx",
438 "columns": [296 "columns": [
439 {297 {
440 "expression": "scope_id",298 "expression": "tenant",
441 "isExpression": false,299 "isExpression": false,
442 "asc": true,300 "asc": true,
443 "nulls": "last"301 "nulls": "last"
444 }302 },
445 ],303 {
446 "isUnique": false,304 "expression": "owner",
447 "concurrently": false,305 "isExpression": false,
448 "method": "btree",306 "asc": true,
449 "with": {}307 "nulls": "last"
450 },308 },
451 "mcp_binding_source_id_idx": {309 {
452 "name": "mcp_binding_source_id_idx",310 "expression": "subject",
453 "columns": [311 "isExpression": false,
312 "asc": true,
313 "nulls": "last"
314 },
315 {
316 "expression": "integration",
317 "isExpression": false,
318 "asc": true,
319 "nulls": "last"
320 },
454 {321 {
455 "expression": "source_id",322 "expression": "name",
456 "isExpression": false,323 "isExpression": false,
457 "asc": true,324 "asc": true,
458 "nulls": "last"325 "nulls": "last"
459 }326 }
460 ],327 ],
461 "isUnique": false,328 "isUnique": true,
462 "concurrently": false,329 "concurrently": false,
463 "method": "btree",330 "method": "btree",
464 "with": {}331 "with": {}
465 }332 }
466 },333 },
467 "foreignKeys": {},334 "foreignKeys": {},
468 "compositePrimaryKeys": {335 "compositePrimaryKeys": {},
469 "mcp_binding_scope_id_id_pk": {
470 "name": "mcp_binding_scope_id_id_pk",
471 "columns": ["scope_id", "id"]
472 }
473 },
474 "uniqueConstraints": {},336 "uniqueConstraints": {},
475 "policies": {},337 "policies": {},
476 "checkConstraints": {},338 "checkConstraints": {},
477 "isRLSEnabled": false339 "isRLSEnabled": false
478 },340 },
479 "public.mcp_oauth_session": {341 "public.definition": {
480 "name": "mcp_oauth_session",342 "name": "definition",
481 "schema": "",343 "schema": "",
482 "columns": {344 "columns": {
483 "id": {345 "integration": {
484 "name": "id",346 "name": "integration",
485 "type": "text",347 "type": "varchar(255)",
348 "primaryKey": false,
349 "notNull": true
350 },
351 "connection": {
352 "name": "connection",
353 "type": "varchar(255)",
486 "primaryKey": false,354 "primaryKey": false,
487 "notNull": true355 "notNull": true
488 },356 },
489 "scope_id": {357 "plugin_id": {
490 "name": "scope_id",358 "name": "plugin_id",
491 "type": "text",359 "type": "text",
492 "primaryKey": false,360 "primaryKey": false,
493 "notNull": true361 "notNull": true
494 },362 },
495 "session": {363 "name": {
496 "name": "session",364 "name": "name",
497 "type": "jsonb",365 "type": "varchar(255)",
498 "primaryKey": false,366 "primaryKey": false,
499 "notNull": true367 "notNull": true
500 },368 },
501 "expires_at": {369 "schema": {
502 "name": "expires_at",370 "name": "schema",
503 "type": "integer",371 "type": "json",
504 "primaryKey": false,372 "primaryKey": false,
505 "notNull": true373 "notNull": true
506 },374 },
@@ -509,326 +377,320 @@ · 2 unmodified lines
509 "type": "timestamp",377 "type": "timestamp",
510 "primaryKey": false,378 "primaryKey": false,
511 "notNull": true379 "notNull": true
512 }
513 },
514 "indexes": {
515 "mcp_oauth_session_scope_id_idx": {
516 "name": "mcp_oauth_session_scope_id_idx",
517 "columns": [
518 {
519 "expression": "scope_id",
520 "isExpression": false,
521 "asc": true,
522 "nulls": "last"
523 }
524 ],
525 "isUnique": false,
526 "concurrently": false,
527 "method": "btree",
528 "with": {}
529 }
530 },
531 "foreignKeys": {},
532 "compositePrimaryKeys": {
533 "mcp_oauth_session_scope_id_id_pk": {
534 "name": "mcp_oauth_session_scope_id_id_pk",
535 "columns": ["scope_id", "id"]
536 }
537 },
538 "uniqueConstraints": {},
539 "policies": {},
540 "checkConstraints": {},
541 "isRLSEnabled": false
542 },
543 "public.mcp_source": {
544 "name": "mcp_source",
545 "schema": "",
546 "columns": {
547 "id": {
548 "name": "id",
549 "type": "text",
550 "primaryKey": false,
551 "notNull": true
552 },380 },
553 "scope_id": {381 "row_id": {
554 "name": "scope_id",382 "name": "row_id",
555 "type": "text",383 "type": "varchar(255)",
556 "primaryKey": false,384 "primaryKey": true,
557 "notNull": true385 "notNull": true
558 },386 },
559 "name": {387 "tenant": {
560 "name": "name",388 "name": "tenant",
561 "type": "text",389 "type": "varchar(255)",
562 "primaryKey": false,390 "primaryKey": false,
563 "notNull": true391 "notNull": true
564 },392 },
565 "config": {393 "owner": {
566 "name": "config",394 "name": "owner",
567 "type": "jsonb",395 "type": "varchar(255)",
568 "primaryKey": false,396 "primaryKey": false,
569 "notNull": true397 "notNull": true
570 },398 },
571 "created_at": {399 "subject": {
572 "name": "created_at",400 "name": "subject",
573 "type": "timestamp",401 "type": "varchar(255)",
574 "primaryKey": false,402 "primaryKey": false,
575 "notNull": true403 "notNull": true
576 }404 }
577 },405 },
578 "indexes": {406 "indexes": {
579 "mcp_source_scope_id_idx": {407 "definition_uidx": {
580 "name": "mcp_source_scope_id_idx",408 "name": "definition_uidx",
581 "columns": [409 "columns": [
582 {410 {
583 "expression": "scope_id",411 "expression": "tenant",
412 "isExpression": false,
413 "asc": true,
414 "nulls": "last"
415 },
416 {
417 "expression": "owner",
418 "isExpression": false,
419 "asc": true,
420 "nulls": "last"
421 },
422 {
423 "expression": "subject",
424 "isExpression": false,
425 "asc": true,
426 "nulls": "last"
427 },
428 {
429 "expression": "integration",
430 "isExpression": false,
431 "asc": true,
432 "nulls": "last"
433 },
434 {
435 "expression": "connection",
436 "isExpression": false,
437 "asc": true,
438 "nulls": "last"
439 },
440 {
441 "expression": "name",
584 "isExpression": false,442 "isExpression": false,
585 "asc": true,443 "asc": true,
586 "nulls": "last"444 "nulls": "last"
587 }445 }
588 ],446 ],
589 "isUnique": false,447 "isUnique": true,
590 "concurrently": false,448 "concurrently": false,
591 "method": "btree",449 "method": "btree",
592 "with": {}450 "with": {}
593 }451 }
594 },452 },
595 "foreignKeys": {},453 "foreignKeys": {},
596 "compositePrimaryKeys": {454 "compositePrimaryKeys": {},
597 "mcp_source_scope_id_id_pk": {
598 "name": "mcp_source_scope_id_id_pk",
599 "columns": ["scope_id", "id"]
600 }
601 },
602 "uniqueConstraints": {},455 "uniqueConstraints": {},
603 "policies": {},456 "policies": {},
604 "checkConstraints": {},457 "checkConstraints": {},
605 "isRLSEnabled": false458 "isRLSEnabled": false
606 },459 },
607 "public.openapi_oauth_session": {460 "public.integration": {
608 "name": "openapi_oauth_session",461 "name": "integration",
609 "schema": "",462 "schema": "",
610 "columns": {463 "columns": {
611 "id": {464 "slug": {
612 "name": "id",465 "name": "slug",
613 "type": "text",466 "type": "varchar(255)",
614 "primaryKey": false,467 "primaryKey": false,
615 "notNull": true468 "notNull": true
616 },469 },
617 "scope_id": {470 "plugin_id": {
618 "name": "scope_id",471 "name": "plugin_id",
619 "type": "text",472 "type": "text",
620 "primaryKey": false,473 "primaryKey": false,
621 "notNull": true474 "notNull": true
622 },475 },
623 "session": {476 "description": {
624 "name": "session",477 "name": "description",
625 "type": "jsonb",478 "type": "text",
626 "primaryKey": false,479 "primaryKey": false,
627 "notNull": true480 "notNull": true
628 },481 },
482 "config": {
483 "name": "config",
484 "type": "json",
485 "primaryKey": false,
486 "notNull": false
487 },
488 "can_remove": {
489 "name": "can_remove",
490 "type": "boolean",
491 "primaryKey": false,
492 "notNull": true,
493 "default": true
494 },
495 "can_refresh": {
496 "name": "can_refresh",
497 "type": "boolean",
498 "primaryKey": false,
499 "notNull": true,
500 "default": false
501 },
629 "created_at": {502 "created_at": {
630 "name": "created_at",503 "name": "created_at",
631 "type": "timestamp",504 "type": "timestamp",
632 "primaryKey": false,505 "primaryKey": false,
633 "notNull": true506 "notNull": true
634 }
635 },
636 "indexes": {
637 "openapi_oauth_session_scope_id_idx": {
638 "name": "openapi_oauth_session_scope_id_idx",
639 "columns": [
640 {
641 "expression": "scope_id",
642 "isExpression": false,
643 "asc": true,
644 "nulls": "last"
645 }
646 ],
647 "isUnique": false,
648 "concurrently": false,
649 "method": "btree",
650 "with": {}
651 }
652 },
653 "foreignKeys": {},
654 "compositePrimaryKeys": {
655 "openapi_oauth_session_scope_id_id_pk": {
656 "name": "openapi_oauth_session_scope_id_id_pk",
657 "columns": ["scope_id", "id"]
658 }
659 },
660 "uniqueConstraints": {},
661 "policies": {},
662 "checkConstraints": {},
663 "isRLSEnabled": false
664 },
665 "public.openapi_operation": {
666 "name": "openapi_operation",
667 "schema": "",
668 "columns": {
669 "id": {
670 "name": "id",
671 "type": "text",
672 "primaryKey": false,
673 "notNull": true
674 },507 },
675 "scope_id": {508 "updated_at": {
676 "name": "scope_id",509 "name": "updated_at",
677 "type": "text",510 "type": "timestamp",
678 "primaryKey": false,511 "primaryKey": false,
679 "notNull": true512 "notNull": true
680 },513 },
681 "source_id": {514 "row_id": {
682 "name": "source_id",515 "name": "row_id",
683 "type": "text",516 "type": "varchar(255)",
684 "primaryKey": false,517 "primaryKey": true,
685 "notNull": true518 "notNull": true
686 },519 },
687 "binding": {520 "tenant": {
688 "name": "binding",521 "name": "tenant",
689 "type": "jsonb",522 "type": "varchar(255)",
690 "primaryKey": false,523 "primaryKey": false,
691 "notNull": true524 "notNull": true
692 }525 }
693 },526 },
694 "indexes": {527 "indexes": {
695 "openapi_operation_scope_id_idx": {528 "integration_uidx": {
696 "name": "openapi_operation_scope_id_idx",529 "name": "integration_uidx",
697 "columns": [530 "columns": [
698 {531 {
699 "expression": "scope_id",532 "expression": "tenant",
700 "isExpression": false,533 "isExpression": false,
701 "asc": true,534 "asc": true,
702 "nulls": "last"535 "nulls": "last"
703 }536 },
704 ],
705 "isUnique": false,
706 "concurrently": false,
707 "method": "btree",
708 "with": {}
709 },
710 "openapi_operation_source_id_idx": {
711 "name": "openapi_operation_source_id_idx",
712 "columns": [
713 {537 {
714 "expression": "source_id",538 "expression": "slug",
715 "isExpression": false,539 "isExpression": false,
716 "asc": true,540 "asc": true,
717 "nulls": "last"541 "nulls": "last"
718 }542 }
719 ],543 ],
720 "isUnique": false,544 "isUnique": true,
721 "concurrently": false,545 "concurrently": false,
722 "method": "btree",546 "method": "btree",
723 "with": {}547 "with": {}
724 }548 }
725 },549 },
726 "foreignKeys": {},550 "foreignKeys": {},
727 "compositePrimaryKeys": {551 "compositePrimaryKeys": {},
728 "openapi_operation_scope_id_id_pk": {
729 "name": "openapi_operation_scope_id_id_pk",
730 "columns": ["scope_id", "id"]
731 }
732 },
733 "uniqueConstraints": {},552 "uniqueConstraints": {},
734 "policies": {},553 "policies": {},
735 "checkConstraints": {},554 "checkConstraints": {},
736 "isRLSEnabled": false555 "isRLSEnabled": false
737 },556 },
738 "public.openapi_source": {557 "public.oauth_client": {
739 "name": "openapi_source",558 "name": "oauth_client",
740 "schema": "",559 "schema": "",
741 "columns": {560 "columns": {
742 "id": {561 "slug": {
743 "name": "id",562 "name": "slug",
563 "type": "varchar(255)",
564 "primaryKey": false,
565 "notNull": true
566 },
567 "authorization_url": {
568 "name": "authorization_url",
744 "type": "text",569 "type": "text",
745 "primaryKey": false,570 "primaryKey": false,
746 "notNull": true571 "notNull": true
747 },572 },
748 "scope_id": {573 "token_url": {
749 "name": "scope_id",574 "name": "token_url",
750 "type": "text",575 "type": "text",
751 "primaryKey": false,576 "primaryKey": false,
752 "notNull": true577 "notNull": true
753 },578 },
754 "name": {579 "grant": {
755 "name": "name",580 "name": "grant",
756 "type": "text",581 "type": "text",
757 "primaryKey": false,582 "primaryKey": false,
758 "notNull": true583 "notNull": true
759 },584 },
760 "spec": {585 "client_id": {
761 "name": "spec",586 "name": "client_id",
762 "type": "text",587 "type": "text",
763 "primaryKey": false,588 "primaryKey": false,
764 "notNull": true589 "notNull": true
765 },590 },
766 "base_url": {591 "client_secret_item_id": {
767 "name": "base_url",592 "name": "client_secret_item_id",
768 "type": "text",593 "type": "text",
769 "primaryKey": false,594 "primaryKey": false,
770 "notNull": false595 "notNull": false
771 },596 },
772 "headers": {597 "resource": {
773 "name": "headers",598 "name": "resource",
774 "type": "jsonb",599 "type": "text",
600 "primaryKey": false,
601 "notNull": false
602 },
603 "created_at": {
604 "name": "created_at",
605 "type": "timestamp",
606 "primaryKey": false,
607 "notNull": true
608 },
609 "row_id": {
610 "name": "row_id",
611 "type": "varchar(255)",
612 "primaryKey": true,
613 "notNull": true
614 },
615 "tenant": {
616 "name": "tenant",
617 "type": "varchar(255)",
775 "primaryKey": false,618 "primaryKey": false,
776 "notNull": false619 "notNull": true
777 },620 },
778 "oauth2": {621 "owner": {
779 "name": "oauth2",622 "name": "owner",
780 "type": "jsonb",623 "type": "varchar(255)",
781 "primaryKey": false,624 "primaryKey": false,
782 "notNull": false625 "notNull": true
783 },626 },
784 "invocation_config": {627 "subject": {
785 "name": "invocation_config",628 "name": "subject",
786 "type": "jsonb",629 "type": "varchar(255)",
787 "primaryKey": false,630 "primaryKey": false,
788 "notNull": true631 "notNull": true
789 }632 }
790 },633 },
791 "indexes": {634 "indexes": {
792 "openapi_source_scope_id_idx": {635 "oauth_client_uidx": {
793 "name": "openapi_source_scope_id_idx",636 "name": "oauth_client_uidx",
794 "columns": [637 "columns": [
795 {638 {
796 "expression": "scope_id",639 "expression": "tenant",
640 "isExpression": false,
641 "asc": true,
642 "nulls": "last"
643 },
644 {
645 "expression": "owner",
646 "isExpression": false,
647 "asc": true,
648 "nulls": "last"
649 },
650 {
651 "expression": "subject",
652 "isExpression": false,
653 "asc": true,
654 "nulls": "last"
655 },
656 {
657 "expression": "slug",
797 "isExpression": false,658 "isExpression": false,
798 "asc": true,659 "asc": true,
799 "nulls": "last"660 "nulls": "last"
800 }661 }
801 ],662 ],
802 "isUnique": false,663 "isUnique": true,
803 "concurrently": false,664 "concurrently": false,
804 "method": "btree",665 "method": "btree",
805 "with": {}666 "with": {}
806 }667 }
807 },668 },
808 "foreignKeys": {},669 "foreignKeys": {},
809 "compositePrimaryKeys": {670 "compositePrimaryKeys": {},
810 "openapi_source_scope_id_id_pk": {
811 "name": "openapi_source_scope_id_id_pk",
812 "columns": ["scope_id", "id"]
813 }
814 },
815 "uniqueConstraints": {},671 "uniqueConstraints": {},
816 "policies": {},672 "policies": {},
817 "checkConstraints": {},673 "checkConstraints": {},
818 "isRLSEnabled": false674 "isRLSEnabled": false
819 },675 },
820 "public.secret": {676 "public.oauth_session": {
821 "name": "secret",677 "name": "oauth_session",
822 "schema": "",678 "schema": "",
823 "columns": {679 "columns": {
824 "id": {680 "state": {
825 "name": "id",681 "name": "state",
682 "type": "varchar(255)",
683 "primaryKey": false,
684 "notNull": true
685 },
686 "client_slug": {
687 "name": "client_slug",
826 "type": "text",688 "type": "text",
827 "primaryKey": false,689 "primaryKey": false,
828 "notNull": true690 "notNull": true
829 },691 },
830 "scope_id": {692 "integration": {
831 "name": "scope_id",693 "name": "integration",
832 "type": "text",694 "type": "text",
833 "primaryKey": false,695 "primaryKey": false,
834 "notNull": true696 "notNull": true
@@ -839,200 +701,261 @@ · 4 unmodified lines
839 "primaryKey": false,701 "primaryKey": false,
840 "notNull": true702 "notNull": true
841 },703 },
842 "provider": {704 "template": {
843 "name": "provider",705 "name": "template",
706 "type": "text",
707 "primaryKey": false,
708 "notNull": true
709 },
710 "redirect_url": {
711 "name": "redirect_url",
844 "type": "text",712 "type": "text",
845 "primaryKey": false,713 "primaryKey": false,
846 "notNull": true714 "notNull": true
847 },715 },
716 "pkce_verifier": {
717 "name": "pkce_verifier",
718 "type": "text",
719 "primaryKey": false,
720 "notNull": false
721 },
722 "identity_label": {
723 "name": "identity_label",
724 "type": "text",
725 "primaryKey": false,
726 "notNull": false
727 },
728 "payload": {
729 "name": "payload",
730 "type": "json",
731 "primaryKey": false,
732 "notNull": true
733 },
734 "expires_at": {
735 "name": "expires_at",
736 "type": "bigint",
737 "primaryKey": false,
738 "notNull": true
739 },
848 "created_at": {740 "created_at": {
849 "name": "created_at",741 "name": "created_at",
850 "type": "timestamp",742 "type": "timestamp",
851 "primaryKey": false,743 "primaryKey": false,
852 "notNull": true744 "notNull": true
745 },
746 "row_id": {
747 "name": "row_id",
748 "type": "varchar(255)",
749 "primaryKey": true,
750 "notNull": true
751 },
752 "tenant": {
753 "name": "tenant",
754 "type": "varchar(255)",
755 "primaryKey": false,
756 "notNull": true
757 },
758 "owner": {
759 "name": "owner",
760 "type": "varchar(255)",
761 "primaryKey": false,
762 "notNull": true
763 },
764 "subject": {
765 "name": "subject",
766 "type": "varchar(255)",
767 "primaryKey": false,
768 "notNull": true
853 }769 }
854 },770 },
855 "indexes": {771 "indexes": {
856 "secret_scope_id_idx": {772 "oauth_session_uidx": {
857 "name": "secret_scope_id_idx",773 "name": "oauth_session_uidx",
858 "columns": [774 "columns": [
859 {775 {
860 "expression": "scope_id",776 "expression": "tenant",
861 "isExpression": false,777 "isExpression": false,
862 "asc": true,778 "asc": true,
863 "nulls": "last"779 "nulls": "last"
864 }780 },
865 ],
866 "isUnique": false,
867 "concurrently": false,
868 "method": "btree",
869 "with": {}
870 },
871 "secret_provider_idx": {
872 "name": "secret_provider_idx",
873 "columns": [
874 {781 {
875 "expression": "provider",782 "expression": "state",
876 "isExpression": false,783 "isExpression": false,
877 "asc": true,784 "asc": true,
878 "nulls": "last"785 "nulls": "last"
879 }786 }
880 ],787 ],
881 "isUnique": false,788 "isUnique": true,
882 "concurrently": false,789 "concurrently": false,
883 "method": "btree",790 "method": "btree",
884 "with": {}791 "with": {}
885 }792 }
886 },793 },
887 "foreignKeys": {},794 "foreignKeys": {},
888 "compositePrimaryKeys": {795 "compositePrimaryKeys": {},
889 "secret_scope_id_id_pk": {
890 "name": "secret_scope_id_id_pk",
891 "columns": ["scope_id", "id"]
892 }
893 },
894 "uniqueConstraints": {},796 "uniqueConstraints": {},
895 "policies": {},797 "policies": {},
896 "checkConstraints": {},798 "checkConstraints": {},
897 "isRLSEnabled": false799 "isRLSEnabled": false
898 },800 },
899 "public.source": {801 "public.plugin_storage": {
900 "name": "source",802 "name": "plugin_storage",
901 "schema": "",803 "schema": "",
902 "columns": {804 "columns": {
903 "id": {805 "plugin_id": {
904 "name": "id",806 "name": "plugin_id",
905 "type": "text",807 "type": "varchar(255)",
906 "primaryKey": false,808 "primaryKey": false,
907 "notNull": true809 "notNull": true
908 },810 },
909 "scope_id": {811 "collection": {
910 "name": "scope_id",812 "name": "collection",
911 "type": "text",813 "type": "varchar(255)",
912 "primaryKey": false,814 "primaryKey": false,
913 "notNull": true815 "notNull": true
914 },816 },
915 "plugin_id": {817 "key": {
916 "name": "plugin_id",818 "name": "key",
917 "type": "text",819 "type": "varchar(255)",
918 "primaryKey": false,820 "primaryKey": false,
919 "notNull": true821 "notNull": true
920 },822 },
921 "kind": {823 "data": {
922 "name": "kind",824 "name": "data",
923 "type": "text",825 "type": "json",
924 "primaryKey": false,826 "primaryKey": false,
925 "notNull": true827 "notNull": true
926 },828 },
927 "name": {829 "created_at": {
928 "name": "name",830 "name": "created_at",
929 "type": "text",831 "type": "timestamp",
930 "primaryKey": false,832 "primaryKey": false,
931 "notNull": true833 "notNull": true
932 },834 },
933 "url": {835 "updated_at": {
934 "name": "url",836 "name": "updated_at",
935 "type": "text",837 "type": "timestamp",
936 "primaryKey": false,
937 "notNull": false
938 },
939 "can_remove": {
940 "name": "can_remove",
941 "type": "boolean",
942 "primaryKey": false,838 "primaryKey": false,
943 "notNull": true,839 "notNull": true
944 "default": true
945 },840 },
946 "can_refresh": {841 "row_id": {
947 "name": "can_refresh",842 "name": "row_id",
948 "type": "boolean",843 "type": "varchar(255)",
949 "primaryKey": false,844 "primaryKey": true,
950 "notNull": true,845 "notNull": true
951 "default": false
952 },846 },
953 "can_edit": {847 "tenant": {
954 "name": "can_edit",848 "name": "tenant",
955 "type": "boolean",849 "type": "varchar(255)",
956 "primaryKey": false,850 "primaryKey": false,
957 "notNull": true,851 "notNull": true
958 "default": false
959 },852 },
960 "created_at": {853 "owner": {
961 "name": "created_at",854 "name": "owner",
962 "type": "timestamp",855 "type": "varchar(255)",
963 "primaryKey": false,856 "primaryKey": false,
964 "notNull": true857 "notNull": true
965 },858 },
966 "updated_at": {859 "subject": {
967 "name": "updated_at",860 "name": "subject",
968 "type": "timestamp",861 "type": "varchar(255)",
969 "primaryKey": false,862 "primaryKey": false,
970 "notNull": true863 "notNull": true
971 }864 }
972 },865 },
973 "indexes": {866 "indexes": {
974 "source_scope_id_idx": {867 "plugin_storage_uidx": {
975 "name": "source_scope_id_idx",868 "name": "plugin_storage_uidx",
976 "columns": [869 "columns": [
977 {870 {
978 "expression": "scope_id",871 "expression": "tenant",
979 "isExpression": false,872 "isExpression": false,
980 "asc": true,873 "asc": true,
981 "nulls": "last"874 "nulls": "last"
982 }875 },
983 ],876 {
984 "isUnique": false,877 "expression": "owner",
985 "concurrently": false,878 "isExpression": false,
986 "method": "btree",879 "asc": true,
987 "with": {}880 "nulls": "last"
988 },881 },
989 "source_plugin_id_idx": {882 {
990 "name": "source_plugin_id_idx",883 "expression": "subject",
991 "columns": [884 "isExpression": false,
885 "asc": true,
886 "nulls": "last"
887 },
992 {888 {
993 "expression": "plugin_id",889 "expression": "plugin_id",
994 "isExpression": false,890 "isExpression": false,
995 "asc": true,891 "asc": true,
996 "nulls": "last"892 "nulls": "last"
893 },
894 {
895 "expression": "collection",
896 "isExpression": false,
897 "asc": true,
898 "nulls": "last"
899 },
900 {
901 "expression": "key",
902 "isExpression": false,
903 "asc": true,
904 "nulls": "last"
997 }905 }
998 ],906 ],
999 "isUnique": false,907 "isUnique": true,
1000 "concurrently": false,908 "concurrently": false,
1001 "method": "btree",909 "method": "btree",
1002 "with": {}910 "with": {}
1003 }911 }
1004 },912 },
1005 "foreignKeys": {},913 "foreignKeys": {},
1006 "compositePrimaryKeys": {914 "compositePrimaryKeys": {},
1007 "source_scope_id_id_pk": {
1008 "name": "source_scope_id_id_pk",
1009 "columns": ["scope_id", "id"]
1010 }
1011 },
1012 "uniqueConstraints": {},915 "uniqueConstraints": {},
1013 "policies": {},916 "policies": {},
1014 "checkConstraints": {},917 "checkConstraints": {},
1015 "isRLSEnabled": false918 "isRLSEnabled": false
1016 },919 },
1017 "public.tool": {920 "public.private_executor_cloud_settings": {
1018 "name": "tool",921 "name": "private_executor_cloud_settings",
1019 "schema": "",922 "schema": "",
1020 "columns": {923 "columns": {
1021 "id": {924 "id": {
1022 "name": "id",925 "name": "id",
1023 "type": "text",926 "type": "varchar(255)",
1024 "primaryKey": false,927 "primaryKey": true,
1025 "notNull": true928 "notNull": true
1026 },929 },
1027 "scope_id": {930 "version": {
1028 "name": "scope_id",931 "name": "version",
1029 "type": "text",932 "type": "varchar(255)",
933 "primaryKey": false,
934 "notNull": true,
935 "default": "'1.0.0'"
936 }
937 },
938 "indexes": {},
939 "foreignKeys": {},
940 "compositePrimaryKeys": {},
941 "uniqueConstraints": {},
942 "policies": {},
943 "checkConstraints": {},
944 "isRLSEnabled": false
945 },
946 "public.tool": {
947 "name": "tool",
948 "schema": "",
949 "columns": {
950 "integration": {
951 "name": "integration",
952 "type": "varchar(255)",
1030 "primaryKey": false,953 "primaryKey": false,
1031 "notNull": true954 "notNull": true
1032 },955 },
1033 "source_id": {956 "connection": {
1034 "name": "source_id",957 "name": "connection",
1035 "type": "text",958 "type": "varchar(255)",
1036 "primaryKey": false,959 "primaryKey": false,
1037 "notNull": true960 "notNull": true
1038 },961 },
@@ -1044,7 +967,7 @@ · 5 unmodified lines
1044 },967 },
1045 "name": {968 "name": {
1046 "name": "name",969 "name": "name",
1047 "type": "text",970 "type": "varchar(255)",
1048 "primaryKey": false,971 "primaryKey": false,
1049 "notNull": true972 "notNull": true
1050 },973 },
@@ -1056,13 +979,19 @@ · 5 unmodified lines
1056 },979 },
1057 "input_schema": {980 "input_schema": {
1058 "name": "input_schema",981 "name": "input_schema",
1059 "type": "jsonb",982 "type": "json",
1060 "primaryKey": false,983 "primaryKey": false,
1061 "notNull": false984 "notNull": false
1062 },985 },
1063 "output_schema": {986 "output_schema": {
1064 "name": "output_schema",987 "name": "output_schema",
1065 "type": "jsonb",988 "type": "json",
989 "primaryKey": false,
990 "notNull": false
991 },
992 "annotations": {
993 "name": "annotations",
994 "type": "json",
1066 "primaryKey": false,995 "primaryKey": false,
1067 "notNull": false996 "notNull": false
1068 },997 },
@@ -1077,126 +1006,188 @@ · 8 unmodified lines
1077 "type": "timestamp",1006 "type": "timestamp",
1078 "primaryKey": false,1007 "primaryKey": false,
1079 "notNull": true1008 "notNull": true
1009 },
1010 "row_id": {
1011 "name": "row_id",
1012 "type": "varchar(255)",
1013 "primaryKey": true,
1014 "notNull": true
1015 },
1016 "tenant": {
1017 "name": "tenant",
1018 "type": "varchar(255)",
1019 "primaryKey": false,
1020 "notNull": true
1021 },
1022 "owner": {
1023 "name": "owner",
1024 "type": "varchar(255)",
1025 "primaryKey": false,
1026 "notNull": true
1027 },
1028 "subject": {
1029 "name": "subject",
1030 "type": "varchar(255)",
1031 "primaryKey": false,
1032 "notNull": true
1080 }1033 }
1081 },1034 },
1082 "indexes": {1035 "indexes": {
1083 "tool_scope_id_idx": {1036 "tool_uidx": {
1084 "name": "tool_scope_id_idx",1037 "name": "tool_uidx",
1085 "columns": [1038 "columns": [
1086 {1039 {
1087 "expression": "scope_id",1040 "expression": "tenant",
1088 "isExpression": false,1041 "isExpression": false,
1089 "asc": true,1042 "asc": true,
1090 "nulls": "last"1043 "nulls": "last"
1091 }1044 },
1092 ],
1093 "isUnique": false,
1094 "concurrently": false,
1095 "method": "btree",
1096 "with": {}
1097 },
1098 "tool_source_id_idx": {
1099 "name": "tool_source_id_idx",
1100 "columns": [
1101 {1045 {
1102 "expression": "source_id",1046 "expression": "owner",
1103 "isExpression": false,1047 "isExpression": false,
1104 "asc": true,1048 "asc": true,
1105 "nulls": "last"1049 "nulls": "last"
1106 }1050 },
1107 ],
1108 "isUnique": false,
1109 "concurrently": false,
1110 "method": "btree",
1111 "with": {}
1112 },
1113 "tool_plugin_id_idx": {
1114 "name": "tool_plugin_id_idx",
1115 "columns": [
1116 {1051 {
1117 "expression": "plugin_id",1052 "expression": "subject",
1053 "isExpression": false,
1054 "asc": true,
1055 "nulls": "last"
1056 },
1057 {
1058 "expression": "integration",
1059 "isExpression": false,
1060 "asc": true,
1061 "nulls": "last"
1062 },
1063 {
1064 "expression": "connection",
1065 "isExpression": false,
1066 "asc": true,
1067 "nulls": "last"
1068 },
1069 {
1070 "expression": "name",
1118 "isExpression": false,1071 "isExpression": false,
1119 "asc": true,1072 "asc": true,
1120 "nulls": "last"1073 "nulls": "last"
1121 }1074 }
1122 ],1075 ],
1123 "isUnique": false,1076 "isUnique": true,
1124 "concurrently": false,1077 "concurrently": false,
1125 "method": "btree",1078 "method": "btree",
1126 "with": {}1079 "with": {}
1127 }1080 }
1128 },1081 },
1129 "foreignKeys": {},1082 "foreignKeys": {},
1130 "compositePrimaryKeys": {1083 "compositePrimaryKeys": {},
1131 "tool_scope_id_id_pk": {
1132 "name": "tool_scope_id_id_pk",
1133 "columns": ["scope_id", "id"]
1134 }
1135 },
1136 "uniqueConstraints": {},1084 "uniqueConstraints": {},
1137 "policies": {},1085 "policies": {},
1138 "checkConstraints": {},1086 "checkConstraints": {},
1139 "isRLSEnabled": false1087 "isRLSEnabled": false
1140 },1088 },
1141 "public.workos_vault_metadata": {1089 "public.tool_policy": {
1142 "name": "workos_vault_metadata",1090 "name": "tool_policy",
1143 "schema": "",1091 "schema": "",
1144 "columns": {1092 "columns": {
1145 "id": {1093 "id": {
1146 "name": "id",1094 "name": "id",
1147 "type": "text",1095 "type": "varchar(255)",
1148 "primaryKey": false,1096 "primaryKey": false,
1149 "notNull": true1097 "notNull": true
1150 },1098 },
1151 "scope_id": {1099 "pattern": {
1152 "name": "scope_id",1100 "name": "pattern",
1153 "type": "text",1101 "type": "text",
1154 "primaryKey": false,1102 "primaryKey": false,
1155 "notNull": true1103 "notNull": true
1156 },1104 },
1157 "name": {1105 "action": {
1158 "name": "name",1106 "name": "action",
1159 "type": "text",1107 "type": "text",
1160 "primaryKey": false,1108 "primaryKey": false,
1161 "notNull": true1109 "notNull": true
1162 },1110 },
1163 "purpose": {1111 "position": {
1164 "name": "purpose",1112 "name": "position",
1165 "type": "text",1113 "type": "text",
1166 "primaryKey": false,1114 "primaryKey": false,
1167 "notNull": false1115 "notNull": true
1168 },1116 },
1169 "created_at": {1117 "created_at": {
1170 "name": "created_at",1118 "name": "created_at",
1171 "type": "timestamp",1119 "type": "timestamp",
1172 "primaryKey": false,1120 "primaryKey": false,
1173 "notNull": true1121 "notNull": true
1122 },
1123 "updated_at": {
1124 "name": "updated_at",
1125 "type": "timestamp",
1126 "primaryKey": false,
1127 "notNull": true
1128 },
1129 "row_id": {
1130 "name": "row_id",
1131 "type": "varchar(255)",
1132 "primaryKey": true,
1133 "notNull": true
1134 },
1135 "tenant": {
1136 "name": "tenant",
1137 "type": "varchar(255)",
1138 "primaryKey": false,
1139 "notNull": true
1140 },
1141 "owner": {
1142 "name": "owner",
1143 "type": "varchar(255)",
1144 "primaryKey": false,
1145 "notNull": true
1146 },
1147 "subject": {
1148 "name": "subject",
1149 "type": "varchar(255)",
1150 "primaryKey": false,
1151 "notNull": true
1174 }1152 }
1175 },1153 },
1176 "indexes": {1154 "indexes": {
1177 "workos_vault_metadata_scope_id_idx": {1155 "tool_policy_uidx": {
1178 "name": "workos_vault_metadata_scope_id_idx",1156 "name": "tool_policy_uidx",
1179 "columns": [1157 "columns": [
1180 {1158 {
1181 "expression": "scope_id",1159 "expression": "tenant",
1160 "isExpression": false,
1161 "asc": true,
1162 "nulls": "last"
1163 },
1164 {
1165 "expression": "owner",
1166 "isExpression": false,
1167 "asc": true,
1168 "nulls": "last"
1169 },
1170 {
1171 "expression": "subject",
1172 "isExpression": false,
1173 "asc": true,
1174 "nulls": "last"
1175 },
1176 {
1177 "expression": "id",
1182 "isExpression": false,1178 "isExpression": false,
1183 "asc": true,1179 "asc": true,
1184 "nulls": "last"1180 "nulls": "last"
1185 }1181 }
1186 ],1182 ],
1187 "isUnique": false,1183 "isUnique": true,
1188 "concurrently": false,1184 "concurrently": false,
1189 "method": "btree",1185 "method": "btree",
1190 "with": {}1186 "with": {}
1191 }1187 }
1192 },1188 },
1193 "foreignKeys": {},1189 "foreignKeys": {},
1194 "compositePrimaryKeys": {1190 "compositePrimaryKeys": {},
1195 "workos_vault_metadata_scope_id_id_pk": {
1196 "name": "workos_vault_metadata_scope_id_id_pk",
1197 "columns": ["scope_id", "id"]
1198 }
1199 },
1200 "uniqueConstraints": {},1191 "uniqueConstraints": {},
1201 "policies": {},1192 "policies": {},
1202 "checkConstraints": {},1193 "checkConstraints": {},
apps/cloud/drizzle/meta/0001_snapshot.json+0−1223
@@ -1,1223 +0,0 @@
1{
2 "id": "12ebb69b-fb44-4e61-80b9-a48b5471ef5a",
3 "prevId": "93e9f8ef-fe9a-4a8c-b326-329464d876ca",
4 "version": "7",
5 "dialect": "postgresql",
6 "tables": {
7 "public.accounts": {
8 "name": "accounts",
9 "schema": "",
10 "columns": {
11 "id": {
12 "name": "id",
13 "type": "text",
14 "primaryKey": true,
15 "notNull": true
16 },
17 "created_at": {
18 "name": "created_at",
19 "type": "timestamp with time zone",
20 "primaryKey": false,
21 "notNull": true,
22 "default": "now()"
23 }
24 },
25 "indexes": {},
26 "foreignKeys": {},
27 "compositePrimaryKeys": {},
28 "uniqueConstraints": {},
29 "policies": {},
30 "checkConstraints": {},
31 "isRLSEnabled": false
32 },
33 "public.memberships": {
34 "name": "memberships",
35 "schema": "",
36 "columns": {
37 "account_id": {
38 "name": "account_id",
39 "type": "text",
40 "primaryKey": false,
41 "notNull": true
42 },
43 "organization_id": {
44 "name": "organization_id",
45 "type": "text",
46 "primaryKey": false,
47 "notNull": true
48 },
49 "created_at": {
50 "name": "created_at",
51 "type": "timestamp with time zone",
52 "primaryKey": false,
53 "notNull": true,
54 "default": "now()"
55 }
56 },
57 "indexes": {},
58 "foreignKeys": {
59 "memberships_account_id_accounts_id_fk": {
60 "name": "memberships_account_id_accounts_id_fk",
61 "tableFrom": "memberships",
62 "tableTo": "accounts",
63 "columnsFrom": ["account_id"],
64 "columnsTo": ["id"],
65 "onDelete": "cascade",
66 "onUpdate": "no action"
67 },
68 "memberships_organization_id_organizations_id_fk": {
69 "name": "memberships_organization_id_organizations_id_fk",
70 "tableFrom": "memberships",
71 "tableTo": "organizations",
72 "columnsFrom": ["organization_id"],
73 "columnsTo": ["id"],
74 "onDelete": "cascade",
75 "onUpdate": "no action"
76 }
77 },
78 "compositePrimaryKeys": {
79 "memberships_account_id_organization_id_pk": {
80 "name": "memberships_account_id_organization_id_pk",
81 "columns": ["account_id", "organization_id"]
82 }
83 },
84 "uniqueConstraints": {},
85 "policies": {},
86 "checkConstraints": {},
87 "isRLSEnabled": false
88 },
89 "public.organizations": {
90 "name": "organizations",
91 "schema": "",
92 "columns": {
93 "id": {
94 "name": "id",
95 "type": "text",
96 "primaryKey": true,
97 "notNull": true
98 },
99 "name": {
100 "name": "name",
101 "type": "text",
102 "primaryKey": false,
103 "notNull": true
104 },
105 "created_at": {
106 "name": "created_at",
107 "type": "timestamp with time zone",
108 "primaryKey": false,
109 "notNull": true,
110 "default": "now()"
111 }
112 },
113 "indexes": {},
114 "foreignKeys": {},
115 "compositePrimaryKeys": {},
116 "uniqueConstraints": {},
117 "policies": {},
118 "checkConstraints": {},
119 "isRLSEnabled": false
120 },
121 "public.blob": {
122 "name": "blob",
123 "schema": "",
124 "columns": {
125 "namespace": {
126 "name": "namespace",
127 "type": "text",
128 "primaryKey": false,
129 "notNull": true
130 },
131 "key": {
132 "name": "key",
133 "type": "text",
134 "primaryKey": false,
135 "notNull": true
136 },
137 "value": {
138 "name": "value",
139 "type": "text",
140 "primaryKey": false,
141 "notNull": true
142 }
143 },
144 "indexes": {},
145 "foreignKeys": {},
146 "compositePrimaryKeys": {
147 "blob_namespace_key_pk": {
148 "name": "blob_namespace_key_pk",
149 "columns": ["namespace", "key"]
150 }
151 },
152 "uniqueConstraints": {},
153 "policies": {},
154 "checkConstraints": {},
155 "isRLSEnabled": false
156 },
157 "public.definition": {
158 "name": "definition",
159 "schema": "",
160 "columns": {
161 "id": {
162 "name": "id",
163 "type": "text",
164 "primaryKey": false,
165 "notNull": true
166 },
167 "scope_id": {
168 "name": "scope_id",
169 "type": "text",
170 "primaryKey": false,
171 "notNull": true
172 },
173 "source_id": {
174 "name": "source_id",
175 "type": "text",
176 "primaryKey": false,
177 "notNull": true
178 },
179 "plugin_id": {
180 "name": "plugin_id",
181 "type": "text",
182 "primaryKey": false,
183 "notNull": true
184 },
185 "name": {
186 "name": "name",
187 "type": "text",
188 "primaryKey": false,
189 "notNull": true
190 },
191 "schema": {
192 "name": "schema",
193 "type": "jsonb",
194 "primaryKey": false,
195 "notNull": true
196 },
197 "created_at": {
198 "name": "created_at",
199 "type": "timestamp",
200 "primaryKey": false,
201 "notNull": true
202 }
203 },
204 "indexes": {
205 "definition_scope_id_idx": {
206 "name": "definition_scope_id_idx",
207 "columns": [
208 {
209 "expression": "scope_id",
210 "isExpression": false,
211 "asc": true,
212 "nulls": "last"
213 }
214 ],
215 "isUnique": false,
216 "concurrently": false,
217 "method": "btree",
218 "with": {}
219 },
220 "definition_source_id_idx": {
221 "name": "definition_source_id_idx",
222 "columns": [
223 {
224 "expression": "source_id",
225 "isExpression": false,
226 "asc": true,
227 "nulls": "last"
228 }
229 ],
230 "isUnique": false,
231 "concurrently": false,
232 "method": "btree",
233 "with": {}
234 },
235 "definition_plugin_id_idx": {
236 "name": "definition_plugin_id_idx",
237 "columns": [
238 {
239 "expression": "plugin_id",
240 "isExpression": false,
241 "asc": true,
242 "nulls": "last"
243 }
244 ],
245 "isUnique": false,
246 "concurrently": false,
247 "method": "btree",
248 "with": {}
249 }
250 },
251 "foreignKeys": {},
252 "compositePrimaryKeys": {
253 "definition_scope_id_id_pk": {
254 "name": "definition_scope_id_id_pk",
255 "columns": ["scope_id", "id"]
256 }
257 },
258 "uniqueConstraints": {},
259 "policies": {},
260 "checkConstraints": {},
261 "isRLSEnabled": false
262 },
263 "public.graphql_operation": {
264 "name": "graphql_operation",
265 "schema": "",
266 "columns": {
267 "id": {
268 "name": "id",
269 "type": "text",
270 "primaryKey": false,
271 "notNull": true
272 },
273 "scope_id": {
274 "name": "scope_id",
275 "type": "text",
276 "primaryKey": false,
277 "notNull": true
278 },
279 "source_id": {
280 "name": "source_id",
281 "type": "text",
282 "primaryKey": false,
283 "notNull": true
284 },
285 "binding": {
286 "name": "binding",
287 "type": "jsonb",
288 "primaryKey": false,
289 "notNull": true
290 }
291 },
292 "indexes": {
293 "graphql_operation_scope_id_idx": {
294 "name": "graphql_operation_scope_id_idx",
295 "columns": [
296 {
297 "expression": "scope_id",
298 "isExpression": false,
299 "asc": true,
300 "nulls": "last"
301 }
302 ],
303 "isUnique": false,
304 "concurrently": false,
305 "method": "btree",
306 "with": {}
307 },
308 "graphql_operation_source_id_idx": {
309 "name": "graphql_operation_source_id_idx",
310 "columns": [
311 {
312 "expression": "source_id",
313 "isExpression": false,
314 "asc": true,
315 "nulls": "last"
316 }
317 ],
318 "isUnique": false,
319 "concurrently": false,
320 "method": "btree",
321 "with": {}
322 }
323 },
324 "foreignKeys": {},
325 "compositePrimaryKeys": {
326 "graphql_operation_scope_id_id_pk": {
327 "name": "graphql_operation_scope_id_id_pk",
328 "columns": ["scope_id", "id"]
329 }
330 },
331 "uniqueConstraints": {},
332 "policies": {},
333 "checkConstraints": {},
334 "isRLSEnabled": false
335 },
336 "public.graphql_source": {
337 "name": "graphql_source",
338 "schema": "",
339 "columns": {
340 "id": {
341 "name": "id",
342 "type": "text",
343 "primaryKey": false,
344 "notNull": true
345 },
346 "scope_id": {
347 "name": "scope_id",
348 "type": "text",
349 "primaryKey": false,
350 "notNull": true
351 },
352 "name": {
353 "name": "name",
354 "type": "text",
355 "primaryKey": false,
356 "notNull": true
357 },
358 "endpoint": {
359 "name": "endpoint",
360 "type": "text",
361 "primaryKey": false,
362 "notNull": true
363 },
364 "headers": {
365 "name": "headers",
366 "type": "jsonb",
367 "primaryKey": false,
368 "notNull": false
369 }
370 },
371 "indexes": {
372 "graphql_source_scope_id_idx": {
373 "name": "graphql_source_scope_id_idx",
374 "columns": [
375 {
376 "expression": "scope_id",
377 "isExpression": false,
378 "asc": true,
379 "nulls": "last"
380 }
381 ],
382 "isUnique": false,
383 "concurrently": false,
384 "method": "btree",
385 "with": {}
386 }
387 },
388 "foreignKeys": {},
389 "compositePrimaryKeys": {
390 "graphql_source_scope_id_id_pk": {
391 "name": "graphql_source_scope_id_id_pk",
392 "columns": ["scope_id", "id"]
393 }
394 },
395 "uniqueConstraints": {},
396 "policies": {},
397 "checkConstraints": {},
398 "isRLSEnabled": false
399 },
400 "public.mcp_binding": {
401 "name": "mcp_binding",
402 "schema": "",
403 "columns": {
404 "id": {
405 "name": "id",
406 "type": "text",
407 "primaryKey": false,
408 "notNull": true
409 },
410 "scope_id": {
411 "name": "scope_id",
412 "type": "text",
413 "primaryKey": false,
414 "notNull": true
415 },
416 "source_id": {
417 "name": "source_id",
418 "type": "text",
419 "primaryKey": false,
420 "notNull": true
421 },
422 "binding": {
423 "name": "binding",
424 "type": "jsonb",
425 "primaryKey": false,
426 "notNull": true
427 },
428 "created_at": {
429 "name": "created_at",
430 "type": "timestamp",
431 "primaryKey": false,
432 "notNull": true
433 }
434 },
435 "indexes": {
436 "mcp_binding_scope_id_idx": {
437 "name": "mcp_binding_scope_id_idx",
438 "columns": [
439 {
440 "expression": "scope_id",
441 "isExpression": false,
442 "asc": true,
443 "nulls": "last"
444 }
445 ],
446 "isUnique": false,
447 "concurrently": false,
448 "method": "btree",
449 "with": {}
450 },
451 "mcp_binding_source_id_idx": {
452 "name": "mcp_binding_source_id_idx",
453 "columns": [
454 {
455 "expression": "source_id",
456 "isExpression": false,
457 "asc": true,
458 "nulls": "last"
459 }
460 ],
461 "isUnique": false,
462 "concurrently": false,
463 "method": "btree",
464 "with": {}
465 }
466 },
467 "foreignKeys": {},
468 "compositePrimaryKeys": {
469 "mcp_binding_scope_id_id_pk": {
470 "name": "mcp_binding_scope_id_id_pk",
471 "columns": ["scope_id", "id"]
472 }
473 },
474 "uniqueConstraints": {},
475 "policies": {},
476 "checkConstraints": {},
477 "isRLSEnabled": false
478 },
479 "public.mcp_oauth_session": {
480 "name": "mcp_oauth_session",
481 "schema": "",
482 "columns": {
483 "id": {
484 "name": "id",
485 "type": "text",
486 "primaryKey": false,
487 "notNull": true
488 },
489 "scope_id": {
490 "name": "scope_id",
491 "type": "text",
492 "primaryKey": false,
493 "notNull": true
494 },
495 "session": {
496 "name": "session",
497 "type": "jsonb",
498 "primaryKey": false,
499 "notNull": true
500 },
501 "expires_at": {
502 "name": "expires_at",
503 "type": "integer",
504 "primaryKey": false,
505 "notNull": true
506 },
507 "created_at": {
508 "name": "created_at",
509 "type": "timestamp",
510 "primaryKey": false,
511 "notNull": true
512 }
513 },
514 "indexes": {
515 "mcp_oauth_session_scope_id_idx": {
516 "name": "mcp_oauth_session_scope_id_idx",
517 "columns": [
518 {
519 "expression": "scope_id",
520 "isExpression": false,
521 "asc": true,
522 "nulls": "last"
523 }
524 ],
525 "isUnique": false,
526 "concurrently": false,
527 "method": "btree",
528 "with": {}
529 }
530 },
531 "foreignKeys": {},
532 "compositePrimaryKeys": {
533 "mcp_oauth_session_scope_id_id_pk": {
534 "name": "mcp_oauth_session_scope_id_id_pk",
535 "columns": ["scope_id", "id"]
536 }
537 },
538 "uniqueConstraints": {},
539 "policies": {},
540 "checkConstraints": {},
541 "isRLSEnabled": false
542 },
543 "public.mcp_source": {
544 "name": "mcp_source",
545 "schema": "",
546 "columns": {
547 "id": {
548 "name": "id",
549 "type": "text",
550 "primaryKey": false,
551 "notNull": true
552 },
553 "scope_id": {
554 "name": "scope_id",
555 "type": "text",
556 "primaryKey": false,
557 "notNull": true
558 },
559 "name": {
560 "name": "name",
561 "type": "text",
562 "primaryKey": false,
563 "notNull": true
564 },
565 "config": {
566 "name": "config",
567 "type": "jsonb",
568 "primaryKey": false,
569 "notNull": true
570 },
571 "created_at": {
572 "name": "created_at",
573 "type": "timestamp",
574 "primaryKey": false,
575 "notNull": true
576 }
577 },
578 "indexes": {
579 "mcp_source_scope_id_idx": {
580 "name": "mcp_source_scope_id_idx",
581 "columns": [
582 {
583 "expression": "scope_id",
584 "isExpression": false,
585 "asc": true,
586 "nulls": "last"
587 }
588 ],
589 "isUnique": false,
590 "concurrently": false,
591 "method": "btree",
592 "with": {}
593 }
594 },
595 "foreignKeys": {},
596 "compositePrimaryKeys": {
597 "mcp_source_scope_id_id_pk": {
598 "name": "mcp_source_scope_id_id_pk",
599 "columns": ["scope_id", "id"]
600 }
601 },
602 "uniqueConstraints": {},
603 "policies": {},
604 "checkConstraints": {},
605 "isRLSEnabled": false
606 },
607 "public.openapi_oauth_session": {
608 "name": "openapi_oauth_session",
609 "schema": "",
610 "columns": {
611 "id": {
612 "name": "id",
613 "type": "text",
614 "primaryKey": false,
615 "notNull": true
616 },
617 "scope_id": {
618 "name": "scope_id",
619 "type": "text",
620 "primaryKey": false,
621 "notNull": true
622 },
623 "session": {
624 "name": "session",
625 "type": "jsonb",
626 "primaryKey": false,
627 "notNull": true
628 },
629 "created_at": {
630 "name": "created_at",
631 "type": "timestamp",
632 "primaryKey": false,
633 "notNull": true
634 }
635 },
636 "indexes": {
637 "openapi_oauth_session_scope_id_idx": {
638 "name": "openapi_oauth_session_scope_id_idx",
639 "columns": [
640 {
641 "expression": "scope_id",
642 "isExpression": false,
643 "asc": true,
644 "nulls": "last"
645 }
646 ],
647 "isUnique": false,
648 "concurrently": false,
649 "method": "btree",
650 "with": {}
651 }
652 },
653 "foreignKeys": {},
654 "compositePrimaryKeys": {
655 "openapi_oauth_session_scope_id_id_pk": {
656 "name": "openapi_oauth_session_scope_id_id_pk",
657 "columns": ["scope_id", "id"]
658 }
659 },
660 "uniqueConstraints": {},
661 "policies": {},
662 "checkConstraints": {},
663 "isRLSEnabled": false
664 },
665 "public.openapi_operation": {
666 "name": "openapi_operation",
667 "schema": "",
668 "columns": {
669 "id": {
670 "name": "id",
671 "type": "text",
672 "primaryKey": false,
673 "notNull": true
674 },
675 "scope_id": {
676 "name": "scope_id",
677 "type": "text",
678 "primaryKey": false,
679 "notNull": true
680 },
681 "source_id": {
682 "name": "source_id",
683 "type": "text",
684 "primaryKey": false,
685 "notNull": true
686 },
687 "binding": {
688 "name": "binding",
689 "type": "jsonb",
690 "primaryKey": false,
691 "notNull": true
692 }
693 },
694 "indexes": {
695 "openapi_operation_scope_id_idx": {
696 "name": "openapi_operation_scope_id_idx",
697 "columns": [
698 {
699 "expression": "scope_id",
700 "isExpression": false,
701 "asc": true,
702 "nulls": "last"
703 }
704 ],
705 "isUnique": false,
706 "concurrently": false,
707 "method": "btree",
708 "with": {}
709 },
710 "openapi_operation_source_id_idx": {
711 "name": "openapi_operation_source_id_idx",
712 "columns": [
713 {
714 "expression": "source_id",
715 "isExpression": false,
716 "asc": true,
717 "nulls": "last"
718 }
719 ],
720 "isUnique": false,
721 "concurrently": false,
722 "method": "btree",
723 "with": {}
724 }
725 },
726 "foreignKeys": {},
727 "compositePrimaryKeys": {
728 "openapi_operation_scope_id_id_pk": {
729 "name": "openapi_operation_scope_id_id_pk",
730 "columns": ["scope_id", "id"]
731 }
732 },
733 "uniqueConstraints": {},
734 "policies": {},
735 "checkConstraints": {},
736 "isRLSEnabled": false
737 },
738 "public.openapi_source": {
739 "name": "openapi_source",
740 "schema": "",
741 "columns": {
742 "id": {
743 "name": "id",
744 "type": "text",
745 "primaryKey": false,
746 "notNull": true
747 },
748 "scope_id": {
749 "name": "scope_id",
750 "type": "text",
751 "primaryKey": false,
752 "notNull": true
753 },
754 "name": {
755 "name": "name",
756 "type": "text",
757 "primaryKey": false,
758 "notNull": true
759 },
760 "spec": {
761 "name": "spec",
762 "type": "text",
763 "primaryKey": false,
764 "notNull": true
765 },
766 "source_url": {
767 "name": "source_url",
768 "type": "text",
769 "primaryKey": false,
770 "notNull": false
771 },
772 "base_url": {
773 "name": "base_url",
774 "type": "text",
775 "primaryKey": false,
776 "notNull": false
777 },
778 "headers": {
779 "name": "headers",
780 "type": "jsonb",
781 "primaryKey": false,
782 "notNull": false
783 },
784 "oauth2": {
785 "name": "oauth2",
786 "type": "jsonb",
787 "primaryKey": false,
788 "notNull": false
789 },
790 "invocation_config": {
791 "name": "invocation_config",
792 "type": "jsonb",
793 "primaryKey": false,
794 "notNull": true
795 }
796 },
797 "indexes": {
798 "openapi_source_scope_id_idx": {
799 "name": "openapi_source_scope_id_idx",
800 "columns": [
801 {
802 "expression": "scope_id",
803 "isExpression": false,
804 "asc": true,
805 "nulls": "last"
806 }
807 ],
808 "isUnique": false,
809 "concurrently": false,
810 "method": "btree",
811 "with": {}
812 }
813 },
814 "foreignKeys": {},
815 "compositePrimaryKeys": {
816 "openapi_source_scope_id_id_pk": {
817 "name": "openapi_source_scope_id_id_pk",
818 "columns": ["scope_id", "id"]
819 }
820 },
821 "uniqueConstraints": {},
822 "policies": {},
823 "checkConstraints": {},
824 "isRLSEnabled": false
825 },
826 "public.secret": {
827 "name": "secret",
828 "schema": "",
829 "columns": {
830 "id": {
831 "name": "id",
832 "type": "text",
833 "primaryKey": false,
834 "notNull": true
835 },
836 "scope_id": {
837 "name": "scope_id",
838 "type": "text",
839 "primaryKey": false,
840 "notNull": true
841 },
842 "name": {
843 "name": "name",
844 "type": "text",
845 "primaryKey": false,
846 "notNull": true
847 },
848 "provider": {
849 "name": "provider",
850 "type": "text",
851 "primaryKey": false,
852 "notNull": true
853 },
854 "created_at": {
855 "name": "created_at",
856 "type": "timestamp",
857 "primaryKey": false,
858 "notNull": true
859 }
860 },
861 "indexes": {
862 "secret_scope_id_idx": {
863 "name": "secret_scope_id_idx",
864 "columns": [
865 {
866 "expression": "scope_id",
867 "isExpression": false,
868 "asc": true,
869 "nulls": "last"
870 }
871 ],
872 "isUnique": false,
873 "concurrently": false,
874 "method": "btree",
875 "with": {}
876 },
877 "secret_provider_idx": {
878 "name": "secret_provider_idx",
879 "columns": [
880 {
881 "expression": "provider",
882 "isExpression": false,
883 "asc": true,
884 "nulls": "last"
885 }
886 ],
887 "isUnique": false,
888 "concurrently": false,
889 "method": "btree",
890 "with": {}
891 }
892 },
893 "foreignKeys": {},
894 "compositePrimaryKeys": {
895 "secret_scope_id_id_pk": {
896 "name": "secret_scope_id_id_pk",
897 "columns": ["scope_id", "id"]
898 }
899 },
900 "uniqueConstraints": {},
901 "policies": {},
902 "checkConstraints": {},
903 "isRLSEnabled": false
904 },
905 "public.source": {
906 "name": "source",
907 "schema": "",
908 "columns": {
909 "id": {
910 "name": "id",
911 "type": "text",
912 "primaryKey": false,
913 "notNull": true
914 },
915 "scope_id": {
916 "name": "scope_id",
917 "type": "text",
918 "primaryKey": false,
919 "notNull": true
920 },
921 "plugin_id": {
922 "name": "plugin_id",
923 "type": "text",
924 "primaryKey": false,
925 "notNull": true
926 },
927 "kind": {
928 "name": "kind",
929 "type": "text",
930 "primaryKey": false,
931 "notNull": true
932 },
933 "name": {
934 "name": "name",
935 "type": "text",
936 "primaryKey": false,
937 "notNull": true
938 },
939 "url": {
940 "name": "url",
941 "type": "text",
942 "primaryKey": false,
943 "notNull": false
944 },
945 "can_remove": {
946 "name": "can_remove",
947 "type": "boolean",
948 "primaryKey": false,
949 "notNull": true,
950 "default": true
951 },
952 "can_refresh": {
953 "name": "can_refresh",
954 "type": "boolean",
955 "primaryKey": false,
956 "notNull": true,
957 "default": false
958 },
959 "can_edit": {
960 "name": "can_edit",
961 "type": "boolean",
962 "primaryKey": false,
963 "notNull": true,
964 "default": false
965 },
966 "created_at": {
967 "name": "created_at",
968 "type": "timestamp",
969 "primaryKey": false,
970 "notNull": true
971 },
972 "updated_at": {
973 "name": "updated_at",
974 "type": "timestamp",
975 "primaryKey": false,
976 "notNull": true
977 }
978 },
979 "indexes": {
980 "source_scope_id_idx": {
981 "name": "source_scope_id_idx",
982 "columns": [
983 {
984 "expression": "scope_id",
985 "isExpression": false,
986 "asc": true,
987 "nulls": "last"
988 }
989 ],
990 "isUnique": false,
991 "concurrently": false,
992 "method": "btree",
993 "with": {}
994 },
995 "source_plugin_id_idx": {
996 "name": "source_plugin_id_idx",
997 "columns": [
998 {
999 "expression": "plugin_id",
1000 "isExpression": false,
1001 "asc": true,
1002 "nulls": "last"
1003 }
1004 ],
1005 "isUnique": false,
1006 "concurrently": false,
1007 "method": "btree",
1008 "with": {}
1009 }
1010 },
1011 "foreignKeys": {},
1012 "compositePrimaryKeys": {
1013 "source_scope_id_id_pk": {
1014 "name": "source_scope_id_id_pk",
1015 "columns": ["scope_id", "id"]
1016 }
1017 },
1018 "uniqueConstraints": {},
1019 "policies": {},
1020 "checkConstraints": {},
1021 "isRLSEnabled": false
1022 },
1023 "public.tool": {
1024 "name": "tool",
1025 "schema": "",
1026 "columns": {
1027 "id": {
1028 "name": "id",
1029 "type": "text",
1030 "primaryKey": false,
1031 "notNull": true
1032 },
1033 "scope_id": {
1034 "name": "scope_id",
1035 "type": "text",
1036 "primaryKey": false,
1037 "notNull": true
1038 },
1039 "source_id": {
1040 "name": "source_id",
1041 "type": "text",
1042 "primaryKey": false,
1043 "notNull": true
1044 },
1045 "plugin_id": {
1046 "name": "plugin_id",
1047 "type": "text",
1048 "primaryKey": false,
1049 "notNull": true
1050 },
1051 "name": {
1052 "name": "name",
1053 "type": "text",
1054 "primaryKey": false,
1055 "notNull": true
1056 },
1057 "description": {
1058 "name": "description",
1059 "type": "text",
1060 "primaryKey": false,
1061 "notNull": true
1062 },
1063 "input_schema": {
1064 "name": "input_schema",
1065 "type": "jsonb",
1066 "primaryKey": false,
1067 "notNull": false
1068 },
1069 "output_schema": {
1070 "name": "output_schema",
1071 "type": "jsonb",
1072 "primaryKey": false,
1073 "notNull": false
1074 },
1075 "created_at": {
1076 "name": "created_at",
1077 "type": "timestamp",
1078 "primaryKey": false,
1079 "notNull": true
1080 },
1081 "updated_at": {
1082 "name": "updated_at",
1083 "type": "timestamp",
1084 "primaryKey": false,
1085 "notNull": true
1086 }
1087 },
1088 "indexes": {
1089 "tool_scope_id_idx": {
1090 "name": "tool_scope_id_idx",
1091 "columns": [
1092 {
1093 "expression": "scope_id",
1094 "isExpression": false,
1095 "asc": true,
1096 "nulls": "last"
1097 }
1098 ],
1099 "isUnique": false,
1100 "concurrently": false,
1101 "method": "btree",
1102 "with": {}
1103 },
1104 "tool_source_id_idx": {
1105 "name": "tool_source_id_idx",
1106 "columns": [
1107 {
1108 "expression": "source_id",
1109 "isExpression": false,
1110 "asc": true,
1111 "nulls": "last"
1112 }
1113 ],
1114 "isUnique": false,
1115 "concurrently": false,
1116 "method": "btree",
1117 "with": {}
1118 },
1119 "tool_plugin_id_idx": {
1120 "name": "tool_plugin_id_idx",
1121 "columns": [
1122 {
1123 "expression": "plugin_id",
1124 "isExpression": false,
1125 "asc": true,
1126 "nulls": "last"
1127 }
1128 ],
1129 "isUnique": false,
1130 "concurrently": false,
1131 "method": "btree",
1132 "with": {}
1133 }
1134 },
1135 "foreignKeys": {},
1136 "compositePrimaryKeys": {
1137 "tool_scope_id_id_pk": {
1138 "name": "tool_scope_id_id_pk",
1139 "columns": ["scope_id", "id"]
1140 }
1141 },
1142 "uniqueConstraints": {},
1143 "policies": {},
1144 "checkConstraints": {},
1145 "isRLSEnabled": false
1146 },
1147 "public.workos_vault_metadata": {
1148 "name": "workos_vault_metadata",
1149 "schema": "",
1150 "columns": {
1151 "id": {
1152 "name": "id",
1153 "type": "text",
1154 "primaryKey": false,
1155 "notNull": true
1156 },
1157 "scope_id": {
1158 "name": "scope_id",
1159 "type": "text",
1160 "primaryKey": false,
1161 "notNull": true
1162 },
1163 "name": {
1164 "name": "name",
1165 "type": "text",
1166 "primaryKey": false,
1167 "notNull": true
1168 },
1169 "purpose": {
1170 "name": "purpose",
1171 "type": "text",
1172 "primaryKey": false,
1173 "notNull": false
1174 },
1175 "created_at": {
1176 "name": "created_at",
1177 "type": "timestamp",
1178 "primaryKey": false,
1179 "notNull": true
1180 }
1181 },
1182 "indexes": {
1183 "workos_vault_metadata_scope_id_idx": {
1184 "name": "workos_vault_metadata_scope_id_idx",
1185 "columns": [
1186 {
1187 "expression": "scope_id",
1188 "isExpression": false,
1189 "asc": true,
1190 "nulls": "last"
1191 }
1192 ],
1193 "isUnique": false,
1194 "concurrently": false,
1195 "method": "btree",
1196 "with": {}
1197 }
1198 },
1199 "foreignKeys": {},
1200 "compositePrimaryKeys": {
1201 "workos_vault_metadata_scope_id_id_pk": {
1202 "name": "workos_vault_metadata_scope_id_id_pk",
1203 "columns": ["scope_id", "id"]
1204 }
1205 },
1206 "uniqueConstraints": {},
1207 "policies": {},
1208 "checkConstraints": {},
1209 "isRLSEnabled": false
1210 }
1211 },
1212 "enums": {},
1213 "schemas": {},
1214 "sequences": {},
1215 "roles": {},
1216 "policies": {},
1217 "views": {},
1218 "_meta": {
1219 "columns": {},
1220 "schemas": {},
1221 "tables": {}
1222 }
1223}
apps/cloud/drizzle/meta/0002_snapshot.json+0−1223
@@ -1,1223 +0,0 @@
1{
2 "id": "f029f809-1bf3-46e0-a31b-82df7c9c7171",
3 "prevId": "12ebb69b-fb44-4e61-80b9-a48b5471ef5a",
4 "version": "7",
5 "dialect": "postgresql",
6 "tables": {
7 "public.accounts": {
8 "name": "accounts",
9 "schema": "",
10 "columns": {
11 "id": {
12 "name": "id",
13 "type": "text",
14 "primaryKey": true,
15 "notNull": true
16 },
17 "created_at": {
18 "name": "created_at",
19 "type": "timestamp with time zone",
20 "primaryKey": false,
21 "notNull": true,
22 "default": "now()"
23 }
24 },
25 "indexes": {},
26 "foreignKeys": {},
27 "compositePrimaryKeys": {},
28 "uniqueConstraints": {},
29 "policies": {},
30 "checkConstraints": {},
31 "isRLSEnabled": false
32 },
33 "public.memberships": {
34 "name": "memberships",
35 "schema": "",
36 "columns": {
37 "account_id": {
38 "name": "account_id",
39 "type": "text",
40 "primaryKey": false,
41 "notNull": true
42 },
43 "organization_id": {
44 "name": "organization_id",
45 "type": "text",
46 "primaryKey": false,
47 "notNull": true
48 },
49 "created_at": {
50 "name": "created_at",
51 "type": "timestamp with time zone",
52 "primaryKey": false,
53 "notNull": true,
54 "default": "now()"
55 }
56 },
57 "indexes": {},
58 "foreignKeys": {
59 "memberships_account_id_accounts_id_fk": {
60 "name": "memberships_account_id_accounts_id_fk",
61 "tableFrom": "memberships",
62 "tableTo": "accounts",
63 "columnsFrom": ["account_id"],
64 "columnsTo": ["id"],
65 "onDelete": "cascade",
66 "onUpdate": "no action"
67 },
68 "memberships_organization_id_organizations_id_fk": {
69 "name": "memberships_organization_id_organizations_id_fk",
70 "tableFrom": "memberships",
71 "tableTo": "organizations",
72 "columnsFrom": ["organization_id"],
73 "columnsTo": ["id"],
74 "onDelete": "cascade",
75 "onUpdate": "no action"
76 }
77 },
78 "compositePrimaryKeys": {
79 "memberships_account_id_organization_id_pk": {
80 "name": "memberships_account_id_organization_id_pk",
81 "columns": ["account_id", "organization_id"]
82 }
83 },
84 "uniqueConstraints": {},
85 "policies": {},
86 "checkConstraints": {},
87 "isRLSEnabled": false
88 },
89 "public.organizations": {
90 "name": "organizations",
91 "schema": "",
92 "columns": {
93 "id": {
94 "name": "id",
95 "type": "text",
96 "primaryKey": true,
97 "notNull": true
98 },
99 "name": {
100 "name": "name",
101 "type": "text",
102 "primaryKey": false,
103 "notNull": true
104 },
105 "created_at": {
106 "name": "created_at",
107 "type": "timestamp with time zone",
108 "primaryKey": false,
109 "notNull": true,
110 "default": "now()"
111 }
112 },
113 "indexes": {},
114 "foreignKeys": {},
115 "compositePrimaryKeys": {},
116 "uniqueConstraints": {},
117 "policies": {},
118 "checkConstraints": {},
119 "isRLSEnabled": false
120 },
121 "public.blob": {
122 "name": "blob",
123 "schema": "",
124 "columns": {
125 "namespace": {
126 "name": "namespace",
127 "type": "text",
128 "primaryKey": false,
129 "notNull": true
130 },
131 "key": {
132 "name": "key",
133 "type": "text",
134 "primaryKey": false,
135 "notNull": true
136 },
137 "value": {
138 "name": "value",
139 "type": "text",
140 "primaryKey": false,
141 "notNull": true
142 }
143 },
144 "indexes": {},
145 "foreignKeys": {},
146 "compositePrimaryKeys": {
147 "blob_namespace_key_pk": {
148 "name": "blob_namespace_key_pk",
149 "columns": ["namespace", "key"]
150 }
151 },
152 "uniqueConstraints": {},
153 "policies": {},
154 "checkConstraints": {},
155 "isRLSEnabled": false
156 },
157 "public.definition": {
158 "name": "definition",
159 "schema": "",
160 "columns": {
161 "id": {
162 "name": "id",
163 "type": "text",
164 "primaryKey": false,
165 "notNull": true
166 },
167 "scope_id": {
168 "name": "scope_id",
169 "type": "text",
170 "primaryKey": false,
171 "notNull": true
172 },
173 "source_id": {
174 "name": "source_id",
175 "type": "text",
176 "primaryKey": false,
177 "notNull": true
178 },
179 "plugin_id": {
180 "name": "plugin_id",
181 "type": "text",
182 "primaryKey": false,
183 "notNull": true
184 },
185 "name": {
186 "name": "name",
187 "type": "text",
188 "primaryKey": false,
189 "notNull": true
190 },
191 "schema": {
192 "name": "schema",
193 "type": "jsonb",
194 "primaryKey": false,
195 "notNull": true
196 },
197 "created_at": {
198 "name": "created_at",
199 "type": "timestamp",
200 "primaryKey": false,
201 "notNull": true
202 }
203 },
204 "indexes": {
205 "definition_scope_id_idx": {
206 "name": "definition_scope_id_idx",
207 "columns": [
208 {
209 "expression": "scope_id",
210 "isExpression": false,
211 "asc": true,
212 "nulls": "last"
213 }
214 ],
215 "isUnique": false,
216 "concurrently": false,
217 "method": "btree",
218 "with": {}
219 },
220 "definition_source_id_idx": {
221 "name": "definition_source_id_idx",
222 "columns": [
223 {
224 "expression": "source_id",
225 "isExpression": false,
226 "asc": true,
227 "nulls": "last"
228 }
229 ],
230 "isUnique": false,
231 "concurrently": false,
232 "method": "btree",
233 "with": {}
234 },
235 "definition_plugin_id_idx": {
236 "name": "definition_plugin_id_idx",
237 "columns": [
238 {
239 "expression": "plugin_id",
240 "isExpression": false,
241 "asc": true,
242 "nulls": "last"
243 }
244 ],
245 "isUnique": false,
246 "concurrently": false,
247 "method": "btree",
248 "with": {}
249 }
250 },
251 "foreignKeys": {},
252 "compositePrimaryKeys": {
253 "definition_scope_id_id_pk": {
254 "name": "definition_scope_id_id_pk",
255 "columns": ["scope_id", "id"]
256 }
257 },
258 "uniqueConstraints": {},
259 "policies": {},
260 "checkConstraints": {},
261 "isRLSEnabled": false
262 },
263 "public.graphql_operation": {
264 "name": "graphql_operation",
265 "schema": "",
266 "columns": {
267 "id": {
268 "name": "id",
269 "type": "text",
270 "primaryKey": false,
271 "notNull": true
272 },
273 "scope_id": {
274 "name": "scope_id",
275 "type": "text",
276 "primaryKey": false,
277 "notNull": true
278 },
279 "source_id": {
280 "name": "source_id",
281 "type": "text",
282 "primaryKey": false,
283 "notNull": true
284 },
285 "binding": {
286 "name": "binding",
287 "type": "jsonb",
288 "primaryKey": false,
289 "notNull": true
290 }
291 },
292 "indexes": {
293 "graphql_operation_scope_id_idx": {
294 "name": "graphql_operation_scope_id_idx",
295 "columns": [
296 {
297 "expression": "scope_id",
298 "isExpression": false,
299 "asc": true,
300 "nulls": "last"
301 }
302 ],
303 "isUnique": false,
304 "concurrently": false,
305 "method": "btree",
306 "with": {}
307 },
308 "graphql_operation_source_id_idx": {
309 "name": "graphql_operation_source_id_idx",
310 "columns": [
311 {
312 "expression": "source_id",
313 "isExpression": false,
314 "asc": true,
315 "nulls": "last"
316 }
317 ],
318 "isUnique": false,
319 "concurrently": false,
320 "method": "btree",
321 "with": {}
322 }
323 },
324 "foreignKeys": {},
325 "compositePrimaryKeys": {
326 "graphql_operation_scope_id_id_pk": {
327 "name": "graphql_operation_scope_id_id_pk",
328 "columns": ["scope_id", "id"]
329 }
330 },
331 "uniqueConstraints": {},
332 "policies": {},
333 "checkConstraints": {},
334 "isRLSEnabled": false
335 },
336 "public.graphql_source": {
337 "name": "graphql_source",
338 "schema": "",
339 "columns": {
340 "id": {
341 "name": "id",
342 "type": "text",
343 "primaryKey": false,
344 "notNull": true
345 },
346 "scope_id": {
347 "name": "scope_id",
348 "type": "text",
349 "primaryKey": false,
350 "notNull": true
351 },
352 "name": {
353 "name": "name",
354 "type": "text",
355 "primaryKey": false,
356 "notNull": true
357 },
358 "endpoint": {
359 "name": "endpoint",
360 "type": "text",
361 "primaryKey": false,
362 "notNull": true
363 },
364 "headers": {
365 "name": "headers",
366 "type": "jsonb",
367 "primaryKey": false,
368 "notNull": false
369 }
370 },
371 "indexes": {
372 "graphql_source_scope_id_idx": {
373 "name": "graphql_source_scope_id_idx",
374 "columns": [
375 {
376 "expression": "scope_id",
377 "isExpression": false,
378 "asc": true,
379 "nulls": "last"
380 }
381 ],
382 "isUnique": false,
383 "concurrently": false,
384 "method": "btree",
385 "with": {}
386 }
387 },
388 "foreignKeys": {},
389 "compositePrimaryKeys": {
390 "graphql_source_scope_id_id_pk": {
391 "name": "graphql_source_scope_id_id_pk",
392 "columns": ["scope_id", "id"]
393 }
394 },
395 "uniqueConstraints": {},
396 "policies": {},
397 "checkConstraints": {},
398 "isRLSEnabled": false
399 },
400 "public.mcp_binding": {
401 "name": "mcp_binding",
402 "schema": "",
403 "columns": {
404 "id": {
405 "name": "id",
406 "type": "text",
407 "primaryKey": false,
408 "notNull": true
409 },
410 "scope_id": {
411 "name": "scope_id",
412 "type": "text",
413 "primaryKey": false,
414 "notNull": true
415 },
416 "source_id": {
417 "name": "source_id",
418 "type": "text",
419 "primaryKey": false,
420 "notNull": true
421 },
422 "binding": {
423 "name": "binding",
424 "type": "jsonb",
425 "primaryKey": false,
426 "notNull": true
427 },
428 "created_at": {
429 "name": "created_at",
430 "type": "timestamp",
431 "primaryKey": false,
432 "notNull": true
433 }
434 },
435 "indexes": {
436 "mcp_binding_scope_id_idx": {
437 "name": "mcp_binding_scope_id_idx",
438 "columns": [
439 {
440 "expression": "scope_id",
441 "isExpression": false,
442 "asc": true,
443 "nulls": "last"
444 }
445 ],
446 "isUnique": false,
447 "concurrently": false,
448 "method": "btree",
449 "with": {}
450 },
451 "mcp_binding_source_id_idx": {
452 "name": "mcp_binding_source_id_idx",
453 "columns": [
454 {
455 "expression": "source_id",
456 "isExpression": false,
457 "asc": true,
458 "nulls": "last"
459 }
460 ],
461 "isUnique": false,
462 "concurrently": false,
463 "method": "btree",
464 "with": {}
465 }
466 },
467 "foreignKeys": {},
468 "compositePrimaryKeys": {
469 "mcp_binding_scope_id_id_pk": {
470 "name": "mcp_binding_scope_id_id_pk",
471 "columns": ["scope_id", "id"]
472 }
473 },
474 "uniqueConstraints": {},
475 "policies": {},
476 "checkConstraints": {},
477 "isRLSEnabled": false
478 },
479 "public.mcp_oauth_session": {
480 "name": "mcp_oauth_session",
481 "schema": "",
482 "columns": {
483 "id": {
484 "name": "id",
485 "type": "text",
486 "primaryKey": false,
487 "notNull": true
488 },
489 "scope_id": {
490 "name": "scope_id",
491 "type": "text",
492 "primaryKey": false,
493 "notNull": true
494 },
495 "session": {
496 "name": "session",
497 "type": "jsonb",
498 "primaryKey": false,
499 "notNull": true
500 },
501 "expires_at": {
502 "name": "expires_at",
503 "type": "bigint",
504 "primaryKey": false,
505 "notNull": true
506 },
507 "created_at": {
508 "name": "created_at",
509 "type": "timestamp",
510 "primaryKey": false,
511 "notNull": true
512 }
513 },
514 "indexes": {
515 "mcp_oauth_session_scope_id_idx": {
516 "name": "mcp_oauth_session_scope_id_idx",
517 "columns": [
518 {
519 "expression": "scope_id",
520 "isExpression": false,
521 "asc": true,
522 "nulls": "last"
523 }
524 ],
525 "isUnique": false,
526 "concurrently": false,
527 "method": "btree",
528 "with": {}
529 }
530 },
531 "foreignKeys": {},
532 "compositePrimaryKeys": {
533 "mcp_oauth_session_scope_id_id_pk": {
534 "name": "mcp_oauth_session_scope_id_id_pk",
535 "columns": ["scope_id", "id"]
536 }
537 },
538 "uniqueConstraints": {},
539 "policies": {},
540 "checkConstraints": {},
541 "isRLSEnabled": false
542 },
543 "public.mcp_source": {
544 "name": "mcp_source",
545 "schema": "",
546 "columns": {
547 "id": {
548 "name": "id",
549 "type": "text",
550 "primaryKey": false,
551 "notNull": true
552 },
553 "scope_id": {
554 "name": "scope_id",
555 "type": "text",
556 "primaryKey": false,
557 "notNull": true
558 },
559 "name": {
560 "name": "name",
561 "type": "text",
562 "primaryKey": false,
563 "notNull": true
564 },
565 "config": {
566 "name": "config",
567 "type": "jsonb",
568 "primaryKey": false,
569 "notNull": true
570 },
571 "created_at": {
572 "name": "created_at",
573 "type": "timestamp",
574 "primaryKey": false,
575 "notNull": true
576 }
577 },
578 "indexes": {
579 "mcp_source_scope_id_idx": {
580 "name": "mcp_source_scope_id_idx",
581 "columns": [
582 {
583 "expression": "scope_id",
584 "isExpression": false,
585 "asc": true,
586 "nulls": "last"
587 }
588 ],
589 "isUnique": false,
590 "concurrently": false,
591 "method": "btree",
592 "with": {}
593 }
594 },
595 "foreignKeys": {},
596 "compositePrimaryKeys": {
597 "mcp_source_scope_id_id_pk": {
598 "name": "mcp_source_scope_id_id_pk",
599 "columns": ["scope_id", "id"]
600 }
601 },
602 "uniqueConstraints": {},
603 "policies": {},
604 "checkConstraints": {},
605 "isRLSEnabled": false
606 },
607 "public.openapi_oauth_session": {
608 "name": "openapi_oauth_session",
609 "schema": "",
610 "columns": {
611 "id": {
612 "name": "id",
613 "type": "text",
614 "primaryKey": false,
615 "notNull": true
616 },
617 "scope_id": {
618 "name": "scope_id",
619 "type": "text",
620 "primaryKey": false,
621 "notNull": true
622 },
623 "session": {
624 "name": "session",
625 "type": "jsonb",
626 "primaryKey": false,
627 "notNull": true
628 },
629 "created_at": {
630 "name": "created_at",
631 "type": "timestamp",
632 "primaryKey": false,
633 "notNull": true
634 }
635 },
636 "indexes": {
637 "openapi_oauth_session_scope_id_idx": {
638 "name": "openapi_oauth_session_scope_id_idx",
639 "columns": [
640 {
641 "expression": "scope_id",
642 "isExpression": false,
643 "asc": true,
644 "nulls": "last"
645 }
646 ],
647 "isUnique": false,
648 "concurrently": false,
649 "method": "btree",
650 "with": {}
651 }
652 },
653 "foreignKeys": {},
654 "compositePrimaryKeys": {
655 "openapi_oauth_session_scope_id_id_pk": {
656 "name": "openapi_oauth_session_scope_id_id_pk",
657 "columns": ["scope_id", "id"]
658 }
659 },
660 "uniqueConstraints": {},
661 "policies": {},
662 "checkConstraints": {},
663 "isRLSEnabled": false
664 },
665 "public.openapi_operation": {
666 "name": "openapi_operation",
667 "schema": "",
668 "columns": {
669 "id": {
670 "name": "id",
671 "type": "text",
672 "primaryKey": false,
673 "notNull": true
674 },
675 "scope_id": {
676 "name": "scope_id",
677 "type": "text",
678 "primaryKey": false,
679 "notNull": true
680 },
681 "source_id": {
682 "name": "source_id",
683 "type": "text",
684 "primaryKey": false,
685 "notNull": true
686 },
687 "binding": {
688 "name": "binding",
689 "type": "jsonb",
690 "primaryKey": false,
691 "notNull": true
692 }
693 },
694 "indexes": {
695 "openapi_operation_scope_id_idx": {
696 "name": "openapi_operation_scope_id_idx",
697 "columns": [
698 {
699 "expression": "scope_id",
700 "isExpression": false,
701 "asc": true,
702 "nulls": "last"
703 }
704 ],
705 "isUnique": false,
706 "concurrently": false,
707 "method": "btree",
708 "with": {}
709 },
710 "openapi_operation_source_id_idx": {
711 "name": "openapi_operation_source_id_idx",
712 "columns": [
713 {
714 "expression": "source_id",
715 "isExpression": false,
716 "asc": true,
717 "nulls": "last"
718 }
719 ],
720 "isUnique": false,
721 "concurrently": false,
722 "method": "btree",
723 "with": {}
724 }
725 },
726 "foreignKeys": {},
727 "compositePrimaryKeys": {
728 "openapi_operation_scope_id_id_pk": {
729 "name": "openapi_operation_scope_id_id_pk",
730 "columns": ["scope_id", "id"]
731 }
732 },
733 "uniqueConstraints": {},
734 "policies": {},
735 "checkConstraints": {},
736 "isRLSEnabled": false
737 },
738 "public.openapi_source": {
739 "name": "openapi_source",
740 "schema": "",
741 "columns": {
742 "id": {
743 "name": "id",
744 "type": "text",
745 "primaryKey": false,
746 "notNull": true
747 },
748 "scope_id": {
749 "name": "scope_id",
750 "type": "text",
751 "primaryKey": false,
752 "notNull": true
753 },
754 "name": {
755 "name": "name",
756 "type": "text",
757 "primaryKey": false,
758 "notNull": true
759 },
760 "spec": {
761 "name": "spec",
762 "type": "text",
763 "primaryKey": false,
764 "notNull": true
765 },
766 "source_url": {
767 "name": "source_url",
768 "type": "text",
769 "primaryKey": false,
770 "notNull": false
771 },
772 "base_url": {
773 "name": "base_url",
774 "type": "text",
775 "primaryKey": false,
776 "notNull": false
777 },
778 "headers": {
779 "name": "headers",
780 "type": "jsonb",
781 "primaryKey": false,
782 "notNull": false
783 },
784 "oauth2": {
785 "name": "oauth2",
786 "type": "jsonb",
787 "primaryKey": false,
788 "notNull": false
789 },
790 "invocation_config": {
791 "name": "invocation_config",
792 "type": "jsonb",
793 "primaryKey": false,
794 "notNull": true
795 }
796 },
797 "indexes": {
798 "openapi_source_scope_id_idx": {
799 "name": "openapi_source_scope_id_idx",
800 "columns": [
801 {
802 "expression": "scope_id",
803 "isExpression": false,
804 "asc": true,
805 "nulls": "last"
806 }
807 ],
808 "isUnique": false,
809 "concurrently": false,
810 "method": "btree",
811 "with": {}
812 }
813 },
814 "foreignKeys": {},
815 "compositePrimaryKeys": {
816 "openapi_source_scope_id_id_pk": {
817 "name": "openapi_source_scope_id_id_pk",
818 "columns": ["scope_id", "id"]
819 }
820 },
821 "uniqueConstraints": {},
822 "policies": {},
823 "checkConstraints": {},
824 "isRLSEnabled": false
825 },
826 "public.secret": {
827 "name": "secret",
828 "schema": "",
829 "columns": {
830 "id": {
831 "name": "id",
832 "type": "text",
833 "primaryKey": false,
834 "notNull": true
835 },
836 "scope_id": {
837 "name": "scope_id",
838 "type": "text",
839 "primaryKey": false,
840 "notNull": true
841 },
842 "name": {
843 "name": "name",
844 "type": "text",
845 "primaryKey": false,
846 "notNull": true
847 },
848 "provider": {
849 "name": "provider",
850 "type": "text",
851 "primaryKey": false,
852 "notNull": true
853 },
854 "created_at": {
855 "name": "created_at",
856 "type": "timestamp",
857 "primaryKey": false,
858 "notNull": true
859 }
860 },
861 "indexes": {
862 "secret_scope_id_idx": {
863 "name": "secret_scope_id_idx",
864 "columns": [
865 {
866 "expression": "scope_id",
867 "isExpression": false,
868 "asc": true,
869 "nulls": "last"
870 }
871 ],
872 "isUnique": false,
873 "concurrently": false,
874 "method": "btree",
875 "with": {}
876 },
877 "secret_provider_idx": {
878 "name": "secret_provider_idx",
879 "columns": [
880 {
881 "expression": "provider",
882 "isExpression": false,
883 "asc": true,
884 "nulls": "last"
885 }
886 ],
887 "isUnique": false,
888 "concurrently": false,
889 "method": "btree",
890 "with": {}
891 }
892 },
893 "foreignKeys": {},
894 "compositePrimaryKeys": {
895 "secret_scope_id_id_pk": {
896 "name": "secret_scope_id_id_pk",
897 "columns": ["scope_id", "id"]
898 }
899 },
900 "uniqueConstraints": {},
901 "policies": {},
902 "checkConstraints": {},
903 "isRLSEnabled": false
904 },
905 "public.source": {
906 "name": "source",
907 "schema": "",
908 "columns": {
909 "id": {
910 "name": "id",
911 "type": "text",
912 "primaryKey": false,
913 "notNull": true
914 },
915 "scope_id": {
916 "name": "scope_id",
917 "type": "text",
918 "primaryKey": false,
919 "notNull": true
920 },
921 "plugin_id": {
922 "name": "plugin_id",
923 "type": "text",
924 "primaryKey": false,
925 "notNull": true
926 },
927 "kind": {
928 "name": "kind",
929 "type": "text",
930 "primaryKey": false,
931 "notNull": true
932 },
933 "name": {
934 "name": "name",
935 "type": "text",
936 "primaryKey": false,
937 "notNull": true
938 },
939 "url": {
940 "name": "url",
941 "type": "text",
942 "primaryKey": false,
943 "notNull": false
944 },
945 "can_remove": {
946 "name": "can_remove",
947 "type": "boolean",
948 "primaryKey": false,
949 "notNull": true,
950 "default": true
951 },
952 "can_refresh": {
953 "name": "can_refresh",
954 "type": "boolean",
955 "primaryKey": false,
956 "notNull": true,
957 "default": false
958 },
959 "can_edit": {
960 "name": "can_edit",
961 "type": "boolean",
962 "primaryKey": false,
963 "notNull": true,
964 "default": false
965 },
966 "created_at": {
967 "name": "created_at",
968 "type": "timestamp",
969 "primaryKey": false,
970 "notNull": true
971 },
972 "updated_at": {
973 "name": "updated_at",
974 "type": "timestamp",
975 "primaryKey": false,
976 "notNull": true
977 }
978 },
979 "indexes": {
980 "source_scope_id_idx": {
981 "name": "source_scope_id_idx",
982 "columns": [
983 {
984 "expression": "scope_id",
985 "isExpression": false,
986 "asc": true,
987 "nulls": "last"
988 }
989 ],
990 "isUnique": false,
991 "concurrently": false,
992 "method": "btree",
993 "with": {}
994 },
995 "source_plugin_id_idx": {
996 "name": "source_plugin_id_idx",
997 "columns": [
998 {
999 "expression": "plugin_id",
1000 "isExpression": false,
1001 "asc": true,
1002 "nulls": "last"
1003 }
1004 ],
1005 "isUnique": false,
1006 "concurrently": false,
1007 "method": "btree",
1008 "with": {}
1009 }
1010 },
1011 "foreignKeys": {},
1012 "compositePrimaryKeys": {
1013 "source_scope_id_id_pk": {
1014 "name": "source_scope_id_id_pk",
1015 "columns": ["scope_id", "id"]
1016 }
1017 },
1018 "uniqueConstraints": {},
1019 "policies": {},
1020 "checkConstraints": {},
1021 "isRLSEnabled": false
1022 },
1023 "public.tool": {
1024 "name": "tool",
1025 "schema": "",
1026 "columns": {
1027 "id": {
1028 "name": "id",
1029 "type": "text",
1030 "primaryKey": false,
1031 "notNull": true
1032 },
1033 "scope_id": {
1034 "name": "scope_id",
1035 "type": "text",
1036 "primaryKey": false,
1037 "notNull": true
1038 },
1039 "source_id": {
1040 "name": "source_id",
1041 "type": "text",
1042 "primaryKey": false,
1043 "notNull": true
1044 },
1045 "plugin_id": {
1046 "name": "plugin_id",
1047 "type": "text",
1048 "primaryKey": false,
1049 "notNull": true
1050 },
1051 "name": {
1052 "name": "name",
1053 "type": "text",
1054 "primaryKey": false,
1055 "notNull": true
1056 },
1057 "description": {
1058 "name": "description",
1059 "type": "text",
1060 "primaryKey": false,
1061 "notNull": true
1062 },
1063 "input_schema": {
1064 "name": "input_schema",
1065 "type": "jsonb",
1066 "primaryKey": false,
1067 "notNull": false
1068 },
1069 "output_schema": {
1070 "name": "output_schema",
1071 "type": "jsonb",
1072 "primaryKey": false,
1073 "notNull": false
1074 },
1075 "created_at": {
1076 "name": "created_at",
1077 "type": "timestamp",
1078 "primaryKey": false,
1079 "notNull": true
1080 },
1081 "updated_at": {
1082 "name": "updated_at",
1083 "type": "timestamp",
1084 "primaryKey": false,
1085 "notNull": true
1086 }
1087 },
1088 "indexes": {
1089 "tool_scope_id_idx": {
1090 "name": "tool_scope_id_idx",
1091 "columns": [
1092 {
1093 "expression": "scope_id",
1094 "isExpression": false,
1095 "asc": true,
1096 "nulls": "last"
1097 }
1098 ],
1099 "isUnique": false,
1100 "concurrently": false,
1101 "method": "btree",
1102 "with": {}
1103 },
1104 "tool_source_id_idx": {
1105 "name": "tool_source_id_idx",
1106 "columns": [
1107 {
1108 "expression": "source_id",
1109 "isExpression": false,
1110 "asc": true,
1111 "nulls": "last"
1112 }
1113 ],
1114 "isUnique": false,
1115 "concurrently": false,
1116 "method": "btree",
1117 "with": {}
1118 },
1119 "tool_plugin_id_idx": {
1120 "name": "tool_plugin_id_idx",
1121 "columns": [
1122 {
1123 "expression": "plugin_id",
1124 "isExpression": false,
1125 "asc": true,
1126 "nulls": "last"
1127 }
1128 ],
1129 "isUnique": false,
1130 "concurrently": false,
1131 "method": "btree",
1132 "with": {}
1133 }
1134 },
1135 "foreignKeys": {},
1136 "compositePrimaryKeys": {
1137 "tool_scope_id_id_pk": {
1138 "name": "tool_scope_id_id_pk",
1139 "columns": ["scope_id", "id"]
1140 }
1141 },
1142 "uniqueConstraints": {},
1143 "policies": {},
1144 "checkConstraints": {},
1145 "isRLSEnabled": false
1146 },
1147 "public.workos_vault_metadata": {
1148 "name": "workos_vault_metadata",
1149 "schema": "",
1150 "columns": {
1151 "id": {
1152 "name": "id",
1153 "type": "text",
1154 "primaryKey": false,
1155 "notNull": true
1156 },
1157 "scope_id": {
1158 "name": "scope_id",
1159 "type": "text",
1160 "primaryKey": false,
1161 "notNull": true
1162 },
1163 "name": {
1164 "name": "name",
1165 "type": "text",
1166 "primaryKey": false,
1167 "notNull": true
1168 },
1169 "purpose": {
1170 "name": "purpose",
1171 "type": "text",
1172 "primaryKey": false,
1173 "notNull": false
1174 },
1175 "created_at": {
1176 "name": "created_at",
1177 "type": "timestamp",
1178 "primaryKey": false,
1179 "notNull": true
1180 }
1181 },
1182 "indexes": {
1183 "workos_vault_metadata_scope_id_idx": {
1184 "name": "workos_vault_metadata_scope_id_idx",
1185 "columns": [
1186 {
1187 "expression": "scope_id",
1188 "isExpression": false,
1189 "asc": true,
1190 "nulls": "last"
1191 }
1192 ],
1193 "isUnique": false,
1194 "concurrently": false,
1195 "method": "btree",
1196 "with": {}
1197 }
1198 },
1199 "foreignKeys": {},
1200 "compositePrimaryKeys": {
1201 "workos_vault_metadata_scope_id_id_pk": {
1202 "name": "workos_vault_metadata_scope_id_id_pk",
1203 "columns": ["scope_id", "id"]
1204 }
1205 },
1206 "uniqueConstraints": {},
1207 "policies": {},
1208 "checkConstraints": {},
1209 "isRLSEnabled": false
1210 }
1211 },
1212 "enums": {},
1213 "schemas": {},
1214 "sequences": {},
1215 "roles": {},
1216 "policies": {},
1217 "views": {},
1218 "_meta": {
1219 "columns": {},
1220 "schemas": {},
1221 "tables": {}
1222 }
1223}
apps/cloud/drizzle/meta/0003_snapshot.json+0−1365
@@ -1,1365 +0,0 @@
1{
2 "id": "09d08343-8162-4e6b-91ab-ce0a9d6bad10",
3 "prevId": "f029f809-1bf3-46e0-a31b-82df7c9c7171",
4 "version": "7",
5 "dialect": "postgresql",
6 "tables": {
7 "public.accounts": {
8 "name": "accounts",
9 "schema": "",
10 "columns": {
11 "id": {
12 "name": "id",
13 "type": "text",
14 "primaryKey": true,
15 "notNull": true
16 },
17 "created_at": {
18 "name": "created_at",
19 "type": "timestamp with time zone",
20 "primaryKey": false,
21 "notNull": true,
22 "default": "now()"
23 }
24 },
25 "indexes": {},
26 "foreignKeys": {},
27 "compositePrimaryKeys": {},
28 "uniqueConstraints": {},
29 "policies": {},
30 "checkConstraints": {},
31 "isRLSEnabled": false
32 },
33 "public.memberships": {
34 "name": "memberships",
35 "schema": "",
36 "columns": {
37 "account_id": {
38 "name": "account_id",
39 "type": "text",
40 "primaryKey": false,
41 "notNull": true
42 },
43 "organization_id": {
44 "name": "organization_id",
45 "type": "text",
46 "primaryKey": false,
47 "notNull": true
48 },
49 "created_at": {
50 "name": "created_at",
51 "type": "timestamp with time zone",
52 "primaryKey": false,
53 "notNull": true,
54 "default": "now()"
55 }
56 },
57 "indexes": {},
58 "foreignKeys": {
59 "memberships_account_id_accounts_id_fk": {
60 "name": "memberships_account_id_accounts_id_fk",
61 "tableFrom": "memberships",
62 "tableTo": "accounts",
63 "columnsFrom": ["account_id"],
64 "columnsTo": ["id"],
65 "onDelete": "cascade",
66 "onUpdate": "no action"
67 },
68 "memberships_organization_id_organizations_id_fk": {
69 "name": "memberships_organization_id_organizations_id_fk",
70 "tableFrom": "memberships",
71 "tableTo": "organizations",
72 "columnsFrom": ["organization_id"],
73 "columnsTo": ["id"],
74 "onDelete": "cascade",
75 "onUpdate": "no action"
76 }
77 },
78 "compositePrimaryKeys": {
79 "memberships_account_id_organization_id_pk": {
80 "name": "memberships_account_id_organization_id_pk",
81 "columns": ["account_id", "organization_id"]
82 }
83 },
84 "uniqueConstraints": {},
85 "policies": {},
86 "checkConstraints": {},
87 "isRLSEnabled": false
88 },
89 "public.organizations": {
90 "name": "organizations",
91 "schema": "",
92 "columns": {
93 "id": {
94 "name": "id",
95 "type": "text",
96 "primaryKey": true,
97 "notNull": true
98 },
99 "name": {
100 "name": "name",
101 "type": "text",
102 "primaryKey": false,
103 "notNull": true
104 },
105 "created_at": {
106 "name": "created_at",
107 "type": "timestamp with time zone",
108 "primaryKey": false,
109 "notNull": true,
110 "default": "now()"
111 }
112 },
113 "indexes": {},
114 "foreignKeys": {},
115 "compositePrimaryKeys": {},
116 "uniqueConstraints": {},
117 "policies": {},
118 "checkConstraints": {},
119 "isRLSEnabled": false
120 },
121 "public.blob": {
122 "name": "blob",
123 "schema": "",
124 "columns": {
125 "namespace": {
126 "name": "namespace",
127 "type": "text",
128 "primaryKey": false,
129 "notNull": true
130 },
131 "key": {
132 "name": "key",
133 "type": "text",
134 "primaryKey": false,
135 "notNull": true
136 },
137 "value": {
138 "name": "value",
139 "type": "text",
140 "primaryKey": false,
141 "notNull": true
142 }
143 },
144 "indexes": {},
145 "foreignKeys": {},
146 "compositePrimaryKeys": {
147 "blob_namespace_key_pk": {
148 "name": "blob_namespace_key_pk",
149 "columns": ["namespace", "key"]
150 }
151 },
152 "uniqueConstraints": {},
153 "policies": {},
154 "checkConstraints": {},
155 "isRLSEnabled": false
156 },
157 "public.connection": {
158 "name": "connection",
159 "schema": "",
160 "columns": {
161 "id": {
162 "name": "id",
163 "type": "text",
164 "primaryKey": false,
165 "notNull": true
166 },
167 "scope_id": {
168 "name": "scope_id",
169 "type": "text",
170 "primaryKey": false,
171 "notNull": true
172 },
173 "provider": {
174 "name": "provider",
175 "type": "text",
176 "primaryKey": false,
177 "notNull": true
178 },
179 "kind": {
180 "name": "kind",
181 "type": "text",
182 "primaryKey": false,
183 "notNull": true
184 },
185 "identity_label": {
186 "name": "identity_label",
187 "type": "text",
188 "primaryKey": false,
189 "notNull": false
190 },
191 "access_token_secret_id": {
192 "name": "access_token_secret_id",
193 "type": "text",
194 "primaryKey": false,
195 "notNull": true
196 },
197 "refresh_token_secret_id": {
198 "name": "refresh_token_secret_id",
199 "type": "text",
200 "primaryKey": false,
201 "notNull": false
202 },
203 "expires_at": {
204 "name": "expires_at",
205 "type": "bigint",
206 "primaryKey": false,
207 "notNull": false
208 },
209 "scope": {
210 "name": "scope",
211 "type": "text",
212 "primaryKey": false,
213 "notNull": false
214 },
215 "provider_state": {
216 "name": "provider_state",
217 "type": "jsonb",
218 "primaryKey": false,
219 "notNull": false
220 },
221 "created_at": {
222 "name": "created_at",
223 "type": "timestamp",
224 "primaryKey": false,
225 "notNull": true
226 },
227 "updated_at": {
228 "name": "updated_at",
229 "type": "timestamp",
230 "primaryKey": false,
231 "notNull": true
232 }
233 },
234 "indexes": {
235 "connection_scope_id_idx": {
236 "name": "connection_scope_id_idx",
237 "columns": [
238 {
239 "expression": "scope_id",
240 "isExpression": false,
241 "asc": true,
242 "nulls": "last"
243 }
244 ],
245 "isUnique": false,
246 "concurrently": false,
247 "method": "btree",
248 "with": {}
249 },
250 "connection_provider_idx": {
251 "name": "connection_provider_idx",
252 "columns": [
253 {
254 "expression": "provider",
255 "isExpression": false,
256 "asc": true,
257 "nulls": "last"
258 }
259 ],
260 "isUnique": false,
261 "concurrently": false,
262 "method": "btree",
263 "with": {}
264 }
265 },
266 "foreignKeys": {},
267 "compositePrimaryKeys": {
268 "connection_scope_id_id_pk": {
269 "name": "connection_scope_id_id_pk",
270 "columns": ["scope_id", "id"]
271 }
272 },
273 "uniqueConstraints": {},
274 "policies": {},
275 "checkConstraints": {},
276 "isRLSEnabled": false
277 },
278 "public.definition": {
279 "name": "definition",
280 "schema": "",
281 "columns": {
282 "id": {
283 "name": "id",
284 "type": "text",
285 "primaryKey": false,
286 "notNull": true
287 },
288 "scope_id": {
289 "name": "scope_id",
290 "type": "text",
291 "primaryKey": false,
292 "notNull": true
293 },
294 "source_id": {
295 "name": "source_id",
296 "type": "text",
297 "primaryKey": false,
298 "notNull": true
299 },
300 "plugin_id": {
301 "name": "plugin_id",
302 "type": "text",
303 "primaryKey": false,
304 "notNull": true
305 },
306 "name": {
307 "name": "name",
308 "type": "text",
309 "primaryKey": false,
310 "notNull": true
311 },
312 "schema": {
313 "name": "schema",
314 "type": "jsonb",
315 "primaryKey": false,
316 "notNull": true
317 },
318 "created_at": {
319 "name": "created_at",
320 "type": "timestamp",
321 "primaryKey": false,
322 "notNull": true
323 }
324 },
325 "indexes": {
326 "definition_scope_id_idx": {
327 "name": "definition_scope_id_idx",
328 "columns": [
329 {
330 "expression": "scope_id",
331 "isExpression": false,
332 "asc": true,
333 "nulls": "last"
334 }
335 ],
336 "isUnique": false,
337 "concurrently": false,
338 "method": "btree",
339 "with": {}
340 },
341 "definition_source_id_idx": {
342 "name": "definition_source_id_idx",
343 "columns": [
344 {
345 "expression": "source_id",
346 "isExpression": false,
347 "asc": true,
348 "nulls": "last"
349 }
350 ],
351 "isUnique": false,
352 "concurrently": false,
353 "method": "btree",
354 "with": {}
355 },
356 "definition_plugin_id_idx": {
357 "name": "definition_plugin_id_idx",
358 "columns": [
359 {
360 "expression": "plugin_id",
361 "isExpression": false,
362 "asc": true,
363 "nulls": "last"
364 }
365 ],
366 "isUnique": false,
367 "concurrently": false,
368 "method": "btree",
369 "with": {}
370 }
371 },
372 "foreignKeys": {},
373 "compositePrimaryKeys": {
374 "definition_scope_id_id_pk": {
375 "name": "definition_scope_id_id_pk",
376 "columns": ["scope_id", "id"]
377 }
378 },
379 "uniqueConstraints": {},
380 "policies": {},
381 "checkConstraints": {},
382 "isRLSEnabled": false
383 },
384 "public.graphql_operation": {
385 "name": "graphql_operation",
386 "schema": "",
387 "columns": {
388 "id": {
389 "name": "id",
390 "type": "text",
391 "primaryKey": false,
392 "notNull": true
393 },
394 "scope_id": {
395 "name": "scope_id",
396 "type": "text",
397 "primaryKey": false,
398 "notNull": true
399 },
400 "source_id": {
401 "name": "source_id",
402 "type": "text",
403 "primaryKey": false,
404 "notNull": true
405 },
406 "binding": {
407 "name": "binding",
408 "type": "jsonb",
409 "primaryKey": false,
410 "notNull": true
411 }
412 },
413 "indexes": {
414 "graphql_operation_scope_id_idx": {
415 "name": "graphql_operation_scope_id_idx",
416 "columns": [
417 {
418 "expression": "scope_id",
419 "isExpression": false,
420 "asc": true,
421 "nulls": "last"
422 }
423 ],
424 "isUnique": false,
425 "concurrently": false,
426 "method": "btree",
427 "with": {}
428 },
429 "graphql_operation_source_id_idx": {
430 "name": "graphql_operation_source_id_idx",
431 "columns": [
432 {
433 "expression": "source_id",
434 "isExpression": false,
435 "asc": true,
436 "nulls": "last"
437 }
438 ],
439 "isUnique": false,
440 "concurrently": false,
441 "method": "btree",
442 "with": {}
443 }
444 },
445 "foreignKeys": {},
446 "compositePrimaryKeys": {
447 "graphql_operation_scope_id_id_pk": {
448 "name": "graphql_operation_scope_id_id_pk",
449 "columns": ["scope_id", "id"]
450 }
451 },
452 "uniqueConstraints": {},
453 "policies": {},
454 "checkConstraints": {},
455 "isRLSEnabled": false
456 },
457 "public.graphql_source": {
458 "name": "graphql_source",
459 "schema": "",
460 "columns": {
461 "id": {
462 "name": "id",
463 "type": "text",
464 "primaryKey": false,
465 "notNull": true
466 },
467 "scope_id": {
468 "name": "scope_id",
469 "type": "text",
470 "primaryKey": false,
471 "notNull": true
472 },
473 "name": {
474 "name": "name",
475 "type": "text",
476 "primaryKey": false,
477 "notNull": true
478 },
479 "endpoint": {
480 "name": "endpoint",
481 "type": "text",
482 "primaryKey": false,
483 "notNull": true
484 },
485 "headers": {
486 "name": "headers",
487 "type": "jsonb",
488 "primaryKey": false,
489 "notNull": false
490 }
491 },
492 "indexes": {
493 "graphql_source_scope_id_idx": {
494 "name": "graphql_source_scope_id_idx",
495 "columns": [
496 {
497 "expression": "scope_id",
498 "isExpression": false,
499 "asc": true,
500 "nulls": "last"
501 }
502 ],
503 "isUnique": false,
504 "concurrently": false,
505 "method": "btree",
506 "with": {}
507 }
508 },
509 "foreignKeys": {},
510 "compositePrimaryKeys": {
511 "graphql_source_scope_id_id_pk": {
512 "name": "graphql_source_scope_id_id_pk",
513 "columns": ["scope_id", "id"]
514 }
515 },
516 "uniqueConstraints": {},
517 "policies": {},
518 "checkConstraints": {},
519 "isRLSEnabled": false
520 },
521 "public.mcp_binding": {
522 "name": "mcp_binding",
523 "schema": "",
524 "columns": {
525 "id": {
526 "name": "id",
527 "type": "text",
528 "primaryKey": false,
529 "notNull": true
530 },
531 "scope_id": {
532 "name": "scope_id",
533 "type": "text",
534 "primaryKey": false,
535 "notNull": true
536 },
537 "source_id": {
538 "name": "source_id",
539 "type": "text",
540 "primaryKey": false,
541 "notNull": true
542 },
543 "binding": {
544 "name": "binding",
545 "type": "jsonb",
546 "primaryKey": false,
547 "notNull": true
548 },
549 "created_at": {
550 "name": "created_at",
551 "type": "timestamp",
552 "primaryKey": false,
553 "notNull": true
554 }
555 },
556 "indexes": {
557 "mcp_binding_scope_id_idx": {
558 "name": "mcp_binding_scope_id_idx",
559 "columns": [
560 {
561 "expression": "scope_id",
562 "isExpression": false,
563 "asc": true,
564 "nulls": "last"
565 }
566 ],
567 "isUnique": false,
568 "concurrently": false,
569 "method": "btree",
570 "with": {}
571 },
572 "mcp_binding_source_id_idx": {
573 "name": "mcp_binding_source_id_idx",
574 "columns": [
575 {
576 "expression": "source_id",
577 "isExpression": false,
578 "asc": true,
579 "nulls": "last"
580 }
581 ],
582 "isUnique": false,
583 "concurrently": false,
584 "method": "btree",
585 "with": {}
586 }
587 },
588 "foreignKeys": {},
589 "compositePrimaryKeys": {
590 "mcp_binding_scope_id_id_pk": {
591 "name": "mcp_binding_scope_id_id_pk",
592 "columns": ["scope_id", "id"]
593 }
594 },
595 "uniqueConstraints": {},
596 "policies": {},
597 "checkConstraints": {},
598 "isRLSEnabled": false
599 },
600 "public.mcp_oauth_session": {
601 "name": "mcp_oauth_session",
602 "schema": "",
603 "columns": {
604 "id": {
605 "name": "id",
606 "type": "text",
607 "primaryKey": false,
608 "notNull": true
609 },
610 "scope_id": {
611 "name": "scope_id",
612 "type": "text",
613 "primaryKey": false,
614 "notNull": true
615 },
616 "session": {
617 "name": "session",
618 "type": "jsonb",
619 "primaryKey": false,
620 "notNull": true
621 },
622 "expires_at": {
623 "name": "expires_at",
624 "type": "bigint",
625 "primaryKey": false,
626 "notNull": true
627 },
628 "created_at": {
629 "name": "created_at",
630 "type": "timestamp",
631 "primaryKey": false,
632 "notNull": true
633 }
634 },
635 "indexes": {
636 "mcp_oauth_session_scope_id_idx": {
637 "name": "mcp_oauth_session_scope_id_idx",
638 "columns": [
639 {
640 "expression": "scope_id",
641 "isExpression": false,
642 "asc": true,
643 "nulls": "last"
644 }
645 ],
646 "isUnique": false,
647 "concurrently": false,
648 "method": "btree",
649 "with": {}
650 }
651 },
652 "foreignKeys": {},
653 "compositePrimaryKeys": {
654 "mcp_oauth_session_scope_id_id_pk": {
655 "name": "mcp_oauth_session_scope_id_id_pk",
656 "columns": ["scope_id", "id"]
657 }
658 },
659 "uniqueConstraints": {},
660 "policies": {},
661 "checkConstraints": {},
662 "isRLSEnabled": false
663 },
664 "public.mcp_source": {
665 "name": "mcp_source",
666 "schema": "",
667 "columns": {
668 "id": {
669 "name": "id",
670 "type": "text",
671 "primaryKey": false,
672 "notNull": true
673 },
674 "scope_id": {
675 "name": "scope_id",
676 "type": "text",
677 "primaryKey": false,
678 "notNull": true
679 },
680 "name": {
681 "name": "name",
682 "type": "text",
683 "primaryKey": false,
684 "notNull": true
685 },
686 "config": {
687 "name": "config",
688 "type": "jsonb",
689 "primaryKey": false,
690 "notNull": true
691 },
692 "created_at": {
693 "name": "created_at",
694 "type": "timestamp",
695 "primaryKey": false,
696 "notNull": true
697 }
698 },
699 "indexes": {
700 "mcp_source_scope_id_idx": {
701 "name": "mcp_source_scope_id_idx",
702 "columns": [
703 {
704 "expression": "scope_id",
705 "isExpression": false,
706 "asc": true,
707 "nulls": "last"
708 }
709 ],
710 "isUnique": false,
711 "concurrently": false,
712 "method": "btree",
713 "with": {}
714 }
715 },
716 "foreignKeys": {},
717 "compositePrimaryKeys": {
718 "mcp_source_scope_id_id_pk": {
719 "name": "mcp_source_scope_id_id_pk",
720 "columns": ["scope_id", "id"]
721 }
722 },
723 "uniqueConstraints": {},
724 "policies": {},
725 "checkConstraints": {},
726 "isRLSEnabled": false
727 },
728 "public.openapi_oauth_session": {
729 "name": "openapi_oauth_session",
730 "schema": "",
731 "columns": {
732 "id": {
733 "name": "id",
734 "type": "text",
735 "primaryKey": false,
736 "notNull": true
737 },
738 "scope_id": {
739 "name": "scope_id",
740 "type": "text",
741 "primaryKey": false,
742 "notNull": true
743 },
744 "session": {
745 "name": "session",
746 "type": "jsonb",
747 "primaryKey": false,
748 "notNull": true
749 },
750 "created_at": {
751 "name": "created_at",
752 "type": "timestamp",
753 "primaryKey": false,
754 "notNull": true
755 }
756 },
757 "indexes": {
758 "openapi_oauth_session_scope_id_idx": {
759 "name": "openapi_oauth_session_scope_id_idx",
760 "columns": [
761 {
762 "expression": "scope_id",
763 "isExpression": false,
764 "asc": true,
765 "nulls": "last"
766 }
767 ],
768 "isUnique": false,
769 "concurrently": false,
770 "method": "btree",
771 "with": {}
772 }
773 },
774 "foreignKeys": {},
775 "compositePrimaryKeys": {
776 "openapi_oauth_session_scope_id_id_pk": {
777 "name": "openapi_oauth_session_scope_id_id_pk",
778 "columns": ["scope_id", "id"]
779 }
780 },
781 "uniqueConstraints": {},
782 "policies": {},
783 "checkConstraints": {},
784 "isRLSEnabled": false
785 },
786 "public.openapi_operation": {
787 "name": "openapi_operation",
788 "schema": "",
789 "columns": {
790 "id": {
791 "name": "id",
792 "type": "text",
793 "primaryKey": false,
794 "notNull": true
795 },
796 "scope_id": {
797 "name": "scope_id",
798 "type": "text",
799 "primaryKey": false,
800 "notNull": true
801 },
802 "source_id": {
803 "name": "source_id",
804 "type": "text",
805 "primaryKey": false,
806 "notNull": true
807 },
808 "binding": {
809 "name": "binding",
810 "type": "jsonb",
811 "primaryKey": false,
812 "notNull": true
813 }
814 },
815 "indexes": {
816 "openapi_operation_scope_id_idx": {
817 "name": "openapi_operation_scope_id_idx",
818 "columns": [
819 {
820 "expression": "scope_id",
821 "isExpression": false,
822 "asc": true,
823 "nulls": "last"
824 }
825 ],
826 "isUnique": false,
827 "concurrently": false,
828 "method": "btree",
829 "with": {}
830 },
831 "openapi_operation_source_id_idx": {
832 "name": "openapi_operation_source_id_idx",
833 "columns": [
834 {
835 "expression": "source_id",
836 "isExpression": false,
837 "asc": true,
838 "nulls": "last"
839 }
840 ],
841 "isUnique": false,
842 "concurrently": false,
843 "method": "btree",
844 "with": {}
845 }
846 },
847 "foreignKeys": {},
848 "compositePrimaryKeys": {
849 "openapi_operation_scope_id_id_pk": {
850 "name": "openapi_operation_scope_id_id_pk",
851 "columns": ["scope_id", "id"]
852 }
853 },
854 "uniqueConstraints": {},
855 "policies": {},
856 "checkConstraints": {},
857 "isRLSEnabled": false
858 },
859 "public.openapi_source": {
860 "name": "openapi_source",
861 "schema": "",
862 "columns": {
863 "id": {
864 "name": "id",
865 "type": "text",
866 "primaryKey": false,
867 "notNull": true
868 },
869 "scope_id": {
870 "name": "scope_id",
871 "type": "text",
872 "primaryKey": false,
873 "notNull": true
874 },
875 "name": {
876 "name": "name",
877 "type": "text",
878 "primaryKey": false,
879 "notNull": true
880 },
881 "spec": {
882 "name": "spec",
883 "type": "text",
884 "primaryKey": false,
885 "notNull": true
886 },
887 "source_url": {
888 "name": "source_url",
889 "type": "text",
890 "primaryKey": false,
891 "notNull": false
892 },
893 "base_url": {
894 "name": "base_url",
895 "type": "text",
896 "primaryKey": false,
897 "notNull": false
898 },
899 "headers": {
900 "name": "headers",
901 "type": "jsonb",
902 "primaryKey": false,
903 "notNull": false
904 },
905 "oauth2": {
906 "name": "oauth2",
907 "type": "jsonb",
908 "primaryKey": false,
909 "notNull": false
910 },
911 "invocation_config": {
912 "name": "invocation_config",
913 "type": "jsonb",
914 "primaryKey": false,
915 "notNull": true
916 }
917 },
918 "indexes": {
919 "openapi_source_scope_id_idx": {
920 "name": "openapi_source_scope_id_idx",
921 "columns": [
922 {
923 "expression": "scope_id",
924 "isExpression": false,
925 "asc": true,
926 "nulls": "last"
927 }
928 ],
929 "isUnique": false,
930 "concurrently": false,
931 "method": "btree",
932 "with": {}
933 }
934 },
935 "foreignKeys": {},
936 "compositePrimaryKeys": {
937 "openapi_source_scope_id_id_pk": {
938 "name": "openapi_source_scope_id_id_pk",
939 "columns": ["scope_id", "id"]
940 }
941 },
942 "uniqueConstraints": {},
943 "policies": {},
944 "checkConstraints": {},
945 "isRLSEnabled": false
946 },
947 "public.secret": {
948 "name": "secret",
949 "schema": "",
950 "columns": {
951 "id": {
952 "name": "id",
953 "type": "text",
954 "primaryKey": false,
955 "notNull": true
956 },
957 "scope_id": {
958 "name": "scope_id",
959 "type": "text",
960 "primaryKey": false,
961 "notNull": true
962 },
963 "name": {
964 "name": "name",
965 "type": "text",
966 "primaryKey": false,
967 "notNull": true
968 },
969 "provider": {
970 "name": "provider",
971 "type": "text",
972 "primaryKey": false,
973 "notNull": true
974 },
975 "owned_by_connection_id": {
976 "name": "owned_by_connection_id",
977 "type": "text",
978 "primaryKey": false,
979 "notNull": false
980 },
981 "created_at": {
982 "name": "created_at",
983 "type": "timestamp",
984 "primaryKey": false,
985 "notNull": true
986 }
987 },
988 "indexes": {
989 "secret_scope_id_idx": {
990 "name": "secret_scope_id_idx",
991 "columns": [
992 {
993 "expression": "scope_id",
994 "isExpression": false,
995 "asc": true,
996 "nulls": "last"
997 }
998 ],
999 "isUnique": false,
1000 "concurrently": false,
1001 "method": "btree",
1002 "with": {}
1003 },
1004 "secret_provider_idx": {
1005 "name": "secret_provider_idx",
1006 "columns": [
1007 {
1008 "expression": "provider",
1009 "isExpression": false,
1010 "asc": true,
1011 "nulls": "last"
1012 }
1013 ],
1014 "isUnique": false,
1015 "concurrently": false,
1016 "method": "btree",
1017 "with": {}
1018 },
1019 "secret_owned_by_connection_id_idx": {
1020 "name": "secret_owned_by_connection_id_idx",
1021 "columns": [
1022 {
1023 "expression": "owned_by_connection_id",
1024 "isExpression": false,
1025 "asc": true,
1026 "nulls": "last"
1027 }
1028 ],
1029 "isUnique": false,
1030 "concurrently": false,
1031 "method": "btree",
1032 "with": {}
1033 }
1034 },
1035 "foreignKeys": {},
1036 "compositePrimaryKeys": {
1037 "secret_scope_id_id_pk": {
1038 "name": "secret_scope_id_id_pk",
1039 "columns": ["scope_id", "id"]
1040 }
1041 },
1042 "uniqueConstraints": {},
1043 "policies": {},
1044 "checkConstraints": {},
1045 "isRLSEnabled": false
1046 },
1047 "public.source": {
1048 "name": "source",
1049 "schema": "",
1050 "columns": {
1051 "id": {
1052 "name": "id",
1053 "type": "text",
1054 "primaryKey": false,
1055 "notNull": true
1056 },
1057 "scope_id": {
1058 "name": "scope_id",
1059 "type": "text",
1060 "primaryKey": false,
1061 "notNull": true
1062 },
1063 "plugin_id": {
1064 "name": "plugin_id",
1065 "type": "text",
1066 "primaryKey": false,
1067 "notNull": true
1068 },
1069 "kind": {
1070 "name": "kind",
1071 "type": "text",
1072 "primaryKey": false,
1073 "notNull": true
1074 },
1075 "name": {
1076 "name": "name",
1077 "type": "text",
1078 "primaryKey": false,
1079 "notNull": true
1080 },
1081 "url": {
1082 "name": "url",
1083 "type": "text",
1084 "primaryKey": false,
1085 "notNull": false
1086 },
1087 "can_remove": {
1088 "name": "can_remove",
1089 "type": "boolean",
1090 "primaryKey": false,
1091 "notNull": true,
1092 "default": true
1093 },
1094 "can_refresh": {
1095 "name": "can_refresh",
1096 "type": "boolean",
1097 "primaryKey": false,
1098 "notNull": true,
1099 "default": false
1100 },
1101 "can_edit": {
1102 "name": "can_edit",
1103 "type": "boolean",
1104 "primaryKey": false,
1105 "notNull": true,
1106 "default": false
1107 },
1108 "created_at": {
1109 "name": "created_at",
1110 "type": "timestamp",
1111 "primaryKey": false,
1112 "notNull": true
1113 },
1114 "updated_at": {
1115 "name": "updated_at",
1116 "type": "timestamp",
1117 "primaryKey": false,
1118 "notNull": true
1119 }
1120 },
1121 "indexes": {
1122 "source_scope_id_idx": {
1123 "name": "source_scope_id_idx",
1124 "columns": [
1125 {
1126 "expression": "scope_id",
1127 "isExpression": false,
1128 "asc": true,
1129 "nulls": "last"
1130 }
1131 ],
1132 "isUnique": false,
1133 "concurrently": false,
1134 "method": "btree",
1135 "with": {}
1136 },
1137 "source_plugin_id_idx": {
1138 "name": "source_plugin_id_idx",
1139 "columns": [
1140 {
1141 "expression": "plugin_id",
1142 "isExpression": false,
1143 "asc": true,
1144 "nulls": "last"
1145 }
1146 ],
1147 "isUnique": false,
1148 "concurrently": false,
1149 "method": "btree",
1150 "with": {}
1151 }
1152 },
1153 "foreignKeys": {},
1154 "compositePrimaryKeys": {
1155 "source_scope_id_id_pk": {
1156 "name": "source_scope_id_id_pk",
1157 "columns": ["scope_id", "id"]
1158 }
1159 },
1160 "uniqueConstraints": {},
1161 "policies": {},
1162 "checkConstraints": {},
1163 "isRLSEnabled": false
1164 },
1165 "public.tool": {
1166 "name": "tool",
1167 "schema": "",
1168 "columns": {
1169 "id": {
1170 "name": "id",
1171 "type": "text",
1172 "primaryKey": false,
1173 "notNull": true
1174 },
1175 "scope_id": {
1176 "name": "scope_id",
1177 "type": "text",
1178 "primaryKey": false,
1179 "notNull": true
1180 },
1181 "source_id": {
1182 "name": "source_id",
1183 "type": "text",
1184 "primaryKey": false,
1185 "notNull": true
1186 },
1187 "plugin_id": {
1188 "name": "plugin_id",
1189 "type": "text",
1190 "primaryKey": false,
1191 "notNull": true
1192 },
1193 "name": {
1194 "name": "name",
1195 "type": "text",
1196 "primaryKey": false,
1197 "notNull": true
1198 },
1199 "description": {
1200 "name": "description",
1201 "type": "text",
1202 "primaryKey": false,
1203 "notNull": true
1204 },
1205 "input_schema": {
1206 "name": "input_schema",
1207 "type": "jsonb",
1208 "primaryKey": false,
1209 "notNull": false
1210 },
1211 "output_schema": {
1212 "name": "output_schema",
1213 "type": "jsonb",
1214 "primaryKey": false,
1215 "notNull": false
1216 },
1217 "created_at": {
1218 "name": "created_at",
1219 "type": "timestamp",
1220 "primaryKey": false,
1221 "notNull": true
1222 },
1223 "updated_at": {
1224 "name": "updated_at",
1225 "type": "timestamp",
1226 "primaryKey": false,
1227 "notNull": true
1228 }
1229 },
1230 "indexes": {
1231 "tool_scope_id_idx": {
1232 "name": "tool_scope_id_idx",
1233 "columns": [
1234 {
1235 "expression": "scope_id",
1236 "isExpression": false,
1237 "asc": true,
1238 "nulls": "last"
1239 }
1240 ],
1241 "isUnique": false,
1242 "concurrently": false,
1243 "method": "btree",
1244 "with": {}
1245 },
1246 "tool_source_id_idx": {
1247 "name": "tool_source_id_idx",
1248 "columns": [
1249 {
1250 "expression": "source_id",
1251 "isExpression": false,
1252 "asc": true,
1253 "nulls": "last"
1254 }
1255 ],
1256 "isUnique": false,
1257 "concurrently": false,
1258 "method": "btree",
1259 "with": {}
1260 },
1261 "tool_plugin_id_idx": {
1262 "name": "tool_plugin_id_idx",
1263 "columns": [
1264 {
1265 "expression": "plugin_id",
1266 "isExpression": false,
1267 "asc": true,
1268 "nulls": "last"
1269 }
1270 ],
1271 "isUnique": false,
1272 "concurrently": false,
1273 "method": "btree",
1274 "with": {}
1275 }
1276 },
1277 "foreignKeys": {},
1278 "compositePrimaryKeys": {
1279 "tool_scope_id_id_pk": {
1280 "name": "tool_scope_id_id_pk",
1281 "columns": ["scope_id", "id"]
1282 }
1283 },
1284 "uniqueConstraints": {},
1285 "policies": {},
1286 "checkConstraints": {},
1287 "isRLSEnabled": false
1288 },
1289 "public.workos_vault_metadata": {
1290 "name": "workos_vault_metadata",
1291 "schema": "",
1292 "columns": {
1293 "id": {
1294 "name": "id",
1295 "type": "text",
1296 "primaryKey": false,
1297 "notNull": true
1298 },
1299 "scope_id": {
1300 "name": "scope_id",
1301 "type": "text",
1302 "primaryKey": false,
1303 "notNull": true
1304 },
1305 "name": {
1306 "name": "name",
1307 "type": "text",
1308 "primaryKey": false,
1309 "notNull": true
1310 },
1311 "purpose": {
1312 "name": "purpose",
1313 "type": "text",
1314 "primaryKey": false,
1315 "notNull": false
1316 },
1317 "created_at": {
1318 "name": "created_at",
1319 "type": "timestamp",
1320 "primaryKey": false,
1321 "notNull": true
1322 }
1323 },
1324 "indexes": {
1325 "workos_vault_metadata_scope_id_idx": {
1326 "name": "workos_vault_metadata_scope_id_idx",
1327 "columns": [
1328 {
1329 "expression": "scope_id",
1330 "isExpression": false,
1331 "asc": true,
1332 "nulls": "last"
1333 }
1334 ],
1335 "isUnique": false,
1336 "concurrently": false,
1337 "method": "btree",
1338 "with": {}
1339 }
1340 },
1341 "foreignKeys": {},
1342 "compositePrimaryKeys": {
1343 "workos_vault_metadata_scope_id_id_pk": {
1344 "name": "workos_vault_metadata_scope_id_id_pk",
1345 "columns": ["scope_id", "id"]
1346 }
1347 },
1348 "uniqueConstraints": {},
1349 "policies": {},
1350 "checkConstraints": {},
1351 "isRLSEnabled": false
1352 }
1353 },
1354 "enums": {},
1355 "schemas": {},
1356 "sequences": {},
1357 "roles": {},
1358 "policies": {},
1359 "views": {},
1360 "_meta": {
1361 "columns": {},
1362 "schemas": {},
1363 "tables": {}
1364 }
1365}
apps/cloud/drizzle/meta/0004_snapshot.json+0−1487
@@ -1,1487 +0,0 @@
1{
2 "id": "626f3e78-1eda-40a0-b97f-2562e89205ec",
3 "prevId": "09d08343-8162-4e6b-91ab-ce0a9d6bad10",
4 "version": "7",
5 "dialect": "postgresql",
6 "tables": {
7 "public.accounts": {
8 "name": "accounts",
9 "schema": "",
10 "columns": {
11 "id": {
12 "name": "id",
13 "type": "text",
14 "primaryKey": true,
15 "notNull": true
16 },
17 "created_at": {
18 "name": "created_at",
19 "type": "timestamp with time zone",
20 "primaryKey": false,
21 "notNull": true,
22 "default": "now()"
23 }
24 },
25 "indexes": {},
26 "foreignKeys": {},
27 "compositePrimaryKeys": {},
28 "uniqueConstraints": {},
29 "policies": {},
30 "checkConstraints": {},
31 "isRLSEnabled": false
32 },
33 "public.memberships": {
34 "name": "memberships",
35 "schema": "",
36 "columns": {
37 "account_id": {
38 "name": "account_id",
39 "type": "text",
40 "primaryKey": false,
41 "notNull": true
42 },
43 "organization_id": {
44 "name": "organization_id",
45 "type": "text",
46 "primaryKey": false,
47 "notNull": true
48 },
49 "created_at": {
50 "name": "created_at",
51 "type": "timestamp with time zone",
52 "primaryKey": false,
53 "notNull": true,
54 "default": "now()"
55 }
56 },
57 "indexes": {},
58 "foreignKeys": {
59 "memberships_account_id_accounts_id_fk": {
60 "name": "memberships_account_id_accounts_id_fk",
61 "tableFrom": "memberships",
62 "tableTo": "accounts",
63 "columnsFrom": ["account_id"],
64 "columnsTo": ["id"],
65 "onDelete": "cascade",
66 "onUpdate": "no action"
67 },
68 "memberships_organization_id_organizations_id_fk": {
69 "name": "memberships_organization_id_organizations_id_fk",
70 "tableFrom": "memberships",
71 "tableTo": "organizations",
72 "columnsFrom": ["organization_id"],
73 "columnsTo": ["id"],
74 "onDelete": "cascade",
75 "onUpdate": "no action"
76 }
77 },
78 "compositePrimaryKeys": {
79 "memberships_account_id_organization_id_pk": {
80 "name": "memberships_account_id_organization_id_pk",
81 "columns": ["account_id", "organization_id"]
82 }
83 },
84 "uniqueConstraints": {},
85 "policies": {},
86 "checkConstraints": {},
87 "isRLSEnabled": false
88 },
89 "public.organizations": {
90 "name": "organizations",
91 "schema": "",
92 "columns": {
93 "id": {
94 "name": "id",
95 "type": "text",
96 "primaryKey": true,
97 "notNull": true
98 },
99 "name": {
100 "name": "name",
101 "type": "text",
102 "primaryKey": false,
103 "notNull": true
104 },
105 "created_at": {
106 "name": "created_at",
107 "type": "timestamp with time zone",
108 "primaryKey": false,
109 "notNull": true,
110 "default": "now()"
111 }
112 },
113 "indexes": {},
114 "foreignKeys": {},
115 "compositePrimaryKeys": {},
116 "uniqueConstraints": {},
117 "policies": {},
118 "checkConstraints": {},
119 "isRLSEnabled": false
120 },
121 "public.blob": {
122 "name": "blob",
123 "schema": "",
124 "columns": {
125 "namespace": {
126 "name": "namespace",
127 "type": "text",
128 "primaryKey": false,
129 "notNull": true
130 },
131 "key": {
132 "name": "key",
133 "type": "text",
134 "primaryKey": false,
135 "notNull": true
136 },
137 "value": {
138 "name": "value",
139 "type": "text",
140 "primaryKey": false,
141 "notNull": true
142 }
143 },
144 "indexes": {},
145 "foreignKeys": {},
146 "compositePrimaryKeys": {
147 "blob_namespace_key_pk": {
148 "name": "blob_namespace_key_pk",
149 "columns": ["namespace", "key"]
150 }
151 },
152 "uniqueConstraints": {},
153 "policies": {},
154 "checkConstraints": {},
155 "isRLSEnabled": false
156 },
157 "public.connection": {
158 "name": "connection",
159 "schema": "",
160 "columns": {
161 "id": {
162 "name": "id",
163 "type": "text",
164 "primaryKey": false,
165 "notNull": true
166 },
167 "scope_id": {
168 "name": "scope_id",
169 "type": "text",
170 "primaryKey": false,
171 "notNull": true
172 },
173 "provider": {
174 "name": "provider",
175 "type": "text",
176 "primaryKey": false,
177 "notNull": true
178 },
179 "kind": {
180 "name": "kind",
181 "type": "text",
182 "primaryKey": false,
183 "notNull": true
184 },
185 "identity_label": {
186 "name": "identity_label",
187 "type": "text",
188 "primaryKey": false,
189 "notNull": false
190 },
191 "access_token_secret_id": {
192 "name": "access_token_secret_id",
193 "type": "text",
194 "primaryKey": false,
195 "notNull": true
196 },
197 "refresh_token_secret_id": {
198 "name": "refresh_token_secret_id",
199 "type": "text",
200 "primaryKey": false,
201 "notNull": false
202 },
203 "expires_at": {
204 "name": "expires_at",
205 "type": "bigint",
206 "primaryKey": false,
207 "notNull": false
208 },
209 "scope": {
210 "name": "scope",
211 "type": "text",
212 "primaryKey": false,
213 "notNull": false
214 },
215 "provider_state": {
216 "name": "provider_state",
217 "type": "jsonb",
218 "primaryKey": false,
219 "notNull": false
220 },
221 "created_at": {
222 "name": "created_at",
223 "type": "timestamp",
224 "primaryKey": false,
225 "notNull": true
226 },
227 "updated_at": {
228 "name": "updated_at",
229 "type": "timestamp",
230 "primaryKey": false,
231 "notNull": true
232 }
233 },
234 "indexes": {
235 "connection_scope_id_idx": {
236 "name": "connection_scope_id_idx",
237 "columns": [
238 {
239 "expression": "scope_id",
240 "isExpression": false,
241 "asc": true,
242 "nulls": "last"
243 }
244 ],
245 "isUnique": false,
246 "concurrently": false,
247 "method": "btree",
248 "with": {}
249 },
250 "connection_provider_idx": {
251 "name": "connection_provider_idx",
252 "columns": [
253 {
254 "expression": "provider",
255 "isExpression": false,
256 "asc": true,
257 "nulls": "last"
258 }
259 ],
260 "isUnique": false,
261 "concurrently": false,
262 "method": "btree",
263 "with": {}
264 }
265 },
266 "foreignKeys": {},
267 "compositePrimaryKeys": {
268 "connection_scope_id_id_pk": {
269 "name": "connection_scope_id_id_pk",
270 "columns": ["scope_id", "id"]
271 }
272 },
273 "uniqueConstraints": {},
274 "policies": {},
275 "checkConstraints": {},
276 "isRLSEnabled": false
277 },
278 "public.definition": {
279 "name": "definition",
280 "schema": "",
281 "columns": {
282 "id": {
283 "name": "id",
284 "type": "text",
285 "primaryKey": false,
286 "notNull": true
287 },
288 "scope_id": {
289 "name": "scope_id",
290 "type": "text",
291 "primaryKey": false,
292 "notNull": true
293 },
294 "source_id": {
295 "name": "source_id",
296 "type": "text",
297 "primaryKey": false,
298 "notNull": true
299 },
300 "plugin_id": {
301 "name": "plugin_id",
302 "type": "text",
303 "primaryKey": false,
304 "notNull": true
305 },
306 "name": {
307 "name": "name",
308 "type": "text",
309 "primaryKey": false,
310 "notNull": true
311 },
312 "schema": {
313 "name": "schema",
314 "type": "jsonb",
315 "primaryKey": false,
316 "notNull": true
317 },
318 "created_at": {
319 "name": "created_at",
320 "type": "timestamp",
321 "primaryKey": false,
322 "notNull": true
323 }
324 },
325 "indexes": {
326 "definition_scope_id_idx": {
327 "name": "definition_scope_id_idx",
328 "columns": [
329 {
330 "expression": "scope_id",
331 "isExpression": false,
332 "asc": true,
333 "nulls": "last"
334 }
335 ],
336 "isUnique": false,
337 "concurrently": false,
338 "method": "btree",
339 "with": {}
340 },
341 "definition_source_id_idx": {
342 "name": "definition_source_id_idx",
343 "columns": [
344 {
345 "expression": "source_id",
346 "isExpression": false,
347 "asc": true,
348 "nulls": "last"
349 }
350 ],
351 "isUnique": false,
352 "concurrently": false,
353 "method": "btree",
354 "with": {}
355 },
356 "definition_plugin_id_idx": {
357 "name": "definition_plugin_id_idx",
358 "columns": [
359 {
360 "expression": "plugin_id",
361 "isExpression": false,
362 "asc": true,
363 "nulls": "last"
364 }
365 ],
366 "isUnique": false,
367 "concurrently": false,
368 "method": "btree",
369 "with": {}
370 }
371 },
372 "foreignKeys": {},
373 "compositePrimaryKeys": {
374 "definition_scope_id_id_pk": {
375 "name": "definition_scope_id_id_pk",
376 "columns": ["scope_id", "id"]
377 }
378 },
379 "uniqueConstraints": {},
380 "policies": {},
381 "checkConstraints": {},
382 "isRLSEnabled": false
383 },
384 "public.graphql_operation": {
385 "name": "graphql_operation",
386 "schema": "",
387 "columns": {
388 "id": {
389 "name": "id",
390 "type": "text",
391 "primaryKey": false,
392 "notNull": true
393 },
394 "scope_id": {
395 "name": "scope_id",
396 "type": "text",
397 "primaryKey": false,
398 "notNull": true
399 },
400 "source_id": {
401 "name": "source_id",
402 "type": "text",
403 "primaryKey": false,
404 "notNull": true
405 },
406 "binding": {
407 "name": "binding",
408 "type": "jsonb",
409 "primaryKey": false,
410 "notNull": true
411 }
412 },
413 "indexes": {
414 "graphql_operation_scope_id_idx": {
415 "name": "graphql_operation_scope_id_idx",
416 "columns": [
417 {
418 "expression": "scope_id",
419 "isExpression": false,
420 "asc": true,
421 "nulls": "last"
422 }
423 ],
424 "isUnique": false,
425 "concurrently": false,
426 "method": "btree",
427 "with": {}
428 },
429 "graphql_operation_source_id_idx": {
430 "name": "graphql_operation_source_id_idx",
431 "columns": [
432 {
433 "expression": "source_id",
434 "isExpression": false,
435 "asc": true,
436 "nulls": "last"
437 }
438 ],
439 "isUnique": false,
440 "concurrently": false,
441 "method": "btree",
442 "with": {}
443 }
444 },
445 "foreignKeys": {},
446 "compositePrimaryKeys": {
447 "graphql_operation_scope_id_id_pk": {
448 "name": "graphql_operation_scope_id_id_pk",
449 "columns": ["scope_id", "id"]
450 }
451 },
452 "uniqueConstraints": {},
453 "policies": {},
454 "checkConstraints": {},
455 "isRLSEnabled": false
456 },
457 "public.graphql_source": {
458 "name": "graphql_source",
459 "schema": "",
460 "columns": {
461 "id": {
462 "name": "id",
463 "type": "text",
464 "primaryKey": false,
465 "notNull": true
466 },
467 "scope_id": {
468 "name": "scope_id",
469 "type": "text",
470 "primaryKey": false,
471 "notNull": true
472 },
473 "name": {
474 "name": "name",
475 "type": "text",
476 "primaryKey": false,
477 "notNull": true
478 },
479 "endpoint": {
480 "name": "endpoint",
481 "type": "text",
482 "primaryKey": false,
483 "notNull": true
484 },
485 "headers": {
486 "name": "headers",
487 "type": "jsonb",
488 "primaryKey": false,
489 "notNull": false
490 }
491 },
492 "indexes": {
493 "graphql_source_scope_id_idx": {
494 "name": "graphql_source_scope_id_idx",
495 "columns": [
496 {
497 "expression": "scope_id",
498 "isExpression": false,
499 "asc": true,
500 "nulls": "last"
501 }
502 ],
503 "isUnique": false,
504 "concurrently": false,
505 "method": "btree",
506 "with": {}
507 }
508 },
509 "foreignKeys": {},
510 "compositePrimaryKeys": {
511 "graphql_source_scope_id_id_pk": {
512 "name": "graphql_source_scope_id_id_pk",
513 "columns": ["scope_id", "id"]
514 }
515 },
516 "uniqueConstraints": {},
517 "policies": {},
518 "checkConstraints": {},
519 "isRLSEnabled": false
520 },
521 "public.mcp_binding": {
522 "name": "mcp_binding",
523 "schema": "",
524 "columns": {
525 "id": {
526 "name": "id",
527 "type": "text",
528 "primaryKey": false,
529 "notNull": true
530 },
531 "scope_id": {
532 "name": "scope_id",
533 "type": "text",
534 "primaryKey": false,
535 "notNull": true
536 },
537 "source_id": {
538 "name": "source_id",
539 "type": "text",
540 "primaryKey": false,
541 "notNull": true
542 },
543 "binding": {
544 "name": "binding",
545 "type": "jsonb",
546 "primaryKey": false,
547 "notNull": true
548 },
549 "created_at": {
550 "name": "created_at",
551 "type": "timestamp",
552 "primaryKey": false,
553 "notNull": true
554 }
555 },
556 "indexes": {
557 "mcp_binding_scope_id_idx": {
558 "name": "mcp_binding_scope_id_idx",
559 "columns": [
560 {
561 "expression": "scope_id",
562 "isExpression": false,
563 "asc": true,
564 "nulls": "last"
565 }
566 ],
567 "isUnique": false,
568 "concurrently": false,
569 "method": "btree",
570 "with": {}
571 },
572 "mcp_binding_source_id_idx": {
573 "name": "mcp_binding_source_id_idx",
574 "columns": [
575 {
576 "expression": "source_id",
577 "isExpression": false,
578 "asc": true,
579 "nulls": "last"
580 }
581 ],
582 "isUnique": false,
583 "concurrently": false,
584 "method": "btree",
585 "with": {}
586 }
587 },
588 "foreignKeys": {},
589 "compositePrimaryKeys": {
590 "mcp_binding_scope_id_id_pk": {
591 "name": "mcp_binding_scope_id_id_pk",
592 "columns": ["scope_id", "id"]
593 }
594 },
595 "uniqueConstraints": {},
596 "policies": {},
597 "checkConstraints": {},
598 "isRLSEnabled": false
599 },
600 "public.mcp_oauth_session": {
601 "name": "mcp_oauth_session",
602 "schema": "",
603 "columns": {
604 "id": {
605 "name": "id",
606 "type": "text",
607 "primaryKey": false,
608 "notNull": true
609 },
610 "scope_id": {
611 "name": "scope_id",
612 "type": "text",
613 "primaryKey": false,
614 "notNull": true
615 },
616 "session": {
617 "name": "session",
618 "type": "jsonb",
619 "primaryKey": false,
620 "notNull": true
621 },
622 "expires_at": {
623 "name": "expires_at",
624 "type": "bigint",
625 "primaryKey": false,
626 "notNull": true
627 },
628 "created_at": {
629 "name": "created_at",
630 "type": "timestamp",
631 "primaryKey": false,
632 "notNull": true
633 }
634 },
635 "indexes": {
636 "mcp_oauth_session_scope_id_idx": {
637 "name": "mcp_oauth_session_scope_id_idx",
638 "columns": [
639 {
640 "expression": "scope_id",
641 "isExpression": false,
642 "asc": true,
643 "nulls": "last"
644 }
645 ],
646 "isUnique": false,
647 "concurrently": false,
648 "method": "btree",
649 "with": {}
650 }
651 },
652 "foreignKeys": {},
653 "compositePrimaryKeys": {
654 "mcp_oauth_session_scope_id_id_pk": {
655 "name": "mcp_oauth_session_scope_id_id_pk",
656 "columns": ["scope_id", "id"]
657 }
658 },
659 "uniqueConstraints": {},
660 "policies": {},
661 "checkConstraints": {},
662 "isRLSEnabled": false
663 },
664 "public.mcp_source": {
665 "name": "mcp_source",
666 "schema": "",
667 "columns": {
668 "id": {
669 "name": "id",
670 "type": "text",
671 "primaryKey": false,
672 "notNull": true
673 },
674 "scope_id": {
675 "name": "scope_id",
676 "type": "text",
677 "primaryKey": false,
678 "notNull": true
679 },
680 "name": {
681 "name": "name",
682 "type": "text",
683 "primaryKey": false,
684 "notNull": true
685 },
686 "config": {
687 "name": "config",
688 "type": "jsonb",
689 "primaryKey": false,
690 "notNull": true
691 },
692 "created_at": {
693 "name": "created_at",
694 "type": "timestamp",
695 "primaryKey": false,
696 "notNull": true
697 }
698 },
699 "indexes": {
700 "mcp_source_scope_id_idx": {
701 "name": "mcp_source_scope_id_idx",
702 "columns": [
703 {
704 "expression": "scope_id",
705 "isExpression": false,
706 "asc": true,
707 "nulls": "last"
708 }
709 ],
710 "isUnique": false,
711 "concurrently": false,
712 "method": "btree",
713 "with": {}
714 }
715 },
716 "foreignKeys": {},
717 "compositePrimaryKeys": {
718 "mcp_source_scope_id_id_pk": {
719 "name": "mcp_source_scope_id_id_pk",
720 "columns": ["scope_id", "id"]
721 }
722 },
723 "uniqueConstraints": {},
724 "policies": {},
725 "checkConstraints": {},
726 "isRLSEnabled": false
727 },
728 "public.openapi_oauth_session": {
729 "name": "openapi_oauth_session",
730 "schema": "",
731 "columns": {
732 "id": {
733 "name": "id",
734 "type": "text",
735 "primaryKey": false,
736 "notNull": true
737 },
738 "scope_id": {
739 "name": "scope_id",
740 "type": "text",
741 "primaryKey": false,
742 "notNull": true
743 },
744 "session": {
745 "name": "session",
746 "type": "jsonb",
747 "primaryKey": false,
748 "notNull": true
749 },
750 "created_at": {
751 "name": "created_at",
752 "type": "timestamp",
753 "primaryKey": false,
754 "notNull": true
755 }
756 },
757 "indexes": {
758 "openapi_oauth_session_scope_id_idx": {
759 "name": "openapi_oauth_session_scope_id_idx",
760 "columns": [
761 {
762 "expression": "scope_id",
763 "isExpression": false,
764 "asc": true,
765 "nulls": "last"
766 }
767 ],
768 "isUnique": false,
769 "concurrently": false,
770 "method": "btree",
771 "with": {}
772 }
773 },
774 "foreignKeys": {},
775 "compositePrimaryKeys": {
776 "openapi_oauth_session_scope_id_id_pk": {
777 "name": "openapi_oauth_session_scope_id_id_pk",
778 "columns": ["scope_id", "id"]
779 }
780 },
781 "uniqueConstraints": {},
782 "policies": {},
783 "checkConstraints": {},
784 "isRLSEnabled": false
785 },
786 "public.openapi_operation": {
787 "name": "openapi_operation",
788 "schema": "",
789 "columns": {
790 "id": {
791 "name": "id",
792 "type": "text",
793 "primaryKey": false,
794 "notNull": true
795 },
796 "scope_id": {
797 "name": "scope_id",
798 "type": "text",
799 "primaryKey": false,
800 "notNull": true
801 },
802 "source_id": {
803 "name": "source_id",
804 "type": "text",
805 "primaryKey": false,
806 "notNull": true
807 },
808 "binding": {
809 "name": "binding",
810 "type": "jsonb",
811 "primaryKey": false,
812 "notNull": true
813 }
814 },
815 "indexes": {
816 "openapi_operation_scope_id_idx": {
817 "name": "openapi_operation_scope_id_idx",
818 "columns": [
819 {
820 "expression": "scope_id",
821 "isExpression": false,
822 "asc": true,
823 "nulls": "last"
824 }
825 ],
826 "isUnique": false,
827 "concurrently": false,
828 "method": "btree",
829 "with": {}
830 },
831 "openapi_operation_source_id_idx": {
832 "name": "openapi_operation_source_id_idx",
833 "columns": [
834 {
835 "expression": "source_id",
836 "isExpression": false,
837 "asc": true,
838 "nulls": "last"
839 }
840 ],
841 "isUnique": false,
842 "concurrently": false,
843 "method": "btree",
844 "with": {}
845 }
846 },
847 "foreignKeys": {},
848 "compositePrimaryKeys": {
849 "openapi_operation_scope_id_id_pk": {
850 "name": "openapi_operation_scope_id_id_pk",
851 "columns": ["scope_id", "id"]
852 }
853 },
854 "uniqueConstraints": {},
855 "policies": {},
856 "checkConstraints": {},
857 "isRLSEnabled": false
858 },
859 "public.openapi_source": {
860 "name": "openapi_source",
861 "schema": "",
862 "columns": {
863 "id": {
864 "name": "id",
865 "type": "text",
866 "primaryKey": false,
867 "notNull": true
868 },
869 "scope_id": {
870 "name": "scope_id",
871 "type": "text",
872 "primaryKey": false,
873 "notNull": true
874 },
875 "name": {
876 "name": "name",
877 "type": "text",
878 "primaryKey": false,
879 "notNull": true
880 },
881 "spec": {
882 "name": "spec",
883 "type": "text",
884 "primaryKey": false,
885 "notNull": true
886 },
887 "source_url": {
888 "name": "source_url",
889 "type": "text",
890 "primaryKey": false,
891 "notNull": false
892 },
893 "base_url": {
894 "name": "base_url",
895 "type": "text",
896 "primaryKey": false,
897 "notNull": false
898 },
899 "headers": {
900 "name": "headers",
901 "type": "jsonb",
902 "primaryKey": false,
903 "notNull": false
904 },
905 "oauth2": {
906 "name": "oauth2",
907 "type": "jsonb",
908 "primaryKey": false,
909 "notNull": false
910 },
911 "invocation_config": {
912 "name": "invocation_config",
913 "type": "jsonb",
914 "primaryKey": false,
915 "notNull": true
916 }
917 },
918 "indexes": {
919 "openapi_source_scope_id_idx": {
920 "name": "openapi_source_scope_id_idx",
921 "columns": [
922 {
923 "expression": "scope_id",
924 "isExpression": false,
925 "asc": true,
926 "nulls": "last"
927 }
928 ],
929 "isUnique": false,
930 "concurrently": false,
931 "method": "btree",
932 "with": {}
933 }
934 },
935 "foreignKeys": {},
936 "compositePrimaryKeys": {
937 "openapi_source_scope_id_id_pk": {
938 "name": "openapi_source_scope_id_id_pk",
939 "columns": ["scope_id", "id"]
940 }
941 },
942 "uniqueConstraints": {},
943 "policies": {},
944 "checkConstraints": {},
945 "isRLSEnabled": false
946 },
947 "public.secret": {
948 "name": "secret",
949 "schema": "",
950 "columns": {
951 "id": {
952 "name": "id",
953 "type": "text",
954 "primaryKey": false,
955 "notNull": true
956 },
957 "scope_id": {
958 "name": "scope_id",
959 "type": "text",
960 "primaryKey": false,
961 "notNull": true
962 },
963 "name": {
964 "name": "name",
965 "type": "text",
966 "primaryKey": false,
967 "notNull": true
968 },
969 "provider": {
970 "name": "provider",
971 "type": "text",
972 "primaryKey": false,
973 "notNull": true
974 },
975 "owned_by_connection_id": {
976 "name": "owned_by_connection_id",
977 "type": "text",
978 "primaryKey": false,
979 "notNull": false
980 },
981 "created_at": {
982 "name": "created_at",
983 "type": "timestamp",
984 "primaryKey": false,
985 "notNull": true
986 }
987 },
988 "indexes": {
989 "secret_scope_id_idx": {
990 "name": "secret_scope_id_idx",
991 "columns": [
992 {
993 "expression": "scope_id",
994 "isExpression": false,
995 "asc": true,
996 "nulls": "last"
997 }
998 ],
999 "isUnique": false,
1000 "concurrently": false,
1001 "method": "btree",
1002 "with": {}
1003 },
1004 "secret_provider_idx": {
1005 "name": "secret_provider_idx",
1006 "columns": [
1007 {
1008 "expression": "provider",
1009 "isExpression": false,
1010 "asc": true,
1011 "nulls": "last"
1012 }
1013 ],
1014 "isUnique": false,
1015 "concurrently": false,
1016 "method": "btree",
1017 "with": {}
1018 },
1019 "secret_owned_by_connection_id_idx": {
1020 "name": "secret_owned_by_connection_id_idx",
1021 "columns": [
1022 {
1023 "expression": "owned_by_connection_id",
1024 "isExpression": false,
1025 "asc": true,
1026 "nulls": "last"
1027 }
1028 ],
1029 "isUnique": false,
1030 "concurrently": false,
1031 "method": "btree",
1032 "with": {}
1033 }
1034 },
1035 "foreignKeys": {},
1036 "compositePrimaryKeys": {
1037 "secret_scope_id_id_pk": {
1038 "name": "secret_scope_id_id_pk",
1039 "columns": ["scope_id", "id"]
1040 }
1041 },
1042 "uniqueConstraints": {},
1043 "policies": {},
1044 "checkConstraints": {},
1045 "isRLSEnabled": false
1046 },
1047 "public.source": {
1048 "name": "source",
1049 "schema": "",
1050 "columns": {
1051 "id": {
1052 "name": "id",
1053 "type": "text",
1054 "primaryKey": false,
1055 "notNull": true
1056 },
1057 "scope_id": {
1058 "name": "scope_id",
1059 "type": "text",
1060 "primaryKey": false,
1061 "notNull": true
1062 },
1063 "plugin_id": {
1064 "name": "plugin_id",
1065 "type": "text",
1066 "primaryKey": false,
1067 "notNull": true
1068 },
1069 "kind": {
1070 "name": "kind",
1071 "type": "text",
1072 "primaryKey": false,
1073 "notNull": true
1074 },
1075 "name": {
1076 "name": "name",
1077 "type": "text",
1078 "primaryKey": false,
1079 "notNull": true
1080 },
1081 "url": {
1082 "name": "url",
1083 "type": "text",
1084 "primaryKey": false,
1085 "notNull": false
1086 },
1087 "can_remove": {
1088 "name": "can_remove",
1089 "type": "boolean",
1090 "primaryKey": false,
1091 "notNull": true,
1092 "default": true
1093 },
1094 "can_refresh": {
1095 "name": "can_refresh",
1096 "type": "boolean",
1097 "primaryKey": false,
1098 "notNull": true,
1099 "default": false
1100 },
1101 "can_edit": {
1102 "name": "can_edit",
1103 "type": "boolean",
1104 "primaryKey": false,
1105 "notNull": true,
1106 "default": false
1107 },
1108 "created_at": {
1109 "name": "created_at",
1110 "type": "timestamp",
1111 "primaryKey": false,
1112 "notNull": true
1113 },
1114 "updated_at": {
1115 "name": "updated_at",
1116 "type": "timestamp",
1117 "primaryKey": false,
1118 "notNull": true
1119 }
1120 },
1121 "indexes": {
1122 "source_scope_id_idx": {
1123 "name": "source_scope_id_idx",
1124 "columns": [
1125 {
1126 "expression": "scope_id",
1127 "isExpression": false,
1128 "asc": true,
1129 "nulls": "last"
1130 }
1131 ],
1132 "isUnique": false,
1133 "concurrently": false,
1134 "method": "btree",
1135 "with": {}
1136 },
1137 "source_plugin_id_idx": {
1138 "name": "source_plugin_id_idx",
1139 "columns": [
1140 {
1141 "expression": "plugin_id",
1142 "isExpression": false,
1143 "asc": true,
1144 "nulls": "last"
1145 }
1146 ],
1147 "isUnique": false,
1148 "concurrently": false,
1149 "method": "btree",
1150 "with": {}
1151 }
1152 },
1153 "foreignKeys": {},
1154 "compositePrimaryKeys": {
1155 "source_scope_id_id_pk": {
1156 "name": "source_scope_id_id_pk",
1157 "columns": ["scope_id", "id"]
1158 }
1159 },
1160 "uniqueConstraints": {},
1161 "policies": {},
1162 "checkConstraints": {},
1163 "isRLSEnabled": false
1164 },
1165 "public.tool": {
1166 "name": "tool",
1167 "schema": "",
1168 "columns": {
1169 "id": {
1170 "name": "id",
1171 "type": "text",
1172 "primaryKey": false,
1173 "notNull": true
1174 },
1175 "scope_id": {
1176 "name": "scope_id",
1177 "type": "text",
1178 "primaryKey": false,
1179 "notNull": true
1180 },
1181 "source_id": {
1182 "name": "source_id",
1183 "type": "text",
1184 "primaryKey": false,
1185 "notNull": true
1186 },
1187 "plugin_id": {
1188 "name": "plugin_id",
1189 "type": "text",
1190 "primaryKey": false,
1191 "notNull": true
1192 },
1193 "name": {
1194 "name": "name",
1195 "type": "text",
1196 "primaryKey": false,
1197 "notNull": true
1198 },
1199 "description": {
1200 "name": "description",
1201 "type": "text",
1202 "primaryKey": false,
1203 "notNull": true
1204 },
1205 "input_schema": {
1206 "name": "input_schema",
1207 "type": "jsonb",
1208 "primaryKey": false,
1209 "notNull": false
1210 },
1211 "output_schema": {
1212 "name": "output_schema",
1213 "type": "jsonb",
1214 "primaryKey": false,
1215 "notNull": false
1216 },
1217 "created_at": {
1218 "name": "created_at",
1219 "type": "timestamp",
1220 "primaryKey": false,
1221 "notNull": true
1222 },
1223 "updated_at": {
1224 "name": "updated_at",
1225 "type": "timestamp",
1226 "primaryKey": false,
1227 "notNull": true
1228 }
1229 },
1230 "indexes": {
1231 "tool_scope_id_idx": {
1232 "name": "tool_scope_id_idx",
1233 "columns": [
1234 {
1235 "expression": "scope_id",
1236 "isExpression": false,
1237 "asc": true,
1238 "nulls": "last"
1239 }
1240 ],
1241 "isUnique": false,
1242 "concurrently": false,
1243 "method": "btree",
1244 "with": {}
1245 },
1246 "tool_source_id_idx": {
1247 "name": "tool_source_id_idx",
1248 "columns": [
1249 {
1250 "expression": "source_id",
1251 "isExpression": false,
1252 "asc": true,
1253 "nulls": "last"
1254 }
1255 ],
1256 "isUnique": false,
1257 "concurrently": false,
1258 "method": "btree",
1259 "with": {}
1260 },
1261 "tool_plugin_id_idx": {
1262 "name": "tool_plugin_id_idx",
1263 "columns": [
1264 {
1265 "expression": "plugin_id",
1266 "isExpression": false,
1267 "asc": true,
1268 "nulls": "last"
1269 }
1270 ],
1271 "isUnique": false,
1272 "concurrently": false,
1273 "method": "btree",
1274 "with": {}
1275 }
1276 },
1277 "foreignKeys": {},
1278 "compositePrimaryKeys": {
1279 "tool_scope_id_id_pk": {
1280 "name": "tool_scope_id_id_pk",
1281 "columns": ["scope_id", "id"]
1282 }
1283 },
1284 "uniqueConstraints": {},
1285 "policies": {},
1286 "checkConstraints": {},
1287 "isRLSEnabled": false
1288 },
1289 "public.workos_vault_metadata": {
1290 "name": "workos_vault_metadata",
1291 "schema": "",
1292 "columns": {
1293 "id": {
1294 "name": "id",
1295 "type": "text",
1296 "primaryKey": false,
1297 "notNull": true
1298 },
1299 "scope_id": {
1300 "name": "scope_id",
1301 "type": "text",
1302 "primaryKey": false,
1303 "notNull": true
1304 },
1305 "name": {
1306 "name": "name",
1307 "type": "text",
1308 "primaryKey": false,
1309 "notNull": true
1310 },
1311 "purpose": {
1312 "name": "purpose",
1313 "type": "text",
1314 "primaryKey": false,
1315 "notNull": false
1316 },
1317 "created_at": {
1318 "name": "created_at",
1319 "type": "timestamp",
1320 "primaryKey": false,
1321 "notNull": true
1322 }
1323 },
1324 "indexes": {
1325 "workos_vault_metadata_scope_id_idx": {
1326 "name": "workos_vault_metadata_scope_id_idx",
1327 "columns": [
1328 {
1329 "expression": "scope_id",
1330 "isExpression": false,
1331 "asc": true,
1332 "nulls": "last"
1333 }
1334 ],
1335 "isUnique": false,
1336 "concurrently": false,
1337 "method": "btree",
1338 "with": {}
1339 }
1340 },
1341 "foreignKeys": {},
1342 "compositePrimaryKeys": {
1343 "workos_vault_metadata_scope_id_id_pk": {
1344 "name": "workos_vault_metadata_scope_id_id_pk",
1345 "columns": ["scope_id", "id"]
1346 }
1347 },
1348 "uniqueConstraints": {},
1349 "policies": {},
1350 "checkConstraints": {},
1351 "isRLSEnabled": false
1352 },
1353 "public.openapi_source_binding": {
1354 "name": "openapi_source_binding",
1355 "schema": "",
1356 "columns": {
1357 "id": {
1358 "name": "id",
1359 "type": "text",
1360 "primaryKey": true,
1361 "notNull": true
1362 },
1363 "source_id": {
1364 "name": "source_id",
1365 "type": "text",
1366 "primaryKey": false,
1367 "notNull": true
1368 },
1369 "source_scope_id": {
1370 "name": "source_scope_id",
1371 "type": "text",
1372 "primaryKey": false,
1373 "notNull": true
1374 },
1375 "target_scope_id": {
1376 "name": "target_scope_id",
1377 "type": "text",
1378 "primaryKey": false,
1379 "notNull": true
1380 },
1381 "slot": {
1382 "name": "slot",
1383 "type": "text",
1384 "primaryKey": false,
1385 "notNull": true
1386 },
1387 "value": {
1388 "name": "value",
1389 "type": "jsonb",
1390 "primaryKey": false,
1391 "notNull": true
1392 },
1393 "created_at": {
1394 "name": "created_at",
1395 "type": "timestamp",
1396 "primaryKey": false,
1397 "notNull": true
1398 },
1399 "updated_at": {
1400 "name": "updated_at",
1401 "type": "timestamp",
1402 "primaryKey": false,
1403 "notNull": true
1404 }
1405 },
1406 "indexes": {
1407 "openapi_source_binding_source_id_idx": {
1408 "name": "openapi_source_binding_source_id_idx",
1409 "columns": [
1410 {
1411 "expression": "source_id",
1412 "isExpression": false,
1413 "asc": true,
1414 "nulls": "last"
1415 }
1416 ],
1417 "isUnique": false,
1418 "concurrently": false,
1419 "method": "btree",
1420 "with": {}
1421 },
1422 "openapi_source_binding_source_scope_id_idx": {
1423 "name": "openapi_source_binding_source_scope_id_idx",
1424 "columns": [
1425 {
1426 "expression": "source_scope_id",
1427 "isExpression": false,
1428 "asc": true,
1429 "nulls": "last"
1430 }
1431 ],
1432 "isUnique": false,
1433 "concurrently": false,
1434 "method": "btree",
1435 "with": {}
1436 },
1437 "openapi_source_binding_target_scope_id_idx": {
1438 "name": "openapi_source_binding_target_scope_id_idx",
1439 "columns": [
1440 {
1441 "expression": "target_scope_id",
1442 "isExpression": false,
1443 "asc": true,
1444 "nulls": "last"
1445 }
1446 ],
1447 "isUnique": false,
1448 "concurrently": false,
1449 "method": "btree",
1450 "with": {}
1451 },
1452 "openapi_source_binding_slot_idx": {
1453 "name": "openapi_source_binding_slot_idx",
1454 "columns": [
1455 {
1456 "expression": "slot",
1457 "isExpression": false,
1458 "asc": true,
1459 "nulls": "last"
1460 }
1461 ],
1462 "isUnique": false,
1463 "concurrently": false,
1464 "method": "btree",
1465 "with": {}
1466 }
1467 },
1468 "foreignKeys": {},
1469 "compositePrimaryKeys": {},
1470 "uniqueConstraints": {},
1471 "policies": {},
1472 "checkConstraints": {},
1473 "isRLSEnabled": false
1474 }
1475 },
1476 "enums": {},
1477 "schemas": {},
1478 "sequences": {},
1479 "roles": {},
1480 "policies": {},
1481 "views": {},
1482 "_meta": {
1483 "columns": {},
1484 "schemas": {},
1485 "tables": {}
1486 }
1487}
apps/cloud/drizzle/meta/0005_snapshot.json+0−1481
@@ -1,1481 +0,0 @@
1{
2 "id": "1d422fe0-aa63-4931-80dc-02816df3c4d2",
3 "prevId": "626f3e78-1eda-40a0-b97f-2562e89205ec",
4 "version": "7",
5 "dialect": "postgresql",
6 "tables": {
7 "public.accounts": {
8 "name": "accounts",
9 "schema": "",
10 "columns": {
11 "id": {
12 "name": "id",
13 "type": "text",
14 "primaryKey": true,
15 "notNull": true
16 },
17 "created_at": {
18 "name": "created_at",
19 "type": "timestamp with time zone",
20 "primaryKey": false,
21 "notNull": true,
22 "default": "now()"
23 }
24 },
25 "indexes": {},
26 "foreignKeys": {},
27 "compositePrimaryKeys": {},
28 "uniqueConstraints": {},
29 "policies": {},
30 "checkConstraints": {},
31 "isRLSEnabled": false
32 },
33 "public.memberships": {
34 "name": "memberships",
35 "schema": "",
36 "columns": {
37 "account_id": {
38 "name": "account_id",
39 "type": "text",
40 "primaryKey": false,
41 "notNull": true
42 },
43 "organization_id": {
44 "name": "organization_id",
45 "type": "text",
46 "primaryKey": false,
47 "notNull": true
48 },
49 "created_at": {
50 "name": "created_at",
51 "type": "timestamp with time zone",
52 "primaryKey": false,
53 "notNull": true,
54 "default": "now()"
55 }
56 },
57 "indexes": {},
58 "foreignKeys": {
59 "memberships_account_id_accounts_id_fk": {
60 "name": "memberships_account_id_accounts_id_fk",
61 "tableFrom": "memberships",
62 "tableTo": "accounts",
63 "columnsFrom": ["account_id"],
64 "columnsTo": ["id"],
65 "onDelete": "cascade",
66 "onUpdate": "no action"
67 },
68 "memberships_organization_id_organizations_id_fk": {
69 "name": "memberships_organization_id_organizations_id_fk",
70 "tableFrom": "memberships",
71 "tableTo": "organizations",
72 "columnsFrom": ["organization_id"],
73 "columnsTo": ["id"],
74 "onDelete": "cascade",
75 "onUpdate": "no action"
76 }
77 },
78 "compositePrimaryKeys": {
79 "memberships_account_id_organization_id_pk": {
80 "name": "memberships_account_id_organization_id_pk",
81 "columns": ["account_id", "organization_id"]
82 }
83 },
84 "uniqueConstraints": {},
85 "policies": {},
86 "checkConstraints": {},
87 "isRLSEnabled": false
88 },
89 "public.organizations": {
90 "name": "organizations",
91 "schema": "",
92 "columns": {
93 "id": {
94 "name": "id",
95 "type": "text",
96 "primaryKey": true,
97 "notNull": true
98 },
99 "name": {
100 "name": "name",
101 "type": "text",
102 "primaryKey": false,
103 "notNull": true
104 },
105 "created_at": {
106 "name": "created_at",
107 "type": "timestamp with time zone",
108 "primaryKey": false,
109 "notNull": true,
110 "default": "now()"
111 }
112 },
113 "indexes": {},
114 "foreignKeys": {},
115 "compositePrimaryKeys": {},
116 "uniqueConstraints": {},
117 "policies": {},
118 "checkConstraints": {},
119 "isRLSEnabled": false
120 },
121 "public.blob": {
122 "name": "blob",
123 "schema": "",
124 "columns": {
125 "namespace": {
126 "name": "namespace",
127 "type": "text",
128 "primaryKey": false,
129 "notNull": true
130 },
131 "key": {
132 "name": "key",
133 "type": "text",
134 "primaryKey": false,
135 "notNull": true
136 },
137 "value": {
138 "name": "value",
139 "type": "text",
140 "primaryKey": false,
141 "notNull": true
142 }
143 },
144 "indexes": {},
145 "foreignKeys": {},
146 "compositePrimaryKeys": {
147 "blob_namespace_key_pk": {
148 "name": "blob_namespace_key_pk",
149 "columns": ["namespace", "key"]
150 }
151 },
152 "uniqueConstraints": {},
153 "policies": {},
154 "checkConstraints": {},
155 "isRLSEnabled": false
156 },
157 "public.connection": {
158 "name": "connection",
159 "schema": "",
160 "columns": {
161 "id": {
162 "name": "id",
163 "type": "text",
164 "primaryKey": false,
165 "notNull": true
166 },
167 "scope_id": {
168 "name": "scope_id",
169 "type": "text",
170 "primaryKey": false,
171 "notNull": true
172 },
173 "provider": {
174 "name": "provider",
175 "type": "text",
176 "primaryKey": false,
177 "notNull": true
178 },
179 "identity_label": {
180 "name": "identity_label",
181 "type": "text",
182 "primaryKey": false,
183 "notNull": false
184 },
185 "access_token_secret_id": {
186 "name": "access_token_secret_id",
187 "type": "text",
188 "primaryKey": false,
189 "notNull": true
190 },
191 "refresh_token_secret_id": {
192 "name": "refresh_token_secret_id",
193 "type": "text",
194 "primaryKey": false,
195 "notNull": false
196 },
197 "expires_at": {
198 "name": "expires_at",
199 "type": "bigint",
200 "primaryKey": false,
201 "notNull": false
202 },
203 "scope": {
204 "name": "scope",
205 "type": "text",
206 "primaryKey": false,
207 "notNull": false
208 },
209 "provider_state": {
210 "name": "provider_state",
211 "type": "jsonb",
212 "primaryKey": false,
213 "notNull": false
214 },
215 "created_at": {
216 "name": "created_at",
217 "type": "timestamp",
218 "primaryKey": false,
219 "notNull": true
220 },
221 "updated_at": {
222 "name": "updated_at",
223 "type": "timestamp",
224 "primaryKey": false,
225 "notNull": true
226 }
227 },
228 "indexes": {
229 "connection_scope_id_idx": {
230 "name": "connection_scope_id_idx",
231 "columns": [
232 {
233 "expression": "scope_id",
234 "isExpression": false,
235 "asc": true,
236 "nulls": "last"
237 }
238 ],
239 "isUnique": false,
240 "concurrently": false,
241 "method": "btree",
242 "with": {}
243 },
244 "connection_provider_idx": {
245 "name": "connection_provider_idx",
246 "columns": [
247 {
248 "expression": "provider",
249 "isExpression": false,
250 "asc": true,
251 "nulls": "last"
252 }
253 ],
254 "isUnique": false,
255 "concurrently": false,
256 "method": "btree",
257 "with": {}
258 }
259 },
260 "foreignKeys": {},
261 "compositePrimaryKeys": {
262 "connection_scope_id_id_pk": {
263 "name": "connection_scope_id_id_pk",
264 "columns": ["scope_id", "id"]
265 }
266 },
267 "uniqueConstraints": {},
268 "policies": {},
269 "checkConstraints": {},
270 "isRLSEnabled": false
271 },
272 "public.definition": {
273 "name": "definition",
274 "schema": "",
275 "columns": {
276 "id": {
277 "name": "id",
278 "type": "text",
279 "primaryKey": false,
280 "notNull": true
281 },
282 "scope_id": {
283 "name": "scope_id",
284 "type": "text",
285 "primaryKey": false,
286 "notNull": true
287 },
288 "source_id": {
289 "name": "source_id",
290 "type": "text",
291 "primaryKey": false,
292 "notNull": true
293 },
294 "plugin_id": {
295 "name": "plugin_id",
296 "type": "text",
297 "primaryKey": false,
298 "notNull": true
299 },
300 "name": {
301 "name": "name",
302 "type": "text",
303 "primaryKey": false,
304 "notNull": true
305 },
306 "schema": {
307 "name": "schema",
308 "type": "jsonb",
309 "primaryKey": false,
310 "notNull": true
311 },
312 "created_at": {
313 "name": "created_at",
314 "type": "timestamp",
315 "primaryKey": false,
316 "notNull": true
317 }
318 },
319 "indexes": {
320 "definition_scope_id_idx": {
321 "name": "definition_scope_id_idx",
322 "columns": [
323 {
324 "expression": "scope_id",
325 "isExpression": false,
326 "asc": true,
327 "nulls": "last"
328 }
329 ],
330 "isUnique": false,
331 "concurrently": false,
332 "method": "btree",
333 "with": {}
334 },
335 "definition_source_id_idx": {
336 "name": "definition_source_id_idx",
337 "columns": [
338 {
339 "expression": "source_id",
340 "isExpression": false,
341 "asc": true,
342 "nulls": "last"
343 }
344 ],
345 "isUnique": false,
346 "concurrently": false,
347 "method": "btree",
348 "with": {}
349 },
350 "definition_plugin_id_idx": {
351 "name": "definition_plugin_id_idx",
352 "columns": [
353 {
354 "expression": "plugin_id",
355 "isExpression": false,
356 "asc": true,
357 "nulls": "last"
358 }
359 ],
360 "isUnique": false,
361 "concurrently": false,
362 "method": "btree",
363 "with": {}
364 }
365 },
366 "foreignKeys": {},
367 "compositePrimaryKeys": {
368 "definition_scope_id_id_pk": {
369 "name": "definition_scope_id_id_pk",
370 "columns": ["scope_id", "id"]
371 }
372 },
373 "uniqueConstraints": {},
374 "policies": {},
375 "checkConstraints": {},
376 "isRLSEnabled": false
377 },
378 "public.graphql_operation": {
379 "name": "graphql_operation",
380 "schema": "",
381 "columns": {
382 "id": {
383 "name": "id",
384 "type": "text",
385 "primaryKey": false,
386 "notNull": true
387 },
388 "scope_id": {
389 "name": "scope_id",
390 "type": "text",
391 "primaryKey": false,
392 "notNull": true
393 },
394 "source_id": {
395 "name": "source_id",
396 "type": "text",
397 "primaryKey": false,
398 "notNull": true
399 },
400 "binding": {
401 "name": "binding",
402 "type": "jsonb",
403 "primaryKey": false,
404 "notNull": true
405 }
406 },
407 "indexes": {
408 "graphql_operation_scope_id_idx": {
409 "name": "graphql_operation_scope_id_idx",
410 "columns": [
411 {
412 "expression": "scope_id",
413 "isExpression": false,
414 "asc": true,
415 "nulls": "last"
416 }
417 ],
418 "isUnique": false,
419 "concurrently": false,
420 "method": "btree",
421 "with": {}
422 },
423 "graphql_operation_source_id_idx": {
424 "name": "graphql_operation_source_id_idx",
425 "columns": [
426 {
427 "expression": "source_id",
428 "isExpression": false,
429 "asc": true,
430 "nulls": "last"
431 }
432 ],
433 "isUnique": false,
434 "concurrently": false,
435 "method": "btree",
436 "with": {}
437 }
438 },
439 "foreignKeys": {},
440 "compositePrimaryKeys": {
441 "graphql_operation_scope_id_id_pk": {
442 "name": "graphql_operation_scope_id_id_pk",
443 "columns": ["scope_id", "id"]
444 }
445 },
446 "uniqueConstraints": {},
447 "policies": {},
448 "checkConstraints": {},
449 "isRLSEnabled": false
450 },
451 "public.graphql_source": {
452 "name": "graphql_source",
453 "schema": "",
454 "columns": {
455 "id": {
456 "name": "id",
457 "type": "text",
458 "primaryKey": false,
459 "notNull": true
460 },
461 "scope_id": {
462 "name": "scope_id",
463 "type": "text",
464 "primaryKey": false,
465 "notNull": true
466 },
467 "name": {
468 "name": "name",
469 "type": "text",
470 "primaryKey": false,
471 "notNull": true
472 },
473 "endpoint": {
474 "name": "endpoint",
475 "type": "text",
476 "primaryKey": false,
477 "notNull": true
478 },
479 "headers": {
480 "name": "headers",
481 "type": "jsonb",
482 "primaryKey": false,
483 "notNull": false
484 }
485 },
486 "indexes": {
487 "graphql_source_scope_id_idx": {
488 "name": "graphql_source_scope_id_idx",
489 "columns": [
490 {
491 "expression": "scope_id",
492 "isExpression": false,
493 "asc": true,
494 "nulls": "last"
495 }
496 ],
497 "isUnique": false,
498 "concurrently": false,
499 "method": "btree",
500 "with": {}
501 }
502 },
503 "foreignKeys": {},
504 "compositePrimaryKeys": {
505 "graphql_source_scope_id_id_pk": {
506 "name": "graphql_source_scope_id_id_pk",
507 "columns": ["scope_id", "id"]
508 }
509 },
510 "uniqueConstraints": {},
511 "policies": {},
512 "checkConstraints": {},
513 "isRLSEnabled": false
514 },
515 "public.mcp_binding": {
516 "name": "mcp_binding",
517 "schema": "",
518 "columns": {
519 "id": {
520 "name": "id",
521 "type": "text",
522 "primaryKey": false,
523 "notNull": true
524 },
525 "scope_id": {
526 "name": "scope_id",
527 "type": "text",
528 "primaryKey": false,
529 "notNull": true
530 },
531 "source_id": {
532 "name": "source_id",
533 "type": "text",
534 "primaryKey": false,
535 "notNull": true
536 },
537 "binding": {
538 "name": "binding",
539 "type": "jsonb",
540 "primaryKey": false,
541 "notNull": true
542 },
543 "created_at": {
544 "name": "created_at",
545 "type": "timestamp",
546 "primaryKey": false,
547 "notNull": true
548 }
549 },
550 "indexes": {
551 "mcp_binding_scope_id_idx": {
552 "name": "mcp_binding_scope_id_idx",
553 "columns": [
554 {
555 "expression": "scope_id",
556 "isExpression": false,
557 "asc": true,
558 "nulls": "last"
559 }
560 ],
561 "isUnique": false,
562 "concurrently": false,
563 "method": "btree",
564 "with": {}
565 },
566 "mcp_binding_source_id_idx": {
567 "name": "mcp_binding_source_id_idx",
568 "columns": [
569 {
570 "expression": "source_id",
571 "isExpression": false,
572 "asc": true,
573 "nulls": "last"
574 }
575 ],
576 "isUnique": false,
577 "concurrently": false,
578 "method": "btree",
579 "with": {}
580 }
581 },
582 "foreignKeys": {},
583 "compositePrimaryKeys": {
584 "mcp_binding_scope_id_id_pk": {
585 "name": "mcp_binding_scope_id_id_pk",
586 "columns": ["scope_id", "id"]
587 }
588 },
589 "uniqueConstraints": {},
590 "policies": {},
591 "checkConstraints": {},
592 "isRLSEnabled": false
593 },
594 "public.mcp_oauth_session": {
595 "name": "mcp_oauth_session",
596 "schema": "",
597 "columns": {
598 "id": {
599 "name": "id",
600 "type": "text",
601 "primaryKey": false,
602 "notNull": true
603 },
604 "scope_id": {
605 "name": "scope_id",
606 "type": "text",
607 "primaryKey": false,
608 "notNull": true
609 },
610 "session": {
611 "name": "session",
612 "type": "jsonb",
613 "primaryKey": false,
614 "notNull": true
615 },
616 "expires_at": {
617 "name": "expires_at",
618 "type": "bigint",
619 "primaryKey": false,
620 "notNull": true
621 },
622 "created_at": {
623 "name": "created_at",
624 "type": "timestamp",
625 "primaryKey": false,
626 "notNull": true
627 }
628 },
629 "indexes": {
630 "mcp_oauth_session_scope_id_idx": {
631 "name": "mcp_oauth_session_scope_id_idx",
632 "columns": [
633 {
634 "expression": "scope_id",
635 "isExpression": false,
636 "asc": true,
637 "nulls": "last"
638 }
639 ],
640 "isUnique": false,
641 "concurrently": false,
642 "method": "btree",
643 "with": {}
644 }
645 },
646 "foreignKeys": {},
647 "compositePrimaryKeys": {
648 "mcp_oauth_session_scope_id_id_pk": {
649 "name": "mcp_oauth_session_scope_id_id_pk",
650 "columns": ["scope_id", "id"]
651 }
652 },
653 "uniqueConstraints": {},
654 "policies": {},
655 "checkConstraints": {},
656 "isRLSEnabled": false
657 },
658 "public.mcp_source": {
659 "name": "mcp_source",
660 "schema": "",
661 "columns": {
662 "id": {
663 "name": "id",
664 "type": "text",
665 "primaryKey": false,
666 "notNull": true
667 },
668 "scope_id": {
669 "name": "scope_id",
670 "type": "text",
671 "primaryKey": false,
672 "notNull": true
673 },
674 "name": {
675 "name": "name",
676 "type": "text",
677 "primaryKey": false,
678 "notNull": true
679 },
680 "config": {
681 "name": "config",
682 "type": "jsonb",
683 "primaryKey": false,
684 "notNull": true
685 },
686 "created_at": {
687 "name": "created_at",
688 "type": "timestamp",
689 "primaryKey": false,
690 "notNull": true
691 }
692 },
693 "indexes": {
694 "mcp_source_scope_id_idx": {
695 "name": "mcp_source_scope_id_idx",
696 "columns": [
697 {
698 "expression": "scope_id",
699 "isExpression": false,
700 "asc": true,
701 "nulls": "last"
702 }
703 ],
704 "isUnique": false,
705 "concurrently": false,
706 "method": "btree",
707 "with": {}
708 }
709 },
710 "foreignKeys": {},
711 "compositePrimaryKeys": {
712 "mcp_source_scope_id_id_pk": {
713 "name": "mcp_source_scope_id_id_pk",
714 "columns": ["scope_id", "id"]
715 }
716 },
717 "uniqueConstraints": {},
718 "policies": {},
719 "checkConstraints": {},
720 "isRLSEnabled": false
721 },
722 "public.openapi_oauth_session": {
723 "name": "openapi_oauth_session",
724 "schema": "",
725 "columns": {
726 "id": {
727 "name": "id",
728 "type": "text",
729 "primaryKey": false,
730 "notNull": true
731 },
732 "scope_id": {
733 "name": "scope_id",
734 "type": "text",
735 "primaryKey": false,
736 "notNull": true
737 },
738 "session": {
739 "name": "session",
740 "type": "jsonb",
741 "primaryKey": false,
742 "notNull": true
743 },
744 "created_at": {
745 "name": "created_at",
746 "type": "timestamp",
747 "primaryKey": false,
748 "notNull": true
749 }
750 },
751 "indexes": {
752 "openapi_oauth_session_scope_id_idx": {
753 "name": "openapi_oauth_session_scope_id_idx",
754 "columns": [
755 {
756 "expression": "scope_id",
757 "isExpression": false,
758 "asc": true,
759 "nulls": "last"
760 }
761 ],
762 "isUnique": false,
763 "concurrently": false,
764 "method": "btree",
765 "with": {}
766 }
767 },
768 "foreignKeys": {},
769 "compositePrimaryKeys": {
770 "openapi_oauth_session_scope_id_id_pk": {
771 "name": "openapi_oauth_session_scope_id_id_pk",
772 "columns": ["scope_id", "id"]
773 }
774 },
775 "uniqueConstraints": {},
776 "policies": {},
777 "checkConstraints": {},
778 "isRLSEnabled": false
779 },
780 "public.openapi_operation": {
781 "name": "openapi_operation",
782 "schema": "",
783 "columns": {
784 "id": {
785 "name": "id",
786 "type": "text",
787 "primaryKey": false,
788 "notNull": true
789 },
790 "scope_id": {
791 "name": "scope_id",
792 "type": "text",
793 "primaryKey": false,
794 "notNull": true
795 },
796 "source_id": {
797 "name": "source_id",
798 "type": "text",
799 "primaryKey": false,
800 "notNull": true
801 },
802 "binding": {
803 "name": "binding",
804 "type": "jsonb",
805 "primaryKey": false,
806 "notNull": true
807 }
808 },
809 "indexes": {
810 "openapi_operation_scope_id_idx": {
811 "name": "openapi_operation_scope_id_idx",
812 "columns": [
813 {
814 "expression": "scope_id",
815 "isExpression": false,
816 "asc": true,
817 "nulls": "last"
818 }
819 ],
820 "isUnique": false,
821 "concurrently": false,
822 "method": "btree",
823 "with": {}
824 },
825 "openapi_operation_source_id_idx": {
826 "name": "openapi_operation_source_id_idx",
827 "columns": [
828 {
829 "expression": "source_id",
830 "isExpression": false,
831 "asc": true,
832 "nulls": "last"
833 }
834 ],
835 "isUnique": false,
836 "concurrently": false,
837 "method": "btree",
838 "with": {}
839 }
840 },
841 "foreignKeys": {},
842 "compositePrimaryKeys": {
843 "openapi_operation_scope_id_id_pk": {
844 "name": "openapi_operation_scope_id_id_pk",
845 "columns": ["scope_id", "id"]
846 }
847 },
848 "uniqueConstraints": {},
849 "policies": {},
850 "checkConstraints": {},
851 "isRLSEnabled": false
852 },
853 "public.openapi_source": {
854 "name": "openapi_source",
855 "schema": "",
856 "columns": {
857 "id": {
858 "name": "id",
859 "type": "text",
860 "primaryKey": false,
861 "notNull": true
862 },
863 "scope_id": {
864 "name": "scope_id",
865 "type": "text",
866 "primaryKey": false,
867 "notNull": true
868 },
869 "name": {
870 "name": "name",
871 "type": "text",
872 "primaryKey": false,
873 "notNull": true
874 },
875 "spec": {
876 "name": "spec",
877 "type": "text",
878 "primaryKey": false,
879 "notNull": true
880 },
881 "source_url": {
882 "name": "source_url",
883 "type": "text",
884 "primaryKey": false,
885 "notNull": false
886 },
887 "base_url": {
888 "name": "base_url",
889 "type": "text",
890 "primaryKey": false,
891 "notNull": false
892 },
893 "headers": {
894 "name": "headers",
895 "type": "jsonb",
896 "primaryKey": false,
897 "notNull": false
898 },
899 "oauth2": {
900 "name": "oauth2",
901 "type": "jsonb",
902 "primaryKey": false,
903 "notNull": false
904 },
905 "invocation_config": {
906 "name": "invocation_config",
907 "type": "jsonb",
908 "primaryKey": false,
909 "notNull": true
910 }
911 },
912 "indexes": {
913 "openapi_source_scope_id_idx": {
914 "name": "openapi_source_scope_id_idx",
915 "columns": [
916 {
917 "expression": "scope_id",
918 "isExpression": false,
919 "asc": true,
920 "nulls": "last"
921 }
922 ],
923 "isUnique": false,
924 "concurrently": false,
925 "method": "btree",
926 "with": {}
927 }
928 },
929 "foreignKeys": {},
930 "compositePrimaryKeys": {
931 "openapi_source_scope_id_id_pk": {
932 "name": "openapi_source_scope_id_id_pk",
933 "columns": ["scope_id", "id"]
934 }
935 },
936 "uniqueConstraints": {},
937 "policies": {},
938 "checkConstraints": {},
939 "isRLSEnabled": false
940 },
941 "public.secret": {
942 "name": "secret",
943 "schema": "",
944 "columns": {
945 "id": {
946 "name": "id",
947 "type": "text",
948 "primaryKey": false,
949 "notNull": true
950 },
951 "scope_id": {
952 "name": "scope_id",
953 "type": "text",
954 "primaryKey": false,
955 "notNull": true
956 },
957 "name": {
958 "name": "name",
959 "type": "text",
960 "primaryKey": false,
961 "notNull": true
962 },
963 "provider": {
964 "name": "provider",
965 "type": "text",
966 "primaryKey": false,
967 "notNull": true
968 },
969 "owned_by_connection_id": {
970 "name": "owned_by_connection_id",
971 "type": "text",
972 "primaryKey": false,
973 "notNull": false
974 },
975 "created_at": {
976 "name": "created_at",
977 "type": "timestamp",
978 "primaryKey": false,
979 "notNull": true
980 }
981 },
982 "indexes": {
983 "secret_scope_id_idx": {
984 "name": "secret_scope_id_idx",
985 "columns": [
986 {
987 "expression": "scope_id",
988 "isExpression": false,
989 "asc": true,
990 "nulls": "last"
991 }
992 ],
993 "isUnique": false,
994 "concurrently": false,
995 "method": "btree",
996 "with": {}
997 },
998 "secret_provider_idx": {
999 "name": "secret_provider_idx",
1000 "columns": [
1001 {
1002 "expression": "provider",
1003 "isExpression": false,
1004 "asc": true,
1005 "nulls": "last"
1006 }
1007 ],
1008 "isUnique": false,
1009 "concurrently": false,
1010 "method": "btree",
1011 "with": {}
1012 },
1013 "secret_owned_by_connection_id_idx": {
1014 "name": "secret_owned_by_connection_id_idx",
1015 "columns": [
1016 {
1017 "expression": "owned_by_connection_id",
1018 "isExpression": false,
1019 "asc": true,
1020 "nulls": "last"
1021 }
1022 ],
1023 "isUnique": false,
1024 "concurrently": false,
1025 "method": "btree",
1026 "with": {}
1027 }
1028 },
1029 "foreignKeys": {},
1030 "compositePrimaryKeys": {
1031 "secret_scope_id_id_pk": {
1032 "name": "secret_scope_id_id_pk",
1033 "columns": ["scope_id", "id"]
1034 }
1035 },
1036 "uniqueConstraints": {},
1037 "policies": {},
1038 "checkConstraints": {},
1039 "isRLSEnabled": false
1040 },
1041 "public.source": {
1042 "name": "source",
1043 "schema": "",
1044 "columns": {
1045 "id": {
1046 "name": "id",
1047 "type": "text",
1048 "primaryKey": false,
1049 "notNull": true
1050 },
1051 "scope_id": {
1052 "name": "scope_id",
1053 "type": "text",
1054 "primaryKey": false,
1055 "notNull": true
1056 },
1057 "plugin_id": {
1058 "name": "plugin_id",
1059 "type": "text",
1060 "primaryKey": false,
1061 "notNull": true
1062 },
1063 "kind": {
1064 "name": "kind",
1065 "type": "text",
1066 "primaryKey": false,
1067 "notNull": true
1068 },
1069 "name": {
1070 "name": "name",
1071 "type": "text",
1072 "primaryKey": false,
1073 "notNull": true
1074 },
1075 "url": {
1076 "name": "url",
1077 "type": "text",
1078 "primaryKey": false,
1079 "notNull": false
1080 },
1081 "can_remove": {
1082 "name": "can_remove",
1083 "type": "boolean",
1084 "primaryKey": false,
1085 "notNull": true,
1086 "default": true
1087 },
1088 "can_refresh": {
1089 "name": "can_refresh",
1090 "type": "boolean",
1091 "primaryKey": false,
1092 "notNull": true,
1093 "default": false
1094 },
1095 "can_edit": {
1096 "name": "can_edit",
1097 "type": "boolean",
1098 "primaryKey": false,
1099 "notNull": true,
1100 "default": false
1101 },
1102 "created_at": {
1103 "name": "created_at",
1104 "type": "timestamp",
1105 "primaryKey": false,
1106 "notNull": true
1107 },
1108 "updated_at": {
1109 "name": "updated_at",
1110 "type": "timestamp",
1111 "primaryKey": false,
1112 "notNull": true
1113 }
1114 },
1115 "indexes": {
1116 "source_scope_id_idx": {
1117 "name": "source_scope_id_idx",
1118 "columns": [
1119 {
1120 "expression": "scope_id",
1121 "isExpression": false,
1122 "asc": true,
1123 "nulls": "last"
1124 }
1125 ],
1126 "isUnique": false,
1127 "concurrently": false,
1128 "method": "btree",
1129 "with": {}
1130 },
1131 "source_plugin_id_idx": {
1132 "name": "source_plugin_id_idx",
1133 "columns": [
1134 {
1135 "expression": "plugin_id",
1136 "isExpression": false,
1137 "asc": true,
1138 "nulls": "last"
1139 }
1140 ],
1141 "isUnique": false,
1142 "concurrently": false,
1143 "method": "btree",
1144 "with": {}
1145 }
1146 },
1147 "foreignKeys": {},
1148 "compositePrimaryKeys": {
1149 "source_scope_id_id_pk": {
1150 "name": "source_scope_id_id_pk",
1151 "columns": ["scope_id", "id"]
1152 }
1153 },
1154 "uniqueConstraints": {},
1155 "policies": {},
1156 "checkConstraints": {},
1157 "isRLSEnabled": false
1158 },
1159 "public.tool": {
1160 "name": "tool",
1161 "schema": "",
1162 "columns": {
1163 "id": {
1164 "name": "id",
1165 "type": "text",
1166 "primaryKey": false,
1167 "notNull": true
1168 },
1169 "scope_id": {
1170 "name": "scope_id",
1171 "type": "text",
1172 "primaryKey": false,
1173 "notNull": true
1174 },
1175 "source_id": {
1176 "name": "source_id",
1177 "type": "text",
1178 "primaryKey": false,
1179 "notNull": true
1180 },
1181 "plugin_id": {
1182 "name": "plugin_id",
1183 "type": "text",
1184 "primaryKey": false,
1185 "notNull": true
1186 },
1187 "name": {
1188 "name": "name",
1189 "type": "text",
1190 "primaryKey": false,
1191 "notNull": true
1192 },
1193 "description": {
1194 "name": "description",
1195 "type": "text",
1196 "primaryKey": false,
1197 "notNull": true
1198 },
1199 "input_schema": {
1200 "name": "input_schema",
1201 "type": "jsonb",
1202 "primaryKey": false,
1203 "notNull": false
1204 },
1205 "output_schema": {
1206 "name": "output_schema",
1207 "type": "jsonb",
1208 "primaryKey": false,
1209 "notNull": false
1210 },
1211 "created_at": {
1212 "name": "created_at",
1213 "type": "timestamp",
1214 "primaryKey": false,
1215 "notNull": true
1216 },
1217 "updated_at": {
1218 "name": "updated_at",
1219 "type": "timestamp",
1220 "primaryKey": false,
1221 "notNull": true
1222 }
1223 },
1224 "indexes": {
1225 "tool_scope_id_idx": {
1226 "name": "tool_scope_id_idx",
1227 "columns": [
1228 {
1229 "expression": "scope_id",
1230 "isExpression": false,
1231 "asc": true,
1232 "nulls": "last"
1233 }
1234 ],
1235 "isUnique": false,
1236 "concurrently": false,
1237 "method": "btree",
1238 "with": {}
1239 },
1240 "tool_source_id_idx": {
1241 "name": "tool_source_id_idx",
1242 "columns": [
1243 {
1244 "expression": "source_id",
1245 "isExpression": false,
1246 "asc": true,
1247 "nulls": "last"
1248 }
1249 ],
1250 "isUnique": false,
1251 "concurrently": false,
1252 "method": "btree",
1253 "with": {}
1254 },
1255 "tool_plugin_id_idx": {
1256 "name": "tool_plugin_id_idx",
1257 "columns": [
1258 {
1259 "expression": "plugin_id",
1260 "isExpression": false,
1261 "asc": true,
1262 "nulls": "last"
1263 }
1264 ],
1265 "isUnique": false,
1266 "concurrently": false,
1267 "method": "btree",
1268 "with": {}
1269 }
1270 },
1271 "foreignKeys": {},
1272 "compositePrimaryKeys": {
1273 "tool_scope_id_id_pk": {
1274 "name": "tool_scope_id_id_pk",
1275 "columns": ["scope_id", "id"]
1276 }
1277 },
1278 "uniqueConstraints": {},
1279 "policies": {},
1280 "checkConstraints": {},
1281 "isRLSEnabled": false
1282 },
1283 "public.workos_vault_metadata": {
1284 "name": "workos_vault_metadata",
1285 "schema": "",
1286 "columns": {
1287 "id": {
1288 "name": "id",
1289 "type": "text",
1290 "primaryKey": false,
1291 "notNull": true
1292 },
1293 "scope_id": {
1294 "name": "scope_id",
1295 "type": "text",
1296 "primaryKey": false,
1297 "notNull": true
1298 },
1299 "name": {
1300 "name": "name",
1301 "type": "text",
1302 "primaryKey": false,
1303 "notNull": true
1304 },
1305 "purpose": {
1306 "name": "purpose",
1307 "type": "text",
1308 "primaryKey": false,
1309 "notNull": false
1310 },
1311 "created_at": {
1312 "name": "created_at",
1313 "type": "timestamp",
1314 "primaryKey": false,
1315 "notNull": true
1316 }
1317 },
1318 "indexes": {
1319 "workos_vault_metadata_scope_id_idx": {
1320 "name": "workos_vault_metadata_scope_id_idx",
1321 "columns": [
1322 {
1323 "expression": "scope_id",
1324 "isExpression": false,
1325 "asc": true,
1326 "nulls": "last"
1327 }
1328 ],
1329 "isUnique": false,
1330 "concurrently": false,
1331 "method": "btree",
1332 "with": {}
1333 }
1334 },
1335 "foreignKeys": {},
1336 "compositePrimaryKeys": {
1337 "workos_vault_metadata_scope_id_id_pk": {
1338 "name": "workos_vault_metadata_scope_id_id_pk",
1339 "columns": ["scope_id", "id"]
1340 }
1341 },
1342 "uniqueConstraints": {},
1343 "policies": {},
1344 "checkConstraints": {},
1345 "isRLSEnabled": false
1346 },
1347 "public.openapi_source_binding": {
1348 "name": "openapi_source_binding",
1349 "schema": "",
1350 "columns": {
1351 "id": {
1352 "name": "id",
1353 "type": "text",
1354 "primaryKey": true,
1355 "notNull": true
1356 },
1357 "source_id": {
1358 "name": "source_id",
1359 "type": "text",
1360 "primaryKey": false,
1361 "notNull": true
1362 },
1363 "source_scope_id": {
1364 "name": "source_scope_id",
1365 "type": "text",
1366 "primaryKey": false,
1367 "notNull": true
1368 },
1369 "target_scope_id": {
1370 "name": "target_scope_id",
1371 "type": "text",
1372 "primaryKey": false,
1373 "notNull": true
1374 },
1375 "slot": {
1376 "name": "slot",
1377 "type": "text",
1378 "primaryKey": false,
1379 "notNull": true
1380 },
1381 "value": {
1382 "name": "value",
1383 "type": "jsonb",
1384 "primaryKey": false,
1385 "notNull": true
1386 },
1387 "created_at": {
1388 "name": "created_at",
1389 "type": "timestamp",
1390 "primaryKey": false,
1391 "notNull": true
1392 },
1393 "updated_at": {
1394 "name": "updated_at",
1395 "type": "timestamp",
1396 "primaryKey": false,
1397 "notNull": true
1398 }
1399 },
1400 "indexes": {
1401 "openapi_source_binding_source_id_idx": {
1402 "name": "openapi_source_binding_source_id_idx",
1403 "columns": [
1404 {
1405 "expression": "source_id",
1406 "isExpression": false,
1407 "asc": true,
1408 "nulls": "last"
1409 }
1410 ],
1411 "isUnique": false,
1412 "concurrently": false,
1413 "method": "btree",
1414 "with": {}
1415 },
1416 "openapi_source_binding_source_scope_id_idx": {
1417 "name": "openapi_source_binding_source_scope_id_idx",
1418 "columns": [
1419 {
1420 "expression": "source_scope_id",
1421 "isExpression": false,
1422 "asc": true,
1423 "nulls": "last"
1424 }
1425 ],
1426 "isUnique": false,
1427 "concurrently": false,
1428 "method": "btree",
1429 "with": {}
1430 },
1431 "openapi_source_binding_target_scope_id_idx": {
1432 "name": "openapi_source_binding_target_scope_id_idx",
1433 "columns": [
1434 {
1435 "expression": "target_scope_id",
1436 "isExpression": false,
1437 "asc": true,
1438 "nulls": "last"
1439 }
1440 ],
1441 "isUnique": false,
1442 "concurrently": false,
1443 "method": "btree",
1444 "with": {}
1445 },
1446 "openapi_source_binding_slot_idx": {
1447 "name": "openapi_source_binding_slot_idx",
1448 "columns": [
1449 {
1450 "expression": "slot",
1451 "isExpression": false,
1452 "asc": true,
1453 "nulls": "last"
1454 }
1455 ],
1456 "isUnique": false,
1457 "concurrently": false,
1458 "method": "btree",
1459 "with": {}
1460 }
1461 },
1462 "foreignKeys": {},
1463 "compositePrimaryKeys": {},
1464 "uniqueConstraints": {},
1465 "policies": {},
1466 "checkConstraints": {},
1467 "isRLSEnabled": false
1468 }
1469 },
1470 "enums": {},
1471 "schemas": {},
1472 "sequences": {},
1473 "roles": {},
1474 "policies": {},
1475 "views": {},
1476 "_meta": {
1477 "columns": {},
1478 "schemas": {},
1479 "tables": {}
1480 }
1481}
apps/cloud/drizzle/meta/0006_snapshot.json+0−1563
@@ -1,1563 +0,0 @@
1{
2 "id": "2ab0a02b-4dba-4ea4-bb6a-31ef0926942f",
3 "prevId": "1d422fe0-aa63-4931-80dc-02816df3c4d2",
4 "version": "7",
5 "dialect": "postgresql",
6 "tables": {
7 "public.accounts": {
8 "name": "accounts",
9 "schema": "",
10 "columns": {
11 "id": {
12 "name": "id",
13 "type": "text",
14 "primaryKey": true,
15 "notNull": true
16 },
17 "created_at": {
18 "name": "created_at",
19 "type": "timestamp with time zone",
20 "primaryKey": false,
21 "notNull": true,
22 "default": "now()"
23 }
24 },
25 "indexes": {},
26 "foreignKeys": {},
27 "compositePrimaryKeys": {},
28 "uniqueConstraints": {},
29 "policies": {},
30 "checkConstraints": {},
31 "isRLSEnabled": false
32 },
33 "public.memberships": {
34 "name": "memberships",
35 "schema": "",
36 "columns": {
37 "account_id": {
38 "name": "account_id",
39 "type": "text",
40 "primaryKey": false,
41 "notNull": true
42 },
43 "organization_id": {
44 "name": "organization_id",
45 "type": "text",
46 "primaryKey": false,
47 "notNull": true
48 },
49 "created_at": {
50 "name": "created_at",
51 "type": "timestamp with time zone",
52 "primaryKey": false,
53 "notNull": true,
54 "default": "now()"
55 }
56 },
57 "indexes": {},
58 "foreignKeys": {
59 "memberships_account_id_accounts_id_fk": {
60 "name": "memberships_account_id_accounts_id_fk",
61 "tableFrom": "memberships",
62 "tableTo": "accounts",
63 "columnsFrom": ["account_id"],
64 "columnsTo": ["id"],
65 "onDelete": "cascade",
66 "onUpdate": "no action"
67 },
68 "memberships_organization_id_organizations_id_fk": {
69 "name": "memberships_organization_id_organizations_id_fk",
70 "tableFrom": "memberships",
71 "tableTo": "organizations",
72 "columnsFrom": ["organization_id"],
73 "columnsTo": ["id"],
74 "onDelete": "cascade",
75 "onUpdate": "no action"
76 }
77 },
78 "compositePrimaryKeys": {
79 "memberships_account_id_organization_id_pk": {
80 "name": "memberships_account_id_organization_id_pk",
81 "columns": ["account_id", "organization_id"]
82 }
83 },
84 "uniqueConstraints": {},
85 "policies": {},
86 "checkConstraints": {},
87 "isRLSEnabled": false
88 },
89 "public.organizations": {
90 "name": "organizations",
91 "schema": "",
92 "columns": {
93 "id": {
94 "name": "id",
95 "type": "text",
96 "primaryKey": true,
97 "notNull": true
98 },
99 "name": {
100 "name": "name",
101 "type": "text",
102 "primaryKey": false,
103 "notNull": true
104 },
105 "created_at": {
106 "name": "created_at",
107 "type": "timestamp with time zone",
108 "primaryKey": false,
109 "notNull": true,
110 "default": "now()"
111 }
112 },
113 "indexes": {},
114 "foreignKeys": {},
115 "compositePrimaryKeys": {},
116 "uniqueConstraints": {},
117 "policies": {},
118 "checkConstraints": {},
119 "isRLSEnabled": false
120 },
121 "public.blob": {
122 "name": "blob",
123 "schema": "",
124 "columns": {
125 "namespace": {
126 "name": "namespace",
127 "type": "text",
128 "primaryKey": false,
129 "notNull": true
130 },
131 "key": {
132 "name": "key",
133 "type": "text",
134 "primaryKey": false,
135 "notNull": true
136 },
137 "value": {
138 "name": "value",
139 "type": "text",
140 "primaryKey": false,
141 "notNull": true
142 }
143 },
144 "indexes": {},
145 "foreignKeys": {},
146 "compositePrimaryKeys": {
147 "blob_namespace_key_pk": {
148 "name": "blob_namespace_key_pk",
149 "columns": ["namespace", "key"]
150 }
151 },
152 "uniqueConstraints": {},
153 "policies": {},
154 "checkConstraints": {},
155 "isRLSEnabled": false
156 },
157 "public.connection": {
158 "name": "connection",
159 "schema": "",
160 "columns": {
161 "id": {
162 "name": "id",
163 "type": "text",
164 "primaryKey": false,
165 "notNull": true
166 },
167 "scope_id": {
168 "name": "scope_id",
169 "type": "text",
170 "primaryKey": false,
171 "notNull": true
172 },
173 "provider": {
174 "name": "provider",
175 "type": "text",
176 "primaryKey": false,
177 "notNull": true
178 },
179 "identity_label": {
180 "name": "identity_label",
181 "type": "text",
182 "primaryKey": false,
183 "notNull": false
184 },
185 "access_token_secret_id": {
186 "name": "access_token_secret_id",
187 "type": "text",
188 "primaryKey": false,
189 "notNull": true
190 },
191 "refresh_token_secret_id": {
192 "name": "refresh_token_secret_id",
193 "type": "text",
194 "primaryKey": false,
195 "notNull": false
196 },
197 "expires_at": {
198 "name": "expires_at",
199 "type": "bigint",
200 "primaryKey": false,
201 "notNull": false
202 },
203 "scope": {
204 "name": "scope",
205 "type": "text",
206 "primaryKey": false,
207 "notNull": false
208 },
209 "provider_state": {
210 "name": "provider_state",
211 "type": "jsonb",
212 "primaryKey": false,
213 "notNull": false
214 },
215 "created_at": {
216 "name": "created_at",
217 "type": "timestamp",
218 "primaryKey": false,
219 "notNull": true
220 },
221 "updated_at": {
222 "name": "updated_at",
223 "type": "timestamp",
224 "primaryKey": false,
225 "notNull": true
226 }
227 },
228 "indexes": {
229 "connection_scope_id_idx": {
230 "name": "connection_scope_id_idx",
231 "columns": [
232 {
233 "expression": "scope_id",
234 "isExpression": false,
235 "asc": true,
236 "nulls": "last"
237 }
238 ],
239 "isUnique": false,
240 "concurrently": false,
241 "method": "btree",
242 "with": {}
243 },
244 "connection_provider_idx": {
245 "name": "connection_provider_idx",
246 "columns": [
247 {
248 "expression": "provider",
249 "isExpression": false,
250 "asc": true,
251 "nulls": "last"
252 }
253 ],
254 "isUnique": false,
255 "concurrently": false,
256 "method": "btree",
257 "with": {}
258 }
259 },
260 "foreignKeys": {},
261 "compositePrimaryKeys": {
262 "connection_scope_id_id_pk": {
263 "name": "connection_scope_id_id_pk",
264 "columns": ["scope_id", "id"]
265 }
266 },
267 "uniqueConstraints": {},
268 "policies": {},
269 "checkConstraints": {},
270 "isRLSEnabled": false
271 },
272 "public.definition": {
273 "name": "definition",
274 "schema": "",
275 "columns": {
276 "id": {
277 "name": "id",
278 "type": "text",
279 "primaryKey": false,
280 "notNull": true
281 },
282 "scope_id": {
283 "name": "scope_id",
284 "type": "text",
285 "primaryKey": false,
286 "notNull": true
287 },
288 "source_id": {
289 "name": "source_id",
290 "type": "text",
291 "primaryKey": false,
292 "notNull": true
293 },
294 "plugin_id": {
295 "name": "plugin_id",
296 "type": "text",
297 "primaryKey": false,
298 "notNull": true
299 },
300 "name": {
301 "name": "name",
302 "type": "text",
303 "primaryKey": false,
304 "notNull": true
305 },
306 "schema": {
307 "name": "schema",
308 "type": "jsonb",
309 "primaryKey": false,
310 "notNull": true
311 },
312 "created_at": {
313 "name": "created_at",
314 "type": "timestamp",
315 "primaryKey": false,
316 "notNull": true
317 }
318 },
319 "indexes": {
320 "definition_scope_id_idx": {
321 "name": "definition_scope_id_idx",
322 "columns": [
323 {
324 "expression": "scope_id",
325 "isExpression": false,
326 "asc": true,
327 "nulls": "last"
328 }
329 ],
330 "isUnique": false,
331 "concurrently": false,
332 "method": "btree",
333 "with": {}
334 },
335 "definition_source_id_idx": {
336 "name": "definition_source_id_idx",
337 "columns": [
338 {
339 "expression": "source_id",
340 "isExpression": false,
341 "asc": true,
342 "nulls": "last"
343 }
344 ],
345 "isUnique": false,
346 "concurrently": false,
347 "method": "btree",
348 "with": {}
349 },
350 "definition_plugin_id_idx": {
351 "name": "definition_plugin_id_idx",
352 "columns": [
353 {
354 "expression": "plugin_id",
355 "isExpression": false,
356 "asc": true,
357 "nulls": "last"
358 }
359 ],
360 "isUnique": false,
361 "concurrently": false,
362 "method": "btree",
363 "with": {}
364 }
365 },
366 "foreignKeys": {},
367 "compositePrimaryKeys": {
368 "definition_scope_id_id_pk": {
369 "name": "definition_scope_id_id_pk",
370 "columns": ["scope_id", "id"]
371 }
372 },
373 "uniqueConstraints": {},
374 "policies": {},
375 "checkConstraints": {},
376 "isRLSEnabled": false
377 },
378 "public.graphql_operation": {
379 "name": "graphql_operation",
380 "schema": "",
381 "columns": {
382 "id": {
383 "name": "id",
384 "type": "text",
385 "primaryKey": false,
386 "notNull": true
387 },
388 "scope_id": {
389 "name": "scope_id",
390 "type": "text",
391 "primaryKey": false,
392 "notNull": true
393 },
394 "source_id": {
395 "name": "source_id",
396 "type": "text",
397 "primaryKey": false,
398 "notNull": true
399 },
400 "binding": {
401 "name": "binding",
402 "type": "jsonb",
403 "primaryKey": false,
404 "notNull": true
405 }
406 },
407 "indexes": {
408 "graphql_operation_scope_id_idx": {
409 "name": "graphql_operation_scope_id_idx",
410 "columns": [
411 {
412 "expression": "scope_id",
413 "isExpression": false,
414 "asc": true,
415 "nulls": "last"
416 }
417 ],
418 "isUnique": false,
419 "concurrently": false,
420 "method": "btree",
421 "with": {}
422 },
423 "graphql_operation_source_id_idx": {
424 "name": "graphql_operation_source_id_idx",
425 "columns": [
426 {
427 "expression": "source_id",
428 "isExpression": false,
429 "asc": true,
430 "nulls": "last"
431 }
432 ],
433 "isUnique": false,
434 "concurrently": false,
435 "method": "btree",
436 "with": {}
437 }
438 },
439 "foreignKeys": {},
440 "compositePrimaryKeys": {
441 "graphql_operation_scope_id_id_pk": {
442 "name": "graphql_operation_scope_id_id_pk",
443 "columns": ["scope_id", "id"]
444 }
445 },
446 "uniqueConstraints": {},
447 "policies": {},
448 "checkConstraints": {},
449 "isRLSEnabled": false
450 },
451 "public.graphql_source": {
452 "name": "graphql_source",
453 "schema": "",
454 "columns": {
455 "id": {
456 "name": "id",
457 "type": "text",
458 "primaryKey": false,
459 "notNull": true
460 },
461 "scope_id": {
462 "name": "scope_id",
463 "type": "text",
464 "primaryKey": false,
465 "notNull": true
466 },
467 "name": {
468 "name": "name",
469 "type": "text",
470 "primaryKey": false,
471 "notNull": true
472 },
473 "endpoint": {
474 "name": "endpoint",
475 "type": "text",
476 "primaryKey": false,
477 "notNull": true
478 },
479 "headers": {
480 "name": "headers",
481 "type": "jsonb",
482 "primaryKey": false,
483 "notNull": false
484 }
485 },
486 "indexes": {
487 "graphql_source_scope_id_idx": {
488 "name": "graphql_source_scope_id_idx",
489 "columns": [
490 {
491 "expression": "scope_id",
492 "isExpression": false,
493 "asc": true,
494 "nulls": "last"
495 }
496 ],
497 "isUnique": false,
498 "concurrently": false,
499 "method": "btree",
500 "with": {}
501 }
502 },
503 "foreignKeys": {},
504 "compositePrimaryKeys": {
505 "graphql_source_scope_id_id_pk": {
506 "name": "graphql_source_scope_id_id_pk",
507 "columns": ["scope_id", "id"]
508 }
509 },
510 "uniqueConstraints": {},
511 "policies": {},
512 "checkConstraints": {},
513 "isRLSEnabled": false
514 },
515 "public.mcp_binding": {
516 "name": "mcp_binding",
517 "schema": "",
518 "columns": {
519 "id": {
520 "name": "id",
521 "type": "text",
522 "primaryKey": false,
523 "notNull": true
524 },
525 "scope_id": {
526 "name": "scope_id",
527 "type": "text",
528 "primaryKey": false,
529 "notNull": true
530 },
531 "source_id": {
532 "name": "source_id",
533 "type": "text",
534 "primaryKey": false,
535 "notNull": true
536 },
537 "binding": {
538 "name": "binding",
539 "type": "jsonb",
540 "primaryKey": false,
541 "notNull": true
542 },
543 "created_at": {
544 "name": "created_at",
545 "type": "timestamp",
546 "primaryKey": false,
547 "notNull": true
548 }
549 },
550 "indexes": {
551 "mcp_binding_scope_id_idx": {
552 "name": "mcp_binding_scope_id_idx",
553 "columns": [
554 {
555 "expression": "scope_id",
556 "isExpression": false,
557 "asc": true,
558 "nulls": "last"
559 }
560 ],
561 "isUnique": false,
562 "concurrently": false,
563 "method": "btree",
564 "with": {}
565 },
566 "mcp_binding_source_id_idx": {
567 "name": "mcp_binding_source_id_idx",
568 "columns": [
569 {
570 "expression": "source_id",
571 "isExpression": false,
572 "asc": true,
573 "nulls": "last"
574 }
575 ],
576 "isUnique": false,
577 "concurrently": false,
578 "method": "btree",
579 "with": {}
580 }
581 },
582 "foreignKeys": {},
583 "compositePrimaryKeys": {
584 "mcp_binding_scope_id_id_pk": {
585 "name": "mcp_binding_scope_id_id_pk",
586 "columns": ["scope_id", "id"]
587 }
588 },
589 "uniqueConstraints": {},
590 "policies": {},
591 "checkConstraints": {},
592 "isRLSEnabled": false
593 },
594 "public.mcp_oauth_session": {
595 "name": "mcp_oauth_session",
596 "schema": "",
597 "columns": {
598 "id": {
599 "name": "id",
600 "type": "text",
601 "primaryKey": false,
602 "notNull": true
603 },
604 "scope_id": {
605 "name": "scope_id",
606 "type": "text",
607 "primaryKey": false,
608 "notNull": true
609 },
610 "session": {
611 "name": "session",
612 "type": "jsonb",
613 "primaryKey": false,
614 "notNull": true
615 },
616 "expires_at": {
617 "name": "expires_at",
618 "type": "bigint",
619 "primaryKey": false,
620 "notNull": true
621 },
622 "created_at": {
623 "name": "created_at",
624 "type": "timestamp",
625 "primaryKey": false,
626 "notNull": true
627 }
628 },
629 "indexes": {
630 "mcp_oauth_session_scope_id_idx": {
631 "name": "mcp_oauth_session_scope_id_idx",
632 "columns": [
633 {
634 "expression": "scope_id",
635 "isExpression": false,
636 "asc": true,
637 "nulls": "last"
638 }
639 ],
640 "isUnique": false,
641 "concurrently": false,
642 "method": "btree",
643 "with": {}
644 }
645 },
646 "foreignKeys": {},
647 "compositePrimaryKeys": {
648 "mcp_oauth_session_scope_id_id_pk": {
649 "name": "mcp_oauth_session_scope_id_id_pk",
650 "columns": ["scope_id", "id"]
651 }
652 },
653 "uniqueConstraints": {},
654 "policies": {},
655 "checkConstraints": {},
656 "isRLSEnabled": false
657 },
658 "public.mcp_source": {
659 "name": "mcp_source",
660 "schema": "",
661 "columns": {
662 "id": {
663 "name": "id",
664 "type": "text",
665 "primaryKey": false,
666 "notNull": true
667 },
668 "scope_id": {
669 "name": "scope_id",
670 "type": "text",
671 "primaryKey": false,
672 "notNull": true
673 },
674 "name": {
675 "name": "name",
676 "type": "text",
677 "primaryKey": false,
678 "notNull": true
679 },
680 "config": {
681 "name": "config",
682 "type": "jsonb",
683 "primaryKey": false,
684 "notNull": true
685 },
686 "created_at": {
687 "name": "created_at",
688 "type": "timestamp",
689 "primaryKey": false,
690 "notNull": true
691 }
692 },
693 "indexes": {
694 "mcp_source_scope_id_idx": {
695 "name": "mcp_source_scope_id_idx",
696 "columns": [
697 {
698 "expression": "scope_id",
699 "isExpression": false,
700 "asc": true,
701 "nulls": "last"
702 }
703 ],
704 "isUnique": false,
705 "concurrently": false,
706 "method": "btree",
707 "with": {}
708 }
709 },
710 "foreignKeys": {},
711 "compositePrimaryKeys": {
712 "mcp_source_scope_id_id_pk": {
713 "name": "mcp_source_scope_id_id_pk",
714 "columns": ["scope_id", "id"]
715 }
716 },
717 "uniqueConstraints": {},
718 "policies": {},
719 "checkConstraints": {},
720 "isRLSEnabled": false
721 },
722 "public.openapi_oauth_session": {
723 "name": "openapi_oauth_session",
724 "schema": "",
725 "columns": {
726 "id": {
727 "name": "id",
728 "type": "text",
729 "primaryKey": false,
730 "notNull": true
731 },
732 "scope_id": {
733 "name": "scope_id",
734 "type": "text",
735 "primaryKey": false,
736 "notNull": true
737 },
738 "session": {
739 "name": "session",
740 "type": "jsonb",
741 "primaryKey": false,
742 "notNull": true
743 },
744 "created_at": {
745 "name": "created_at",
746 "type": "timestamp",
747 "primaryKey": false,
748 "notNull": true
749 }
750 },
751 "indexes": {
752 "openapi_oauth_session_scope_id_idx": {
753 "name": "openapi_oauth_session_scope_id_idx",
754 "columns": [
755 {
756 "expression": "scope_id",
757 "isExpression": false,
758 "asc": true,
759 "nulls": "last"
760 }
761 ],
762 "isUnique": false,
763 "concurrently": false,
764 "method": "btree",
765 "with": {}
766 }
767 },
768 "foreignKeys": {},
769 "compositePrimaryKeys": {
770 "openapi_oauth_session_scope_id_id_pk": {
771 "name": "openapi_oauth_session_scope_id_id_pk",
772 "columns": ["scope_id", "id"]
773 }
774 },
775 "uniqueConstraints": {},
776 "policies": {},
777 "checkConstraints": {},
778 "isRLSEnabled": false
779 },
780 "public.openapi_operation": {
781 "name": "openapi_operation",
782 "schema": "",
783 "columns": {
784 "id": {
785 "name": "id",
786 "type": "text",
787 "primaryKey": false,
788 "notNull": true
789 },
790 "scope_id": {
791 "name": "scope_id",
792 "type": "text",
793 "primaryKey": false,
794 "notNull": true
795 },
796 "source_id": {
797 "name": "source_id",
798 "type": "text",
799 "primaryKey": false,
800 "notNull": true
801 },
802 "binding": {
803 "name": "binding",
804 "type": "jsonb",
805 "primaryKey": false,
806 "notNull": true
807 }
808 },
809 "indexes": {
810 "openapi_operation_scope_id_idx": {
811 "name": "openapi_operation_scope_id_idx",
812 "columns": [
813 {
814 "expression": "scope_id",
815 "isExpression": false,
816 "asc": true,
817 "nulls": "last"
818 }
819 ],
820 "isUnique": false,
821 "concurrently": false,
822 "method": "btree",
823 "with": {}
824 },
825 "openapi_operation_source_id_idx": {
826 "name": "openapi_operation_source_id_idx",
827 "columns": [
828 {
829 "expression": "source_id",
830 "isExpression": false,
831 "asc": true,
832 "nulls": "last"
833 }
834 ],
835 "isUnique": false,
836 "concurrently": false,
837 "method": "btree",
838 "with": {}
839 }
840 },
841 "foreignKeys": {},
842 "compositePrimaryKeys": {
843 "openapi_operation_scope_id_id_pk": {
844 "name": "openapi_operation_scope_id_id_pk",
845 "columns": ["scope_id", "id"]
846 }
847 },
848 "uniqueConstraints": {},
849 "policies": {},
850 "checkConstraints": {},
851 "isRLSEnabled": false
852 },
853 "public.openapi_source": {
854 "name": "openapi_source",
855 "schema": "",
856 "columns": {
857 "id": {
858 "name": "id",
859 "type": "text",
860 "primaryKey": false,
861 "notNull": true
862 },
863 "scope_id": {
864 "name": "scope_id",
865 "type": "text",
866 "primaryKey": false,
867 "notNull": true
868 },
869 "name": {
870 "name": "name",
871 "type": "text",
872 "primaryKey": false,
873 "notNull": true
874 },
875 "spec": {
876 "name": "spec",
877 "type": "text",
878 "primaryKey": false,
879 "notNull": true
880 },
881 "source_url": {
882 "name": "source_url",
883 "type": "text",
884 "primaryKey": false,
885 "notNull": false
886 },
887 "base_url": {
888 "name": "base_url",
889 "type": "text",
890 "primaryKey": false,
891 "notNull": false
892 },
893 "headers": {
894 "name": "headers",
895 "type": "jsonb",
896 "primaryKey": false,
897 "notNull": false
898 },
899 "oauth2": {
900 "name": "oauth2",
901 "type": "jsonb",
902 "primaryKey": false,
903 "notNull": false
904 },
905 "invocation_config": {
906 "name": "invocation_config",
907 "type": "jsonb",
908 "primaryKey": false,
909 "notNull": true
910 }
911 },
912 "indexes": {
913 "openapi_source_scope_id_idx": {
914 "name": "openapi_source_scope_id_idx",
915 "columns": [
916 {
917 "expression": "scope_id",
918 "isExpression": false,
919 "asc": true,
920 "nulls": "last"
921 }
922 ],
923 "isUnique": false,
924 "concurrently": false,
925 "method": "btree",
926 "with": {}
927 }
928 },
929 "foreignKeys": {},
930 "compositePrimaryKeys": {
931 "openapi_source_scope_id_id_pk": {
932 "name": "openapi_source_scope_id_id_pk",
933 "columns": ["scope_id", "id"]
934 }
935 },
936 "uniqueConstraints": {},
937 "policies": {},
938 "checkConstraints": {},
939 "isRLSEnabled": false
940 },
941 "public.secret": {
942 "name": "secret",
943 "schema": "",
944 "columns": {
945 "id": {
946 "name": "id",
947 "type": "text",
948 "primaryKey": false,
949 "notNull": true
950 },
951 "scope_id": {
952 "name": "scope_id",
953 "type": "text",
954 "primaryKey": false,
955 "notNull": true
956 },
957 "name": {
958 "name": "name",
959 "type": "text",
960 "primaryKey": false,
961 "notNull": true
962 },
963 "provider": {
964 "name": "provider",
965 "type": "text",
966 "primaryKey": false,
967 "notNull": true
968 },
969 "owned_by_connection_id": {
970 "name": "owned_by_connection_id",
971 "type": "text",
972 "primaryKey": false,
973 "notNull": false
974 },
975 "created_at": {
976 "name": "created_at",
977 "type": "timestamp",
978 "primaryKey": false,
979 "notNull": true
980 }
981 },
982 "indexes": {
983 "secret_scope_id_idx": {
984 "name": "secret_scope_id_idx",
985 "columns": [
986 {
987 "expression": "scope_id",
988 "isExpression": false,
989 "asc": true,
990 "nulls": "last"
991 }
992 ],
993 "isUnique": false,
994 "concurrently": false,
995 "method": "btree",
996 "with": {}
997 },
998 "secret_provider_idx": {
999 "name": "secret_provider_idx",
1000 "columns": [
1001 {
1002 "expression": "provider",
1003 "isExpression": false,
1004 "asc": true,
1005 "nulls": "last"
1006 }
1007 ],
1008 "isUnique": false,
1009 "concurrently": false,
1010 "method": "btree",
1011 "with": {}
1012 },
1013 "secret_owned_by_connection_id_idx": {
1014 "name": "secret_owned_by_connection_id_idx",
1015 "columns": [
1016 {
1017 "expression": "owned_by_connection_id",
1018 "isExpression": false,
1019 "asc": true,
1020 "nulls": "last"
1021 }
1022 ],
1023 "isUnique": false,
1024 "concurrently": false,
1025 "method": "btree",
1026 "with": {}
1027 }
1028 },
1029 "foreignKeys": {},
1030 "compositePrimaryKeys": {
1031 "secret_scope_id_id_pk": {
1032 "name": "secret_scope_id_id_pk",
1033 "columns": ["scope_id", "id"]
1034 }
1035 },
1036 "uniqueConstraints": {},
1037 "policies": {},
1038 "checkConstraints": {},
1039 "isRLSEnabled": false
1040 },
1041 "public.source": {
1042 "name": "source",
1043 "schema": "",
1044 "columns": {
1045 "id": {
1046 "name": "id",
1047 "type": "text",
1048 "primaryKey": false,
1049 "notNull": true
1050 },
1051 "scope_id": {
1052 "name": "scope_id",
1053 "type": "text",
1054 "primaryKey": false,
1055 "notNull": true
1056 },
1057 "plugin_id": {
1058 "name": "plugin_id",
1059 "type": "text",
1060 "primaryKey": false,
1061 "notNull": true
1062 },
1063 "kind": {
1064 "name": "kind",
1065 "type": "text",
1066 "primaryKey": false,
1067 "notNull": true
1068 },
1069 "name": {
1070 "name": "name",
1071 "type": "text",
1072 "primaryKey": false,
1073 "notNull": true
1074 },
1075 "url": {
1076 "name": "url",
1077 "type": "text",
1078 "primaryKey": false,
1079 "notNull": false
1080 },
1081 "can_remove": {
1082 "name": "can_remove",
1083 "type": "boolean",
1084 "primaryKey": false,
1085 "notNull": true,
1086 "default": true
1087 },
1088 "can_refresh": {
1089 "name": "can_refresh",
1090 "type": "boolean",
1091 "primaryKey": false,
1092 "notNull": true,
1093 "default": false
1094 },
1095 "can_edit": {
1096 "name": "can_edit",
1097 "type": "boolean",
1098 "primaryKey": false,
1099 "notNull": true,
1100 "default": false
1101 },
1102 "created_at": {
1103 "name": "created_at",
1104 "type": "timestamp",
1105 "primaryKey": false,
1106 "notNull": true
1107 },
1108 "updated_at": {
1109 "name": "updated_at",
1110 "type": "timestamp",
1111 "primaryKey": false,
1112 "notNull": true
1113 }
1114 },
1115 "indexes": {
1116 "source_scope_id_idx": {
1117 "name": "source_scope_id_idx",
1118 "columns": [
1119 {
1120 "expression": "scope_id",
1121 "isExpression": false,
1122 "asc": true,
1123 "nulls": "last"
1124 }
1125 ],
1126 "isUnique": false,
1127 "concurrently": false,
1128 "method": "btree",
1129 "with": {}
1130 },
1131 "source_plugin_id_idx": {
1132 "name": "source_plugin_id_idx",
1133 "columns": [
1134 {
1135 "expression": "plugin_id",
1136 "isExpression": false,
1137 "asc": true,
1138 "nulls": "last"
1139 }
1140 ],
1141 "isUnique": false,
1142 "concurrently": false,
1143 "method": "btree",
1144 "with": {}
1145 }
1146 },
1147 "foreignKeys": {},
1148 "compositePrimaryKeys": {
1149 "source_scope_id_id_pk": {
1150 "name": "source_scope_id_id_pk",
1151 "columns": ["scope_id", "id"]
1152 }
1153 },
1154 "uniqueConstraints": {},
1155 "policies": {},
1156 "checkConstraints": {},
1157 "isRLSEnabled": false
1158 },
1159 "public.tool": {
1160 "name": "tool",
1161 "schema": "",
1162 "columns": {
1163 "id": {
1164 "name": "id",
1165 "type": "text",
1166 "primaryKey": false,
1167 "notNull": true
1168 },
1169 "scope_id": {
1170 "name": "scope_id",
1171 "type": "text",
1172 "primaryKey": false,
1173 "notNull": true
1174 },
1175 "source_id": {
1176 "name": "source_id",
1177 "type": "text",
1178 "primaryKey": false,
1179 "notNull": true
1180 },
1181 "plugin_id": {
1182 "name": "plugin_id",
1183 "type": "text",
1184 "primaryKey": false,
1185 "notNull": true
1186 },
1187 "name": {
1188 "name": "name",
1189 "type": "text",
1190 "primaryKey": false,
1191 "notNull": true
1192 },
1193 "description": {
1194 "name": "description",
1195 "type": "text",
1196 "primaryKey": false,
1197 "notNull": true
1198 },
1199 "input_schema": {
1200 "name": "input_schema",
1201 "type": "jsonb",
1202 "primaryKey": false,
1203 "notNull": false
1204 },
1205 "output_schema": {
1206 "name": "output_schema",
1207 "type": "jsonb",
1208 "primaryKey": false,
1209 "notNull": false
1210 },
1211 "created_at": {
1212 "name": "created_at",
1213 "type": "timestamp",
1214 "primaryKey": false,
1215 "notNull": true
1216 },
1217 "updated_at": {
1218 "name": "updated_at",
1219 "type": "timestamp",
1220 "primaryKey": false,
1221 "notNull": true
1222 }
1223 },
1224 "indexes": {
1225 "tool_scope_id_idx": {
1226 "name": "tool_scope_id_idx",
1227 "columns": [
1228 {
1229 "expression": "scope_id",
1230 "isExpression": false,
1231 "asc": true,
1232 "nulls": "last"
1233 }
1234 ],
1235 "isUnique": false,
1236 "concurrently": false,
1237 "method": "btree",
1238 "with": {}
1239 },
1240 "tool_source_id_idx": {
1241 "name": "tool_source_id_idx",
1242 "columns": [
1243 {
1244 "expression": "source_id",
1245 "isExpression": false,
1246 "asc": true,
1247 "nulls": "last"
1248 }
1249 ],
1250 "isUnique": false,
1251 "concurrently": false,
1252 "method": "btree",
1253 "with": {}
1254 },
1255 "tool_plugin_id_idx": {
1256 "name": "tool_plugin_id_idx",
1257 "columns": [
1258 {
1259 "expression": "plugin_id",
1260 "isExpression": false,
1261 "asc": true,
1262 "nulls": "last"
1263 }
1264 ],
1265 "isUnique": false,
1266 "concurrently": false,
1267 "method": "btree",
1268 "with": {}
1269 }
1270 },
1271 "foreignKeys": {},
1272 "compositePrimaryKeys": {
1273 "tool_scope_id_id_pk": {
1274 "name": "tool_scope_id_id_pk",
1275 "columns": ["scope_id", "id"]
1276 }
1277 },
1278 "uniqueConstraints": {},
1279 "policies": {},
1280 "checkConstraints": {},
1281 "isRLSEnabled": false
1282 },
1283 "public.workos_vault_metadata": {
1284 "name": "workos_vault_metadata",
1285 "schema": "",
1286 "columns": {
1287 "id": {
1288 "name": "id",
1289 "type": "text",
1290 "primaryKey": false,
1291 "notNull": true
1292 },
1293 "scope_id": {
1294 "name": "scope_id",
1295 "type": "text",
1296 "primaryKey": false,
1297 "notNull": true
1298 },
1299 "name": {
1300 "name": "name",
1301 "type": "text",
1302 "primaryKey": false,
1303 "notNull": true
1304 },
1305 "purpose": {
1306 "name": "purpose",
1307 "type": "text",
1308 "primaryKey": false,
1309 "notNull": false
1310 },
1311 "created_at": {
1312 "name": "created_at",
1313 "type": "timestamp",
1314 "primaryKey": false,
1315 "notNull": true
1316 }
1317 },
1318 "indexes": {
1319 "workos_vault_metadata_scope_id_idx": {
1320 "name": "workos_vault_metadata_scope_id_idx",
1321 "columns": [
1322 {
1323 "expression": "scope_id",
1324 "isExpression": false,
1325 "asc": true,
1326 "nulls": "last"
1327 }
1328 ],
1329 "isUnique": false,
1330 "concurrently": false,
1331 "method": "btree",
1332 "with": {}
1333 }
1334 },
1335 "foreignKeys": {},
1336 "compositePrimaryKeys": {
1337 "workos_vault_metadata_scope_id_id_pk": {
1338 "name": "workos_vault_metadata_scope_id_id_pk",
1339 "columns": ["scope_id", "id"]
1340 }
1341 },
1342 "uniqueConstraints": {},
1343 "policies": {},
1344 "checkConstraints": {},
1345 "isRLSEnabled": false
1346 },
1347 "public.openapi_source_binding": {
1348 "name": "openapi_source_binding",
1349 "schema": "",
1350 "columns": {
1351 "id": {
1352 "name": "id",
1353 "type": "text",
1354 "primaryKey": true,
1355 "notNull": true
1356 },
1357 "source_id": {
1358 "name": "source_id",
1359 "type": "text",
1360 "primaryKey": false,
1361 "notNull": true
1362 },
1363 "source_scope_id": {
1364 "name": "source_scope_id",
1365 "type": "text",
1366 "primaryKey": false,
1367 "notNull": true
1368 },
1369 "target_scope_id": {
1370 "name": "target_scope_id",
1371 "type": "text",
1372 "primaryKey": false,
1373 "notNull": true
1374 },
1375 "slot": {
1376 "name": "slot",
1377 "type": "text",
1378 "primaryKey": false,
1379 "notNull": true
1380 },
1381 "value": {
1382 "name": "value",
1383 "type": "jsonb",
1384 "primaryKey": false,
1385 "notNull": true
1386 },
1387 "created_at": {
1388 "name": "created_at",
1389 "type": "timestamp",
1390 "primaryKey": false,
1391 "notNull": true
1392 },
1393 "updated_at": {
1394 "name": "updated_at",
1395 "type": "timestamp",
1396 "primaryKey": false,
1397 "notNull": true
1398 }
1399 },
1400 "indexes": {
1401 "openapi_source_binding_source_id_idx": {
1402 "name": "openapi_source_binding_source_id_idx",
1403 "columns": [
1404 {
1405 "expression": "source_id",
1406 "isExpression": false,
1407 "asc": true,
1408 "nulls": "last"
1409 }
1410 ],
1411 "isUnique": false,
1412 "concurrently": false,
1413 "method": "btree",
1414 "with": {}
1415 },
1416 "openapi_source_binding_source_scope_id_idx": {
1417 "name": "openapi_source_binding_source_scope_id_idx",
1418 "columns": [
1419 {
1420 "expression": "source_scope_id",
1421 "isExpression": false,
1422 "asc": true,
1423 "nulls": "last"
1424 }
1425 ],
1426 "isUnique": false,
1427 "concurrently": false,
1428 "method": "btree",
1429 "with": {}
1430 },
1431 "openapi_source_binding_target_scope_id_idx": {
1432 "name": "openapi_source_binding_target_scope_id_idx",
1433 "columns": [
1434 {
1435 "expression": "target_scope_id",
1436 "isExpression": false,
1437 "asc": true,
1438 "nulls": "last"
1439 }
1440 ],
1441 "isUnique": false,
1442 "concurrently": false,
1443 "method": "btree",
1444 "with": {}
1445 },
1446 "openapi_source_binding_slot_idx": {
1447 "name": "openapi_source_binding_slot_idx",
1448 "columns": [
1449 {
1450 "expression": "slot",
1451 "isExpression": false,
1452 "asc": true,
1453 "nulls": "last"
1454 }
1455 ],
1456 "isUnique": false,
1457 "concurrently": false,
1458 "method": "btree",
1459 "with": {}
1460 }
1461 },
1462 "foreignKeys": {},
1463 "compositePrimaryKeys": {},
1464 "uniqueConstraints": {},
1465 "policies": {},
1466 "checkConstraints": {},
1467 "isRLSEnabled": false
1468 },
1469 "public.tool_policy": {
1470 "name": "tool_policy",
1471 "schema": "",
1472 "columns": {
1473 "id": {
1474 "name": "id",
1475 "type": "text",
1476 "primaryKey": false,
1477 "notNull": true
1478 },
1479 "scope_id": {
1480 "name": "scope_id",
1481 "type": "text",
1482 "primaryKey": false,
1483 "notNull": true
1484 },
1485 "pattern": {
1486 "name": "pattern",
1487 "type": "text",
1488 "primaryKey": false,
1489 "notNull": true
1490 },
1491 "action": {
1492 "name": "action",
1493 "type": "text",
1494 "primaryKey": false,
1495 "notNull": true
1496 },
1497 "position": {
1498 "name": "position",
1499 "type": "text",
1500 "primaryKey": false,
1501 "notNull": true
1502 },
1503 "created_at": {
1504 "name": "created_at",
1505 "type": "timestamp",
1506 "primaryKey": false,
1507 "notNull": true
1508 },
1509 "updated_at": {
1510 "name": "updated_at",
1511 "type": "timestamp",
1512 "primaryKey": false,
1513 "notNull": true
1514 }
1515 },
1516 "indexes": {
1517 "tool_policy_scope_id_position_idx": {
1518 "name": "tool_policy_scope_id_position_idx",
1519 "columns": [
1520 {
1521 "expression": "scope_id",
1522 "isExpression": false,
1523 "asc": true,
1524 "nulls": "last"
1525 },
1526 {
1527 "expression": "position",
1528 "isExpression": false,
1529 "asc": true,
1530 "nulls": "last"
1531 }
1532 ],
1533 "isUnique": false,
1534 "concurrently": false,
1535 "method": "btree",
1536 "with": {}
1537 }
1538 },
1539 "foreignKeys": {},
1540 "compositePrimaryKeys": {
1541 "tool_policy_scope_id_id_pk": {
1542 "name": "tool_policy_scope_id_id_pk",
1543 "columns": ["scope_id", "id"]
1544 }
1545 },
1546 "uniqueConstraints": {},
1547 "policies": {},
1548 "checkConstraints": {},
1549 "isRLSEnabled": false
1550 }
1551 },
1552 "enums": {},
1553 "schemas": {},
1554 "sequences": {},
1555 "roles": {},
1556 "policies": {},
1557 "views": {},
1558 "_meta": {
1559 "columns": {},
1560 "schemas": {},
1561 "tables": {}
1562 }
1563}
apps/cloud/drizzle/meta/0007_snapshot.json+0−1583
@@ -1,1583 +0,0 @@
1{
2 "id": "f521e4d8-1eb4-4f84-8110-38fb5157aaca",
3 "prevId": "2ab0a02b-4dba-4ea4-bb6a-31ef0926942f",
4 "version": "7",
5 "dialect": "postgresql",
6 "tables": {
7 "public.accounts": {
8 "name": "accounts",
9 "schema": "",
10 "columns": {
11 "id": {
12 "name": "id",
13 "type": "text",
14 "primaryKey": true,
15 "notNull": true
16 },
17 "created_at": {
18 "name": "created_at",
19 "type": "timestamp with time zone",
20 "primaryKey": false,
21 "notNull": true,
22 "default": "now()"
23 }
24 },
25 "indexes": {},
26 "foreignKeys": {},
27 "compositePrimaryKeys": {},
28 "uniqueConstraints": {},
29 "policies": {},
30 "checkConstraints": {},
31 "isRLSEnabled": false
32 },
33 "public.memberships": {
34 "name": "memberships",
35 "schema": "",
36 "columns": {
37 "account_id": {
38 "name": "account_id",
39 "type": "text",
40 "primaryKey": false,
41 "notNull": true
42 },
43 "organization_id": {
44 "name": "organization_id",
45 "type": "text",
46 "primaryKey": false,
47 "notNull": true
48 },
49 "created_at": {
50 "name": "created_at",
51 "type": "timestamp with time zone",
52 "primaryKey": false,
53 "notNull": true,
54 "default": "now()"
55 }
56 },
57 "indexes": {},
58 "foreignKeys": {
59 "memberships_account_id_accounts_id_fk": {
60 "name": "memberships_account_id_accounts_id_fk",
61 "tableFrom": "memberships",
62 "tableTo": "accounts",
63 "columnsFrom": ["account_id"],
64 "columnsTo": ["id"],
65 "onDelete": "cascade",
66 "onUpdate": "no action"
67 },
68 "memberships_organization_id_organizations_id_fk": {
69 "name": "memberships_organization_id_organizations_id_fk",
70 "tableFrom": "memberships",
71 "tableTo": "organizations",
72 "columnsFrom": ["organization_id"],
73 "columnsTo": ["id"],
74 "onDelete": "cascade",
75 "onUpdate": "no action"
76 }
77 },
78 "compositePrimaryKeys": {
79 "memberships_account_id_organization_id_pk": {
80 "name": "memberships_account_id_organization_id_pk",
81 "columns": ["account_id", "organization_id"]
82 }
83 },
84 "uniqueConstraints": {},
85 "policies": {},
86 "checkConstraints": {},
87 "isRLSEnabled": false
88 },
89 "public.organizations": {
90 "name": "organizations",
91 "schema": "",
92 "columns": {
93 "id": {
94 "name": "id",
95 "type": "text",
96 "primaryKey": true,
97 "notNull": true
98 },
99 "name": {
100 "name": "name",
101 "type": "text",
102 "primaryKey": false,
103 "notNull": true
104 },
105 "created_at": {
106 "name": "created_at",
107 "type": "timestamp with time zone",
108 "primaryKey": false,
109 "notNull": true,
110 "default": "now()"
111 }
112 },
113 "indexes": {},
114 "foreignKeys": {},
115 "compositePrimaryKeys": {},
116 "uniqueConstraints": {},
117 "policies": {},
118 "checkConstraints": {},
119 "isRLSEnabled": false
120 },
121 "public.blob": {
122 "name": "blob",
123 "schema": "",
124 "columns": {
125 "namespace": {
126 "name": "namespace",
127 "type": "text",
128 "primaryKey": false,
129 "notNull": true
130 },
131 "key": {
132 "name": "key",
133 "type": "text",
134 "primaryKey": false,
135 "notNull": true
136 },
137 "value": {
138 "name": "value",
139 "type": "text",
140 "primaryKey": false,
141 "notNull": true
142 }
143 },
144 "indexes": {},
145 "foreignKeys": {},
146 "compositePrimaryKeys": {
147 "blob_namespace_key_pk": {
148 "name": "blob_namespace_key_pk",
149 "columns": ["namespace", "key"]
150 }
151 },
152 "uniqueConstraints": {},
153 "policies": {},
154 "checkConstraints": {},
155 "isRLSEnabled": false
156 },
157 "public.connection": {
158 "name": "connection",
159 "schema": "",
160 "columns": {
161 "id": {
162 "name": "id",
163 "type": "text",
164 "primaryKey": false,
165 "notNull": true
166 },
167 "scope_id": {
168 "name": "scope_id",
169 "type": "text",
170 "primaryKey": false,
171 "notNull": true
172 },
173 "provider": {
174 "name": "provider",
175 "type": "text",
176 "primaryKey": false,
177 "notNull": true
178 },
179 "identity_label": {
180 "name": "identity_label",
181 "type": "text",
182 "primaryKey": false,
183 "notNull": false
184 },
185 "access_token_secret_id": {
186 "name": "access_token_secret_id",
187 "type": "text",
188 "primaryKey": false,
189 "notNull": true
190 },
191 "refresh_token_secret_id": {
192 "name": "refresh_token_secret_id",
193 "type": "text",
194 "primaryKey": false,
195 "notNull": false
196 },
197 "expires_at": {
198 "name": "expires_at",
199 "type": "bigint",
200 "primaryKey": false,
201 "notNull": false
202 },
203 "scope": {
204 "name": "scope",
205 "type": "text",
206 "primaryKey": false,
207 "notNull": false
208 },
209 "provider_state": {
210 "name": "provider_state",
211 "type": "jsonb",
212 "primaryKey": false,
213 "notNull": false
214 },
215 "created_at": {
216 "name": "created_at",
217 "type": "timestamp",
218 "primaryKey": false,
219 "notNull": true
220 },
221 "updated_at": {
222 "name": "updated_at",
223 "type": "timestamp",
224 "primaryKey": false,
225 "notNull": true
226 }
227 },
228 "indexes": {
229 "connection_scope_id_idx": {
230 "name": "connection_scope_id_idx",
231 "columns": [
232 {
233 "expression": "scope_id",
234 "isExpression": false,
235 "asc": true,
236 "nulls": "last"
237 }
238 ],
239 "isUnique": false,
240 "concurrently": false,
241 "method": "btree",
242 "with": {}
243 },
244 "connection_provider_idx": {
245 "name": "connection_provider_idx",
246 "columns": [
247 {
248 "expression": "provider",
249 "isExpression": false,
250 "asc": true,
251 "nulls": "last"
252 }
253 ],
254 "isUnique": false,
255 "concurrently": false,
256 "method": "btree",
257 "with": {}
258 }
259 },
260 "foreignKeys": {},
261 "compositePrimaryKeys": {
262 "connection_scope_id_id_pk": {
263 "name": "connection_scope_id_id_pk",
264 "columns": ["scope_id", "id"]
265 }
266 },
267 "uniqueConstraints": {},
268 "policies": {},
269 "checkConstraints": {},
270 "isRLSEnabled": false
271 },
272 "public.definition": {
273 "name": "definition",
274 "schema": "",
275 "columns": {
276 "id": {
277 "name": "id",
278 "type": "text",
279 "primaryKey": false,
280 "notNull": true
281 },
282 "scope_id": {
283 "name": "scope_id",
284 "type": "text",
285 "primaryKey": false,
286 "notNull": true
287 },
288 "source_id": {
289 "name": "source_id",
290 "type": "text",
291 "primaryKey": false,
292 "notNull": true
293 },
294 "plugin_id": {
295 "name": "plugin_id",
296 "type": "text",
297 "primaryKey": false,
298 "notNull": true
299 },
300 "name": {
301 "name": "name",
302 "type": "text",
303 "primaryKey": false,
304 "notNull": true
305 },
306 "schema": {
307 "name": "schema",
308 "type": "jsonb",
309 "primaryKey": false,
310 "notNull": true
311 },
312 "created_at": {
313 "name": "created_at",
314 "type": "timestamp",
315 "primaryKey": false,
316 "notNull": true
317 }
318 },
319 "indexes": {
320 "definition_scope_id_idx": {
321 "name": "definition_scope_id_idx",
322 "columns": [
323 {
324 "expression": "scope_id",
325 "isExpression": false,
326 "asc": true,
327 "nulls": "last"
328 }
329 ],
330 "isUnique": false,
331 "concurrently": false,
332 "method": "btree",
333 "with": {}
334 },
335 "definition_source_id_idx": {
336 "name": "definition_source_id_idx",
337 "columns": [
338 {
339 "expression": "source_id",
340 "isExpression": false,
341 "asc": true,
342 "nulls": "last"
343 }
344 ],
345 "isUnique": false,
346 "concurrently": false,
347 "method": "btree",
348 "with": {}
349 },
350 "definition_plugin_id_idx": {
351 "name": "definition_plugin_id_idx",
352 "columns": [
353 {
354 "expression": "plugin_id",
355 "isExpression": false,
356 "asc": true,
357 "nulls": "last"
358 }
359 ],
360 "isUnique": false,
361 "concurrently": false,
362 "method": "btree",
363 "with": {}
364 }
365 },
366 "foreignKeys": {},
367 "compositePrimaryKeys": {
368 "definition_scope_id_id_pk": {
369 "name": "definition_scope_id_id_pk",
370 "columns": ["scope_id", "id"]
371 }
372 },
373 "uniqueConstraints": {},
374 "policies": {},
375 "checkConstraints": {},
376 "isRLSEnabled": false
377 },
378 "public.graphql_operation": {
379 "name": "graphql_operation",
380 "schema": "",
381 "columns": {
382 "id": {
383 "name": "id",
384 "type": "text",
385 "primaryKey": false,
386 "notNull": true
387 },
388 "scope_id": {
389 "name": "scope_id",
390 "type": "text",
391 "primaryKey": false,
392 "notNull": true
393 },
394 "source_id": {
395 "name": "source_id",
396 "type": "text",
397 "primaryKey": false,
398 "notNull": true
399 },
400 "binding": {
401 "name": "binding",
402 "type": "jsonb",
403 "primaryKey": false,
404 "notNull": true
405 }
406 },
407 "indexes": {
408 "graphql_operation_scope_id_idx": {
409 "name": "graphql_operation_scope_id_idx",
410 "columns": [
411 {
412 "expression": "scope_id",
413 "isExpression": false,
414 "asc": true,
415 "nulls": "last"
416 }
417 ],
418 "isUnique": false,
419 "concurrently": false,
420 "method": "btree",
421 "with": {}
422 },
423 "graphql_operation_source_id_idx": {
424 "name": "graphql_operation_source_id_idx",
425 "columns": [
426 {
427 "expression": "source_id",
428 "isExpression": false,
429 "asc": true,
430 "nulls": "last"
431 }
432 ],
433 "isUnique": false,
434 "concurrently": false,
435 "method": "btree",
436 "with": {}
437 }
438 },
439 "foreignKeys": {},
440 "compositePrimaryKeys": {
441 "graphql_operation_scope_id_id_pk": {
442 "name": "graphql_operation_scope_id_id_pk",
443 "columns": ["scope_id", "id"]
444 }
445 },
446 "uniqueConstraints": {},
447 "policies": {},
448 "checkConstraints": {},
449 "isRLSEnabled": false
450 },
451 "public.graphql_source": {
452 "name": "graphql_source",
453 "schema": "",
454 "columns": {
455 "id": {
456 "name": "id",
457 "type": "text",
458 "primaryKey": false,
459 "notNull": true
460 },
461 "scope_id": {
462 "name": "scope_id",
463 "type": "text",
464 "primaryKey": false,
465 "notNull": true
466 },
467 "name": {
468 "name": "name",
469 "type": "text",
470 "primaryKey": false,
471 "notNull": true
472 },
473 "endpoint": {
474 "name": "endpoint",
475 "type": "text",
476 "primaryKey": false,
477 "notNull": true
478 },
479 "headers": {
480 "name": "headers",
481 "type": "jsonb",
482 "primaryKey": false,
483 "notNull": false
484 },
485 "query_params": {
486 "name": "query_params",
487 "type": "jsonb",
488 "primaryKey": false,
489 "notNull": false
490 },
491 "auth": {
492 "name": "auth",
493 "type": "jsonb",
494 "primaryKey": false,
495 "notNull": false
496 }
497 },
498 "indexes": {
499 "graphql_source_scope_id_idx": {
500 "name": "graphql_source_scope_id_idx",
501 "columns": [
502 {
503 "expression": "scope_id",
504 "isExpression": false,
505 "asc": true,
506 "nulls": "last"
507 }
508 ],
509 "isUnique": false,
510 "concurrently": false,
511 "method": "btree",
512 "with": {}
513 }
514 },
515 "foreignKeys": {},
516 "compositePrimaryKeys": {
517 "graphql_source_scope_id_id_pk": {
518 "name": "graphql_source_scope_id_id_pk",
519 "columns": ["scope_id", "id"]
520 }
521 },
522 "uniqueConstraints": {},
523 "policies": {},
524 "checkConstraints": {},
525 "isRLSEnabled": false
526 },
527 "public.mcp_binding": {
528 "name": "mcp_binding",
529 "schema": "",
530 "columns": {
531 "id": {
532 "name": "id",
533 "type": "text",
534 "primaryKey": false,
535 "notNull": true
536 },
537 "scope_id": {
538 "name": "scope_id",
539 "type": "text",
540 "primaryKey": false,
541 "notNull": true
542 },
543 "source_id": {
544 "name": "source_id",
545 "type": "text",
546 "primaryKey": false,
547 "notNull": true
548 },
549 "binding": {
550 "name": "binding",
551 "type": "jsonb",
552 "primaryKey": false,
553 "notNull": true
554 },
555 "created_at": {
556 "name": "created_at",
557 "type": "timestamp",
558 "primaryKey": false,
559 "notNull": true
560 }
561 },
562 "indexes": {
563 "mcp_binding_scope_id_idx": {
564 "name": "mcp_binding_scope_id_idx",
565 "columns": [
566 {
567 "expression": "scope_id",
568 "isExpression": false,
569 "asc": true,
570 "nulls": "last"
571 }
572 ],
573 "isUnique": false,
574 "concurrently": false,
575 "method": "btree",
576 "with": {}
577 },
578 "mcp_binding_source_id_idx": {
579 "name": "mcp_binding_source_id_idx",
580 "columns": [
581 {
582 "expression": "source_id",
583 "isExpression": false,
584 "asc": true,
585 "nulls": "last"
586 }
587 ],
588 "isUnique": false,
589 "concurrently": false,
590 "method": "btree",
591 "with": {}
592 }
593 },
594 "foreignKeys": {},
595 "compositePrimaryKeys": {
596 "mcp_binding_scope_id_id_pk": {
597 "name": "mcp_binding_scope_id_id_pk",
598 "columns": ["scope_id", "id"]
599 }
600 },
601 "uniqueConstraints": {},
602 "policies": {},
603 "checkConstraints": {},
604 "isRLSEnabled": false
605 },
606 "public.mcp_source": {
607 "name": "mcp_source",
608 "schema": "",
609 "columns": {
610 "id": {
611 "name": "id",
612 "type": "text",
613 "primaryKey": false,
614 "notNull": true
615 },
616 "scope_id": {
617 "name": "scope_id",
618 "type": "text",
619 "primaryKey": false,
620 "notNull": true
621 },
622 "name": {
623 "name": "name",
624 "type": "text",
625 "primaryKey": false,
626 "notNull": true
627 },
628 "config": {
629 "name": "config",
630 "type": "jsonb",
631 "primaryKey": false,
632 "notNull": true
633 },
634 "created_at": {
635 "name": "created_at",
636 "type": "timestamp",
637 "primaryKey": false,
638 "notNull": true
639 }
640 },
641 "indexes": {
642 "mcp_source_scope_id_idx": {
643 "name": "mcp_source_scope_id_idx",
644 "columns": [
645 {
646 "expression": "scope_id",
647 "isExpression": false,
648 "asc": true,
649 "nulls": "last"
650 }
651 ],
652 "isUnique": false,
653 "concurrently": false,
654 "method": "btree",
655 "with": {}
656 }
657 },
658 "foreignKeys": {},
659 "compositePrimaryKeys": {
660 "mcp_source_scope_id_id_pk": {
661 "name": "mcp_source_scope_id_id_pk",
662 "columns": ["scope_id", "id"]
663 }
664 },
665 "uniqueConstraints": {},
666 "policies": {},
667 "checkConstraints": {},
668 "isRLSEnabled": false
669 },
670 "public.oauth2_session": {
671 "name": "oauth2_session",
672 "schema": "",
673 "columns": {
674 "id": {
675 "name": "id",
676 "type": "text",
677 "primaryKey": false,
678 "notNull": true
679 },
680 "scope_id": {
681 "name": "scope_id",
682 "type": "text",
683 "primaryKey": false,
684 "notNull": true
685 },
686 "plugin_id": {
687 "name": "plugin_id",
688 "type": "text",
689 "primaryKey": false,
690 "notNull": true
691 },
692 "strategy": {
693 "name": "strategy",
694 "type": "text",
695 "primaryKey": false,
696 "notNull": true
697 },
698 "connection_id": {
699 "name": "connection_id",
700 "type": "text",
701 "primaryKey": false,
702 "notNull": true
703 },
704 "token_scope": {
705 "name": "token_scope",
706 "type": "text",
707 "primaryKey": false,
708 "notNull": true
709 },
710 "redirect_url": {
711 "name": "redirect_url",
712 "type": "text",
713 "primaryKey": false,
714 "notNull": true
715 },
716 "payload": {
717 "name": "payload",
718 "type": "jsonb",
719 "primaryKey": false,
720 "notNull": true
721 },
722 "expires_at": {
723 "name": "expires_at",
724 "type": "bigint",
725 "primaryKey": false,
726 "notNull": true
727 },
728 "created_at": {
729 "name": "created_at",
730 "type": "timestamp",
731 "primaryKey": false,
732 "notNull": true
733 }
734 },
735 "indexes": {
736 "oauth2_session_scope_id_idx": {
737 "name": "oauth2_session_scope_id_idx",
738 "columns": [
739 {
740 "expression": "scope_id",
741 "isExpression": false,
742 "asc": true,
743 "nulls": "last"
744 }
745 ],
746 "isUnique": false,
747 "concurrently": false,
748 "method": "btree",
749 "with": {}
750 },
751 "oauth2_session_plugin_id_idx": {
752 "name": "oauth2_session_plugin_id_idx",
753 "columns": [
754 {
755 "expression": "plugin_id",
756 "isExpression": false,
757 "asc": true,
758 "nulls": "last"
759 }
760 ],
761 "isUnique": false,
762 "concurrently": false,
763 "method": "btree",
764 "with": {}
765 },
766 "oauth2_session_connection_id_idx": {
767 "name": "oauth2_session_connection_id_idx",
768 "columns": [
769 {
770 "expression": "connection_id",
771 "isExpression": false,
772 "asc": true,
773 "nulls": "last"
774 }
775 ],
776 "isUnique": false,
777 "concurrently": false,
778 "method": "btree",
779 "with": {}
780 }
781 },
782 "foreignKeys": {},
783 "compositePrimaryKeys": {
784 "oauth2_session_scope_id_id_pk": {
785 "name": "oauth2_session_scope_id_id_pk",
786 "columns": ["scope_id", "id"]
787 }
788 },
789 "uniqueConstraints": {},
790 "policies": {},
791 "checkConstraints": {},
792 "isRLSEnabled": false
793 },
794 "public.openapi_operation": {
795 "name": "openapi_operation",
796 "schema": "",
797 "columns": {
798 "id": {
799 "name": "id",
800 "type": "text",
801 "primaryKey": false,
802 "notNull": true
803 },
804 "scope_id": {
805 "name": "scope_id",
806 "type": "text",
807 "primaryKey": false,
808 "notNull": true
809 },
810 "source_id": {
811 "name": "source_id",
812 "type": "text",
813 "primaryKey": false,
814 "notNull": true
815 },
816 "binding": {
817 "name": "binding",
818 "type": "jsonb",
819 "primaryKey": false,
820 "notNull": true
821 }
822 },
823 "indexes": {
824 "openapi_operation_scope_id_idx": {
825 "name": "openapi_operation_scope_id_idx",
826 "columns": [
827 {
828 "expression": "scope_id",
829 "isExpression": false,
830 "asc": true,
831 "nulls": "last"
832 }
833 ],
834 "isUnique": false,
835 "concurrently": false,
836 "method": "btree",
837 "with": {}
838 },
839 "openapi_operation_source_id_idx": {
840 "name": "openapi_operation_source_id_idx",
841 "columns": [
842 {
843 "expression": "source_id",
844 "isExpression": false,
845 "asc": true,
846 "nulls": "last"
847 }
848 ],
849 "isUnique": false,
850 "concurrently": false,
851 "method": "btree",
852 "with": {}
853 }
854 },
855 "foreignKeys": {},
856 "compositePrimaryKeys": {
857 "openapi_operation_scope_id_id_pk": {
858 "name": "openapi_operation_scope_id_id_pk",
859 "columns": ["scope_id", "id"]
860 }
861 },
862 "uniqueConstraints": {},
863 "policies": {},
864 "checkConstraints": {},
865 "isRLSEnabled": false
866 },
867 "public.openapi_source": {
868 "name": "openapi_source",
869 "schema": "",
870 "columns": {
871 "id": {
872 "name": "id",
873 "type": "text",
874 "primaryKey": false,
875 "notNull": true
876 },
877 "scope_id": {
878 "name": "scope_id",
879 "type": "text",
880 "primaryKey": false,
881 "notNull": true
882 },
883 "name": {
884 "name": "name",
885 "type": "text",
886 "primaryKey": false,
887 "notNull": true
888 },
889 "spec": {
890 "name": "spec",
891 "type": "text",
892 "primaryKey": false,
893 "notNull": true
894 },
895 "source_url": {
896 "name": "source_url",
897 "type": "text",
898 "primaryKey": false,
899 "notNull": false
900 },
901 "base_url": {
902 "name": "base_url",
903 "type": "text",
904 "primaryKey": false,
905 "notNull": false
906 },
907 "headers": {
908 "name": "headers",
909 "type": "jsonb",
910 "primaryKey": false,
911 "notNull": false
912 },
913 "query_params": {
914 "name": "query_params",
915 "type": "jsonb",
916 "primaryKey": false,
917 "notNull": false
918 },
919 "oauth2": {
920 "name": "oauth2",
921 "type": "jsonb",
922 "primaryKey": false,
923 "notNull": false
924 },
925 "invocation_config": {
926 "name": "invocation_config",
927 "type": "jsonb",
928 "primaryKey": false,
929 "notNull": true
930 }
931 },
932 "indexes": {
933 "openapi_source_scope_id_idx": {
934 "name": "openapi_source_scope_id_idx",
935 "columns": [
936 {
937 "expression": "scope_id",
938 "isExpression": false,
939 "asc": true,
940 "nulls": "last"
941 }
942 ],
943 "isUnique": false,
944 "concurrently": false,
945 "method": "btree",
946 "with": {}
947 }
948 },
949 "foreignKeys": {},
950 "compositePrimaryKeys": {
951 "openapi_source_scope_id_id_pk": {
952 "name": "openapi_source_scope_id_id_pk",
953 "columns": ["scope_id", "id"]
954 }
955 },
956 "uniqueConstraints": {},
957 "policies": {},
958 "checkConstraints": {},
959 "isRLSEnabled": false
960 },
961 "public.openapi_source_binding": {
962 "name": "openapi_source_binding",
963 "schema": "",
964 "columns": {
965 "id": {
966 "name": "id",
967 "type": "text",
968 "primaryKey": true,
969 "notNull": true
970 },
971 "source_id": {
972 "name": "source_id",
973 "type": "text",
974 "primaryKey": false,
975 "notNull": true
976 },
977 "source_scope_id": {
978 "name": "source_scope_id",
979 "type": "text",
980 "primaryKey": false,
981 "notNull": true
982 },
983 "target_scope_id": {
984 "name": "target_scope_id",
985 "type": "text",
986 "primaryKey": false,
987 "notNull": true
988 },
989 "slot": {
990 "name": "slot",
991 "type": "text",
992 "primaryKey": false,
993 "notNull": true
994 },
995 "value": {
996 "name": "value",
997 "type": "jsonb",
998 "primaryKey": false,
999 "notNull": true
1000 },
1001 "created_at": {
1002 "name": "created_at",
1003 "type": "timestamp",
1004 "primaryKey": false,
1005 "notNull": true
1006 },
1007 "updated_at": {
1008 "name": "updated_at",
1009 "type": "timestamp",
1010 "primaryKey": false,
1011 "notNull": true
1012 }
1013 },
1014 "indexes": {
1015 "openapi_source_binding_source_id_idx": {
1016 "name": "openapi_source_binding_source_id_idx",
1017 "columns": [
1018 {
1019 "expression": "source_id",
1020 "isExpression": false,
1021 "asc": true,
1022 "nulls": "last"
1023 }
1024 ],
1025 "isUnique": false,
1026 "concurrently": false,
1027 "method": "btree",
1028 "with": {}
1029 },
1030 "openapi_source_binding_source_scope_id_idx": {
1031 "name": "openapi_source_binding_source_scope_id_idx",
1032 "columns": [
1033 {
1034 "expression": "source_scope_id",
1035 "isExpression": false,
1036 "asc": true,
1037 "nulls": "last"
1038 }
1039 ],
1040 "isUnique": false,
1041 "concurrently": false,
1042 "method": "btree",
1043 "with": {}
1044 },
1045 "openapi_source_binding_target_scope_id_idx": {
1046 "name": "openapi_source_binding_target_scope_id_idx",
1047 "columns": [
1048 {
1049 "expression": "target_scope_id",
1050 "isExpression": false,
1051 "asc": true,
1052 "nulls": "last"
1053 }
1054 ],
1055 "isUnique": false,
1056 "concurrently": false,
1057 "method": "btree",
1058 "with": {}
1059 },
1060 "openapi_source_binding_slot_idx": {
1061 "name": "openapi_source_binding_slot_idx",
1062 "columns": [
1063 {
1064 "expression": "slot",
1065 "isExpression": false,
1066 "asc": true,
1067 "nulls": "last"
1068 }
1069 ],
1070 "isUnique": false,
1071 "concurrently": false,
1072 "method": "btree",
1073 "with": {}
1074 }
1075 },
1076 "foreignKeys": {},
1077 "compositePrimaryKeys": {},
1078 "uniqueConstraints": {},
1079 "policies": {},
1080 "checkConstraints": {},
1081 "isRLSEnabled": false
1082 },
1083 "public.secret": {
1084 "name": "secret",
1085 "schema": "",
1086 "columns": {
1087 "id": {
1088 "name": "id",
1089 "type": "text",
1090 "primaryKey": false,
1091 "notNull": true
1092 },
1093 "scope_id": {
1094 "name": "scope_id",
1095 "type": "text",
1096 "primaryKey": false,
1097 "notNull": true
1098 },
1099 "name": {
1100 "name": "name",
1101 "type": "text",
1102 "primaryKey": false,
1103 "notNull": true
1104 },
1105 "provider": {
1106 "name": "provider",
1107 "type": "text",
1108 "primaryKey": false,
1109 "notNull": true
1110 },
1111 "owned_by_connection_id": {
1112 "name": "owned_by_connection_id",
1113 "type": "text",
1114 "primaryKey": false,
1115 "notNull": false
1116 },
1117 "created_at": {
1118 "name": "created_at",
1119 "type": "timestamp",
1120 "primaryKey": false,
1121 "notNull": true
1122 }
1123 },
1124 "indexes": {
1125 "secret_scope_id_idx": {
1126 "name": "secret_scope_id_idx",
1127 "columns": [
1128 {
1129 "expression": "scope_id",
1130 "isExpression": false,
1131 "asc": true,
1132 "nulls": "last"
1133 }
1134 ],
1135 "isUnique": false,
1136 "concurrently": false,
1137 "method": "btree",
1138 "with": {}
1139 },
1140 "secret_provider_idx": {
1141 "name": "secret_provider_idx",
1142 "columns": [
1143 {
1144 "expression": "provider",
1145 "isExpression": false,
1146 "asc": true,
1147 "nulls": "last"
1148 }
1149 ],
1150 "isUnique": false,
1151 "concurrently": false,
1152 "method": "btree",
1153 "with": {}
1154 },
1155 "secret_owned_by_connection_id_idx": {
1156 "name": "secret_owned_by_connection_id_idx",
1157 "columns": [
1158 {
1159 "expression": "owned_by_connection_id",
1160 "isExpression": false,
1161 "asc": true,
1162 "nulls": "last"
1163 }
1164 ],
1165 "isUnique": false,
1166 "concurrently": false,
1167 "method": "btree",
1168 "with": {}
1169 }
1170 },
1171 "foreignKeys": {},
1172 "compositePrimaryKeys": {
1173 "secret_scope_id_id_pk": {
1174 "name": "secret_scope_id_id_pk",
1175 "columns": ["scope_id", "id"]
1176 }
1177 },
1178 "uniqueConstraints": {},
1179 "policies": {},
1180 "checkConstraints": {},
1181 "isRLSEnabled": false
1182 },
1183 "public.source": {
1184 "name": "source",
1185 "schema": "",
1186 "columns": {
1187 "id": {
1188 "name": "id",
1189 "type": "text",
1190 "primaryKey": false,
1191 "notNull": true
1192 },
1193 "scope_id": {
1194 "name": "scope_id",
1195 "type": "text",
1196 "primaryKey": false,
1197 "notNull": true
1198 },
1199 "plugin_id": {
1200 "name": "plugin_id",
1201 "type": "text",
1202 "primaryKey": false,
1203 "notNull": true
1204 },
1205 "kind": {
1206 "name": "kind",
1207 "type": "text",
1208 "primaryKey": false,
1209 "notNull": true
1210 },
1211 "name": {
1212 "name": "name",
1213 "type": "text",
1214 "primaryKey": false,
1215 "notNull": true
1216 },
1217 "url": {
1218 "name": "url",
1219 "type": "text",
1220 "primaryKey": false,
1221 "notNull": false
1222 },
1223 "can_remove": {
1224 "name": "can_remove",
1225 "type": "boolean",
1226 "primaryKey": false,
1227 "notNull": true,
1228 "default": true
1229 },
1230 "can_refresh": {
1231 "name": "can_refresh",
1232 "type": "boolean",
1233 "primaryKey": false,
1234 "notNull": true,
1235 "default": false
1236 },
1237 "can_edit": {
1238 "name": "can_edit",
1239 "type": "boolean",
1240 "primaryKey": false,
1241 "notNull": true,
1242 "default": false
1243 },
1244 "created_at": {
1245 "name": "created_at",
1246 "type": "timestamp",
1247 "primaryKey": false,
1248 "notNull": true
1249 },
1250 "updated_at": {
1251 "name": "updated_at",
1252 "type": "timestamp",
1253 "primaryKey": false,
1254 "notNull": true
1255 }
1256 },
1257 "indexes": {
1258 "source_scope_id_idx": {
1259 "name": "source_scope_id_idx",
1260 "columns": [
1261 {
1262 "expression": "scope_id",
1263 "isExpression": false,
1264 "asc": true,
1265 "nulls": "last"
1266 }
1267 ],
1268 "isUnique": false,
1269 "concurrently": false,
1270 "method": "btree",
1271 "with": {}
1272 },
1273 "source_plugin_id_idx": {
1274 "name": "source_plugin_id_idx",
1275 "columns": [
1276 {
1277 "expression": "plugin_id",
1278 "isExpression": false,
1279 "asc": true,
1280 "nulls": "last"
1281 }
1282 ],
1283 "isUnique": false,
1284 "concurrently": false,
1285 "method": "btree",
1286 "with": {}
1287 }
1288 },
1289 "foreignKeys": {},
1290 "compositePrimaryKeys": {
1291 "source_scope_id_id_pk": {
1292 "name": "source_scope_id_id_pk",
1293 "columns": ["scope_id", "id"]
1294 }
1295 },
1296 "uniqueConstraints": {},
1297 "policies": {},
1298 "checkConstraints": {},
1299 "isRLSEnabled": false
1300 },
1301 "public.tool": {
1302 "name": "tool",
1303 "schema": "",
1304 "columns": {
1305 "id": {
1306 "name": "id",
1307 "type": "text",
1308 "primaryKey": false,
1309 "notNull": true
1310 },
1311 "scope_id": {
1312 "name": "scope_id",
1313 "type": "text",
1314 "primaryKey": false,
1315 "notNull": true
1316 },
1317 "source_id": {
1318 "name": "source_id",
1319 "type": "text",
1320 "primaryKey": false,
1321 "notNull": true
1322 },
1323 "plugin_id": {
1324 "name": "plugin_id",
1325 "type": "text",
1326 "primaryKey": false,
1327 "notNull": true
1328 },
1329 "name": {
1330 "name": "name",
1331 "type": "text",
1332 "primaryKey": false,
1333 "notNull": true
1334 },
1335 "description": {
1336 "name": "description",
1337 "type": "text",
1338 "primaryKey": false,
1339 "notNull": true
1340 },
1341 "input_schema": {
1342 "name": "input_schema",
1343 "type": "jsonb",
1344 "primaryKey": false,
1345 "notNull": false
1346 },
1347 "output_schema": {
1348 "name": "output_schema",
1349 "type": "jsonb",
1350 "primaryKey": false,
1351 "notNull": false
1352 },
1353 "created_at": {
1354 "name": "created_at",
1355 "type": "timestamp",
1356 "primaryKey": false,
1357 "notNull": true
1358 },
1359 "updated_at": {
1360 "name": "updated_at",
1361 "type": "timestamp",
1362 "primaryKey": false,
1363 "notNull": true
1364 }
1365 },
1366 "indexes": {
1367 "tool_scope_id_idx": {
1368 "name": "tool_scope_id_idx",
1369 "columns": [
1370 {
1371 "expression": "scope_id",
1372 "isExpression": false,
1373 "asc": true,
1374 "nulls": "last"
1375 }
1376 ],
1377 "isUnique": false,
1378 "concurrently": false,
1379 "method": "btree",
1380 "with": {}
1381 },
1382 "tool_source_id_idx": {
1383 "name": "tool_source_id_idx",
1384 "columns": [
1385 {
1386 "expression": "source_id",
1387 "isExpression": false,
1388 "asc": true,
1389 "nulls": "last"
1390 }
1391 ],
1392 "isUnique": false,
1393 "concurrently": false,
1394 "method": "btree",
1395 "with": {}
1396 },
1397 "tool_plugin_id_idx": {
1398 "name": "tool_plugin_id_idx",
1399 "columns": [
1400 {
1401 "expression": "plugin_id",
1402 "isExpression": false,
1403 "asc": true,
1404 "nulls": "last"
1405 }
1406 ],
1407 "isUnique": false,
1408 "concurrently": false,
1409 "method": "btree",
1410 "with": {}
1411 }
1412 },
1413 "foreignKeys": {},
1414 "compositePrimaryKeys": {
1415 "tool_scope_id_id_pk": {
1416 "name": "tool_scope_id_id_pk",
1417 "columns": ["scope_id", "id"]
1418 }
1419 },
1420 "uniqueConstraints": {},
1421 "policies": {},
1422 "checkConstraints": {},
1423 "isRLSEnabled": false
1424 },
1425 "public.tool_policy": {
1426 "name": "tool_policy",
1427 "schema": "",
1428 "columns": {
1429 "id": {
1430 "name": "id",
1431 "type": "text",
1432 "primaryKey": false,
1433 "notNull": true
1434 },
1435 "scope_id": {
1436 "name": "scope_id",
1437 "type": "text",
1438 "primaryKey": false,
1439 "notNull": true
1440 },
1441 "pattern": {
1442 "name": "pattern",
1443 "type": "text",
1444 "primaryKey": false,
1445 "notNull": true
1446 },
1447 "action": {
1448 "name": "action",
1449 "type": "text",
1450 "primaryKey": false,
1451 "notNull": true
1452 },
1453 "position": {
1454 "name": "position",
1455 "type": "text",
1456 "primaryKey": false,
1457 "notNull": true
1458 },
1459 "created_at": {
1460 "name": "created_at",
1461 "type": "timestamp",
1462 "primaryKey": false,
1463 "notNull": true
1464 },
1465 "updated_at": {
1466 "name": "updated_at",
1467 "type": "timestamp",
1468 "primaryKey": false,
1469 "notNull": true
1470 }
1471 },
1472 "indexes": {
1473 "tool_policy_scope_id_position_idx": {
1474 "name": "tool_policy_scope_id_position_idx",
1475 "columns": [
1476 {
1477 "expression": "scope_id",
1478 "isExpression": false,
1479 "asc": true,
1480 "nulls": "last"
1481 },
1482 {
1483 "expression": "position",
1484 "isExpression": false,
1485 "asc": true,
1486 "nulls": "last"
1487 }
1488 ],
1489 "isUnique": false,
1490 "concurrently": false,
1491 "method": "btree",
1492 "with": {}
1493 }
1494 },
1495 "foreignKeys": {},
1496 "compositePrimaryKeys": {
1497 "tool_policy_scope_id_id_pk": {
1498 "name": "tool_policy_scope_id_id_pk",
1499 "columns": ["scope_id", "id"]
1500 }
1501 },
1502 "uniqueConstraints": {},
1503 "policies": {},
1504 "checkConstraints": {},
1505 "isRLSEnabled": false
1506 },
1507 "public.workos_vault_metadata": {
1508 "name": "workos_vault_metadata",
1509 "schema": "",
1510 "columns": {
1511 "id": {
1512 "name": "id",
1513 "type": "text",
1514 "primaryKey": false,
1515 "notNull": true
1516 },
1517 "scope_id": {
1518 "name": "scope_id",
1519 "type": "text",
1520 "primaryKey": false,
1521 "notNull": true
1522 },
1523 "name": {
1524 "name": "name",
1525 "type": "text",
1526 "primaryKey": false,
1527 "notNull": true
1528 },
1529 "purpose": {
1530 "name": "purpose",
1531 "type": "text",
1532 "primaryKey": false,
1533 "notNull": false
1534 },
1535 "created_at": {
1536 "name": "created_at",
1537 "type": "timestamp",
1538 "primaryKey": false,
1539 "notNull": true
1540 }
1541 },
1542 "indexes": {
1543 "workos_vault_metadata_scope_id_idx": {
1544 "name": "workos_vault_metadata_scope_id_idx",
1545 "columns": [
1546 {
1547 "expression": "scope_id",
1548 "isExpression": false,
1549 "asc": true,
1550 "nulls": "last"
1551 }
1552 ],
1553 "isUnique": false,
1554 "concurrently": false,
1555 "method": "btree",
1556 "with": {}
1557 }
1558 },
1559 "foreignKeys": {},
1560 "compositePrimaryKeys": {
1561 "workos_vault_metadata_scope_id_id_pk": {
1562 "name": "workos_vault_metadata_scope_id_id_pk",
1563 "columns": ["scope_id", "id"]
1564 }
1565 },
1566 "uniqueConstraints": {},
1567 "policies": {},
1568 "checkConstraints": {},
1569 "isRLSEnabled": false
1570 }
1571 },
1572 "enums": {},
1573 "schemas": {},
1574 "sequences": {},
1575 "roles": {},
1576 "policies": {},
1577 "views": {},
1578 "_meta": {
1579 "columns": {},
1580 "schemas": {},
1581 "tables": {}
1582 }
1583}
apps/cloud/drizzle/meta/0008_snapshot.json+0−2517
@@ -1,2517 +0,0 @@
1{
2 "id": "b8d89563-58e1-4e6b-8674-f502338978e2",
3 "prevId": "f521e4d8-1eb4-4f84-8110-38fb5157aaca",
4 "version": "7",
5 "dialect": "postgresql",
6 "tables": {
7 "public.accounts": {
8 "name": "accounts",
9 "schema": "",
10 "columns": {
11 "id": {
12 "name": "id",
13 "type": "text",
14 "primaryKey": true,
15 "notNull": true
16 },
17 "created_at": {
18 "name": "created_at",
19 "type": "timestamp with time zone",
20 "primaryKey": false,
21 "notNull": true,
22 "default": "now()"
23 }
24 },
25 "indexes": {},
26 "foreignKeys": {},
27 "compositePrimaryKeys": {},
28 "uniqueConstraints": {},
29 "policies": {},
30 "checkConstraints": {},
31 "isRLSEnabled": false
32 },
33 "public.memberships": {
34 "name": "memberships",
35 "schema": "",
36 "columns": {
37 "account_id": {
38 "name": "account_id",
39 "type": "text",
40 "primaryKey": false,
41 "notNull": true
42 },
43 "organization_id": {
44 "name": "organization_id",
45 "type": "text",
46 "primaryKey": false,
47 "notNull": true
48 },
49 "created_at": {
50 "name": "created_at",
51 "type": "timestamp with time zone",
52 "primaryKey": false,
53 "notNull": true,
54 "default": "now()"
55 }
56 },
57 "indexes": {},
58 "foreignKeys": {
59 "memberships_account_id_accounts_id_fk": {
60 "name": "memberships_account_id_accounts_id_fk",
61 "tableFrom": "memberships",
62 "tableTo": "accounts",
63 "columnsFrom": ["account_id"],
64 "columnsTo": ["id"],
65 "onDelete": "cascade",
66 "onUpdate": "no action"
67 },
68 "memberships_organization_id_organizations_id_fk": {
69 "name": "memberships_organization_id_organizations_id_fk",
70 "tableFrom": "memberships",
71 "tableTo": "organizations",
72 "columnsFrom": ["organization_id"],
73 "columnsTo": ["id"],
74 "onDelete": "cascade",
75 "onUpdate": "no action"
76 }
77 },
78 "compositePrimaryKeys": {
79 "memberships_account_id_organization_id_pk": {
80 "name": "memberships_account_id_organization_id_pk",
81 "columns": ["account_id", "organization_id"]
82 }
83 },
84 "uniqueConstraints": {},
85 "policies": {},
86 "checkConstraints": {},
87 "isRLSEnabled": false
88 },
89 "public.organizations": {
90 "name": "organizations",
91 "schema": "",
92 "columns": {
93 "id": {
94 "name": "id",
95 "type": "text",
96 "primaryKey": true,
97 "notNull": true
98 },
99 "name": {
100 "name": "name",
101 "type": "text",
102 "primaryKey": false,
103 "notNull": true
104 },
105 "created_at": {
106 "name": "created_at",
107 "type": "timestamp with time zone",
108 "primaryKey": false,
109 "notNull": true,
110 "default": "now()"
111 }
112 },
113 "indexes": {},
114 "foreignKeys": {},
115 "compositePrimaryKeys": {},
116 "uniqueConstraints": {},
117 "policies": {},
118 "checkConstraints": {},
119 "isRLSEnabled": false
120 },
121 "public.blob": {
122 "name": "blob",
123 "schema": "",
124 "columns": {
125 "namespace": {
126 "name": "namespace",
127 "type": "text",
128 "primaryKey": false,
129 "notNull": true
130 },
131 "key": {
132 "name": "key",
133 "type": "text",
134 "primaryKey": false,
135 "notNull": true
136 },
137 "value": {
138 "name": "value",
139 "type": "text",
140 "primaryKey": false,
141 "notNull": true
142 }
143 },
144 "indexes": {},
145 "foreignKeys": {},
146 "compositePrimaryKeys": {
147 "blob_namespace_key_pk": {
148 "name": "blob_namespace_key_pk",
149 "columns": ["namespace", "key"]
150 }
151 },
152 "uniqueConstraints": {},
153 "policies": {},
154 "checkConstraints": {},
155 "isRLSEnabled": false
156 },
157 "public.connection": {
158 "name": "connection",
159 "schema": "",
160 "columns": {
161 "id": {
162 "name": "id",
163 "type": "text",
164 "primaryKey": false,
165 "notNull": true
166 },
167 "scope_id": {
168 "name": "scope_id",
169 "type": "text",
170 "primaryKey": false,
171 "notNull": true
172 },
173 "provider": {
174 "name": "provider",
175 "type": "text",
176 "primaryKey": false,
177 "notNull": true
178 },
179 "identity_label": {
180 "name": "identity_label",
181 "type": "text",
182 "primaryKey": false,
183 "notNull": false
184 },
185 "access_token_secret_id": {
186 "name": "access_token_secret_id",
187 "type": "text",
188 "primaryKey": false,
189 "notNull": true
190 },
191 "refresh_token_secret_id": {
192 "name": "refresh_token_secret_id",
193 "type": "text",
194 "primaryKey": false,
195 "notNull": false
196 },
197 "expires_at": {
198 "name": "expires_at",
199 "type": "bigint",
200 "primaryKey": false,
201 "notNull": false
202 },
203 "scope": {
204 "name": "scope",
205 "type": "text",
206 "primaryKey": false,
207 "notNull": false
208 },
209 "provider_state": {
210 "name": "provider_state",
211 "type": "jsonb",
212 "primaryKey": false,
213 "notNull": false
214 },
215 "created_at": {
216 "name": "created_at",
217 "type": "timestamp",
218 "primaryKey": false,
219 "notNull": true
220 },
221 "updated_at": {
222 "name": "updated_at",
223 "type": "timestamp",
224 "primaryKey": false,
225 "notNull": true
226 }
227 },
228 "indexes": {
229 "connection_scope_id_idx": {
230 "name": "connection_scope_id_idx",
231 "columns": [
232 {
233 "expression": "scope_id",
234 "isExpression": false,
235 "asc": true,
236 "nulls": "last"
237 }
238 ],
239 "isUnique": false,
240 "concurrently": false,
241 "method": "btree",
242 "with": {}
243 },
244 "connection_provider_idx": {
245 "name": "connection_provider_idx",
246 "columns": [
247 {
248 "expression": "provider",
249 "isExpression": false,
250 "asc": true,
251 "nulls": "last"
252 }
253 ],
254 "isUnique": false,
255 "concurrently": false,
256 "method": "btree",
257 "with": {}
258 }
259 },
260 "foreignKeys": {},
261 "compositePrimaryKeys": {
262 "connection_scope_id_id_pk": {
263 "name": "connection_scope_id_id_pk",
264 "columns": ["scope_id", "id"]
265 }
266 },
267 "uniqueConstraints": {},
268 "policies": {},
269 "checkConstraints": {},
270 "isRLSEnabled": false
271 },
272 "public.definition": {
273 "name": "definition",
274 "schema": "",
275 "columns": {
276 "id": {
277 "name": "id",
278 "type": "text",
279 "primaryKey": false,
280 "notNull": true
281 },
282 "scope_id": {
283 "name": "scope_id",
284 "type": "text",
285 "primaryKey": false,
286 "notNull": true
287 },
288 "source_id": {
289 "name": "source_id",
290 "type": "text",
291 "primaryKey": false,
292 "notNull": true
293 },
294 "plugin_id": {
295 "name": "plugin_id",
296 "type": "text",
297 "primaryKey": false,
298 "notNull": true
299 },
300 "name": {
301 "name": "name",
302 "type": "text",
303 "primaryKey": false,
304 "notNull": true
305 },
306 "schema": {
307 "name": "schema",
308 "type": "jsonb",
309 "primaryKey": false,
310 "notNull": true
311 },
312 "created_at": {
313 "name": "created_at",
314 "type": "timestamp",
315 "primaryKey": false,
316 "notNull": true
317 }
318 },
319 "indexes": {
320 "definition_scope_id_idx": {
321 "name": "definition_scope_id_idx",
322 "columns": [
323 {
324 "expression": "scope_id",
325 "isExpression": false,
326 "asc": true,
327 "nulls": "last"
328 }
329 ],
330 "isUnique": false,
331 "concurrently": false,
332 "method": "btree",
333 "with": {}
334 },
335 "definition_source_id_idx": {
336 "name": "definition_source_id_idx",
337 "columns": [
338 {
339 "expression": "source_id",
340 "isExpression": false,
341 "asc": true,
342 "nulls": "last"
343 }
344 ],
345 "isUnique": false,
346 "concurrently": false,
347 "method": "btree",
348 "with": {}
349 },
350 "definition_plugin_id_idx": {
351 "name": "definition_plugin_id_idx",
352 "columns": [
353 {
354 "expression": "plugin_id",
355 "isExpression": false,
356 "asc": true,
357 "nulls": "last"
358 }
359 ],
360 "isUnique": false,
361 "concurrently": false,
362 "method": "btree",
363 "with": {}
364 }
365 },
366 "foreignKeys": {},
367 "compositePrimaryKeys": {
368 "definition_scope_id_id_pk": {
369 "name": "definition_scope_id_id_pk",
370 "columns": ["scope_id", "id"]
371 }
372 },
373 "uniqueConstraints": {},
374 "policies": {},
375 "checkConstraints": {},
376 "isRLSEnabled": false
377 },
378 "public.graphql_operation": {
379 "name": "graphql_operation",
380 "schema": "",
381 "columns": {
382 "id": {
383 "name": "id",
384 "type": "text",
385 "primaryKey": false,
386 "notNull": true
387 },
388 "scope_id": {
389 "name": "scope_id",
390 "type": "text",
391 "primaryKey": false,
392 "notNull": true
393 },
394 "source_id": {
395 "name": "source_id",
396 "type": "text",
397 "primaryKey": false,
398 "notNull": true
399 },
400 "binding": {
401 "name": "binding",
402 "type": "jsonb",
403 "primaryKey": false,
404 "notNull": true
405 }
406 },
407 "indexes": {
408 "graphql_operation_scope_id_idx": {
409 "name": "graphql_operation_scope_id_idx",
410 "columns": [
411 {
412 "expression": "scope_id",
413 "isExpression": false,
414 "asc": true,
415 "nulls": "last"
416 }
417 ],
418 "isUnique": false,
419 "concurrently": false,
420 "method": "btree",
421 "with": {}
422 },
423 "graphql_operation_source_id_idx": {
424 "name": "graphql_operation_source_id_idx",
425 "columns": [
426 {
427 "expression": "source_id",
428 "isExpression": false,
429 "asc": true,
430 "nulls": "last"
431 }
432 ],
433 "isUnique": false,
434 "concurrently": false,
435 "method": "btree",
436 "with": {}
437 }
438 },
439 "foreignKeys": {},
440 "compositePrimaryKeys": {
441 "graphql_operation_scope_id_id_pk": {
442 "name": "graphql_operation_scope_id_id_pk",
443 "columns": ["scope_id", "id"]
444 }
445 },
446 "uniqueConstraints": {},
447 "policies": {},
448 "checkConstraints": {},
449 "isRLSEnabled": false
450 },
451 "public.graphql_source": {
452 "name": "graphql_source",
453 "schema": "",
454 "columns": {
455 "id": {
456 "name": "id",
457 "type": "text",
458 "primaryKey": false,
459 "notNull": true
460 },
461 "scope_id": {
462 "name": "scope_id",
463 "type": "text",
464 "primaryKey": false,
465 "notNull": true
466 },
467 "name": {
468 "name": "name",
469 "type": "text",
470 "primaryKey": false,
471 "notNull": true
472 },
473 "endpoint": {
474 "name": "endpoint",
475 "type": "text",
476 "primaryKey": false,
477 "notNull": true
478 },
479 "auth_kind": {
480 "name": "auth_kind",
481 "type": "text",
482 "primaryKey": false,
483 "notNull": true,
484 "default": "none"
485 },
486 "auth_connection_id": {
487 "name": "auth_connection_id",
488 "type": "text",
489 "primaryKey": false,
490 "notNull": false
491 }
492 },
493 "indexes": {
494 "graphql_source_scope_id_idx": {
495 "name": "graphql_source_scope_id_idx",
496 "columns": [
497 {
498 "expression": "scope_id",
499 "isExpression": false,
500 "asc": true,
501 "nulls": "last"
502 }
503 ],
504 "isUnique": false,
505 "concurrently": false,
506 "method": "btree",
507 "with": {}
508 },
509 "graphql_source_auth_connection_id_idx": {
510 "name": "graphql_source_auth_connection_id_idx",
511 "columns": [
512 {
513 "expression": "auth_connection_id",
514 "isExpression": false,
515 "asc": true,
516 "nulls": "last"
517 }
518 ],
519 "isUnique": false,
520 "concurrently": false,
521 "method": "btree",
522 "with": {}
523 }
524 },
525 "foreignKeys": {},
526 "compositePrimaryKeys": {
527 "graphql_source_scope_id_id_pk": {
528 "name": "graphql_source_scope_id_id_pk",
529 "columns": ["scope_id", "id"]
530 }
531 },
532 "uniqueConstraints": {},
533 "policies": {},
534 "checkConstraints": {},
535 "isRLSEnabled": false
536 },
537 "public.mcp_binding": {
538 "name": "mcp_binding",
539 "schema": "",
540 "columns": {
541 "id": {
542 "name": "id",
543 "type": "text",
544 "primaryKey": false,
545 "notNull": true
546 },
547 "scope_id": {
548 "name": "scope_id",
549 "type": "text",
550 "primaryKey": false,
551 "notNull": true
552 },
553 "source_id": {
554 "name": "source_id",
555 "type": "text",
556 "primaryKey": false,
557 "notNull": true
558 },
559 "binding": {
560 "name": "binding",
561 "type": "jsonb",
562 "primaryKey": false,
563 "notNull": true
564 },
565 "created_at": {
566 "name": "created_at",
567 "type": "timestamp",
568 "primaryKey": false,
569 "notNull": true
570 }
571 },
572 "indexes": {
573 "mcp_binding_scope_id_idx": {
574 "name": "mcp_binding_scope_id_idx",
575 "columns": [
576 {
577 "expression": "scope_id",
578 "isExpression": false,
579 "asc": true,
580 "nulls": "last"
581 }
582 ],
583 "isUnique": false,
584 "concurrently": false,
585 "method": "btree",
586 "with": {}
587 },
588 "mcp_binding_source_id_idx": {
589 "name": "mcp_binding_source_id_idx",
590 "columns": [
591 {
592 "expression": "source_id",
593 "isExpression": false,
594 "asc": true,
595 "nulls": "last"
596 }
597 ],
598 "isUnique": false,
599 "concurrently": false,
600 "method": "btree",
601 "with": {}
602 }
603 },
604 "foreignKeys": {},
605 "compositePrimaryKeys": {
606 "mcp_binding_scope_id_id_pk": {
607 "name": "mcp_binding_scope_id_id_pk",
608 "columns": ["scope_id", "id"]
609 }
610 },
611 "uniqueConstraints": {},
612 "policies": {},
613 "checkConstraints": {},
614 "isRLSEnabled": false
615 },
616 "public.mcp_source": {
617 "name": "mcp_source",
618 "schema": "",
619 "columns": {
620 "id": {
621 "name": "id",
622 "type": "text",
623 "primaryKey": false,
624 "notNull": true
625 },
626 "scope_id": {
627 "name": "scope_id",
628 "type": "text",
629 "primaryKey": false,
630 "notNull": true
631 },
632 "name": {
633 "name": "name",
634 "type": "text",
635 "primaryKey": false,
636 "notNull": true
637 },
638 "config": {
639 "name": "config",
640 "type": "jsonb",
641 "primaryKey": false,
642 "notNull": true
643 },
644 "created_at": {
645 "name": "created_at",
646 "type": "timestamp",
647 "primaryKey": false,
648 "notNull": true
649 },
650 "auth_kind": {
651 "name": "auth_kind",
652 "type": "text",
653 "primaryKey": false,
654 "notNull": true,
655 "default": "'none'"
656 },
657 "auth_header_name": {
658 "name": "auth_header_name",
659 "type": "text",
660 "primaryKey": false,
661 "notNull": false
662 },
663 "auth_secret_id": {
664 "name": "auth_secret_id",
665 "type": "text",
666 "primaryKey": false,
667 "notNull": false
668 },
669 "auth_secret_prefix": {
670 "name": "auth_secret_prefix",
671 "type": "text",
672 "primaryKey": false,
673 "notNull": false
674 },
675 "auth_connection_id": {
676 "name": "auth_connection_id",
677 "type": "text",
678 "primaryKey": false,
679 "notNull": false
680 },
681 "auth_client_id_secret_id": {
682 "name": "auth_client_id_secret_id",
683 "type": "text",
684 "primaryKey": false,
685 "notNull": false
686 },
687 "auth_client_secret_secret_id": {
688 "name": "auth_client_secret_secret_id",
689 "type": "text",
690 "primaryKey": false,
691 "notNull": false
692 }
693 },
694 "indexes": {
695 "mcp_source_scope_id_idx": {
696 "name": "mcp_source_scope_id_idx",
697 "columns": [
698 {
699 "expression": "scope_id",
700 "isExpression": false,
701 "asc": true,
702 "nulls": "last"
703 }
704 ],
705 "isUnique": false,
706 "concurrently": false,
707 "method": "btree",
708 "with": {}
709 },
710 "mcp_source_auth_secret_id_idx": {
711 "name": "mcp_source_auth_secret_id_idx",
712 "columns": [
713 {
714 "expression": "auth_secret_id",
715 "isExpression": false,
716 "asc": true,
717 "nulls": "last"
718 }
719 ],
720 "isUnique": false,
721 "concurrently": false,
722 "method": "btree",
723 "with": {}
724 },
725 "mcp_source_auth_connection_id_idx": {
726 "name": "mcp_source_auth_connection_id_idx",
727 "columns": [
728 {
729 "expression": "auth_connection_id",
730 "isExpression": false,
731 "asc": true,
732 "nulls": "last"
733 }
734 ],
735 "isUnique": false,
736 "concurrently": false,
737 "method": "btree",
738 "with": {}
739 },
740 "mcp_source_auth_client_id_secret_id_idx": {
741 "name": "mcp_source_auth_client_id_secret_id_idx",
742 "columns": [
743 {
744 "expression": "auth_client_id_secret_id",
745 "isExpression": false,
746 "asc": true,
747 "nulls": "last"
748 }
749 ],
750 "isUnique": false,
751 "concurrently": false,
752 "method": "btree",
753 "with": {}
754 },
755 "mcp_source_auth_client_secret_secret_id_idx": {
756 "name": "mcp_source_auth_client_secret_secret_id_idx",
757 "columns": [
758 {
759 "expression": "auth_client_secret_secret_id",
760 "isExpression": false,
761 "asc": true,
762 "nulls": "last"
763 }
764 ],
765 "isUnique": false,
766 "concurrently": false,
767 "method": "btree",
768 "with": {}
769 }
770 },
771 "foreignKeys": {},
772 "compositePrimaryKeys": {
773 "mcp_source_scope_id_id_pk": {
774 "name": "mcp_source_scope_id_id_pk",
775 "columns": ["scope_id", "id"]
776 }
777 },
778 "uniqueConstraints": {},
779 "policies": {},
780 "checkConstraints": {},
781 "isRLSEnabled": false
782 },
783 "public.oauth2_session": {
784 "name": "oauth2_session",
785 "schema": "",
786 "columns": {
787 "id": {
788 "name": "id",
789 "type": "text",
790 "primaryKey": false,
791 "notNull": true
792 },
793 "scope_id": {
794 "name": "scope_id",
795 "type": "text",
796 "primaryKey": false,
797 "notNull": true
798 },
799 "plugin_id": {
800 "name": "plugin_id",
801 "type": "text",
802 "primaryKey": false,
803 "notNull": true
804 },
805 "strategy": {
806 "name": "strategy",
807 "type": "text",
808 "primaryKey": false,
809 "notNull": true
810 },
811 "connection_id": {
812 "name": "connection_id",
813 "type": "text",
814 "primaryKey": false,
815 "notNull": true
816 },
817 "token_scope": {
818 "name": "token_scope",
819 "type": "text",
820 "primaryKey": false,
821 "notNull": true
822 },
823 "redirect_url": {
824 "name": "redirect_url",
825 "type": "text",
826 "primaryKey": false,
827 "notNull": true
828 },
829 "payload": {
830 "name": "payload",
831 "type": "jsonb",
832 "primaryKey": false,
833 "notNull": true
834 },
835 "expires_at": {
836 "name": "expires_at",
837 "type": "bigint",
838 "primaryKey": false,
839 "notNull": true
840 },
841 "created_at": {
842 "name": "created_at",
843 "type": "timestamp",
844 "primaryKey": false,
845 "notNull": true
846 }
847 },
848 "indexes": {
849 "oauth2_session_scope_id_idx": {
850 "name": "oauth2_session_scope_id_idx",
851 "columns": [
852 {
853 "expression": "scope_id",
854 "isExpression": false,
855 "asc": true,
856 "nulls": "last"
857 }
858 ],
859 "isUnique": false,
860 "concurrently": false,
861 "method": "btree",
862 "with": {}
863 },
864 "oauth2_session_plugin_id_idx": {
865 "name": "oauth2_session_plugin_id_idx",
866 "columns": [
867 {
868 "expression": "plugin_id",
869 "isExpression": false,
870 "asc": true,
871 "nulls": "last"
872 }
873 ],
874 "isUnique": false,
875 "concurrently": false,
876 "method": "btree",
877 "with": {}
878 },
879 "oauth2_session_connection_id_idx": {
880 "name": "oauth2_session_connection_id_idx",
881 "columns": [
882 {
883 "expression": "connection_id",
884 "isExpression": false,
885 "asc": true,
886 "nulls": "last"
887 }
888 ],
889 "isUnique": false,
890 "concurrently": false,
891 "method": "btree",
892 "with": {}
893 }
894 },
895 "foreignKeys": {},
896 "compositePrimaryKeys": {
897 "oauth2_session_scope_id_id_pk": {
898 "name": "oauth2_session_scope_id_id_pk",
899 "columns": ["scope_id", "id"]
900 }
901 },
902 "uniqueConstraints": {},
903 "policies": {},
904 "checkConstraints": {},
905 "isRLSEnabled": false
906 },
907 "public.openapi_operation": {
908 "name": "openapi_operation",
909 "schema": "",
910 "columns": {
911 "id": {
912 "name": "id",
913 "type": "text",
914 "primaryKey": false,
915 "notNull": true
916 },
917 "scope_id": {
918 "name": "scope_id",
919 "type": "text",
920 "primaryKey": false,
921 "notNull": true
922 },
923 "source_id": {
924 "name": "source_id",
925 "type": "text",
926 "primaryKey": false,
927 "notNull": true
928 },
929 "binding": {
930 "name": "binding",
931 "type": "jsonb",
932 "primaryKey": false,
933 "notNull": true
934 }
935 },
936 "indexes": {
937 "openapi_operation_scope_id_idx": {
938 "name": "openapi_operation_scope_id_idx",
939 "columns": [
940 {
941 "expression": "scope_id",
942 "isExpression": false,
943 "asc": true,
944 "nulls": "last"
945 }
946 ],
947 "isUnique": false,
948 "concurrently": false,
949 "method": "btree",
950 "with": {}
951 },
952 "openapi_operation_source_id_idx": {
953 "name": "openapi_operation_source_id_idx",
954 "columns": [
955 {
956 "expression": "source_id",
957 "isExpression": false,
958 "asc": true,
959 "nulls": "last"
960 }
961 ],
962 "isUnique": false,
963 "concurrently": false,
964 "method": "btree",
965 "with": {}
966 }
967 },
968 "foreignKeys": {},
969 "compositePrimaryKeys": {
970 "openapi_operation_scope_id_id_pk": {
971 "name": "openapi_operation_scope_id_id_pk",
972 "columns": ["scope_id", "id"]
973 }
974 },
975 "uniqueConstraints": {},
976 "policies": {},
977 "checkConstraints": {},
978 "isRLSEnabled": false
979 },
980 "public.openapi_source": {
981 "name": "openapi_source",
982 "schema": "",
983 "columns": {
984 "id": {
985 "name": "id",
986 "type": "text",
987 "primaryKey": false,
988 "notNull": true
989 },
990 "scope_id": {
991 "name": "scope_id",
992 "type": "text",
993 "primaryKey": false,
994 "notNull": true
995 },
996 "name": {
997 "name": "name",
998 "type": "text",
999 "primaryKey": false,
1000 "notNull": true
1001 },
1002 "spec": {
1003 "name": "spec",
1004 "type": "text",
1005 "primaryKey": false,
1006 "notNull": true
1007 },
1008 "source_url": {
1009 "name": "source_url",
1010 "type": "text",
1011 "primaryKey": false,
1012 "notNull": false
1013 },
1014 "base_url": {
1015 "name": "base_url",
1016 "type": "text",
1017 "primaryKey": false,
1018 "notNull": false
1019 },
1020 "headers": {
1021 "name": "headers",
1022 "type": "jsonb",
1023 "primaryKey": false,
1024 "notNull": false
1025 },
1026 "oauth2": {
1027 "name": "oauth2",
1028 "type": "jsonb",
1029 "primaryKey": false,
1030 "notNull": false
1031 }
1032 },
1033 "indexes": {
1034 "openapi_source_scope_id_idx": {
1035 "name": "openapi_source_scope_id_idx",
1036 "columns": [
1037 {
1038 "expression": "scope_id",
1039 "isExpression": false,
1040 "asc": true,
1041 "nulls": "last"
1042 }
1043 ],
1044 "isUnique": false,
1045 "concurrently": false,
1046 "method": "btree",
1047 "with": {}
1048 }
1049 },
1050 "foreignKeys": {},
1051 "compositePrimaryKeys": {
1052 "openapi_source_scope_id_id_pk": {
1053 "name": "openapi_source_scope_id_id_pk",
1054 "columns": ["scope_id", "id"]
1055 }
1056 },
1057 "uniqueConstraints": {},
1058 "policies": {},
1059 "checkConstraints": {},
1060 "isRLSEnabled": false
1061 },
1062 "public.openapi_source_binding": {
1063 "name": "openapi_source_binding",
1064 "schema": "",
1065 "columns": {
1066 "id": {
1067 "name": "id",
1068 "type": "text",
1069 "primaryKey": true,
1070 "notNull": true
1071 },
1072 "source_id": {
1073 "name": "source_id",
1074 "type": "text",
1075 "primaryKey": false,
1076 "notNull": true
1077 },
1078 "source_scope_id": {
1079 "name": "source_scope_id",
1080 "type": "text",
1081 "primaryKey": false,
1082 "notNull": true
1083 },
1084 "target_scope_id": {
1085 "name": "target_scope_id",
1086 "type": "text",
1087 "primaryKey": false,
1088 "notNull": true
1089 },
1090 "slot": {
1091 "name": "slot",
1092 "type": "text",
1093 "primaryKey": false,
1094 "notNull": true
1095 },
1096 "created_at": {
1097 "name": "created_at",
1098 "type": "timestamp",
1099 "primaryKey": false,
1100 "notNull": true
1101 },
1102 "updated_at": {
1103 "name": "updated_at",
1104 "type": "timestamp",
1105 "primaryKey": false,
1106 "notNull": true
1107 },
1108 "kind": {
1109 "name": "kind",
1110 "type": "text",
1111 "primaryKey": false,
1112 "notNull": true,
1113 "default": "'text'"
1114 },
1115 "secret_id": {
1116 "name": "secret_id",
1117 "type": "text",
1118 "primaryKey": false,
1119 "notNull": false
1120 },
1121 "connection_id": {
1122 "name": "connection_id",
1123 "type": "text",
1124 "primaryKey": false,
1125 "notNull": false
1126 },
1127 "text_value": {
1128 "name": "text_value",
1129 "type": "text",
1130 "primaryKey": false,
1131 "notNull": false
1132 }
1133 },
1134 "indexes": {
1135 "openapi_source_binding_source_id_idx": {
1136 "name": "openapi_source_binding_source_id_idx",
1137 "columns": [
1138 {
1139 "expression": "source_id",
1140 "isExpression": false,
1141 "asc": true,
1142 "nulls": "last"
1143 }
1144 ],
1145 "isUnique": false,
1146 "concurrently": false,
1147 "method": "btree",
1148 "with": {}
1149 },
1150 "openapi_source_binding_source_scope_id_idx": {
1151 "name": "openapi_source_binding_source_scope_id_idx",
1152 "columns": [
1153 {
1154 "expression": "source_scope_id",
1155 "isExpression": false,
1156 "asc": true,
1157 "nulls": "last"
1158 }
1159 ],
1160 "isUnique": false,
1161 "concurrently": false,
1162 "method": "btree",
1163 "with": {}
1164 },
1165 "openapi_source_binding_target_scope_id_idx": {
1166 "name": "openapi_source_binding_target_scope_id_idx",
1167 "columns": [
1168 {
1169 "expression": "target_scope_id",
1170 "isExpression": false,
1171 "asc": true,
1172 "nulls": "last"
1173 }
1174 ],
1175 "isUnique": false,
1176 "concurrently": false,
1177 "method": "btree",
1178 "with": {}
1179 },
1180 "openapi_source_binding_slot_idx": {
1181 "name": "openapi_source_binding_slot_idx",
1182 "columns": [
1183 {
1184 "expression": "slot",
1185 "isExpression": false,
1186 "asc": true,
1187 "nulls": "last"
1188 }
1189 ],
1190 "isUnique": false,
1191 "concurrently": false,
1192 "method": "btree",
1193 "with": {}
1194 },
1195 "openapi_source_binding_secret_id_idx": {
1196 "name": "openapi_source_binding_secret_id_idx",
1197 "columns": [
1198 {
1199 "expression": "secret_id",
1200 "isExpression": false,
1201 "asc": true,
1202 "nulls": "last"
1203 }
1204 ],
1205 "isUnique": false,
1206 "concurrently": false,
1207 "method": "btree",
1208 "with": {}
1209 },
1210 "openapi_source_binding_connection_id_idx": {
1211 "name": "openapi_source_binding_connection_id_idx",
1212 "columns": [
1213 {
1214 "expression": "connection_id",
1215 "isExpression": false,
1216 "asc": true,
1217 "nulls": "last"
1218 }
1219 ],
1220 "isUnique": false,
1221 "concurrently": false,
1222 "method": "btree",
1223 "with": {}
1224 }
1225 },
1226 "foreignKeys": {},
1227 "compositePrimaryKeys": {},
1228 "uniqueConstraints": {},
1229 "policies": {},
1230 "checkConstraints": {},
1231 "isRLSEnabled": false
1232 },
1233 "public.secret": {
1234 "name": "secret",
1235 "schema": "",
1236 "columns": {
1237 "id": {
1238 "name": "id",
1239 "type": "text",
1240 "primaryKey": false,
1241 "notNull": true
1242 },
1243 "scope_id": {
1244 "name": "scope_id",
1245 "type": "text",
1246 "primaryKey": false,
1247 "notNull": true
1248 },
1249 "name": {
1250 "name": "name",
1251 "type": "text",
1252 "primaryKey": false,
1253 "notNull": true
1254 },
1255 "provider": {
1256 "name": "provider",
1257 "type": "text",
1258 "primaryKey": false,
1259 "notNull": true
1260 },
1261 "owned_by_connection_id": {
1262 "name": "owned_by_connection_id",
1263 "type": "text",
1264 "primaryKey": false,
1265 "notNull": false
1266 },
1267 "created_at": {
1268 "name": "created_at",
1269 "type": "timestamp",
1270 "primaryKey": false,
1271 "notNull": true
1272 }
1273 },
1274 "indexes": {
1275 "secret_scope_id_idx": {
1276 "name": "secret_scope_id_idx",
1277 "columns": [
1278 {
1279 "expression": "scope_id",
1280 "isExpression": false,
1281 "asc": true,
1282 "nulls": "last"
1283 }
1284 ],
1285 "isUnique": false,
1286 "concurrently": false,
1287 "method": "btree",
1288 "with": {}
1289 },
1290 "secret_provider_idx": {
1291 "name": "secret_provider_idx",
1292 "columns": [
1293 {
1294 "expression": "provider",
1295 "isExpression": false,
1296 "asc": true,
1297 "nulls": "last"
1298 }
1299 ],
1300 "isUnique": false,
1301 "concurrently": false,
1302 "method": "btree",
1303 "with": {}
1304 },
1305 "secret_owned_by_connection_id_idx": {
1306 "name": "secret_owned_by_connection_id_idx",
1307 "columns": [
1308 {
1309 "expression": "owned_by_connection_id",
1310 "isExpression": false,
1311 "asc": true,
1312 "nulls": "last"
1313 }
1314 ],
1315 "isUnique": false,
1316 "concurrently": false,
1317 "method": "btree",
1318 "with": {}
1319 }
1320 },
1321 "foreignKeys": {},
1322 "compositePrimaryKeys": {
1323 "secret_scope_id_id_pk": {
1324 "name": "secret_scope_id_id_pk",
1325 "columns": ["scope_id", "id"]
1326 }
1327 },
1328 "uniqueConstraints": {},
1329 "policies": {},
1330 "checkConstraints": {},
1331 "isRLSEnabled": false
1332 },
1333 "public.source": {
1334 "name": "source",
1335 "schema": "",
1336 "columns": {
1337 "id": {
1338 "name": "id",
1339 "type": "text",
1340 "primaryKey": false,
1341 "notNull": true
1342 },
1343 "scope_id": {
1344 "name": "scope_id",
1345 "type": "text",
1346 "primaryKey": false,
1347 "notNull": true
1348 },
1349 "plugin_id": {
1350 "name": "plugin_id",
1351 "type": "text",
1352 "primaryKey": false,
1353 "notNull": true
1354 },
1355 "kind": {
1356 "name": "kind",
1357 "type": "text",
1358 "primaryKey": false,
1359 "notNull": true
1360 },
1361 "name": {
1362 "name": "name",
1363 "type": "text",
1364 "primaryKey": false,
1365 "notNull": true
1366 },
1367 "url": {
1368 "name": "url",
1369 "type": "text",
1370 "primaryKey": false,
1371 "notNull": false
1372 },
1373 "can_remove": {
1374 "name": "can_remove",
1375 "type": "boolean",
1376 "primaryKey": false,
1377 "notNull": true,
1378 "default": true
1379 },
1380 "can_refresh": {
1381 "name": "can_refresh",
1382 "type": "boolean",
1383 "primaryKey": false,
1384 "notNull": true,
1385 "default": false
1386 },
1387 "can_edit": {
1388 "name": "can_edit",
1389 "type": "boolean",
1390 "primaryKey": false,
1391 "notNull": true,
1392 "default": false
1393 },
1394 "created_at": {
1395 "name": "created_at",
1396 "type": "timestamp",
1397 "primaryKey": false,
1398 "notNull": true
1399 },
1400 "updated_at": {
1401 "name": "updated_at",
1402 "type": "timestamp",
1403 "primaryKey": false,
1404 "notNull": true
1405 }
1406 },
1407 "indexes": {
1408 "source_scope_id_idx": {
1409 "name": "source_scope_id_idx",
1410 "columns": [
1411 {
1412 "expression": "scope_id",
1413 "isExpression": false,
1414 "asc": true,
1415 "nulls": "last"
1416 }
1417 ],
1418 "isUnique": false,
1419 "concurrently": false,
1420 "method": "btree",
1421 "with": {}
1422 },
1423 "source_plugin_id_idx": {
1424 "name": "source_plugin_id_idx",
1425 "columns": [
1426 {
1427 "expression": "plugin_id",
1428 "isExpression": false,
1429 "asc": true,
1430 "nulls": "last"
1431 }
1432 ],
1433 "isUnique": false,
1434 "concurrently": false,
1435 "method": "btree",
1436 "with": {}
1437 }
1438 },
1439 "foreignKeys": {},
1440 "compositePrimaryKeys": {
1441 "source_scope_id_id_pk": {
1442 "name": "source_scope_id_id_pk",
1443 "columns": ["scope_id", "id"]
1444 }
1445 },
1446 "uniqueConstraints": {},
1447 "policies": {},
1448 "checkConstraints": {},
1449 "isRLSEnabled": false
1450 },
1451 "public.tool": {
1452 "name": "tool",
1453 "schema": "",
1454 "columns": {
1455 "id": {
1456 "name": "id",
1457 "type": "text",
1458 "primaryKey": false,
1459 "notNull": true
1460 },
1461 "scope_id": {
1462 "name": "scope_id",
1463 "type": "text",
1464 "primaryKey": false,
1465 "notNull": true
1466 },
1467 "source_id": {
1468 "name": "source_id",
1469 "type": "text",
1470 "primaryKey": false,
1471 "notNull": true
1472 },
1473 "plugin_id": {
1474 "name": "plugin_id",
1475 "type": "text",
1476 "primaryKey": false,
1477 "notNull": true
1478 },
1479 "name": {
1480 "name": "name",
1481 "type": "text",
1482 "primaryKey": false,
1483 "notNull": true
1484 },
1485 "description": {
1486 "name": "description",
1487 "type": "text",
1488 "primaryKey": false,
1489 "notNull": true
1490 },
1491 "input_schema": {
1492 "name": "input_schema",
1493 "type": "jsonb",
1494 "primaryKey": false,
1495 "notNull": false
1496 },
1497 "output_schema": {
1498 "name": "output_schema",
1499 "type": "jsonb",
1500 "primaryKey": false,
1501 "notNull": false
1502 },
1503 "created_at": {
1504 "name": "created_at",
1505 "type": "timestamp",
1506 "primaryKey": false,
1507 "notNull": true
1508 },
1509 "updated_at": {
1510 "name": "updated_at",
1511 "type": "timestamp",
1512 "primaryKey": false,
1513 "notNull": true
1514 }
1515 },
1516 "indexes": {
1517 "tool_scope_id_idx": {
1518 "name": "tool_scope_id_idx",
1519 "columns": [
1520 {
1521 "expression": "scope_id",
1522 "isExpression": false,
1523 "asc": true,
1524 "nulls": "last"
1525 }
1526 ],
1527 "isUnique": false,
1528 "concurrently": false,
1529 "method": "btree",
1530 "with": {}
1531 },
1532 "tool_source_id_idx": {
1533 "name": "tool_source_id_idx",
1534 "columns": [
1535 {
1536 "expression": "source_id",
1537 "isExpression": false,
1538 "asc": true,
1539 "nulls": "last"
1540 }
1541 ],
1542 "isUnique": false,
1543 "concurrently": false,
1544 "method": "btree",
1545 "with": {}
1546 },
1547 "tool_plugin_id_idx": {
1548 "name": "tool_plugin_id_idx",
1549 "columns": [
1550 {
1551 "expression": "plugin_id",
1552 "isExpression": false,
1553 "asc": true,
1554 "nulls": "last"
1555 }
1556 ],
1557 "isUnique": false,
1558 "concurrently": false,
1559 "method": "btree",
1560 "with": {}
1561 }
1562 },
1563 "foreignKeys": {},
1564 "compositePrimaryKeys": {
1565 "tool_scope_id_id_pk": {
1566 "name": "tool_scope_id_id_pk",
1567 "columns": ["scope_id", "id"]
1568 }
1569 },
1570 "uniqueConstraints": {},
1571 "policies": {},
1572 "checkConstraints": {},
1573 "isRLSEnabled": false
1574 },
1575 "public.tool_policy": {
1576 "name": "tool_policy",
1577 "schema": "",
1578 "columns": {
1579 "id": {
1580 "name": "id",
1581 "type": "text",
1582 "primaryKey": false,
1583 "notNull": true
1584 },
1585 "scope_id": {
1586 "name": "scope_id",
1587 "type": "text",
1588 "primaryKey": false,
1589 "notNull": true
1590 },
1591 "pattern": {
1592 "name": "pattern",
1593 "type": "text",
1594 "primaryKey": false,
1595 "notNull": true
1596 },
1597 "action": {
1598 "name": "action",
1599 "type": "text",
1600 "primaryKey": false,
1601 "notNull": true
1602 },
1603 "position": {
1604 "name": "position",
1605 "type": "text",
1606 "primaryKey": false,
1607 "notNull": true
1608 },
1609 "created_at": {
1610 "name": "created_at",
1611 "type": "timestamp",
1612 "primaryKey": false,
1613 "notNull": true
1614 },
1615 "updated_at": {
1616 "name": "updated_at",
1617 "type": "timestamp",
1618 "primaryKey": false,
1619 "notNull": true
1620 }
1621 },
1622 "indexes": {
1623 "tool_policy_scope_id_position_idx": {
1624 "name": "tool_policy_scope_id_position_idx",
1625 "columns": [
1626 {
1627 "expression": "scope_id",
1628 "isExpression": false,
1629 "asc": true,
1630 "nulls": "last"
1631 },
1632 {
1633 "expression": "position",
1634 "isExpression": false,
1635 "asc": true,
1636 "nulls": "last"
1637 }
1638 ],
1639 "isUnique": false,
1640 "concurrently": false,
1641 "method": "btree",
1642 "with": {}
1643 }
1644 },
1645 "foreignKeys": {},
1646 "compositePrimaryKeys": {
1647 "tool_policy_scope_id_id_pk": {
1648 "name": "tool_policy_scope_id_id_pk",
1649 "columns": ["scope_id", "id"]
1650 }
1651 },
1652 "uniqueConstraints": {},
1653 "policies": {},
1654 "checkConstraints": {},
1655 "isRLSEnabled": false
1656 },
1657 "public.workos_vault_metadata": {
1658 "name": "workos_vault_metadata",
1659 "schema": "",
1660 "columns": {
1661 "id": {
1662 "name": "id",
1663 "type": "text",
1664 "primaryKey": false,
1665 "notNull": true
1666 },
1667 "scope_id": {
1668 "name": "scope_id",
1669 "type": "text",
1670 "primaryKey": false,
1671 "notNull": true
1672 },
1673 "name": {
1674 "name": "name",
1675 "type": "text",
1676 "primaryKey": false,
1677 "notNull": true
1678 },
1679 "purpose": {
1680 "name": "purpose",
1681 "type": "text",
1682 "primaryKey": false,
1683 "notNull": false
1684 },
1685 "created_at": {
1686 "name": "created_at",
1687 "type": "timestamp",
1688 "primaryKey": false,
1689 "notNull": true
1690 }
1691 },
1692 "indexes": {
1693 "workos_vault_metadata_scope_id_idx": {
1694 "name": "workos_vault_metadata_scope_id_idx",
1695 "columns": [
1696 {
1697 "expression": "scope_id",
1698 "isExpression": false,
1699 "asc": true,
1700 "nulls": "last"
1701 }
1702 ],
1703 "isUnique": false,
1704 "concurrently": false,
1705 "method": "btree",
1706 "with": {}
1707 }
1708 },
1709 "foreignKeys": {},
1710 "compositePrimaryKeys": {
1711 "workos_vault_metadata_scope_id_id_pk": {
1712 "name": "workos_vault_metadata_scope_id_id_pk",
1713 "columns": ["scope_id", "id"]
1714 }
1715 },
1716 "uniqueConstraints": {},
1717 "policies": {},
1718 "checkConstraints": {},
1719 "isRLSEnabled": false
1720 },
1721 "public.graphql_source_header": {
1722 "name": "graphql_source_header",
1723 "schema": "",
1724 "columns": {
1725 "id": {
1726 "name": "id",
1727 "type": "text",
1728 "primaryKey": false,
1729 "notNull": true
1730 },
1731 "scope_id": {
1732 "name": "scope_id",
1733 "type": "text",
1734 "primaryKey": false,
1735 "notNull": true
1736 },
1737 "source_id": {
1738 "name": "source_id",
1739 "type": "text",
1740 "primaryKey": false,
1741 "notNull": true
1742 },
1743 "name": {
1744 "name": "name",
1745 "type": "text",
1746 "primaryKey": false,
1747 "notNull": true
1748 },
1749 "kind": {
1750 "name": "kind",
1751 "type": "text",
1752 "primaryKey": false,
1753 "notNull": true
1754 },
1755 "text_value": {
1756 "name": "text_value",
1757 "type": "text",
1758 "primaryKey": false,
1759 "notNull": false
1760 },
1761 "secret_id": {
1762 "name": "secret_id",
1763 "type": "text",
1764 "primaryKey": false,
1765 "notNull": false
1766 },
1767 "secret_prefix": {
1768 "name": "secret_prefix",
1769 "type": "text",
1770 "primaryKey": false,
1771 "notNull": false
1772 }
1773 },
1774 "indexes": {
1775 "graphql_source_header_scope_id_idx": {
1776 "name": "graphql_source_header_scope_id_idx",
1777 "columns": [
1778 {
1779 "expression": "scope_id",
1780 "isExpression": false,
1781 "asc": true,
1782 "nulls": "last"
1783 }
1784 ],
1785 "isUnique": false,
1786 "concurrently": false,
1787 "method": "btree",
1788 "with": {}
1789 },
1790 "graphql_source_header_source_id_idx": {
1791 "name": "graphql_source_header_source_id_idx",
1792 "columns": [
1793 {
1794 "expression": "source_id",
1795 "isExpression": false,
1796 "asc": true,
1797 "nulls": "last"
1798 }
1799 ],
1800 "isUnique": false,
1801 "concurrently": false,
1802 "method": "btree",
1803 "with": {}
1804 },
1805 "graphql_source_header_secret_id_idx": {
1806 "name": "graphql_source_header_secret_id_idx",
1807 "columns": [
1808 {
1809 "expression": "secret_id",
1810 "isExpression": false,
1811 "asc": true,
1812 "nulls": "last"
1813 }
1814 ],
1815 "isUnique": false,
1816 "concurrently": false,
1817 "method": "btree",
1818 "with": {}
1819 }
1820 },
1821 "foreignKeys": {},
1822 "compositePrimaryKeys": {
1823 "graphql_source_header_scope_id_id_pk": {
1824 "name": "graphql_source_header_scope_id_id_pk",
1825 "columns": ["scope_id", "id"]
1826 }
1827 },
1828 "uniqueConstraints": {},
1829 "policies": {},
1830 "checkConstraints": {},
1831 "isRLSEnabled": false
1832 },
1833 "public.graphql_source_query_param": {
1834 "name": "graphql_source_query_param",
1835 "schema": "",
1836 "columns": {
1837 "id": {
1838 "name": "id",
1839 "type": "text",
1840 "primaryKey": false,
1841 "notNull": true
1842 },
1843 "scope_id": {
1844 "name": "scope_id",
1845 "type": "text",
1846 "primaryKey": false,
1847 "notNull": true
1848 },
1849 "source_id": {
1850 "name": "source_id",
1851 "type": "text",
1852 "primaryKey": false,
1853 "notNull": true
1854 },
1855 "name": {
1856 "name": "name",
1857 "type": "text",
1858 "primaryKey": false,
1859 "notNull": true
1860 },
1861 "kind": {
1862 "name": "kind",
1863 "type": "text",
1864 "primaryKey": false,
1865 "notNull": true
1866 },
1867 "text_value": {
1868 "name": "text_value",
1869 "type": "text",
1870 "primaryKey": false,
1871 "notNull": false
1872 },
1873 "secret_id": {
1874 "name": "secret_id",
1875 "type": "text",
1876 "primaryKey": false,
1877 "notNull": false
1878 },
1879 "secret_prefix": {
1880 "name": "secret_prefix",
1881 "type": "text",
1882 "primaryKey": false,
1883 "notNull": false
1884 }
1885 },
1886 "indexes": {
1887 "graphql_source_query_param_scope_id_idx": {
1888 "name": "graphql_source_query_param_scope_id_idx",
1889 "columns": [
1890 {
1891 "expression": "scope_id",
1892 "isExpression": false,
1893 "asc": true,
1894 "nulls": "last"
1895 }
1896 ],
1897 "isUnique": false,
1898 "concurrently": false,
1899 "method": "btree",
1900 "with": {}
1901 },
1902 "graphql_source_query_param_source_id_idx": {
1903 "name": "graphql_source_query_param_source_id_idx",
1904 "columns": [
1905 {
1906 "expression": "source_id",
1907 "isExpression": false,
1908 "asc": true,
1909 "nulls": "last"
1910 }
1911 ],
1912 "isUnique": false,
1913 "concurrently": false,
1914 "method": "btree",
1915 "with": {}
1916 },
1917 "graphql_source_query_param_secret_id_idx": {
1918 "name": "graphql_source_query_param_secret_id_idx",
1919 "columns": [
1920 {
1921 "expression": "secret_id",
1922 "isExpression": false,
1923 "asc": true,
1924 "nulls": "last"
1925 }
1926 ],
1927 "isUnique": false,
1928 "concurrently": false,
1929 "method": "btree",
1930 "with": {}
1931 }
1932 },
1933 "foreignKeys": {},
1934 "compositePrimaryKeys": {
1935 "graphql_source_query_param_scope_id_id_pk": {
1936 "name": "graphql_source_query_param_scope_id_id_pk",
1937 "columns": ["scope_id", "id"]
1938 }
1939 },
1940 "uniqueConstraints": {},
1941 "policies": {},
1942 "checkConstraints": {},
1943 "isRLSEnabled": false
1944 },
1945 "public.openapi_source_query_param": {
1946 "name": "openapi_source_query_param",
1947 "schema": "",
1948 "columns": {
1949 "id": {
1950 "name": "id",
1951 "type": "text",
1952 "primaryKey": false,
1953 "notNull": true
1954 },
1955 "scope_id": {
1956 "name": "scope_id",
1957 "type": "text",
1958 "primaryKey": false,
1959 "notNull": true
1960 },
1961 "source_id": {
1962 "name": "source_id",
1963 "type": "text",
1964 "primaryKey": false,
1965 "notNull": true
1966 },
1967 "name": {
1968 "name": "name",
1969 "type": "text",
1970 "primaryKey": false,
1971 "notNull": true
1972 },
1973 "kind": {
1974 "name": "kind",
1975 "type": "text",
1976 "primaryKey": false,
1977 "notNull": true
1978 },
1979 "text_value": {
1980 "name": "text_value",
1981 "type": "text",
1982 "primaryKey": false,
1983 "notNull": false
1984 },
1985 "secret_id": {
1986 "name": "secret_id",
1987 "type": "text",
1988 "primaryKey": false,
1989 "notNull": false
1990 },
1991 "secret_prefix": {
1992 "name": "secret_prefix",
1993 "type": "text",
1994 "primaryKey": false,
1995 "notNull": false
1996 }
1997 },
1998 "indexes": {
1999 "openapi_source_query_param_scope_id_idx": {
2000 "name": "openapi_source_query_param_scope_id_idx",
2001 "columns": [
2002 {
2003 "expression": "scope_id",
2004 "isExpression": false,
2005 "asc": true,
2006 "nulls": "last"
2007 }
2008 ],
2009 "isUnique": false,
2010 "concurrently": false,
2011 "method": "btree",
2012 "with": {}
2013 },
2014 "openapi_source_query_param_source_id_idx": {
2015 "name": "openapi_source_query_param_source_id_idx",
2016 "columns": [
2017 {
2018 "expression": "source_id",
2019 "isExpression": false,
2020 "asc": true,
2021 "nulls": "last"
2022 }
2023 ],
2024 "isUnique": false,
2025 "concurrently": false,
2026 "method": "btree",
2027 "with": {}
2028 },
2029 "openapi_source_query_param_secret_id_idx": {
2030 "name": "openapi_source_query_param_secret_id_idx",
2031 "columns": [
2032 {
2033 "expression": "secret_id",
2034 "isExpression": false,
2035 "asc": true,
2036 "nulls": "last"
2037 }
2038 ],
2039 "isUnique": false,
2040 "concurrently": false,
2041 "method": "btree",
2042 "with": {}
2043 }
2044 },
2045 "foreignKeys": {},
2046 "compositePrimaryKeys": {
2047 "openapi_source_query_param_scope_id_id_pk": {
2048 "name": "openapi_source_query_param_scope_id_id_pk",
2049 "columns": ["scope_id", "id"]
2050 }
2051 },
2052 "uniqueConstraints": {},
2053 "policies": {},
2054 "checkConstraints": {},
2055 "isRLSEnabled": false
2056 },
2057 "public.openapi_source_spec_fetch_header": {
2058 "name": "openapi_source_spec_fetch_header",
2059 "schema": "",
2060 "columns": {
2061 "id": {
2062 "name": "id",
2063 "type": "text",
2064 "primaryKey": false,
2065 "notNull": true
2066 },
2067 "scope_id": {
2068 "name": "scope_id",
2069 "type": "text",
2070 "primaryKey": false,
2071 "notNull": true
2072 },
2073 "source_id": {
2074 "name": "source_id",
2075 "type": "text",
2076 "primaryKey": false,
2077 "notNull": true
2078 },
2079 "name": {
2080 "name": "name",
2081 "type": "text",
2082 "primaryKey": false,
2083 "notNull": true
2084 },
2085 "kind": {
2086 "name": "kind",
2087 "type": "text",
2088 "primaryKey": false,
2089 "notNull": true
2090 },
2091 "text_value": {
2092 "name": "text_value",
2093 "type": "text",
2094 "primaryKey": false,
2095 "notNull": false
2096 },
2097 "secret_id": {
2098 "name": "secret_id",
2099 "type": "text",
2100 "primaryKey": false,
2101 "notNull": false
2102 },
2103 "secret_prefix": {
2104 "name": "secret_prefix",
2105 "type": "text",
2106 "primaryKey": false,
2107 "notNull": false
2108 }
2109 },
2110 "indexes": {
2111 "openapi_source_spec_fetch_header_scope_id_idx": {
2112 "name": "openapi_source_spec_fetch_header_scope_id_idx",
2113 "columns": [
2114 {
2115 "expression": "scope_id",
2116 "isExpression": false,
2117 "asc": true,
2118 "nulls": "last"
2119 }
2120 ],
2121 "isUnique": false,
2122 "concurrently": false,
2123 "method": "btree",
2124 "with": {}
2125 },
2126 "openapi_source_spec_fetch_header_source_id_idx": {
2127 "name": "openapi_source_spec_fetch_header_source_id_idx",
2128 "columns": [
2129 {
2130 "expression": "source_id",
2131 "isExpression": false,
2132 "asc": true,
2133 "nulls": "last"
2134 }
2135 ],
2136 "isUnique": false,
2137 "concurrently": false,
2138 "method": "btree",
2139 "with": {}
2140 },
2141 "openapi_source_spec_fetch_header_secret_id_idx": {
2142 "name": "openapi_source_spec_fetch_header_secret_id_idx",
2143 "columns": [
2144 {
2145 "expression": "secret_id",
2146 "isExpression": false,
2147 "asc": true,
2148 "nulls": "last"
2149 }
2150 ],
2151 "isUnique": false,
2152 "concurrently": false,
2153 "method": "btree",
2154 "with": {}
2155 }
2156 },
2157 "foreignKeys": {},
2158 "compositePrimaryKeys": {
2159 "openapi_source_spec_fetch_header_scope_id_id_pk": {
2160 "name": "openapi_source_spec_fetch_header_scope_id_id_pk",
2161 "columns": ["scope_id", "id"]
2162 }
2163 },
2164 "uniqueConstraints": {},
2165 "policies": {},
2166 "checkConstraints": {},
2167 "isRLSEnabled": false
2168 },
2169 "public.openapi_source_spec_fetch_query_param": {
2170 "name": "openapi_source_spec_fetch_query_param",
2171 "schema": "",
2172 "columns": {
2173 "id": {
2174 "name": "id",
2175 "type": "text",
2176 "primaryKey": false,
2177 "notNull": true
2178 },
2179 "scope_id": {
2180 "name": "scope_id",
2181 "type": "text",
2182 "primaryKey": false,
2183 "notNull": true
2184 },
2185 "source_id": {
2186 "name": "source_id",
2187 "type": "text",
2188 "primaryKey": false,
2189 "notNull": true
2190 },
2191 "name": {
2192 "name": "name",
2193 "type": "text",
2194 "primaryKey": false,
2195 "notNull": true
2196 },
2197 "kind": {
2198 "name": "kind",
2199 "type": "text",
2200 "primaryKey": false,
2201 "notNull": true
2202 },
2203 "text_value": {
2204 "name": "text_value",
2205 "type": "text",
2206 "primaryKey": false,
2207 "notNull": false
2208 },
2209 "secret_id": {
2210 "name": "secret_id",
2211 "type": "text",
2212 "primaryKey": false,
2213 "notNull": false
2214 },
2215 "secret_prefix": {
2216 "name": "secret_prefix",
2217 "type": "text",
2218 "primaryKey": false,
2219 "notNull": false
2220 }
2221 },
2222 "indexes": {
2223 "openapi_source_spec_fetch_query_param_scope_id_idx": {
2224 "name": "openapi_source_spec_fetch_query_param_scope_id_idx",
2225 "columns": [
2226 {
2227 "expression": "scope_id",
2228 "isExpression": false,
2229 "asc": true,
2230 "nulls": "last"
2231 }
2232 ],
2233 "isUnique": false,
2234 "concurrently": false,
2235 "method": "btree",
2236 "with": {}
2237 },
2238 "openapi_source_spec_fetch_query_param_source_id_idx": {
2239 "name": "openapi_source_spec_fetch_query_param_source_id_idx",
2240 "columns": [
2241 {
2242 "expression": "source_id",
2243 "isExpression": false,
2244 "asc": true,
2245 "nulls": "last"
2246 }
2247 ],
2248 "isUnique": false,
2249 "concurrently": false,
2250 "method": "btree",
2251 "with": {}
2252 },
2253 "openapi_source_spec_fetch_query_param_secret_id_idx": {
2254 "name": "openapi_source_spec_fetch_query_param_secret_id_idx",
2255 "columns": [
2256 {
2257 "expression": "secret_id",
2258 "isExpression": false,
2259 "asc": true,
2260 "nulls": "last"
2261 }
2262 ],
2263 "isUnique": false,
2264 "concurrently": false,
2265 "method": "btree",
2266 "with": {}
2267 }
2268 },
2269 "foreignKeys": {},
2270 "compositePrimaryKeys": {
2271 "openapi_source_spec_fetch_query_param_scope_id_id_pk": {
2272 "name": "openapi_source_spec_fetch_query_param_scope_id_id_pk",
2273 "columns": ["scope_id", "id"]
2274 }
2275 },
2276 "uniqueConstraints": {},
2277 "policies": {},
2278 "checkConstraints": {},
2279 "isRLSEnabled": false
2280 },
2281 "public.mcp_source_header": {
2282 "name": "mcp_source_header",
2283 "schema": "",
2284 "columns": {
2285 "id": {
2286 "name": "id",
2287 "type": "text",
2288 "primaryKey": false,
2289 "notNull": true
2290 },
2291 "scope_id": {
2292 "name": "scope_id",
2293 "type": "text",
2294 "primaryKey": false,
2295 "notNull": true
2296 },
2297 "source_id": {
2298 "name": "source_id",
2299 "type": "text",
2300 "primaryKey": false,
2301 "notNull": true
2302 },
2303 "name": {
2304 "name": "name",
2305 "type": "text",
2306 "primaryKey": false,
2307 "notNull": true
2308 },
2309 "kind": {
2310 "name": "kind",
2311 "type": "text",
2312 "primaryKey": false,
2313 "notNull": true
2314 },
2315 "text_value": {
2316 "name": "text_value",
2317 "type": "text",
2318 "primaryKey": false,
2319 "notNull": false
2320 },
2321 "secret_id": {
2322 "name": "secret_id",
2323 "type": "text",
2324 "primaryKey": false,
2325 "notNull": false
2326 },
2327 "secret_prefix": {
2328 "name": "secret_prefix",
2329 "type": "text",
2330 "primaryKey": false,
2331 "notNull": false
2332 }
2333 },
2334 "indexes": {
2335 "mcp_source_header_scope_id_idx": {
2336 "name": "mcp_source_header_scope_id_idx",
2337 "columns": [
2338 {
2339 "expression": "scope_id",
2340 "isExpression": false,
2341 "asc": true,
2342 "nulls": "last"
2343 }
2344 ],
2345 "isUnique": false,
2346 "concurrently": false,
2347 "method": "btree",
2348 "with": {}
2349 },
2350 "mcp_source_header_source_id_idx": {
2351 "name": "mcp_source_header_source_id_idx",
2352 "columns": [
2353 {
2354 "expression": "source_id",
2355 "isExpression": false,
2356 "asc": true,
2357 "nulls": "last"
2358 }
2359 ],
2360 "isUnique": false,
2361 "concurrently": false,
2362 "method": "btree",
2363 "with": {}
2364 },
2365 "mcp_source_header_secret_id_idx": {
2366 "name": "mcp_source_header_secret_id_idx",
2367 "columns": [
2368 {
2369 "expression": "secret_id",
2370 "isExpression": false,
2371 "asc": true,
2372 "nulls": "last"
2373 }
2374 ],
2375 "isUnique": false,
2376 "concurrently": false,
2377 "method": "btree",
2378 "with": {}
2379 }
2380 },
2381 "foreignKeys": {},
2382 "compositePrimaryKeys": {
2383 "mcp_source_header_scope_id_id_pk": {
2384 "name": "mcp_source_header_scope_id_id_pk",
2385 "columns": ["scope_id", "id"]
2386 }
2387 },
2388 "uniqueConstraints": {},
2389 "policies": {},
2390 "checkConstraints": {},
2391 "isRLSEnabled": false
2392 },
2393 "public.mcp_source_query_param": {
2394 "name": "mcp_source_query_param",
2395 "schema": "",
2396 "columns": {
2397 "id": {
2398 "name": "id",
2399 "type": "text",
2400 "primaryKey": false,
2401 "notNull": true
2402 },
2403 "scope_id": {
2404 "name": "scope_id",
2405 "type": "text",
2406 "primaryKey": false,
2407 "notNull": true
2408 },
2409 "source_id": {
2410 "name": "source_id",
2411 "type": "text",
2412 "primaryKey": false,
2413 "notNull": true
2414 },
2415 "name": {
2416 "name": "name",
2417 "type": "text",
2418 "primaryKey": false,
2419 "notNull": true
2420 },
2421 "kind": {
2422 "name": "kind",
2423 "type": "text",
2424 "primaryKey": false,
2425 "notNull": true
2426 },
2427 "text_value": {
2428 "name": "text_value",
2429 "type": "text",
2430 "primaryKey": false,
2431 "notNull": false
2432 },
2433 "secret_id": {
2434 "name": "secret_id",
2435 "type": "text",
2436 "primaryKey": false,
2437 "notNull": false
2438 },
2439 "secret_prefix": {
2440 "name": "secret_prefix",
2441 "type": "text",
2442 "primaryKey": false,
2443 "notNull": false
2444 }
2445 },
2446 "indexes": {
2447 "mcp_source_query_param_scope_id_idx": {
2448 "name": "mcp_source_query_param_scope_id_idx",
2449 "columns": [
2450 {
2451 "expression": "scope_id",
2452 "isExpression": false,
2453 "asc": true,
2454 "nulls": "last"
2455 }
2456 ],
2457 "isUnique": false,
2458 "concurrently": false,
2459 "method": "btree",
2460 "with": {}
2461 },
2462 "mcp_source_query_param_source_id_idx": {
2463 "name": "mcp_source_query_param_source_id_idx",
2464 "columns": [
2465 {
2466 "expression": "source_id",
2467 "isExpression": false,
2468 "asc": true,
2469 "nulls": "last"
2470 }
2471 ],
2472 "isUnique": false,
2473 "concurrently": false,
2474 "method": "btree",
2475 "with": {}
2476 },
2477 "mcp_source_query_param_secret_id_idx": {
2478 "name": "mcp_source_query_param_secret_id_idx",
2479 "columns": [
2480 {
2481 "expression": "secret_id",
2482 "isExpression": false,
2483 "asc": true,
2484 "nulls": "last"
2485 }
2486 ],
2487 "isUnique": false,
2488 "concurrently": false,
2489 "method": "btree",
2490 "with": {}
2491 }
2492 },
2493 "foreignKeys": {},
2494 "compositePrimaryKeys": {
2495 "mcp_source_query_param_scope_id_id_pk": {
2496 "name": "mcp_source_query_param_scope_id_id_pk",
2497 "columns": ["scope_id", "id"]
2498 }
2499 },
2500 "uniqueConstraints": {},
2501 "policies": {},
2502 "checkConstraints": {},
2503 "isRLSEnabled": false
2504 }
2505 },
2506 "enums": {},
2507 "schemas": {},
2508 "sequences": {},
2509 "roles": {},
2510 "policies": {},
2511 "views": {},
2512 "_meta": {
2513 "columns": {},
2514 "schemas": {},
2515 "tables": {}
2516 }
2517}
apps/cloud/drizzle/meta/0009_snapshot.json+0−2468
@@ -1,2468 +0,0 @@
1{
2 "id": "3b53ed57-f0b1-40a4-9929-dd399180a17a",
3 "prevId": "b8d89563-58e1-4e6b-8674-f502338978e2",
4 "version": "7",
5 "dialect": "postgresql",
6 "tables": {
7 "public.accounts": {
8 "name": "accounts",
9 "schema": "",
10 "columns": {
11 "id": {
12 "name": "id",
13 "type": "text",
14 "primaryKey": true,
15 "notNull": true
16 },
17 "created_at": {
18 "name": "created_at",
19 "type": "timestamp with time zone",
20 "primaryKey": false,
21 "notNull": true,
22 "default": "now()"
23 }
24 },
25 "indexes": {},
26 "foreignKeys": {},
27 "compositePrimaryKeys": {},
28 "uniqueConstraints": {},
29 "policies": {},
30 "checkConstraints": {},
31 "isRLSEnabled": false
32 },
33 "public.memberships": {
34 "name": "memberships",
35 "schema": "",
36 "columns": {
37 "account_id": {
38 "name": "account_id",
39 "type": "text",
40 "primaryKey": false,
41 "notNull": true
42 },
43 "organization_id": {
44 "name": "organization_id",
45 "type": "text",
46 "primaryKey": false,
47 "notNull": true
48 },
49 "created_at": {
50 "name": "created_at",
51 "type": "timestamp with time zone",
52 "primaryKey": false,
53 "notNull": true,
54 "default": "now()"
55 }
56 },
57 "indexes": {},
58 "foreignKeys": {
59 "memberships_account_id_accounts_id_fk": {
60 "name": "memberships_account_id_accounts_id_fk",
61 "tableFrom": "memberships",
62 "tableTo": "accounts",
63 "columnsFrom": ["account_id"],
64 "columnsTo": ["id"],
65 "onDelete": "cascade",
66 "onUpdate": "no action"
67 },
68 "memberships_organization_id_organizations_id_fk": {
69 "name": "memberships_organization_id_organizations_id_fk",
70 "tableFrom": "memberships",
71 "tableTo": "organizations",
72 "columnsFrom": ["organization_id"],
73 "columnsTo": ["id"],
74 "onDelete": "cascade",
75 "onUpdate": "no action"
76 }
77 },
78 "compositePrimaryKeys": {
79 "memberships_account_id_organization_id_pk": {
80 "name": "memberships_account_id_organization_id_pk",
81 "columns": ["account_id", "organization_id"]
82 }
83 },
84 "uniqueConstraints": {},
85 "policies": {},
86 "checkConstraints": {},
87 "isRLSEnabled": false
88 },
89 "public.organizations": {
90 "name": "organizations",
91 "schema": "",
92 "columns": {
93 "id": {
94 "name": "id",
95 "type": "text",
96 "primaryKey": true,
97 "notNull": true
98 },
99 "name": {
100 "name": "name",
101 "type": "text",
102 "primaryKey": false,
103 "notNull": true
104 },
105 "created_at": {
106 "name": "created_at",
107 "type": "timestamp with time zone",
108 "primaryKey": false,
109 "notNull": true,
110 "default": "now()"
111 }
112 },
113 "indexes": {},
114 "foreignKeys": {},
115 "compositePrimaryKeys": {},
116 "uniqueConstraints": {},
117 "policies": {},
118 "checkConstraints": {},
119 "isRLSEnabled": false
120 },
121 "public.blob": {
122 "name": "blob",
123 "schema": "",
124 "columns": {
125 "namespace": {
126 "name": "namespace",
127 "type": "text",
128 "primaryKey": false,
129 "notNull": true
130 },
131 "key": {
132 "name": "key",
133 "type": "text",
134 "primaryKey": false,
135 "notNull": true
136 },
137 "value": {
138 "name": "value",
139 "type": "text",
140 "primaryKey": false,
141 "notNull": true
142 }
143 },
144 "indexes": {},
145 "foreignKeys": {},
146 "compositePrimaryKeys": {
147 "blob_namespace_key_pk": {
148 "name": "blob_namespace_key_pk",
149 "columns": ["namespace", "key"]
150 }
151 },
152 "uniqueConstraints": {},
153 "policies": {},
154 "checkConstraints": {},
155 "isRLSEnabled": false
156 },
157 "public.connection": {
158 "name": "connection",
159 "schema": "",
160 "columns": {
161 "id": {
162 "name": "id",
163 "type": "text",
164 "primaryKey": false,
165 "notNull": true
166 },
167 "scope_id": {
168 "name": "scope_id",
169 "type": "text",
170 "primaryKey": false,
171 "notNull": true
172 },
173 "provider": {
174 "name": "provider",
175 "type": "text",
176 "primaryKey": false,
177 "notNull": true
178 },
179 "identity_label": {
180 "name": "identity_label",
181 "type": "text",
182 "primaryKey": false,
183 "notNull": false
184 },
185 "access_token_secret_id": {
186 "name": "access_token_secret_id",
187 "type": "text",
188 "primaryKey": false,
189 "notNull": true
190 },
191 "refresh_token_secret_id": {
192 "name": "refresh_token_secret_id",
193 "type": "text",
194 "primaryKey": false,
195 "notNull": false
196 },
197 "expires_at": {
198 "name": "expires_at",
199 "type": "bigint",
200 "primaryKey": false,
201 "notNull": false
202 },
203 "scope": {
204 "name": "scope",
205 "type": "text",
206 "primaryKey": false,
207 "notNull": false
208 },
209 "provider_state": {
210 "name": "provider_state",
211 "type": "jsonb",
212 "primaryKey": false,
213 "notNull": false
214 },
215 "created_at": {
216 "name": "created_at",
217 "type": "timestamp",
218 "primaryKey": false,
219 "notNull": true
220 },
221 "updated_at": {
222 "name": "updated_at",
223 "type": "timestamp",
224 "primaryKey": false,
225 "notNull": true
226 }
227 },
228 "indexes": {
229 "connection_scope_id_idx": {
230 "name": "connection_scope_id_idx",
231 "columns": [
232 {
233 "expression": "scope_id",
234 "isExpression": false,
235 "asc": true,
236 "nulls": "last"
237 }
238 ],
239 "isUnique": false,
240 "concurrently": false,
241 "method": "btree",
242 "with": {}
243 },
244 "connection_provider_idx": {
245 "name": "connection_provider_idx",
246 "columns": [
247 {
248 "expression": "provider",
249 "isExpression": false,
250 "asc": true,
251 "nulls": "last"
252 }
253 ],
254 "isUnique": false,
255 "concurrently": false,
256 "method": "btree",
257 "with": {}
258 }
259 },
260 "foreignKeys": {},
261 "compositePrimaryKeys": {
262 "connection_scope_id_id_pk": {
263 "name": "connection_scope_id_id_pk",
264 "columns": ["scope_id", "id"]
265 }
266 },
267 "uniqueConstraints": {},
268 "policies": {},
269 "checkConstraints": {},
270 "isRLSEnabled": false
271 },
272 "public.credential_binding": {
273 "name": "credential_binding",
274 "schema": "",
275 "columns": {
276 "id": {
277 "name": "id",
278 "type": "text",
279 "primaryKey": false,
280 "notNull": true
281 },
282 "scope_id": {
283 "name": "scope_id",
284 "type": "text",
285 "primaryKey": false,
286 "notNull": true
287 },
288 "plugin_id": {
289 "name": "plugin_id",
290 "type": "text",
291 "primaryKey": false,
292 "notNull": true
293 },
294 "source_id": {
295 "name": "source_id",
296 "type": "text",
297 "primaryKey": false,
298 "notNull": true
299 },
300 "source_scope_id": {
301 "name": "source_scope_id",
302 "type": "text",
303 "primaryKey": false,
304 "notNull": true
305 },
306 "slot_key": {
307 "name": "slot_key",
308 "type": "text",
309 "primaryKey": false,
310 "notNull": true
311 },
312 "kind": {
313 "name": "kind",
314 "type": "text",
315 "primaryKey": false,
316 "notNull": true
317 },
318 "text_value": {
319 "name": "text_value",
320 "type": "text",
321 "primaryKey": false,
322 "notNull": false
323 },
324 "secret_id": {
325 "name": "secret_id",
326 "type": "text",
327 "primaryKey": false,
328 "notNull": false
329 },
330 "connection_id": {
331 "name": "connection_id",
332 "type": "text",
333 "primaryKey": false,
334 "notNull": false
335 },
336 "created_at": {
337 "name": "created_at",
338 "type": "timestamp",
339 "primaryKey": false,
340 "notNull": true
341 },
342 "updated_at": {
343 "name": "updated_at",
344 "type": "timestamp",
345 "primaryKey": false,
346 "notNull": true
347 }
348 },
349 "indexes": {
350 "credential_binding_scope_id_idx": {
351 "name": "credential_binding_scope_id_idx",
352 "columns": [
353 {
354 "expression": "scope_id",
355 "isExpression": false,
356 "asc": true,
357 "nulls": "last"
358 }
359 ],
360 "isUnique": false,
361 "concurrently": false,
362 "method": "btree",
363 "with": {}
364 },
365 "credential_binding_plugin_id_idx": {
366 "name": "credential_binding_plugin_id_idx",
367 "columns": [
368 {
369 "expression": "plugin_id",
370 "isExpression": false,
371 "asc": true,
372 "nulls": "last"
373 }
374 ],
375 "isUnique": false,
376 "concurrently": false,
377 "method": "btree",
378 "with": {}
379 },
380 "credential_binding_source_id_idx": {
381 "name": "credential_binding_source_id_idx",
382 "columns": [
383 {
384 "expression": "source_id",
385 "isExpression": false,
386 "asc": true,
387 "nulls": "last"
388 }
389 ],
390 "isUnique": false,
391 "concurrently": false,
392 "method": "btree",
393 "with": {}
394 },
395 "credential_binding_source_scope_id_idx": {
396 "name": "credential_binding_source_scope_id_idx",
397 "columns": [
398 {
399 "expression": "source_scope_id",
400 "isExpression": false,
401 "asc": true,
402 "nulls": "last"
403 }
404 ],
405 "isUnique": false,
406 "concurrently": false,
407 "method": "btree",
408 "with": {}
409 },
410 "credential_binding_slot_key_idx": {
411 "name": "credential_binding_slot_key_idx",
412 "columns": [
413 {
414 "expression": "slot_key",
415 "isExpression": false,
416 "asc": true,
417 "nulls": "last"
418 }
419 ],
420 "isUnique": false,
421 "concurrently": false,
422 "method": "btree",
423 "with": {}
424 },
425 "credential_binding_kind_idx": {
426 "name": "credential_binding_kind_idx",
427 "columns": [
428 {
429 "expression": "kind",
430 "isExpression": false,
431 "asc": true,
432 "nulls": "last"
433 }
434 ],
435 "isUnique": false,
436 "concurrently": false,
437 "method": "btree",
438 "with": {}
439 },
440 "credential_binding_secret_id_idx": {
441 "name": "credential_binding_secret_id_idx",
442 "columns": [
443 {
444 "expression": "secret_id",
445 "isExpression": false,
446 "asc": true,
447 "nulls": "last"
448 }
449 ],
450 "isUnique": false,
451 "concurrently": false,
452 "method": "btree",
453 "with": {}
454 },
455 "credential_binding_connection_id_idx": {
456 "name": "credential_binding_connection_id_idx",
457 "columns": [
458 {
459 "expression": "connection_id",
460 "isExpression": false,
461 "asc": true,
462 "nulls": "last"
463 }
464 ],
465 "isUnique": false,
466 "concurrently": false,
467 "method": "btree",
468 "with": {}
469 }
470 },
471 "foreignKeys": {},
472 "compositePrimaryKeys": {
473 "credential_binding_scope_id_id_pk": {
474 "name": "credential_binding_scope_id_id_pk",
475 "columns": ["scope_id", "id"]
476 }
477 },
478 "uniqueConstraints": {},
479 "policies": {},
480 "checkConstraints": {},
481 "isRLSEnabled": false
482 },
483 "public.definition": {
484 "name": "definition",
485 "schema": "",
486 "columns": {
487 "id": {
488 "name": "id",
489 "type": "text",
490 "primaryKey": false,
491 "notNull": true
492 },
493 "scope_id": {
494 "name": "scope_id",
495 "type": "text",
496 "primaryKey": false,
497 "notNull": true
498 },
499 "source_id": {
500 "name": "source_id",
501 "type": "text",
502 "primaryKey": false,
503 "notNull": true
504 },
505 "plugin_id": {
506 "name": "plugin_id",
507 "type": "text",
508 "primaryKey": false,
509 "notNull": true
510 },
511 "name": {
512 "name": "name",
513 "type": "text",
514 "primaryKey": false,
515 "notNull": true
516 },
517 "schema": {
518 "name": "schema",
519 "type": "jsonb",
520 "primaryKey": false,
521 "notNull": true
522 },
523 "created_at": {
524 "name": "created_at",
525 "type": "timestamp",
526 "primaryKey": false,
527 "notNull": true
528 }
529 },
530 "indexes": {
531 "definition_scope_id_idx": {
532 "name": "definition_scope_id_idx",
533 "columns": [
534 {
535 "expression": "scope_id",
536 "isExpression": false,
537 "asc": true,
538 "nulls": "last"
539 }
540 ],
541 "isUnique": false,
542 "concurrently": false,
543 "method": "btree",
544 "with": {}
545 },
546 "definition_source_id_idx": {
547 "name": "definition_source_id_idx",
548 "columns": [
549 {
550 "expression": "source_id",
551 "isExpression": false,
552 "asc": true,
553 "nulls": "last"
554 }
555 ],
556 "isUnique": false,
557 "concurrently": false,
558 "method": "btree",
559 "with": {}
560 },
561 "definition_plugin_id_idx": {
562 "name": "definition_plugin_id_idx",
563 "columns": [
564 {
565 "expression": "plugin_id",
566 "isExpression": false,
567 "asc": true,
568 "nulls": "last"
569 }
570 ],
571 "isUnique": false,
572 "concurrently": false,
573 "method": "btree",
574 "with": {}
575 }
576 },
577 "foreignKeys": {},
578 "compositePrimaryKeys": {
579 "definition_scope_id_id_pk": {
580 "name": "definition_scope_id_id_pk",
581 "columns": ["scope_id", "id"]
582 }
583 },
584 "uniqueConstraints": {},
585 "policies": {},
586 "checkConstraints": {},
587 "isRLSEnabled": false
588 },
589 "public.graphql_operation": {
590 "name": "graphql_operation",
591 "schema": "",
592 "columns": {
593 "id": {
594 "name": "id",
595 "type": "text",
596 "primaryKey": false,
597 "notNull": true
598 },
599 "scope_id": {
600 "name": "scope_id",
601 "type": "text",
602 "primaryKey": false,
603 "notNull": true
604 },
605 "source_id": {
606 "name": "source_id",
607 "type": "text",
608 "primaryKey": false,
609 "notNull": true
610 },
611 "binding": {
612 "name": "binding",
613 "type": "jsonb",
614 "primaryKey": false,
615 "notNull": true
616 }
617 },
618 "indexes": {
619 "graphql_operation_scope_id_idx": {
620 "name": "graphql_operation_scope_id_idx",
621 "columns": [
622 {
623 "expression": "scope_id",
624 "isExpression": false,
625 "asc": true,
626 "nulls": "last"
627 }
628 ],
629 "isUnique": false,
630 "concurrently": false,
631 "method": "btree",
632 "with": {}
633 },
634 "graphql_operation_source_id_idx": {
635 "name": "graphql_operation_source_id_idx",
636 "columns": [
637 {
638 "expression": "source_id",
639 "isExpression": false,
640 "asc": true,
641 "nulls": "last"
642 }
643 ],
644 "isUnique": false,
645 "concurrently": false,
646 "method": "btree",
647 "with": {}
648 }
649 },
650 "foreignKeys": {},
651 "compositePrimaryKeys": {
652 "graphql_operation_scope_id_id_pk": {
653 "name": "graphql_operation_scope_id_id_pk",
654 "columns": ["scope_id", "id"]
655 }
656 },
657 "uniqueConstraints": {},
658 "policies": {},
659 "checkConstraints": {},
660 "isRLSEnabled": false
661 },
662 "public.graphql_source": {
663 "name": "graphql_source",
664 "schema": "",
665 "columns": {
666 "id": {
667 "name": "id",
668 "type": "text",
669 "primaryKey": false,
670 "notNull": true
671 },
672 "scope_id": {
673 "name": "scope_id",
674 "type": "text",
675 "primaryKey": false,
676 "notNull": true
677 },
678 "name": {
679 "name": "name",
680 "type": "text",
681 "primaryKey": false,
682 "notNull": true
683 },
684 "endpoint": {
685 "name": "endpoint",
686 "type": "text",
687 "primaryKey": false,
688 "notNull": true
689 },
690 "auth_kind": {
691 "name": "auth_kind",
692 "type": "text",
693 "primaryKey": false,
694 "notNull": true,
695 "default": "'none'"
696 },
697 "auth_connection_slot": {
698 "name": "auth_connection_slot",
699 "type": "text",
700 "primaryKey": false,
701 "notNull": false
702 }
703 },
704 "indexes": {
705 "graphql_source_scope_id_idx": {
706 "name": "graphql_source_scope_id_idx",
707 "columns": [
708 {
709 "expression": "scope_id",
710 "isExpression": false,
711 "asc": true,
712 "nulls": "last"
713 }
714 ],
715 "isUnique": false,
716 "concurrently": false,
717 "method": "btree",
718 "with": {}
719 }
720 },
721 "foreignKeys": {},
722 "compositePrimaryKeys": {
723 "graphql_source_scope_id_id_pk": {
724 "name": "graphql_source_scope_id_id_pk",
725 "columns": ["scope_id", "id"]
726 }
727 },
728 "uniqueConstraints": {},
729 "policies": {},
730 "checkConstraints": {},
731 "isRLSEnabled": false
732 },
733 "public.graphql_source_header": {
734 "name": "graphql_source_header",
735 "schema": "",
736 "columns": {
737 "id": {
738 "name": "id",
739 "type": "text",
740 "primaryKey": false,
741 "notNull": true
742 },
743 "scope_id": {
744 "name": "scope_id",
745 "type": "text",
746 "primaryKey": false,
747 "notNull": true
748 },
749 "source_id": {
750 "name": "source_id",
751 "type": "text",
752 "primaryKey": false,
753 "notNull": true
754 },
755 "name": {
756 "name": "name",
757 "type": "text",
758 "primaryKey": false,
759 "notNull": true
760 },
761 "kind": {
762 "name": "kind",
763 "type": "text",
764 "primaryKey": false,
765 "notNull": true
766 },
767 "text_value": {
768 "name": "text_value",
769 "type": "text",
770 "primaryKey": false,
771 "notNull": false
772 },
773 "slot_key": {
774 "name": "slot_key",
775 "type": "text",
776 "primaryKey": false,
777 "notNull": false
778 },
779 "prefix": {
780 "name": "prefix",
781 "type": "text",
782 "primaryKey": false,
783 "notNull": false
784 }
785 },
786 "indexes": {
787 "graphql_source_header_scope_id_idx": {
788 "name": "graphql_source_header_scope_id_idx",
789 "columns": [
790 {
791 "expression": "scope_id",
792 "isExpression": false,
793 "asc": true,
794 "nulls": "last"
795 }
796 ],
797 "isUnique": false,
798 "concurrently": false,
799 "method": "btree",
800 "with": {}
801 },
802 "graphql_source_header_source_id_idx": {
803 "name": "graphql_source_header_source_id_idx",
804 "columns": [
805 {
806 "expression": "source_id",
807 "isExpression": false,
808 "asc": true,
809 "nulls": "last"
810 }
811 ],
812 "isUnique": false,
813 "concurrently": false,
814 "method": "btree",
815 "with": {}
816 }
817 },
818 "foreignKeys": {},
819 "compositePrimaryKeys": {
820 "graphql_source_header_scope_id_id_pk": {
821 "name": "graphql_source_header_scope_id_id_pk",
822 "columns": ["scope_id", "id"]
823 }
824 },
825 "uniqueConstraints": {},
826 "policies": {},
827 "checkConstraints": {},
828 "isRLSEnabled": false
829 },
830 "public.graphql_source_query_param": {
831 "name": "graphql_source_query_param",
832 "schema": "",
833 "columns": {
834 "id": {
835 "name": "id",
836 "type": "text",
837 "primaryKey": false,
838 "notNull": true
839 },
840 "scope_id": {
841 "name": "scope_id",
842 "type": "text",
843 "primaryKey": false,
844 "notNull": true
845 },
846 "source_id": {
847 "name": "source_id",
848 "type": "text",
849 "primaryKey": false,
850 "notNull": true
851 },
852 "name": {
853 "name": "name",
854 "type": "text",
855 "primaryKey": false,
856 "notNull": true
857 },
858 "kind": {
859 "name": "kind",
860 "type": "text",
861 "primaryKey": false,
862 "notNull": true
863 },
864 "text_value": {
865 "name": "text_value",
866 "type": "text",
867 "primaryKey": false,
868 "notNull": false
869 },
870 "slot_key": {
871 "name": "slot_key",
872 "type": "text",
873 "primaryKey": false,
874 "notNull": false
875 },
876 "prefix": {
877 "name": "prefix",
878 "type": "text",
879 "primaryKey": false,
880 "notNull": false
881 }
882 },
883 "indexes": {
884 "graphql_source_query_param_scope_id_idx": {
885 "name": "graphql_source_query_param_scope_id_idx",
886 "columns": [
887 {
888 "expression": "scope_id",
889 "isExpression": false,
890 "asc": true,
891 "nulls": "last"
892 }
893 ],
894 "isUnique": false,
895 "concurrently": false,
896 "method": "btree",
897 "with": {}
898 },
899 "graphql_source_query_param_source_id_idx": {
900 "name": "graphql_source_query_param_source_id_idx",
901 "columns": [
902 {
903 "expression": "source_id",
904 "isExpression": false,
905 "asc": true,
906 "nulls": "last"
907 }
908 ],
909 "isUnique": false,
910 "concurrently": false,
911 "method": "btree",
912 "with": {}
913 }
914 },
915 "foreignKeys": {},
916 "compositePrimaryKeys": {
917 "graphql_source_query_param_scope_id_id_pk": {
918 "name": "graphql_source_query_param_scope_id_id_pk",
919 "columns": ["scope_id", "id"]
920 }
921 },
922 "uniqueConstraints": {},
923 "policies": {},
924 "checkConstraints": {},
925 "isRLSEnabled": false
926 },
927 "public.mcp_binding": {
928 "name": "mcp_binding",
929 "schema": "",
930 "columns": {
931 "id": {
932 "name": "id",
933 "type": "text",
934 "primaryKey": false,
935 "notNull": true
936 },
937 "scope_id": {
938 "name": "scope_id",
939 "type": "text",
940 "primaryKey": false,
941 "notNull": true
942 },
943 "source_id": {
944 "name": "source_id",
945 "type": "text",
946 "primaryKey": false,
947 "notNull": true
948 },
949 "binding": {
950 "name": "binding",
951 "type": "jsonb",
952 "primaryKey": false,
953 "notNull": true
954 },
955 "created_at": {
956 "name": "created_at",
957 "type": "timestamp",
958 "primaryKey": false,
959 "notNull": true
960 }
961 },
962 "indexes": {
963 "mcp_binding_scope_id_idx": {
964 "name": "mcp_binding_scope_id_idx",
965 "columns": [
966 {
967 "expression": "scope_id",
968 "isExpression": false,
969 "asc": true,
970 "nulls": "last"
971 }
972 ],
973 "isUnique": false,
974 "concurrently": false,
975 "method": "btree",
976 "with": {}
977 },
978 "mcp_binding_source_id_idx": {
979 "name": "mcp_binding_source_id_idx",
980 "columns": [
981 {
982 "expression": "source_id",
983 "isExpression": false,
984 "asc": true,
985 "nulls": "last"
986 }
987 ],
988 "isUnique": false,
989 "concurrently": false,
990 "method": "btree",
991 "with": {}
992 }
993 },
994 "foreignKeys": {},
995 "compositePrimaryKeys": {
996 "mcp_binding_scope_id_id_pk": {
997 "name": "mcp_binding_scope_id_id_pk",
998 "columns": ["scope_id", "id"]
999 }
1000 },
1001 "uniqueConstraints": {},
1002 "policies": {},
1003 "checkConstraints": {},
1004 "isRLSEnabled": false
1005 },
1006 "public.mcp_source": {
1007 "name": "mcp_source",
1008 "schema": "",
1009 "columns": {
1010 "id": {
1011 "name": "id",
1012 "type": "text",
1013 "primaryKey": false,
1014 "notNull": true
1015 },
1016 "scope_id": {
1017 "name": "scope_id",
1018 "type": "text",
1019 "primaryKey": false,
1020 "notNull": true
1021 },
1022 "name": {
1023 "name": "name",
1024 "type": "text",
1025 "primaryKey": false,
1026 "notNull": true
1027 },
1028 "config": {
1029 "name": "config",
1030 "type": "jsonb",
1031 "primaryKey": false,
1032 "notNull": true
1033 },
1034 "auth_kind": {
1035 "name": "auth_kind",
1036 "type": "text",
1037 "primaryKey": false,
1038 "notNull": true,
1039 "default": "'none'"
1040 },
1041 "auth_header_name": {
1042 "name": "auth_header_name",
1043 "type": "text",
1044 "primaryKey": false,
1045 "notNull": false
1046 },
1047 "auth_header_slot": {
1048 "name": "auth_header_slot",
1049 "type": "text",
1050 "primaryKey": false,
1051 "notNull": false
1052 },
1053 "auth_header_prefix": {
1054 "name": "auth_header_prefix",
1055 "type": "text",
1056 "primaryKey": false,
1057 "notNull": false
1058 },
1059 "auth_connection_slot": {
1060 "name": "auth_connection_slot",
1061 "type": "text",
1062 "primaryKey": false,
1063 "notNull": false
1064 },
1065 "auth_client_id_slot": {
1066 "name": "auth_client_id_slot",
1067 "type": "text",
1068 "primaryKey": false,
1069 "notNull": false
1070 },
1071 "auth_client_secret_slot": {
1072 "name": "auth_client_secret_slot",
1073 "type": "text",
1074 "primaryKey": false,
1075 "notNull": false
1076 },
1077 "created_at": {
1078 "name": "created_at",
1079 "type": "timestamp",
1080 "primaryKey": false,
1081 "notNull": true
1082 }
1083 },
1084 "indexes": {
1085 "mcp_source_scope_id_idx": {
1086 "name": "mcp_source_scope_id_idx",
1087 "columns": [
1088 {
1089 "expression": "scope_id",
1090 "isExpression": false,
1091 "asc": true,
1092 "nulls": "last"
1093 }
1094 ],
1095 "isUnique": false,
1096 "concurrently": false,
1097 "method": "btree",
1098 "with": {}
1099 }
1100 },
1101 "foreignKeys": {},
1102 "compositePrimaryKeys": {
1103 "mcp_source_scope_id_id_pk": {
1104 "name": "mcp_source_scope_id_id_pk",
1105 "columns": ["scope_id", "id"]
1106 }
1107 },
1108 "uniqueConstraints": {},
1109 "policies": {},
1110 "checkConstraints": {},
1111 "isRLSEnabled": false
1112 },
1113 "public.mcp_source_header": {
1114 "name": "mcp_source_header",
1115 "schema": "",
1116 "columns": {
1117 "id": {
1118 "name": "id",
1119 "type": "text",
1120 "primaryKey": false,
1121 "notNull": true
1122 },
1123 "scope_id": {
1124 "name": "scope_id",
1125 "type": "text",
1126 "primaryKey": false,
1127 "notNull": true
1128 },
1129 "source_id": {
1130 "name": "source_id",
1131 "type": "text",
1132 "primaryKey": false,
1133 "notNull": true
1134 },
1135 "name": {
1136 "name": "name",
1137 "type": "text",
1138 "primaryKey": false,
1139 "notNull": true
1140 },
1141 "kind": {
1142 "name": "kind",
1143 "type": "text",
1144 "primaryKey": false,
1145 "notNull": true
1146 },
1147 "text_value": {
1148 "name": "text_value",
1149 "type": "text",
1150 "primaryKey": false,
1151 "notNull": false
1152 },
1153 "slot_key": {
1154 "name": "slot_key",
1155 "type": "text",
1156 "primaryKey": false,
1157 "notNull": false
1158 },
1159 "prefix": {
1160 "name": "prefix",
1161 "type": "text",
1162 "primaryKey": false,
1163 "notNull": false
1164 }
1165 },
1166 "indexes": {
1167 "mcp_source_header_scope_id_idx": {
1168 "name": "mcp_source_header_scope_id_idx",
1169 "columns": [
1170 {
1171 "expression": "scope_id",
1172 "isExpression": false,
1173 "asc": true,
1174 "nulls": "last"
1175 }
1176 ],
1177 "isUnique": false,
1178 "concurrently": false,
1179 "method": "btree",
1180 "with": {}
1181 },
1182 "mcp_source_header_source_id_idx": {
1183 "name": "mcp_source_header_source_id_idx",
1184 "columns": [
1185 {
1186 "expression": "source_id",
1187 "isExpression": false,
1188 "asc": true,
1189 "nulls": "last"
1190 }
1191 ],
1192 "isUnique": false,
1193 "concurrently": false,
1194 "method": "btree",
1195 "with": {}
1196 }
1197 },
1198 "foreignKeys": {},
1199 "compositePrimaryKeys": {
1200 "mcp_source_header_scope_id_id_pk": {
1201 "name": "mcp_source_header_scope_id_id_pk",
1202 "columns": ["scope_id", "id"]
1203 }
1204 },
1205 "uniqueConstraints": {},
1206 "policies": {},
1207 "checkConstraints": {},
1208 "isRLSEnabled": false
1209 },
1210 "public.mcp_source_query_param": {
1211 "name": "mcp_source_query_param",
1212 "schema": "",
1213 "columns": {
1214 "id": {
1215 "name": "id",
1216 "type": "text",
1217 "primaryKey": false,
1218 "notNull": true
1219 },
1220 "scope_id": {
1221 "name": "scope_id",
1222 "type": "text",
1223 "primaryKey": false,
1224 "notNull": true
1225 },
1226 "source_id": {
1227 "name": "source_id",
1228 "type": "text",
1229 "primaryKey": false,
1230 "notNull": true
1231 },
1232 "name": {
1233 "name": "name",
1234 "type": "text",
1235 "primaryKey": false,
1236 "notNull": true
1237 },
1238 "kind": {
1239 "name": "kind",
1240 "type": "text",
1241 "primaryKey": false,
1242 "notNull": true
1243 },
1244 "text_value": {
1245 "name": "text_value",
1246 "type": "text",
1247 "primaryKey": false,
1248 "notNull": false
1249 },
1250 "slot_key": {
1251 "name": "slot_key",
1252 "type": "text",
1253 "primaryKey": false,
1254 "notNull": false
1255 },
1256 "prefix": {
1257 "name": "prefix",
1258 "type": "text",
1259 "primaryKey": false,
1260 "notNull": false
1261 }
1262 },
1263 "indexes": {
1264 "mcp_source_query_param_scope_id_idx": {
1265 "name": "mcp_source_query_param_scope_id_idx",
1266 "columns": [
1267 {
1268 "expression": "scope_id",
1269 "isExpression": false,
1270 "asc": true,
1271 "nulls": "last"
1272 }
1273 ],
1274 "isUnique": false,
1275 "concurrently": false,
1276 "method": "btree",
1277 "with": {}
1278 },
1279 "mcp_source_query_param_source_id_idx": {
1280 "name": "mcp_source_query_param_source_id_idx",
1281 "columns": [
1282 {
1283 "expression": "source_id",
1284 "isExpression": false,
1285 "asc": true,
1286 "nulls": "last"
1287 }
1288 ],
1289 "isUnique": false,
1290 "concurrently": false,
1291 "method": "btree",
1292 "with": {}
1293 }
1294 },
1295 "foreignKeys": {},
1296 "compositePrimaryKeys": {
1297 "mcp_source_query_param_scope_id_id_pk": {
1298 "name": "mcp_source_query_param_scope_id_id_pk",
1299 "columns": ["scope_id", "id"]
1300 }
1301 },
1302 "uniqueConstraints": {},
1303 "policies": {},
1304 "checkConstraints": {},
1305 "isRLSEnabled": false
1306 },
1307 "public.oauth2_session": {
1308 "name": "oauth2_session",
1309 "schema": "",
1310 "columns": {
1311 "id": {
1312 "name": "id",
1313 "type": "text",
1314 "primaryKey": false,
1315 "notNull": true
1316 },
1317 "scope_id": {
1318 "name": "scope_id",
1319 "type": "text",
1320 "primaryKey": false,
1321 "notNull": true
1322 },
1323 "plugin_id": {
1324 "name": "plugin_id",
1325 "type": "text",
1326 "primaryKey": false,
1327 "notNull": true
1328 },
1329 "strategy": {
1330 "name": "strategy",
1331 "type": "text",
1332 "primaryKey": false,
1333 "notNull": true
1334 },
1335 "connection_id": {
1336 "name": "connection_id",
1337 "type": "text",
1338 "primaryKey": false,
1339 "notNull": true
1340 },
1341 "token_scope": {
1342 "name": "token_scope",
1343 "type": "text",
1344 "primaryKey": false,
1345 "notNull": true
1346 },
1347 "redirect_url": {
1348 "name": "redirect_url",
1349 "type": "text",
1350 "primaryKey": false,
1351 "notNull": true
1352 },
1353 "payload": {
1354 "name": "payload",
1355 "type": "jsonb",
1356 "primaryKey": false,
1357 "notNull": true
1358 },
1359 "expires_at": {
1360 "name": "expires_at",
1361 "type": "bigint",
1362 "primaryKey": false,
1363 "notNull": true
1364 },
1365 "created_at": {
1366 "name": "created_at",
1367 "type": "timestamp",
1368 "primaryKey": false,
1369 "notNull": true
1370 }
1371 },
1372 "indexes": {
1373 "oauth2_session_scope_id_idx": {
1374 "name": "oauth2_session_scope_id_idx",
1375 "columns": [
1376 {
1377 "expression": "scope_id",
1378 "isExpression": false,
1379 "asc": true,
1380 "nulls": "last"
1381 }
1382 ],
1383 "isUnique": false,
1384 "concurrently": false,
1385 "method": "btree",
1386 "with": {}
1387 },
1388 "oauth2_session_plugin_id_idx": {
1389 "name": "oauth2_session_plugin_id_idx",
1390 "columns": [
1391 {
1392 "expression": "plugin_id",
1393 "isExpression": false,
1394 "asc": true,
1395 "nulls": "last"
1396 }
1397 ],
1398 "isUnique": false,
1399 "concurrently": false,
1400 "method": "btree",
1401 "with": {}
1402 },
1403 "oauth2_session_connection_id_idx": {
1404 "name": "oauth2_session_connection_id_idx",
1405 "columns": [
1406 {
1407 "expression": "connection_id",
1408 "isExpression": false,
1409 "asc": true,
1410 "nulls": "last"
1411 }
1412 ],
1413 "isUnique": false,
1414 "concurrently": false,
1415 "method": "btree",
1416 "with": {}
1417 }
1418 },
1419 "foreignKeys": {},
1420 "compositePrimaryKeys": {
1421 "oauth2_session_scope_id_id_pk": {
1422 "name": "oauth2_session_scope_id_id_pk",
1423 "columns": ["scope_id", "id"]
1424 }
1425 },
1426 "uniqueConstraints": {},
1427 "policies": {},
1428 "checkConstraints": {},
1429 "isRLSEnabled": false
1430 },
1431 "public.openapi_operation": {
1432 "name": "openapi_operation",
1433 "schema": "",
1434 "columns": {
1435 "id": {
1436 "name": "id",
1437 "type": "text",
1438 "primaryKey": false,
1439 "notNull": true
1440 },
1441 "scope_id": {
1442 "name": "scope_id",
1443 "type": "text",
1444 "primaryKey": false,
1445 "notNull": true
1446 },
1447 "source_id": {
1448 "name": "source_id",
1449 "type": "text",
1450 "primaryKey": false,
1451 "notNull": true
1452 },
1453 "binding": {
1454 "name": "binding",
1455 "type": "jsonb",
1456 "primaryKey": false,
1457 "notNull": true
1458 }
1459 },
1460 "indexes": {
1461 "openapi_operation_scope_id_idx": {
1462 "name": "openapi_operation_scope_id_idx",
1463 "columns": [
1464 {
1465 "expression": "scope_id",
1466 "isExpression": false,
1467 "asc": true,
1468 "nulls": "last"
1469 }
1470 ],
1471 "isUnique": false,
1472 "concurrently": false,
1473 "method": "btree",
1474 "with": {}
1475 },
1476 "openapi_operation_source_id_idx": {
1477 "name": "openapi_operation_source_id_idx",
1478 "columns": [
1479 {
1480 "expression": "source_id",
1481 "isExpression": false,
1482 "asc": true,
1483 "nulls": "last"
1484 }
1485 ],
1486 "isUnique": false,
1487 "concurrently": false,
1488 "method": "btree",
1489 "with": {}
1490 }
1491 },
1492 "foreignKeys": {},
1493 "compositePrimaryKeys": {
1494 "openapi_operation_scope_id_id_pk": {
1495 "name": "openapi_operation_scope_id_id_pk",
1496 "columns": ["scope_id", "id"]
1497 }
1498 },
1499 "uniqueConstraints": {},
1500 "policies": {},
1501 "checkConstraints": {},
1502 "isRLSEnabled": false
1503 },
1504 "public.openapi_source": {
1505 "name": "openapi_source",
1506 "schema": "",
1507 "columns": {
1508 "id": {
1509 "name": "id",
1510 "type": "text",
1511 "primaryKey": false,
1512 "notNull": true
1513 },
1514 "scope_id": {
1515 "name": "scope_id",
1516 "type": "text",
1517 "primaryKey": false,
1518 "notNull": true
1519 },
1520 "name": {
1521 "name": "name",
1522 "type": "text",
1523 "primaryKey": false,
1524 "notNull": true
1525 },
1526 "spec": {
1527 "name": "spec",
1528 "type": "text",
1529 "primaryKey": false,
1530 "notNull": true
1531 },
1532 "source_url": {
1533 "name": "source_url",
1534 "type": "text",
1535 "primaryKey": false,
1536 "notNull": false
1537 },
1538 "base_url": {
1539 "name": "base_url",
1540 "type": "text",
1541 "primaryKey": false,
1542 "notNull": false
1543 },
1544 "oauth2": {
1545 "name": "oauth2",
1546 "type": "jsonb",
1547 "primaryKey": false,
1548 "notNull": false
1549 }
1550 },
1551 "indexes": {
1552 "openapi_source_scope_id_idx": {
1553 "name": "openapi_source_scope_id_idx",
1554 "columns": [
1555 {
1556 "expression": "scope_id",
1557 "isExpression": false,
1558 "asc": true,
1559 "nulls": "last"
1560 }
1561 ],
1562 "isUnique": false,
1563 "concurrently": false,
1564 "method": "btree",
1565 "with": {}
1566 }
1567 },
1568 "foreignKeys": {},
1569 "compositePrimaryKeys": {
1570 "openapi_source_scope_id_id_pk": {
1571 "name": "openapi_source_scope_id_id_pk",
1572 "columns": ["scope_id", "id"]
1573 }
1574 },
1575 "uniqueConstraints": {},
1576 "policies": {},
1577 "checkConstraints": {},
1578 "isRLSEnabled": false
1579 },
1580 "public.openapi_source_header": {
1581 "name": "openapi_source_header",
1582 "schema": "",
1583 "columns": {
1584 "id": {
1585 "name": "id",
1586 "type": "text",
1587 "primaryKey": false,
1588 "notNull": true
1589 },
1590 "scope_id": {
1591 "name": "scope_id",
1592 "type": "text",
1593 "primaryKey": false,
1594 "notNull": true
1595 },
1596 "source_id": {
1597 "name": "source_id",
1598 "type": "text",
1599 "primaryKey": false,
1600 "notNull": true
1601 },
1602 "name": {
1603 "name": "name",
1604 "type": "text",
1605 "primaryKey": false,
1606 "notNull": true
1607 },
1608 "kind": {
1609 "name": "kind",
1610 "type": "text",
1611 "primaryKey": false,
1612 "notNull": true
1613 },
1614 "text_value": {
1615 "name": "text_value",
1616 "type": "text",
1617 "primaryKey": false,
1618 "notNull": false
1619 },
1620 "slot_key": {
1621 "name": "slot_key",
1622 "type": "text",
1623 "primaryKey": false,
1624 "notNull": false
1625 },
1626 "prefix": {
1627 "name": "prefix",
1628 "type": "text",
1629 "primaryKey": false,
1630 "notNull": false
1631 }
1632 },
1633 "indexes": {
1634 "openapi_source_header_scope_id_idx": {
1635 "name": "openapi_source_header_scope_id_idx",
1636 "columns": [
1637 {
1638 "expression": "scope_id",
1639 "isExpression": false,
1640 "asc": true,
1641 "nulls": "last"
1642 }
1643 ],
1644 "isUnique": false,
1645 "concurrently": false,
1646 "method": "btree",
1647 "with": {}
1648 },
1649 "openapi_source_header_source_id_idx": {
1650 "name": "openapi_source_header_source_id_idx",
1651 "columns": [
1652 {
1653 "expression": "source_id",
1654 "isExpression": false,
1655 "asc": true,
1656 "nulls": "last"
1657 }
1658 ],
1659 "isUnique": false,
1660 "concurrently": false,
1661 "method": "btree",
1662 "with": {}
1663 }
1664 },
1665 "foreignKeys": {},
1666 "compositePrimaryKeys": {
1667 "openapi_source_header_scope_id_id_pk": {
1668 "name": "openapi_source_header_scope_id_id_pk",
1669 "columns": ["scope_id", "id"]
1670 }
1671 },
1672 "uniqueConstraints": {},
1673 "policies": {},
1674 "checkConstraints": {},
1675 "isRLSEnabled": false
1676 },
1677 "public.openapi_source_query_param": {
1678 "name": "openapi_source_query_param",
1679 "schema": "",
1680 "columns": {
1681 "id": {
1682 "name": "id",
1683 "type": "text",
1684 "primaryKey": false,
1685 "notNull": true
1686 },
1687 "scope_id": {
1688 "name": "scope_id",
1689 "type": "text",
1690 "primaryKey": false,
1691 "notNull": true
1692 },
1693 "source_id": {
1694 "name": "source_id",
1695 "type": "text",
1696 "primaryKey": false,
1697 "notNull": true
1698 },
1699 "name": {
1700 "name": "name",
1701 "type": "text",
1702 "primaryKey": false,
1703 "notNull": true
1704 },
1705 "kind": {
1706 "name": "kind",
1707 "type": "text",
1708 "primaryKey": false,
1709 "notNull": true
1710 },
1711 "text_value": {
1712 "name": "text_value",
1713 "type": "text",
1714 "primaryKey": false,
1715 "notNull": false
1716 },
1717 "slot_key": {
1718 "name": "slot_key",
1719 "type": "text",
1720 "primaryKey": false,
1721 "notNull": false
1722 },
1723 "prefix": {
1724 "name": "prefix",
1725 "type": "text",
1726 "primaryKey": false,
1727 "notNull": false
1728 }
1729 },
1730 "indexes": {
1731 "openapi_source_query_param_scope_id_idx": {
1732 "name": "openapi_source_query_param_scope_id_idx",
1733 "columns": [
1734 {
1735 "expression": "scope_id",
1736 "isExpression": false,
1737 "asc": true,
1738 "nulls": "last"
1739 }
1740 ],
1741 "isUnique": false,
1742 "concurrently": false,
1743 "method": "btree",
1744 "with": {}
1745 },
1746 "openapi_source_query_param_source_id_idx": {
1747 "name": "openapi_source_query_param_source_id_idx",
1748 "columns": [
1749 {
1750 "expression": "source_id",
1751 "isExpression": false,
1752 "asc": true,
1753 "nulls": "last"
1754 }
1755 ],
1756 "isUnique": false,
1757 "concurrently": false,
1758 "method": "btree",
1759 "with": {}
1760 }
1761 },
1762 "foreignKeys": {},
1763 "compositePrimaryKeys": {
1764 "openapi_source_query_param_scope_id_id_pk": {
1765 "name": "openapi_source_query_param_scope_id_id_pk",
1766 "columns": ["scope_id", "id"]
1767 }
1768 },
1769 "uniqueConstraints": {},
1770 "policies": {},
1771 "checkConstraints": {},
1772 "isRLSEnabled": false
1773 },
1774 "public.openapi_source_spec_fetch_header": {
1775 "name": "openapi_source_spec_fetch_header",
1776 "schema": "",
1777 "columns": {
1778 "id": {
1779 "name": "id",
1780 "type": "text",
1781 "primaryKey": false,
1782 "notNull": true
1783 },
1784 "scope_id": {
1785 "name": "scope_id",
1786 "type": "text",
1787 "primaryKey": false,
1788 "notNull": true
1789 },
1790 "source_id": {
1791 "name": "source_id",
1792 "type": "text",
1793 "primaryKey": false,
1794 "notNull": true
1795 },
1796 "name": {
1797 "name": "name",
1798 "type": "text",
1799 "primaryKey": false,
1800 "notNull": true
1801 },
1802 "kind": {
1803 "name": "kind",
1804 "type": "text",
1805 "primaryKey": false,
1806 "notNull": true
1807 },
1808 "text_value": {
1809 "name": "text_value",
1810 "type": "text",
1811 "primaryKey": false,
1812 "notNull": false
1813 },
1814 "slot_key": {
1815 "name": "slot_key",
1816 "type": "text",
1817 "primaryKey": false,
1818 "notNull": false
1819 },
1820 "prefix": {
1821 "name": "prefix",
1822 "type": "text",
1823 "primaryKey": false,
1824 "notNull": false
1825 }
1826 },
1827 "indexes": {
1828 "openapi_source_spec_fetch_header_scope_id_idx": {
1829 "name": "openapi_source_spec_fetch_header_scope_id_idx",
1830 "columns": [
1831 {
1832 "expression": "scope_id",
1833 "isExpression": false,
1834 "asc": true,
1835 "nulls": "last"
1836 }
1837 ],
1838 "isUnique": false,
1839 "concurrently": false,
1840 "method": "btree",
1841 "with": {}
1842 },
1843 "openapi_source_spec_fetch_header_source_id_idx": {
1844 "name": "openapi_source_spec_fetch_header_source_id_idx",
1845 "columns": [
1846 {
1847 "expression": "source_id",
1848 "isExpression": false,
1849 "asc": true,
1850 "nulls": "last"
1851 }
1852 ],
1853 "isUnique": false,
1854 "concurrently": false,
1855 "method": "btree",
1856 "with": {}
1857 }
1858 },
1859 "foreignKeys": {},
1860 "compositePrimaryKeys": {
1861 "openapi_source_spec_fetch_header_scope_id_id_pk": {
1862 "name": "openapi_source_spec_fetch_header_scope_id_id_pk",
1863 "columns": ["scope_id", "id"]
1864 }
1865 },
1866 "uniqueConstraints": {},
1867 "policies": {},
1868 "checkConstraints": {},
1869 "isRLSEnabled": false
1870 },
1871 "public.openapi_source_spec_fetch_query_param": {
1872 "name": "openapi_source_spec_fetch_query_param",
1873 "schema": "",
1874 "columns": {
1875 "id": {
1876 "name": "id",
1877 "type": "text",
1878 "primaryKey": false,
1879 "notNull": true
1880 },
1881 "scope_id": {
1882 "name": "scope_id",
1883 "type": "text",
1884 "primaryKey": false,
1885 "notNull": true
1886 },
1887 "source_id": {
1888 "name": "source_id",
1889 "type": "text",
1890 "primaryKey": false,
1891 "notNull": true
1892 },
1893 "name": {
1894 "name": "name",
1895 "type": "text",
1896 "primaryKey": false,
1897 "notNull": true
1898 },
1899 "kind": {
1900 "name": "kind",
1901 "type": "text",
1902 "primaryKey": false,
1903 "notNull": true
1904 },
1905 "text_value": {
1906 "name": "text_value",
1907 "type": "text",
1908 "primaryKey": false,
1909 "notNull": false
1910 },
1911 "slot_key": {
1912 "name": "slot_key",
1913 "type": "text",
1914 "primaryKey": false,
1915 "notNull": false
1916 },
1917 "prefix": {
1918 "name": "prefix",
1919 "type": "text",
1920 "primaryKey": false,
1921 "notNull": false
1922 }
1923 },
1924 "indexes": {
1925 "openapi_source_spec_fetch_query_param_scope_id_idx": {
1926 "name": "openapi_source_spec_fetch_query_param_scope_id_idx",
1927 "columns": [
1928 {
1929 "expression": "scope_id",
1930 "isExpression": false,
1931 "asc": true,
1932 "nulls": "last"
1933 }
1934 ],
1935 "isUnique": false,
1936 "concurrently": false,
1937 "method": "btree",
1938 "with": {}
1939 },
1940 "openapi_source_spec_fetch_query_param_source_id_idx": {
1941 "name": "openapi_source_spec_fetch_query_param_source_id_idx",
1942 "columns": [
1943 {
1944 "expression": "source_id",
1945 "isExpression": false,
1946 "asc": true,
1947 "nulls": "last"
1948 }
1949 ],
1950 "isUnique": false,
1951 "concurrently": false,
1952 "method": "btree",
1953 "with": {}
1954 }
1955 },
1956 "foreignKeys": {},
1957 "compositePrimaryKeys": {
1958 "openapi_source_spec_fetch_query_param_scope_id_id_pk": {
1959 "name": "openapi_source_spec_fetch_query_param_scope_id_id_pk",
1960 "columns": ["scope_id", "id"]
1961 }
1962 },
1963 "uniqueConstraints": {},
1964 "policies": {},
1965 "checkConstraints": {},
1966 "isRLSEnabled": false
1967 },
1968 "public.secret": {
1969 "name": "secret",
1970 "schema": "",
1971 "columns": {
1972 "id": {
1973 "name": "id",
1974 "type": "text",
1975 "primaryKey": false,
1976 "notNull": true
1977 },
1978 "scope_id": {
1979 "name": "scope_id",
1980 "type": "text",
1981 "primaryKey": false,
1982 "notNull": true
1983 },
1984 "name": {
1985 "name": "name",
1986 "type": "text",
1987 "primaryKey": false,
1988 "notNull": true
1989 },
1990 "provider": {
1991 "name": "provider",
1992 "type": "text",
1993 "primaryKey": false,
1994 "notNull": true
1995 },
1996 "owned_by_connection_id": {
1997 "name": "owned_by_connection_id",
1998 "type": "text",
1999 "primaryKey": false,
2000 "notNull": false
2001 },
2002 "created_at": {
2003 "name": "created_at",
2004 "type": "timestamp",
2005 "primaryKey": false,
2006 "notNull": true
2007 }
2008 },
2009 "indexes": {
2010 "secret_scope_id_idx": {
2011 "name": "secret_scope_id_idx",
2012 "columns": [
2013 {
2014 "expression": "scope_id",
2015 "isExpression": false,
2016 "asc": true,
2017 "nulls": "last"
2018 }
2019 ],
2020 "isUnique": false,
2021 "concurrently": false,
2022 "method": "btree",
2023 "with": {}
2024 },
2025 "secret_provider_idx": {
2026 "name": "secret_provider_idx",
2027 "columns": [
2028 {
2029 "expression": "provider",
2030 "isExpression": false,
2031 "asc": true,
2032 "nulls": "last"
2033 }
2034 ],
2035 "isUnique": false,
2036 "concurrently": false,
2037 "method": "btree",
2038 "with": {}
2039 },
2040 "secret_owned_by_connection_id_idx": {
2041 "name": "secret_owned_by_connection_id_idx",
2042 "columns": [
2043 {
2044 "expression": "owned_by_connection_id",
2045 "isExpression": false,
2046 "asc": true,
2047 "nulls": "last"
2048 }
2049 ],
2050 "isUnique": false,
2051 "concurrently": false,
2052 "method": "btree",
2053 "with": {}
2054 }
2055 },
2056 "foreignKeys": {},
2057 "compositePrimaryKeys": {
2058 "secret_scope_id_id_pk": {
2059 "name": "secret_scope_id_id_pk",
2060 "columns": ["scope_id", "id"]
2061 }
2062 },
2063 "uniqueConstraints": {},
2064 "policies": {},
2065 "checkConstraints": {},
2066 "isRLSEnabled": false
2067 },
2068 "public.source": {
2069 "name": "source",
2070 "schema": "",
2071 "columns": {
2072 "id": {
2073 "name": "id",
2074 "type": "text",
2075 "primaryKey": false,
2076 "notNull": true
2077 },
2078 "scope_id": {
2079 "name": "scope_id",
2080 "type": "text",
2081 "primaryKey": false,
2082 "notNull": true
2083 },
2084 "plugin_id": {
2085 "name": "plugin_id",
2086 "type": "text",
2087 "primaryKey": false,
2088 "notNull": true
2089 },
2090 "kind": {
2091 "name": "kind",
2092 "type": "text",
2093 "primaryKey": false,
2094 "notNull": true
2095 },
2096 "name": {
2097 "name": "name",
2098 "type": "text",
2099 "primaryKey": false,
2100 "notNull": true
2101 },
2102 "url": {
2103 "name": "url",
2104 "type": "text",
2105 "primaryKey": false,
2106 "notNull": false
2107 },
2108 "can_remove": {
2109 "name": "can_remove",
2110 "type": "boolean",
2111 "primaryKey": false,
2112 "notNull": true,
2113 "default": true
2114 },
2115 "can_refresh": {
2116 "name": "can_refresh",
2117 "type": "boolean",
2118 "primaryKey": false,
2119 "notNull": true,
2120 "default": false
2121 },
2122 "can_edit": {
2123 "name": "can_edit",
2124 "type": "boolean",
2125 "primaryKey": false,
2126 "notNull": true,
2127 "default": false
2128 },
2129 "created_at": {
2130 "name": "created_at",
2131 "type": "timestamp",
2132 "primaryKey": false,
2133 "notNull": true
2134 },
2135 "updated_at": {
2136 "name": "updated_at",
2137 "type": "timestamp",
2138 "primaryKey": false,
2139 "notNull": true
2140 }
2141 },
2142 "indexes": {
2143 "source_scope_id_idx": {
2144 "name": "source_scope_id_idx",
2145 "columns": [
2146 {
2147 "expression": "scope_id",
2148 "isExpression": false,
2149 "asc": true,
2150 "nulls": "last"
2151 }
2152 ],
2153 "isUnique": false,
2154 "concurrently": false,
2155 "method": "btree",
2156 "with": {}
2157 },
2158 "source_plugin_id_idx": {
2159 "name": "source_plugin_id_idx",
2160 "columns": [
2161 {
2162 "expression": "plugin_id",
2163 "isExpression": false,
2164 "asc": true,
2165 "nulls": "last"
2166 }
2167 ],
2168 "isUnique": false,
2169 "concurrently": false,
2170 "method": "btree",
2171 "with": {}
2172 }
2173 },
2174 "foreignKeys": {},
2175 "compositePrimaryKeys": {
2176 "source_scope_id_id_pk": {
2177 "name": "source_scope_id_id_pk",
2178 "columns": ["scope_id", "id"]
2179 }
2180 },
2181 "uniqueConstraints": {},
2182 "policies": {},
2183 "checkConstraints": {},
2184 "isRLSEnabled": false
2185 },
2186 "public.tool": {
2187 "name": "tool",
2188 "schema": "",
2189 "columns": {
2190 "id": {
2191 "name": "id",
2192 "type": "text",
2193 "primaryKey": false,
2194 "notNull": true
2195 },
2196 "scope_id": {
2197 "name": "scope_id",
2198 "type": "text",
2199 "primaryKey": false,
2200 "notNull": true
2201 },
2202 "source_id": {
2203 "name": "source_id",
2204 "type": "text",
2205 "primaryKey": false,
2206 "notNull": true
2207 },
2208 "plugin_id": {
2209 "name": "plugin_id",
2210 "type": "text",
2211 "primaryKey": false,
2212 "notNull": true
2213 },
2214 "name": {
2215 "name": "name",
2216 "type": "text",
2217 "primaryKey": false,
2218 "notNull": true
2219 },
2220 "description": {
2221 "name": "description",
2222 "type": "text",
2223 "primaryKey": false,
2224 "notNull": true
2225 },
2226 "input_schema": {
2227 "name": "input_schema",
2228 "type": "jsonb",
2229 "primaryKey": false,
2230 "notNull": false
2231 },
2232 "output_schema": {
2233 "name": "output_schema",
2234 "type": "jsonb",
2235 "primaryKey": false,
2236 "notNull": false
2237 },
2238 "created_at": {
2239 "name": "created_at",
2240 "type": "timestamp",
2241 "primaryKey": false,
2242 "notNull": true
2243 },
2244 "updated_at": {
2245 "name": "updated_at",
2246 "type": "timestamp",
2247 "primaryKey": false,
2248 "notNull": true
2249 }
2250 },
2251 "indexes": {
2252 "tool_scope_id_idx": {
2253 "name": "tool_scope_id_idx",
2254 "columns": [
2255 {
2256 "expression": "scope_id",
2257 "isExpression": false,
2258 "asc": true,
2259 "nulls": "last"
2260 }
2261 ],
2262 "isUnique": false,
2263 "concurrently": false,
2264 "method": "btree",
2265 "with": {}
2266 },
2267 "tool_source_id_idx": {
2268 "name": "tool_source_id_idx",
2269 "columns": [
2270 {
2271 "expression": "source_id",
2272 "isExpression": false,
2273 "asc": true,
2274 "nulls": "last"
2275 }
2276 ],
2277 "isUnique": false,
2278 "concurrently": false,
2279 "method": "btree",
2280 "with": {}
2281 },
2282 "tool_plugin_id_idx": {
2283 "name": "tool_plugin_id_idx",
2284 "columns": [
2285 {
2286 "expression": "plugin_id",
2287 "isExpression": false,
2288 "asc": true,
2289 "nulls": "last"
2290 }
2291 ],
2292 "isUnique": false,
2293 "concurrently": false,
2294 "method": "btree",
2295 "with": {}
2296 }
2297 },
2298 "foreignKeys": {},
2299 "compositePrimaryKeys": {
2300 "tool_scope_id_id_pk": {
2301 "name": "tool_scope_id_id_pk",
2302 "columns": ["scope_id", "id"]
2303 }
2304 },
2305 "uniqueConstraints": {},
2306 "policies": {},
2307 "checkConstraints": {},
2308 "isRLSEnabled": false
2309 },
2310 "public.tool_policy": {
2311 "name": "tool_policy",
2312 "schema": "",
2313 "columns": {
2314 "id": {
2315 "name": "id",
2316 "type": "text",
2317 "primaryKey": false,
2318 "notNull": true
2319 },
2320 "scope_id": {
2321 "name": "scope_id",
2322 "type": "text",
2323 "primaryKey": false,
2324 "notNull": true
2325 },
2326 "pattern": {
2327 "name": "pattern",
2328 "type": "text",
2329 "primaryKey": false,
2330 "notNull": true
2331 },
2332 "action": {
2333 "name": "action",
2334 "type": "text",
2335 "primaryKey": false,
2336 "notNull": true
2337 },
2338 "position": {
2339 "name": "position",
2340 "type": "text",
2341 "primaryKey": false,
2342 "notNull": true
2343 },
2344 "created_at": {
2345 "name": "created_at",
2346 "type": "timestamp",
2347 "primaryKey": false,
2348 "notNull": true
2349 },
2350 "updated_at": {
2351 "name": "updated_at",
2352 "type": "timestamp",
2353 "primaryKey": false,
2354 "notNull": true
2355 }
2356 },
2357 "indexes": {
2358 "tool_policy_scope_id_position_idx": {
2359 "name": "tool_policy_scope_id_position_idx",
2360 "columns": [
2361 {
2362 "expression": "scope_id",
2363 "isExpression": false,
2364 "asc": true,
2365 "nulls": "last"
2366 },
2367 {
2368 "expression": "position",
2369 "isExpression": false,
2370 "asc": true,
2371 "nulls": "last"
2372 }
2373 ],
2374 "isUnique": false,
2375 "concurrently": false,
2376 "method": "btree",
2377 "with": {}
2378 }
2379 },
2380 "foreignKeys": {},
2381 "compositePrimaryKeys": {
2382 "tool_policy_scope_id_id_pk": {
2383 "name": "tool_policy_scope_id_id_pk",
2384 "columns": ["scope_id", "id"]
2385 }
2386 },
2387 "uniqueConstraints": {},
2388 "policies": {},
2389 "checkConstraints": {},
2390 "isRLSEnabled": false
2391 },
2392 "public.workos_vault_metadata": {
2393 "name": "workos_vault_metadata",
2394 "schema": "",
2395 "columns": {
2396 "id": {
2397 "name": "id",
2398 "type": "text",
2399 "primaryKey": false,
2400 "notNull": true
2401 },
2402 "scope_id": {
2403 "name": "scope_id",
2404 "type": "text",
2405 "primaryKey": false,
2406 "notNull": true
2407 },
2408 "name": {
2409 "name": "name",
2410 "type": "text",
2411 "primaryKey": false,
2412 "notNull": true
2413 },
2414 "purpose": {
2415 "name": "purpose",
2416 "type": "text",
2417 "primaryKey": false,
2418 "notNull": false
2419 },
2420 "created_at": {
2421 "name": "created_at",
2422 "type": "timestamp",
2423 "primaryKey": false,
2424 "notNull": true
2425 }
2426 },
2427 "indexes": {
2428 "workos_vault_metadata_scope_id_idx": {
2429 "name": "workos_vault_metadata_scope_id_idx",
2430 "columns": [
2431 {
2432 "expression": "scope_id",
2433 "isExpression": false,
2434 "asc": true,
2435 "nulls": "last"
2436 }
2437 ],
2438 "isUnique": false,
2439 "concurrently": false,
2440 "method": "btree",
2441 "with": {}
2442 }
2443 },
2444 "foreignKeys": {},
2445 "compositePrimaryKeys": {
2446 "workos_vault_metadata_scope_id_id_pk": {
2447 "name": "workos_vault_metadata_scope_id_id_pk",
2448 "columns": ["scope_id", "id"]
2449 }
2450 },
2451 "uniqueConstraints": {},
2452 "policies": {},
2453 "checkConstraints": {},
2454 "isRLSEnabled": false
2455 }
2456 },
2457 "enums": {},
2458 "schemas": {},
2459 "sequences": {},
2460 "roles": {},
2461 "policies": {},
2462 "views": {},
2463 "_meta": {
2464 "columns": {},
2465 "schemas": {},
2466 "tables": {}
2467 }
2468}
apps/cloud/drizzle/meta/0016_snapshot.json+0−2258
@@ -1,2258 +0,0 @@
1{
2 "id": "77c36b81-283e-4a48-989b-a12cce8d0651",
3 "prevId": "3b53ed57-f0b1-40a4-9929-dd399180a17a",
4 "version": "7",
5 "dialect": "postgresql",
6 "tables": {
7 "public.accounts": {
8 "name": "accounts",
9 "schema": "",
10 "columns": {
11 "id": {
12 "name": "id",
13 "type": "text",
14 "primaryKey": true,
15 "notNull": true
16 },
17 "created_at": {
18 "name": "created_at",
19 "type": "timestamp with time zone",
20 "primaryKey": false,
21 "notNull": true,
22 "default": "now()"
23 }
24 },
25 "indexes": {},
26 "foreignKeys": {},
27 "compositePrimaryKeys": {},
28 "uniqueConstraints": {},
29 "policies": {},
30 "checkConstraints": {},
31 "isRLSEnabled": false
32 },
33 "public.memberships": {
34 "name": "memberships",
35 "schema": "",
36 "columns": {
37 "account_id": {
38 "name": "account_id",
39 "type": "text",
40 "primaryKey": false,
41 "notNull": true
42 },
43 "organization_id": {
44 "name": "organization_id",
45 "type": "text",
46 "primaryKey": false,
47 "notNull": true
48 },
49 "created_at": {
50 "name": "created_at",
51 "type": "timestamp with time zone",
52 "primaryKey": false,
53 "notNull": true,
54 "default": "now()"
55 }
56 },
57 "indexes": {},
58 "foreignKeys": {
59 "memberships_account_id_accounts_id_fk": {
60 "name": "memberships_account_id_accounts_id_fk",
61 "tableFrom": "memberships",
62 "tableTo": "accounts",
63 "columnsFrom": ["account_id"],
64 "columnsTo": ["id"],
65 "onDelete": "cascade",
66 "onUpdate": "no action"
67 },
68 "memberships_organization_id_organizations_id_fk": {
69 "name": "memberships_organization_id_organizations_id_fk",
70 "tableFrom": "memberships",
71 "tableTo": "organizations",
72 "columnsFrom": ["organization_id"],
73 "columnsTo": ["id"],
74 "onDelete": "cascade",
75 "onUpdate": "no action"
76 }
77 },
78 "compositePrimaryKeys": {
79 "memberships_account_id_organization_id_pk": {
80 "name": "memberships_account_id_organization_id_pk",
81 "columns": ["account_id", "organization_id"]
82 }
83 },
84 "uniqueConstraints": {},
85 "policies": {},
86 "checkConstraints": {},
87 "isRLSEnabled": false
88 },
89 "public.organizations": {
90 "name": "organizations",
91 "schema": "",
92 "columns": {
93 "id": {
94 "name": "id",
95 "type": "text",
96 "primaryKey": true,
97 "notNull": true
98 },
99 "name": {
100 "name": "name",
101 "type": "text",
102 "primaryKey": false,
103 "notNull": true
104 },
105 "created_at": {
106 "name": "created_at",
107 "type": "timestamp with time zone",
108 "primaryKey": false,
109 "notNull": true,
110 "default": "now()"
111 }
112 },
113 "indexes": {},
114 "foreignKeys": {},
115 "compositePrimaryKeys": {},
116 "uniqueConstraints": {},
117 "policies": {},
118 "checkConstraints": {},
119 "isRLSEnabled": false
120 },
121 "public.blob": {
122 "name": "blob",
123 "schema": "",
124 "columns": {
125 "row_id": {
126 "name": "row_id",
127 "type": "varchar(255)",
128 "primaryKey": true,
129 "notNull": true
130 },
131 "id": {
132 "name": "id",
133 "type": "varchar(255)",
134 "primaryKey": false,
135 "notNull": true
136 },
137 "namespace": {
138 "name": "namespace",
139 "type": "text",
140 "primaryKey": false,
141 "notNull": true
142 },
143 "key": {
144 "name": "key",
145 "type": "text",
146 "primaryKey": false,
147 "notNull": true
148 },
149 "value": {
150 "name": "value",
151 "type": "text",
152 "primaryKey": false,
153 "notNull": true
154 }
155 },
156 "indexes": {
157 "blob_id_uidx": {
158 "name": "blob_id_uidx",
159 "columns": [
160 {
161 "expression": "id",
162 "isExpression": false,
163 "asc": true,
164 "nulls": "last"
165 }
166 ],
167 "isUnique": true,
168 "concurrently": false,
169 "method": "btree",
170 "with": {}
171 }
172 },
173 "foreignKeys": {},
174 "compositePrimaryKeys": {},
175 "uniqueConstraints": {},
176 "policies": {},
177 "checkConstraints": {},
178 "isRLSEnabled": false
179 },
180 "public.connection": {
181 "name": "connection",
182 "schema": "",
183 "columns": {
184 "row_id": {
185 "name": "row_id",
186 "type": "varchar(255)",
187 "primaryKey": true,
188 "notNull": true
189 },
190 "id": {
191 "name": "id",
192 "type": "varchar(255)",
193 "primaryKey": false,
194 "notNull": true
195 },
196 "scope_id": {
197 "name": "scope_id",
198 "type": "varchar(255)",
199 "primaryKey": false,
200 "notNull": true
201 },
202 "provider": {
203 "name": "provider",
204 "type": "text",
205 "primaryKey": false,
206 "notNull": true
207 },
208 "identity_label": {
209 "name": "identity_label",
210 "type": "text",
211 "primaryKey": false,
212 "notNull": false
213 },
214 "access_token_secret_id": {
215 "name": "access_token_secret_id",
216 "type": "text",
217 "primaryKey": false,
218 "notNull": true
219 },
220 "refresh_token_secret_id": {
221 "name": "refresh_token_secret_id",
222 "type": "text",
223 "primaryKey": false,
224 "notNull": false
225 },
226 "expires_at": {
227 "name": "expires_at",
228 "type": "bigint",
229 "primaryKey": false,
230 "notNull": false
231 },
232 "scope": {
233 "name": "scope",
234 "type": "text",
235 "primaryKey": false,
236 "notNull": false
237 },
238 "provider_state": {
239 "name": "provider_state",
240 "type": "json",
241 "primaryKey": false,
242 "notNull": false
243 },
244 "created_at": {
245 "name": "created_at",
246 "type": "timestamp",
247 "primaryKey": false,
248 "notNull": true
249 },
250 "updated_at": {
251 "name": "updated_at",
252 "type": "timestamp",
253 "primaryKey": false,
254 "notNull": true
255 }
256 },
257 "indexes": {
258 "connection_scope_id_id_uidx": {
259 "name": "connection_scope_id_id_uidx",
260 "columns": [
261 {
262 "expression": "scope_id",
263 "isExpression": false,
264 "asc": true,
265 "nulls": "last"
266 },
267 {
268 "expression": "id",
269 "isExpression": false,
270 "asc": true,
271 "nulls": "last"
272 }
273 ],
274 "isUnique": true,
275 "concurrently": false,
276 "method": "btree",
277 "with": {}
278 }
279 },
280 "foreignKeys": {},
281 "compositePrimaryKeys": {},
282 "uniqueConstraints": {},
283 "policies": {},
284 "checkConstraints": {},
285 "isRLSEnabled": false
286 },
287 "public.credential_binding": {
288 "name": "credential_binding",
289 "schema": "",
290 "columns": {
291 "row_id": {
292 "name": "row_id",
293 "type": "varchar(255)",
294 "primaryKey": true,
295 "notNull": true
296 },
297 "id": {
298 "name": "id",
299 "type": "varchar(255)",
300 "primaryKey": false,
301 "notNull": true
302 },
303 "scope_id": {
304 "name": "scope_id",
305 "type": "varchar(255)",
306 "primaryKey": false,
307 "notNull": true
308 },
309 "plugin_id": {
310 "name": "plugin_id",
311 "type": "text",
312 "primaryKey": false,
313 "notNull": true
314 },
315 "source_id": {
316 "name": "source_id",
317 "type": "text",
318 "primaryKey": false,
319 "notNull": true
320 },
321 "source_scope_id": {
322 "name": "source_scope_id",
323 "type": "text",
324 "primaryKey": false,
325 "notNull": true
326 },
327 "slot_key": {
328 "name": "slot_key",
329 "type": "text",
330 "primaryKey": false,
331 "notNull": true
332 },
333 "kind": {
334 "name": "kind",
335 "type": "text",
336 "primaryKey": false,
337 "notNull": true
338 },
339 "text_value": {
340 "name": "text_value",
341 "type": "text",
342 "primaryKey": false,
343 "notNull": false
344 },
345 "secret_id": {
346 "name": "secret_id",
347 "type": "text",
348 "primaryKey": false,
349 "notNull": false
350 },
351 "secret_scope_id": {
352 "name": "secret_scope_id",
353 "type": "text",
354 "primaryKey": false,
355 "notNull": false
356 },
357 "connection_id": {
358 "name": "connection_id",
359 "type": "text",
360 "primaryKey": false,
361 "notNull": false
362 },
363 "created_at": {
364 "name": "created_at",
365 "type": "timestamp",
366 "primaryKey": false,
367 "notNull": true
368 },
369 "updated_at": {
370 "name": "updated_at",
371 "type": "timestamp",
372 "primaryKey": false,
373 "notNull": true

1885 more lines aren’t shown here.

apps/cloud/drizzle/meta/_journal.json+2−142

This diff is large: its 151 lines aren’t shown here.

apps/cloud/scripts/migrate-v1-v2.ts+1206−0

This diff is large: its 1207 lines aren’t shown here.

apps/cloud/src/api.request-scope.node.test.ts+4−3

This diff is large: its 14 lines aren’t shown here.

apps/cloud/src/api/secrets-api.node.test.ts+115−97

This diff is large: its 282 lines aren’t shown here.

apps/cloud/src/api/sources-api.node.test.ts+205−470

This diff is large: its 997 lines aren’t shown here.

apps/cloud/src/api/sources-refresh.node.test.ts+79−77

This diff is large: its 216 lines aren’t shown here.

apps/cloud/src/api/tenant-isolation.node.test.ts+84−264

This diff is large: its 456 lines aren’t shown here.

apps/cloud/src/app.ts+2−1

This diff is large: its 17 lines aren’t shown here.

apps/cloud/src/auth/auth-tool-failures.node.test.ts+50−19

This diff is large: its 127 lines aren’t shown here.

apps/cloud/src/db/executor-schema.ts+137−102

This diff is large: its 341 lines aren’t shown here.

apps/cloud/src/db/fumadb-cutover-migration.node.test.ts+0−126

This diff is large: its 127 lines aren’t shown here.

apps/cloud/src/engine/execution-stack.ts+16−0

This diff is large: its 30 lines aren’t shown here.

apps/cloud/src/extensions-reachability.test.ts+4−4

This diff is large: its 17 lines aren’t shown here.

apps/cloud/src/mcp-miniflare.e2e.node.test.ts+10−12

This diff is large: its 44 lines aren’t shown here.

apps/cloud/src/mcp-session.e2e.node.test.ts+16−15

This diff is large: its 70 lines aren’t shown here.

apps/cloud/src/mcp/mcp-oauth.node.test.ts+83−166

This diff is large: its 309 lines aren’t shown here.

apps/cloud/src/mcp/session-durable-object.ts+25−10

This diff is large: its 56 lines aren’t shown here.

apps/cloud/src/routeTree.gen.ts+62−61

This diff is large: its 310 lines aren’t shown here.

apps/cloud/src/routes/__root.tsx+9−8

This diff is large: its 31 lines aren’t shown here.

apps/cloud/src/routes/connections.tsx+0−6

This diff is large: its 7 lines aren’t shown here.

apps/cloud/src/routes/index.tsx+2−2

This diff is large: its 9 lines aren’t shown here.

apps/cloud/src/routes/integrations.$namespace.tsx+9−0

This diff is large: its 10 lines aren’t shown here.

apps/cloud/src/routes/integrations.add.$pluginKey.tsxrenamed from apps/cloud/src/routes/sources.add.$pluginKey.tsx+5−3

This diff is large: its 24 lines aren’t shown here.

apps/cloud/src/routes/oauth-apps.tsx+6−0

This diff is large: its 7 lines aren’t shown here.

apps/cloud/src/routes/org.tsx+7−34

This diff is large: its 70 lines aren’t shown here.

apps/cloud/src/routes/secrets.tsx+7−24

This diff is large: its 36 lines aren’t shown here.

apps/cloud/src/routes/sources.$namespace.tsx+0−9

This diff is large: its 10 lines aren’t shown here.

apps/cloud/src/secrets-isolation.e2e.node.test.ts+108−159

This diff is large: its 353 lines aren’t shown here.

apps/cloud/src/testing/api-harness.ts+26−27

This diff is large: its 122 lines aren’t shown here.

apps/cloud/src/web/shell.tsx+1−1

This diff is large: its 9 lines aren’t shown here.

apps/desktop/src/main/index.ts+37−13

This diff is large: its 100 lines aren’t shown here.

apps/host-cloudflare/src/worker.e2e.node.test.ts+48−20

This diff is large: its 146 lines aren’t shown here.

apps/host-cloudflare/web/routeTree.gen.ts+0−21

This diff is large: its 98 lines aren’t shown here.

apps/host-cloudflare/web/routes/__root.tsx+18−6

This diff is large: its 42 lines aren’t shown here.

apps/host-cloudflare/web/routes/connections.tsx+0−6

This diff is large: its 7 lines aren’t shown here.

apps/host-cloudflare/web/routes/index.tsx+2−2

This diff is large: its 9 lines aren’t shown here.

apps/host-cloudflare/web/routes/sources.$namespace.tsx+2−2

This diff is large: its 12 lines aren’t shown here.

apps/host-cloudflare/web/routes/sources.add.$pluginKey.tsx+2−2

This diff is large: its 16 lines aren’t shown here.

apps/host-selfhost/src/admin/invites.node.test.ts+8−4

This diff is large: its 20 lines aren’t shown here.

apps/host-selfhost/src/auth/better-auth.test.ts+22−15

This diff is large: its 68 lines aren’t shown here.

apps/host-selfhost/src/boot.test.ts+57−7

This diff is large: its 78 lines aren’t shown here.

apps/host-selfhost/src/multi-user.test.ts+112−33

This diff is large: its 194 lines aren’t shown here.

apps/host-selfhost/src/scope-isolation.test.ts+95−25

This diff is large: its 145 lines aren’t shown here.

apps/host-selfhost/src/secrets-integration.test.ts+69−32

This diff is large: its 122 lines aren’t shown here.

apps/host-selfhost/src/sources-mcp.test.ts+23−12

This diff is large: its 78 lines aren’t shown here.

apps/host-selfhost/src/sources.test.ts+26−12

This diff is large: its 69 lines aren’t shown here.

apps/host-selfhost/web/routeTree.gen.ts+0−21

This diff is large: its 98 lines aren’t shown here.

apps/host-selfhost/web/routes/__root.tsx+18−6

This diff is large: its 45 lines aren’t shown here.

apps/host-selfhost/web/routes/connections.tsx+0−6

This diff is large: its 7 lines aren’t shown here.

apps/host-selfhost/web/routes/index.tsx+2−2

This diff is large: its 9 lines aren’t shown here.

apps/host-selfhost/web/routes/sources.$namespace.tsx+2−2

This diff is large: its 12 lines aren’t shown here.

apps/host-selfhost/web/routes/sources.add.$pluginKey.tsx+4−2

This diff is large: its 18 lines aren’t shown here.

apps/local/drizzle/0000_overconfident_sharon_carter.sql+0−180

This diff is large: its 181 lines aren’t shown here.

apps/local/drizzle/0000_v2_baseline.sql+140−0

This diff is large: its 141 lines aren’t shown here.

apps/local/drizzle/0001_sour_catseye.sql+0−1

This diff is large: its 2 lines aren’t shown here.

apps/local/drizzle/0002_lively_sue_storm.sql+0−20

This diff is large: its 21 lines aren’t shown here.

apps/local/drizzle/0003_little_silk_fever.sql+0−16

This diff is large: its 17 lines aren’t shown here.

apps/local/drizzle/0004_add_tool_policy.sql+0−17

This diff is large: its 18 lines aren’t shown here.

apps/local/drizzle/0005_repair_mcp_oauth_session.sql+0−10

This diff is large: its 11 lines aren’t shown here.

apps/local/drizzle/0006_neat_terror.sql+0−23

This diff is large: its 24 lines aren’t shown here.

apps/local/drizzle/0007_normalize_plugin_secret_refs.sql+0−579

This diff is large: its 580 lines aren’t shown here.

apps/local/drizzle/0008_scoped_credentials_cutover.sql+0−1220

This diff is large: its 1221 lines aren’t shown here.

apps/local/drizzle/0009_repair_openapi_oauth_cutover_residue.sql+0−253

This diff is large: its 254 lines aren’t shown here.

apps/local/drizzle/0010_add_credential_binding_secret_scope.sql+0−2

This diff is large: its 3 lines aren’t shown here.

apps/local/drizzle/0011_plugin_storage_sources.sql+0−215

This diff is large: its 216 lines aren’t shown here.

apps/local/drizzle/0012_connection_identity_override.sql+0−1

This diff is large: its 2 lines aren’t shown here.

apps/local/drizzle/meta/0000_snapshot.json+381−527

This diff is large: its 1368 lines aren’t shown here.

apps/local/drizzle/meta/0001_snapshot.json+0−1045

This diff is large: its 1046 lines aren’t shown here.

apps/local/drizzle/meta/0002_snapshot.json+0−1167

This diff is large: its 1168 lines aren’t shown here.

apps/local/drizzle/meta/0003_snapshot.json+0−1247

This diff is large: its 1248 lines aren’t shown here.

apps/local/drizzle/meta/0004_snapshot.json+0−1317

This diff is large: its 1318 lines aren’t shown here.

apps/local/drizzle/meta/0005_snapshot.json+0−1317

This diff is large: its 1318 lines aren’t shown here.

apps/local/drizzle/meta/0006_snapshot.json+0−1285

This diff is large: its 1286 lines aren’t shown here.

apps/local/drizzle/meta/0007_snapshot.json+0−2206

This diff is large: its 2207 lines aren’t shown here.

apps/local/drizzle/meta/0008_snapshot.json+0−2242

This diff is large: its 2243 lines aren’t shown here.

apps/local/drizzle/meta/_journal.json+2−86

This diff is large: its 95 lines aren’t shown here.

apps/local/src/auth-tool-failures.test.ts+63−21

This diff is large: its 164 lines aren’t shown here.

apps/local/src/db/db-upgrade.test.ts+0−255

This diff is large: its 256 lines aren’t shown here.

apps/local/src/db/db-upgrade.ts+0−117

This diff is large: its 118 lines aren’t shown here.

apps/local/src/db/executor-schema.ts+155−217

This diff is large: its 437 lines aren’t shown here.

apps/local/src/db/google-discovery-openapi-migration.test.ts+0−350

This diff is large: its 351 lines aren’t shown here.

apps/local/src/db/google-discovery-openapi-migration.ts+0−594

This diff is large: its 595 lines aren’t shown here.

apps/local/src/db/libsql.ts+13−36

This diff is large: its 82 lines aren’t shown here.

apps/local/src/db/migrate-google-discovery-bindings.test.ts+0−212

This diff is large: its 213 lines aren’t shown here.

apps/local/src/db/migrate-graphql-bindings.test.ts+0−322

This diff is large: its 323 lines aren’t shown here.

apps/local/src/db/migrate-mcp-bindings.test.ts+0−276

This diff is large: its 277 lines aren’t shown here.

apps/local/src/db/migrate-oauth-connections.test.ts+0−328

This diff is large: its 329 lines aren’t shown here.

apps/local/src/db/migrate-openapi-bindings.test.ts+0−469

This diff is large: its 470 lines aren’t shown here.

apps/local/src/db/sqlite-fumadb.ts+9−3

This diff is large: its 20 lines aren’t shown here.

apps/local/src/db/sqlite-import.test.ts+0−600

This diff is large: its 601 lines aren’t shown here.

apps/local/src/db/sqlite-import.ts+0−252

This diff is large: its 253 lines aren’t shown here.

apps/local/src/db/v1-v2-migration.test.ts+889−0

This diff is large: its 890 lines aren’t shown here.

apps/local/src/db/v1-v2-migration.ts+788−0

This diff is large: its 789 lines aren’t shown here.

apps/local/src/executor.ts+55−596

This diff is large: its 733 lines aren’t shown here.

apps/local/src/mcp-browser-resume.test.ts+11−10

This diff is large: its 51 lines aren’t shown here.

apps/local/src/mcp-oauth.test.ts+69−55

This diff is large: its 207 lines aren’t shown here.

apps/local/src/testing/libsql-test-db.ts+0−100

This diff is large: its 101 lines aren’t shown here.

apps/local/src/testing/pre-0007-schema.ts+0−140

This diff is large: its 141 lines aren’t shown here.

apps/local/vite.config.ts+1−1

This diff is large: its 9 lines aren’t shown here.

bun.lock+56−0

This diff is large: its 77 lines aren’t shown here.

docs/sdk/quickstart.mdx+15−6

This diff is large: its 47 lines aren’t shown here.

docs/snippets/sdk/quickstart/add-integration.mdx+26−0

This diff is large: its 27 lines aren’t shown here.

docs/snippets/sdk/quickstart/add-source.mdx+0−12

This diff is large: its 13 lines aren’t shown here.

docs/snippets/sdk/quickstart/create-connection.mdx+17−0

This diff is large: its 18 lines aren’t shown here.

docs/snippets/sdk/quickstart/create-executor.mdx+16−1

This diff is large: its 26 lines aren’t shown here.

docs/snippets/sdk/quickstart/inspect-schema.mdx+2−1

This diff is large: its 10 lines aren’t shown here.

docs/snippets/sdk/quickstart/list-tools.mdx+2−2

This diff is large: its 12 lines aren’t shown here.

examples/all-plugins/src/main.ts+184−123

This diff is large: its 450 lines aren’t shown here.

examples/docs-sdk-quickstart/package.json+2−1

This diff is large: its 10 lines aren’t shown here.

examples/docs-sdk-quickstart/src/main.ts+55−11

This diff is large: its 100 lines aren’t shown here.

examples/promise-sdk/src/main.ts+114−42

This diff is large: its 234 lines aren’t shown here.

packages/app/src/routeTree.gen.ts+39−59

This diff is large: its 230 lines aren’t shown here.

packages/app/src/routes/__root.tsx+1−47

This diff is large: its 68 lines aren’t shown here.

packages/app/src/routes/connections.tsx+0−6

This diff is large: its 7 lines aren’t shown here.

packages/app/src/routes/index.tsx+2−2

This diff is large: its 9 lines aren’t shown here.

packages/app/src/routes/integrations.$namespace.tsx+9−0

This diff is large: its 10 lines aren’t shown here.

packages/app/src/routes/integrations.add.$pluginKey.tsxrenamed from packages/app/src/routes/sources.add.$pluginKey.tsx+3−3

This diff is large: its 22 lines aren’t shown here.

packages/app/src/routes/secrets.tsx+3−20

This diff is large: its 29 lines aren’t shown here.

packages/app/src/routes/sources.$namespace.tsx+0−9

This diff is large: its 10 lines aren’t shown here.

packages/app/src/web/shell.tsx+34−69

This diff is large: its 183 lines aren’t shown here.

packages/core/api/src/api.ts+4−6

This diff is large: its 26 lines aren’t shown here.

packages/core/api/src/client.ts+2−3

This diff is large: its 13 lines aren’t shown here.

packages/core/api/src/connections/api.ts+117−50

This diff is large: its 215 lines aren’t shown here.

packages/core/api/src/handlers/connection-identity.test.ts+0−348

This diff is large: its 349 lines aren’t shown here.

packages/core/api/src/handlers/connection-identity.ts+0−315

This diff is large: its 316 lines aren’t shown here.

packages/core/api/src/handlers/connections.ts+65−40

This diff is large: its 150 lines aren’t shown here.

packages/core/api/src/handlers/index.ts+6−9

This diff is large: its 36 lines aren’t shown here.

packages/core/api/src/handlers/integrations.ts+80−0

This diff is large: its 81 lines aren’t shown here.

packages/core/api/src/handlers/oauth.ts+110−93

This diff is large: its 285 lines aren’t shown here.

packages/core/api/src/handlers/policies.ts+10−7

This diff is large: its 54 lines aren’t shown here.

packages/core/api/src/handlers/providers.ts+28−0

This diff is large: its 29 lines aren’t shown here.

packages/core/api/src/handlers/scope.ts+0−31

This diff is large: its 32 lines aren’t shown here.

packages/core/api/src/handlers/secrets.ts+0−85

This diff is large: its 86 lines aren’t shown here.

packages/core/api/src/handlers/sources.ts+0−142

This diff is large: its 143 lines aren’t shown here.

packages/core/api/src/handlers/tools.ts+26−19

This diff is large: its 70 lines aren’t shown here.

packages/core/api/src/index.ts+2−3

This diff is large: its 14 lines aren’t shown here.

packages/core/api/src/integrations/api.ts+128−0

This diff is large: its 129 lines aren’t shown here.

packages/core/api/src/integrations/integrations-auth-methods.test.ts+169−0

This diff is large: its 170 lines aren’t shown here.

packages/core/api/src/oauth-popup.ts+10−1

This diff is large: its 18 lines aren’t shown here.

packages/core/api/src/oauth/api.ts+206−87

This diff is large: its 375 lines aren’t shown here.

packages/core/api/src/policies/api.ts+22−12

This diff is large: its 95 lines aren’t shown here.

packages/core/api/src/providers/api.ts+48−0

This diff is large: its 49 lines aren’t shown here.

packages/core/api/src/scope/api.ts+0−31

This diff is large: its 32 lines aren’t shown here.

packages/core/api/src/scoped-targets.test.ts+131−166

This diff is large: its 403 lines aren’t shown here.

packages/core/api/src/secrets/api.ts+0−101

This diff is large: its 102 lines aren’t shown here.

packages/core/api/src/server.ts+5−3

This diff is large: its 15 lines aren’t shown here.

packages/core/api/src/server/execution-stack-middleware.ts+36−1

This diff is large: its 48 lines aren’t shown here.

packages/core/api/src/server/fixed-execution-middleware.ts+8−8

This diff is large: its 26 lines aren’t shown here.

packages/core/api/src/server/oauth-origin.test.ts+42−0

This diff is large: its 43 lines aren’t shown here.

packages/core/api/src/server/scoped-executor.ts+88−19

This diff is large: its 169 lines aren’t shown here.

packages/core/api/src/sources/api.ts+0−175

This diff is large: its 176 lines aren’t shown here.

packages/core/api/src/tools/api.ts+49−28

This diff is large: its 107 lines aren’t shown here.

packages/core/cli/src/commands/schema.test.ts+2−2

This diff is large: its 11 lines aren’t shown here.

packages/core/config/src/schema.ts+4−2

This diff is large: its 13 lines aren’t shown here.

packages/core/execution/src/description.test.ts+55−69

This diff is large: its 148 lines aren’t shown here.

packages/core/execution/src/description.ts+30−31

This diff is large: its 118 lines aren’t shown here.

packages/core/execution/src/engine.ts+1−1

This diff is large: its 9 lines aren’t shown here.

packages/core/execution/src/promise.ts+69−93

This diff is large: its 192 lines aren’t shown here.

packages/core/execution/src/tool-invoker.test.ts+420−269

This diff is large: its 976 lines aren’t shown here.

packages/core/execution/src/tool-invoker.ts+121−71

This diff is large: its 422 lines aren’t shown here.

packages/core/sdk/package.json+8−8

This diff is large: its 39 lines aren’t shown here.

packages/core/sdk/src/blob.test.ts+37−32

This diff is large: its 131 lines aren’t shown here.

packages/core/sdk/src/blob.ts+63−53

This diff is large: its 148 lines aren’t shown here.

packages/core/sdk/src/client.ts+46−22

This diff is large: its 147 lines aren’t shown here.

packages/core/sdk/src/connection.ts+90−0

This diff is large: its 91 lines aren’t shown here.

packages/core/sdk/src/connections.test.ts+189−1020

This diff is large: its 1275 lines aren’t shown here.

packages/core/sdk/src/connections.ts+0−201

This diff is large: its 202 lines aren’t shown here.

packages/core/sdk/src/core-schema.ts+228−222

This diff is large: its 519 lines aren’t shown here.

packages/core/sdk/src/core-tools.ts+539−813

This diff is large: its 1526 lines aren’t shown here.

packages/core/sdk/src/credential-bindings.test.ts+0−847

This diff is large: its 848 lines aren’t shown here.

packages/core/sdk/src/credential-bindings.ts+0−242

This diff is large: its 243 lines aren’t shown here.

packages/core/sdk/src/elicitation.ts+24−28

This diff is large: its 94 lines aren’t shown here.

packages/core/sdk/src/errors.ts+80−134

This diff is large: its 270 lines aren’t shown here.

packages/core/sdk/src/executor.test.ts+344−755

This diff is large: its 1214 lines aren’t shown here.

packages/core/sdk/src/executor.ts+2000−3678

This diff is large: its 6327 lines aren’t shown here.

packages/core/sdk/src/http-source.ts+0−210

This diff is large: its 211 lines aren’t shown here.

packages/core/sdk/src/ids.ts+66−10

This diff is large: its 86 lines aren’t shown here.

packages/core/sdk/src/index.ts+121−172

This diff is large: its 421 lines aren’t shown here.

packages/core/sdk/src/integration.ts+97−0

This diff is large: its 98 lines aren’t shown here.

packages/core/sdk/src/migration-spec.test.ts+1199−0

This diff is large: its 1200 lines aren’t shown here.

packages/core/sdk/src/migration-spec.ts+1618−0

This diff is large: its 1619 lines aren’t shown here.

packages/core/sdk/src/oauth-client.ts+203−0

This diff is large: its 204 lines aren’t shown here.

packages/core/sdk/src/oauth-discovery.ts+4−0

This diff is large: its 11 lines aren’t shown here.

packages/core/sdk/src/oauth-flow.test.ts+432−0

This diff is large: its 433 lines aren’t shown here.

packages/core/sdk/src/oauth-helpers.test.ts+17−3

This diff is large: its 52 lines aren’t shown here.

packages/core/sdk/src/oauth-helpers.ts+68−3

This diff is large: its 138 lines aren’t shown here.

packages/core/sdk/src/oauth-list-clients.test.ts+126−0

This diff is large: its 127 lines aren’t shown here.

packages/core/sdk/src/oauth-register-dynamic.test.ts+128−0

This diff is large: its 129 lines aren’t shown here.

packages/core/sdk/src/oauth-remove-client.test.ts+178−0

This diff is large: its 179 lines aren’t shown here.

packages/core/sdk/src/oauth-scope-union.test.ts+251−0

This diff is large: its 252 lines aren’t shown here.

packages/core/sdk/src/oauth-service.ts+754−1309

This diff is large: its 2192 lines aren’t shown here.

packages/core/sdk/src/oauth.ts+31−365

This diff is large: its 403 lines aren’t shown here.

packages/core/sdk/src/owner-policy.ts+135−0

This diff is large: its 136 lines aren’t shown here.

packages/core/sdk/src/plugin-storage.test.ts+26−53

This diff is large: its 169 lines aren’t shown here.

packages/core/sdk/src/plugin-storage.ts+6−6

This diff is large: its 54 lines aren’t shown here.

packages/core/sdk/src/plugin.ts+218−445

This diff is large: its 874 lines aren’t shown here.

packages/core/sdk/src/policies.test.ts+188−299

This diff is large: its 794 lines aren’t shown here.

packages/core/sdk/src/policies.ts+66−94

This diff is large: its 308 lines aren’t shown here.

packages/core/sdk/src/promise-executor.ts+26−29

This diff is large: its 90 lines aren’t shown here.

packages/core/sdk/src/promise.test.ts+73−12

This diff is large: its 128 lines aren’t shown here.

packages/core/sdk/src/promise.ts+33−30

This diff is large: its 90 lines aren’t shown here.

packages/core/sdk/src/provider.ts+35−0

This diff is large: its 36 lines aren’t shown here.

packages/core/sdk/src/scope-policy.test.ts+0−126

This diff is large: its 127 lines aren’t shown here.

packages/core/sdk/src/scope-policy.ts+0−150

This diff is large: its 151 lines aren’t shown here.

packages/core/sdk/src/scope.test.ts+0−76

This diff is large: its 77 lines aren’t shown here.

packages/core/sdk/src/scope.ts+0−96

This diff is large: its 97 lines aren’t shown here.

packages/core/sdk/src/secret-backed-value.ts+0−69

This diff is large: its 70 lines aren’t shown here.

packages/core/sdk/src/secrets.ts+0−106

This diff is large: its 107 lines aren’t shown here.

packages/core/sdk/src/shared.ts+103−84

This diff is large: its 228 lines aren’t shown here.

packages/core/sdk/src/test-config.ts+62−39

This diff is large: its 191 lines aren’t shown here.

packages/core/sdk/src/testing.test.ts+19−259

This diff is large: its 316 lines aren’t shown here.

packages/core/sdk/src/testing.ts+1−1

This diff is large: its 9 lines aren’t shown here.

packages/core/sdk/src/tool.ts+58−0

This diff is large: its 59 lines aren’t shown here.

packages/core/sdk/src/tools-list-merge.test.ts+205−0

This diff is large: its 206 lines aren’t shown here.

packages/core/sdk/src/types.ts+19−99

This diff is large: its 146 lines aren’t shown here.

packages/core/sdk/src/usage-visibility.test.ts+0−75

This diff is large: its 76 lines aren’t shown here.

packages/core/sdk/src/usages.ts+0−43

This diff is large: its 44 lines aren’t shown here.

packages/core/sdk/tsup.config.ts+1−1

This diff is large: its 10 lines aren’t shown here.

packages/hosts/mcp/src/tool-server.test.ts+9−9

This diff is large: its 81 lines aren’t shown here.

packages/hosts/mcp/src/tool-server.ts+1−1

This diff is large: its 9 lines aren’t shown here.

packages/kernel/runtime-dynamic-worker/src/integration.test.ts+58−40

This diff is large: its 179 lines aren’t shown here.

packages/plugins/desktop-settings/src/server.test.ts+7−8

This diff is large: its 36 lines aren’t shown here.

packages/plugins/encrypted-secrets/src/index.test.ts+0−0

Binary file not shown.

packages/plugins/encrypted-secrets/src/index.ts+39−36

This diff is large: its 128 lines aren’t shown here.

packages/plugins/file-secrets/src/index.ts+46−65

This diff is large: its 191 lines aren’t shown here.

packages/plugins/file-secrets/src/promise.ts+3−4

This diff is large: its 18 lines aren’t shown here.

packages/plugins/graphql-greenfield/CHANGELOG.md+6−0

This diff is large: its 7 lines aren’t shown here.

packages/plugins/graphql-greenfield/package.json+56−0

This diff is large: its 57 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/api/group.ts+83−0

This diff is large: its 84 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/api/handlers.ts+70−0

This diff is large: its 71 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/api/index.ts+20−0

This diff is large: its 21 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/promise.ts+7−0

This diff is large: its 8 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/sdk/errors.ts+40−0

This diff is large: its 41 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/sdk/extract.ts+252−0

This diff is large: its 253 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/sdk/index.ts+31−0

This diff is large: its 32 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/sdk/introspect.ts+343−0

This diff is large: its 344 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/sdk/invoke.ts+147−0

This diff is large: its 148 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/sdk/plugin.test.ts+512−0

This diff is large: its 513 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/sdk/plugin.ts+730−0

This diff is large: its 731 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/sdk/presets.ts+55−0

This diff is large: its 56 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/sdk/types.ts+147−0

This diff is large: its 148 lines aren’t shown here.

packages/plugins/graphql-greenfield/src/testing/index.ts+258−0

This diff is large: its 259 lines aren’t shown here.

packages/plugins/graphql-greenfield/tsconfig.json+26−0

This diff is large: its 27 lines aren’t shown here.

packages/plugins/graphql-greenfield/tsup.config.ts+14−0

This diff is large: its 15 lines aren’t shown here.

packages/plugins/graphql-greenfield/vitest.config.ts+13−0

This diff is large: its 14 lines aren’t shown here.

packages/plugins/graphql/src/api/group.ts+69−66

This diff is large: its 179 lines aren’t shown here.

packages/plugins/graphql/src/api/handlers.test.ts+205−0

This diff is large: its 206 lines aren’t shown here.

packages/plugins/graphql/src/api/handlers.ts+41−26

This diff is large: its 106 lines aren’t shown here.

packages/plugins/graphql/src/promise.ts+2−3

This diff is large: its 10 lines aren’t shown here.

packages/plugins/graphql/src/react/AddGraphqlSource.tsx+110−213

This diff is large: its 392 lines aren’t shown here.

packages/plugins/graphql/src/react/EditGraphqlSource.tsx+188−241

This diff is large: its 510 lines aren’t shown here.

packages/plugins/graphql/src/react/GraphqlAccountsPanel.tsx+81−0

This diff is large: its 82 lines aren’t shown here.

packages/plugins/graphql/src/react/GraphqlSignInButton.tsx+86−62

This diff is large: its 160 lines aren’t shown here.

packages/plugins/graphql/src/react/GraphqlSourceFields.tsx+5−5

This diff is large: its 28 lines aren’t shown here.

packages/plugins/graphql/src/react/GraphqlSourceSummary.tsx+45−56

This diff is large: its 121 lines aren’t shown here.

packages/plugins/graphql/src/react/atoms.ts+55−38

This diff is large: its 112 lines aren’t shown here.

packages/plugins/graphql/src/react/auth-method-config.test.ts+98−0

This diff is large: its 99 lines aren’t shown here.

packages/plugins/graphql/src/react/auth-method-config.ts+84−0

This diff is large: its 85 lines aren’t shown here.

packages/plugins/graphql/src/react/defaults.test.ts+25−8

This diff is large: its 40 lines aren’t shown here.

packages/plugins/graphql/src/react/defaults.ts+33−5

This diff is large: its 40 lines aren’t shown here.

packages/plugins/graphql/src/react/index.ts+2−2

This diff is large: its 6 lines aren’t shown here.

packages/plugins/graphql/src/react/plugin-client.tsx+2−2

This diff is large: its 11 lines aren’t shown here.

packages/plugins/graphql/src/react/source-plugin.ts+5−2

This diff is large: its 27 lines aren’t shown here.

packages/plugins/graphql/src/sdk/configure.test.ts+150−0

This diff is large: its 151 lines aren’t shown here.

packages/plugins/graphql/src/sdk/describe-auth-methods.test.ts+134−0

This diff is large: its 135 lines aren’t shown here.

packages/plugins/graphql/src/sdk/errors.ts+7−5

This diff is large: its 24 lines aren’t shown here.

packages/plugins/graphql/src/sdk/index.ts+14−20

This diff is large: its 57 lines aren’t shown here.

packages/plugins/graphql/src/sdk/invoke.ts+1−36

This diff is large: its 45 lines aren’t shown here.

packages/plugins/graphql/src/sdk/plugin.test.ts+321−1175

This diff is large: its 1760 lines aren’t shown here.

packages/plugins/graphql/src/sdk/plugin.ts+641−953

This diff is large: its 1858 lines aren’t shown here.

packages/plugins/graphql/src/sdk/store.ts+50−190

This diff is large: its 325 lines aren’t shown here.

packages/plugins/graphql/src/sdk/types.ts+63−60

This diff is large: its 143 lines aren’t shown here.

packages/plugins/http-source/CHANGELOG.md+6−0

This diff is large: its 7 lines aren’t shown here.

packages/plugins/http-source/package.json+79−0

This diff is large: its 80 lines aren’t shown here.

packages/plugins/http-source/src/index.ts+1−0

This diff is large: its 2 lines aren’t shown here.

packages/plugins/http-source/src/react/index.ts+25−0

This diff is large: its 26 lines aren’t shown here.

packages/plugins/http-source/src/sdk/configure.test.ts+223−0

This diff is large: its 224 lines aren’t shown here.

packages/plugins/http-source/src/sdk/errors.ts+18−0

This diff is large: its 19 lines aren’t shown here.

packages/plugins/http-source/src/sdk/index.ts+33−0

This diff is large: its 34 lines aren’t shown here.

packages/plugins/http-source/src/sdk/plugin.test.ts+209−0

This diff is large: its 210 lines aren’t shown here.

packages/plugins/http-source/src/sdk/plugin.ts+404−0

This diff is large: its 405 lines aren’t shown here.

packages/plugins/http-source/src/sdk/request.test.ts+142−0

This diff is large: its 143 lines aren’t shown here.

packages/plugins/http-source/src/sdk/request.ts+134−0

This diff is large: its 135 lines aren’t shown here.

packages/plugins/http-source/src/sdk/template.test.ts+113−0

This diff is large: its 114 lines aren’t shown here.

packages/plugins/http-source/src/sdk/template.ts+106−0

This diff is large: its 107 lines aren’t shown here.

packages/plugins/http-source/src/sdk/types.ts+97−0

This diff is large: its 98 lines aren’t shown here.

packages/plugins/http-source/tsconfig.json+23−0

This diff is large: its 24 lines aren’t shown here.

packages/plugins/http-source/tsup.config.ts+14−0

This diff is large: its 15 lines aren’t shown here.

packages/plugins/http-source/vitest.config.ts+7−0

This diff is large: its 8 lines aren’t shown here.

packages/plugins/keychain/src/index.test.ts+56−52

This diff is large: its 142 lines aren’t shown here.

packages/plugins/keychain/src/index.ts+16−27

This diff is large: its 89 lines aren’t shown here.

packages/plugins/keychain/src/promise.ts+2−2

This diff is large: its 15 lines aren’t shown here.

packages/plugins/keychain/src/provider.ts+24−17

This diff is large: its 69 lines aren’t shown here.

packages/plugins/mcp/src/api/group.ts+56−81

This diff is large: its 211 lines aren’t shown here.

packages/plugins/mcp/src/api/handlers.test.ts+5−6

This diff is large: its 32 lines aren’t shown here.

packages/plugins/mcp/src/api/handlers.ts+36−60

This diff is large: its 175 lines aren’t shown here.

packages/plugins/mcp/src/promise.ts+4−4

This diff is large: its 14 lines aren’t shown here.

packages/plugins/mcp/src/react/AddMcpSource.tsx+174−422

This diff is large: its 807 lines aren’t shown here.

packages/plugins/mcp/src/react/EditMcpSource.tsx+169−221

This diff is large: its 496 lines aren’t shown here.

packages/plugins/mcp/src/react/McpRemoteSourceFields.tsx+7−7

This diff is large: its 45 lines aren’t shown here.

packages/plugins/mcp/src/react/McpSignInButton.tsx+65−73

This diff is large: its 155 lines aren’t shown here.

packages/plugins/mcp/src/react/McpSourceSummary.tsx+48−92

This diff is large: its 159 lines aren’t shown here.

packages/plugins/mcp/src/react/atoms.ts+13−44

This diff is large: its 72 lines aren’t shown here.

packages/plugins/mcp/src/react/auth-method-config.test.ts+65−0

This diff is large: its 66 lines aren’t shown here.

packages/plugins/mcp/src/react/auth-method-config.ts+34−0

This diff is large: its 35 lines aren’t shown here.

packages/plugins/mcp/src/react/index.ts+3−3

This diff is large: its 8 lines aren’t shown here.

packages/plugins/mcp/src/react/plugin-client.tsx+2−2

This diff is large: its 18 lines aren’t shown here.

packages/plugins/mcp/src/react/source-plugin.tsx+8−6

This diff is large: its 38 lines aren’t shown here.

packages/plugins/mcp/src/sdk/binding-store.ts+0−224

This diff is large: its 225 lines aren’t shown here.

packages/plugins/mcp/src/sdk/connection-pool.test.ts+0−193

This diff is large: its 194 lines aren’t shown here.

packages/plugins/mcp/src/sdk/connection.ts+4−4

This diff is large: its 29 lines aren’t shown here.

packages/plugins/mcp/src/sdk/cross-user-isolation.test.ts+0−131

This diff is large: its 132 lines aren’t shown here.

packages/plugins/mcp/src/sdk/describe-auth-methods.test.ts+103−0

This diff is large: its 104 lines aren’t shown here.

packages/plugins/mcp/src/sdk/elicitation.test.ts+77−113

This diff is large: its 344 lines aren’t shown here.

packages/plugins/mcp/src/sdk/errors.ts+1−17

This diff is large: its 29 lines aren’t shown here.

packages/plugins/mcp/src/sdk/index.ts+24−16

This diff is large: its 50 lines aren’t shown here.

packages/plugins/mcp/src/sdk/invoke.ts+36−127

This diff is large: its 221 lines aren’t shown here.

packages/plugins/mcp/src/sdk/owner-isolation.test.ts+118−0

This diff is large: its 119 lines aren’t shown here.

packages/plugins/mcp/src/sdk/per-user-auth-isolation.test.ts+0−328

This diff is large: its 329 lines aren’t shown here.

packages/plugins/mcp/src/sdk/plugin.test.ts+87−895

This diff is large: its 1097 lines aren’t shown here.

packages/plugins/mcp/src/sdk/plugin.ts+476−1908

This diff is large: its 2715 lines aren’t shown here.

packages/plugins/mcp/src/sdk/stored-source.ts+0−19

This diff is large: its 20 lines aren’t shown here.

packages/plugins/mcp/src/sdk/types.ts+59−73

This diff is large: its 190 lines aren’t shown here.

packages/plugins/mcp/vitest.config.ts+3−1

This diff is large: its 11 lines aren’t shown here.

packages/plugins/onepassword/src/api/group.ts+26−27

This diff is large: its 101 lines aren’t shown here.

packages/plugins/onepassword/src/api/handlers.ts+5−5

This diff is large: its 33 lines aren’t shown here.

packages/plugins/onepassword/src/react/OnePasswordSettings.tsx+66−51

This diff is large: its 236 lines aren’t shown here.

packages/plugins/onepassword/src/react/atoms.ts+16−17

This diff is large: its 57 lines aren’t shown here.

packages/plugins/onepassword/src/sdk/index.ts+3−0

This diff is large: its 10 lines aren’t shown here.

packages/plugins/onepassword/src/sdk/plugin.test.ts+58−30

This diff is large: its 145 lines aren’t shown here.

packages/plugins/onepassword/src/sdk/plugin.ts+92−122

This diff is large: its 421 lines aren’t shown here.

packages/plugins/onepassword/src/sdk/types.ts+39−2

This diff is large: its 55 lines aren’t shown here.

packages/plugins/openapi/src/api/group.ts+95−109

This diff is large: its 280 lines aren’t shown here.

packages/plugins/openapi/src/api/handlers.ts+70−54

This diff is large: its 167 lines aren’t shown here.

packages/plugins/openapi/src/promise.ts+12−2

This diff is large: its 19 lines aren’t shown here.

packages/plugins/openapi/src/react/AddOpenApiSource.tsx+501−2309

This diff is large: its 3011 lines aren’t shown here.

packages/plugins/openapi/src/react/EditOpenApiSource.tsx+66−941

This diff is large: its 1055 lines aren’t shown here.

packages/plugins/openapi/src/react/GoogleProductPicker.tsx+366−0

This diff is large: its 367 lines aren’t shown here.

packages/plugins/openapi/src/react/OpenApiAccountsPanel.tsx+120−0

This diff is large: its 121 lines aren’t shown here.

packages/plugins/openapi/src/react/OpenApiSourceDetailsFields.tsx+7−7

This diff is large: its 40 lines aren’t shown here.

packages/plugins/openapi/src/react/OpenApiSourceSummary.tsx+25−176

This diff is large: its 216 lines aren’t shown here.

packages/plugins/openapi/src/react/atoms.ts+27−45

This diff is large: its 90 lines aren’t shown here.

packages/plugins/openapi/src/react/auth-method-config.test.ts+111−0

This diff is large: its 112 lines aren’t shown here.

packages/plugins/openapi/src/react/auth-method-config.ts+222−0

This diff is large: its 223 lines aren’t shown here.

packages/plugins/openapi/src/react/index.ts+11−2

This diff is large: its 15 lines aren’t shown here.

packages/plugins/openapi/src/react/plugin-client.tsx+2−2

This diff is large: its 12 lines aren’t shown here.

packages/plugins/openapi/src/react/source-plugin.ts+5−2

This diff is large: its 27 lines aren’t shown here.

packages/plugins/openapi/src/sdk/__snapshots__/real-specs.test.ts.snap+2−2

This diff is large: its 18 lines aren’t shown here.

packages/plugins/openapi/src/sdk/client-credentials-oauth.test.ts+18−315

This diff is large: its 340 lines aren’t shown here.

packages/plugins/openapi/src/sdk/config.ts+145−0

This diff is large: its 146 lines aren’t shown here.

packages/plugins/openapi/src/sdk/configure.test.ts+251−0

This diff is large: its 252 lines aren’t shown here.

packages/plugins/openapi/src/sdk/credential-status.test.ts+0−137

This diff is large: its 138 lines aren’t shown here.

packages/plugins/openapi/src/sdk/credential-status.ts+0−112

This diff is large: its 113 lines aren’t shown here.

packages/plugins/openapi/src/sdk/describe-auth-methods.test.ts+97−0

This diff is large: its 98 lines aren’t shown here.

packages/plugins/openapi/src/sdk/errors.ts+8−5

This diff is large: its 25 lines aren’t shown here.

packages/plugins/openapi/src/sdk/form-urlencoded-body.test.ts+11−41

This diff is large: its 81 lines aren’t shown here.

packages/plugins/openapi/src/sdk/google-bundle.test.ts+270−0

This diff is large: its 271 lines aren’t shown here.

packages/plugins/openapi/src/sdk/google-discovery.test.ts+164−2

This diff is large: its 182 lines aren’t shown here.

packages/plugins/openapi/src/sdk/google-discovery.ts+60−37

This diff is large: its 198 lines aren’t shown here.

packages/plugins/openapi/src/sdk/google-presets.ts+78−0

This diff is large: its 82 lines aren’t shown here.

packages/plugins/openapi/src/sdk/google-product-picker-scopes.test.ts+122−0

This diff is large: its 123 lines aren’t shown here.

packages/plugins/openapi/src/sdk/index.ts+17−10

This diff is large: its 61 lines aren’t shown here.

packages/plugins/openapi/src/sdk/invoke.ts+0−68

This diff is large: its 85 lines aren’t shown here.

packages/plugins/openapi/src/sdk/multi-scope-bearer.test.ts+72−952

This diff is large: its 1076 lines aren’t shown here.

packages/plugins/openapi/src/sdk/multi-scope-oauth.test.ts+18−733

This diff is large: its 760 lines aren’t shown here.

packages/plugins/openapi/src/sdk/non-json-body.test.ts+63−219

This diff is large: its 421 lines aren’t shown here.

packages/plugins/openapi/src/sdk/oauth-refresh.test.ts+23−376

This diff is large: its 409 lines aren’t shown here.

packages/plugins/openapi/src/sdk/plugin.test.ts+285−1348

This diff is large: its 1862 lines aren’t shown here.

packages/plugins/openapi/src/sdk/plugin.ts+646−1406

This diff is large: its 2369 lines aren’t shown here.

packages/plugins/openapi/src/sdk/real-specs.test.ts+31−21

This diff is large: its 103 lines aren’t shown here.

packages/plugins/openapi/src/sdk/source-contracts.ts+0−58

This diff is large: its 59 lines aren’t shown here.

packages/plugins/openapi/src/sdk/store.ts+61−276

This diff is large: its 411 lines aren’t shown here.

packages/plugins/openapi/src/sdk/types.ts+39−59

This diff is large: its 110 lines aren’t shown here.

packages/plugins/openapi/src/sdk/upstream-failures.test.ts+42−83

This diff is large: its 217 lines aren’t shown here.

packages/plugins/openapi/src/sdk/usage-scope-isolation.test.ts+22−197

This diff is large: its 221 lines aren’t shown here.

packages/plugins/openapi/src/testing/index.ts+105−44

This diff is large: its 219 lines aren’t shown here.

packages/plugins/openapi/vitest.config.ts+4−1

This diff is large: its 13 lines aren’t shown here.

packages/plugins/workos-vault/src/sdk/index.ts+2−4

This diff is large: its 13 lines aren’t shown here.

packages/plugins/workos-vault/src/sdk/plugin.ts+13−21

This diff is large: its 74 lines aren’t shown here.

packages/plugins/workos-vault/src/sdk/secret-store.test.ts+437−341

This diff is large: its 912 lines aren’t shown here.

packages/plugins/workos-vault/src/sdk/secret-store.ts+200−122

This diff is large: its 518 lines aren’t shown here.

packages/react/package.json+1−0

This diff is large: its 8 lines aren’t shown here.

packages/react/src/api/atoms.tsx+303−195

This diff is large: its 610 lines aren’t shown here.

packages/react/src/api/oauth-popup.ts+25−0

This diff is large: its 46 lines aren’t shown here.

packages/react/src/api/provider.tsx+4−22

This diff is large: its 50 lines aren’t shown here.

packages/react/src/api/reactivity-keys.tsx+19−20

This diff is large: its 72 lines aren’t shown here.

packages/react/src/api/scope-context.tsx+39−87

This diff is large: its 132 lines aren’t shown here.

packages/react/src/components/accounts-section.tsx+352−0

This diff is large: its 353 lines aren’t shown here.

packages/react/src/components/add-account-modal.test.ts+324−0

This diff is large: its 325 lines aren’t shown here.

packages/react/src/components/add-account-modal.tsx+1197−0

This diff is large: its 1198 lines aren’t shown here.

packages/react/src/components/add-custom-method-modal.tsx+128−0

This diff is large: its 129 lines aren’t shown here.

packages/react/src/components/auth-template-editor.test.ts+46−0

This diff is large: its 47 lines aren’t shown here.

packages/react/src/components/auth-template-editor.tsx+216−0

This diff is large: its 217 lines aren’t shown here.

packages/react/src/components/command-palette.tsx+34−41

This diff is large: its 165 lines aren’t shown here.

packages/react/src/components/integration-account-badge.tsx+18−0

This diff is large: its 19 lines aren’t shown here.

packages/react/src/components/integration-favicon.test.tsxrenamed from packages/react/src/components/source-favicon.test.tsx+16−12

This diff is large: its 74 lines aren’t shown here.

packages/react/src/components/integration-favicon.tsxrenamed from packages/react/src/components/source-favicon.tsx+9−9

This diff is large: its 65 lines aren’t shown here.

packages/react/src/components/integration-icon-with-account.tsx+20−0

This diff is large: its 21 lines aren’t shown here.

packages/react/src/components/json-schema-form.test.ts+150−0

This diff is large: its 151 lines aren’t shown here.

packages/react/src/components/json-schema-form.tsx+715−0

This diff is large: its 716 lines aren’t shown here.

packages/react/src/components/mcp-install-card.tsx+0−3

This diff is large: its 24 lines aren’t shown here.

packages/react/src/components/oauth-client-form.tsx+452−0

This diff is large: its 453 lines aren’t shown here.

packages/react/src/components/placement-editor.tsx+102−0

This diff is large: its 103 lines aren’t shown here.

packages/react/src/components/source-account-badge.tsx+0−40

This diff is large: its 41 lines aren’t shown here.

packages/react/src/components/source-icon-with-account.tsx+0−27

This diff is large: its 28 lines aren’t shown here.

packages/react/src/components/tool-detail.tsx+118−19

This diff is large: its 234 lines aren’t shown here.

packages/react/src/components/tool-run-panel.test.ts+73−0

This diff is large: its 74 lines aren’t shown here.

packages/react/src/components/tool-run-panel.tsx+400−0

This diff is large: its 401 lines aren’t shown here.

packages/react/src/components/tool-tree.test.ts+109−0

This diff is large: its 110 lines aren’t shown here.

packages/react/src/components/tool-tree.tsx+224−73

This diff is large: its 371 lines aren’t shown here.

packages/react/src/hooks/use-owner.ts+1−0

This diff is large: its 2 lines aren’t shown here.

packages/react/src/hooks/use-policy-actions.ts+35−22

This diff is large: its 111 lines aren’t shown here.

packages/react/src/hooks/use-scope.ts+0−1

This diff is large: its 2 lines aren’t shown here.

packages/react/src/lib/auth-placements.test.ts+92−0

This diff is large: its 93 lines aren’t shown here.

packages/react/src/lib/auth-placements.tsx+185−0

This diff is large: its 186 lines aren’t shown here.

packages/react/src/lib/policy-pattern.ts+31−0

This diff is large: its 32 lines aren’t shown here.

packages/react/src/multiplayer/shell.tsx+31−28

This diff is large: its 126 lines aren’t shown here.

packages/react/src/pages/connections.tsx+0−494

This diff is large: its 495 lines aren’t shown here.

packages/react/src/pages/integration-add.tsxrenamed from packages/react/src/pages/sources-add.tsx+13−9

This diff is large: its 62 lines aren’t shown here.

packages/react/src/pages/integration-detail.tsx+641−0

This diff is large: its 642 lines aren’t shown here.

packages/react/src/pages/integrations.tsxrenamed from packages/react/src/pages/sources.tsx+74−95

This diff is large: its 364 lines aren’t shown here.

packages/react/src/pages/oauth-apps.test.ts+117−0

This diff is large: its 118 lines aren’t shown here.

packages/react/src/pages/oauth-apps.tsx+488−0

This diff is large: its 489 lines aren’t shown here.

packages/react/src/pages/org.tsx+31−8

This diff is large: its 81 lines aren’t shown here.

packages/react/src/pages/policies.tsx+109−138

This diff is large: its 421 lines aren’t shown here.

packages/react/src/pages/secrets.test.ts+0−18

This diff is large: its 19 lines aren’t shown here.

packages/react/src/pages/secrets.tsx+51−401

This diff is large: its 522 lines aren’t shown here.

packages/react/src/pages/source-detail.tsx+0−337

This diff is large: its 338 lines aren’t shown here.

packages/react/src/pages/tools.tsx+57−20

This diff is large: its 123 lines aren’t shown here.

packages/react/src/plugins/credential-bindings.test.ts+0−58

This diff is large: its 59 lines aren’t shown here.

packages/react/src/plugins/credential-bindings.tsx+0−84

This diff is large: its 85 lines aren’t shown here.

packages/react/src/plugins/credential-slot-bindings.tsx+0−195

This diff is large: its 196 lines aren’t shown here.

packages/react/src/plugins/credential-target-scope.test.ts+40−34

This diff is large: its 89 lines aren’t shown here.

packages/react/src/plugins/credential-target-scope.tsx+88−84

This diff is large: its 254 lines aren’t shown here.

packages/react/src/plugins/headers-list.tsx+0−333

This diff is large: its 334 lines aren’t shown here.

packages/react/src/plugins/http-credentials.test.ts+0−64

This diff is large: its 65 lines aren’t shown here.

packages/react/src/plugins/http-credentials.tsx+0−430

This diff is large: its 431 lines aren’t shown here.

packages/react/src/plugins/integration-credential-status.tsx+39−0

This diff is large: its 40 lines aren’t shown here.

packages/react/src/plugins/integration-identity.test.tsrenamed from packages/react/src/plugins/source-identity.test.ts+6−6

This diff is large: its 28 lines aren’t shown here.

packages/react/src/plugins/integration-identity.tsxrenamed from packages/react/src/plugins/source-identity.tsx+13−11

This diff is large: its 92 lines aren’t shown here.

packages/react/src/plugins/oauth-reconnect.test.ts+97−0

This diff is large: its 98 lines aren’t shown here.

packages/react/src/plugins/oauth-reconnect.ts+100−0

This diff is large: its 101 lines aren’t shown here.

packages/react/src/plugins/oauth-sign-in.tsx+67−159

This diff is large: its 358 lines aren’t shown here.

packages/react/src/plugins/secret-credential-scope.ts+0−40

This diff is large: its 41 lines aren’t shown here.

packages/react/src/plugins/secret-form.tsx+37−55

This diff is large: its 175 lines aren’t shown here.

packages/react/src/plugins/secret-header-auth.test.ts+0−90

This diff is large: its 91 lines aren’t shown here.

packages/react/src/plugins/secret-header-auth.tsx+0−598

This diff is large: its 599 lines aren’t shown here.

packages/react/src/plugins/secret-picker.tsx+35−25

This diff is large: its 136 lines aren’t shown here.

packages/react/src/plugins/source-credential-bindings.tsx+0−158

This diff is large: its 159 lines aren’t shown here.

packages/react/src/plugins/source-credential-status-core.ts+0−79

This diff is large: its 80 lines aren’t shown here.

packages/react/src/plugins/source-credential-status.test.ts+0−88

This diff is large: its 89 lines aren’t shown here.

packages/react/src/plugins/source-credential-status.tsx+0−69

This diff is large: its 70 lines aren’t shown here.

packages/react/src/plugins/source-oauth-connection.test.ts+0−49

This diff is large: its 50 lines aren’t shown here.

packages/react/src/plugins/source-oauth-connection.tsx+0−140

This diff is large: its 141 lines aren’t shown here.

packages/react/src/plugins/use-effective-oauth-client.test.ts+117−0

This diff is large: its 118 lines aren’t shown here.

packages/react/src/plugins/use-effective-oauth-client.tsx+194−0

This diff is large: its 195 lines aren’t shown here.

packages/react/src/plugins/use-secret-picker-secrets.tsx+16−15

This diff is large: its 46 lines aren’t shown here.