@relaycast/engine 12.2.1 → 12.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/dist/adapters/actor/credential-tag.d.ts +14 -0
  2. package/dist/adapters/actor/credential-tag.d.ts.map +1 -0
  3. package/dist/adapters/actor/credential-tag.js +30 -0
  4. package/dist/adapters/actor/credential-tag.js.map +1 -0
  5. package/dist/adapters/actor/database.d.ts +50 -0
  6. package/dist/adapters/actor/database.d.ts.map +1 -0
  7. package/dist/adapters/actor/database.js +86 -0
  8. package/dist/adapters/actor/database.js.map +1 -0
  9. package/dist/adapters/actor/ephemeral-outbox.d.ts +16 -0
  10. package/dist/adapters/actor/ephemeral-outbox.d.ts.map +1 -0
  11. package/dist/adapters/actor/ephemeral-outbox.js +53 -0
  12. package/dist/adapters/actor/ephemeral-outbox.js.map +1 -0
  13. package/dist/adapters/actor/event-queue.d.ts +23 -0
  14. package/dist/adapters/actor/event-queue.d.ts.map +1 -0
  15. package/dist/adapters/actor/event-queue.js +31 -0
  16. package/dist/adapters/actor/event-queue.js.map +1 -0
  17. package/dist/adapters/actor/files.d.ts +66 -0
  18. package/dist/adapters/actor/files.d.ts.map +1 -0
  19. package/dist/adapters/actor/files.js +83 -0
  20. package/dist/adapters/actor/files.js.map +1 -0
  21. package/dist/adapters/actor/http.d.ts +19 -0
  22. package/dist/adapters/actor/http.d.ts.map +1 -0
  23. package/dist/adapters/actor/http.js +2 -0
  24. package/dist/adapters/actor/http.js.map +1 -0
  25. package/dist/adapters/actor/index.d.ts +90 -0
  26. package/dist/adapters/actor/index.d.ts.map +1 -0
  27. package/dist/adapters/actor/index.js +299 -0
  28. package/dist/adapters/actor/index.js.map +1 -0
  29. package/dist/adapters/actor/kv.d.ts +21 -0
  30. package/dist/adapters/actor/kv.d.ts.map +1 -0
  31. package/dist/adapters/actor/kv.js +33 -0
  32. package/dist/adapters/actor/kv.js.map +1 -0
  33. package/dist/adapters/actor/migrations.d.ts +15 -0
  34. package/dist/adapters/actor/migrations.d.ts.map +1 -0
  35. package/dist/adapters/actor/migrations.generated.d.ts +5 -0
  36. package/dist/adapters/actor/migrations.generated.d.ts.map +1 -0
  37. package/dist/adapters/actor/migrations.generated.js +842 -0
  38. package/dist/adapters/actor/migrations.generated.js.map +1 -0
  39. package/dist/adapters/actor/migrations.js +32 -0
  40. package/dist/adapters/actor/migrations.js.map +1 -0
  41. package/dist/adapters/node/files.d.ts +2 -0
  42. package/dist/adapters/node/files.d.ts.map +1 -1
  43. package/dist/adapters/node/files.js +31 -3
  44. package/dist/adapters/node/files.js.map +1 -1
  45. package/dist/adapters/node/index.js +1 -1
  46. package/dist/adapters/node/index.js.map +1 -1
  47. package/dist/auth/credentialTags.d.ts +43 -0
  48. package/dist/auth/credentialTags.d.ts.map +1 -0
  49. package/dist/auth/credentialTags.js +106 -0
  50. package/dist/auth/credentialTags.js.map +1 -0
  51. package/dist/auth/credentials.d.ts +103 -0
  52. package/dist/auth/credentials.d.ts.map +1 -0
  53. package/dist/auth/credentials.js +147 -0
  54. package/dist/auth/credentials.js.map +1 -0
  55. package/dist/auth/index.d.ts +7 -4
  56. package/dist/auth/index.d.ts.map +1 -1
  57. package/dist/auth/index.js +115 -61
  58. package/dist/auth/index.js.map +1 -1
  59. package/dist/auth/tokenKind.d.ts +17 -26
  60. package/dist/auth/tokenKind.d.ts.map +1 -1
  61. package/dist/auth/tokenKind.js +17 -46
  62. package/dist/auth/tokenKind.js.map +1 -1
  63. package/dist/auth/workspaceExpiry.d.ts +2 -0
  64. package/dist/auth/workspaceExpiry.d.ts.map +1 -1
  65. package/dist/auth/workspaceExpiry.js +7 -0
  66. package/dist/auth/workspaceExpiry.js.map +1 -1
  67. package/dist/bin/secretEnv.d.ts +17 -0
  68. package/dist/bin/secretEnv.d.ts.map +1 -0
  69. package/dist/bin/secretEnv.js +33 -0
  70. package/dist/bin/secretEnv.js.map +1 -0
  71. package/dist/bin/serve.js +42 -4
  72. package/dist/bin/serve.js.map +1 -1
  73. package/dist/config/credentialEnv.d.ts +19 -0
  74. package/dist/config/credentialEnv.d.ts.map +1 -0
  75. package/dist/config/credentialEnv.js +53 -0
  76. package/dist/config/credentialEnv.js.map +1 -0
  77. package/dist/db/migrations/0079_credential_upgrades.sql +17 -0
  78. package/dist/db/schema.d.ts +164 -2
  79. package/dist/db/schema.d.ts.map +1 -1
  80. package/dist/db/schema.js +20 -0
  81. package/dist/db/schema.js.map +1 -1
  82. package/dist/engine/a2a.d.ts +1 -1
  83. package/dist/engine/a2a.d.ts.map +1 -1
  84. package/dist/engine/a2a.js +2 -2
  85. package/dist/engine/a2a.js.map +1 -1
  86. package/dist/engine/a2aEgress.d.ts +3 -2
  87. package/dist/engine/a2aEgress.d.ts.map +1 -1
  88. package/dist/engine/a2aEgress.js +5 -4
  89. package/dist/engine/a2aEgress.js.map +1 -1
  90. package/dist/engine/action.d.ts +12 -0
  91. package/dist/engine/action.d.ts.map +1 -1
  92. package/dist/engine/action.js +45 -1
  93. package/dist/engine/action.js.map +1 -1
  94. package/dist/engine/agent.d.ts +1 -0
  95. package/dist/engine/agent.d.ts.map +1 -1
  96. package/dist/engine/agent.js +51 -11
  97. package/dist/engine/agent.js.map +1 -1
  98. package/dist/engine/agentIdentity.d.ts.map +1 -1
  99. package/dist/engine/agentIdentity.js +2 -1
  100. package/dist/engine/agentIdentity.js.map +1 -1
  101. package/dist/engine/credentialUpgrade.d.ts +48 -0
  102. package/dist/engine/credentialUpgrade.d.ts.map +1 -0
  103. package/dist/engine/credentialUpgrade.js +176 -0
  104. package/dist/engine/credentialUpgrade.js.map +1 -0
  105. package/dist/engine/eventDispatch.d.ts.map +1 -1
  106. package/dist/engine/eventDispatch.js +3 -2
  107. package/dist/engine/eventDispatch.js.map +1 -1
  108. package/dist/engine/eventSubscription.d.ts +4 -4
  109. package/dist/engine/file.d.ts +8 -0
  110. package/dist/engine/file.d.ts.map +1 -1
  111. package/dist/engine/file.js +18 -5
  112. package/dist/engine/file.js.map +1 -1
  113. package/dist/engine/inboundWebhook.d.ts +2 -0
  114. package/dist/engine/inboundWebhook.d.ts.map +1 -1
  115. package/dist/engine/inboundWebhook.js +10 -4
  116. package/dist/engine/inboundWebhook.js.map +1 -1
  117. package/dist/engine/internalAdmin.d.ts +80 -0
  118. package/dist/engine/internalAdmin.d.ts.map +1 -0
  119. package/dist/engine/internalAdmin.js +329 -0
  120. package/dist/engine/internalAdmin.js.map +1 -0
  121. package/dist/engine/invocationCompletion.d.ts.map +1 -1
  122. package/dist/engine/invocationCompletion.js +23 -5
  123. package/dist/engine/invocationCompletion.js.map +1 -1
  124. package/dist/engine/node.d.ts +38 -1
  125. package/dist/engine/node.d.ts.map +1 -1
  126. package/dist/engine/node.js +166 -11
  127. package/dist/engine/node.js.map +1 -1
  128. package/dist/engine/nodeContext.d.ts +2 -1
  129. package/dist/engine/nodeContext.d.ts.map +1 -1
  130. package/dist/engine/nodeContext.js +1 -1
  131. package/dist/engine/nodeContext.js.map +1 -1
  132. package/dist/engine/nodeDeliver.d.ts +2 -1
  133. package/dist/engine/nodeDeliver.d.ts.map +1 -1
  134. package/dist/engine/nodeDeliver.js +1 -1
  135. package/dist/engine/nodeDeliver.js.map +1 -1
  136. package/dist/engine/nodeLiveness.d.ts +7 -0
  137. package/dist/engine/nodeLiveness.d.ts.map +1 -1
  138. package/dist/engine/nodeLiveness.js +21 -0
  139. package/dist/engine/nodeLiveness.js.map +1 -1
  140. package/dist/engine/observerToken.d.ts +4 -0
  141. package/dist/engine/observerToken.d.ts.map +1 -1
  142. package/dist/engine/observerToken.js +14 -5
  143. package/dist/engine/observerToken.js.map +1 -1
  144. package/dist/engine/taskInvocation.d.ts +1 -1
  145. package/dist/engine/tokenRotate.d.ts.map +1 -1
  146. package/dist/engine/tokenRotate.js +4 -3
  147. package/dist/engine/tokenRotate.js.map +1 -1
  148. package/dist/engine/workspace.d.ts +8 -2
  149. package/dist/engine/workspace.d.ts.map +1 -1
  150. package/dist/engine/workspace.js +70 -21
  151. package/dist/engine/workspace.js.map +1 -1
  152. package/dist/engine/wsAuth.d.ts.map +1 -1
  153. package/dist/engine/wsAuth.js +14 -3
  154. package/dist/engine/wsAuth.js.map +1 -1
  155. package/dist/engine.d.ts.map +1 -1
  156. package/dist/engine.js +31 -0
  157. package/dist/engine.js.map +1 -1
  158. package/dist/entrypoints/node.d.ts +3 -1
  159. package/dist/entrypoints/node.d.ts.map +1 -1
  160. package/dist/entrypoints/node.js +33 -1
  161. package/dist/entrypoints/node.js.map +1 -1
  162. package/dist/env.d.ts +2 -0
  163. package/dist/env.d.ts.map +1 -1
  164. package/dist/gateway.d.ts +11 -0
  165. package/dist/gateway.d.ts.map +1 -0
  166. package/dist/gateway.js +16 -0
  167. package/dist/gateway.js.map +1 -0
  168. package/dist/index.d.ts +2 -0
  169. package/dist/index.d.ts.map +1 -1
  170. package/dist/index.js +1 -0
  171. package/dist/index.js.map +1 -1
  172. package/dist/lib/credentialNotice.d.ts +32 -0
  173. package/dist/lib/credentialNotice.d.ts.map +1 -0
  174. package/dist/lib/credentialNotice.js +76 -0
  175. package/dist/lib/credentialNotice.js.map +1 -0
  176. package/dist/lib/fileTokens.d.ts +30 -0
  177. package/dist/lib/fileTokens.d.ts.map +1 -0
  178. package/dist/lib/fileTokens.js +76 -0
  179. package/dist/lib/fileTokens.js.map +1 -0
  180. package/dist/lib/httpError.d.ts +1 -1
  181. package/dist/lib/httpResponse.d.ts +6 -6
  182. package/dist/middleware/admission.d.ts +1 -1
  183. package/dist/middleware/auth.d.ts.map +1 -1
  184. package/dist/middleware/auth.js +22 -31
  185. package/dist/middleware/auth.js.map +1 -1
  186. package/dist/middleware/idempotency.d.ts +1 -1
  187. package/dist/middleware/logger.d.ts.map +1 -1
  188. package/dist/middleware/logger.js +4 -1
  189. package/dist/middleware/logger.js.map +1 -1
  190. package/dist/ports/database.d.ts.map +1 -1
  191. package/dist/ports/database.js +8 -2
  192. package/dist/ports/database.js.map +1 -1
  193. package/dist/ports/files.d.ts +7 -1
  194. package/dist/ports/files.d.ts.map +1 -1
  195. package/dist/ports/index.d.ts +64 -1
  196. package/dist/ports/index.d.ts.map +1 -1
  197. package/dist/ports/index.js +4 -0
  198. package/dist/ports/index.js.map +1 -1
  199. package/dist/ports/telemetry.d.ts +1 -0
  200. package/dist/ports/telemetry.d.ts.map +1 -1
  201. package/dist/ports/telemetry.js +1 -0
  202. package/dist/ports/telemetry.js.map +1 -1
  203. package/dist/routes/action.d.ts.map +1 -1
  204. package/dist/routes/action.js +2 -1
  205. package/dist/routes/action.js.map +1 -1
  206. package/dist/routes/agent.d.ts.map +1 -1
  207. package/dist/routes/agent.js +33 -2
  208. package/dist/routes/agent.js.map +1 -1
  209. package/dist/routes/credential.d.ts +4 -0
  210. package/dist/routes/credential.d.ts.map +1 -0
  211. package/dist/routes/credential.js +97 -0
  212. package/dist/routes/credential.js.map +1 -0
  213. package/dist/routes/file.js +10 -4
  214. package/dist/routes/file.js.map +1 -1
  215. package/dist/routes/inboundWebhook.d.ts.map +1 -1
  216. package/dist/routes/inboundWebhook.js +11 -2
  217. package/dist/routes/inboundWebhook.js.map +1 -1
  218. package/dist/routes/internal.d.ts +14 -0
  219. package/dist/routes/internal.d.ts.map +1 -0
  220. package/dist/routes/internal.js +157 -0
  221. package/dist/routes/internal.js.map +1 -0
  222. package/dist/routes/node.d.ts.map +1 -1
  223. package/dist/routes/node.js +44 -2
  224. package/dist/routes/node.js.map +1 -1
  225. package/dist/routes/observerToken.js +1 -1
  226. package/dist/routes/observerToken.js.map +1 -1
  227. package/dist/routes/reaction.d.ts.map +1 -1
  228. package/dist/routes/reaction.js +3 -2
  229. package/dist/routes/reaction.js.map +1 -1
  230. package/dist/routes/receipt.d.ts.map +1 -1
  231. package/dist/routes/receipt.js +2 -1
  232. package/dist/routes/receipt.js.map +1 -1
  233. package/dist/routes/workspace.d.ts.map +1 -1
  234. package/dist/routes/workspace.js +12 -1
  235. package/dist/routes/workspace.js.map +1 -1
  236. package/package.json +12 -3
@@ -1 +1 @@
1
- {"version":3,"file":"workspaceExpiry.js","sourceRoot":"","sources":["../../src/auth/workspaceExpiry.ts"],"names":[],"mappings":"AAGA,kFAAkF;AAClF,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAC1D,MAAM,CAAC,MAAM,yBAAyB,GAAG,uBAAuB,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAuC,EACvC,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACtC,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,yBAAyB;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAkB,EAClB,IAA2D;IAE3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,IAAI,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;QAAE,OAAO,0BAA0B,EAAE,CAAC;IAC9E,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"workspaceExpiry.js","sourceRoot":"","sources":["../../src/auth/workspaceExpiry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,kFAAkF;AAClF,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAC1D,MAAM,CAAC,MAAM,yBAAyB,GAAG,uBAAuB,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAuC,EACvC,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACtC,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,yBAAyB;KACnC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAkB,EAClB,IAA2D;IAE3D,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC3F,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,IAAI,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;QAAE,OAAO,0BAA0B,EAAE,CAAC;IAC9E,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /** A configuration the server refuses to run with (exit EX_USAGE). */
2
+ export declare class ConfigError extends Error {
3
+ }
4
+ /**
5
+ * `NAME`, or the contents of the file named by `NAME_FILE`; empty →
6
+ * undefined. A directly set (non-empty) variable wins over its `_FILE`
7
+ * variant, matching RelayAuth. An unreadable `_FILE` is a configuration error.
8
+ *
9
+ * By default both sources are whitespace-trimmed. With `exact` (secrets whose
10
+ * bytes feed a derivation, like the workspace bootstrap secret) a directly set
11
+ * value is used verbatim — exactly as before `_FILE` support — and a file
12
+ * loses only one trailing newline (`\n` or `\r\n`).
13
+ */
14
+ export declare function secretFromEnv(env: NodeJS.ProcessEnv, name: string, { exact }?: {
15
+ exact?: boolean;
16
+ }): string | undefined;
17
+ //# sourceMappingURL=secretEnv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretEnv.d.ts","sourceRoot":"","sources":["../../src/bin/secretEnv.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,qBAAa,WAAY,SAAQ,KAAK;CAAG;AAEzC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,EAAE,KAAa,EAAE,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,MAAM,GAAG,SAAS,CAgBpB"}
@@ -0,0 +1,33 @@
1
+ import { readFileSync } from 'node:fs';
2
+ /** A configuration the server refuses to run with (exit EX_USAGE). */
3
+ export class ConfigError extends Error {
4
+ }
5
+ /**
6
+ * `NAME`, or the contents of the file named by `NAME_FILE`; empty →
7
+ * undefined. A directly set (non-empty) variable wins over its `_FILE`
8
+ * variant, matching RelayAuth. An unreadable `_FILE` is a configuration error.
9
+ *
10
+ * By default both sources are whitespace-trimmed. With `exact` (secrets whose
11
+ * bytes feed a derivation, like the workspace bootstrap secret) a directly set
12
+ * value is used verbatim — exactly as before `_FILE` support — and a file
13
+ * loses only one trailing newline (`\n` or `\r\n`).
14
+ */
15
+ export function secretFromEnv(env, name, { exact = false } = {}) {
16
+ const rawDirect = env[name];
17
+ const direct = exact ? rawDirect : rawDirect?.trim();
18
+ if (direct)
19
+ return direct;
20
+ const file = env[`${name}_FILE`]?.trim();
21
+ if (!file)
22
+ return undefined;
23
+ let value;
24
+ try {
25
+ value = readFileSync(file, 'utf8');
26
+ }
27
+ catch (err) {
28
+ throw new ConfigError(`${name}_FILE points at an unreadable file (${err instanceof Error && 'code' in err ? String(err.code) : 'read error'})`);
29
+ }
30
+ const cleaned = exact ? value.replace(/\r?\n$/, '') : value.trim();
31
+ return cleaned ? cleaned : undefined;
32
+ }
33
+ //# sourceMappingURL=secretEnv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretEnv.js","sourceRoot":"","sources":["../../src/bin/secretEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,sEAAsE;AACtE,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAG;AAEzC;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAsB,EACtB,IAAY,EACZ,EAAE,KAAK,GAAG,KAAK,KAA0B,EAAE;IAE3C,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,WAAW,CACnB,GAAG,IAAI,uCAAuC,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CACzH,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACnE,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACvC,CAAC"}
package/dist/bin/serve.js CHANGED
@@ -1,6 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { startServer } from '../entrypoints/node.js';
3
+ import { credentialConfigFromEnv } from '../config/credentialEnv.js';
4
+ import { ConfigError, secretFromEnv } from './secretEnv.js';
3
5
  import { engineVersion } from './version.js';
6
+ import { MIN_INTERNAL_SECRET_LENGTH } from '../engine/internalAdmin.js';
4
7
  const HELP = `relaycast-engine — run a self-hosted Relaycast server (Node + SQLite)
5
8
 
6
9
  Usage:
@@ -14,6 +17,24 @@ Options:
14
17
  -v, --version Print the engine version
15
18
  -h, --help Show this help
16
19
 
20
+ Environment:
21
+ RELAYCAST_INTERNAL_SECRET(_FILE) Enable the /internal admin API for a trusted
22
+ control plane (Authorization: Bearer <secret>;
23
+ at least 32 characters)
24
+ RELAYCAST_WORKSPACE_BOOTSTRAP_SECRET(_FILE)
25
+ Stable secret for anonymous keyed workspace retries
26
+ RELAYCAST_PUBLIC_WORKSPACE_CREATE Set false to 404 the public POST /v1/workspaces
27
+ (workspaces then come from /internal/workspaces)
28
+ RELAYCAST_CREDENTIAL_KEYRING(_FILE)
29
+ {"current":"a","keys":{"a":"<secret>"}}: signs ar_ credential
30
+ tags, enabling POST /v1/credentials/upgrade
31
+ RELAYCAST_CREDENTIAL_FORMAT legacy (default) or ar (needs RELAYCAST_CREDENTIAL_KEYRING)
32
+ RELAYCAST_LEGACY_CREDENTIAL_GRACE_SECONDS
33
+ How long an upgraded legacy credential keeps working (default 30 days, at most 10 years)
34
+ RELAYCAST_LEGACY_CREDENTIAL_SUNSET
35
+ ISO-8601 date sent as Sunset on legacy-authenticated responses
36
+ A directly set variable wins over its _FILE variant.
37
+
17
38
  After start, create a workspace:
18
39
  curl -XPOST http://localhost:<port>/v1/workspaces -H 'content-type: application/json' -d '{"name":"my-team"}'
19
40
  `;
@@ -43,6 +64,8 @@ function parseArgs(argv, env) {
43
64
  }
44
65
  return out;
45
66
  }
67
+ /** Exit code for a configuration the server refuses to run with (EX_USAGE). */
68
+ const CONFIG_EXIT_CODE = 64;
46
69
  async function main() {
47
70
  const opts = parseArgs(process.argv.slice(2), process.env);
48
71
  if (opts.help) {
@@ -79,18 +102,33 @@ async function main() {
79
102
  const eventQueue = messageTtlDays !== undefined
80
103
  ? { retention: { defaults: { messageTtlDays: messageTtlDays > 0 ? messageTtlDays : null } } }
81
104
  : undefined;
105
+ const internalSecret = secretFromEnv(process.env, 'RELAYCAST_INTERNAL_SECRET');
106
+ if (internalSecret !== undefined && internalSecret.length < MIN_INTERNAL_SECRET_LENGTH) {
107
+ throw new ConfigError(`RELAYCAST_INTERNAL_SECRET must be at least ${MIN_INTERNAL_SECRET_LENGTH} characters`);
108
+ }
109
+ // Verbatim: the bootstrap secret's exact bytes derive keyed-create replay
110
+ // keys, so trimming would break retries of workspaces created before.
111
+ const workspaceBootstrapSecret = secretFromEnv(process.env, 'RELAYCAST_WORKSPACE_BOOTSTRAP_SECRET', {
112
+ exact: true,
113
+ });
114
+ const publicWorkspaceCreate = process.env.RELAYCAST_PUBLIC_WORKSPACE_CREATE?.trim();
115
+ if (publicWorkspaceCreate && publicWorkspaceCreate !== 'true' && publicWorkspaceCreate !== 'false') {
116
+ throw new ConfigError('RELAYCAST_PUBLIC_WORKSPACE_CREATE must be "true" or "false"');
117
+ }
118
+ const credentials = credentialConfigFromEnv(process.env);
82
119
  const running = startServer({
83
120
  dbPath: opts.db,
84
121
  port: opts.port,
85
122
  baseUrl,
86
123
  config: {
87
124
  environment: opts.environment,
88
- ...(process.env.RELAYCAST_WORKSPACE_BOOTSTRAP_SECRET
89
- ? { workspaceBootstrapSecret: process.env.RELAYCAST_WORKSPACE_BOOTSTRAP_SECRET }
90
- : {}),
125
+ ...credentials,
126
+ ...(workspaceBootstrapSecret ? { workspaceBootstrapSecret } : {}),
91
127
  ...(process.env.RELAYCAST_WORKSPACE_BOOTSTRAP_PROOF_REQUIRED === 'true'
92
128
  ? { workspaceBootstrapProofRequired: true }
93
129
  : {}),
130
+ ...(internalSecret ? { internalSecret } : {}),
131
+ ...(publicWorkspaceCreate === 'false' ? { publicWorkspaceCreate: false } : {}),
94
132
  ...(Object.keys(mailbox).length > 0 ? { mailbox } : {}),
95
133
  },
96
134
  ...(eventQueue ? { eventQueue } : {}),
@@ -108,6 +146,6 @@ async function main() {
108
146
  }
109
147
  main().catch((err) => {
110
148
  process.stderr.write(`relaycast-engine failed to start: ${err instanceof Error ? err.message : String(err)}\n`);
111
- process.exit(1);
149
+ process.exit(err instanceof ConfigError ? CONFIG_EXIT_CODE : 1);
112
150
  });
113
151
  //# sourceMappingURL=serve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/bin/serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/bin/serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { EngineConfig } from '../ports/index.js';
2
+ export type CredentialEnvConfig = Pick<EngineConfig, 'credentialFormat' | 'credentialTagger' | 'legacyCredentialGraceSeconds' | 'legacyCredentialSunset'>;
3
+ /**
4
+ * The credential settings of a self-hosted engine, from its environment. The
5
+ * `relaycast-engine` binary and the container entrypoint both read them here:
6
+ *
7
+ * - `RELAYCAST_CREDENTIAL_KEYRING(_FILE)`: `{"current":"a","keys":{"a":"<secret>"}}`,
8
+ * the keyring that signs `ar_` credential tags (enables
9
+ * `POST /v1/credentials/upgrade`);
10
+ * - `RELAYCAST_CREDENTIAL_FORMAT`: `legacy` (default) or `ar` (needs the keyring);
11
+ * - `RELAYCAST_LEGACY_CREDENTIAL_GRACE_SECONDS`: how long an upgraded legacy
12
+ * credential keeps working (default 30 days);
13
+ * - `RELAYCAST_LEGACY_CREDENTIAL_SUNSET`: an ISO-8601 date sent as `Sunset` on
14
+ * legacy-authenticated responses.
15
+ *
16
+ * Throws {@link ConfigError} for a value the engine would refuse.
17
+ */
18
+ export declare function credentialConfigFromEnv(env: NodeJS.ProcessEnv): CredentialEnvConfig;
19
+ //# sourceMappingURL=credentialEnv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialEnv.d.ts","sourceRoot":"","sources":["../../src/config/credentialEnv.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,YAAY,EACZ,kBAAkB,GAAG,kBAAkB,GAAG,8BAA8B,GAAG,wBAAwB,CACpG,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,mBAAmB,CAgCnF"}
@@ -0,0 +1,53 @@
1
+ import { ConfigError, secretFromEnv } from '../bin/secretEnv.js';
2
+ import { createCredentialTagSigner, parseCredentialKeyring } from '../auth/credentialTags.js';
3
+ import { MAX_LEGACY_CREDENTIAL_GRACE_SECONDS } from '../engine/credentialUpgrade.js';
4
+ /**
5
+ * The credential settings of a self-hosted engine, from its environment. The
6
+ * `relaycast-engine` binary and the container entrypoint both read them here:
7
+ *
8
+ * - `RELAYCAST_CREDENTIAL_KEYRING(_FILE)`: `{"current":"a","keys":{"a":"<secret>"}}`,
9
+ * the keyring that signs `ar_` credential tags (enables
10
+ * `POST /v1/credentials/upgrade`);
11
+ * - `RELAYCAST_CREDENTIAL_FORMAT`: `legacy` (default) or `ar` (needs the keyring);
12
+ * - `RELAYCAST_LEGACY_CREDENTIAL_GRACE_SECONDS`: how long an upgraded legacy
13
+ * credential keeps working (default 30 days);
14
+ * - `RELAYCAST_LEGACY_CREDENTIAL_SUNSET`: an ISO-8601 date sent as `Sunset` on
15
+ * legacy-authenticated responses.
16
+ *
17
+ * Throws {@link ConfigError} for a value the engine would refuse.
18
+ */
19
+ export function credentialConfigFromEnv(env) {
20
+ const keyring = secretFromEnv(env, 'RELAYCAST_CREDENTIAL_KEYRING');
21
+ const format = env.RELAYCAST_CREDENTIAL_FORMAT?.trim() || 'legacy';
22
+ if (format !== 'legacy' && format !== 'ar') {
23
+ throw new ConfigError('RELAYCAST_CREDENTIAL_FORMAT must be "legacy" or "ar"');
24
+ }
25
+ if (format === 'ar' && !keyring) {
26
+ throw new ConfigError('RELAYCAST_CREDENTIAL_FORMAT=ar needs RELAYCAST_CREDENTIAL_KEYRING');
27
+ }
28
+ let credentialTagger;
29
+ if (keyring) {
30
+ try {
31
+ credentialTagger = createCredentialTagSigner(parseCredentialKeyring(keyring));
32
+ }
33
+ catch (error) {
34
+ throw new ConfigError(`RELAYCAST_CREDENTIAL_KEYRING: ${error instanceof Error ? error.message : String(error)}`);
35
+ }
36
+ }
37
+ const grace = env.RELAYCAST_LEGACY_CREDENTIAL_GRACE_SECONDS?.trim();
38
+ if (grace && !(/^\d+$/.test(grace) && Number(grace) <= MAX_LEGACY_CREDENTIAL_GRACE_SECONDS)) {
39
+ throw new ConfigError(`RELAYCAST_LEGACY_CREDENTIAL_GRACE_SECONDS must be an integer from 0 to ${MAX_LEGACY_CREDENTIAL_GRACE_SECONDS}`);
40
+ }
41
+ const sunsetText = env.RELAYCAST_LEGACY_CREDENTIAL_SUNSET?.trim();
42
+ const sunset = sunsetText ? new Date(sunsetText) : undefined;
43
+ if (sunset && Number.isNaN(sunset.getTime())) {
44
+ throw new ConfigError('RELAYCAST_LEGACY_CREDENTIAL_SUNSET must be an ISO-8601 date');
45
+ }
46
+ return {
47
+ credentialFormat: format,
48
+ ...(credentialTagger ? { credentialTagger } : {}),
49
+ ...(grace ? { legacyCredentialGraceSeconds: Number(grace) } : {}),
50
+ ...(sunset ? { legacyCredentialSunset: sunset } : {}),
51
+ };
52
+ }
53
+ //# sourceMappingURL=credentialEnv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialEnv.js","sourceRoot":"","sources":["../../src/config/credentialEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAE9F,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AAOrF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAsB;IAC5D,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC;IACnE,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,WAAW,CAAC,sDAAsD,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,WAAW,CAAC,mEAAmE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,gBAAkD,CAAC;IACvD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,gBAAgB,GAAG,yBAAyB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,WAAW,CAAC,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,yCAAyC,EAAE,IAAI,EAAE,CAAC;IACpE,IAAI,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,mCAAmC,CAAC,EAAE,CAAC;QAC5F,MAAM,IAAI,WAAW,CAAC,0EAA0E,mCAAmC,EAAE,CAAC,CAAC;IACzI,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,kCAAkC,EAAE,IAAI,EAAE,CAAC;IAClE,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,WAAW,CAAC,6DAA6D,CAAC,CAAC;IACvF,CAAC;IACD,OAAO;QACL,gBAAgB,EAAE,MAAM;QACxB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,4BAA4B,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ -- Legacy credentials replaced through POST /v1/credentials/upgrade. The
2
+ -- principal's own hash column holds the ar_ credential; the legacy one keeps
3
+ -- working until expires_at, and only while the principal still holds the ar_
4
+ -- credential it was upgraded to. sealed_credential is that ar_ credential,
5
+ -- AES-GCM sealed under a key derived from the legacy credential, so a retry
6
+ -- with the legacy credential gets it back.
7
+ CREATE TABLE credential_upgrades (
8
+ legacy_hash TEXT PRIMARY KEY NOT NULL,
9
+ kind TEXT NOT NULL,
10
+ principal_id TEXT NOT NULL,
11
+ workspace_id TEXT NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
12
+ ar_hash TEXT NOT NULL,
13
+ sealed_credential TEXT NOT NULL,
14
+ created_at INTEGER NOT NULL DEFAULT (unixepoch()),
15
+ expires_at INTEGER NOT NULL
16
+ );
17
+ CREATE INDEX idx_credential_upgrades_workspace ON credential_upgrades(workspace_id);
@@ -489,6 +489,168 @@ export declare const workspaceCreateIdempotency: import("drizzle-orm/sqlite-core
489
489
  };
490
490
  dialect: "sqlite";
491
491
  }>;
492
+ /**
493
+ * Legacy credentials replaced through `POST /v1/credentials/upgrade`. The
494
+ * principal's hash column holds the `ar_` credential; the legacy one keeps
495
+ * authenticating until `expiresAt`, and only while the principal still holds
496
+ * `arHash`. `sealedCredential` lets a retry with the legacy credential get the
497
+ * same `ar_` credential back.
498
+ */
499
+ export declare const credentialUpgrades: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
500
+ name: "credential_upgrades";
501
+ schema: undefined;
502
+ columns: {
503
+ legacyHash: import("drizzle-orm/sqlite-core").SQLiteColumn<{
504
+ name: "legacy_hash";
505
+ tableName: "credential_upgrades";
506
+ dataType: "string";
507
+ columnType: "SQLiteText";
508
+ data: string;
509
+ driverParam: string;
510
+ notNull: true;
511
+ hasDefault: false;
512
+ isPrimaryKey: true;
513
+ isAutoincrement: false;
514
+ hasRuntimeDefault: false;
515
+ enumValues: [string, ...string[]];
516
+ baseColumn: never;
517
+ identity: undefined;
518
+ generated: undefined;
519
+ }, {}, {
520
+ length: number | undefined;
521
+ }>;
522
+ kind: import("drizzle-orm/sqlite-core").SQLiteColumn<{
523
+ name: "kind";
524
+ tableName: "credential_upgrades";
525
+ dataType: "string";
526
+ columnType: "SQLiteText";
527
+ data: string;
528
+ driverParam: string;
529
+ notNull: true;
530
+ hasDefault: false;
531
+ isPrimaryKey: false;
532
+ isAutoincrement: false;
533
+ hasRuntimeDefault: false;
534
+ enumValues: [string, ...string[]];
535
+ baseColumn: never;
536
+ identity: undefined;
537
+ generated: undefined;
538
+ }, {}, {
539
+ length: number | undefined;
540
+ }>;
541
+ principalId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
542
+ name: "principal_id";
543
+ tableName: "credential_upgrades";
544
+ dataType: "string";
545
+ columnType: "SQLiteText";
546
+ data: string;
547
+ driverParam: string;
548
+ notNull: true;
549
+ hasDefault: false;
550
+ isPrimaryKey: false;
551
+ isAutoincrement: false;
552
+ hasRuntimeDefault: false;
553
+ enumValues: [string, ...string[]];
554
+ baseColumn: never;
555
+ identity: undefined;
556
+ generated: undefined;
557
+ }, {}, {
558
+ length: number | undefined;
559
+ }>;
560
+ workspaceId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
561
+ name: "workspace_id";
562
+ tableName: "credential_upgrades";
563
+ dataType: "string";
564
+ columnType: "SQLiteText";
565
+ data: string;
566
+ driverParam: string;
567
+ notNull: true;
568
+ hasDefault: false;
569
+ isPrimaryKey: false;
570
+ isAutoincrement: false;
571
+ hasRuntimeDefault: false;
572
+ enumValues: [string, ...string[]];
573
+ baseColumn: never;
574
+ identity: undefined;
575
+ generated: undefined;
576
+ }, {}, {
577
+ length: number | undefined;
578
+ }>;
579
+ arHash: import("drizzle-orm/sqlite-core").SQLiteColumn<{
580
+ name: "ar_hash";
581
+ tableName: "credential_upgrades";
582
+ dataType: "string";
583
+ columnType: "SQLiteText";
584
+ data: string;
585
+ driverParam: string;
586
+ notNull: true;
587
+ hasDefault: false;
588
+ isPrimaryKey: false;
589
+ isAutoincrement: false;
590
+ hasRuntimeDefault: false;
591
+ enumValues: [string, ...string[]];
592
+ baseColumn: never;
593
+ identity: undefined;
594
+ generated: undefined;
595
+ }, {}, {
596
+ length: number | undefined;
597
+ }>;
598
+ sealedCredential: import("drizzle-orm/sqlite-core").SQLiteColumn<{
599
+ name: "sealed_credential";
600
+ tableName: "credential_upgrades";
601
+ dataType: "string";
602
+ columnType: "SQLiteText";
603
+ data: string;
604
+ driverParam: string;
605
+ notNull: true;
606
+ hasDefault: false;
607
+ isPrimaryKey: false;
608
+ isAutoincrement: false;
609
+ hasRuntimeDefault: false;
610
+ enumValues: [string, ...string[]];
611
+ baseColumn: never;
612
+ identity: undefined;
613
+ generated: undefined;
614
+ }, {}, {
615
+ length: number | undefined;
616
+ }>;
617
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
618
+ name: "created_at";
619
+ tableName: "credential_upgrades";
620
+ dataType: "date";
621
+ columnType: "SQLiteTimestamp";
622
+ data: Date;
623
+ driverParam: number;
624
+ notNull: true;
625
+ hasDefault: true;
626
+ isPrimaryKey: false;
627
+ isAutoincrement: false;
628
+ hasRuntimeDefault: false;
629
+ enumValues: undefined;
630
+ baseColumn: never;
631
+ identity: undefined;
632
+ generated: undefined;
633
+ }, {}, {}>;
634
+ expiresAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
635
+ name: "expires_at";
636
+ tableName: "credential_upgrades";
637
+ dataType: "date";
638
+ columnType: "SQLiteTimestamp";
639
+ data: Date;
640
+ driverParam: number;
641
+ notNull: true;
642
+ hasDefault: false;
643
+ isPrimaryKey: false;
644
+ isAutoincrement: false;
645
+ hasRuntimeDefault: false;
646
+ enumValues: undefined;
647
+ baseColumn: never;
648
+ identity: undefined;
649
+ generated: undefined;
650
+ }, {}, {}>;
651
+ };
652
+ dialect: "sqlite";
653
+ }>;
492
654
  export declare const agents: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
493
655
  name: "agents";
494
656
  schema: undefined;
@@ -6471,7 +6633,7 @@ export declare const eventSubscriptions: import("drizzle-orm/sqlite-core").SQLit
6471
6633
  tableName: "event_subscriptions";
6472
6634
  dataType: "string";
6473
6635
  columnType: "SQLiteText";
6474
- data: "standard-webhooks" | "legacy";
6636
+ data: "legacy" | "standard-webhooks";
6475
6637
  driverParam: string;
6476
6638
  notNull: true;
6477
6639
  hasDefault: true;
@@ -6484,7 +6646,7 @@ export declare const eventSubscriptions: import("drizzle-orm/sqlite-core").SQLit
6484
6646
  generated: undefined;
6485
6647
  }, {}, {
6486
6648
  length: number | undefined;
6487
- $type: "standard-webhooks" | "legacy";
6649
+ $type: "legacy" | "standard-webhooks";
6488
6650
  }>;
6489
6651
  isActive: import("drizzle-orm/sqlite-core").SQLiteColumn<{
6490
6652
  name: "is_active";
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
package/dist/db/schema.js CHANGED
@@ -52,6 +52,26 @@ export const workspaceCreateIdempotency = sqliteTable('workspace_create_idempote
52
52
  primaryKey({ columns: [table.ownerScopeHash, table.idempotencyKeyHash] }),
53
53
  uniqueIndex('workspace_create_idempotency_workspace_unique').on(table.workspaceId),
54
54
  ]);
55
+ /**
56
+ * Legacy credentials replaced through `POST /v1/credentials/upgrade`. The
57
+ * principal's hash column holds the `ar_` credential; the legacy one keeps
58
+ * authenticating until `expiresAt`, and only while the principal still holds
59
+ * `arHash`. `sealedCredential` lets a retry with the legacy credential get the
60
+ * same `ar_` credential back.
61
+ */
62
+ export const credentialUpgrades = sqliteTable('credential_upgrades', {
63
+ legacyHash: text('legacy_hash').primaryKey(),
64
+ kind: text('kind').notNull(),
65
+ principalId: text('principal_id').notNull(),
66
+ workspaceId: text('workspace_id')
67
+ .notNull()
68
+ .references(() => workspaces.id, { onDelete: 'cascade' }),
69
+ arHash: text('ar_hash').notNull(),
70
+ /** The `ar_` credential, AES-GCM sealed under a key derived from the legacy credential. */
71
+ sealedCredential: text('sealed_credential').notNull(),
72
+ createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(sql `(unixepoch())`),
73
+ expiresAt: integer('expires_at', { mode: 'timestamp' }).notNull(),
74
+ }, (table) => [index('idx_credential_upgrades_workspace').on(table.workspaceId)]);
55
75
  // ============================================
56
76
  // Agents
57
77
  // ============================================