durable-actors 0.7.16 → 0.8.1
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/README.md +6 -6
- package/bin/durable-actors.js +2 -0
- package/dist/actor/actor.d.ts +20 -12
- package/dist/actor/actor.d.ts.map +1 -1
- package/dist/actor/actor.js +42 -35
- package/dist/actor/actor.js.map +1 -1
- package/dist/actor/alarm.d.ts +19 -0
- package/dist/actor/alarm.d.ts.map +1 -0
- package/dist/actor/alarm.js +2 -0
- package/dist/actor/alarm.js.map +1 -0
- package/dist/actor/context.d.ts +25 -0
- package/dist/actor/context.d.ts.map +1 -0
- package/dist/actor/context.js +83 -0
- package/dist/actor/context.js.map +1 -0
- package/dist/actor/database.d.ts +5 -4
- package/dist/actor/database.d.ts.map +1 -1
- package/dist/actor/database.js +9 -19
- package/dist/actor/database.js.map +1 -1
- package/dist/actor/decorators.d.ts +7 -2
- package/dist/actor/decorators.d.ts.map +1 -1
- package/dist/actor/decorators.js +11 -2
- package/dist/actor/decorators.js.map +1 -1
- package/dist/actor/resource.d.ts +9 -0
- package/dist/actor/resource.d.ts.map +1 -0
- package/dist/actor/resource.js +2 -0
- package/dist/actor/resource.js.map +1 -0
- package/dist/actor/schema.d.ts +3 -1
- package/dist/actor/schema.d.ts.map +1 -1
- package/dist/actor/schema.js.map +1 -1
- package/dist/actor/unchecked.d.ts +12 -0
- package/dist/actor/unchecked.d.ts.map +1 -0
- package/dist/actor/unchecked.js +8 -0
- package/dist/actor/unchecked.js.map +1 -0
- package/dist/cli/dev.d.ts.map +1 -1
- package/dist/cli/dev.js +13 -42
- package/dist/cli/dev.js.map +1 -1
- package/dist/cli/inspect.d.ts +73 -0
- package/dist/cli/inspect.d.ts.map +1 -0
- package/dist/cli/inspect.js +132 -0
- package/dist/cli/inspect.js.map +1 -0
- package/dist/cli/python.d.ts.map +1 -1
- package/dist/cli/python.js +0 -1
- package/dist/cli/python.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +11 -18
- package/dist/cli.js.map +1 -1
- package/dist/client-runtime/http.d.ts +1 -1
- package/dist/client-runtime/http.d.ts.map +1 -1
- package/dist/client-runtime/http.js +1 -1
- package/dist/client-runtime/http.js.map +1 -1
- package/dist/client-runtime/stub.d.ts.map +1 -1
- package/dist/client-runtime/stub.js +11 -1
- package/dist/client-runtime/stub.js.map +1 -1
- package/dist/compiler/actor-compiler.d.ts +4 -2
- package/dist/compiler/actor-compiler.d.ts.map +1 -1
- package/dist/compiler/actor-compiler.js +48 -13
- package/dist/compiler/actor-compiler.js.map +1 -1
- package/dist/compiler/declarations.d.ts.map +1 -1
- package/dist/compiler/declarations.js +2678 -183
- package/dist/compiler/declarations.js.map +7 -1
- package/dist/compiler/features/atomicity.d.ts +9 -0
- package/dist/compiler/features/atomicity.d.ts.map +1 -0
- package/dist/compiler/features/atomicity.js +44 -0
- package/dist/compiler/features/atomicity.js.map +1 -0
- package/dist/compiler/features/interleave.d.ts +9 -0
- package/dist/compiler/features/{reentrancy.d.ts.map → interleave.d.ts.map} +1 -1
- package/dist/compiler/features/{reentrancy.js → interleave.js} +13 -13
- package/dist/compiler/features/{reentrancy.js.map → interleave.js.map} +1 -1
- package/dist/compiler/features/persistence.d.ts +2 -5
- package/dist/compiler/features/persistence.d.ts.map +1 -1
- package/dist/compiler/features/persistence.js +5 -83
- package/dist/compiler/features/persistence.js.map +1 -1
- package/dist/compiler/features/resource.d.ts +5 -0
- package/dist/compiler/features/resource.d.ts.map +1 -0
- package/dist/compiler/features/resource.js +18 -0
- package/dist/compiler/features/resource.js.map +1 -0
- package/dist/compiler/fieldParsing.d.ts +12 -0
- package/dist/compiler/fieldParsing.d.ts.map +1 -0
- package/dist/compiler/fieldParsing.js +106 -0
- package/dist/compiler/fieldParsing.js.map +1 -0
- package/dist/compiler/json-schema.d.ts +2 -2
- package/dist/compiler/json-schema.d.ts.map +1 -1
- package/dist/compiler/json-schema.js +22 -14
- package/dist/compiler/json-schema.js.map +1 -1
- package/dist/compiler/rpc-contract.d.ts +1 -1
- package/dist/compiler/rpc-contract.d.ts.map +1 -1
- package/dist/compiler/rpc-contract.js +21 -11
- package/dist/compiler/rpc-contract.js.map +1 -1
- package/dist/compiler/socket-contract.d.ts +1 -1
- package/dist/compiler/socket-contract.d.ts.map +1 -1
- package/dist/compiler/socket-contract.js +3 -3
- package/dist/compiler/socket-contract.js.map +1 -1
- package/dist/compiler/types.d.ts +13 -3
- package/dist/compiler/types.d.ts.map +1 -1
- package/dist/compiler/types.js +3 -1
- package/dist/compiler/types.js.map +1 -1
- package/dist/compiler/validate-public-contract.d.ts.map +1 -1
- package/dist/compiler/validate-public-contract.js +12 -1
- package/dist/compiler/validate-public-contract.js.map +1 -1
- package/dist/generated/client-runtime.d.ts.map +1 -1
- package/dist/generated/client-runtime.js +1 -1
- package/dist/generated/client-runtime.js.map +1 -1
- package/dist/host/actor-host.d.ts.map +1 -1
- package/dist/host/actor-host.js +44 -50
- package/dist/host/actor-host.js.map +1 -1
- package/dist/host/actor-runtime.d.ts +7 -8
- package/dist/host/actor-runtime.d.ts.map +1 -1
- package/dist/host/actor-runtime.js +80 -79
- package/dist/host/actor-runtime.js.map +1 -1
- package/dist/host/actor-worker.js +10 -27
- package/dist/host/actor-worker.js.map +1 -1
- package/dist/host/database-bridge.d.ts +16 -0
- package/dist/host/database-bridge.d.ts.map +1 -0
- package/dist/host/database-bridge.js +29 -0
- package/dist/host/database-bridge.js.map +1 -0
- package/dist/host/database.d.ts +86 -0
- package/dist/host/database.d.ts.map +1 -0
- package/dist/host/database.js +87 -0
- package/dist/host/database.js.map +1 -0
- package/dist/host/generic-host.js +1 -1
- package/dist/host/persisted-fields.d.ts +7 -0
- package/dist/host/persisted-fields.d.ts.map +1 -0
- package/dist/host/persisted-fields.js +29 -0
- package/dist/host/persisted-fields.js.map +1 -0
- package/dist/host/protocol.d.ts +55 -131
- package/dist/host/protocol.d.ts.map +1 -1
- package/dist/host/protocol.js +28 -28
- package/dist/host/protocol.js.map +1 -1
- package/dist/host/types.d.ts +8 -9
- package/dist/host/types.d.ts.map +1 -1
- package/dist/host/worker-supervisor.d.ts +32 -30
- package/dist/host/worker-supervisor.d.ts.map +1 -1
- package/dist/host/worker-supervisor.js +246 -230
- package/dist/host/worker-supervisor.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/projectSdk.js +1 -1
- package/dist/projectSdk.js.map +1 -1
- package/dist/templates/actor/README.md +7 -9
- package/dist/templates/actor/bunfig +2 -0
- package/dist/templates/actor/package.json +6 -3
- package/dist/templates/ai-chat/README.md +8 -8
- package/dist/templates/ai-chat/bunfig +2 -0
- package/dist/templates/ai-chat/package.json +7 -5
- package/dist/templates/ai-chat/src/actors.ts +1 -1
- package/dist/templates/chat/README.md +8 -8
- package/dist/templates/chat/bunfig +2 -0
- package/dist/templates/chat/package.json +7 -5
- package/dist/templates/chat/src/actors.ts +1 -1
- package/dist/templates/documents/README.md +8 -8
- package/dist/templates/documents/bunfig +2 -0
- package/dist/templates/documents/package.json +7 -5
- package/dist/templates/documents/src/actors.ts +1 -1
- package/package.json +110 -108
- package/dist/cli/actor-source-watcher.d.ts +0 -25
- package/dist/cli/actor-source-watcher.d.ts.map +0 -1
- package/dist/cli/actor-source-watcher.js +0 -129
- package/dist/cli/actor-source-watcher.js.map +0 -1
- package/dist/compiler/features/reentrancy.d.ts +0 -9
- package/dist/host/sqlite.d.ts +0 -49
- package/dist/host/sqlite.d.ts.map +0 -1
- package/dist/host/sqlite.js +0 -159
- package/dist/host/sqlite.js.map +0 -1
- package/dist/templates/actor/pnpm-workspace.yaml +0 -2
- package/dist/templates/ai-chat/pnpm-workspace.yaml +0 -2
- package/dist/templates/chat/pnpm-workspace.yaml +0 -2
- package/dist/templates/documents/pnpm-workspace.yaml +0 -2
- package/dist/templates/python/README.md +0 -7
- package/dist/templates/python/gitignore +0 -6
- package/dist/templates/python/package.json +0 -11
- package/dist/templates/python/pnpm-workspace.yaml +0 -2
- package/dist/templates/python/pyproject.toml +0 -8
- package/dist/templates/python/src/actors.py +0 -9
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { ActorAlarmState, ActorAlarmStorage } from "../actor/alarm.js";
|
|
2
|
+
import type { ActorDatabase, SqliteValue } from "../actor/database.js";
|
|
3
|
+
import type { JsonObject, JsonValue } from "../json.js";
|
|
4
|
+
type DatabaseValue = {
|
|
5
|
+
readonly type: "null";
|
|
6
|
+
} | {
|
|
7
|
+
readonly type: "integer";
|
|
8
|
+
readonly value: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly type: "real";
|
|
11
|
+
readonly value: number;
|
|
12
|
+
} | {
|
|
13
|
+
readonly type: "text";
|
|
14
|
+
readonly value: string;
|
|
15
|
+
} | {
|
|
16
|
+
readonly type: "blob";
|
|
17
|
+
readonly value: string;
|
|
18
|
+
};
|
|
19
|
+
type DatabaseCall = {
|
|
20
|
+
readonly op: "exec";
|
|
21
|
+
readonly sql: string;
|
|
22
|
+
readonly bindings: DatabaseValue[];
|
|
23
|
+
readonly immediate: boolean;
|
|
24
|
+
} | {
|
|
25
|
+
readonly op: "fields";
|
|
26
|
+
} | {
|
|
27
|
+
readonly op: "initialize_fields";
|
|
28
|
+
readonly fields: JsonObject;
|
|
29
|
+
} | {
|
|
30
|
+
readonly op: "persist_field";
|
|
31
|
+
readonly name: string;
|
|
32
|
+
readonly value: JsonValue;
|
|
33
|
+
readonly immediate: boolean;
|
|
34
|
+
} | {
|
|
35
|
+
readonly op: "delete_field";
|
|
36
|
+
readonly name: string;
|
|
37
|
+
readonly immediate: boolean;
|
|
38
|
+
} | {
|
|
39
|
+
readonly op: "replace_fields";
|
|
40
|
+
readonly fields: JsonObject;
|
|
41
|
+
} | {
|
|
42
|
+
readonly op: "alarm";
|
|
43
|
+
} | {
|
|
44
|
+
readonly op: "set_alarm";
|
|
45
|
+
readonly timestamp_ms: number;
|
|
46
|
+
readonly immediate: boolean;
|
|
47
|
+
} | {
|
|
48
|
+
readonly op: "delete_alarm";
|
|
49
|
+
readonly immediate: boolean;
|
|
50
|
+
} | {
|
|
51
|
+
readonly op: "commit";
|
|
52
|
+
} | {
|
|
53
|
+
readonly op: "rollback";
|
|
54
|
+
};
|
|
55
|
+
type DatabaseResult = {
|
|
56
|
+
readonly type: "rows";
|
|
57
|
+
readonly columns: string[];
|
|
58
|
+
readonly rows: DatabaseValue[][];
|
|
59
|
+
} | {
|
|
60
|
+
readonly type: "fields";
|
|
61
|
+
readonly fields: JsonObject;
|
|
62
|
+
} | {
|
|
63
|
+
readonly type: "alarm";
|
|
64
|
+
readonly timestamp_ms: number | null;
|
|
65
|
+
} | {
|
|
66
|
+
readonly type: "done";
|
|
67
|
+
};
|
|
68
|
+
type DatabaseTransport = (call: DatabaseCall) => DatabaseResult;
|
|
69
|
+
declare class DatabaseCommitError extends Error {
|
|
70
|
+
}
|
|
71
|
+
declare class DatabaseProxy implements ActorDatabase, ActorAlarmStorage {
|
|
72
|
+
private readonly transport;
|
|
73
|
+
constructor(transport: DatabaseTransport);
|
|
74
|
+
exec<Row extends object>(sql: string, ...bindings: SqliteValue[]): Row[];
|
|
75
|
+
fields(): JsonObject;
|
|
76
|
+
getAlarmState(): ActorAlarmState;
|
|
77
|
+
setAlarm(timestampMs: number): void;
|
|
78
|
+
deleteAlarm(): void;
|
|
79
|
+
initializeFields(fields: JsonObject): void;
|
|
80
|
+
persistField(name: string, value: JsonValue | undefined): void;
|
|
81
|
+
commit(): void;
|
|
82
|
+
rollback(): void;
|
|
83
|
+
}
|
|
84
|
+
export { DatabaseCommitError, DatabaseProxy };
|
|
85
|
+
export type { DatabaseCall, DatabaseResult, DatabaseTransport, DatabaseValue };
|
|
86
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/host/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { actorDatabaseMode } from "../actor/database.js";
|
|
2
|
+
import { errorMessage } from "../errors.js";
|
|
3
|
+
class DatabaseCommitError extends Error {
|
|
4
|
+
}
|
|
5
|
+
class DatabaseProxy {
|
|
6
|
+
transport;
|
|
7
|
+
constructor(transport) {
|
|
8
|
+
this.transport = transport;
|
|
9
|
+
}
|
|
10
|
+
exec(sql, ...bindings) {
|
|
11
|
+
const result = this.transport({ op: "exec", sql, bindings: bindings.map(encode), immediate: immediate() });
|
|
12
|
+
if (result.type !== "rows")
|
|
13
|
+
throw unexpected(result);
|
|
14
|
+
return result.rows.map(row => Object.fromEntries(row.map((value, index) => [result.columns[index], decode(value)])));
|
|
15
|
+
}
|
|
16
|
+
fields() {
|
|
17
|
+
const result = this.transport({ op: "fields" });
|
|
18
|
+
if (result.type !== "fields")
|
|
19
|
+
throw unexpected(result);
|
|
20
|
+
return result.fields;
|
|
21
|
+
}
|
|
22
|
+
getAlarmState() {
|
|
23
|
+
const result = this.transport({ op: "alarm" });
|
|
24
|
+
if (result.type !== "alarm")
|
|
25
|
+
throw unexpected(result);
|
|
26
|
+
return { timestampMs: result.timestamp_ms };
|
|
27
|
+
}
|
|
28
|
+
setAlarm(timestampMs) {
|
|
29
|
+
this.transport({ op: "set_alarm", timestamp_ms: timestampMs, immediate: immediate() });
|
|
30
|
+
}
|
|
31
|
+
deleteAlarm() {
|
|
32
|
+
this.transport({ op: "delete_alarm", immediate: immediate() });
|
|
33
|
+
}
|
|
34
|
+
initializeFields(fields) {
|
|
35
|
+
this.transport({ op: "initialize_fields", fields });
|
|
36
|
+
}
|
|
37
|
+
persistField(name, value) {
|
|
38
|
+
this.transport(value === undefined
|
|
39
|
+
? { op: "delete_field", name, immediate: immediate() }
|
|
40
|
+
: { op: "persist_field", name, value, immediate: immediate() });
|
|
41
|
+
}
|
|
42
|
+
commit() {
|
|
43
|
+
try {
|
|
44
|
+
this.transport({ op: "commit" });
|
|
45
|
+
}
|
|
46
|
+
catch (cause) {
|
|
47
|
+
throw new DatabaseCommitError(`failed to replicate actor SQLite commit: ${errorMessage(cause)}`, { cause });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
rollback() {
|
|
51
|
+
this.transport({ op: "rollback" });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function immediate() {
|
|
55
|
+
return actorDatabaseMode() === "immediate";
|
|
56
|
+
}
|
|
57
|
+
function encode(value) {
|
|
58
|
+
if (value === null)
|
|
59
|
+
return { type: "null" };
|
|
60
|
+
if (typeof value === "bigint")
|
|
61
|
+
return { type: "integer", value: value.toString() };
|
|
62
|
+
if (typeof value === "number")
|
|
63
|
+
return Number.isInteger(value) ? { type: "integer", value: value.toString() } : { type: "real", value };
|
|
64
|
+
if (typeof value === "string")
|
|
65
|
+
return { type: "text", value };
|
|
66
|
+
return { type: "blob", value: Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString("base64") };
|
|
67
|
+
}
|
|
68
|
+
function decode(value) {
|
|
69
|
+
switch (value.type) {
|
|
70
|
+
case "null":
|
|
71
|
+
return null;
|
|
72
|
+
case "integer": {
|
|
73
|
+
const integer = BigInt(value.value);
|
|
74
|
+
return Number.isSafeInteger(Number(integer)) ? Number(integer) : integer;
|
|
75
|
+
}
|
|
76
|
+
case "real":
|
|
77
|
+
case "text":
|
|
78
|
+
return value.value;
|
|
79
|
+
case "blob":
|
|
80
|
+
return new Uint8Array(Buffer.from(value.value, "base64"));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function unexpected(result) {
|
|
84
|
+
return new Error(`unexpected actor database result ${result.type}`);
|
|
85
|
+
}
|
|
86
|
+
export { DatabaseCommitError, DatabaseProxy };
|
|
87
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/host/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ async function runGenericHost() {
|
|
|
10
10
|
const settings = parseHostSettings(process.env);
|
|
11
11
|
const socket = await connectSocket(settings.socketPath);
|
|
12
12
|
const assignment = readAssignment(socket);
|
|
13
|
-
socket.write(`${JSON.stringify({ type: "warm", protocol:
|
|
13
|
+
socket.write(`${JSON.stringify({ type: "warm", protocol: 28 })}\n`);
|
|
14
14
|
const { entrypoint, environment } = await assignment;
|
|
15
15
|
await access(entrypoint);
|
|
16
16
|
let available = true;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RuntimeActorContext } from "../actor/context.js";
|
|
2
|
+
import type { ActorSchema } from "../actor/schema.js";
|
|
3
|
+
import type { DatabaseProxy } from "./database.js";
|
|
4
|
+
declare function bindPersistedFields(instance: object, context: RuntimeActorContext, schema: ActorSchema, database: DatabaseProxy): void;
|
|
5
|
+
declare function isPersistedField(instance: object, name: string, descriptor: PropertyDescriptor): boolean;
|
|
6
|
+
export { bindPersistedFields, isPersistedField };
|
|
7
|
+
//# sourceMappingURL=persisted-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persisted-fields.d.ts","sourceRoot":"","sources":["../../src/host/persisted-fields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElD,iBAAS,mBAAmB,CACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,aAAa,GACxB,IAAI,CAkBN;AAED,iBAAS,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAGjG;AAED,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { actorContext } from "../actor/actor.js";
|
|
2
|
+
import { Persistence } from "../actor/schema.js";
|
|
3
|
+
import { cloneJsonObject } from "../json.js";
|
|
4
|
+
function bindPersistedFields(instance, context, schema, database) {
|
|
5
|
+
for (const field of schema.fields) {
|
|
6
|
+
if (field.persistence !== Persistence.Persisted || !Object.hasOwn(instance, field.name))
|
|
7
|
+
continue;
|
|
8
|
+
let value = Reflect.get(instance, field.name);
|
|
9
|
+
const descriptor = {
|
|
10
|
+
configurable: true,
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: () => value,
|
|
13
|
+
set: next => {
|
|
14
|
+
context.assertAccess();
|
|
15
|
+
const state = cloneJsonObject({ [field.name]: next }, "actor state");
|
|
16
|
+
database.persistField(field.name, state[field.name]);
|
|
17
|
+
value = next;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(instance, field.name, descriptor);
|
|
21
|
+
context.persistedFields.set(field.name, descriptor);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function isPersistedField(instance, name, descriptor) {
|
|
25
|
+
const bound = actorContext(instance)?.persistedFields.get(name);
|
|
26
|
+
return bound !== undefined && bound.get === descriptor.get && bound.set === descriptor.set;
|
|
27
|
+
}
|
|
28
|
+
export { bindPersistedFields, isPersistedField };
|
|
29
|
+
//# sourceMappingURL=persisted-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persisted-fields.js","sourceRoot":"","sources":["../../src/host/persisted-fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAI5C,SAAS,mBAAmB,CACxB,QAAgB,EAChB,OAA4B,EAC5B,MAAmB,EACnB,QAAuB;IAEvB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;YAAE,SAAQ;QACjG,IAAI,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACtD,MAAM,UAAU,GAAuB;YACnC,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,IAAI;YAChB,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK;YAChB,GAAG,EAAE,IAAI,CAAC,EAAE;gBACR,OAAO,CAAC,YAAY,EAAE,CAAA;gBACtB,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAA;gBACpE,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;gBACpD,KAAK,GAAG,IAAI,CAAA;YAChB,CAAC;SACJ,CAAA;QACD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACvD,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IACvD,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB,EAAE,IAAY,EAAE,UAA8B;IACpF,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/D,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAA;AAC9F,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAA"}
|
package/dist/host/protocol.d.ts
CHANGED
|
@@ -2,33 +2,19 @@ import { z } from "zod";
|
|
|
2
2
|
import type { ActorIdentity } from "../actor/identity.js";
|
|
3
3
|
import type { SocketEffect, SocketLookup, SocketQuery } from "../actor/socketProtocol.js";
|
|
4
4
|
import type { JsonValue } from "../json.js";
|
|
5
|
-
import type {
|
|
5
|
+
import type { DatabaseRequest } from "./database-bridge.js";
|
|
6
|
+
import type { DatabaseCall } from "./database.js";
|
|
6
7
|
declare function parseActorSessionServerMessage(document: string): ActorSessionServerMessage;
|
|
7
8
|
declare function failedReply(code: string, message: string): FailedReply;
|
|
8
9
|
declare const invokeCommandSchema: z.ZodObject<{
|
|
9
10
|
type: z.ZodLiteral<"invoke">;
|
|
10
11
|
request_id: z.ZodString;
|
|
11
|
-
actor: z.ZodObject<{
|
|
12
|
-
project_id: z.ZodString;
|
|
13
|
-
actor_name: z.ZodString;
|
|
14
|
-
actor_id: z.ZodString;
|
|
15
|
-
}, z.core.$strict>;
|
|
16
12
|
method: z.ZodString;
|
|
17
13
|
args: z.ZodArray<z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>;
|
|
18
|
-
sqlite: z.ZodOptional<z.ZodObject<{
|
|
19
|
-
txid: z.ZodNumber;
|
|
20
|
-
path: z.ZodOptional<z.ZodString>;
|
|
21
|
-
}, z.core.$strip>>;
|
|
22
|
-
resident_only: z.ZodOptional<z.ZodBoolean>;
|
|
23
14
|
}, z.core.$strip>;
|
|
24
15
|
declare const websocketEventCommandSchema: z.ZodObject<{
|
|
25
16
|
type: z.ZodLiteral<"websocket_event">;
|
|
26
17
|
request_id: z.ZodString;
|
|
27
|
-
actor: z.ZodObject<{
|
|
28
|
-
project_id: z.ZodString;
|
|
29
|
-
actor_name: z.ZodString;
|
|
30
|
-
actor_id: z.ZodString;
|
|
31
|
-
}, z.core.$strict>;
|
|
32
18
|
event: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
33
19
|
type: z.ZodLiteral<"connect">;
|
|
34
20
|
connection: z.ZodObject<{
|
|
@@ -62,56 +48,19 @@ declare const websocketEventCommandSchema: z.ZodObject<{
|
|
|
62
48
|
metadata: z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>;
|
|
63
49
|
tags: z.ZodArray<z.ZodString>;
|
|
64
50
|
}, z.core.$strip>>;
|
|
65
|
-
sqlite: z.ZodOptional<z.ZodObject<{
|
|
66
|
-
txid: z.ZodNumber;
|
|
67
|
-
path: z.ZodOptional<z.ZodString>;
|
|
68
|
-
}, z.core.$strip>>;
|
|
69
|
-
resident_only: z.ZodOptional<z.ZodBoolean>;
|
|
70
51
|
}, z.core.$strip>;
|
|
71
52
|
declare const evictCommandSchema: z.ZodObject<{
|
|
72
53
|
type: z.ZodLiteral<"evict">;
|
|
73
|
-
|
|
74
|
-
project_id: z.ZodString;
|
|
75
|
-
actor_name: z.ZodString;
|
|
76
|
-
actor_id: z.ZodString;
|
|
77
|
-
}, z.core.$strict>;
|
|
78
|
-
}, z.core.$strip>;
|
|
79
|
-
declare const hydrateCommandSchema: z.ZodObject<{
|
|
80
|
-
type: z.ZodLiteral<"hydrate">;
|
|
81
|
-
actor: z.ZodObject<{
|
|
82
|
-
project_id: z.ZodString;
|
|
83
|
-
actor_name: z.ZodString;
|
|
84
|
-
actor_id: z.ZodString;
|
|
85
|
-
}, z.core.$strict>;
|
|
86
|
-
sqlite: z.ZodOptional<z.ZodObject<{
|
|
87
|
-
txid: z.ZodNumber;
|
|
88
|
-
path: z.ZodOptional<z.ZodString>;
|
|
89
|
-
}, z.core.$strip>>;
|
|
90
|
-
resident_only: z.ZodOptional<z.ZodBoolean>;
|
|
54
|
+
graceful: z.ZodBoolean;
|
|
91
55
|
}, z.core.$strip>;
|
|
92
56
|
declare const executorCommandSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
93
57
|
type: z.ZodLiteral<"invoke">;
|
|
94
58
|
request_id: z.ZodString;
|
|
95
|
-
actor: z.ZodObject<{
|
|
96
|
-
project_id: z.ZodString;
|
|
97
|
-
actor_name: z.ZodString;
|
|
98
|
-
actor_id: z.ZodString;
|
|
99
|
-
}, z.core.$strict>;
|
|
100
59
|
method: z.ZodString;
|
|
101
60
|
args: z.ZodArray<z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>;
|
|
102
|
-
sqlite: z.ZodOptional<z.ZodObject<{
|
|
103
|
-
txid: z.ZodNumber;
|
|
104
|
-
path: z.ZodOptional<z.ZodString>;
|
|
105
|
-
}, z.core.$strip>>;
|
|
106
|
-
resident_only: z.ZodOptional<z.ZodBoolean>;
|
|
107
61
|
}, z.core.$strip>, z.ZodObject<{
|
|
108
62
|
type: z.ZodLiteral<"websocket_event">;
|
|
109
63
|
request_id: z.ZodString;
|
|
110
|
-
actor: z.ZodObject<{
|
|
111
|
-
project_id: z.ZodString;
|
|
112
|
-
actor_name: z.ZodString;
|
|
113
|
-
actor_id: z.ZodString;
|
|
114
|
-
}, z.core.$strict>;
|
|
115
64
|
event: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
116
65
|
type: z.ZodLiteral<"connect">;
|
|
117
66
|
connection: z.ZodObject<{
|
|
@@ -145,40 +94,51 @@ declare const executorCommandSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
145
94
|
metadata: z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>;
|
|
146
95
|
tags: z.ZodArray<z.ZodString>;
|
|
147
96
|
}, z.core.$strip>>;
|
|
148
|
-
sqlite: z.ZodOptional<z.ZodObject<{
|
|
149
|
-
txid: z.ZodNumber;
|
|
150
|
-
path: z.ZodOptional<z.ZodString>;
|
|
151
|
-
}, z.core.$strip>>;
|
|
152
|
-
resident_only: z.ZodOptional<z.ZodBoolean>;
|
|
153
97
|
}, z.core.$strip>, z.ZodObject<{
|
|
154
98
|
type: z.ZodLiteral<"evict">;
|
|
155
|
-
|
|
156
|
-
project_id: z.ZodString;
|
|
157
|
-
actor_name: z.ZodString;
|
|
158
|
-
actor_id: z.ZodString;
|
|
159
|
-
}, z.core.$strict>;
|
|
99
|
+
graceful: z.ZodBoolean;
|
|
160
100
|
}, z.core.$strip>, z.ZodObject<{
|
|
161
101
|
type: z.ZodLiteral<"hydrate">;
|
|
162
|
-
actor: z.ZodObject<{
|
|
163
|
-
project_id: z.ZodString;
|
|
164
|
-
actor_name: z.ZodString;
|
|
165
|
-
actor_id: z.ZodString;
|
|
166
|
-
}, z.core.$strict>;
|
|
167
|
-
sqlite: z.ZodOptional<z.ZodObject<{
|
|
168
|
-
txid: z.ZodNumber;
|
|
169
|
-
path: z.ZodOptional<z.ZodString>;
|
|
170
|
-
}, z.core.$strip>>;
|
|
171
|
-
resident_only: z.ZodOptional<z.ZodBoolean>;
|
|
172
102
|
}, z.core.$strip>], "type">;
|
|
173
103
|
declare const actorSessionServerMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
174
|
-
type: z.ZodLiteral<"
|
|
104
|
+
type: z.ZodLiteral<"database_result">;
|
|
175
105
|
message_id: z.ZodNumber;
|
|
176
|
-
|
|
106
|
+
result: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
107
|
+
type: z.ZodLiteral<"rows">;
|
|
108
|
+
columns: z.ZodArray<z.ZodString>;
|
|
109
|
+
rows: z.ZodArray<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
110
|
+
type: z.ZodLiteral<"null">;
|
|
111
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
112
|
+
type: z.ZodLiteral<"integer">;
|
|
113
|
+
value: z.ZodString;
|
|
114
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
115
|
+
type: z.ZodLiteral<"real">;
|
|
116
|
+
value: z.ZodNumber;
|
|
117
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
118
|
+
type: z.ZodLiteral<"text">;
|
|
119
|
+
value: z.ZodString;
|
|
120
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
121
|
+
type: z.ZodLiteral<"blob">;
|
|
122
|
+
value: z.ZodBase64;
|
|
123
|
+
}, z.core.$strip>], "type">>>;
|
|
124
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
125
|
+
type: z.ZodLiteral<"fields">;
|
|
126
|
+
fields: z.ZodRecord<z.ZodString, z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>;
|
|
127
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
128
|
+
type: z.ZodLiteral<"alarm">;
|
|
129
|
+
timestamp_ms: z.ZodNullable<z.ZodNumber>;
|
|
130
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
131
|
+
type: z.ZodLiteral<"done">;
|
|
132
|
+
}, z.core.$strip>], "type">>;
|
|
177
133
|
error: z.ZodOptional<z.ZodString>;
|
|
178
134
|
}, z.core.$strip>, z.ZodObject<{
|
|
179
135
|
type: z.ZodLiteral<"attached">;
|
|
180
|
-
protocol: z.ZodLiteral<
|
|
181
|
-
|
|
136
|
+
protocol: z.ZodLiteral<28>;
|
|
137
|
+
actor: z.ZodObject<{
|
|
138
|
+
project_id: z.ZodString;
|
|
139
|
+
actor_name: z.ZodString;
|
|
140
|
+
actor_id: z.ZodString;
|
|
141
|
+
}, z.core.$strict>;
|
|
182
142
|
}, z.core.$strip>, z.ZodObject<{
|
|
183
143
|
type: z.ZodLiteral<"socket_connections">;
|
|
184
144
|
message_id: z.ZodNumber;
|
|
@@ -198,26 +158,11 @@ declare const actorSessionServerMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObj
|
|
|
198
158
|
command: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
199
159
|
type: z.ZodLiteral<"invoke">;
|
|
200
160
|
request_id: z.ZodString;
|
|
201
|
-
actor: z.ZodObject<{
|
|
202
|
-
project_id: z.ZodString;
|
|
203
|
-
actor_name: z.ZodString;
|
|
204
|
-
actor_id: z.ZodString;
|
|
205
|
-
}, z.core.$strict>;
|
|
206
161
|
method: z.ZodString;
|
|
207
162
|
args: z.ZodArray<z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>;
|
|
208
|
-
sqlite: z.ZodOptional<z.ZodObject<{
|
|
209
|
-
txid: z.ZodNumber;
|
|
210
|
-
path: z.ZodOptional<z.ZodString>;
|
|
211
|
-
}, z.core.$strip>>;
|
|
212
|
-
resident_only: z.ZodOptional<z.ZodBoolean>;
|
|
213
163
|
}, z.core.$strip>, z.ZodObject<{
|
|
214
164
|
type: z.ZodLiteral<"websocket_event">;
|
|
215
165
|
request_id: z.ZodString;
|
|
216
|
-
actor: z.ZodObject<{
|
|
217
|
-
project_id: z.ZodString;
|
|
218
|
-
actor_name: z.ZodString;
|
|
219
|
-
actor_id: z.ZodString;
|
|
220
|
-
}, z.core.$strict>;
|
|
221
166
|
event: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
222
167
|
type: z.ZodLiteral<"connect">;
|
|
223
168
|
connection: z.ZodObject<{
|
|
@@ -251,48 +196,29 @@ declare const actorSessionServerMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObj
|
|
|
251
196
|
metadata: z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>;
|
|
252
197
|
tags: z.ZodArray<z.ZodString>;
|
|
253
198
|
}, z.core.$strip>>;
|
|
254
|
-
sqlite: z.ZodOptional<z.ZodObject<{
|
|
255
|
-
txid: z.ZodNumber;
|
|
256
|
-
path: z.ZodOptional<z.ZodString>;
|
|
257
|
-
}, z.core.$strip>>;
|
|
258
|
-
resident_only: z.ZodOptional<z.ZodBoolean>;
|
|
259
199
|
}, z.core.$strip>, z.ZodObject<{
|
|
260
200
|
type: z.ZodLiteral<"evict">;
|
|
261
|
-
|
|
262
|
-
project_id: z.ZodString;
|
|
263
|
-
actor_name: z.ZodString;
|
|
264
|
-
actor_id: z.ZodString;
|
|
265
|
-
}, z.core.$strict>;
|
|
201
|
+
graceful: z.ZodBoolean;
|
|
266
202
|
}, z.core.$strip>, z.ZodObject<{
|
|
267
203
|
type: z.ZodLiteral<"hydrate">;
|
|
268
|
-
actor: z.ZodObject<{
|
|
269
|
-
project_id: z.ZodString;
|
|
270
|
-
actor_name: z.ZodString;
|
|
271
|
-
actor_id: z.ZodString;
|
|
272
|
-
}, z.core.$strict>;
|
|
273
|
-
sqlite: z.ZodOptional<z.ZodObject<{
|
|
274
|
-
txid: z.ZodNumber;
|
|
275
|
-
path: z.ZodOptional<z.ZodString>;
|
|
276
|
-
}, z.core.$strip>>;
|
|
277
|
-
resident_only: z.ZodOptional<z.ZodBoolean>;
|
|
278
204
|
}, z.core.$strip>], "type">;
|
|
279
205
|
}, z.core.$strip>], "type">;
|
|
280
|
-
type
|
|
281
|
-
type InvokeCommand = z.infer<typeof invokeCommandSchema>;
|
|
206
|
+
type InvokeCommand = z.infer<typeof invokeCommandSchema> & AssignedActor;
|
|
282
207
|
type EvictCommand = z.infer<typeof evictCommandSchema>;
|
|
283
208
|
type ActorExecutorCommand = z.infer<typeof executorCommandSchema>;
|
|
209
|
+
type ActorExecutionCommand = Exclude<ActorExecutorCommand, EvictCommand>;
|
|
210
|
+
type ActorWorkerCommand = ActorExecutorCommand & AssignedActor;
|
|
284
211
|
type ActorSessionServerMessage = z.infer<typeof actorSessionServerMessageSchema>;
|
|
285
212
|
type ActorExecutorReply = InvokedReply | WebSocketHandledReply | FailedReply | EvictedReply | {
|
|
286
213
|
readonly type: "hydrated";
|
|
287
|
-
} | {
|
|
288
|
-
readonly type: "state_required";
|
|
289
214
|
};
|
|
290
215
|
type ActorSessionClientMessage = {
|
|
291
|
-
readonly type: "
|
|
216
|
+
readonly type: "database_call";
|
|
292
217
|
readonly message_id: number;
|
|
218
|
+
readonly call: DatabaseCall;
|
|
293
219
|
} | {
|
|
294
220
|
readonly type: "residency";
|
|
295
|
-
readonly
|
|
221
|
+
readonly resident: boolean;
|
|
296
222
|
} | AttachMessage | {
|
|
297
223
|
readonly type: "ready_for_invocation";
|
|
298
224
|
readonly message_id: number;
|
|
@@ -307,9 +233,12 @@ type ActorSessionClientMessage = {
|
|
|
307
233
|
};
|
|
308
234
|
interface AttachMessage {
|
|
309
235
|
readonly type: "attach";
|
|
310
|
-
readonly protocol:
|
|
236
|
+
readonly protocol: 28;
|
|
311
237
|
readonly actor_names: readonly string[];
|
|
312
238
|
}
|
|
239
|
+
interface AssignedActor {
|
|
240
|
+
readonly actor: ActorIdentity;
|
|
241
|
+
}
|
|
313
242
|
interface ReplyMessage {
|
|
314
243
|
readonly type: "reply";
|
|
315
244
|
readonly message_id: number;
|
|
@@ -319,13 +248,11 @@ interface InvokedReply {
|
|
|
319
248
|
readonly type: "invoked";
|
|
320
249
|
readonly sequence?: number;
|
|
321
250
|
readonly result: JsonValue;
|
|
322
|
-
readonly sqlite: SqliteState;
|
|
323
251
|
readonly effects?: readonly SocketEffect[];
|
|
324
252
|
}
|
|
325
253
|
interface WebSocketHandledReply {
|
|
326
254
|
readonly type: "websocket_handled";
|
|
327
255
|
readonly sequence?: number;
|
|
328
|
-
readonly sqlite: SqliteState;
|
|
329
256
|
readonly effects: readonly SocketEffect[];
|
|
330
257
|
}
|
|
331
258
|
interface FailedReply {
|
|
@@ -341,17 +268,12 @@ interface ActorWorkerData {
|
|
|
341
268
|
readonly environment?: Readonly<Record<string, string>>;
|
|
342
269
|
}
|
|
343
270
|
type ActorWorkerRequest = {
|
|
344
|
-
readonly type: "sqlite_committed";
|
|
345
|
-
readonly messageId: number;
|
|
346
|
-
readonly txid?: number;
|
|
347
|
-
readonly error?: string;
|
|
348
|
-
} | {
|
|
349
271
|
readonly type: "load";
|
|
350
272
|
readonly data: ActorWorkerData;
|
|
351
273
|
} | {
|
|
352
274
|
readonly type: "execute";
|
|
353
275
|
readonly messageId: number;
|
|
354
|
-
readonly command:
|
|
276
|
+
readonly command: ActorWorkerCommand;
|
|
355
277
|
} | {
|
|
356
278
|
readonly type: "socket_effects_published";
|
|
357
279
|
readonly messageId: number;
|
|
@@ -363,8 +285,10 @@ type ActorWorkerRequest = {
|
|
|
363
285
|
readonly error?: string;
|
|
364
286
|
};
|
|
365
287
|
type ActorWorkerMessage = {
|
|
366
|
-
readonly type: "
|
|
288
|
+
readonly type: "database_call";
|
|
367
289
|
readonly messageId: number;
|
|
290
|
+
readonly call: DatabaseCall;
|
|
291
|
+
readonly request: DatabaseRequest;
|
|
368
292
|
} | {
|
|
369
293
|
readonly type: "warm";
|
|
370
294
|
} | {
|
|
@@ -386,7 +310,7 @@ type ActorWorkerMessage = {
|
|
|
386
310
|
readonly messageId: number;
|
|
387
311
|
readonly query?: SocketQuery;
|
|
388
312
|
};
|
|
389
|
-
type WebSocketEventCommand = z.infer<typeof websocketEventCommandSchema
|
|
313
|
+
type WebSocketEventCommand = z.infer<typeof websocketEventCommandSchema> & AssignedActor;
|
|
390
314
|
export { failedReply, parseActorSessionServerMessage };
|
|
391
|
-
export type { ActorExecutorCommand, ActorExecutorReply, ActorSessionClientMessage, ActorSessionServerMessage, ActorWorkerData, ActorWorkerMessage, ActorWorkerRequest, EvictCommand, InvokeCommand,
|
|
315
|
+
export type { ActorExecutionCommand, ActorExecutorCommand, ActorExecutorReply, ActorSessionClientMessage, ActorSessionServerMessage, ActorWorkerData, ActorWorkerCommand, ActorWorkerMessage, ActorWorkerRequest, EvictCommand, InvokeCommand, WebSocketEventCommand };
|
|
392
316
|
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/host/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/host/protocol.ts"],"names":[],"mappings":"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"}
|