@relaycast/engine 12.2.0 → 12.3.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 (239) 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/0078_dm_participant_read_cursor.sql +15 -0
  78. package/dist/db/migrations/0079_credential_upgrades.sql +17 -0
  79. package/dist/db/schema.d.ts +183 -2
  80. package/dist/db/schema.d.ts.map +1 -1
  81. package/dist/db/schema.js +23 -0
  82. package/dist/db/schema.js.map +1 -1
  83. package/dist/engine/a2a.d.ts +1 -1
  84. package/dist/engine/a2a.d.ts.map +1 -1
  85. package/dist/engine/a2a.js +2 -2
  86. package/dist/engine/a2a.js.map +1 -1
  87. package/dist/engine/a2aEgress.d.ts +3 -2
  88. package/dist/engine/a2aEgress.d.ts.map +1 -1
  89. package/dist/engine/a2aEgress.js +5 -4
  90. package/dist/engine/a2aEgress.js.map +1 -1
  91. package/dist/engine/action.d.ts +12 -0
  92. package/dist/engine/action.d.ts.map +1 -1
  93. package/dist/engine/action.js +45 -1
  94. package/dist/engine/action.js.map +1 -1
  95. package/dist/engine/agent.d.ts.map +1 -1
  96. package/dist/engine/agent.js +2 -1
  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/delivery.d.ts.map +1 -1
  106. package/dist/engine/delivery.js +70 -31
  107. package/dist/engine/delivery.js.map +1 -1
  108. package/dist/engine/eventDispatch.d.ts.map +1 -1
  109. package/dist/engine/eventDispatch.js +3 -2
  110. package/dist/engine/eventDispatch.js.map +1 -1
  111. package/dist/engine/eventSubscription.d.ts +4 -4
  112. package/dist/engine/file.d.ts +8 -0
  113. package/dist/engine/file.d.ts.map +1 -1
  114. package/dist/engine/file.js +18 -5
  115. package/dist/engine/file.js.map +1 -1
  116. package/dist/engine/inboundWebhook.d.ts +2 -0
  117. package/dist/engine/inboundWebhook.d.ts.map +1 -1
  118. package/dist/engine/inboundWebhook.js +10 -4
  119. package/dist/engine/inboundWebhook.js.map +1 -1
  120. package/dist/engine/inbox.d.ts.map +1 -1
  121. package/dist/engine/inbox.js +10 -5
  122. package/dist/engine/inbox.js.map +1 -1
  123. package/dist/engine/internalAdmin.d.ts +80 -0
  124. package/dist/engine/internalAdmin.d.ts.map +1 -0
  125. package/dist/engine/internalAdmin.js +329 -0
  126. package/dist/engine/internalAdmin.js.map +1 -0
  127. package/dist/engine/invocationCompletion.d.ts.map +1 -1
  128. package/dist/engine/invocationCompletion.js +23 -5
  129. package/dist/engine/invocationCompletion.js.map +1 -1
  130. package/dist/engine/node.d.ts +38 -1
  131. package/dist/engine/node.d.ts.map +1 -1
  132. package/dist/engine/node.js +166 -11
  133. package/dist/engine/node.js.map +1 -1
  134. package/dist/engine/nodeContext.d.ts +2 -1
  135. package/dist/engine/nodeContext.d.ts.map +1 -1
  136. package/dist/engine/nodeContext.js +1 -1
  137. package/dist/engine/nodeContext.js.map +1 -1
  138. package/dist/engine/nodeDeliver.d.ts +2 -1
  139. package/dist/engine/nodeDeliver.d.ts.map +1 -1
  140. package/dist/engine/nodeDeliver.js +1 -1
  141. package/dist/engine/nodeDeliver.js.map +1 -1
  142. package/dist/engine/observerToken.d.ts +4 -0
  143. package/dist/engine/observerToken.d.ts.map +1 -1
  144. package/dist/engine/observerToken.js +14 -5
  145. package/dist/engine/observerToken.js.map +1 -1
  146. package/dist/engine/receipt.d.ts +100 -0
  147. package/dist/engine/receipt.d.ts.map +1 -1
  148. package/dist/engine/receipt.js +12 -0
  149. package/dist/engine/receipt.js.map +1 -1
  150. package/dist/engine/taskInvocation.d.ts +1 -1
  151. package/dist/engine/tokenRotate.d.ts.map +1 -1
  152. package/dist/engine/tokenRotate.js +4 -3
  153. package/dist/engine/tokenRotate.js.map +1 -1
  154. package/dist/engine/workspace.d.ts +8 -2
  155. package/dist/engine/workspace.d.ts.map +1 -1
  156. package/dist/engine/workspace.js +70 -21
  157. package/dist/engine/workspace.js.map +1 -1
  158. package/dist/engine/wsAuth.d.ts.map +1 -1
  159. package/dist/engine/wsAuth.js +14 -3
  160. package/dist/engine/wsAuth.js.map +1 -1
  161. package/dist/engine.d.ts.map +1 -1
  162. package/dist/engine.js +31 -0
  163. package/dist/engine.js.map +1 -1
  164. package/dist/entrypoints/node.d.ts +3 -1
  165. package/dist/entrypoints/node.d.ts.map +1 -1
  166. package/dist/entrypoints/node.js +33 -1
  167. package/dist/entrypoints/node.js.map +1 -1
  168. package/dist/env.d.ts +2 -0
  169. package/dist/env.d.ts.map +1 -1
  170. package/dist/gateway.d.ts +11 -0
  171. package/dist/gateway.d.ts.map +1 -0
  172. package/dist/gateway.js +16 -0
  173. package/dist/gateway.js.map +1 -0
  174. package/dist/index.d.ts +2 -0
  175. package/dist/index.d.ts.map +1 -1
  176. package/dist/index.js +1 -0
  177. package/dist/index.js.map +1 -1
  178. package/dist/lib/credentialNotice.d.ts +32 -0
  179. package/dist/lib/credentialNotice.d.ts.map +1 -0
  180. package/dist/lib/credentialNotice.js +76 -0
  181. package/dist/lib/credentialNotice.js.map +1 -0
  182. package/dist/lib/fileTokens.d.ts +30 -0
  183. package/dist/lib/fileTokens.d.ts.map +1 -0
  184. package/dist/lib/fileTokens.js +76 -0
  185. package/dist/lib/fileTokens.js.map +1 -0
  186. package/dist/lib/httpError.d.ts +1 -1
  187. package/dist/lib/httpResponse.d.ts +6 -6
  188. package/dist/middleware/admission.d.ts +1 -1
  189. package/dist/middleware/auth.d.ts.map +1 -1
  190. package/dist/middleware/auth.js +22 -31
  191. package/dist/middleware/auth.js.map +1 -1
  192. package/dist/middleware/idempotency.d.ts +1 -1
  193. package/dist/middleware/logger.d.ts.map +1 -1
  194. package/dist/middleware/logger.js +4 -1
  195. package/dist/middleware/logger.js.map +1 -1
  196. package/dist/ports/database.d.ts.map +1 -1
  197. package/dist/ports/database.js +8 -2
  198. package/dist/ports/database.js.map +1 -1
  199. package/dist/ports/files.d.ts +7 -1
  200. package/dist/ports/files.d.ts.map +1 -1
  201. package/dist/ports/index.d.ts +64 -1
  202. package/dist/ports/index.d.ts.map +1 -1
  203. package/dist/ports/index.js +4 -0
  204. package/dist/ports/index.js.map +1 -1
  205. package/dist/ports/telemetry.d.ts +1 -0
  206. package/dist/ports/telemetry.d.ts.map +1 -1
  207. package/dist/ports/telemetry.js +1 -0
  208. package/dist/ports/telemetry.js.map +1 -1
  209. package/dist/routes/action.d.ts.map +1 -1
  210. package/dist/routes/action.js +2 -1
  211. package/dist/routes/action.js.map +1 -1
  212. package/dist/routes/credential.d.ts +4 -0
  213. package/dist/routes/credential.d.ts.map +1 -0
  214. package/dist/routes/credential.js +97 -0
  215. package/dist/routes/credential.js.map +1 -0
  216. package/dist/routes/file.js +10 -4
  217. package/dist/routes/file.js.map +1 -1
  218. package/dist/routes/inboundWebhook.d.ts.map +1 -1
  219. package/dist/routes/inboundWebhook.js +11 -2
  220. package/dist/routes/inboundWebhook.js.map +1 -1
  221. package/dist/routes/internal.d.ts +14 -0
  222. package/dist/routes/internal.d.ts.map +1 -0
  223. package/dist/routes/internal.js +157 -0
  224. package/dist/routes/internal.js.map +1 -0
  225. package/dist/routes/node.d.ts.map +1 -1
  226. package/dist/routes/node.js +44 -2
  227. package/dist/routes/node.js.map +1 -1
  228. package/dist/routes/observerToken.js +1 -1
  229. package/dist/routes/observerToken.js.map +1 -1
  230. package/dist/routes/reaction.d.ts.map +1 -1
  231. package/dist/routes/reaction.js +3 -2
  232. package/dist/routes/reaction.js.map +1 -1
  233. package/dist/routes/receipt.d.ts.map +1 -1
  234. package/dist/routes/receipt.js +2 -1
  235. package/dist/routes/receipt.js.map +1 -1
  236. package/dist/routes/workspace.d.ts.map +1 -1
  237. package/dist/routes/workspace.js +12 -1
  238. package/dist/routes/workspace.js.map +1 -1
  239. package/package.json +12 -3
@@ -2,7 +2,7 @@ import { prepareAuthorityFanout } from './deliveryWrites.js';
2
2
  import { eq, and } from 'drizzle-orm';
3
3
  import { webhooks, channels, messages, agents, workspaces } from '../db/schema.js';
4
4
  import { isWorkspaceExpired } from '../auth/workspaceExpiry.js';
5
- import { randomHex, sha256Hex } from '../lib/crypto.js';
5
+ import { sha256Hex } from '../lib/crypto.js';
6
6
  import { codedError } from '../lib/httpError.js';
7
7
  import { generateId } from './snowflake.js';
8
8
  import { inboundWebhookMessageMetadata, sanitizeUserMessageMetadata, WEBHOOK_AGENT_NAME } from './messageMetadata.js';
@@ -10,6 +10,8 @@ import { runAtomicWrites, databaseConstraintKind } from '../ports/database.js';
10
10
  import { buildChannelDeliveryWrite, fetchChannelDeliveryOutcomes } from './deliveryWrites.js';
11
11
  import { DEFAULT_MAILBOX_DEPTH_CAP, DEFAULT_MAILBOX_TTL_MS, DEFAULT_OFFLINE_FANOUT_EXCLUDE_MS } from './mailboxConfig.js';
12
12
  import { buildMessageSessionWrite, requireSessionRefFromMetadata } from './sessionMessages.js';
13
+ import { issueCredential } from '../auth/credentials.js';
14
+ import { upgradedLegacyCredential } from './credentialUpgrade.js';
13
15
  async function ensureWebhookAgent(db, workspaceId) {
14
16
  const [existing] = await db
15
17
  .select({ id: agents.id })
@@ -17,7 +19,7 @@ async function ensureWebhookAgent(db, workspaceId) {
17
19
  .where(and(eq(agents.workspaceId, workspaceId), eq(agents.name, WEBHOOK_AGENT_NAME)));
18
20
  if (existing)
19
21
  return existing.id;
20
- const token = `at_live_${randomHex(16)}`;
22
+ const token = await issueCredential(db, 'agent', workspaceId);
21
23
  const tokenHash = await sha256Hex(token);
22
24
  const agentId = generateId();
23
25
  await db
@@ -44,7 +46,7 @@ async function ensureWebhookAgent(db, workspaceId) {
44
46
  }
45
47
  export async function createWebhook(db, workspaceId, channelId, data, createdBy) {
46
48
  const id = `wh_${generateId()}`;
47
- const token = `wh_live_${randomHex(24)}`;
49
+ const token = await issueCredential(db, 'webhook', workspaceId);
48
50
  const tokenHash = await sha256Hex(token);
49
51
  const postingAgentId = createdBy ?? await ensureWebhookAgent(db, workspaceId);
50
52
  const [webhook] = await db
@@ -177,7 +179,9 @@ export async function triggerWebhook(db, webhookId, token, data, options = {}) {
177
179
  throw codedError('Webhook bearer token required', 'webhook_token_required', 401);
178
180
  }
179
181
  const tokenHash = await sha256Hex(token);
180
- if (tokenHash !== webhook.tokenHash) {
182
+ // An upgraded legacy token works during its grace (`POST /v1/credentials/upgrade`).
183
+ if (tokenHash !== webhook.tokenHash
184
+ && (await upgradedLegacyCredential(db, 'webhook', tokenHash))?.principalId !== webhook.id) {
181
185
  throw codedError('Invalid webhook bearer token', 'webhook_token_invalid', 401);
182
186
  }
183
187
  }
@@ -259,6 +263,8 @@ export async function triggerWebhook(db, webhookId, token, data, options = {}) {
259
263
  return {
260
264
  _deliveries: outcomes.deliveries,
261
265
  _delivery_rejections: outcomes.rejections,
266
+ /** Whether the bearer token authenticated the call (the webhook requires one). */
267
+ _token_verified: webhook.tokenHash !== null,
262
268
  message_id: message.id,
263
269
  agent_id: message.agentId,
264
270
  webhook_id: webhook.id,
@@ -1 +1 @@
1
- {"version":3,"file":"inboundWebhook.js","sourceRoot":"","sources":["../../src/engine/inboundWebhook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inboundWebhook.js","sourceRoot":"","sources":["../../src/engine/inboundWebhook.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/engine/inbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAa5C,KAAK,EAAE,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAWnC,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAkBlD,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAKvE;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,EAAE,EACN,KAAK,SAAiC,GACrC,OAAO,CAAC,MAAM,CAAC,CAEjB;AA0DD,wBAAsB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;sBAKrB,MAAM;sBAAgB,MAAM;;;YAkC1E,MAAM;sBACI,MAAM;oBACR,MAAM;cACZ,MAAM;oBACA,MAAM;;;;;;;;;;;;;oBA6LN,MAAM;sBACJ,MAAM;eACb,MAAM;oBACD,MAAM;oBACN,MAAM;;GA1OrB"}
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/engine/inbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAa5C,KAAK,EAAE,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAWnC,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAkBlD,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAKvE;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,EAAE,EACN,KAAK,SAAiC,GACrC,OAAO,CAAC,MAAM,CAAC,CAEjB;AAmED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;sBAKrB,MAAM;sBAAgB,MAAM;;;YAkC1E,MAAM;sBACI,MAAM;oBACR,MAAM;cACZ,MAAM;oBACA,MAAM;;;;;;;;;;;;;oBA0LN,MAAM;sBACJ,MAAM;eACb,MAAM;oBACD,MAAM;oBACN,MAAM;;GAvOrB"}
@@ -99,6 +99,14 @@ async function backfillMessageMentionFtsUnlabeled(db, limit) {
99
99
  });
100
100
  return copied;
101
101
  }
102
+ /**
103
+ * Unread predicate for a read cursor. Snowflake ids are unpadded decimal text:
104
+ * length, then text, is chronological; a bare text compare reverses order
105
+ * across a digit boundary. Both arguments are fixed column references.
106
+ */
107
+ function messageAfterCursor(id, cursor) {
108
+ return sql.raw(`(${cursor} IS NULL OR length(${id}) > length(${cursor}) OR (length(${id}) = length(${cursor}) AND ${id} > ${cursor}))`);
109
+ }
102
110
  export async function getInbox(db, workspaceId, agentId) {
103
111
  return withEngineOperation('inbox.get', workspaceId, () => getInboxUnlabeled(db, workspaceId, agentId));
104
112
  }
@@ -114,7 +122,7 @@ async function getInboxUnlabeled(db, workspaceId, agentId) {
114
122
  AND ch.is_archived = false
115
123
  AND m.thread_id IS NULL
116
124
  AND m.agent_id != ${agentId}
117
- AND (cm.last_read_id IS NULL OR m.id > cm.last_read_id)
125
+ AND ${messageAfterCursor('m.id', 'cm.last_read_id')}
118
126
  GROUP BY cm.channel_id, ch.name
119
127
  HAVING count(*) > 0
120
128
  `);
@@ -221,13 +229,10 @@ async function getInboxUnlabeled(db, workspaceId, agentId) {
221
229
  ON dp.conversation_id = dc.id
222
230
  AND dp.agent_id = ${agentId}
223
231
  AND dp.left_at IS NULL
224
- LEFT JOIN channel_members cm
225
- ON cm.channel_id = dc.channel_id
226
- AND cm.agent_id = ${agentId}
227
232
  JOIN messages m
228
233
  ON m.channel_id = dc.channel_id
229
234
  AND m.agent_id != ${agentId}
230
- AND (cm.last_read_id IS NULL OR m.id > cm.last_read_id)
235
+ AND ${messageAfterCursor('m.id', 'dp.last_read_id')}
231
236
  WHERE dc.workspace_id = ${workspaceId}
232
237
  GROUP BY dc.id, dc.channel_id
233
238
  HAVING count(m.id) > 0
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/engine/inbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/engine/inbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { getDb } from '../db/index.js';
2
+ type Db = ReturnType<typeof getDb>;
3
+ /**
4
+ * Capability advertisement for a control plane driving the internal admin API.
5
+ *
6
+ * The `workspace_key_push` block is the hosted gateway's contract verbatim, so
7
+ * a control plane's pre-rotation capability gate passes unchanged. On the
8
+ * self-host engine every key fence lives in the same SQLite row and there is
9
+ * no auth cache, so `revocation_markers` is satisfied by the previous-key slot
10
+ * itself: a superseded key stops authenticating the moment its slot expires,
11
+ * with no KV marker to arm or repair.
12
+ *
13
+ * `workspace_admin` is a self-host extension (absent on the hosted gateway):
14
+ * `create` advertises POST /internal/workspaces and `server_minted_key` that
15
+ * POST /internal/workspaces/:id/api-key may omit `api_key` to have the engine
16
+ * mint the replacement.
17
+ */
18
+ export declare const INTERNAL_CAPABILITIES: {
19
+ readonly workspace_key_push: {
20
+ readonly generation_cas: true;
21
+ readonly generation_required_once_fenced: true;
22
+ readonly grace_ms: true;
23
+ readonly max_grace_ms: 3600000;
24
+ readonly revocation_markers: true;
25
+ readonly previous_key_slot: true;
26
+ };
27
+ readonly workspace_admin: {
28
+ readonly create: true;
29
+ readonly delete: true;
30
+ readonly server_minted_key: true;
31
+ };
32
+ };
33
+ export interface InternalWorkspaceDeletionFence {
34
+ commit(): void;
35
+ release(): void;
36
+ }
37
+ export declare function beginInternalWorkspaceDeletion(db: Db, workspaceId: string): InternalWorkspaceDeletionFence;
38
+ /** Minimum length of `config.internalSecret` (e.g. `openssl rand -hex 32` is 64). */
39
+ export declare const MIN_INTERNAL_SECRET_LENGTH = 32;
40
+ /**
41
+ * Throw when a configured internal secret is too short to be a credential.
42
+ * Unset/empty is fine (the admin API stays disabled).
43
+ */
44
+ export declare function assertInternalSecretStrength(secret: string | undefined): void;
45
+ export interface PushWorkspaceKeyInput {
46
+ /** Caller-minted `rk_live_` key. Omitted → the engine mints one (self-host extension). */
47
+ apiKey?: string;
48
+ keyGeneration?: number;
49
+ graceMs?: number;
50
+ }
51
+ export interface PushWorkspaceKeyResult {
52
+ created: boolean;
53
+ workspaceId: string;
54
+ apiKeyGeneration: number;
55
+ /** Present only when the engine minted the key; returned exactly once. */
56
+ mintedApiKey?: string;
57
+ }
58
+ /**
59
+ * Register or rotate a workspace's API key on behalf of a trusted control
60
+ * plane — the self-host port of the hosted gateway's
61
+ * `POST /internal/workspaces/:id/api-key`.
62
+ *
63
+ * Semantics (identical to hosted where they overlap):
64
+ * - UPSERT: a missing workspace is created with `id = name = :id` (plus its
65
+ * `#general` channel) when the caller supplies the key. A server-minted
66
+ * rotation of a missing workspace is 404 instead — create it explicitly.
67
+ * - Re-pushing the live key is idempotent at any generation; a higher
68
+ * generation bumps the stored fence.
69
+ * - A hash-changing push carrying `key_generation` commits only through a CAS
70
+ * on (current hash, generation < N); a stale or out-of-order write is 409
71
+ * `stale_key_generation`. The superseded key keeps authenticating for
72
+ * `grace_ms` (default 0: dead immediately).
73
+ * - Once fenced (generation > 0), generationless hash changes are 409
74
+ * `key_generation_required`.
75
+ * - Server-minted rotation (no `api_key`) always fences: it uses
76
+ * `key_generation` when given, otherwise stored generation + 1.
77
+ */
78
+ export declare function pushWorkspaceKey(db: Db, workspaceId: string, input: PushWorkspaceKeyInput): Promise<PushWorkspaceKeyResult>;
79
+ export {};
80
+ //# sourceMappingURL=internalAdmin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internalAdmin.d.ts","sourceRoot":"","sources":["../../src/engine/internalAdmin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAS5C,KAAK,EAAE,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEnC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;CAcxB,CAAC;AAuBX,MAAM,WAAW,8BAA8B;IAC7C,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,GAClB,8BAA8B,CAiBhC;AAQD,qFAAqF;AACrF,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAY7E;AAED,MAAM,WAAW,qBAAqB;IACpC,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAkGD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CA0KjC"}
@@ -0,0 +1,329 @@
1
+ import { and, eq, exists, gt, lt, ne, notExists, or, sql } from 'drizzle-orm';
2
+ import { alias } from 'drizzle-orm/sqlite-core';
3
+ import { channels, workspaces } from '../db/schema.js';
4
+ import { sha256Hex } from '../lib/crypto.js';
5
+ import { issueCredential } from '../auth/credentials.js';
6
+ import { codedError } from '../lib/httpError.js';
7
+ import { runAtomicWrites } from '../ports/database.js';
8
+ import { generateId } from './snowflake.js';
9
+ import { WORKSPACE_KEY_MAX_GRACE_MS } from './tokenRotate.js';
10
+ /**
11
+ * Capability advertisement for a control plane driving the internal admin API.
12
+ *
13
+ * The `workspace_key_push` block is the hosted gateway's contract verbatim, so
14
+ * a control plane's pre-rotation capability gate passes unchanged. On the
15
+ * self-host engine every key fence lives in the same SQLite row and there is
16
+ * no auth cache, so `revocation_markers` is satisfied by the previous-key slot
17
+ * itself: a superseded key stops authenticating the moment its slot expires,
18
+ * with no KV marker to arm or repair.
19
+ *
20
+ * `workspace_admin` is a self-host extension (absent on the hosted gateway):
21
+ * `create` advertises POST /internal/workspaces and `server_minted_key` that
22
+ * POST /internal/workspaces/:id/api-key may omit `api_key` to have the engine
23
+ * mint the replacement.
24
+ */
25
+ export const INTERNAL_CAPABILITIES = {
26
+ workspace_key_push: {
27
+ generation_cas: true,
28
+ generation_required_once_fenced: true,
29
+ grace_ms: true,
30
+ max_grace_ms: WORKSPACE_KEY_MAX_GRACE_MS,
31
+ revocation_markers: true,
32
+ previous_key_slot: true,
33
+ },
34
+ workspace_admin: {
35
+ create: true,
36
+ delete: true,
37
+ server_minted_key: true,
38
+ },
39
+ };
40
+ const internalDeletionFences = new WeakMap();
41
+ function deletionFences(db) {
42
+ const key = db;
43
+ const existing = internalDeletionFences.get(key);
44
+ if (existing)
45
+ return existing;
46
+ const created = new Map();
47
+ internalDeletionFences.set(key, created);
48
+ return created;
49
+ }
50
+ export function beginInternalWorkspaceDeletion(db, workspaceId) {
51
+ const fences = deletionFences(db);
52
+ const state = fences.get(workspaceId) ?? { active: 0, tombstoned: false };
53
+ state.active += 1;
54
+ fences.set(workspaceId, state);
55
+ let settled = false;
56
+ const settle = (committed) => {
57
+ if (settled)
58
+ return;
59
+ settled = true;
60
+ state.active -= 1;
61
+ if (committed)
62
+ state.tombstoned = true;
63
+ if (state.active === 0 && !state.tombstoned)
64
+ fences.delete(workspaceId);
65
+ };
66
+ return {
67
+ commit: () => settle(true),
68
+ release: () => settle(false),
69
+ };
70
+ }
71
+ function assertInternalWorkspaceWritable(db, workspaceId) {
72
+ if (deletionFences(db).has(workspaceId)) {
73
+ throw codedError('Workspace is being deleted', 'workspace_deleted', 410);
74
+ }
75
+ }
76
+ /** Minimum length of `config.internalSecret` (e.g. `openssl rand -hex 32` is 64). */
77
+ export const MIN_INTERNAL_SECRET_LENGTH = 32;
78
+ /**
79
+ * Throw when a configured internal secret is too short to be a credential.
80
+ * Unset/empty is fine (the admin API stays disabled).
81
+ */
82
+ export function assertInternalSecretStrength(secret) {
83
+ if (secret === undefined || secret === '')
84
+ return;
85
+ if (secret !== secret.trim()) {
86
+ // The route trims the presented bearer, so a padded secret could never match.
87
+ throw new Error('RELAYCAST_INTERNAL_SECRET must not have leading or trailing whitespace');
88
+ }
89
+ if (secret.length < MIN_INTERNAL_SECRET_LENGTH) {
90
+ throw new Error(`RELAYCAST_INTERNAL_SECRET must be at least ${MIN_INTERNAL_SECRET_LENGTH} characters ` +
91
+ '(generate one with `openssl rand -hex 32`)');
92
+ }
93
+ }
94
+ function staleGeneration(workspaceId, requested, stored) {
95
+ return codedError(`key_generation ${requested} does not beat the stored generation ${stored} for workspace ` +
96
+ `${workspaceId}; the push is stale and was not applied`, 'stale_key_generation', 409);
97
+ }
98
+ function isUniqueConstraintError(err) {
99
+ const seen = new Set();
100
+ let cause = err;
101
+ while (cause && typeof cause === 'object' && !seen.has(cause)) {
102
+ seen.add(cause);
103
+ const e = cause;
104
+ if (e.code === 'SQLITE_CONSTRAINT_UNIQUE' || e.code === 'SQLITE_CONSTRAINT_PRIMARYKEY')
105
+ return true;
106
+ if (typeof e.message === 'string' && e.message.toLowerCase().includes('unique constraint failed'))
107
+ return true;
108
+ cause = e.cause;
109
+ }
110
+ return false;
111
+ }
112
+ /**
113
+ * A server-minted key in the deployment's credential family. A deployment
114
+ * that mints `ar_` credentials admits only snowflake workspace ids (the route
115
+ * checks before writing; `issueCredential` refuses as the backstop).
116
+ */
117
+ function mintWorkspaceKey(db, workspaceId) {
118
+ return issueCredential(db, 'workspace', workspaceId);
119
+ }
120
+ /** The create batch's ownership guard tripped (see pushWorkspaceKey). */
121
+ function isKeyGuardViolation(err) {
122
+ const seen = new Set();
123
+ let cause = err;
124
+ while (cause && typeof cause === 'object' && !seen.has(cause)) {
125
+ seen.add(cause);
126
+ const e = cause;
127
+ if (typeof e.message === 'string' && /NOT NULL constraint failed: channels\.workspace_id/i.test(e.message))
128
+ return true;
129
+ cause = e.cause;
130
+ }
131
+ return false;
132
+ }
133
+ async function readKeyRow(db, workspaceId) {
134
+ const [row] = await db
135
+ .select({ id: workspaces.id, apiKeyHash: workspaces.apiKeyHash, apiKeyGeneration: workspaces.apiKeyGeneration })
136
+ .from(workspaces)
137
+ .where(eq(workspaces.id, workspaceId));
138
+ return row;
139
+ }
140
+ /**
141
+ * Rows of *other* workspaces that hold `apiKeyHash` as a credential that still
142
+ * authenticates — their current key, or a previous key inside its grace
143
+ * window. Authentication resolves current-slot matches before previous-slot
144
+ * matches, so binding a key that is live in another workspace's grace slot
145
+ * would silently move that workspace's callers onto this one.
146
+ */
147
+ function liveElsewhereQuery(db, apiKeyHash, workspaceId) {
148
+ const other = alias(workspaces, 'other_workspace');
149
+ return db
150
+ .select({ id: other.id })
151
+ .from(other)
152
+ .where(and(ne(other.id, workspaceId), or(eq(other.apiKeyHash, apiKeyHash), and(eq(other.previousApiKeyHash, apiKeyHash), gt(other.previousApiKeyExpiresAt, new Date())))));
153
+ }
154
+ async function keyOwnedElsewhere(db, apiKeyHash, workspaceId) {
155
+ const [owner] = await liveElsewhereQuery(db, apiKeyHash, workspaceId).limit(1);
156
+ return Boolean(owner);
157
+ }
158
+ /**
159
+ * The same ownership invariant as a guard on the key-changing UPDATE, so a
160
+ * concurrent rotation elsewhere cannot slip in between the pre-check and the
161
+ * write.
162
+ */
163
+ function keyFreeElsewhere(db, apiKeyHash, workspaceId) {
164
+ return notExists(liveElsewhereQuery(db, apiKeyHash, workspaceId));
165
+ }
166
+ function keyConflict() {
167
+ return codedError('api_key is already bound to a different workspace', 'api_key_conflict', 409);
168
+ }
169
+ /**
170
+ * Register or rotate a workspace's API key on behalf of a trusted control
171
+ * plane — the self-host port of the hosted gateway's
172
+ * `POST /internal/workspaces/:id/api-key`.
173
+ *
174
+ * Semantics (identical to hosted where they overlap):
175
+ * - UPSERT: a missing workspace is created with `id = name = :id` (plus its
176
+ * `#general` channel) when the caller supplies the key. A server-minted
177
+ * rotation of a missing workspace is 404 instead — create it explicitly.
178
+ * - Re-pushing the live key is idempotent at any generation; a higher
179
+ * generation bumps the stored fence.
180
+ * - A hash-changing push carrying `key_generation` commits only through a CAS
181
+ * on (current hash, generation < N); a stale or out-of-order write is 409
182
+ * `stale_key_generation`. The superseded key keeps authenticating for
183
+ * `grace_ms` (default 0: dead immediately).
184
+ * - Once fenced (generation > 0), generationless hash changes are 409
185
+ * `key_generation_required`.
186
+ * - Server-minted rotation (no `api_key`) always fences: it uses
187
+ * `key_generation` when given, otherwise stored generation + 1.
188
+ */
189
+ export async function pushWorkspaceKey(db, workspaceId, input) {
190
+ assertInternalWorkspaceWritable(db, workspaceId);
191
+ const minted = input.apiKey === undefined;
192
+ const apiKey = input.apiKey ?? await mintWorkspaceKey(db, workspaceId);
193
+ const apiKeyHash = await sha256Hex(apiKey);
194
+ const { graceMs } = input;
195
+ let keyGeneration = input.keyGeneration;
196
+ // A server-minted rotation without key_generation fences at stored + 1,
197
+ // re-derived from each fresh read so a lost race retries instead of
198
+ // reporting a stale generation the caller never sent.
199
+ const derivedGeneration = minted && input.keyGeneration === undefined;
200
+ let row = await readKeyRow(db, workspaceId);
201
+ for (let attempt = 0; attempt < 2; attempt += 1) {
202
+ assertInternalWorkspaceWritable(db, workspaceId);
203
+ if (!row) {
204
+ if (minted)
205
+ throw codedError('Workspace not found', 'workspace_not_found', 404);
206
+ if (await keyOwnedElsewhere(db, apiKeyHash, workspaceId))
207
+ throw keyConflict();
208
+ const generation = keyGeneration ?? 0;
209
+ // Re-check after the awaits above: a delete may have claimed the id.
210
+ assertInternalWorkspaceWritable(db, workspaceId);
211
+ try {
212
+ await runAtomicWrites(db, (writeDb) => [
213
+ writeDb.insert(workspaces).values({
214
+ id: workspaceId,
215
+ name: workspaceId,
216
+ apiKeyHash,
217
+ apiKeyGeneration: generation,
218
+ }),
219
+ // Ownership guard inside the batch: if another workspace took this
220
+ // key (current slot, or a previous slot still in grace) after the
221
+ // pre-check, the NULL workspace_id fails NOT NULL and the whole
222
+ // batch, including the workspace insert, rolls back.
223
+ writeDb.insert(channels).values({
224
+ id: generateId(),
225
+ workspaceId: sql `(CASE WHEN ${exists(liveElsewhereQuery(writeDb, apiKeyHash, workspaceId))} THEN NULL ELSE ${workspaceId} END)`,
226
+ name: 'general',
227
+ topic: 'General discussion',
228
+ }),
229
+ ], { requireAtomic: true });
230
+ return { created: true, workspaceId, apiKeyGeneration: generation };
231
+ }
232
+ catch (error) {
233
+ if (isKeyGuardViolation(error))
234
+ throw keyConflict();
235
+ if (!isUniqueConstraintError(error))
236
+ throw error;
237
+ // A concurrent push created the row — re-decide against it. Otherwise
238
+ // the key hash collided with another workspace.
239
+ const fresh = await readKeyRow(db, workspaceId);
240
+ if (!fresh)
241
+ throw keyConflict();
242
+ row = fresh;
243
+ continue;
244
+ }
245
+ }
246
+ const stored = row.apiKeyGeneration ?? 0;
247
+ if (row.apiKeyHash === apiKeyHash) {
248
+ // Idempotent re-push of the live key; a higher generation bumps the fence.
249
+ if (keyGeneration !== undefined && keyGeneration > stored) {
250
+ assertInternalWorkspaceWritable(db, workspaceId);
251
+ const bumped = await db
252
+ .update(workspaces)
253
+ .set({ apiKeyGeneration: keyGeneration })
254
+ .where(and(eq(workspaces.id, row.id), eq(workspaces.apiKeyHash, apiKeyHash), lt(workspaces.apiKeyGeneration, keyGeneration)))
255
+ .returning({ id: workspaces.id });
256
+ if (bumped.length === 0) {
257
+ row = await readKeyRow(db, workspaceId);
258
+ continue;
259
+ }
260
+ return { created: false, workspaceId, apiKeyGeneration: keyGeneration };
261
+ }
262
+ return { created: false, workspaceId, apiKeyGeneration: stored };
263
+ }
264
+ if (await keyOwnedElsewhere(db, apiKeyHash, workspaceId))
265
+ throw keyConflict();
266
+ if (derivedGeneration) {
267
+ if (stored >= Number.MAX_SAFE_INTEGER) {
268
+ throw codedError(`workspace ${workspaceId} is at the maximum api_key_generation; it cannot be rotated further`, 'key_generation_exhausted', 409);
269
+ }
270
+ keyGeneration = stored + 1;
271
+ }
272
+ if (keyGeneration === undefined) {
273
+ if (stored > 0) {
274
+ throw codedError(`workspace ${workspaceId} is fenced at api_key_generation ${stored}; ` +
275
+ 'pushes that change the key must carry key_generation greater than that', 'key_generation_required', 409);
276
+ }
277
+ assertInternalWorkspaceWritable(db, workspaceId);
278
+ const applied = await db
279
+ .update(workspaces)
280
+ .set({ apiKeyHash })
281
+ .where(and(eq(workspaces.id, row.id), eq(workspaces.apiKeyHash, row.apiKeyHash), eq(workspaces.apiKeyGeneration, 0), keyFreeElsewhere(db, apiKeyHash, row.id)))
282
+ .returning({ id: workspaces.id });
283
+ if (applied.length === 0) {
284
+ row = await readKeyRow(db, workspaceId);
285
+ continue;
286
+ }
287
+ return { created: false, workspaceId, apiKeyGeneration: 0 };
288
+ }
289
+ if (keyGeneration <= stored)
290
+ throw staleGeneration(workspaceId, keyGeneration, stored);
291
+ const grace = graceMs ?? 0;
292
+ // Zero grace (compromise) leaves no authenticatable previous slot: the
293
+ // auth lookup requires a strictly-future expiry, and null never matches.
294
+ const previousExpiresAt = grace === 0 ? null : new Date(Date.now() + grace);
295
+ assertInternalWorkspaceWritable(db, workspaceId);
296
+ const applied = await db
297
+ .update(workspaces)
298
+ .set({
299
+ apiKeyHash,
300
+ apiKeyGeneration: keyGeneration,
301
+ previousApiKeyHash: row.apiKeyHash,
302
+ previousApiKeyExpiresAt: previousExpiresAt,
303
+ })
304
+ .where(and(eq(workspaces.id, row.id), eq(workspaces.apiKeyHash, row.apiKeyHash), lt(workspaces.apiKeyGeneration, keyGeneration), keyFreeElsewhere(db, apiKeyHash, row.id)))
305
+ .returning({ id: workspaces.id });
306
+ if (applied.length === 0) {
307
+ const fresh = await readKeyRow(db, workspaceId);
308
+ // A concurrent push of the same key won. Done only if its generation
309
+ // already covers ours; otherwise loop so the idempotent branch bumps
310
+ // the fence to the requested generation.
311
+ if (fresh && fresh.apiKeyHash === apiKeyHash && keyGeneration <= fresh.apiKeyGeneration) {
312
+ return { created: false, workspaceId, apiKeyGeneration: fresh.apiKeyGeneration };
313
+ }
314
+ if (fresh && !derivedGeneration && keyGeneration <= fresh.apiKeyGeneration) {
315
+ throw staleGeneration(workspaceId, keyGeneration, fresh.apiKeyGeneration);
316
+ }
317
+ row = fresh;
318
+ continue;
319
+ }
320
+ return {
321
+ created: false,
322
+ workspaceId,
323
+ apiKeyGeneration: keyGeneration,
324
+ ...(minted ? { mintedApiKey: apiKey } : {}),
325
+ };
326
+ }
327
+ throw codedError(`Concurrent key writes are contending workspace ${workspaceId}; retry`, 'key_write_conflict', 409);
328
+ }
329
+ //# sourceMappingURL=internalAdmin.js.map