@relaycast/engine 6.1.0 → 6.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.
- package/dist/adapters/node/delivery-maintenance.d.ts +1 -1
- package/dist/adapters/node/delivery-maintenance.d.ts.map +1 -1
- package/dist/adapters/node/delivery-maintenance.js +4 -4
- package/dist/adapters/node/delivery-maintenance.js.map +1 -1
- package/dist/adapters/node/index.js +2 -2
- package/dist/adapters/node/index.js.map +1 -1
- package/dist/adapters/node/realtime.d.ts.map +1 -1
- package/dist/adapters/node/realtime.js +45 -3
- package/dist/adapters/node/realtime.js.map +1 -1
- package/dist/agent-disconnect.d.ts +23 -1
- package/dist/agent-disconnect.d.ts.map +1 -1
- package/dist/agent-disconnect.js +20 -2
- package/dist/agent-disconnect.js.map +1 -1
- package/dist/db/migrations/0032_invocation_handler_unreachable.sql +5 -0
- package/dist/db/schema.d.ts +17 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +4 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/engine/action.d.ts +34 -13
- package/dist/engine/action.d.ts.map +1 -1
- package/dist/engine/action.js +323 -57
- package/dist/engine/action.js.map +1 -1
- package/dist/engine/delivery.d.ts +21 -1
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js +79 -9
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/invocationCompletion.d.ts +43 -0
- package/dist/engine/invocationCompletion.d.ts.map +1 -1
- package/dist/engine/invocationCompletion.js +108 -4
- package/dist/engine/invocationCompletion.js.map +1 -1
- package/dist/engine/node.d.ts +72 -6
- package/dist/engine/node.d.ts.map +1 -1
- package/dist/engine/node.js +152 -23
- package/dist/engine/node.js.map +1 -1
- package/dist/engine/nodeDeliver.d.ts.map +1 -1
- package/dist/engine/nodeDeliver.js +5 -0
- package/dist/engine/nodeDeliver.js.map +1 -1
- package/dist/engine/observerToken.js +1 -1
- package/dist/engine/observerToken.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/origin.d.ts +44 -0
- package/dist/lib/origin.d.ts.map +1 -1
- package/dist/lib/origin.js +63 -3
- package/dist/lib/origin.js.map +1 -1
- package/dist/lib/serverTelemetry.d.ts.map +1 -1
- package/dist/lib/serverTelemetry.js +10 -2
- package/dist/lib/serverTelemetry.js.map +1 -1
- package/dist/node-invocations.d.ts +1 -1
- package/dist/node-invocations.d.ts.map +1 -1
- package/dist/node-invocations.js +1 -1
- package/dist/node-invocations.js.map +1 -1
- package/dist/ports/realtime.d.ts +22 -1
- package/dist/ports/realtime.d.ts.map +1 -1
- package/dist/ports/realtime.js.map +1 -1
- package/dist/routes/action.js +11 -5
- package/dist/routes/action.js.map +1 -1
- package/dist/routes/deliveryRouting.d.ts +20 -1
- package/dist/routes/deliveryRouting.d.ts.map +1 -1
- package/dist/routes/deliveryRouting.js +116 -17
- package/dist/routes/deliveryRouting.js.map +1 -1
- package/dist/routes/node.js +3 -2
- package/dist/routes/node.js.map +1 -1
- package/dist/routes/presence.d.ts.map +1 -1
- package/dist/routes/presence.js +15 -4
- package/dist/routes/presence.js.map +1 -1
- package/package.json +3 -3
package/dist/lib/origin.js
CHANGED
|
@@ -9,6 +9,26 @@ export const ORIGIN_ACTOR_HEADER = "X-Relaycast-Origin-Actor";
|
|
|
9
9
|
export const ORIGIN_ACTOR_QUERY = "origin_actor";
|
|
10
10
|
export const AGENT_RELAY_DISTINCT_ID_HEADER = "X-Agent-Relay-Distinct-Id";
|
|
11
11
|
export const AGENT_RELAY_DISTINCT_ID_QUERY = "agent_relay_distinct_id";
|
|
12
|
+
/**
|
|
13
|
+
* Who — as a machine, a person, and an organization — is behind this request.
|
|
14
|
+
*
|
|
15
|
+
* A relaycast workspace is an API-key row; it has no user table, so the gateway
|
|
16
|
+
* cannot derive a human identity on its own. Callers that *do* know one (the
|
|
17
|
+
* Agent Relay CLI and broker, after `agent-relay cloud login`) forward it here
|
|
18
|
+
* so server-side product events can be grouped by machine, user, and org
|
|
19
|
+
* instead of only by workspace.
|
|
20
|
+
*
|
|
21
|
+
* All four are optional and untrusted: they are analytics dimensions only and
|
|
22
|
+
* must never gate authorization.
|
|
23
|
+
*/
|
|
24
|
+
export const AGENT_RELAY_MACHINE_ID_HEADER = "X-Agent-Relay-Machine-Id";
|
|
25
|
+
export const AGENT_RELAY_MACHINE_ID_QUERY = "agent_relay_machine_id";
|
|
26
|
+
export const AGENT_RELAY_USER_ID_HEADER = "X-Agent-Relay-User-Id";
|
|
27
|
+
export const AGENT_RELAY_USER_ID_QUERY = "agent_relay_user_id";
|
|
28
|
+
export const AGENT_RELAY_ORG_ID_HEADER = "X-Agent-Relay-Org-Id";
|
|
29
|
+
export const AGENT_RELAY_ORG_ID_QUERY = "agent_relay_org_id";
|
|
30
|
+
export const AGENT_RELAY_ORG_SLUG_HEADER = "X-Agent-Relay-Org-Slug";
|
|
31
|
+
export const AGENT_RELAY_ORG_SLUG_QUERY = "agent_relay_org_slug";
|
|
12
32
|
/** Fallback value when the origin actor is missing or invalid. */
|
|
13
33
|
export const UNKNOWN_ORIGIN_ACTOR = "unknown";
|
|
14
34
|
/** Upper bound on the origin-actor value — generous enough for a UA-style path. */
|
|
@@ -49,8 +69,28 @@ export function extractOriginActor(request) {
|
|
|
49
69
|
return trimmed.slice(0, ORIGIN_ACTOR_MAX_LENGTH).toLowerCase();
|
|
50
70
|
}
|
|
51
71
|
export function extractAgentRelayDistinctId(request) {
|
|
52
|
-
|
|
53
|
-
|
|
72
|
+
return readIdentityValue(request, AGENT_RELAY_DISTINCT_ID_HEADER, AGENT_RELAY_DISTINCT_ID_QUERY, { maxLength: 128, onOversize: "truncate" });
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Read one identity dimension from a header, falling back to a query param —
|
|
76
|
+
* WebSocket upgrades from browsers can't set custom headers, so the SDK forwards
|
|
77
|
+
* these on the query string (mirrors how `origin_actor` works).
|
|
78
|
+
*
|
|
79
|
+
* Anything outside the distinct-id charset is dropped, which keeps a malformed
|
|
80
|
+
* upstream value from smuggling a header injection or a misleading id into
|
|
81
|
+
* analytics.
|
|
82
|
+
*
|
|
83
|
+
* `onOversize` differs by dimension on purpose:
|
|
84
|
+
* - `reject` for the actor dimensions. A truncated user or org id is a
|
|
85
|
+
* *different* id that can collide with a real one and attribute usage to
|
|
86
|
+
* the wrong person or company, so no attribution beats wrong attribution.
|
|
87
|
+
* Every SDK caps well below these limits, so only a malformed caller hits it.
|
|
88
|
+
* - `truncate` for `agent_relay_distinct_id`, whose cap-at-128 behaviour is
|
|
89
|
+
* already shipped and covered by a test; changing it is out of scope here.
|
|
90
|
+
*/
|
|
91
|
+
function readIdentityValue(request, header, query, { maxLength, onOversize }) {
|
|
92
|
+
const raw = request.headers.get(header) ??
|
|
93
|
+
new URL(request.url).searchParams.get(query);
|
|
54
94
|
if (!raw)
|
|
55
95
|
return undefined;
|
|
56
96
|
const trimmed = raw.trim();
|
|
@@ -58,7 +98,27 @@ export function extractAgentRelayDistinctId(request) {
|
|
|
58
98
|
return undefined;
|
|
59
99
|
if (!AGENT_RELAY_DISTINCT_ID_ALLOWED.test(trimmed))
|
|
60
100
|
return undefined;
|
|
61
|
-
|
|
101
|
+
if (trimmed.length > maxLength) {
|
|
102
|
+
return onOversize === "reject" ? undefined : trimmed.slice(0, maxLength);
|
|
103
|
+
}
|
|
104
|
+
return trimmed;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Extract the caller-declared user/org identity. Returns an object with only the
|
|
108
|
+
* fields that were present and well-formed, so it can be spread straight into
|
|
109
|
+
* telemetry properties without emitting empty values.
|
|
110
|
+
*/
|
|
111
|
+
export function extractActorIdentity(request) {
|
|
112
|
+
const machineId = readIdentityValue(request, AGENT_RELAY_MACHINE_ID_HEADER, AGENT_RELAY_MACHINE_ID_QUERY, { maxLength: 128, onOversize: "reject" });
|
|
113
|
+
const userId = readIdentityValue(request, AGENT_RELAY_USER_ID_HEADER, AGENT_RELAY_USER_ID_QUERY, { maxLength: 128, onOversize: "reject" });
|
|
114
|
+
const orgId = readIdentityValue(request, AGENT_RELAY_ORG_ID_HEADER, AGENT_RELAY_ORG_ID_QUERY, { maxLength: 128, onOversize: "reject" });
|
|
115
|
+
const orgSlug = readIdentityValue(request, AGENT_RELAY_ORG_SLUG_HEADER, AGENT_RELAY_ORG_SLUG_QUERY, { maxLength: 120, onOversize: "reject" });
|
|
116
|
+
return {
|
|
117
|
+
...(machineId ? { actor_machine_id: machineId } : {}),
|
|
118
|
+
...(userId ? { actor_user_id: userId } : {}),
|
|
119
|
+
...(orgId ? { actor_org_id: orgId } : {}),
|
|
120
|
+
...(orgSlug ? { actor_org_slug: orgSlug } : {}),
|
|
121
|
+
};
|
|
62
122
|
}
|
|
63
123
|
function sanitizeOriginPart(value, maxLen) {
|
|
64
124
|
if (!value)
|
package/dist/lib/origin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"origin.js","sourceRoot":"","sources":["../../src/lib/origin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,GAEzB,MAAM,kBAAkB,CAAC;AAI1B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AACjD,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,yBAAyB,CAAC;AAEvE,kEAAkE;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE9C,mFAAmF;AACnF,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,oBAAoB,GAAG,4BAA4B,CAAC;AAC1D,MAAM,+BAA+B,GAAG,kBAAkB,CAAC;AAE3D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,GAAG,GACP,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACxC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,oBAAoB,CAAC;IAEtC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,oBAAoB,CAAC;IAC1C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,oBAAoB,CAAC;IAErE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAAgB;IAEhB,MAAM,GAAG,GACP,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"origin.js","sourceRoot":"","sources":["../../src/lib/origin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverTelemetry.d.ts","sourceRoot":"","sources":["../../src/lib/serverTelemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"serverTelemetry.d.ts","sourceRoot":"","sources":["../../src/lib/serverTelemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AASxC,KAAK,WAAW,GAAG,oBAAoB,MAAM,EAAE,CAAC;AAEhD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAoBpE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI,CAqCN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { extractAgentRelayDistinctId, extractOriginActor, requiredOriginInfo, UNKNOWN_ORIGIN_ACTOR, } from "./origin.js";
|
|
1
|
+
import { extractActorIdentity, extractAgentRelayDistinctId, extractOriginActor, requiredOriginInfo, UNKNOWN_ORIGIN_ACTOR, } from "./origin.js";
|
|
2
2
|
export function normalizeRoutePathForTelemetry(value) {
|
|
3
3
|
const withoutQuery = value.split(/[?#]/)[0] ?? value;
|
|
4
4
|
const compact = withoutQuery.replace(/\/+/g, "/").trim();
|
|
@@ -32,14 +32,22 @@ export function emitServerEvent(c, workspaceId, event, properties) {
|
|
|
32
32
|
const originActor = c.get("originActor") ?? extractOriginActor(c.req.raw) ?? UNKNOWN_ORIGIN_ACTOR;
|
|
33
33
|
const origin = requiredOriginInfo(c.req.raw);
|
|
34
34
|
const clientDistinctId = extractAgentRelayDistinctId(c.req.raw);
|
|
35
|
+
// Caller-declared user/org. Analytics dimensions only — never authorization.
|
|
36
|
+
const actor = extractActorIdentity(c.req.raw);
|
|
35
37
|
c.get("engine").telemetry.capture({
|
|
36
38
|
name: event,
|
|
37
|
-
|
|
39
|
+
// Prefer the caller's user id: it puts these server events on the same
|
|
40
|
+
// PostHog person as that user's CLI/broker events. `client_distinct_id` is
|
|
41
|
+
// already the user id when the CLI is signed in; the explicit fallback
|
|
42
|
+
// chain also covers callers that send only one of the two headers.
|
|
43
|
+
distinctId: actor.actor_user_id ?? clientDistinctId ?? workspaceId,
|
|
38
44
|
properties: {
|
|
39
45
|
app: "relaycast-server",
|
|
40
46
|
surface: "cloud",
|
|
41
47
|
workspace_id: workspaceId,
|
|
42
48
|
...(clientDistinctId ? { client_distinct_id: clientDistinctId } : {}),
|
|
49
|
+
is_authenticated: Boolean(actor.actor_user_id),
|
|
50
|
+
...actor,
|
|
43
51
|
origin_actor: originActor,
|
|
44
52
|
origin_client: origin.origin_client,
|
|
45
53
|
origin_version: origin.origin_version,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverTelemetry.js","sourceRoot":"","sources":["../../src/lib/serverTelemetry.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAIrB,MAAM,UAAU,8BAA8B,CAAC,KAAa;IAC1D,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;IACrD,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;IAC3E,MAAM,QAAQ,GAAG,gBAAgB;SAC9B,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACf,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3C,IACE,4EAA4E,CAAC,IAAI,CAC/E,OAAO,CACR;YAED,OAAO,KAAK,CAAC;QACf,IAAI,0CAA0C,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IACL,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,CAAkB,EAClB,WAAmB,EACnB,KAAkB,EAClB,UAAmC;IAEnC,MAAM,oBAAoB,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;IAC/C,IAAI,OAAO,oBAAoB,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACxD,oBAAoB,CAAC,UAAU,GAAG,8BAA8B,CAC9D,oBAAoB,CAAC,UAAU,CAChC,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,6EAA6E;IAC7E,MAAM,WAAW,GACf,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC;IAEhF,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,gBAAgB,IAAI,WAAW;
|
|
1
|
+
{"version":3,"file":"serverTelemetry.js","sourceRoot":"","sources":["../../src/lib/serverTelemetry.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAIrB,MAAM,UAAU,8BAA8B,CAAC,KAAa;IAC1D,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;IACrD,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;IAC3E,MAAM,QAAQ,GAAG,gBAAgB;SAC9B,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACf,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3C,IACE,4EAA4E,CAAC,IAAI,CAC/E,OAAO,CACR;YAED,OAAO,KAAK,CAAC;QACf,IAAI,0CAA0C,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IACL,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,CAAkB,EAClB,WAAmB,EACnB,KAAkB,EAClB,UAAmC;IAEnC,MAAM,oBAAoB,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;IAC/C,IAAI,OAAO,oBAAoB,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACxD,oBAAoB,CAAC,UAAU,GAAG,8BAA8B,CAC9D,oBAAoB,CAAC,UAAU,CAChC,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,6EAA6E;IAC7E,MAAM,WAAW,GACf,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC;IAEhF,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChE,6EAA6E;IAC7E,MAAM,KAAK,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,KAAK;QACX,uEAAuE;QACvE,2EAA2E;QAC3E,uEAAuE;QACvE,mEAAmE;QACnE,UAAU,EAAE,KAAK,CAAC,aAAa,IAAI,gBAAgB,IAAI,WAAW;QAClE,UAAU,EAAE;YACV,GAAG,EAAE,kBAAkB;YACvB,OAAO,EAAE,OAAO;YAChB,YAAY,EAAE,WAAW;YACzB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;YAC9C,GAAG,KAAK;YACR,YAAY,EAAE,WAAW;YACzB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,GAAG,oBAAoB;SACxB;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { drainNodeInvocations, sweepTimedOutInvocations, type SweepTimedOutInvocationsOptions, } from './engine/action.js';
|
|
1
|
+
export { ACTION_HANDLER_UNREACHABLE_TTL_MS, drainNodeInvocations, sweepTimedOutInvocations, type SweepTimedOutInvocationsOptions, } from './engine/action.js';
|
|
2
2
|
//# sourceMappingURL=node-invocations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-invocations.d.ts","sourceRoot":"","sources":["../src/node-invocations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,+BAA+B,GACrC,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"node-invocations.d.ts","sourceRoot":"","sources":["../src/node-invocations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,+BAA+B,GACrC,MAAM,oBAAoB,CAAC"}
|
package/dist/node-invocations.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { drainNodeInvocations, sweepTimedOutInvocations, } from './engine/action.js';
|
|
1
|
+
export { ACTION_HANDLER_UNREACHABLE_TTL_MS, drainNodeInvocations, sweepTimedOutInvocations, } from './engine/action.js';
|
|
2
2
|
//# sourceMappingURL=node-invocations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-invocations.js","sourceRoot":"","sources":["../src/node-invocations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GAEzB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"node-invocations.js","sourceRoot":"","sources":["../src/node-invocations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,oBAAoB,EACpB,wBAAwB,GAEzB,MAAM,oBAAoB,CAAC"}
|
package/dist/ports/realtime.d.ts
CHANGED
|
@@ -95,12 +95,33 @@ export interface NodeConnectionRegistry {
|
|
|
95
95
|
code: string;
|
|
96
96
|
message: string;
|
|
97
97
|
} | null;
|
|
98
|
-
/**
|
|
98
|
+
/**
|
|
99
|
+
* Bind a provider name to a connection, superseding a stale prior attachment.
|
|
100
|
+
* When the connection was already bound to a DIFFERENT provider identity —
|
|
101
|
+
* another provider name, or another instance id (a same-socket re-register by
|
|
102
|
+
* a restarted provider whose broker-side cursors are gone) — reset its
|
|
103
|
+
* delivery ready-set so the following {@link setProviderDeliveryReadiness}
|
|
104
|
+
* `agent_scoped` call starts empty and every identity must re-announce, and
|
|
105
|
+
* drop the old name's index entry if it still points at this connection. Only
|
|
106
|
+
* a same-name, same-instance re-register keeps the ready-set.
|
|
107
|
+
*/
|
|
99
108
|
attachProvider?(workspaceId: string, nodeId: string, providerName: string, instanceId: string, connectionId: string): void;
|
|
100
109
|
/**
|
|
101
110
|
* Configure durable-delivery readiness for the active provider connection.
|
|
102
111
|
* Cursor-negotiated connections start agent-scoped with no ready identities;
|
|
103
112
|
* legacy connections are immediately ready for every hosted agent.
|
|
113
|
+
*
|
|
114
|
+
* `agent_scoped` must PRESERVE any identities already marked ready on the
|
|
115
|
+
* resolved connection, but ONLY for a same-connection, same-name,
|
|
116
|
+
* SAME-instance re-register: that is a reconnect and does not invalidate
|
|
117
|
+
* broker-side cursors, so wiping the ready-set would silently gate every
|
|
118
|
+
* in-flight delivery until each agent is re-announced. A re-register with a
|
|
119
|
+
* NEW provider name or instance id is a different/restarted provider —
|
|
120
|
+
* {@link attachProvider} clears the ready-set first, so this call starts a
|
|
121
|
+
* fresh empty agent-scoped set. A genuinely new
|
|
122
|
+
* connection has no ready-set yet, so it also starts empty; a transition from
|
|
123
|
+
* `immediate` resets to an empty agent-scoped set. Out-of-process implementers
|
|
124
|
+
* (relaycast-cloud NodeDO) must mirror this.
|
|
104
125
|
*/
|
|
105
126
|
setProviderDeliveryReadiness?(workspaceId: string, nodeId: string, providerName: string, connectionId: string | undefined, mode: 'immediate' | 'agent_scoped'): void;
|
|
106
127
|
/** Mark identities ready after their cursor-bearing reply is on the socket. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/ports/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,kFAAkF;AAClF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,wBAAwB,CAAC,IAAI,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,WAAW,CAAC;KACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAEnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtD;;;OAGG;IACH,UAAU,CACR,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,0EAA0E;IAC1E,cAAc,CACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,wEAAwE;IACxE,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAE9D,sEAAsE;IACtE,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IAExF;;;;OAIG;IACH,kBAAkB,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IAExF,gFAAgF;IAChF,yBAAyB,CAAC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAErE;;;;OAIG;IACH,sBAAsB,CAAC,CACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAE5C
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/ports/realtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../src/ports/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../src/ports/realtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAkLH,oFAAoF;AACpF,MAAM,UAAU,4BAA4B,CAC1C,QAAgC,EAChC,WAAmB,EACnB,MAAc,EACd,YAAoB,EACpB,OAAe;IAEf,OAAO,QAAQ,CAAC,4BAA4B,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC;AACrG,CAAC"}
|
package/dist/routes/action.js
CHANGED
|
@@ -59,14 +59,18 @@ actionRoutes.post('/actions', requireAuth, rateLimit, async (c) => {
|
|
|
59
59
|
if (callerAgent && parsed.data.handler_agent !== callerAgent.name) {
|
|
60
60
|
return jsonError(c, 'forbidden', `Agent "${callerAgent.name}" may only register actions it will handle itself`, 403);
|
|
61
61
|
}
|
|
62
|
-
const
|
|
62
|
+
const { created, action } = await actionEngine.registerAction(db, workspace.id, parsed.data, {
|
|
63
|
+
completionDeps: c.get('engine'),
|
|
64
|
+
});
|
|
63
65
|
emitServerEvent(c, workspace.id, 'relaycast_server_action_registered', {
|
|
64
|
-
action_name:
|
|
66
|
+
action_name: action.name,
|
|
65
67
|
handler_agent_name: parsed.data.handler_agent ?? null,
|
|
66
68
|
handler_node_name: parsed.data.handler_node ?? null,
|
|
67
69
|
});
|
|
68
|
-
runInBackground(c, fanoutToWorkspace(c, 'action.registered', { action_name:
|
|
69
|
-
|
|
70
|
+
runInBackground(c, fanoutToWorkspace(c, 'action.registered', { action_name: action.name }), 'fanout action.registered');
|
|
71
|
+
// 201 when the action was created, 200 when an existing registration was
|
|
72
|
+
// refreshed (idempotent re-register).
|
|
73
|
+
return created ? jsonCreated(c, action) : jsonOk(c, action);
|
|
70
74
|
}
|
|
71
75
|
catch (err) {
|
|
72
76
|
return errorResponse(c, err);
|
|
@@ -106,7 +110,9 @@ actionRoutes.delete('/actions/:name', requireAuth, rateLimit, async (c) => {
|
|
|
106
110
|
try {
|
|
107
111
|
const db = c.get('db');
|
|
108
112
|
const workspace = c.get('workspace');
|
|
109
|
-
const deleted = await actionEngine.deleteAction(db, workspace.id, c.req.param('name')
|
|
113
|
+
const deleted = await actionEngine.deleteAction(db, workspace.id, c.req.param('name'), {
|
|
114
|
+
completionDeps: c.get('engine'),
|
|
115
|
+
});
|
|
110
116
|
if (!deleted) {
|
|
111
117
|
return jsonNotFound(c, 'action_not_found', 'Action not found');
|
|
112
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/routes/action.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/routes/action.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,30 @@ type HonoContext = Context<AppEnv>;
|
|
|
6
6
|
export declare function routeDeliveryOutcomes(c: HonoContext, deliveries: DeliveryFanoutRecord[], eventType: string, eventData: Record<string, unknown>, opts?: {
|
|
7
7
|
workspaceId?: string;
|
|
8
8
|
}): Promise<void>;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Periodic redrive for queued node deliveries whose `next_attempt_at` is due (or
|
|
11
|
+
* was never stamped). Covers http_push rows (their agent never connects to pull)
|
|
12
|
+
* and ws-node rows whose single background dispatch was lost or failed.
|
|
13
|
+
*
|
|
14
|
+
* http_push rows are independent single-shot webhooks with no ordering
|
|
15
|
+
* relationship, so they are dispatched concurrently per row (each re-routed
|
|
16
|
+
* through {@link routeOneDeliveryOutcome}). ws-node rows for the same agent form
|
|
17
|
+
* a monotonic `seq` stream that the broker injects in order, so they are grouped
|
|
18
|
+
* per agent and redriven serially in ascending seq (see
|
|
19
|
+
* {@link redriveWsBacklogForAgent}); different agents (and different nodes) are
|
|
20
|
+
* still processed concurrently. Returns the number of due rows the sweep found.
|
|
21
|
+
*/
|
|
22
|
+
export declare function sweepDueNodeDeliveries(engine: EngineDeps, opts?: {
|
|
10
23
|
workspaceId?: string;
|
|
11
24
|
now?: Date;
|
|
12
25
|
limit?: number;
|
|
13
26
|
}): Promise<number>;
|
|
27
|
+
/**
|
|
28
|
+
* @deprecated Renamed to {@link sweepDueNodeDeliveries}, which also sweeps queued
|
|
29
|
+
* ws-node rows. Kept as a thin alias because relaycast-cloud's cron imports this
|
|
30
|
+
* name; delete once that host migrates.
|
|
31
|
+
*/
|
|
32
|
+
export declare const sweepDueHttpPushDeliveries: typeof sweepDueNodeDeliveries;
|
|
14
33
|
/**
|
|
15
34
|
* Scheduled TTL expiry maintenance. Each workspace advances by at most one
|
|
16
35
|
* D1-safe delivery batch per invocation; adapters call this on a cadence rather
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deliveryRouting.d.ts","sourceRoot":"","sources":["../../src/routes/deliveryRouting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,WAAW,CAAC;AAGvD,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIjG,KAAK,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"deliveryRouting.d.ts","sourceRoot":"","sources":["../../src/routes/deliveryRouting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,WAAW,CAAC;AAGvD,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIjG,KAAK,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AA6enC,wBAAsB,qBAAqB,CACzC,CAAC,EAAE,WAAW,EACd,UAAU,EAAE,oBAAoB,EAAE,EAClC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,OAAO,CAAC,IAAI,CAAC,CAEf;AA4CD;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,UAAU,EAClB,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9D,OAAO,CAAC,MAAM,CAAC,CAsCjB;AAED;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,+BAAyB,CAAC;AAoBjE;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,UAAU,EAClB,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GAC9C,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAsB,wBAAwB,CAC5C,CAAC,EAAE,WAAW,EACd,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,uBAAuB,EAAE,GACpC,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -9,7 +9,7 @@ import { isProviderAgentDeliveryReady } from '../ports/index.js';
|
|
|
9
9
|
import { fanoutToAgents } from './fanout.js';
|
|
10
10
|
import { sendNodeContextToAgents } from '../engine/nodeContext.js';
|
|
11
11
|
import { appendAndPublishWorkspaceEvent } from '../engine/workspaceEvents.js';
|
|
12
|
-
const
|
|
12
|
+
const DISPATCH_RETRY_DELAY_MS = 30_000;
|
|
13
13
|
function routingContextFromHono(c, workspaceIdOverride) {
|
|
14
14
|
const workspaceId = workspaceIdOverride ?? c.get('workspace')?.id;
|
|
15
15
|
if (!workspaceId) {
|
|
@@ -156,13 +156,13 @@ function normalizeDeliveryAdapter(adapter, nodeKind) {
|
|
|
156
156
|
return 'http.basic.v1';
|
|
157
157
|
return null;
|
|
158
158
|
}
|
|
159
|
-
async function
|
|
159
|
+
async function recordDispatchRetry(ctx, deliveryId, error, opts = {}) {
|
|
160
160
|
await ctx.db
|
|
161
161
|
.update(deliveryRows)
|
|
162
162
|
.set({
|
|
163
163
|
...(opts.incrementAttempts ? { dispatchAttempts: sql `coalesce(${deliveryRows.dispatchAttempts}, 0) + 1` } : {}),
|
|
164
164
|
lastDispatchError: error,
|
|
165
|
-
nextAttemptAt: new Date(Date.now() +
|
|
165
|
+
nextAttemptAt: new Date(Date.now() + DISPATCH_RETRY_DELAY_MS),
|
|
166
166
|
updatedAt: new Date(),
|
|
167
167
|
})
|
|
168
168
|
.where(and(eq(deliveryRows.workspaceId, ctx.workspaceId), eq(deliveryRows.id, deliveryId), eq(deliveryRows.status, 'queued')));
|
|
@@ -171,11 +171,11 @@ async function dispatchHttpPush(args) {
|
|
|
171
171
|
const config = args.target.deliveryConfig ?? {};
|
|
172
172
|
const url = typeof config.url === 'string' ? config.url : null;
|
|
173
173
|
if (!url) {
|
|
174
|
-
await
|
|
174
|
+
await recordDispatchRetry(args.ctx, args.delivery.id, 'invalid http_push delivery config: missing url', { incrementAttempts: true });
|
|
175
175
|
return 'failed';
|
|
176
176
|
}
|
|
177
177
|
if (!isSafeExternalUrl(url, { strict: strictExternalUrl(args.ctx.engine) })) {
|
|
178
|
-
await
|
|
178
|
+
await recordDispatchRetry(args.ctx, args.delivery.id, 'unsafe http_push delivery url', { incrementAttempts: true });
|
|
179
179
|
return 'failed';
|
|
180
180
|
}
|
|
181
181
|
// Optional egress proxy: when the node opts in with `use_proxy`, route the POST
|
|
@@ -186,7 +186,7 @@ async function dispatchHttpPush(args) {
|
|
|
186
186
|
// above; the proxy requires both a url and a secret.
|
|
187
187
|
const proxied = resolveHttpPushProxy(url, config, args.ctx.engine.config?.httpPushProxy);
|
|
188
188
|
if (!proxied.ok) {
|
|
189
|
-
await
|
|
189
|
+
await recordDispatchRetry(args.ctx, args.delivery.id, proxied.reason, { incrementAttempts: true });
|
|
190
190
|
return 'failed';
|
|
191
191
|
}
|
|
192
192
|
const requestUrl = proxied.requestUrl;
|
|
@@ -231,7 +231,7 @@ async function dispatchHttpPush(args) {
|
|
|
231
231
|
.set({
|
|
232
232
|
dispatchAttempts: sql `coalesce(${deliveryRows.dispatchAttempts}, 0) + 1`,
|
|
233
233
|
lastDispatchError: null,
|
|
234
|
-
nextAttemptAt: new Date(Date.now() +
|
|
234
|
+
nextAttemptAt: new Date(Date.now() + DISPATCH_RETRY_DELAY_MS),
|
|
235
235
|
updatedAt: new Date(),
|
|
236
236
|
})
|
|
237
237
|
.where(and(...claimConditions))
|
|
@@ -256,11 +256,11 @@ async function dispatchHttpPush(args) {
|
|
|
256
256
|
// `redirect: 'manual'` surfaces a redirect as a 3xx status (or an
|
|
257
257
|
// opaqueredirect response with status 0); treat both as a hard failure.
|
|
258
258
|
if (response.type === 'opaqueredirect' || (response.status >= 300 && response.status < 400)) {
|
|
259
|
-
await
|
|
259
|
+
await recordDispatchRetry(args.ctx, args.delivery.id, `redirect not allowed (HTTP ${response.status})`);
|
|
260
260
|
return 'failed';
|
|
261
261
|
}
|
|
262
262
|
if (!response.ok) {
|
|
263
|
-
await
|
|
263
|
+
await recordDispatchRetry(args.ctx, args.delivery.id, `HTTP ${response.status}`);
|
|
264
264
|
return 'failed';
|
|
265
265
|
}
|
|
266
266
|
if (ackMode === 'on_2xx') {
|
|
@@ -288,13 +288,13 @@ async function dispatchHttpPush(args) {
|
|
|
288
288
|
return 'acked';
|
|
289
289
|
}
|
|
290
290
|
}
|
|
291
|
-
await
|
|
291
|
+
await recordDispatchRetry(args.ctx, args.delivery.id, 'response ack not signaled');
|
|
292
292
|
return 'failed';
|
|
293
293
|
}
|
|
294
294
|
return 'delivered';
|
|
295
295
|
}
|
|
296
296
|
catch (err) {
|
|
297
|
-
await
|
|
297
|
+
await recordDispatchRetry(args.ctx, args.delivery.id, err instanceof Error ? err.message : 'HTTP delivery failed');
|
|
298
298
|
return 'failed';
|
|
299
299
|
}
|
|
300
300
|
}
|
|
@@ -309,7 +309,20 @@ async function routeOneDeliveryOutcome(ctx, liveLocations, recordedTargets, deli
|
|
|
309
309
|
if (locationType === 'via_node' && locationNodeId && deliveryAdapter === 'ws.node.v1') {
|
|
310
310
|
const providerName = liveLocation?.providerName ?? recordedTarget?.providerName ?? 'default';
|
|
311
311
|
if (!isProviderAgentDeliveryReady(ctx.engine.nodeConnections, ctx.workspaceId, locationNodeId, providerName, delivery.agentId)) {
|
|
312
|
-
|
|
312
|
+
// The provider connection has not marked this identity delivery-ready
|
|
313
|
+
// (cursor negotiation pending). Leave the row queued but stamp it so the
|
|
314
|
+
// skip is observable and a later sweep retries it, instead of the row
|
|
315
|
+
// silently sitting until its mailbox TTL dead-letters it. This is a skip,
|
|
316
|
+
// not a dispatch attempt, so dispatch_attempts is not incremented.
|
|
317
|
+
await recordDispatchRetry(ctx, delivery.id, 'provider connection not delivery-ready for agent');
|
|
318
|
+
console.warn('[delivery.route] provider not delivery-ready; delivery deferred', {
|
|
319
|
+
workspace_id: ctx.workspaceId,
|
|
320
|
+
node_id: locationNodeId,
|
|
321
|
+
provider_name: providerName,
|
|
322
|
+
agent_id: delivery.agentId,
|
|
323
|
+
delivery_id: delivery.id,
|
|
324
|
+
});
|
|
325
|
+
return 'deferred';
|
|
313
326
|
}
|
|
314
327
|
const sent = await ctx.engine.nodeConnections.sendToProvider(ctx.workspaceId, locationNodeId, providerName, buildDeliverFrame({
|
|
315
328
|
delivery_id: delivery.id,
|
|
@@ -322,19 +335,36 @@ async function routeOneDeliveryOutcome(ctx, liveLocations, recordedTargets, deli
|
|
|
322
335
|
}));
|
|
323
336
|
if (sent) {
|
|
324
337
|
await deliveryEngine.markDeliveriesDelivered(ctx.db, ctx.workspaceId, [delivery.id]);
|
|
338
|
+
return 'delivered';
|
|
325
339
|
}
|
|
326
|
-
|
|
340
|
+
// The provider was delivery-ready but the live send did not land (no open
|
|
341
|
+
// socket, the provider detached mid-send, or `socket.send` threw). Leave the
|
|
342
|
+
// row queued but stamp it so the periodic node sweep re-attempts with ~30s
|
|
343
|
+
// spacing, instead of the row sitting silently until its mailbox TTL
|
|
344
|
+
// dead-letters it. Unlike the readiness skip above this is a real dispatch
|
|
345
|
+
// attempt, so it counts toward dispatch_attempts.
|
|
346
|
+
await recordDispatchRetry(ctx, delivery.id, 'node socket send failed', { incrementAttempts: true });
|
|
347
|
+
console.warn('[delivery.route] node send failed; delivery deferred', {
|
|
348
|
+
workspace_id: ctx.workspaceId,
|
|
349
|
+
node_id: locationNodeId,
|
|
350
|
+
provider_name: providerName,
|
|
351
|
+
agent_id: delivery.agentId,
|
|
352
|
+
delivery_id: delivery.id,
|
|
353
|
+
});
|
|
354
|
+
return 'deferred';
|
|
327
355
|
}
|
|
328
356
|
if (locationType === 'via_node' && locationNodeId && nodeKind === 'http_push' && target) {
|
|
329
357
|
const result = await dispatchHttpPush({ ctx, delivery, target, eventType, eventData });
|
|
330
358
|
if (result === 'delivered') {
|
|
331
359
|
await deliveryEngine.markDeliveriesDelivered(ctx.db, ctx.workspaceId, [delivery.id]);
|
|
360
|
+
return 'delivered';
|
|
332
361
|
}
|
|
333
|
-
return;
|
|
362
|
+
return 'deferred';
|
|
334
363
|
}
|
|
335
364
|
// No agent-owned realtime socket exists anymore. If a legacy/unbound row
|
|
336
365
|
// reaches this point, leave it queued so a later node binding/replay can
|
|
337
366
|
// deliver it instead of falsely marking it delivered.
|
|
367
|
+
return 'noop';
|
|
338
368
|
}
|
|
339
369
|
async function routeDeliveryOutcomesForContext(ctx, deliveries, eventType, eventData) {
|
|
340
370
|
if (deliveries.length === 0)
|
|
@@ -346,11 +376,80 @@ async function routeDeliveryOutcomesForContext(ctx, deliveries, eventType, event
|
|
|
346
376
|
export async function routeDeliveryOutcomes(c, deliveries, eventType, eventData, opts = {}) {
|
|
347
377
|
await routeDeliveryOutcomesForContext(routingContextFromHono(c, opts.workspaceId), deliveries, eventType, eventData);
|
|
348
378
|
}
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
379
|
+
/**
|
|
380
|
+
* Redrive a single ws-node agent's queued backlog in ascending `seq` order,
|
|
381
|
+
* serially, stopping at the first row that does not deliver.
|
|
382
|
+
*
|
|
383
|
+
* A `ws.node.v1` deliver frame whose `seq != received_up_to_seq + 1` is treated
|
|
384
|
+
* by the broker as a Gap and is NOT injected (it waits for the missing earlier
|
|
385
|
+
* seq), while the engine's `sendToProvider` returns `true` on a successful
|
|
386
|
+
* socket write — so a naive concurrent/unordered redrive can mark a higher seq
|
|
387
|
+
* "delivered" while the broker silently held it, stranding the row until
|
|
388
|
+
* reconnect replay or the mailbox TTL. To avoid that we always redrive from the
|
|
389
|
+
* agent's LOWEST queued seq regardless of the individual row's `next_attempt_at`
|
|
390
|
+
* due-ness (matching {@link deliverPendingToNode}'s replay ordering): once ANY
|
|
391
|
+
* of the agent's rows is due, the whole queued backlog is re-attempted in order.
|
|
392
|
+
* The moment a row cannot be delivered (readiness skip or failed send —
|
|
393
|
+
* `routeOneDeliveryOutcome` has already stamped it for the next retry) we stop,
|
|
394
|
+
* so a later seq can never outrun an earlier undelivered one.
|
|
395
|
+
*/
|
|
396
|
+
async function redriveWsBacklogForAgent(ctx, agentId, now) {
|
|
397
|
+
const backlog = await deliveryEngine.fetchQueuedWsBacklogEvents(ctx.db, ctx.workspaceId, agentId, { now });
|
|
398
|
+
if (backlog.length === 0)
|
|
399
|
+
return;
|
|
400
|
+
const backlogDeliveries = backlog.map((event) => event.delivery);
|
|
401
|
+
const liveLocations = await resolveLiveLocations(ctx, backlogDeliveries);
|
|
402
|
+
const recordedTargets = await resolveRecordedTargets(ctx, backlogDeliveries);
|
|
403
|
+
for (const event of backlog) {
|
|
404
|
+
const outcome = await routeOneDeliveryOutcome(ctx, liveLocations, recordedTargets, event.delivery, event.eventType, event.eventData);
|
|
405
|
+
if (outcome !== 'delivered')
|
|
406
|
+
break;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Periodic redrive for queued node deliveries whose `next_attempt_at` is due (or
|
|
411
|
+
* was never stamped). Covers http_push rows (their agent never connects to pull)
|
|
412
|
+
* and ws-node rows whose single background dispatch was lost or failed.
|
|
413
|
+
*
|
|
414
|
+
* http_push rows are independent single-shot webhooks with no ordering
|
|
415
|
+
* relationship, so they are dispatched concurrently per row (each re-routed
|
|
416
|
+
* through {@link routeOneDeliveryOutcome}). ws-node rows for the same agent form
|
|
417
|
+
* a monotonic `seq` stream that the broker injects in order, so they are grouped
|
|
418
|
+
* per agent and redriven serially in ascending seq (see
|
|
419
|
+
* {@link redriveWsBacklogForAgent}); different agents (and different nodes) are
|
|
420
|
+
* still processed concurrently. Returns the number of due rows the sweep found.
|
|
421
|
+
*/
|
|
422
|
+
export async function sweepDueNodeDeliveries(engine, opts = {}) {
|
|
423
|
+
const now = opts.now ?? new Date();
|
|
424
|
+
const due = await deliveryEngine.fetchDueNodeDeliveryEvents(engine.db, { ...opts, now });
|
|
425
|
+
const httpPushEvents = [];
|
|
426
|
+
const wsAgents = [];
|
|
427
|
+
const seenWsAgents = new Set();
|
|
428
|
+
for (const event of due) {
|
|
429
|
+
if (event.delivery.routeNodeKind === 'http_push') {
|
|
430
|
+
httpPushEvents.push(event);
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
// Collision-safe key: workspace and agent ids are free-form, so encode the
|
|
434
|
+
// tuple rather than joining on a separator (matches groupByNodeProvider).
|
|
435
|
+
const key = JSON.stringify([event.workspaceId, event.delivery.agentId]);
|
|
436
|
+
if (seenWsAgents.has(key))
|
|
437
|
+
continue;
|
|
438
|
+
seenWsAgents.add(key);
|
|
439
|
+
wsAgents.push({ workspaceId: event.workspaceId, agentId: event.delivery.agentId });
|
|
440
|
+
}
|
|
441
|
+
await Promise.allSettled([
|
|
442
|
+
...httpPushEvents.map((event) => (routeDeliveryOutcomesForContext({ db: engine.db, workspaceId: event.workspaceId, engine }, [event.delivery], event.eventType, event.eventData))),
|
|
443
|
+
...wsAgents.map((agent) => (redriveWsBacklogForAgent({ db: engine.db, workspaceId: agent.workspaceId, engine }, agent.agentId, now))),
|
|
444
|
+
]);
|
|
352
445
|
return due.length;
|
|
353
446
|
}
|
|
447
|
+
/**
|
|
448
|
+
* @deprecated Renamed to {@link sweepDueNodeDeliveries}, which also sweeps queued
|
|
449
|
+
* ws-node rows. Kept as a thin alias because relaycast-cloud's cron imports this
|
|
450
|
+
* name; delete once that host migrates.
|
|
451
|
+
*/
|
|
452
|
+
export const sweepDueHttpPushDeliveries = sweepDueNodeDeliveries;
|
|
354
453
|
async function notifyDeliveryFailuresForContext(ctx, notices) {
|
|
355
454
|
for (const notice of notices) {
|
|
356
455
|
await fanoutToAgentsForContext(ctx, [notice.sender_agent_id], 'delivery.failed', {
|