@intentic/sandbox-contract 1.252.0 → 1.253.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/protocol/peer-dial.d.ts +2 -1
- package/dist/protocol/peer-dial.d.ts.map +1 -1
- package/dist/protocol/peer-dial.js +29 -2
- package/dist/protocol/peer-dial.js.map +1 -1
- package/dist/state/arrival.d.ts +4 -0
- package/dist/state/arrival.d.ts.map +1 -1
- package/dist/state/arrival.js +1 -0
- package/dist/state/arrival.js.map +1 -1
- package/dist/state/definition.d.ts +4 -0
- package/dist/state/definition.d.ts.map +1 -1
- package/dist/state/definition.js +6 -0
- package/dist/state/definition.js.map +1 -1
- package/package.json +4 -4
- package/src/protocol/peer-dial.test.ts +73 -2
- package/src/protocol/peer-dial.ts +61 -5
- package/src/state/arrival.ts +4 -0
- package/src/state/definition.ts +17 -1
|
@@ -27,10 +27,11 @@ export interface PeerDialSpec<S extends SocketLike> {
|
|
|
27
27
|
readonly log: (message: string) => void;
|
|
28
28
|
readonly revoked: () => void;
|
|
29
29
|
}
|
|
30
|
+
export type PeerLinkState = "open" | "connecting" | "closed";
|
|
30
31
|
export interface PeerLink {
|
|
31
32
|
readonly done: Promise<void>;
|
|
32
33
|
readonly stop: (reason?: string) => void;
|
|
33
|
-
readonly state: () =>
|
|
34
|
+
readonly state: () => PeerLinkState;
|
|
34
35
|
}
|
|
35
36
|
export declare const dialPeer: <S extends SocketLike>(spec: PeerDialSpec<S>) => PeerLink;
|
|
36
37
|
//# sourceMappingURL=peer-dial.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-dial.d.ts","sourceRoot":"","sources":["../../src/protocol/peer-dial.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB;aAAK,OAAO,EAAE,IAAK;aAAE,KAAK,EAAE,KAAM;aAAE,QAAQ,EAAE,KAAM;CAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"peer-dial.d.ts","sourceRoot":"","sources":["../../src/protocol/peer-dial.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB;aAAK,OAAO,EAAE,IAAK;aAAE,KAAK,EAAE,KAAM;aAAE,QAAQ,EAAE,KAAM;CAAW,CAAC;AA4B9F,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,iBAAiB,gBAAiB,MAAM,KAAG,MAAoD,CAAC;AAS7G,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAI5B,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5H,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,UAAU;IAG9C,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IAE5G,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEjF,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAErC,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;KAAE,CAAC;IAKhE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAExC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAChC;AAKD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE7D,MAAM,WAAW,QAAQ;IAErB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,aAAa,CAAC;CACvC;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,UAAU,QAAQ,YAAY,CAAC,CAAC,CAAC,KAAG,QAiLtE,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export const PEER_LINK_BACKOFF = { floorMs: 1_000, capMs: 30_000, stableMs: 60_000 };
|
|
2
|
+
const LOUD_ATTEMPTS = 3;
|
|
3
|
+
const QUIET_LOG_MS = 10 * 60_000;
|
|
2
4
|
export const PEER_LINK_SILENCE_HEARTBEATS = 3;
|
|
3
5
|
export const peerLinkSilenceMs = (heartbeatMs) => heartbeatMs * PEER_LINK_SILENCE_HEARTBEATS;
|
|
4
6
|
const UNAUTHORIZED = 1008;
|
|
@@ -13,6 +15,24 @@ export const dialPeer = (spec) => {
|
|
|
13
15
|
const done = new Promise((resolve) => {
|
|
14
16
|
resolveDone = resolve;
|
|
15
17
|
});
|
|
18
|
+
let failures = 0;
|
|
19
|
+
let quietSince = 0;
|
|
20
|
+
const complain = (said, delay) => {
|
|
21
|
+
const every = `retrying every ${Math.round(delay / 1000)}s`;
|
|
22
|
+
if (failures <= LOUD_ATTEMPTS) {
|
|
23
|
+
spec.log(`${said}; reconnecting in ${Math.round(delay / 1000)}s`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (failures === LOUD_ATTEMPTS + 1) {
|
|
27
|
+
quietSince = Date.now();
|
|
28
|
+
spec.log(`${said}; still nothing after ${failures} attempts — ${every}, and saying so at most every ${Math.round(QUIET_LOG_MS / 60_000)} minutes from here`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (Date.now() - quietSince >= QUIET_LOG_MS) {
|
|
32
|
+
quietSince = Date.now();
|
|
33
|
+
spec.log(`${said}; ${failures} failed attempts, ${every}`);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
16
36
|
const open = async () => {
|
|
17
37
|
waiting = true;
|
|
18
38
|
const attempt = await spec.open(stopping.signal);
|
|
@@ -52,7 +72,8 @@ export const dialPeer = (spec) => {
|
|
|
52
72
|
}
|
|
53
73
|
const delay = spec.backoff.next(openedAt === undefined ? 0 : Date.now() - openedAt);
|
|
54
74
|
openedAt = undefined;
|
|
55
|
-
|
|
75
|
+
failures += 1;
|
|
76
|
+
complain(said, delay);
|
|
56
77
|
waiting = true;
|
|
57
78
|
setTimeout(() => void open(), delay);
|
|
58
79
|
};
|
|
@@ -70,6 +91,8 @@ export const dialPeer = (spec) => {
|
|
|
70
91
|
return;
|
|
71
92
|
}
|
|
72
93
|
openedAt = Date.now();
|
|
94
|
+
failures = 0;
|
|
95
|
+
quietSince = 0;
|
|
73
96
|
arm();
|
|
74
97
|
spec.attach(ws);
|
|
75
98
|
const send = (hello) => {
|
|
@@ -100,7 +123,11 @@ export const dialPeer = (spec) => {
|
|
|
100
123
|
}
|
|
101
124
|
drop(`disconnected (${event.code ?? "no code"})`);
|
|
102
125
|
});
|
|
103
|
-
ws.addEventListener("error", () =>
|
|
126
|
+
ws.addEventListener("error", () => {
|
|
127
|
+
if (failures < LOUD_ATTEMPTS) {
|
|
128
|
+
spec.log("connection error");
|
|
129
|
+
}
|
|
130
|
+
});
|
|
104
131
|
};
|
|
105
132
|
void open();
|
|
106
133
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-dial.js","sourceRoot":"","sources":["../../src/protocol/peer-dial.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"peer-dial.js","sourceRoot":"","sources":["../../src/protocol/peer-dial.ts"],"names":[],"mappings":"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"}
|
package/dist/state/arrival.d.ts
CHANGED
|
@@ -121,6 +121,10 @@ export declare const ArrivalReportSchema: z.ZodObject<{
|
|
|
121
121
|
subject: z.ZodString;
|
|
122
122
|
detail: z.ZodString;
|
|
123
123
|
}, z.core.$strip>>;
|
|
124
|
+
presentation: z.ZodOptional<z.ZodObject<{
|
|
125
|
+
name: z.ZodOptional<z.ZodString>;
|
|
126
|
+
image: z.ZodOptional<z.ZodString>;
|
|
127
|
+
}, z.core.$strip>>;
|
|
124
128
|
}, z.core.$strip>;
|
|
125
129
|
export type ArrivalReport = z.infer<typeof ArrivalReportSchema>;
|
|
126
130
|
export declare const ArrivalHostSchema: z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrival.d.ts","sourceRoot":"","sources":["../../src/state/arrival.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,mBAAmB;;;;;EAAyD,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGhE,eAAO,MAAM,qBAAqB;;;EAAiC,CAAC;AACpE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAqB7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAK9D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;iBAa5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAa5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,kBAAkB;;;;iBAM7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"arrival.d.ts","sourceRoot":"","sources":["../../src/state/arrival.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,mBAAmB;;;;;EAAyD,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGhE,eAAO,MAAM,qBAAqB;;;EAAiC,CAAC;AACpE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAqB7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAK9D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;iBAa5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAa5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,kBAAkB;;;;iBAM7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAIhE,eAAO,MAAM,iBAAiB;;;;;;;;iBAM5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAAkD,CAAC;AAGlF,eAAO,MAAM,iBAAiB;;iBAAwC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
package/dist/state/arrival.js
CHANGED
|
@@ -44,6 +44,7 @@ export const ArrivalReportSchema = z.object({
|
|
|
44
44
|
failed: z.array(z.object({ id: z.string(), label: z.string(), error: z.string() })),
|
|
45
45
|
refused: z.array(z.string()),
|
|
46
46
|
needsAction: z.array(NeedsActionSchema),
|
|
47
|
+
presentation: z.object({ name: z.string().optional(), image: z.string().optional() }).optional(),
|
|
47
48
|
});
|
|
48
49
|
export const ArrivalHostSchema = z.object({
|
|
49
50
|
id: z.string(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrival.js","sourceRoot":"","sources":["../../src/state/arrival.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAO9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAI1F,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAKpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IAErC,WAAW;IAEX,MAAM;IAEN,OAAO;IAEP,SAAS;IAET,aAAa;IAEb,YAAY;IAEZ,UAAU;IAEV,QAAQ;IACR,OAAO;IACP,YAAY;IAEZ,QAAQ;CACX,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAEtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,kBAAkB;IAEzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;IAEvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;IAExB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC/B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,mBAAmB;IAE3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IAEjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IAEjC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE;IAE3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAE5B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;CAC1C,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IAEjB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAE1B,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE;CAC9B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE5F,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnF,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"arrival.js","sourceRoot":"","sources":["../../src/state/arrival.ts"],"names":[],"mappings":"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"}
|
|
@@ -538,6 +538,10 @@ export declare const BundleManifestSchema: z.ZodObject<{
|
|
|
538
538
|
sandbox: z.ZodOptional<z.ZodObject<{
|
|
539
539
|
name: z.ZodString;
|
|
540
540
|
}, z.core.$strip>>;
|
|
541
|
+
presentation: z.ZodOptional<z.ZodObject<{
|
|
542
|
+
name: z.ZodOptional<z.ZodString>;
|
|
543
|
+
image: z.ZodOptional<z.ZodString>;
|
|
544
|
+
}, z.core.$strip>>;
|
|
541
545
|
createdAt: z.ZodNumber;
|
|
542
546
|
secrets: z.ZodBoolean;
|
|
543
547
|
repos: z.ZodArray<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/state/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,0BAA0B;;;;kBAOrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAI9E,eAAO,MAAM,yBAAyB;;;kBAKpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,2BAA2B;;;kBAKtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAkBhF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAelC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAGxE,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAIhF,eAAO,MAAM,sBAAsB;;;;;;iBAGjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAOtE,eAAO,MAAM,oBAAoB;;;;;iBAE/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,eAAO,MAAM,sBAAsB;;;;iBAOjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAItE,eAAO,MAAM,4BAA4B;;;;iBAIvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAIlF,eAAO,MAAM,qBAAqB;;;;iBAKhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,eAAO,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/state/definition.ts"],"names":[],"mappings":"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"}
|
package/dist/state/definition.js
CHANGED
|
@@ -62,6 +62,12 @@ export const WorkspaceRemoteSchema = z.object({
|
|
|
62
62
|
export const BundleManifestSchema = z.object({
|
|
63
63
|
version: z.literal(3),
|
|
64
64
|
sandbox: z.object({ name: z.string() }).optional(),
|
|
65
|
+
presentation: z
|
|
66
|
+
.object({
|
|
67
|
+
name: z.string().optional(),
|
|
68
|
+
image: z.string().optional(),
|
|
69
|
+
})
|
|
70
|
+
.optional(),
|
|
65
71
|
createdAt: z.number(),
|
|
66
72
|
secrets: z.boolean(),
|
|
67
73
|
repos: z.array(z.string()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/state/definition.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/state/definition.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/sandbox-contract",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.253.0",
|
|
4
4
|
"description": "oRPC wire contract for the intentic sandbox daemon, shared by the daemon and its browser client",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -185,9 +185,9 @@
|
|
|
185
185
|
}
|
|
186
186
|
},
|
|
187
187
|
"dependencies": {
|
|
188
|
-
"@intentic/constants": "1.
|
|
189
|
-
"@intentic/extension-manifest": "1.
|
|
190
|
-
"@intentic/registry": "1.
|
|
188
|
+
"@intentic/constants": "1.253.0",
|
|
189
|
+
"@intentic/extension-manifest": "1.253.0",
|
|
190
|
+
"@intentic/registry": "1.253.0",
|
|
191
191
|
"@orpc/contract": "1.14.13",
|
|
192
192
|
"tslib": "2.8.1",
|
|
193
193
|
"zod": "4.5.4"
|
|
@@ -35,6 +35,10 @@ class FakeSocket implements SocketLike {
|
|
|
35
35
|
says(): void {
|
|
36
36
|
this.emit("message");
|
|
37
37
|
}
|
|
38
|
+
// What a socket that cannot reach its far end emits before it closes: no code, no reason, just a fault.
|
|
39
|
+
errors(): void {
|
|
40
|
+
this.emit("error");
|
|
41
|
+
}
|
|
38
42
|
private emit(type: string, code?: number): void {
|
|
39
43
|
for (const listener of this.listeners.get(type) ?? []) {
|
|
40
44
|
listener(code === undefined ? {} : { code });
|
|
@@ -57,7 +61,7 @@ const ladder = (delay = 1_000) => {
|
|
|
57
61
|
};
|
|
58
62
|
};
|
|
59
63
|
|
|
60
|
-
const dialling = () => {
|
|
64
|
+
const dialling = (delay?: number) => {
|
|
61
65
|
const sockets: FakeSocket[] = [];
|
|
62
66
|
const attached: FakeSocket[] = [];
|
|
63
67
|
const said: string[] = [];
|
|
@@ -70,7 +74,7 @@ const dialling = () => {
|
|
|
70
74
|
},
|
|
71
75
|
hello: () => ({ type: "hello", token: "iht_test", version: "1.0.0" }),
|
|
72
76
|
attach: (socket) => void attached.push(socket),
|
|
73
|
-
backoff: ladder(),
|
|
77
|
+
backoff: ladder(delay),
|
|
74
78
|
silenceMs: SILENCE_MS,
|
|
75
79
|
log: (message) => void said.push(message),
|
|
76
80
|
revoked,
|
|
@@ -153,6 +157,73 @@ test("a socket that goes silent is abandoned and redialled, though no close ever
|
|
|
153
157
|
}
|
|
154
158
|
});
|
|
155
159
|
|
|
160
|
+
/* THE FAR END THAT IS NEVER COMING BACK, which is not a failure the loop can fix and not one it may narrate
|
|
161
|
+
* forever: a sandbox deleted, a tunnel repointed, a machine left on for a week. Every attempt here errors and
|
|
162
|
+
* closes without ever opening, exactly as a laptop's agent did 1,992 times into a 2.3 MB log. What is asserted
|
|
163
|
+
* is BOTH halves: the log stops repeating, and the dialling does not slow down to achieve it. */
|
|
164
|
+
test("a far end that never answers is reported a few times, then retried quietly at the same cadence", async () => {
|
|
165
|
+
vi.useFakeTimers();
|
|
166
|
+
try {
|
|
167
|
+
const { link, sockets, said } = dialling(60_000);
|
|
168
|
+
for (let attempt = 1; attempt <= 20; attempt += 1) {
|
|
169
|
+
// oxlint-disable-next-line eslint/no-await-in-loop -- one attempt after another is the thing under test
|
|
170
|
+
await vi.waitFor(() => expect(sockets).toHaveLength(attempt));
|
|
171
|
+
sockets.at(-1)?.errors();
|
|
172
|
+
sockets.at(-1)?.drops(1006);
|
|
173
|
+
// oxlint-disable-next-line eslint/no-await-in-loop -- the ladder's own wait, serial by construction
|
|
174
|
+
await vi.advanceTimersByTimeAsync(60_000);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Twenty minutes of a dead link: eight lines, the last of them a count rather than a repetition.
|
|
178
|
+
expect(said).toEqual([
|
|
179
|
+
"connection error",
|
|
180
|
+
"disconnected (1006); reconnecting in 60s",
|
|
181
|
+
"connection error",
|
|
182
|
+
"disconnected (1006); reconnecting in 60s",
|
|
183
|
+
"connection error",
|
|
184
|
+
"disconnected (1006); reconnecting in 60s",
|
|
185
|
+
expect.stringContaining("still nothing after 4 attempts"),
|
|
186
|
+
expect.stringContaining("14 failed attempts"),
|
|
187
|
+
]);
|
|
188
|
+
// The retries themselves are untouched: one dial per ladder delay, still going, plus the one now armed.
|
|
189
|
+
await vi.waitFor(() => expect(sockets).toHaveLength(21));
|
|
190
|
+
|
|
191
|
+
link.stop();
|
|
192
|
+
await link.done;
|
|
193
|
+
} finally {
|
|
194
|
+
vi.useRealTimers();
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
// Quiet is a property of the current outage, not of the link: whatever it hid, the next one starts from nothing.
|
|
199
|
+
test("a link that comes back is loud again about the outage after it", async () => {
|
|
200
|
+
vi.useFakeTimers();
|
|
201
|
+
try {
|
|
202
|
+
const { link, sockets, said } = dialling();
|
|
203
|
+
for (let attempt = 1; attempt <= 5; attempt += 1) {
|
|
204
|
+
// oxlint-disable-next-line eslint/no-await-in-loop -- one attempt after another is the thing under test
|
|
205
|
+
await vi.waitFor(() => expect(sockets).toHaveLength(attempt));
|
|
206
|
+
sockets.at(-1)?.drops(1006);
|
|
207
|
+
// oxlint-disable-next-line eslint/no-await-in-loop -- the ladder's own wait, serial by construction
|
|
208
|
+
await vi.advanceTimersByTimeAsync(1_000);
|
|
209
|
+
}
|
|
210
|
+
const whileQuiet = said.length;
|
|
211
|
+
|
|
212
|
+
await vi.waitFor(() => expect(sockets).toHaveLength(6));
|
|
213
|
+
sockets.at(-1)?.opens();
|
|
214
|
+
await vi.waitFor(() => expect(said.at(-1)).toBe("connected #6"));
|
|
215
|
+
sockets.at(-1)?.drops(1006);
|
|
216
|
+
|
|
217
|
+
expect(said.at(-1)).toBe("disconnected (1006); reconnecting in 1s");
|
|
218
|
+
expect(said).toHaveLength(whileQuiet + 2);
|
|
219
|
+
|
|
220
|
+
link.stop();
|
|
221
|
+
await link.done;
|
|
222
|
+
} finally {
|
|
223
|
+
vi.useRealTimers();
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
|
|
156
227
|
test("a refused enrollment (1008) is never retried and is reported once", async () => {
|
|
157
228
|
vi.useFakeTimers();
|
|
158
229
|
try {
|
|
@@ -5,6 +5,20 @@
|
|
|
5
5
|
// Reconnect backoff: fast floor for a restart, low cap so a reopened laptop is back within a minute.
|
|
6
6
|
export const PEER_LINK_BACKOFF = { floorMs: 1_000, capMs: 30_000, stableMs: 60_000 } as const;
|
|
7
7
|
|
|
8
|
+
/* HOW MUCH A LINK THAT CANNOT BE REACHED IS ALLOWED TO SAY, which is a different question from how often it
|
|
9
|
+
* may try. At the cap above, a far end that is gone for good — a sandbox deleted, a tunnel pointed elsewhere —
|
|
10
|
+
* costs two lines every 30 seconds for as long as the machine is on: 5,760 a day. One laptop's agent had
|
|
11
|
+
* written 1,992 pairs of them, 2.3 MB, and this log is exactly where its owner had been sent to read why a
|
|
12
|
+
* DIFFERENT thing had failed; the answer was in there, under an hour of repetition.
|
|
13
|
+
*
|
|
14
|
+
* The cadence is not the problem and is deliberately untouched — a reopened laptop must be back within a
|
|
15
|
+
* minute, which is what the low cap buys. The REPETITION is. So the first few failures are reported in full,
|
|
16
|
+
* then the loop says so once more to mark that it is going quiet, and after that repeats itself at most once
|
|
17
|
+
* per QUIET_LOG_MS with the attempt count that says how long it has been trying. A link that opens resets all
|
|
18
|
+
* of it: every reconnect is news, and the reconnect line is what reports it. */
|
|
19
|
+
const LOUD_ATTEMPTS = 3;
|
|
20
|
+
const QUIET_LOG_MS = 10 * 60_000;
|
|
21
|
+
|
|
8
22
|
/* HOW LONG A SOCKET MAY SAY NOTHING before this side calls the link dead, as a multiple of the door's own
|
|
9
23
|
* heartbeat: the hub pings every live peer on an interval (peer-hub.ts), so a socket with nothing on it for
|
|
10
24
|
* three heartbeats is not quiet, it is gone.
|
|
@@ -57,12 +71,16 @@ export interface PeerDialSpec<S extends SocketLike> {
|
|
|
57
71
|
readonly revoked: () => void;
|
|
58
72
|
}
|
|
59
73
|
|
|
74
|
+
// What the socket is doing right now. "connecting" covers a dial in flight and a retry waiting on the ladder:
|
|
75
|
+
// nobody should start another. Named, because processes that are not this one report it (a machine agent stamps
|
|
76
|
+
// it for `status`, which otherwise has only the link list on disk and no idea whether any of it is up).
|
|
77
|
+
export type PeerLinkState = "open" | "connecting" | "closed";
|
|
78
|
+
|
|
60
79
|
export interface PeerLink {
|
|
61
80
|
// Resolves when the loop is asked to stop or refused for good; never rejects, a connection error is a retry.
|
|
62
81
|
readonly done: Promise<void>;
|
|
63
82
|
readonly stop: (reason?: string) => void;
|
|
64
|
-
|
|
65
|
-
readonly state: () => "open" | "connecting" | "closed";
|
|
83
|
+
readonly state: () => PeerLinkState;
|
|
66
84
|
}
|
|
67
85
|
|
|
68
86
|
export const dialPeer = <S extends SocketLike>(spec: PeerDialSpec<S>): PeerLink => {
|
|
@@ -77,6 +95,32 @@ export const dialPeer = <S extends SocketLike>(spec: PeerDialSpec<S>): PeerLink
|
|
|
77
95
|
const done = new Promise<void>((resolve) => {
|
|
78
96
|
resolveDone = resolve;
|
|
79
97
|
});
|
|
98
|
+
// Consecutive attempts that have failed since this link was last open, and when the loop last complained out
|
|
99
|
+
// loud: between them they are the whole of the quiet rule above.
|
|
100
|
+
let failures = 0;
|
|
101
|
+
let quietSince = 0;
|
|
102
|
+
|
|
103
|
+
/* What ONE failed attempt is allowed to say. Three sentences rather than one repeated forever: the first few
|
|
104
|
+
* failures in full, then the line that marks the loop going quiet (so a reader who sees it knows the retries
|
|
105
|
+
* continue unlogged), then a complaint carrying the attempt count at most once per window. */
|
|
106
|
+
const complain = (said: string, delay: number): void => {
|
|
107
|
+
const every = `retrying every ${Math.round(delay / 1000)}s`;
|
|
108
|
+
if (failures <= LOUD_ATTEMPTS) {
|
|
109
|
+
spec.log(`${said}; reconnecting in ${Math.round(delay / 1000)}s`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (failures === LOUD_ATTEMPTS + 1) {
|
|
113
|
+
quietSince = Date.now();
|
|
114
|
+
spec.log(
|
|
115
|
+
`${said}; still nothing after ${failures} attempts — ${every}, and saying so at most every ${Math.round(QUIET_LOG_MS / 60_000)} minutes from here`,
|
|
116
|
+
);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (Date.now() - quietSince >= QUIET_LOG_MS) {
|
|
120
|
+
quietSince = Date.now();
|
|
121
|
+
spec.log(`${said}; ${failures} failed attempts, ${every}`);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
80
124
|
|
|
81
125
|
const open = async (): Promise<void> => {
|
|
82
126
|
waiting = true;
|
|
@@ -123,7 +167,8 @@ export const dialPeer = <S extends SocketLike>(spec: PeerDialSpec<S>): PeerLink
|
|
|
123
167
|
}
|
|
124
168
|
const delay = spec.backoff.next(openedAt === undefined ? 0 : Date.now() - openedAt);
|
|
125
169
|
openedAt = undefined;
|
|
126
|
-
|
|
170
|
+
failures += 1;
|
|
171
|
+
complain(said, delay);
|
|
127
172
|
waiting = true;
|
|
128
173
|
setTimeout(() => void open(), delay);
|
|
129
174
|
};
|
|
@@ -149,6 +194,10 @@ export const dialPeer = <S extends SocketLike>(spec: PeerDialSpec<S>): PeerLink
|
|
|
149
194
|
return; // abandoned mid-connect: this socket is already closed and its replacement is on the ladder
|
|
150
195
|
}
|
|
151
196
|
openedAt = Date.now();
|
|
197
|
+
// A link that is up owes nothing to the failures behind it: the next outage is news again, and the
|
|
198
|
+
// "connected to …" line this open is about to log is what reports the recovery.
|
|
199
|
+
failures = 0;
|
|
200
|
+
quietSince = 0;
|
|
152
201
|
arm();
|
|
153
202
|
spec.attach(ws);
|
|
154
203
|
const send = (hello: Record<string, unknown>): void => {
|
|
@@ -184,8 +233,15 @@ export const dialPeer = <S extends SocketLike>(spec: PeerDialSpec<S>): PeerLink
|
|
|
184
233
|
drop(`disconnected (${event.code ?? "no code"})`);
|
|
185
234
|
});
|
|
186
235
|
|
|
187
|
-
|
|
188
|
-
|
|
236
|
+
/* Always followed by a close event that owns the retry; this only records a cause the close code can't
|
|
237
|
+
* carry, so it is silenced with the rest once the loop goes quiet — it is half of every repeated pair in
|
|
238
|
+
* a dead link's log, and it says nothing the drop line beside it does not. The attempt that finally
|
|
239
|
+
* reconnects is loud again, this line included. */
|
|
240
|
+
ws.addEventListener("error", () => {
|
|
241
|
+
if (failures < LOUD_ATTEMPTS) {
|
|
242
|
+
spec.log("connection error");
|
|
243
|
+
}
|
|
244
|
+
});
|
|
189
245
|
};
|
|
190
246
|
|
|
191
247
|
void open();
|
package/src/state/arrival.ts
CHANGED
|
@@ -89,6 +89,10 @@ export const ArrivalReportSchema = z.object({
|
|
|
89
89
|
failed: z.array(z.object({ id: z.string(), label: z.string(), error: z.string() })),
|
|
90
90
|
refused: z.array(z.string()),
|
|
91
91
|
needsAction: z.array(NeedsActionSchema),
|
|
92
|
+
// The source's presentation, when the artifact carried it: what its owner called it and its switcher logo. The
|
|
93
|
+
// daemon cannot apply these itself — they are platform rows, and it holds no owner session — so they are handed
|
|
94
|
+
// back for the caller that does. Absent for every artifact that carries none.
|
|
95
|
+
presentation: z.object({ name: z.string().optional(), image: z.string().optional() }).optional(),
|
|
92
96
|
});
|
|
93
97
|
export type ArrivalReport = z.infer<typeof ArrivalReportSchema>;
|
|
94
98
|
|
package/src/state/definition.ts
CHANGED
|
@@ -128,8 +128,24 @@ export type WorkspaceRemote = z.infer<typeof WorkspaceRemoteSchema>;
|
|
|
128
128
|
export const BundleManifestSchema = z.object({
|
|
129
129
|
// Bumped when the layout changes in a way an older daemon would misread; refused rather than guessed at.
|
|
130
130
|
version: z.literal(3),
|
|
131
|
-
// Where it came from, for the report's first line; never used to authorize anything.
|
|
131
|
+
// Where it came from, for the report's first line; never used to authorize anything. The CONTAINER's name
|
|
132
|
+
// (SANDBOX_NAME, `intentic-sandbox-sandbox-<id>`), so the block is absent on a headless daemon that has none.
|
|
132
133
|
sandbox: z.object({ name: z.string() }).optional(),
|
|
134
|
+
// How the source presented itself: what its owner called it and the logo the switcher draws. Its own key rather
|
|
135
|
+
// than two more fields on `sandbox`, because these are platform rows (`sandbox.name` / `sandbox.image`) held
|
|
136
|
+
// nowhere under /work or /history, and either can be known when the container name is not — hanging them off
|
|
137
|
+
// `sandbox` would have made a sandbox's presentation ride on an unrelated string being set, and loosening that
|
|
138
|
+
// block's `name` to allow it would have shrunk a shipped surface. Without this a move landed a workspace called
|
|
139
|
+
// "workspace" wearing a "W" monogram, the source's identity left behind. A bundle is the only artifact that
|
|
140
|
+
// crosses both, so it carries them and the report hands them straight back, in this same shape, for the caller
|
|
141
|
+
// holding the owner session to apply.
|
|
142
|
+
presentation: z
|
|
143
|
+
.object({
|
|
144
|
+
name: z.string().optional(),
|
|
145
|
+
// A data URL, same shape and 150 KB ceiling the platform's own ImageDataUrlSchema enforces on the way in.
|
|
146
|
+
image: z.string().optional(),
|
|
147
|
+
})
|
|
148
|
+
.optional(),
|
|
133
149
|
createdAt: z.number(),
|
|
134
150
|
// The owner's export choice, used only to explain gaps; the restorer re-derives from the manifests instead.
|
|
135
151
|
secrets: z.boolean(),
|