@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
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internalAdmin.js","sourceRoot":"","sources":["../../src/engine/internalAdmin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"invocationCompletion.d.ts","sourceRoot":"","sources":["../../src/engine/invocationCompletion.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,UAAU,GAAG,cAAc,GAAG,iBAAiB,GAAG,QAAQ,CAAC,CAAC;AAE3H,KAAK,gBAAgB,GAAG;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAWF,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,wBAAwB,EAC9B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAqCD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAGlE;AAeD,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,wBAAwB,GAAG,UAAU,CAAC;AAEvF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,wBAAwB,EAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,IAAI,CAAC,CA+Cf;AAED,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG,cAAc,GAAG,cAAc,CAAC;AAErF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,IAAI,CAAC,wBAAwB,EAAE,IAAI,GAAG,UAAU,GAAG,cAAc,CAAC,EACxE,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAqCf"}
1
+ {"version":3,"file":"invocationCompletion.d.ts","sourceRoot":"","sources":["../../src/engine/invocationCompletion.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpD,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,UAAU,GAAG,cAAc,GAAG,iBAAiB,GAAG,QAAQ,CAAC,CAAC;AAE3H,KAAK,gBAAgB,GAAG;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAWF,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,wBAAwB,EAC9B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAqCD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAGlE;AAeD,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,wBAAwB,GAAG,UAAU,CAAC;AAEvF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,wBAAwB,EAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,IAAI,CAAC,CA+Cf;AAED,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG,cAAc,GAAG,cAAc,CAAC;AAErF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,IAAI,CAAC,wBAAwB,EAAE,IAAI,GAAG,UAAU,GAAG,cAAc,CAAC,EACxE,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAqDf"}
@@ -5,6 +5,7 @@ import { enqueueEvent } from './eventQueue.js';
5
5
  import { actionInvocations, nodes } from '../db/schema.js';
6
6
  import { sendNodeDeliveriesToAgents } from './nodeDeliver.js';
7
7
  import { appendAndPublishWorkspaceEvent, appendAndPublishWorkspaceEventWhen } from './workspaceEvents.js';
8
+ import { ephemeralEventFetch } from '../ports/index.js';
8
9
  function buildEvent(type, workspaceId, data) {
9
10
  return {
10
11
  type,
@@ -32,7 +33,7 @@ export async function emitInvocationCompletionEffects(deps, workspaceId, result)
32
33
  workspaceId,
33
34
  environment: deps.config?.environment,
34
35
  httpPushProxy: deps.config?.httpPushProxy,
35
- outboundWebhookFetch: deps.config?.outboundWebhookFetch,
36
+ ephemeralEventFetch: ephemeralEventFetch(deps.config),
36
37
  }, {
37
38
  agentIds: [result.caller_id],
38
39
  event: eventType,
@@ -129,7 +130,7 @@ export async function emitAgentExitedEffects(deps, workspaceId, input) {
129
130
  workspaceId,
130
131
  environment: deps.config?.environment,
131
132
  httpPushProxy: deps.config?.httpPushProxy,
132
- outboundWebhookFetch: deps.config?.outboundWebhookFetch,
133
+ ephemeralEventFetch: ephemeralEventFetch(deps.config),
133
134
  }, {
134
135
  agentIds: [callerId],
135
136
  event: eventType,
@@ -160,15 +161,32 @@ export async function emitNodeStatusEffects(deps, workspaceId, input) {
160
161
  const event = buildEvent(eventType, workspaceId, eventData);
161
162
  const payload = transformForClient(event);
162
163
  if (input.status === 'offline' && input.claimRevision !== undefined) {
163
- const appended = await appendAndPublishWorkspaceEventWhen({ db: deps.db, realtime: deps.realtime }, workspaceId, { type: eventType, payload }, sql `EXISTS (
164
+ const appended = await appendAndPublishWorkspaceEventWhen({ db: deps.db, realtime: deps.realtime }, workspaceId, { type: eventType, payload },
165
+ // Two writers can finish one claim (a forced delete completes another
166
+ // isolate's claim tail), so the transition is also skipped when the
167
+ // newest status event for the node since the claim (the row's
168
+ // heartbeat) is already offline. Part of the same INSERT, so the check
169
+ // is atomic; ordered by seq, so a reconnect's online event in between
170
+ // still lets a later offline through.
171
+ sql `EXISTS (
164
172
  SELECT 1 FROM ${nodes}
165
173
  WHERE ${nodes.workspaceId} = ${workspaceId}
166
174
  AND ${nodes.id} = ${input.nodeId}
167
175
  AND ${nodes.status} = 'offline'
168
176
  AND ${nodes.livenessRevision} = ${input.claimRevision}
177
+ AND COALESCE((
178
+ SELECT we.type FROM workspace_events AS we INDEXED BY idx_workspace_events_created
179
+ WHERE we.workspace_id = ${workspaceId}
180
+ AND we.created_at >= ${nodes.lastHeartbeatAt}
181
+ AND we.type IN ('node.status.online', 'node.status.offline')
182
+ AND json_extract(we.payload, '$.node_id') = ${input.nodeId}
183
+ ORDER BY we.seq DESC
184
+ LIMIT 1
185
+ ), '') <> 'node.status.offline'
169
186
  )`);
170
- // A reconnect won the database race. Its online event is authoritative;
171
- // publishing this older offline transition afterward would invert history.
187
+ // A reconnect won the database race (its online event is authoritative;
188
+ // publishing this older offline transition afterward would invert
189
+ // history), or this transition is already published.
172
190
  if (!appended)
173
191
  return;
174
192
  }
@@ -1 +1 @@
1
- {"version":3,"file":"invocationCompletion.js","sourceRoot":"","sources":["../../src/engine/invocationCompletion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invocationCompletion.js","sourceRoot":"","sources":["../../src/engine/invocationCompletion.ts"],"names":[],"mappings":"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"}
@@ -87,7 +87,8 @@ export declare function createNodeToken(db: Db, workspaceId: string, data: {
87
87
  expectedTokenHash?: string;
88
88
  directAgentId?: string;
89
89
  rotationRecovery?: {
90
- replacementToken: string;
90
+ /** The deterministic replacement, under each tag the deployment knows (current first). */
91
+ replacementTokens: readonly string[];
91
92
  idempotencyKeyHash: string;
92
93
  requestDigest: string;
93
94
  };
@@ -441,6 +442,8 @@ export declare function settleNodeOffline(db: Db, registry: NodeConnectionRegist
441
442
  };
442
443
  deps?: InvocationCompletionDeps;
443
444
  reason?: NodeOfflineReason;
445
+ /** Return covered attempts to pending instead of resending them (see detachInvocationsFromLostNode). */
446
+ detachOnly?: boolean;
444
447
  }): Promise<boolean>;
445
448
  export declare function markNodeOffline(db: Db, registry: NodeConnectionRegistry, workspaceId: string, nodeId: string, effects?: {
446
449
  deps?: InvocationCompletionDeps;
@@ -547,6 +550,40 @@ export declare function completeBoundAgentDelivery(db: Db, registry: NodeConnect
547
550
  providerName: string;
548
551
  }): Promise<void>;
549
552
  export declare function unbindAgentFromNode(db: Db, workspaceId: string, nodeName: string, agentName: string): Promise<boolean>;
553
+ export type DeleteNodeResult = {
554
+ ok: true;
555
+ id: string;
556
+ name: string;
557
+ cascadedActions: number;
558
+ } | {
559
+ ok: false;
560
+ code: 'node_not_found' | 'node_online' | 'node_has_actions' | 'node_delete_conflict';
561
+ };
562
+ /**
563
+ * Delete one node by its resolved id. Callers resolve a path's id-or-name
564
+ * once, before taking the node lock; looking the name up again here could
565
+ * land on a different node whose name equals this id after a concurrent
566
+ * delete.
567
+ *
568
+ * Unforced, an online node or one hosting actions is refused. Every write is
569
+ * then conditioned on the node state those checks saw, because the node lock
570
+ * only serializes this isolate:
571
+ * - a node whose row still reads online is taken offline through the same
572
+ * claim + claim-scoped settle a lost connection uses, so its hosted agents
573
+ * lose liveness and open invocations are rescheduled while the node and its
574
+ * actions still exist to route them. A lost claim means another isolate
575
+ * refreshed the node; nothing has been touched and the result is
576
+ * `node_delete_conflict`.
577
+ * - the unforced DELETE matches only the liveness epoch the checks (or the
578
+ * claim) observed, with no hosted action, so a heartbeat, registration or
579
+ * action registration landing in between leaves the row in place.
580
+ * The delete itself is one atomic write group: open invocations still bound
581
+ * to the node or its actions fail with `node_deleted` (as deleteAction does),
582
+ * agents still located on it lose liveness, and its actions and row go.
583
+ */
584
+ export declare function deleteNode(db: Db, deps: InvocationCompletionDeps, workspaceId: string, nodeId: string, opts?: {
585
+ force?: boolean;
586
+ }): Promise<DeleteNodeResult>;
550
587
  export declare function listNodeAgents(db: Db, workspaceId: string, nodeName: string): Promise<{
551
588
  created_at: string;
552
589
  updated_at: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/engine/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/engine/node.ts"],"names":[],"mappings":"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"}