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
100100
101101 # Pi coding agent
102102 .pi/
103+
104+# Throwaway UX prototype (not part of the app)
105+ux-demo/
.vscode/settings.json+1−2
@@ -2,6 +2,5 @@ · 1 unmodified line
22 "typescript.tsdk": "./node_modules/typescript/lib",
33 "typescript.enablePromptUseWorkspaceTsdk": true,
44 "typescript.native-preview.tsdk": "node_modules/@typescript/native-preview",
5− "typescript.experimental.useTsgo": true,
6− "js/ts.experimental.useTsgo": true
5+ "typescript.experimental.useTsgo": false
76 }
apps/cli/src/daemon-state.test.ts+2−2
@@ -2,7 +2,7 @@ import { afterEach, describe, expect, it } from "@effect/vitest"; · 1 unmodified line
22 import { BunServices } from "@effect/platform-bun";
33 import { mkdtempSync, rmSync } from "node:fs";
44 import { tmpdir } from "node:os";
5−import { join } from "node:path";
5+import { join, resolve } from "node:path";
66 import * as Effect from "effect/Effect";
77
88 import {
@@ -44,7 +44,7 @@ describe("daemon host and scope identity", () => { · 35 unmodified lines
4444 process.chdir(workspace);
4545 process.env.EXECUTOR_SCOPE_DIR = "executor.jsonc";
4646
47− expect(currentDaemonScopeId()).toBe(`scope:${join(workspace, "executor.jsonc")}`);
47+ expect(currentDaemonScopeId()).toBe(`scope:${resolve("executor.jsonc")}`);
4848 } finally {
4949 rmSync(workspace, { recursive: true, force: true });
5050 }
apps/cli/src/daemon.test.ts+54−1
@@ -1,6 +1,9 @@
11 import { describe, expect, it } from "@effect/vitest";
2+import { createServer, type Server } from "node:http";
3+import type { AddressInfo } from "node:net";
4+import * as Effect from "effect/Effect";
25
3−import { canAutoStartLocalDaemonForHost } from "./daemon";
6+import { canAutoStartLocalDaemonForHost, isExecutorServerReachable } from "./daemon";
47
58 describe("canAutoStartLocalDaemonForHost", () => {
69 it("allows loopback hosts", () => {
@@ -14,3 +17,53 @@ describe("canAutoStartLocalDaemonForHost", () => { · 7 unmodified lines
1417 expect(canAutoStartLocalDaemonForHost("::")).toBe(false);
1518 });
1619 });
20+
21+describe("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
1717 readonly args: ReadonlyArray<string>;
1818 }
1919
20+export interface ExecutorServerReachabilityInput {
21+ readonly baseUrl: string;
22+ readonly authorization?: string;
23+}
24+
2025 type ProbeServer = ReturnType<typeof createServer> & {
2126 removeAllListeners: () => void;
2227 once: (event: "error" | "listening", listener: (...args: unknown[]) => void) => void;
@@ -60,6 +65,19 @@ export const isDevCliEntrypoint = (scriptPath: string | undefined): boolean => { · 37 unmodified lines
6065 return scriptPath.endsWith(".ts") || scriptPath.endsWith(".js");
6166 };
6267
68+export 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+
6381 // ---------------------------------------------------------------------------
6482 // Process spec
6583 // ---------------------------------------------------------------------------
apps/cli/src/main.ts+23−63
@@ -62,6 +62,7 @@ import { · 61 unmodified lines
6262 buildDaemonSpawnSpec,
6363 chooseDaemonPort,
6464 canAutoStartLocalDaemonForHost,
65+ isExecutorServerReachable,
6566 isDevCliEntrypoint,
6667 parseDaemonBaseUrl,
6768 spawnDetached,
@@ -157,51 +158,8 @@ const waitForShutdownSignal = () => · 89 unmodified lines
157158 // Background server management
158159 // ---------------------------------------------------------------------------
159160
160−const isRecord = (value: unknown): value is Record<string, unknown> =>
161− typeof value === "object" && value !== null && !Array.isArray(value);
162−
163−interface DaemonScopeInfo {
164− readonly id: string;
165− readonly name: string;
166− readonly dir: string;
167−}
168−
169−const 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−
203161 const isServerReachable = (baseUrl: string, authorization?: string): Effect.Effect<boolean> =>
204− readDaemonScopeInfo(baseUrl, authorization).pipe(Effect.map((scopeInfo) => scopeInfo !== null));
162+ isExecutorServerReachable({ baseUrl, authorization });
205163
206164 const readActiveLocalServerManifest = (): Effect.Effect<
207165 ExecutorLocalServerManifest | null,
@@ -238,9 +196,6 @@ const normalizeDaemonScopeDir = (dir: string): string => { · 30 unmodified lines
238196 return existsSync(resolved) ? realpathSync.native(resolved) : resolved;
239197 };
240198
241−const currentDaemonScopeDir = (): string =>
242− normalizeDaemonScopeDir(process.env.EXECUTOR_SCOPE_DIR ?? process.cwd());
243−
244199 const currentScopeDirForManifest = (): string | null =>
245200 process.env.EXECUTOR_SCOPE_DIR ? normalizeDaemonScopeDir(process.env.EXECUTOR_SCOPE_DIR) : null;
246201
@@ -382,6 +337,7 @@ const resolveDaemonTarget = (baseUrl: string) => · 135 unmodified lines
382337 hostname: pointer.hostname,
383338 port: pointer.port,
384339 scopeId,
340+ fromPointer: true,
385341 };
386342 }
387343
@@ -393,6 +349,7 @@ const resolveDaemonTarget = (baseUrl: string) => · 5 unmodified lines
393349 hostname: host,
394350 port: parsed.port,
395351 scopeId,
352+ fromPointer: false,
396353 };
397354 });
398355
@@ -484,17 +441,22 @@ const ensureDaemon = ( · 85 unmodified lines
484441 ): Effect.Effect<string, Error, FileSystem.FileSystem | PlatformPath.Path> =>
485442 Effect.gen(function* () {
486443 const resolvedTarget = yield* resolveDaemonTarget(baseUrl);
487− const reachableScope = yield* readDaemonScopeInfo(resolvedTarget.baseUrl);
488− if (reachableScope && normalizeDaemonScopeDir(reachableScope.dir) === currentDaemonScopeDir()) {
444+ if (resolvedTarget.fromPointer && (yield* isServerReachable(resolvedTarget.baseUrl))) {
489445 return resolvedTarget.baseUrl;
490446 }
491447
492448 const active = yield* readActiveLocalServerManifest();
493− if (
494− active &&
495− normalizeExecutorServerConnection({ origin: active.connection.origin }).origin !==
496− normalizeExecutorServerConnection({ origin: resolvedTarget.baseUrl }).origin
497− ) {
449+ const activeOrigin = active
450+ ? normalizeExecutorServerConnection({ origin: active.connection.origin }).origin
451+ : null;
452+ const targetOrigin = normalizeExecutorServerConnection({
453+ origin: resolvedTarget.baseUrl,
454+ }).origin;
455+ if (activeOrigin === targetOrigin) {
456+ return resolvedTarget.baseUrl;
457+ }
458+
459+ if (active && activeOrigin !== targetOrigin) {
498460 return yield* Effect.fail(
499461 new Error(
500462 [
@@ -1507,9 +1469,8 @@ const runCallHelp = ( · 1006 unmodified lines
15071469 serverName: args.serverName,
15081470 });
15091471 const client = yield* makeApiClient(connection);
1510− const scopeInfo = yield* client.scope.info();
1511− const tools = yield* client.tools.list({ params: { scopeId: scopeInfo.id } });
1512− const toolPaths = tools.map((tool) => tool.id);
1472+ const tools = yield* client.tools.list({ query: {} });
1473+ const toolPaths = tools.map((tool) => tool.address);
15131474
15141475 const inspection = yield* Effect.try({
15151476 try: () =>
@@ -1575,15 +1536,14 @@ const runCallHelp = ( · 59 unmodified lines
15751536 }
15761537
15771538 const exactTool = inspection.exactPath
1578− ? tools.find((tool) => tool.id === inspection.exactPath)
1539+ ? tools.find((tool) => tool.address === inspection.exactPath)
15791540 : undefined;
15801541
15811542 if (exactTool && inspection.children.length === 0) {
15821543 const schema = yield* client.tools
15831544 .schema({
1584− params: {
1585− scopeId: scopeInfo.id,
1586− toolId: exactTool.id,
1545+ query: {
1546+ address: exactTool.address,
15871547 },
15881548 })
15891549 .pipe(
@@ -1596,7 +1556,7 @@ const runCallHelp = ( · 6 unmodified lines
15961556
15971557 yield* printCallLeafHelp({
15981558 tool: {
1599− id: exactTool.id,
1559+ id: exactTool.address,
16001560 description: exactTool.description,
16011561 },
16021562 schema,
@@ -1618,7 +1578,7 @@ const runCallHelp = ( · 15 unmodified lines
16181578 limit: args.limit,
16191579 exactTool: exactTool
16201580 ? {
1621− id: exactTool.id,
1581+ id: exactTool.address,
16221582 description: exactTool.description,
16231583 }
16241584 : undefined,
apps/cloud/drizzle.config.ts+1−1
@@ -15,7 +15,7 @@ const withSslMode = (url: string): string => { · 14 unmodified lines
1515 };
1616
1717 export default defineConfig({
18− schema: ["./src/services/schema.ts", "./src/services/executor-schema.ts"],
18+ schema: ["./src/db/schema.ts", "./src/db/executor-schema.ts"],
1919 out: "./drizzle",
2020 dialect: "postgresql",
2121 dbCredentials: {
apps/cloud/drizzle/0000_lame_rage.sql+0−179
@@ -1,179 +0,0 @@
1−CREATE TABLE "accounts" (
2− "id" text PRIMARY KEY NOT NULL,
3− "created_at" timestamp with time zone DEFAULT now() NOT NULL
4−);
5−--> statement-breakpoint
6−CREATE 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
13−CREATE 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
19−CREATE 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
26−CREATE 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
37−CREATE 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
45−CREATE 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
54−CREATE 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
63−CREATE 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
72−CREATE 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
81−CREATE 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
89−CREATE 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
97−CREATE 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
109−CREATE 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
118−CREATE 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
133−CREATE 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
147−CREATE 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
156−ALTER 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
157−ALTER 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
158−CREATE INDEX "definition_scope_id_idx" ON "definition" USING btree ("scope_id");--> statement-breakpoint
159−CREATE INDEX "definition_source_id_idx" ON "definition" USING btree ("source_id");--> statement-breakpoint
160−CREATE INDEX "definition_plugin_id_idx" ON "definition" USING btree ("plugin_id");--> statement-breakpoint
161−CREATE INDEX "graphql_operation_scope_id_idx" ON "graphql_operation" USING btree ("scope_id");--> statement-breakpoint
162−CREATE INDEX "graphql_operation_source_id_idx" ON "graphql_operation" USING btree ("source_id");--> statement-breakpoint
163−CREATE INDEX "graphql_source_scope_id_idx" ON "graphql_source" USING btree ("scope_id");--> statement-breakpoint
164−CREATE INDEX "mcp_binding_scope_id_idx" ON "mcp_binding" USING btree ("scope_id");--> statement-breakpoint
165−CREATE INDEX "mcp_binding_source_id_idx" ON "mcp_binding" USING btree ("source_id");--> statement-breakpoint
166−CREATE INDEX "mcp_oauth_session_scope_id_idx" ON "mcp_oauth_session" USING btree ("scope_id");--> statement-breakpoint
167−CREATE INDEX "mcp_source_scope_id_idx" ON "mcp_source" USING btree ("scope_id");--> statement-breakpoint
168−CREATE INDEX "openapi_oauth_session_scope_id_idx" ON "openapi_oauth_session" USING btree ("scope_id");--> statement-breakpoint
169−CREATE INDEX "openapi_operation_scope_id_idx" ON "openapi_operation" USING btree ("scope_id");--> statement-breakpoint
170−CREATE INDEX "openapi_operation_source_id_idx" ON "openapi_operation" USING btree ("source_id");--> statement-breakpoint
171−CREATE INDEX "openapi_source_scope_id_idx" ON "openapi_source" USING btree ("scope_id");--> statement-breakpoint
172−CREATE INDEX "secret_scope_id_idx" ON "secret" USING btree ("scope_id");--> statement-breakpoint
173−CREATE INDEX "secret_provider_idx" ON "secret" USING btree ("provider");--> statement-breakpoint
174−CREATE INDEX "source_scope_id_idx" ON "source" USING btree ("scope_id");--> statement-breakpoint
175−CREATE INDEX "source_plugin_id_idx" ON "source" USING btree ("plugin_id");--> statement-breakpoint
176−CREATE INDEX "tool_scope_id_idx" ON "tool" USING btree ("scope_id");--> statement-breakpoint
177−CREATE INDEX "tool_source_id_idx" ON "tool" USING btree ("source_id");--> statement-breakpoint
178−CREATE INDEX "tool_plugin_id_idx" ON "tool" USING btree ("plugin_id");--> statement-breakpoint
179−CREATE 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 @@
1+CREATE TABLE "accounts" (
2+ "id" text PRIMARY KEY NOT NULL,
3+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
4+);
5+--> statement-breakpoint
6+CREATE 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
13+CREATE 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
19+CREATE 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
27+CREATE 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
48+CREATE 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
61+CREATE 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
74+CREATE 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
89+CREATE 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
107+CREATE 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
120+CREATE 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
125+CREATE 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
142+CREATE 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
155+ALTER 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
156+ALTER 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
157+CREATE UNIQUE INDEX "blob_id_uidx" ON "blob" USING btree ("id");--> statement-breakpoint
158+CREATE UNIQUE INDEX "connection_uidx" ON "connection" USING btree ("tenant","owner","subject","integration","name");--> statement-breakpoint
159+CREATE UNIQUE INDEX "definition_uidx" ON "definition" USING btree ("tenant","owner","subject","integration","connection","name");--> statement-breakpoint
160+CREATE UNIQUE INDEX "integration_uidx" ON "integration" USING btree ("tenant","slug");--> statement-breakpoint
161+CREATE UNIQUE INDEX "oauth_client_uidx" ON "oauth_client" USING btree ("tenant","owner","subject","slug");--> statement-breakpoint
162+CREATE UNIQUE INDEX "oauth_session_uidx" ON "oauth_session" USING btree ("tenant","state");--> statement-breakpoint
163+CREATE UNIQUE INDEX "plugin_storage_uidx" ON "plugin_storage" USING btree ("tenant","owner","subject","plugin_id","collection","key");--> statement-breakpoint
164+CREATE UNIQUE INDEX "tool_uidx" ON "tool" USING btree ("tenant","owner","subject","integration","connection","name");--> statement-breakpoint
165+CREATE 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 @@
1−ALTER TABLE "openapi_source" ADD COLUMN "source_url" text;
apps/cloud/drizzle/0002_fat_white_tiger.sql+0−1
@@ -1 +0,0 @@
1−ALTER 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 @@
1−CREATE 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
17−ALTER TABLE "secret" ADD COLUMN "owned_by_connection_id" text;--> statement-breakpoint
18−CREATE INDEX "connection_scope_id_idx" ON "connection" USING btree ("scope_id");--> statement-breakpoint
19−CREATE INDEX "connection_provider_idx" ON "connection" USING btree ("provider");--> statement-breakpoint
20−CREATE 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 @@
1−CREATE 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
13−CREATE INDEX "openapi_source_binding_source_id_idx" ON "openapi_source_binding" USING btree ("source_id");
14−--> statement-breakpoint
15−CREATE INDEX "openapi_source_binding_source_scope_id_idx" ON "openapi_source_binding" USING btree ("source_scope_id");
16−--> statement-breakpoint
17−CREATE INDEX "openapi_source_binding_target_scope_id_idx" ON "openapi_source_binding" USING btree ("target_scope_id");
18−--> statement-breakpoint
19−CREATE 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 @@
1−ALTER TABLE "connection" DROP COLUMN "kind";
apps/cloud/drizzle/0006_add_tool_policy.sql+0−17
@@ -1,17 +0,0 @@
1−CREATE 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.
17−CREATE 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 @@
1−CREATE 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
15−DROP TABLE "mcp_oauth_session" CASCADE;--> statement-breakpoint
16−DROP TABLE "openapi_oauth_session" CASCADE;--> statement-breakpoint
17−ALTER TABLE "graphql_source" ADD COLUMN "query_params" jsonb;--> statement-breakpoint
18−ALTER TABLE "graphql_source" ADD COLUMN "auth" jsonb;--> statement-breakpoint
19−ALTER TABLE "openapi_source" ADD COLUMN "query_params" jsonb;--> statement-breakpoint
20−CREATE INDEX "oauth2_session_scope_id_idx" ON "oauth2_session" USING btree ("scope_id");--> statement-breakpoint
21−CREATE INDEX "oauth2_session_plugin_id_idx" ON "oauth2_session" USING btree ("plugin_id");--> statement-breakpoint
22−CREATE 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−
15−CREATE 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
27−CREATE INDEX "graphql_source_header_scope_id_idx" ON "graphql_source_header" USING btree ("scope_id");--> statement-breakpoint
28−CREATE INDEX "graphql_source_header_source_id_idx" ON "graphql_source_header" USING btree ("source_id");--> statement-breakpoint
29−CREATE INDEX "graphql_source_header_secret_id_idx" ON "graphql_source_header" USING btree ("secret_id");--> statement-breakpoint
30−
31−CREATE 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
43−CREATE INDEX "graphql_source_query_param_scope_id_idx" ON "graphql_source_query_param" USING btree ("scope_id");--> statement-breakpoint
44−CREATE INDEX "graphql_source_query_param_source_id_idx" ON "graphql_source_query_param" USING btree ("source_id");--> statement-breakpoint
45−CREATE 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.
49−ALTER TABLE "graphql_source" ADD COLUMN "auth_kind" text DEFAULT 'none' NOT NULL;--> statement-breakpoint
50−ALTER TABLE "graphql_source" ADD COLUMN "auth_connection_id" text;--> statement-breakpoint
51−CREATE 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".
56−UPDATE "graphql_source"
57−SET
58− "auth_kind" = COALESCE("auth"->>'kind', 'none'),
59− "auth_connection_id" = "auth"->>'connectionId'
60−WHERE "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.
66−INSERT INTO "graphql_source_header"
67− ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
68−SELECT
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
80−FROM "graphql_source" s, jsonb_each(s."headers") h
81−WHERE s."headers" IS NOT NULL
82−ON CONFLICT DO NOTHING;--> statement-breakpoint
83−
84−-- Same for query_params.
85−INSERT INTO "graphql_source_query_param"
86− ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
87−SELECT
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
99−FROM "graphql_source" s, jsonb_each(s."query_params") q
100−WHERE s."query_params" IS NOT NULL
101−ON CONFLICT DO NOTHING;--> statement-breakpoint
102−
103−ALTER TABLE "graphql_source" DROP COLUMN "headers";--> statement-breakpoint
104−ALTER TABLE "graphql_source" DROP COLUMN "query_params";--> statement-breakpoint
105−ALTER 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−
117−CREATE 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
129−CREATE INDEX "openapi_source_query_param_scope_id_idx" ON "openapi_source_query_param" USING btree ("scope_id");--> statement-breakpoint
130−CREATE INDEX "openapi_source_query_param_source_id_idx" ON "openapi_source_query_param" USING btree ("source_id");--> statement-breakpoint
131−CREATE INDEX "openapi_source_query_param_secret_id_idx" ON "openapi_source_query_param" USING btree ("secret_id");--> statement-breakpoint
132−
133−CREATE 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
145−CREATE INDEX "openapi_source_spec_fetch_header_scope_id_idx" ON "openapi_source_spec_fetch_header" USING btree ("scope_id");--> statement-breakpoint
146−CREATE INDEX "openapi_source_spec_fetch_header_source_id_idx" ON "openapi_source_spec_fetch_header" USING btree ("source_id");--> statement-breakpoint
147−CREATE INDEX "openapi_source_spec_fetch_header_secret_id_idx" ON "openapi_source_spec_fetch_header" USING btree ("secret_id");--> statement-breakpoint
148−
149−CREATE 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
161−CREATE INDEX "openapi_source_spec_fetch_query_param_scope_id_idx" ON "openapi_source_spec_fetch_query_param" USING btree ("scope_id");--> statement-breakpoint
162−CREATE INDEX "openapi_source_spec_fetch_query_param_source_id_idx" ON "openapi_source_spec_fetch_query_param" USING btree ("source_id");--> statement-breakpoint
163−CREATE 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.
168−ALTER TABLE "openapi_source_binding" ADD COLUMN "kind" text DEFAULT 'text' NOT NULL;--> statement-breakpoint
169−ALTER TABLE "openapi_source_binding" ADD COLUMN "secret_id" text;--> statement-breakpoint
170−ALTER TABLE "openapi_source_binding" ADD COLUMN "connection_id" text;--> statement-breakpoint
171−ALTER TABLE "openapi_source_binding" ADD COLUMN "text_value" text;--> statement-breakpoint
172−CREATE INDEX "openapi_source_binding_secret_id_idx" ON "openapi_source_binding" USING btree ("secret_id");--> statement-breakpoint
173−CREATE INDEX "openapi_source_binding_connection_id_idx" ON "openapi_source_binding" USING btree ("connection_id");--> statement-breakpoint
174−
175−UPDATE "openapi_source_binding"
176−SET
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
181−WHERE "value" IS NOT NULL;--> statement-breakpoint
182−
183−INSERT INTO "openapi_source_query_param"
184− ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
185−SELECT
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
197−FROM "openapi_source" s, jsonb_each(s."query_params") q
198−WHERE s."query_params" IS NOT NULL
199−ON CONFLICT DO NOTHING;--> statement-breakpoint
200−
201−INSERT INTO "openapi_source_spec_fetch_header"
202− ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
203−SELECT
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
215−FROM "openapi_source" s, jsonb_each(s."invocation_config"->'specFetchCredentials'->'headers') h
216−WHERE s."invocation_config"->'specFetchCredentials'->'headers' IS NOT NULL
217−ON CONFLICT DO NOTHING;--> statement-breakpoint
218−
219−INSERT INTO "openapi_source_spec_fetch_query_param"
220− ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
221−SELECT
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
233−FROM "openapi_source" s, jsonb_each(s."invocation_config"->'specFetchCredentials'->'queryParams') q
234−WHERE s."invocation_config"->'specFetchCredentials'->'queryParams' IS NOT NULL
235−ON 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.
242−UPDATE "openapi_source"
243−SET "oauth2" = "invocation_config"->'oauth2'
244−WHERE "oauth2" IS NULL
245− AND "invocation_config"->'oauth2' IS NOT NULL;--> statement-breakpoint
246−
247−ALTER TABLE "openapi_source_binding" DROP COLUMN "value";--> statement-breakpoint
248−ALTER TABLE "openapi_source" DROP COLUMN "query_params";--> statement-breakpoint
249−ALTER 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−
262−CREATE 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
274−CREATE INDEX "mcp_source_header_scope_id_idx" ON "mcp_source_header" USING btree ("scope_id");--> statement-breakpoint
275−CREATE INDEX "mcp_source_header_source_id_idx" ON "mcp_source_header" USING btree ("source_id");--> statement-breakpoint
276−CREATE INDEX "mcp_source_header_secret_id_idx" ON "mcp_source_header" USING btree ("secret_id");--> statement-breakpoint
277−
278−CREATE 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
290−CREATE INDEX "mcp_source_query_param_scope_id_idx" ON "mcp_source_query_param" USING btree ("scope_id");--> statement-breakpoint
291−CREATE INDEX "mcp_source_query_param_source_id_idx" ON "mcp_source_query_param" USING btree ("source_id");--> statement-breakpoint
292−CREATE INDEX "mcp_source_query_param_secret_id_idx" ON "mcp_source_query_param" USING btree ("secret_id");--> statement-breakpoint
293−
294−ALTER TABLE "mcp_source" ADD COLUMN "auth_kind" text DEFAULT 'none' NOT NULL;--> statement-breakpoint
295−ALTER TABLE "mcp_source" ADD COLUMN "auth_header_name" text;--> statement-breakpoint
296−ALTER TABLE "mcp_source" ADD COLUMN "auth_secret_id" text;--> statement-breakpoint
297−ALTER TABLE "mcp_source" ADD COLUMN "auth_secret_prefix" text;--> statement-breakpoint
298−ALTER TABLE "mcp_source" ADD COLUMN "auth_connection_id" text;--> statement-breakpoint
299−ALTER TABLE "mcp_source" ADD COLUMN "auth_client_id_secret_id" text;--> statement-breakpoint
300−ALTER TABLE "mcp_source" ADD COLUMN "auth_client_secret_secret_id" text;--> statement-breakpoint
301−CREATE INDEX "mcp_source_auth_secret_id_idx" ON "mcp_source" USING btree ("auth_secret_id");--> statement-breakpoint
302−CREATE INDEX "mcp_source_auth_connection_id_idx" ON "mcp_source" USING btree ("auth_connection_id");--> statement-breakpoint
303−CREATE INDEX "mcp_source_auth_client_id_secret_id_idx" ON "mcp_source" USING btree ("auth_client_id_secret_id");--> statement-breakpoint
304−CREATE 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.
310−UPDATE "mcp_source"
311−SET
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}'
319−WHERE "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−
331−INSERT INTO "mcp_source_header"
332− ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
333−SELECT
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
345−FROM "mcp_source" s, jsonb_each(s."config"->'headers') h
346−WHERE s."config"->'headers' IS NOT NULL
347−ON CONFLICT DO NOTHING;--> statement-breakpoint
348−
349−INSERT INTO "mcp_source_query_param"
350− ("scope_id", "id", "source_id", "name", "kind", "text_value", "secret_id", "secret_prefix")
351−SELECT
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
363−FROM "mcp_source" s, jsonb_each(s."config"->'queryParams') q
364−WHERE s."config"->'queryParams' IS NOT NULL
365−ON 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).
371−UPDATE "mcp_source"
372−SET "config" = "config" - 'headers' - 'queryParams'
373−WHERE "config" IS NOT NULL;--> statement-breakpoint
374−
375−UPDATE "mcp_source"
376−SET "config" = "config" - 'auth'
377−WHERE "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
4−CREATE 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
20−ALTER TABLE "graphql_source" ALTER COLUMN "auth_kind" SET DEFAULT 'none';--> statement-breakpoint
21−ALTER TABLE "openapi_source_binding" ALTER COLUMN "kind" DROP DEFAULT;--> statement-breakpoint
22−CREATE INDEX "credential_binding_scope_id_idx" ON "credential_binding" USING btree ("scope_id");--> statement-breakpoint
23−CREATE INDEX "credential_binding_plugin_id_idx" ON "credential_binding" USING btree ("plugin_id");--> statement-breakpoint
24−CREATE INDEX "credential_binding_source_id_idx" ON "credential_binding" USING btree ("source_id");--> statement-breakpoint
25−CREATE INDEX "credential_binding_source_scope_id_idx" ON "credential_binding" USING btree ("source_scope_id");--> statement-breakpoint
26−CREATE INDEX "credential_binding_slot_key_idx" ON "credential_binding" USING btree ("slot_key");--> statement-breakpoint
27−CREATE INDEX "credential_binding_kind_idx" ON "credential_binding" USING btree ("kind");--> statement-breakpoint
28−CREATE INDEX "credential_binding_secret_id_idx" ON "credential_binding" USING btree ("secret_id");--> statement-breakpoint
29−CREATE INDEX "credential_binding_connection_id_idx" ON "credential_binding" USING btree ("connection_id");--> statement-breakpoint
30−
31−CREATE FUNCTION pg_temp.executor_credential_binding_id(plugin_id text, source_scope_id text, source_id text, slot_key text)
32−RETURNS text
33−LANGUAGE sql
34−IMMUTABLE
35−AS $$
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
40−INSERT 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−)
54−SELECT
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"
67−FROM "openapi_source_binding"
68−ON 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
78−DROP 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−
85−CREATE 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−
92−INSERT INTO "__openapi_header_slot_preflight" ("scope_id", "source_id", "slot_key")
93−SELECT
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"
97−FROM "openapi_source" s, jsonb_each(s."headers") h
98−WHERE 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−
103−DROP TABLE "__openapi_header_slot_preflight";--> statement-breakpoint
104−
105−WITH 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−)
118−INSERT 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−)
122−SELECT
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()
135−FROM header_rows r
136−WHERE 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−)
144−ON CONFLICT DO NOTHING;--> statement-breakpoint
145−
146−UPDATE "openapi_source" s
147−SET "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−)
164−WHERE s."headers" IS NOT NULL;--> statement-breakpoint
165−
166−WITH 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−)
177−INSERT 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−)
181−SELECT
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()
194−FROM oauth_rows r
195−WHERE 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−)
203−ON CONFLICT DO NOTHING;--> statement-breakpoint
204−
205−WITH 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−)
216−INSERT 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−)
220−SELECT
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()
233−FROM oauth_rows r
234−WHERE 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−)
242−ON CONFLICT DO NOTHING;--> statement-breakpoint
243−
244−WITH 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−)
254−INSERT 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−)
258−SELECT
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()
271−FROM oauth_rows r
272−WHERE 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−)
280−ON CONFLICT DO NOTHING;--> statement-breakpoint
281−
282−UPDATE "openapi_source" s
283−SET "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−)
299−WHERE s."oauth2" IS NOT NULL
300− AND s."oauth2"->>'connectionId' IS NOT NULL;--> statement-breakpoint
301−
302−CREATE 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−
309−INSERT INTO "__openapi_query_param_slot_preflight" ("scope_id", "source_id", "slot_key")
310−SELECT
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"
314−FROM "openapi_source_query_param" r
315−WHERE r."kind" = 'secret' AND r."secret_id" IS NOT NULL;--> statement-breakpoint
316−
317−DROP TABLE "__openapi_query_param_slot_preflight";--> statement-breakpoint
318−
319−WITH 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−)
328−INSERT 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−)
332−SELECT
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()
345−FROM rows r
346−WHERE 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−)
354−ON CONFLICT DO NOTHING;--> statement-breakpoint
355−
356−ALTER TABLE "openapi_source_query_param" ADD COLUMN "slot_key" text;--> statement-breakpoint
357−ALTER TABLE "openapi_source_query_param" ADD COLUMN "prefix" text;--> statement-breakpoint
358−UPDATE "openapi_source_query_param"
359−SET
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'
363−WHERE "kind" = 'secret';--> statement-breakpoint
364−DROP INDEX IF EXISTS "openapi_source_query_param_secret_id_idx";--> statement-breakpoint
365−ALTER TABLE "openapi_source_query_param" DROP COLUMN "secret_id";--> statement-breakpoint
366−ALTER TABLE "openapi_source_query_param" DROP COLUMN "secret_prefix";--> statement-breakpoint
367−
368−CREATE 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−
375−INSERT INTO "__openapi_spec_fetch_header_slot_preflight" ("scope_id", "source_id", "slot_key")
376−SELECT
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"
380−FROM "openapi_source_spec_fetch_header" r
381−WHERE r."kind" = 'secret' AND r."secret_id" IS NOT NULL;--> statement-breakpoint
382−
383−DROP TABLE "__openapi_spec_fetch_header_slot_preflight";--> statement-breakpoint
384−
385−WITH 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−)
394−INSERT 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−)
398−SELECT
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()
411−FROM rows r
412−WHERE 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−)
420−ON CONFLICT DO NOTHING;--> statement-breakpoint
421−
422−ALTER TABLE "openapi_source_spec_fetch_header" ADD COLUMN "slot_key" text;--> statement-breakpoint
423−ALTER TABLE "openapi_source_spec_fetch_header" ADD COLUMN "prefix" text;--> statement-breakpoint
424−UPDATE "openapi_source_spec_fetch_header"
425−SET
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'
429−WHERE "kind" = 'secret';--> statement-breakpoint
430−DROP INDEX IF EXISTS "openapi_source_spec_fetch_header_secret_id_idx";--> statement-breakpoint
431−ALTER TABLE "openapi_source_spec_fetch_header" DROP COLUMN "secret_id";--> statement-breakpoint
432−ALTER TABLE "openapi_source_spec_fetch_header" DROP COLUMN "secret_prefix";--> statement-breakpoint
433−
434−CREATE 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−
441−INSERT INTO "__openapi_spec_fetch_query_param_slot_preflight" ("scope_id", "source_id", "slot_key")
442−SELECT
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"
446−FROM "openapi_source_spec_fetch_query_param" r
447−WHERE r."kind" = 'secret' AND r."secret_id" IS NOT NULL;--> statement-breakpoint
448−
449−DROP TABLE "__openapi_spec_fetch_query_param_slot_preflight";--> statement-breakpoint
450−
451−WITH 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−)
460−INSERT 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−)
464−SELECT
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()
477−FROM rows r
478−WHERE 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−)
486−ON CONFLICT DO NOTHING;--> statement-breakpoint
487−
488−ALTER TABLE "openapi_source_spec_fetch_query_param" ADD COLUMN "slot_key" text;--> statement-breakpoint
489−ALTER TABLE "openapi_source_spec_fetch_query_param" ADD COLUMN "prefix" text;--> statement-breakpoint
490−UPDATE "openapi_source_spec_fetch_query_param"
491−SET
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'
495−WHERE "kind" = 'secret';--> statement-breakpoint
496−DROP INDEX IF EXISTS "openapi_source_spec_fetch_query_param_secret_id_idx";--> statement-breakpoint
497−ALTER TABLE "openapi_source_spec_fetch_query_param" DROP COLUMN "secret_id";--> statement-breakpoint
498−ALTER 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−
505−DROP INDEX "graphql_source_auth_connection_id_idx";--> statement-breakpoint
506−DROP INDEX "graphql_source_header_secret_id_idx";--> statement-breakpoint
507−DROP INDEX "graphql_source_query_param_secret_id_idx";--> statement-breakpoint
508−
509−ALTER TABLE "graphql_source" ADD COLUMN "auth_connection_slot" text;--> statement-breakpoint
510−
511−UPDATE "graphql_source"
512−SET "auth_connection_slot" = 'auth:oauth2:connection'
513−WHERE "auth_kind" = 'oauth2'
514− AND "auth_connection_id" IS NOT NULL;--> statement-breakpoint
515−
516−INSERT 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−)
520−SELECT
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()
533−FROM "graphql_source" s
534−WHERE s."auth_kind" = 'oauth2'
535− AND s."auth_connection_id" IS NOT NULL
536−ON CONFLICT DO NOTHING;--> statement-breakpoint
537−
538−ALTER TABLE "graphql_source" DROP COLUMN "auth_connection_id";--> statement-breakpoint
539−
540−ALTER TABLE "graphql_source_header" ADD COLUMN "slot_key" text;--> statement-breakpoint
541−ALTER TABLE "graphql_source_header" ADD COLUMN "prefix" text;--> statement-breakpoint
542−
543−CREATE 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−
550−INSERT INTO "__graphql_header_slot_preflight" ("scope_id", "source_id", "slot_key")
551−SELECT
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"
555−FROM "graphql_source_header" h
556−WHERE h."kind" = 'secret'
557− AND h."secret_id" IS NOT NULL;--> statement-breakpoint
558−
559−DROP TABLE "__graphql_header_slot_preflight";--> statement-breakpoint
560−
561−WITH 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−)
573−INSERT 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−)
577−SELECT
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()
590−FROM header_rows r
591−ON CONFLICT DO NOTHING;--> statement-breakpoint
592−
593−UPDATE "graphql_source_header"
594−SET
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
599−WHERE "kind" = 'secret'
600− AND "secret_id" IS NOT NULL;--> statement-breakpoint
601−
602−ALTER TABLE "graphql_source_header" DROP COLUMN "secret_id";--> statement-breakpoint
603−ALTER TABLE "graphql_source_header" DROP COLUMN "secret_prefix";--> statement-breakpoint
604−
605−ALTER TABLE "graphql_source_query_param" ADD COLUMN "slot_key" text;--> statement-breakpoint
606−ALTER TABLE "graphql_source_query_param" ADD COLUMN "prefix" text;--> statement-breakpoint
607−
608−CREATE 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−
615−INSERT INTO "__graphql_query_param_slot_preflight" ("scope_id", "source_id", "slot_key")
616−SELECT
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"
620−FROM "graphql_source_query_param" q
621−WHERE q."kind" = 'secret'
622− AND q."secret_id" IS NOT NULL;--> statement-breakpoint
623−
624−DROP TABLE "__graphql_query_param_slot_preflight";--> statement-breakpoint
625−
626−WITH 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−)
638−INSERT 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−)
642−SELECT
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()
655−FROM query_param_rows r
656−ON CONFLICT DO NOTHING;--> statement-breakpoint
657−
658−UPDATE "graphql_source_query_param"
659−SET
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
664−WHERE "kind" = 'secret'
665− AND "secret_id" IS NOT NULL;--> statement-breakpoint
666−
667−ALTER TABLE "graphql_source_query_param" DROP COLUMN "secret_id";--> statement-breakpoint
668−ALTER 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−
675−DROP INDEX "mcp_source_auth_secret_id_idx";--> statement-breakpoint
676−DROP INDEX "mcp_source_auth_connection_id_idx";--> statement-breakpoint
677−DROP INDEX "mcp_source_auth_client_id_secret_id_idx";--> statement-breakpoint
678−DROP INDEX "mcp_source_auth_client_secret_secret_id_idx";--> statement-breakpoint
679−DROP INDEX "mcp_source_header_secret_id_idx";--> statement-breakpoint
680−DROP INDEX "mcp_source_query_param_secret_id_idx";--> statement-breakpoint
681−
682−ALTER TABLE "mcp_source" ADD COLUMN "auth_header_slot" text;--> statement-breakpoint
683−ALTER TABLE "mcp_source" ADD COLUMN "auth_header_prefix" text;--> statement-breakpoint
684−ALTER TABLE "mcp_source" ADD COLUMN "auth_connection_slot" text;--> statement-breakpoint
685−ALTER TABLE "mcp_source" ADD COLUMN "auth_client_id_slot" text;--> statement-breakpoint
686−ALTER TABLE "mcp_source" ADD COLUMN "auth_client_secret_slot" text;--> statement-breakpoint
687−
688−UPDATE "mcp_source"
689−SET
690− "auth_header_slot" = 'auth:header',
691− "auth_header_prefix" = "auth_secret_prefix"
692−WHERE "auth_kind" = 'header'
693− AND "auth_secret_id" IS NOT NULL;--> statement-breakpoint
694−
695−INSERT 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−)
699−SELECT
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()
712−FROM "mcp_source" s
713−WHERE s."auth_kind" = 'header'
714− AND s."auth_secret_id" IS NOT NULL
715−ON CONFLICT DO NOTHING;--> statement-breakpoint
716−
717−UPDATE "mcp_source"
718−SET
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
728−WHERE "auth_kind" = 'oauth2'
729− AND "auth_connection_id" IS NOT NULL;--> statement-breakpoint
730−
731−INSERT 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−)
735−SELECT
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()
748−FROM "mcp_source" s
749−WHERE s."auth_kind" = 'oauth2'
750− AND s."auth_connection_id" IS NOT NULL
751−ON CONFLICT DO NOTHING;--> statement-breakpoint
752−
753−INSERT 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−)
757−SELECT
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()
770−FROM "mcp_source" s
771−WHERE s."auth_kind" = 'oauth2'
772− AND s."auth_client_id_secret_id" IS NOT NULL
773−ON CONFLICT DO NOTHING;--> statement-breakpoint
774−
775−INSERT 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−)
779−SELECT
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()
792−FROM "mcp_source" s
793−WHERE s."auth_kind" = 'oauth2'
794− AND s."auth_client_secret_secret_id" IS NOT NULL
795−ON CONFLICT DO NOTHING;--> statement-breakpoint
796−
797−ALTER TABLE "mcp_source" DROP COLUMN "auth_secret_id";--> statement-breakpoint
798−ALTER TABLE "mcp_source" DROP COLUMN "auth_secret_prefix";--> statement-breakpoint
799−ALTER TABLE "mcp_source" DROP COLUMN "auth_connection_id";--> statement-breakpoint
800−ALTER TABLE "mcp_source" DROP COLUMN "auth_client_id_secret_id";--> statement-breakpoint
801−ALTER TABLE "mcp_source" DROP COLUMN "auth_client_secret_secret_id";--> statement-breakpoint
802−
803−ALTER TABLE "mcp_source_header" ADD COLUMN "slot_key" text;--> statement-breakpoint
804−ALTER TABLE "mcp_source_header" ADD COLUMN "prefix" text;--> statement-breakpoint
805−
806−CREATE 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−
813−INSERT INTO "__mcp_header_slot_preflight" ("scope_id", "source_id", "slot_key")
814−SELECT
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"
818−FROM "mcp_source_header" h
819−WHERE h."kind" = 'secret'
820− AND h."secret_id" IS NOT NULL;--> statement-breakpoint
821−
822−DROP TABLE "__mcp_header_slot_preflight";--> statement-breakpoint
823−
824−WITH 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−)
836−INSERT 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−)
840−SELECT
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()
853−FROM header_rows r
854−ON CONFLICT DO NOTHING;--> statement-breakpoint
855−
856−UPDATE "mcp_source_header"
857−SET
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
862−WHERE "kind" = 'secret'
863− AND "secret_id" IS NOT NULL;--> statement-breakpoint
864−
865−ALTER TABLE "mcp_source_header" DROP COLUMN "secret_id";--> statement-breakpoint
866−ALTER TABLE "mcp_source_header" DROP COLUMN "secret_prefix";--> statement-breakpoint
867−
868−ALTER TABLE "mcp_source_query_param" ADD COLUMN "slot_key" text;--> statement-breakpoint
869−ALTER TABLE "mcp_source_query_param" ADD COLUMN "prefix" text;--> statement-breakpoint
870−
871−CREATE 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−
878−INSERT INTO "__mcp_query_param_slot_preflight" ("scope_id", "source_id", "slot_key")
879−SELECT
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"
883−FROM "mcp_source_query_param" q
884−WHERE q."kind" = 'secret'
885− AND q."secret_id" IS NOT NULL;--> statement-breakpoint
886−
887−DROP TABLE "__mcp_query_param_slot_preflight";--> statement-breakpoint
888−
889−WITH 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−)
901−INSERT 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−)
905−SELECT
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()
918−FROM query_param_rows r
919−ON CONFLICT DO NOTHING;--> statement-breakpoint
920−
921−UPDATE "mcp_source_query_param"
922−SET
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
927−WHERE "kind" = 'secret'
928− AND "secret_id" IS NOT NULL;--> statement-breakpoint
929−
930−ALTER TABLE "mcp_source_query_param" DROP COLUMN "secret_id";--> statement-breakpoint
931−ALTER 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−
938−UPDATE "connection"
939−SET
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()
958−WHERE "provider" = 'openapi:oauth2'
959− AND "provider_state"->>'flow' IN ('authorizationCode', 'clientCredentials');--> statement-breakpoint
960−
961−UPDATE "connection"
962−SET
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()
989−WHERE "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−
996−CREATE 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
1007−CREATE INDEX "openapi_source_header_scope_id_idx" ON "openapi_source_header" USING btree ("scope_id");--> statement-breakpoint
1008−CREATE INDEX "openapi_source_header_source_id_idx" ON "openapi_source_header" USING btree ("source_id");--> statement-breakpoint
1009−
1010−CREATE 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−
1017−INSERT INTO "__openapi_header_row_slot_preflight" ("scope_id", "source_id", "slot_key")
1018−SELECT
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"
1022−FROM "openapi_source" s, jsonb_each(s."headers") h
1023−WHERE 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−
1028−DROP TABLE "__openapi_header_row_slot_preflight";--> statement-breakpoint
1029−
1030−WITH 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−)
1043−INSERT 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−)
1047−SELECT
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()
1060−FROM header_rows r
1061−WHERE 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−)
1069−ON CONFLICT DO NOTHING;--> statement-breakpoint
1070−
1071−INSERT INTO "openapi_source_header" (
1072− "id", "scope_id", "source_id", "name", "kind", "text_value", "slot_key", "prefix"
1073−)
1074−SELECT
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
1102−FROM "openapi_source" s, jsonb_each(s."headers") h
1103−WHERE 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−)
1114−ON CONFLICT DO NOTHING;--> statement-breakpoint
1115−
1116−ALTER 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−
10−INSERT 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−)
24−SELECT
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()
37−FROM "credential_binding" b
38−JOIN "connection" c
39− ON c."id" = b."connection_id"
40− AND c."scope_id" LIKE 'user-org:%:' || b."source_scope_id"
41−WHERE 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− )
50−ON 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−
61−DELETE FROM "credential_binding" b
62−WHERE 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−
10−INSERT 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−)
24−SELECT
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()
37−FROM "credential_binding" b
38−JOIN "connection" c
39− ON c."id" = b."connection_id"
40− AND c."scope_id" LIKE 'user-org:%:' || b."source_scope_id"
41−WHERE 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− )
49−ON 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−
60−DELETE FROM "credential_binding" b
61−WHERE 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−
11−INSERT 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−)
25−SELECT 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()
38−FROM "credential_binding" b
39−JOIN "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− )
45−WHERE 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− )
53−ORDER BY s."scope_id", b."id", b."updated_at" DESC
54−ON 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−
65−DELETE FROM "credential_binding" b
66−WHERE 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−
8−DELETE FROM "secret" s
9−WHERE 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−
17−DELETE FROM "oauth2_session" o
18−WHERE 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−
11−UPDATE "connection"
12−SET "provider" = 'oauth2',
13− "updated_at" = now()
14−WHERE "provider" = 'openapi:oauth2'
15− AND "provider_state" ? 'kind';--> statement-breakpoint
16−
17−WITH 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−)
41−UPDATE "credential_binding" b
42−SET "secret_id" = r."secret_id",
43− "text_value" = NULL,
44− "connection_id" = NULL,
45− "updated_at" = now()
46−FROM oauth_connections r
47−WHERE 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−
54−WITH 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−)
78−INSERT 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−)
92−SELECT
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()
105−FROM oauth_connections r
106−WHERE 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− )
116−ON 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−
127−WITH 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−)
154−UPDATE "credential_binding" b
155−SET "secret_id" = r."secret_id",
156− "text_value" = NULL,
157− "connection_id" = NULL,
158− "updated_at" = now()
159−FROM oauth_connections r
160−WHERE 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−
167−WITH 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−)
194−INSERT 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−)
208−SELECT
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()
221−FROM oauth_connections r
222−WHERE 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− )
232−ON 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 @@
1−ALTER TABLE "credential_binding" ADD COLUMN "secret_scope_id" text;--> statement-breakpoint
2−CREATE 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 @@
1−CREATE 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
6−INSERT INTO "private_executor_cloud_settings" ("id", "version")
7−VALUES ('default', '1.0.0')
8−ON CONFLICT ("id") DO UPDATE SET "version" = excluded."version";
9−--> statement-breakpoint
10−ALTER TABLE "credential_binding" ADD COLUMN IF NOT EXISTS "secret_scope_id" text;
11−--> statement-breakpoint
12−ALTER TABLE "blob" ADD COLUMN IF NOT EXISTS "row_id" varchar(255);
13−--> statement-breakpoint
14−ALTER TABLE "blob" ADD COLUMN IF NOT EXISTS "id" varchar(255);
15−--> statement-breakpoint
16−UPDATE "blob"
17−SET
18− "id" = COALESCE("id", '[' || to_json("namespace")::text || ',' || to_json("key")::text || ']'),
19− "row_id" = COALESCE("row_id", 'legacy_' || md5("namespace" || chr(31) || "key"))
20−WHERE "id" IS NULL OR "row_id" IS NULL;
21−--> statement-breakpoint
22−ALTER TABLE "blob" ALTER COLUMN "id" SET NOT NULL;
23−--> statement-breakpoint
24−ALTER TABLE "blob" ALTER COLUMN "row_id" SET NOT NULL;
25−--> statement-breakpoint
26−DO $$
27−BEGIN
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;
43−END $$;
44−--> statement-breakpoint
45−CREATE UNIQUE INDEX IF NOT EXISTS "blob_id_uidx" ON "blob" USING btree ("id");
46−--> statement-breakpoint
47−DO $$
48−DECLARE
49− table_name text;
50− legacy_pk_name text;
51− new_pk_name text;
52− new_unique_name text;
53−BEGIN
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;
114−END $$;
apps/cloud/drizzle/0017_plugin_storage_sources.sql+0−172
@@ -1,172 +0,0 @@
1−CREATE 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
13−CREATE UNIQUE INDEX IF NOT EXISTS "plugin_storage_scope_id_id_uidx" ON "plugin_storage" USING btree ("scope_id","id");
14−--> statement-breakpoint
15−INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
16−SELECT
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()
39−FROM "openapi_source" s
40−LEFT 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"
45−LEFT 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"
50−LEFT 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"
55−LEFT 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"
60−ON CONFLICT DO NOTHING;
61−--> statement-breakpoint
62−INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
63−SELECT '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()
64−FROM "openapi_operation" o
65−ON CONFLICT DO NOTHING;
66−--> statement-breakpoint
67−INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
68−SELECT
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()
86−FROM "graphql_source" s
87−LEFT 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"
92−LEFT 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"
97−ON CONFLICT DO NOTHING;
98−--> statement-breakpoint
99−INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
100−SELECT '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()
101−FROM "graphql_operation" o
102−ON CONFLICT DO NOTHING;
103−--> statement-breakpoint
104−INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
105−SELECT
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()
128−FROM "mcp_source" s
129−LEFT 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"
134−LEFT 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"
139−ON CONFLICT DO NOTHING;
140−--> statement-breakpoint
141−INSERT INTO "plugin_storage" ("row_id", "id", "scope_id", "plugin_id", "collection", "key", "data", "created_at", "updated_at")
142−SELECT '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()
143−FROM "mcp_binding" b
144−ON CONFLICT DO NOTHING;
145−--> statement-breakpoint
146−DROP TABLE IF EXISTS "openapi_source";
147−--> statement-breakpoint
148−DROP TABLE IF EXISTS "openapi_operation";
149−--> statement-breakpoint
150−DROP TABLE IF EXISTS "openapi_source_header";
151−--> statement-breakpoint
152−DROP TABLE IF EXISTS "openapi_source_query_param";
153−--> statement-breakpoint
154−DROP TABLE IF EXISTS "openapi_source_spec_fetch_header";
155−--> statement-breakpoint
156−DROP TABLE IF EXISTS "openapi_source_spec_fetch_query_param";
157−--> statement-breakpoint
158−DROP TABLE IF EXISTS "graphql_source";
159−--> statement-breakpoint
160−DROP TABLE IF EXISTS "graphql_source_header";
161−--> statement-breakpoint
162−DROP TABLE IF EXISTS "graphql_source_query_param";
163−--> statement-breakpoint
164−DROP TABLE IF EXISTS "graphql_operation";
165−--> statement-breakpoint
166−DROP TABLE IF EXISTS "mcp_source";
167−--> statement-breakpoint
168−DROP TABLE IF EXISTS "mcp_source_header";
169−--> statement-breakpoint
170−DROP TABLE IF EXISTS "mcp_source_query_param";
171−--> statement-breakpoint
172−DROP TABLE IF EXISTS "mcp_binding";
apps/cloud/drizzle/0018_repair_openapi_oauth_authorization_url.sql+0−9
@@ -1,9 +0,0 @@
1−UPDATE "plugin_storage"
2−SET
3− "data" = jsonb_set("data"::jsonb, '{config,oauth2,authorizationUrl}', 'null'::jsonb, true)::json,
4− "updated_at" = now()
5−WHERE
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 @@
1−INSERT 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−)
12−SELECT
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()
22−FROM "workos_vault_metadata" m
23−ON CONFLICT ("scope_id", "id") DO UPDATE SET
24− "data" = EXCLUDED."data",
25− "updated_at" = EXCLUDED."updated_at";
26−--> statement-breakpoint
27−
28−DROP TABLE IF EXISTS "workos_vault_metadata";
apps/cloud/drizzle/0020_add_connection_identity_override.sql+0−1
@@ -1 +0,0 @@
1−ALTER TABLE "connection" ADD COLUMN IF NOT EXISTS "identity_override" json;
apps/cloud/drizzle/meta/0000_snapshot.json+584−593
@@ -1,5 +1,5 @@
11 {
2− "id": "93e9f8ef-fe9a-4a8c-b326-329464d876ca",
2+ "id": "16a06c56-535a-4774-a9e7-c0807ba74688",
33 "prevId": "00000000-0000-0000-0000-000000000000",
44 "version": "7",
55 "dialect": "postgresql",
@@ -124,13 +124,13 @@ · 118 unmodified lines
124124 "columns": {
125125 "namespace": {
126126 "name": "namespace",
127− "type": "text",
127+ "type": "varchar(255)",
128128 "primaryKey": false,
129129 "notNull": true
130130 },
131131 "key": {
132132 "name": "key",
133− "type": "text",
133+ "type": "varchar(255)",
134134 "primaryKey": false,
135135 "notNull": true
136136 },
@@ -139,368 +139,236 @@ · 2 unmodified lines
139139 "type": "text",
140140 "primaryKey": false,
141141 "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
166142 },
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,
143+ "row_id": {
144+ "name": "row_id",
145+ "type": "varchar(255)",
146+ "primaryKey": true,
195147 "notNull": true
196148 },
197− "created_at": {
198− "name": "created_at",
199− "type": "timestamp",
149+ "id": {
150+ "name": "id",
151+ "type": "varchar(255)",
200152 "primaryKey": false,
201153 "notNull": true
202154 }
203155 },
204156 "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",
157+ "blob_id_uidx": {
158+ "name": "blob_id_uidx",
237159 "columns": [
238160 {
239− "expression": "plugin_id",
161+ "expression": "id",
240162 "isExpression": false,
241163 "asc": true,
242164 "nulls": "last"
243165 }
244166 ],
245− "isUnique": false,
167+ "isUnique": true,
246168 "concurrently": false,
247169 "method": "btree",
248170 "with": {}
249171 }
250172 },
251173 "foreignKeys": {},
252− "compositePrimaryKeys": {
253− "definition_scope_id_id_pk": {
254− "name": "definition_scope_id_id_pk",
255− "columns": ["scope_id", "id"]
256− }
257− },
174+ "compositePrimaryKeys": {},
258175 "uniqueConstraints": {},
259176 "policies": {},
260177 "checkConstraints": {},
261178 "isRLSEnabled": false
262179 },
263− "public.graphql_operation": {
264− "name": "graphql_operation",
180+ "public.connection": {
181+ "name": "connection",
265182 "schema": "",
266183 "columns": {
267− "id": {
268− "name": "id",
269− "type": "text",
184+ "integration": {
185+ "name": "integration",
186+ "type": "varchar(255)",
187+ "primaryKey": false,
188+ "notNull": true
189+ },
190+ "name": {
191+ "name": "name",
192+ "type": "varchar(255)",
270193 "primaryKey": false,
271194 "notNull": true
272195 },
273− "scope_id": {
274− "name": "scope_id",
196+ "template": {
197+ "name": "template",
275198 "type": "text",
276199 "primaryKey": false,
277200 "notNull": true
278201 },
279− "source_id": {
280− "name": "source_id",
202+ "provider": {
203+ "name": "provider",
281204 "type": "text",
282205 "primaryKey": false,
283206 "notNull": true
284207 },
285− "binding": {
286− "name": "binding",
287− "type": "jsonb",
208+ "item_ids": {
209+ "name": "item_ids",
210+ "type": "json",
288211 "primaryKey": false,
289212 "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": {}
307213 },
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",
214+ "identity_label": {
215+ "name": "identity_label",
342216 "type": "text",
343217 "primaryKey": false,
344− "notNull": true
218+ "notNull": false
345219 },
346− "scope_id": {
347− "name": "scope_id",
220+ "oauth_client": {
221+ "name": "oauth_client",
348222 "type": "text",
349223 "primaryKey": false,
350− "notNull": true
224+ "notNull": false
351225 },
352− "name": {
353− "name": "name",
226+ "oauth_client_owner": {
227+ "name": "oauth_client_owner",
354228 "type": "text",
355229 "primaryKey": false,
356− "notNull": true
230+ "notNull": false
357231 },
358− "endpoint": {
359− "name": "endpoint",
232+ "refresh_item_id": {
233+ "name": "refresh_item_id",
360234 "type": "text",
361235 "primaryKey": false,
362− "notNull": true
236+ "notNull": false
363237 },
364− "headers": {
365− "name": "headers",
366− "type": "jsonb",
238+ "expires_at": {
239+ "name": "expires_at",
240+ "type": "bigint",
367241 "primaryKey": false,
368242 "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",
243+ },
244+ "oauth_scope": {
245+ "name": "oauth_scope",
406246 "type": "text",
407247 "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,
408260 "notNull": true
409261 },
410− "scope_id": {
411− "name": "scope_id",
412− "type": "text",
262+ "updated_at": {
263+ "name": "updated_at",
264+ "type": "timestamp",
413265 "primaryKey": false,
414266 "notNull": true
415267 },
416− "source_id": {
417− "name": "source_id",
418− "type": "text",
268+ "row_id": {
269+ "name": "row_id",
270+ "type": "varchar(255)",
271+ "primaryKey": true,
272+ "notNull": true
273+ },
274+ "tenant": {
275+ "name": "tenant",
276+ "type": "varchar(255)",
419277 "primaryKey": false,
420278 "notNull": true
421279 },
422− "binding": {
423− "name": "binding",
424− "type": "jsonb",
280+ "owner": {
281+ "name": "owner",
282+ "type": "varchar(255)",
425283 "primaryKey": false,
426284 "notNull": true
427285 },
428− "created_at": {
429− "name": "created_at",
430− "type": "timestamp",
286+ "subject": {
287+ "name": "subject",
288+ "type": "varchar(255)",
431289 "primaryKey": false,
432290 "notNull": true
433291 }
434292 },
435293 "indexes": {
436− "mcp_binding_scope_id_idx": {
437− "name": "mcp_binding_scope_id_idx",
294+ "connection_uidx": {
295+ "name": "connection_uidx",
438296 "columns": [
439297 {
440− "expression": "scope_id",
298+ "expression": "tenant",
441299 "isExpression": false,
442300 "asc": true,
443301 "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": [
302+ },
303+ {
304+ "expression": "owner",
305+ "isExpression": false,
306+ "asc": true,
307+ "nulls": "last"
308+ },
309+ {
310+ "expression": "subject",
311+ "isExpression": false,
312+ "asc": true,
313+ "nulls": "last"
314+ },
315+ {
316+ "expression": "integration",
317+ "isExpression": false,
318+ "asc": true,
319+ "nulls": "last"
320+ },
454321 {
455− "expression": "source_id",
322+ "expression": "name",
456323 "isExpression": false,
457324 "asc": true,
458325 "nulls": "last"
459326 }
460327 ],
461− "isUnique": false,
328+ "isUnique": true,
462329 "concurrently": false,
463330 "method": "btree",
464331 "with": {}
465332 }
466333 },
467334 "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− },
335+ "compositePrimaryKeys": {},
474336 "uniqueConstraints": {},
475337 "policies": {},
476338 "checkConstraints": {},
477339 "isRLSEnabled": false
478340 },
479− "public.mcp_oauth_session": {
480− "name": "mcp_oauth_session",
341+ "public.definition": {
342+ "name": "definition",
481343 "schema": "",
482344 "columns": {
483− "id": {
484− "name": "id",
485− "type": "text",
345+ "integration": {
346+ "name": "integration",
347+ "type": "varchar(255)",
348+ "primaryKey": false,
349+ "notNull": true
350+ },
351+ "connection": {
352+ "name": "connection",
353+ "type": "varchar(255)",
486354 "primaryKey": false,
487355 "notNull": true
488356 },
489− "scope_id": {
490− "name": "scope_id",
357+ "plugin_id": {
358+ "name": "plugin_id",
491359 "type": "text",
492360 "primaryKey": false,
493361 "notNull": true
494362 },
495− "session": {
496− "name": "session",
497− "type": "jsonb",
363+ "name": {
364+ "name": "name",
365+ "type": "varchar(255)",
498366 "primaryKey": false,
499367 "notNull": true
500368 },
501− "expires_at": {
502− "name": "expires_at",
503− "type": "integer",
369+ "schema": {
370+ "name": "schema",
371+ "type": "json",
504372 "primaryKey": false,
505373 "notNull": true
506374 },
@@ -509,326 +377,320 @@ · 2 unmodified lines
509377 "type": "timestamp",
510378 "primaryKey": false,
511379 "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
552380 },
553− "scope_id": {
554− "name": "scope_id",
555− "type": "text",
556− "primaryKey": false,
381+ "row_id": {
382+ "name": "row_id",
383+ "type": "varchar(255)",
384+ "primaryKey": true,
557385 "notNull": true
558386 },
559− "name": {
560− "name": "name",
561− "type": "text",
387+ "tenant": {
388+ "name": "tenant",
389+ "type": "varchar(255)",
562390 "primaryKey": false,
563391 "notNull": true
564392 },
565− "config": {
566− "name": "config",
567− "type": "jsonb",
393+ "owner": {
394+ "name": "owner",
395+ "type": "varchar(255)",
568396 "primaryKey": false,
569397 "notNull": true
570398 },
571− "created_at": {
572− "name": "created_at",
573− "type": "timestamp",
399+ "subject": {
400+ "name": "subject",
401+ "type": "varchar(255)",
574402 "primaryKey": false,
575403 "notNull": true
576404 }
577405 },
578406 "indexes": {
579− "mcp_source_scope_id_idx": {
580− "name": "mcp_source_scope_id_idx",
407+ "definition_uidx": {
408+ "name": "definition_uidx",
581409 "columns": [
582410 {
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",
584442 "isExpression": false,
585443 "asc": true,
586444 "nulls": "last"
587445 }
588446 ],
589− "isUnique": false,
447+ "isUnique": true,
590448 "concurrently": false,
591449 "method": "btree",
592450 "with": {}
593451 }
594452 },
595453 "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− },
454+ "compositePrimaryKeys": {},
602455 "uniqueConstraints": {},
603456 "policies": {},
604457 "checkConstraints": {},
605458 "isRLSEnabled": false
606459 },
607− "public.openapi_oauth_session": {
608− "name": "openapi_oauth_session",
460+ "public.integration": {
461+ "name": "integration",
609462 "schema": "",
610463 "columns": {
611− "id": {
612− "name": "id",
613− "type": "text",
464+ "slug": {
465+ "name": "slug",
466+ "type": "varchar(255)",
614467 "primaryKey": false,
615468 "notNull": true
616469 },
617− "scope_id": {
618− "name": "scope_id",
470+ "plugin_id": {
471+ "name": "plugin_id",
619472 "type": "text",
620473 "primaryKey": false,
621474 "notNull": true
622475 },
623− "session": {
624− "name": "session",
625− "type": "jsonb",
476+ "description": {
477+ "name": "description",
478+ "type": "text",
626479 "primaryKey": false,
627480 "notNull": true
628481 },
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+ },
629502 "created_at": {
630503 "name": "created_at",
631504 "type": "timestamp",
632505 "primaryKey": false,
633506 "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
674507 },
675− "scope_id": {
676− "name": "scope_id",
677− "type": "text",
508+ "updated_at": {
509+ "name": "updated_at",
510+ "type": "timestamp",
678511 "primaryKey": false,
679512 "notNull": true
680513 },
681− "source_id": {
682− "name": "source_id",
683− "type": "text",
684− "primaryKey": false,
514+ "row_id": {
515+ "name": "row_id",
516+ "type": "varchar(255)",
517+ "primaryKey": true,
685518 "notNull": true
686519 },
687− "binding": {
688− "name": "binding",
689− "type": "jsonb",
520+ "tenant": {
521+ "name": "tenant",
522+ "type": "varchar(255)",
690523 "primaryKey": false,
691524 "notNull": true
692525 }
693526 },
694527 "indexes": {
695− "openapi_operation_scope_id_idx": {
696− "name": "openapi_operation_scope_id_idx",
528+ "integration_uidx": {
529+ "name": "integration_uidx",
697530 "columns": [
698531 {
699− "expression": "scope_id",
532+ "expression": "tenant",
700533 "isExpression": false,
701534 "asc": true,
702535 "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": [
536+ },
713537 {
714− "expression": "source_id",
538+ "expression": "slug",
715539 "isExpression": false,
716540 "asc": true,
717541 "nulls": "last"
718542 }
719543 ],
720− "isUnique": false,
544+ "isUnique": true,
721545 "concurrently": false,
722546 "method": "btree",
723547 "with": {}
724548 }
725549 },
726550 "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− },
551+ "compositePrimaryKeys": {},
733552 "uniqueConstraints": {},
734553 "policies": {},
735554 "checkConstraints": {},
736555 "isRLSEnabled": false
737556 },
738− "public.openapi_source": {
739− "name": "openapi_source",
557+ "public.oauth_client": {
558+ "name": "oauth_client",
740559 "schema": "",
741560 "columns": {
742− "id": {
743− "name": "id",
561+ "slug": {
562+ "name": "slug",
563+ "type": "varchar(255)",
564+ "primaryKey": false,
565+ "notNull": true
566+ },
567+ "authorization_url": {
568+ "name": "authorization_url",
744569 "type": "text",
745570 "primaryKey": false,
746571 "notNull": true
747572 },
748− "scope_id": {
749− "name": "scope_id",
573+ "token_url": {
574+ "name": "token_url",
750575 "type": "text",
751576 "primaryKey": false,
752577 "notNull": true
753578 },
754− "name": {
755− "name": "name",
579+ "grant": {
580+ "name": "grant",
756581 "type": "text",
757582 "primaryKey": false,
758583 "notNull": true
759584 },
760− "spec": {
761− "name": "spec",
585+ "client_id": {
586+ "name": "client_id",
762587 "type": "text",
763588 "primaryKey": false,
764589 "notNull": true
765590 },
766− "base_url": {
767− "name": "base_url",
591+ "client_secret_item_id": {
592+ "name": "client_secret_item_id",
768593 "type": "text",
769594 "primaryKey": false,
770595 "notNull": false
771596 },
772− "headers": {
773− "name": "headers",
774− "type": "jsonb",
597+ "resource": {
598+ "name": "resource",
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)",
775618 "primaryKey": false,
776− "notNull": false
619+ "notNull": true
777620 },
778− "oauth2": {
779− "name": "oauth2",
780− "type": "jsonb",
621+ "owner": {
622+ "name": "owner",
623+ "type": "varchar(255)",
781624 "primaryKey": false,
782− "notNull": false
625+ "notNull": true
783626 },
784− "invocation_config": {
785− "name": "invocation_config",
786− "type": "jsonb",
627+ "subject": {
628+ "name": "subject",
629+ "type": "varchar(255)",
787630 "primaryKey": false,
788631 "notNull": true
789632 }
790633 },
791634 "indexes": {
792− "openapi_source_scope_id_idx": {
793− "name": "openapi_source_scope_id_idx",
635+ "oauth_client_uidx": {
636+ "name": "oauth_client_uidx",
794637 "columns": [
795638 {
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",
797658 "isExpression": false,
798659 "asc": true,
799660 "nulls": "last"
800661 }
801662 ],
802− "isUnique": false,
663+ "isUnique": true,
803664 "concurrently": false,
804665 "method": "btree",
805666 "with": {}
806667 }
807668 },
808669 "foreignKeys": {},
809− "compositePrimaryKeys": {
810− "openapi_source_scope_id_id_pk": {
811− "name": "openapi_source_scope_id_id_pk",
812− "columns": ["scope_id", "id"]
813− }
814− },
670+ "compositePrimaryKeys": {},
815671 "uniqueConstraints": {},
816672 "policies": {},
817673 "checkConstraints": {},
818674 "isRLSEnabled": false
819675 },
820− "public.secret": {
821− "name": "secret",
676+ "public.oauth_session": {
677+ "name": "oauth_session",
822678 "schema": "",
823679 "columns": {
824− "id": {
825− "name": "id",
680+ "state": {
681+ "name": "state",
682+ "type": "varchar(255)",
683+ "primaryKey": false,
684+ "notNull": true
685+ },
686+ "client_slug": {
687+ "name": "client_slug",
826688 "type": "text",
827689 "primaryKey": false,
828690 "notNull": true
829691 },
830− "scope_id": {
831− "name": "scope_id",
692+ "integration": {
693+ "name": "integration",
832694 "type": "text",
833695 "primaryKey": false,
834696 "notNull": true
@@ -839,200 +701,261 @@ · 4 unmodified lines
839701 "primaryKey": false,
840702 "notNull": true
841703 },
842− "provider": {
843− "name": "provider",
704+ "template": {
705+ "name": "template",
706+ "type": "text",
707+ "primaryKey": false,
708+ "notNull": true
709+ },
710+ "redirect_url": {
711+ "name": "redirect_url",
844712 "type": "text",
845713 "primaryKey": false,
846714 "notNull": true
847715 },
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+ },
848740 "created_at": {
849741 "name": "created_at",
850742 "type": "timestamp",
851743 "primaryKey": false,
852744 "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
853769 }
854770 },
855771 "indexes": {
856− "secret_scope_id_idx": {
857− "name": "secret_scope_id_idx",
772+ "oauth_session_uidx": {
773+ "name": "oauth_session_uidx",
858774 "columns": [
859775 {
860− "expression": "scope_id",
776+ "expression": "tenant",
861777 "isExpression": false,
862778 "asc": true,
863779 "nulls": "last"
864− }
865− ],
866− "isUnique": false,
867− "concurrently": false,
868− "method": "btree",
869− "with": {}
870− },
871− "secret_provider_idx": {
872− "name": "secret_provider_idx",
873− "columns": [
780+ },
874781 {
875− "expression": "provider",
782+ "expression": "state",
876783 "isExpression": false,
877784 "asc": true,
878785 "nulls": "last"
879786 }
880787 ],
881− "isUnique": false,
788+ "isUnique": true,
882789 "concurrently": false,
883790 "method": "btree",
884791 "with": {}
885792 }
886793 },
887794 "foreignKeys": {},
888− "compositePrimaryKeys": {
889− "secret_scope_id_id_pk": {
890− "name": "secret_scope_id_id_pk",
891− "columns": ["scope_id", "id"]
892− }
893− },
795+ "compositePrimaryKeys": {},
894796 "uniqueConstraints": {},
895797 "policies": {},
896798 "checkConstraints": {},
897799 "isRLSEnabled": false
898800 },
899− "public.source": {
900− "name": "source",
801+ "public.plugin_storage": {
802+ "name": "plugin_storage",
901803 "schema": "",
902804 "columns": {
903− "id": {
904− "name": "id",
905− "type": "text",
805+ "plugin_id": {
806+ "name": "plugin_id",
807+ "type": "varchar(255)",
906808 "primaryKey": false,
907809 "notNull": true
908810 },
909− "scope_id": {
910− "name": "scope_id",
911− "type": "text",
811+ "collection": {
812+ "name": "collection",
813+ "type": "varchar(255)",
912814 "primaryKey": false,
913815 "notNull": true
914816 },
915− "plugin_id": {
916− "name": "plugin_id",
917− "type": "text",
817+ "key": {
818+ "name": "key",
819+ "type": "varchar(255)",
918820 "primaryKey": false,
919821 "notNull": true
920822 },
921− "kind": {
922− "name": "kind",
923− "type": "text",
823+ "data": {
824+ "name": "data",
825+ "type": "json",
924826 "primaryKey": false,
925827 "notNull": true
926828 },
927− "name": {
928− "name": "name",
929− "type": "text",
829+ "created_at": {
830+ "name": "created_at",
831+ "type": "timestamp",
930832 "primaryKey": false,
931833 "notNull": true
932834 },
933− "url": {
934− "name": "url",
935− "type": "text",
936− "primaryKey": false,
937− "notNull": false
938− },
939− "can_remove": {
940− "name": "can_remove",
941− "type": "boolean",
835+ "updated_at": {
836+ "name": "updated_at",
837+ "type": "timestamp",
942838 "primaryKey": false,
943− "notNull": true,
944− "default": true
839+ "notNull": true
945840 },
946− "can_refresh": {
947− "name": "can_refresh",
948− "type": "boolean",
949− "primaryKey": false,
950− "notNull": true,
951− "default": false
841+ "row_id": {
842+ "name": "row_id",
843+ "type": "varchar(255)",
844+ "primaryKey": true,
845+ "notNull": true
952846 },
953− "can_edit": {
954− "name": "can_edit",
955− "type": "boolean",
847+ "tenant": {
848+ "name": "tenant",
849+ "type": "varchar(255)",
956850 "primaryKey": false,
957− "notNull": true,
958− "default": false
851+ "notNull": true
959852 },
960− "created_at": {
961− "name": "created_at",
962− "type": "timestamp",
853+ "owner": {
854+ "name": "owner",
855+ "type": "varchar(255)",
963856 "primaryKey": false,
964857 "notNull": true
965858 },
966− "updated_at": {
967− "name": "updated_at",
968− "type": "timestamp",
859+ "subject": {
860+ "name": "subject",
861+ "type": "varchar(255)",
969862 "primaryKey": false,
970863 "notNull": true
971864 }
972865 },
973866 "indexes": {
974− "source_scope_id_idx": {
975− "name": "source_scope_id_idx",
867+ "plugin_storage_uidx": {
868+ "name": "plugin_storage_uidx",
976869 "columns": [
977870 {
978− "expression": "scope_id",
871+ "expression": "tenant",
979872 "isExpression": false,
980873 "asc": true,
981874 "nulls": "last"
982− }
983− ],
984− "isUnique": false,
985− "concurrently": false,
986− "method": "btree",
987− "with": {}
988− },
989− "source_plugin_id_idx": {
990− "name": "source_plugin_id_idx",
991− "columns": [
875+ },
876+ {
877+ "expression": "owner",
878+ "isExpression": false,
879+ "asc": true,
880+ "nulls": "last"
881+ },
882+ {
883+ "expression": "subject",
884+ "isExpression": false,
885+ "asc": true,
886+ "nulls": "last"
887+ },
992888 {
993889 "expression": "plugin_id",
994890 "isExpression": false,
995891 "asc": true,
996892 "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"
997905 }
998906 ],
999− "isUnique": false,
907+ "isUnique": true,
1000908 "concurrently": false,
1001909 "method": "btree",
1002910 "with": {}
1003911 }
1004912 },
1005913 "foreignKeys": {},
1006− "compositePrimaryKeys": {
1007− "source_scope_id_id_pk": {
1008− "name": "source_scope_id_id_pk",
1009− "columns": ["scope_id", "id"]
1010− }
1011− },
914+ "compositePrimaryKeys": {},
1012915 "uniqueConstraints": {},
1013916 "policies": {},
1014917 "checkConstraints": {},
1015918 "isRLSEnabled": false
1016919 },
1017− "public.tool": {
1018− "name": "tool",
920+ "public.private_executor_cloud_settings": {
921+ "name": "private_executor_cloud_settings",
1019922 "schema": "",
1020923 "columns": {
1021924 "id": {
1022925 "name": "id",
1023− "type": "text",
1024− "primaryKey": false,
926+ "type": "varchar(255)",
927+ "primaryKey": true,
1025928 "notNull": true
1026929 },
1027− "scope_id": {
1028− "name": "scope_id",
1029− "type": "text",
930+ "version": {
931+ "name": "version",
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)",
1030953 "primaryKey": false,
1031954 "notNull": true
1032955 },
1033− "source_id": {
1034− "name": "source_id",
1035− "type": "text",
956+ "connection": {
957+ "name": "connection",
958+ "type": "varchar(255)",
1036959 "primaryKey": false,
1037960 "notNull": true
1038961 },
@@ -1044,7 +967,7 @@ · 5 unmodified lines
1044967 },
1045968 "name": {
1046969 "name": "name",
1047− "type": "text",
970+ "type": "varchar(255)",
1048971 "primaryKey": false,
1049972 "notNull": true
1050973 },
@@ -1056,13 +979,19 @@ · 5 unmodified lines
1056979 },
1057980 "input_schema": {
1058981 "name": "input_schema",
1059− "type": "jsonb",
982+ "type": "json",
1060983 "primaryKey": false,
1061984 "notNull": false
1062985 },
1063986 "output_schema": {
1064987 "name": "output_schema",
1065− "type": "jsonb",
988+ "type": "json",
989+ "primaryKey": false,
990+ "notNull": false
991+ },
992+ "annotations": {
993+ "name": "annotations",
994+ "type": "json",
1066995 "primaryKey": false,
1067996 "notNull": false
1068997 },
@@ -1077,126 +1006,188 @@ · 8 unmodified lines
10771006 "type": "timestamp",
10781007 "primaryKey": false,
10791008 "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
10801033 }
10811034 },
10821035 "indexes": {
1083− "tool_scope_id_idx": {
1084− "name": "tool_scope_id_idx",
1036+ "tool_uidx": {
1037+ "name": "tool_uidx",
10851038 "columns": [
10861039 {
1087− "expression": "scope_id",
1040+ "expression": "tenant",
10881041 "isExpression": false,
10891042 "asc": true,
10901043 "nulls": "last"
1091− }
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": [
1044+ },
11011045 {
1102− "expression": "source_id",
1046+ "expression": "owner",
11031047 "isExpression": false,
11041048 "asc": true,
11051049 "nulls": "last"
1106− }
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": [
1050+ },
11161051 {
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",
11181071 "isExpression": false,
11191072 "asc": true,
11201073 "nulls": "last"
11211074 }
11221075 ],
1123− "isUnique": false,
1076+ "isUnique": true,
11241077 "concurrently": false,
11251078 "method": "btree",
11261079 "with": {}
11271080 }
11281081 },
11291082 "foreignKeys": {},
1130− "compositePrimaryKeys": {
1131− "tool_scope_id_id_pk": {
1132− "name": "tool_scope_id_id_pk",
1133− "columns": ["scope_id", "id"]
1134− }
1135− },
1083+ "compositePrimaryKeys": {},
11361084 "uniqueConstraints": {},
11371085 "policies": {},
11381086 "checkConstraints": {},
11391087 "isRLSEnabled": false
11401088 },
1141− "public.workos_vault_metadata": {
1142− "name": "workos_vault_metadata",
1089+ "public.tool_policy": {
1090+ "name": "tool_policy",
11431091 "schema": "",
11441092 "columns": {
11451093 "id": {
11461094 "name": "id",
1147− "type": "text",
1095+ "type": "varchar(255)",
11481096 "primaryKey": false,
11491097 "notNull": true
11501098 },
1151− "scope_id": {
1152− "name": "scope_id",
1099+ "pattern": {
1100+ "name": "pattern",
11531101 "type": "text",
11541102 "primaryKey": false,
11551103 "notNull": true
11561104 },
1157− "name": {
1158− "name": "name",
1105+ "action": {
1106+ "name": "action",
11591107 "type": "text",
11601108 "primaryKey": false,
11611109 "notNull": true
11621110 },
1163− "purpose": {
1164− "name": "purpose",
1111+ "position": {
1112+ "name": "position",
11651113 "type": "text",
11661114 "primaryKey": false,
1167− "notNull": false
1115+ "notNull": true
11681116 },
11691117 "created_at": {
11701118 "name": "created_at",
11711119 "type": "timestamp",
11721120 "primaryKey": false,
11731121 "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
11741152 }
11751153 },
11761154 "indexes": {
1177− "workos_vault_metadata_scope_id_idx": {
1178− "name": "workos_vault_metadata_scope_id_idx",
1155+ "tool_policy_uidx": {
1156+ "name": "tool_policy_uidx",
11791157 "columns": [
11801158 {
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",
11821178 "isExpression": false,
11831179 "asc": true,
11841180 "nulls": "last"
11851181 }
11861182 ],
1187− "isUnique": false,
1183+ "isUnique": true,
11881184 "concurrently": false,
11891185 "method": "btree",
11901186 "with": {}
11911187 }
11921188 },
11931189 "foreignKeys": {},
1194− "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− },
1190+ "compositePrimaryKeys": {},
12001191 "uniqueConstraints": {},
12011192 "policies": {},
12021193 "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.