durable-actors 0.3.1 → 0.4.2
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 +21 -15
- package/dist/backend.d.ts +3 -10
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +7 -34
- package/dist/backend.js.map +1 -1
- package/dist/cli/actor-source-watcher.d.ts.map +1 -1
- package/dist/cli/actor-source-watcher.js +6 -2
- package/dist/cli/actor-source-watcher.js.map +1 -1
- package/dist/cli/connection.d.ts +1 -1
- package/dist/cli/control-plane.d.ts.map +1 -1
- package/dist/cli/control-plane.js +16 -12
- package/dist/cli/control-plane.js.map +1 -1
- package/dist/cli/dev.d.ts.map +1 -1
- package/dist/cli/dev.js +35 -3
- package/dist/cli/dev.js.map +1 -1
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +16 -9
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli.js +18 -3
- package/dist/cli.js.map +1 -1
- package/dist/client/clientSettings.d.ts +1 -8
- package/dist/client/clientSettings.d.ts.map +1 -1
- package/dist/client/clientSettings.js +1 -51
- package/dist/client/clientSettings.js.map +1 -1
- package/dist/client/remoteClient.d.ts +4 -35
- package/dist/client/remoteClient.d.ts.map +1 -1
- package/dist/client/remoteClient.js +13 -201
- package/dist/client/remoteClient.js.map +1 -1
- package/dist/client/telemetry.d.ts +4 -12
- package/dist/client/telemetry.d.ts.map +1 -1
- package/dist/client/telemetry.js +3 -19
- package/dist/client/telemetry.js.map +1 -1
- package/dist/client-runtime/client.d.ts +45 -0
- package/dist/client-runtime/client.d.ts.map +1 -0
- package/dist/client-runtime/client.js +200 -0
- package/dist/client-runtime/client.js.map +1 -0
- package/dist/client-runtime/errors.d.ts +30 -0
- package/dist/client-runtime/errors.d.ts.map +1 -0
- package/dist/client-runtime/errors.js +55 -0
- package/dist/client-runtime/errors.js.map +1 -0
- package/dist/client-runtime/http.d.ts +45 -0
- package/dist/client-runtime/http.d.ts.map +1 -0
- package/dist/client-runtime/http.js +85 -0
- package/dist/client-runtime/http.js.map +1 -0
- package/dist/client-runtime/index.browser.d.ts +8 -0
- package/dist/client-runtime/index.browser.d.ts.map +1 -0
- package/dist/client-runtime/index.browser.js +14 -0
- package/dist/client-runtime/index.browser.js.map +1 -0
- package/dist/client-runtime/index.d.ts +6 -0
- package/dist/client-runtime/index.d.ts.map +1 -0
- package/dist/client-runtime/index.js +4 -0
- package/dist/client-runtime/index.js.map +1 -0
- package/dist/client-runtime/json.d.ts +9 -0
- package/dist/client-runtime/json.d.ts.map +1 -0
- package/dist/client-runtime/json.js +16 -0
- package/dist/client-runtime/json.js.map +1 -0
- package/dist/client-runtime/proxy.d.ts +49 -0
- package/dist/client-runtime/proxy.d.ts.map +1 -0
- package/dist/client-runtime/proxy.js +106 -0
- package/dist/client-runtime/proxy.js.map +1 -0
- package/dist/client-runtime/settings.d.ts +20 -0
- package/dist/client-runtime/settings.d.ts.map +1 -0
- package/dist/client-runtime/settings.js +60 -0
- package/dist/client-runtime/settings.js.map +1 -0
- package/dist/client-runtime/stub.d.ts +15 -0
- package/dist/client-runtime/stub.d.ts.map +1 -0
- package/dist/client-runtime/stub.js +44 -0
- package/dist/client-runtime/stub.js.map +1 -0
- package/dist/client-runtime/telemetry.d.ts +13 -0
- package/dist/client-runtime/telemetry.d.ts.map +1 -0
- package/dist/client-runtime/telemetry.js +18 -0
- package/dist/client-runtime/telemetry.js.map +1 -0
- package/dist/compiler/actor-build.js +1 -1
- package/dist/compiler/deployment-build.js +15 -0
- package/dist/compiler/deployment-build.js.map +1 -1
- package/dist/compiler/generators/backend-generator.js +4 -4
- package/dist/compiler/generators/backend-generator.js.map +1 -1
- package/dist/compiler/generators/client-generator.d.ts.map +1 -1
- package/dist/compiler/generators/client-generator.js +6 -19
- package/dist/compiler/generators/client-generator.js.map +1 -1
- package/dist/compiler/generators/typescript-generator.d.ts +1 -1
- package/dist/compiler/generators/typescript-generator.d.ts.map +1 -1
- package/dist/compiler/generators/typescript-generator.js +11 -8
- package/dist/compiler/generators/typescript-generator.js.map +1 -1
- package/dist/compiler/json-schema.d.ts.map +1 -1
- package/dist/compiler/json-schema.js +2 -1
- package/dist/compiler/json-schema.js.map +1 -1
- package/dist/errors.d.ts +1 -29
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +1 -54
- package/dist/errors.js.map +1 -1
- package/dist/generated/client-runtime.d.ts +2 -0
- package/dist/generated/client-runtime.d.ts.map +1 -0
- package/dist/generated/client-runtime.js +2 -0
- package/dist/generated/client-runtime.js.map +1 -0
- package/dist/host/actor-host.d.ts.map +1 -1
- package/dist/host/actor-host.js +4 -18
- package/dist/host/actor-host.js.map +1 -1
- package/dist/host/actor-worker.js +7 -1
- package/dist/host/actor-worker.js.map +1 -1
- package/dist/host/generic-host.d.ts.map +1 -1
- package/dist/host/generic-host.js +4 -5
- package/dist/host/generic-host.js.map +1 -1
- package/dist/host/protocol.d.ts +2 -2
- package/dist/host/protocol.js +1 -1
- package/dist/host/types.d.ts +1 -5
- package/dist/host/types.d.ts.map +1 -1
- package/dist/host/validate-artifact.d.ts +2 -0
- package/dist/host/validate-artifact.d.ts.map +1 -0
- package/dist/host/validate-artifact.js +10 -0
- package/dist/host/validate-artifact.js.map +1 -0
- package/dist/host/worker-supervisor.d.ts +2 -25
- package/dist/host/worker-supervisor.d.ts.map +1 -1
- package/dist/host/worker-supervisor.js +2 -53
- package/dist/host/worker-supervisor.js.map +1 -1
- package/dist/json.d.ts +1 -1
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +1 -13
- package/dist/json.js.map +1 -1
- package/dist/localRuntime.d.ts.map +1 -1
- package/dist/localRuntime.js +5 -0
- package/dist/localRuntime.js.map +1 -1
- package/dist/projectSdk.d.ts +2 -0
- package/dist/projectSdk.d.ts.map +1 -0
- package/dist/projectSdk.js +19 -0
- package/dist/projectSdk.js.map +1 -0
- package/dist/proxy.d.ts +1 -51
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +1 -71
- package/dist/proxy.js.map +1 -1
- package/dist/templates/actor/README.md +8 -8
- package/dist/templates/actor/package.json +2 -2
- package/dist/templates/actor/pnpm-workspace.yaml +2 -0
- package/dist/templates/ai-chat/README.md +5 -10
- package/dist/templates/ai-chat/package.json +1 -1
- package/dist/templates/ai-chat/pnpm-workspace.yaml +2 -0
- package/dist/templates/ai-chat/src/actors.ts +3 -8
- package/dist/templates/ai-chat/src/backend.ts +2 -12
- package/dist/templates/chat/README.md +1 -1
- package/dist/templates/chat/package.json +2 -2
- package/dist/templates/chat/pnpm-workspace.yaml +2 -0
- package/dist/templates/documents/README.md +1 -1
- package/dist/templates/documents/package.json +2 -2
- package/dist/templates/documents/pnpm-workspace.yaml +2 -0
- package/package.json +25 -22
- package/dist/client/actorHostGrpc.d.ts +0 -50
- package/dist/client/actorHostGrpc.d.ts.map +0 -1
- package/dist/client/actorHostGrpc.js +0 -111
- package/dist/client/actorHostGrpc.js.map +0 -1
- package/dist/generated/durable_actors/v1/ActivateActorReply.d.ts +0 -8
- package/dist/generated/durable_actors/v1/ActivateActorReply.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ActivateActorReply.js +0 -3
- package/dist/generated/durable_actors/v1/ActivateActorReply.js.map +0 -1
- package/dist/generated/durable_actors/v1/ActivateActorRequest.d.ts +0 -8
- package/dist/generated/durable_actors/v1/ActivateActorRequest.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ActivateActorRequest.js +0 -3
- package/dist/generated/durable_actors/v1/ActivateActorRequest.js.map +0 -1
- package/dist/generated/durable_actors/v1/ActorCompleted.d.ts +0 -9
- package/dist/generated/durable_actors/v1/ActorCompleted.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ActorCompleted.js +0 -3
- package/dist/generated/durable_actors/v1/ActorCompleted.js.map +0 -1
- package/dist/generated/durable_actors/v1/ActorControlPlaneService.d.ts +0 -21
- package/dist/generated/durable_actors/v1/ActorControlPlaneService.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ActorControlPlaneService.js +0 -3
- package/dist/generated/durable_actors/v1/ActorControlPlaneService.js.map +0 -1
- package/dist/generated/durable_actors/v1/ActorFailed.d.ts +0 -9
- package/dist/generated/durable_actors/v1/ActorFailed.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ActorFailed.js +0 -3
- package/dist/generated/durable_actors/v1/ActorFailed.js.map +0 -1
- package/dist/generated/durable_actors/v1/ActorHostService.d.ts +0 -56
- package/dist/generated/durable_actors/v1/ActorHostService.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ActorHostService.js +0 -3
- package/dist/generated/durable_actors/v1/ActorHostService.js.map +0 -1
- package/dist/generated/durable_actors/v1/ActorKey.d.ts +0 -11
- package/dist/generated/durable_actors/v1/ActorKey.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ActorKey.js +0 -3
- package/dist/generated/durable_actors/v1/ActorKey.js.map +0 -1
- package/dist/generated/durable_actors/v1/ControlPlaneReply.d.ts +0 -7
- package/dist/generated/durable_actors/v1/ControlPlaneReply.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ControlPlaneReply.js +0 -3
- package/dist/generated/durable_actors/v1/ControlPlaneReply.js.map +0 -1
- package/dist/generated/durable_actors/v1/ControlPlaneRequest.d.ts +0 -7
- package/dist/generated/durable_actors/v1/ControlPlaneRequest.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ControlPlaneRequest.js +0 -3
- package/dist/generated/durable_actors/v1/ControlPlaneRequest.js.map +0 -1
- package/dist/generated/durable_actors/v1/Empty.d.ts +0 -5
- package/dist/generated/durable_actors/v1/Empty.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/Empty.js +0 -3
- package/dist/generated/durable_actors/v1/Empty.js.map +0 -1
- package/dist/generated/durable_actors/v1/HostInvokeActorRequest.d.ts +0 -11
- package/dist/generated/durable_actors/v1/HostInvokeActorRequest.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/HostInvokeActorRequest.js +0 -3
- package/dist/generated/durable_actors/v1/HostInvokeActorRequest.js.map +0 -1
- package/dist/generated/durable_actors/v1/HostSocketEventRequest.d.ts +0 -17
- package/dist/generated/durable_actors/v1/HostSocketEventRequest.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/HostSocketEventRequest.js +0 -3
- package/dist/generated/durable_actors/v1/HostSocketEventRequest.js.map +0 -1
- package/dist/generated/durable_actors/v1/InvokeActorReply.d.ts +0 -16
- package/dist/generated/durable_actors/v1/InvokeActorReply.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/InvokeActorReply.js +0 -3
- package/dist/generated/durable_actors/v1/InvokeActorReply.js.map +0 -1
- package/dist/generated/durable_actors/v1/InvokeActorRequest.d.ts +0 -14
- package/dist/generated/durable_actors/v1/InvokeActorRequest.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/InvokeActorRequest.js +0 -3
- package/dist/generated/durable_actors/v1/InvokeActorRequest.js.map +0 -1
- package/dist/generated/durable_actors/v1/PublishSocketEffectsRequest.d.ts +0 -13
- package/dist/generated/durable_actors/v1/PublishSocketEffectsRequest.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/PublishSocketEffectsRequest.js +0 -3
- package/dist/generated/durable_actors/v1/PublishSocketEffectsRequest.js.map +0 -1
- package/dist/generated/durable_actors/v1/ReplicaService.d.ts +0 -42
- package/dist/generated/durable_actors/v1/ReplicaService.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ReplicaService.js +0 -3
- package/dist/generated/durable_actors/v1/ReplicaService.js.map +0 -1
- package/dist/generated/durable_actors/v1/ReplicaSessionHead.d.ts +0 -14
- package/dist/generated/durable_actors/v1/ReplicaSessionHead.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ReplicaSessionHead.js +0 -3
- package/dist/generated/durable_actors/v1/ReplicaSessionHead.js.map +0 -1
- package/dist/generated/durable_actors/v1/ReplicaSnapshotRef.d.ts +0 -14
- package/dist/generated/durable_actors/v1/ReplicaSnapshotRef.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ReplicaSnapshotRef.js +0 -3
- package/dist/generated/durable_actors/v1/ReplicaSnapshotRef.js.map +0 -1
- package/dist/generated/durable_actors/v1/ReplicaStreamHead.d.ts +0 -11
- package/dist/generated/durable_actors/v1/ReplicaStreamHead.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ReplicaStreamHead.js +0 -3
- package/dist/generated/durable_actors/v1/ReplicaStreamHead.js.map +0 -1
- package/dist/generated/durable_actors/v1/ReplicaStreamIdentity.d.ts +0 -14
- package/dist/generated/durable_actors/v1/ReplicaStreamIdentity.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/ReplicaStreamIdentity.js +0 -3
- package/dist/generated/durable_actors/v1/ReplicaStreamIdentity.js.map +0 -1
- package/dist/generated/durable_actors/v1/Reroute.d.ts +0 -5
- package/dist/generated/durable_actors/v1/Reroute.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/Reroute.js +0 -3
- package/dist/generated/durable_actors/v1/Reroute.js.map +0 -1
- package/dist/generated/durable_actors/v1/SnapshotData.d.ts +0 -7
- package/dist/generated/durable_actors/v1/SnapshotData.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/SnapshotData.js +0 -3
- package/dist/generated/durable_actors/v1/SnapshotData.js.map +0 -1
- package/dist/generated/durable_actors/v1/SnapshotService.d.ts +0 -32
- package/dist/generated/durable_actors/v1/SnapshotService.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/SnapshotService.js +0 -3
- package/dist/generated/durable_actors/v1/SnapshotService.js.map +0 -1
- package/dist/generated/durable_actors/v1/SnapshotWriteReply.d.ts +0 -7
- package/dist/generated/durable_actors/v1/SnapshotWriteReply.d.ts.map +0 -1
- package/dist/generated/durable_actors/v1/SnapshotWriteReply.js +0 -3
- package/dist/generated/durable_actors/v1/SnapshotWriteReply.js.map +0 -1
- package/dist/generated/durable_actors.d.ts +0 -69
- package/dist/generated/durable_actors.d.ts.map +0 -1
- package/dist/generated/durable_actors.js +0 -2
- package/dist/generated/durable_actors.js.map +0 -1
- package/dist/generated/durable_actors.proto +0 -117
- package/dist/generated.browser.d.ts +0 -6
- package/dist/generated.browser.d.ts.map +0 -1
- package/dist/generated.browser.js +0 -10
- package/dist/generated.browser.js.map +0 -1
- package/dist/generated.d.ts +0 -3
- package/dist/generated.d.ts.map +0 -1
- package/dist/generated.js +0 -3
- package/dist/generated.js.map +0 -1
- package/dist/templates/actor/LICENSE.md +0 -9
- package/dist/templates/ai-chat/LICENSE.md +0 -9
- package/dist/templates/chat/LICENSE.md +0 -9
- package/dist/templates/documents/LICENSE.md +0 -9
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { ActorInvocationError, ActorProtocolError } from "./errors.js";
|
|
2
|
+
import { HttpActorHostTransport, isRecord, responseDocument } from "./http.js";
|
|
3
|
+
import { cloneJson } from "./json.js";
|
|
4
|
+
import { authorizationHeaders, configuredSettings, environmentSettings, projectActorPath, runtimeEnvironment, validateActorComponent, validateOrigin } from "./settings.js";
|
|
5
|
+
import { LatencyTimeline } from "./telemetry.js";
|
|
6
|
+
const TARGET_EXPIRATION_SAFETY_MS = 5_000;
|
|
7
|
+
export class HttpActorClient {
|
|
8
|
+
beforeInvoke;
|
|
9
|
+
settingsValue;
|
|
10
|
+
environment;
|
|
11
|
+
fetchRequest;
|
|
12
|
+
requestId;
|
|
13
|
+
actorHost;
|
|
14
|
+
now;
|
|
15
|
+
monotonicNow;
|
|
16
|
+
telemetry;
|
|
17
|
+
targets = new Map();
|
|
18
|
+
constructor(options, dependencies = {}) {
|
|
19
|
+
this.beforeInvoke = dependencies.beforeInvoke ?? (() => { });
|
|
20
|
+
this.environment = dependencies.environment ?? runtimeEnvironment();
|
|
21
|
+
this.fetchRequest = dependencies.fetch ?? globalThis.fetch;
|
|
22
|
+
this.requestId = dependencies.requestId ?? (() => globalThis.crypto.randomUUID());
|
|
23
|
+
this.actorHost = dependencies.actorHost ?? new HttpActorHostTransport(this.fetchRequest);
|
|
24
|
+
// Workflow runtimes can replace Date.now with replayable logical time.
|
|
25
|
+
this.now = dependencies.now ?? (() => performance.timeOrigin + performance.now());
|
|
26
|
+
this.monotonicNow = dependencies.monotonicNow ?? (() => performance.now());
|
|
27
|
+
this.telemetry = dependencies.telemetry ?? (() => { });
|
|
28
|
+
this.settingsValue = options === undefined ? undefined : configuredSettings(options);
|
|
29
|
+
}
|
|
30
|
+
async invoke(actorName, actorId, method, args) {
|
|
31
|
+
const requestId = validateActorComponent("request ID", this.requestId());
|
|
32
|
+
const timeline = new LatencyTimeline(this.monotonicNow);
|
|
33
|
+
let outcome = "failed";
|
|
34
|
+
try {
|
|
35
|
+
this.beforeInvoke(requestId);
|
|
36
|
+
const invocation = this.invocation(requestId, actorName, actorId, method, args);
|
|
37
|
+
timeline.mark("invocation_built");
|
|
38
|
+
const target = await this.target(invocation, timeline);
|
|
39
|
+
timeline.mark("target_resolved");
|
|
40
|
+
const result = await this.direct(target, invocation, true, timeline);
|
|
41
|
+
outcome = "completed";
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
this.telemetry({
|
|
46
|
+
event: "actor_client_invocation",
|
|
47
|
+
request_id: requestId,
|
|
48
|
+
actor_name: actorName,
|
|
49
|
+
actor_id: actorId,
|
|
50
|
+
method,
|
|
51
|
+
...timeline.finish(),
|
|
52
|
+
outcome
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async direct(target, invocation, retryAvailable, timeline) {
|
|
57
|
+
try {
|
|
58
|
+
const reply = await this.actorHost.invoke(target, invocation);
|
|
59
|
+
timeline.mark("host_rpc_completed");
|
|
60
|
+
if (reply.type === "completed") {
|
|
61
|
+
timeline.mark("socket_effects_completed");
|
|
62
|
+
return reply.result;
|
|
63
|
+
}
|
|
64
|
+
if (reply.type === "failed")
|
|
65
|
+
throw new ActorInvocationError(reply.code, invocation.requestId, reply.message);
|
|
66
|
+
this.invalidateTarget(invocation, target);
|
|
67
|
+
if (reply.type === "unauthenticated" && !retryAvailable) {
|
|
68
|
+
throw new ActorInvocationError("unauthenticated", invocation.requestId, "actor host rejected the refreshed invocation ticket");
|
|
69
|
+
}
|
|
70
|
+
if (!retryAvailable)
|
|
71
|
+
throw new ActorInvocationError("unavailable", invocation.requestId, reply.type === "not_dispatched"
|
|
72
|
+
? "actor host could not be reached before execution"
|
|
73
|
+
: "actor ownership changed repeatedly before execution");
|
|
74
|
+
const rerouted = await this.target(invocation, timeline);
|
|
75
|
+
return this.direct(rerouted, invocation, false, timeline);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (error instanceof ActorInvocationError || error instanceof ActorProtocolError)
|
|
79
|
+
throw error;
|
|
80
|
+
this.invalidateTarget(invocation, target);
|
|
81
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
82
|
+
throw new ActorInvocationError("outcome_unknown", invocation.requestId, `actor-host HTTP request failed after dispatch: ${message}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
invalidateTarget(invocation, target) {
|
|
86
|
+
const key = actorKey(invocation.actorName, invocation.actorId);
|
|
87
|
+
const current = this.targets.get(key);
|
|
88
|
+
if (current?.target === target)
|
|
89
|
+
this.targets.delete(key);
|
|
90
|
+
}
|
|
91
|
+
async target(invocation, timeline) {
|
|
92
|
+
const key = actorKey(invocation.actorName, invocation.actorId);
|
|
93
|
+
const current = this.targets.get(key);
|
|
94
|
+
timeline.mark("target_cache_checked");
|
|
95
|
+
if (current) {
|
|
96
|
+
const target = await current.promise;
|
|
97
|
+
if (this.targets.get(key) !== current)
|
|
98
|
+
return this.target(invocation, timeline);
|
|
99
|
+
if (target.expiresAtMs > this.now() + TARGET_EXPIRATION_SAFETY_MS)
|
|
100
|
+
return target;
|
|
101
|
+
this.targets.delete(key);
|
|
102
|
+
}
|
|
103
|
+
const resolving = {
|
|
104
|
+
promise: this.resolveTarget(invocation)
|
|
105
|
+
.then(target => {
|
|
106
|
+
resolving.target = target;
|
|
107
|
+
return target;
|
|
108
|
+
})
|
|
109
|
+
.catch(error => {
|
|
110
|
+
if (this.targets.get(key) === resolving)
|
|
111
|
+
this.targets.delete(key);
|
|
112
|
+
throw error;
|
|
113
|
+
})
|
|
114
|
+
};
|
|
115
|
+
this.targets.set(key, resolving);
|
|
116
|
+
return resolving.promise;
|
|
117
|
+
}
|
|
118
|
+
async resolveTarget(invocation) {
|
|
119
|
+
let response;
|
|
120
|
+
try {
|
|
121
|
+
response = await this.fetchRequest(targetUrl(this.settings, invocation.actorName, invocation.actorId), {
|
|
122
|
+
method: "POST",
|
|
123
|
+
redirect: "error",
|
|
124
|
+
headers: {
|
|
125
|
+
accept: "application/json",
|
|
126
|
+
...authorizationHeaders(this.settings.credential),
|
|
127
|
+
"x-request-id": invocation.requestId,
|
|
128
|
+
"content-type": "application/json"
|
|
129
|
+
},
|
|
130
|
+
body: JSON.stringify({ homeRegion: this.settings.homeRegion })
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
135
|
+
throw new ActorInvocationError("unavailable", invocation.requestId, `control-plane HTTP request failed before dispatch: ${message}`);
|
|
136
|
+
}
|
|
137
|
+
const document = await responseDocument(response);
|
|
138
|
+
if (!response.ok)
|
|
139
|
+
this.throwResponseFailure(response, document, invocation.requestId);
|
|
140
|
+
if (!isRecord(document) ||
|
|
141
|
+
typeof document.route !== "string" ||
|
|
142
|
+
typeof document.token !== "string" ||
|
|
143
|
+
!document.token.trim() ||
|
|
144
|
+
!positiveInteger(document.ownerEpoch) ||
|
|
145
|
+
!positiveInteger(document.expiresAtMs))
|
|
146
|
+
throw new ActorProtocolError("control-plane response did not contain a valid actor host target");
|
|
147
|
+
validateOrigin(document.route);
|
|
148
|
+
return {
|
|
149
|
+
route: document.route,
|
|
150
|
+
token: document.token,
|
|
151
|
+
ownerEpoch: document.ownerEpoch,
|
|
152
|
+
expiresAtMs: document.expiresAtMs
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
throwResponseFailure(response, document, requestId) {
|
|
156
|
+
if (response.status === 401 || response.status === 403)
|
|
157
|
+
throw new ActorInvocationError("unauthenticated", requestId, "the durable-actors application credential was rejected");
|
|
158
|
+
const failure = isRecord(document) ? document.error : undefined;
|
|
159
|
+
if (!isRecord(failure) ||
|
|
160
|
+
typeof failure.code !== "string" ||
|
|
161
|
+
!failure.code ||
|
|
162
|
+
typeof failure.message !== "string")
|
|
163
|
+
throw new ActorProtocolError(`control-plane HTTP ${response.status} response did not contain a valid error`);
|
|
164
|
+
throw new ActorInvocationError(failure.code, typeof failure.requestId === "string" ? failure.requestId : requestId, failure.message);
|
|
165
|
+
}
|
|
166
|
+
invocation(requestId, actorName, actorId, method, args) {
|
|
167
|
+
return {
|
|
168
|
+
requestId,
|
|
169
|
+
projectId: this.settings.projectId,
|
|
170
|
+
actorName: validateActorComponent("actor name", actorName),
|
|
171
|
+
actorId: validateActorComponent("actor ID", actorId),
|
|
172
|
+
method: validateActorComponent("actor method", method),
|
|
173
|
+
args: this.jsonArguments(args)
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
get settings() {
|
|
177
|
+
if (this.settingsValue !== undefined)
|
|
178
|
+
return this.settingsValue;
|
|
179
|
+
this.settingsValue = configuredSettings(environmentSettings(this.environment));
|
|
180
|
+
return this.settingsValue;
|
|
181
|
+
}
|
|
182
|
+
jsonArguments(args) {
|
|
183
|
+
const value = cloneJson(args, "actor arguments");
|
|
184
|
+
if (!Array.isArray(value))
|
|
185
|
+
throw new ActorProtocolError("actor arguments must be a JSON array");
|
|
186
|
+
return value;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function targetUrl(settings, actorName, actorId) {
|
|
190
|
+
const actor = validateActorComponent("actor name", actorName);
|
|
191
|
+
const id = validateActorComponent("actor ID", actorId);
|
|
192
|
+
return `${settings.controlPlaneUrl}${projectActorPath(settings.projectId, actor, id)}/find-actor`;
|
|
193
|
+
}
|
|
194
|
+
function actorKey(actorName, actorId) {
|
|
195
|
+
return `${actorName}\u001f${actorId}`;
|
|
196
|
+
}
|
|
197
|
+
function positiveInteger(value) {
|
|
198
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client-runtime/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
declare class ActorConfigurationError extends Error {
|
|
2
|
+
constructor(message: string, options?: ErrorOptions);
|
|
3
|
+
}
|
|
4
|
+
declare class ActorDefinitionError extends Error {
|
|
5
|
+
constructor(message: string);
|
|
6
|
+
}
|
|
7
|
+
/** Remote failure. Retrying an `outcome_unknown` operation may run it twice. */
|
|
8
|
+
declare class ActorInvocationError extends Error {
|
|
9
|
+
/** Error category, such as `actor_error` or `outcome_unknown`. New codes may be added. */
|
|
10
|
+
readonly code: string;
|
|
11
|
+
/** Identifies this caller attempt; it is not an application idempotency key. */
|
|
12
|
+
readonly requestId: string;
|
|
13
|
+
constructor(code: string, requestId: string, message: string);
|
|
14
|
+
}
|
|
15
|
+
declare class ActorSessionError extends Error {
|
|
16
|
+
constructor(message: string, options?: ErrorOptions);
|
|
17
|
+
}
|
|
18
|
+
declare class ActorProtocolError extends Error {
|
|
19
|
+
constructor(message: string, options?: ErrorOptions);
|
|
20
|
+
}
|
|
21
|
+
declare class ActorSerializationError extends Error {
|
|
22
|
+
constructor(message: string, options?: ErrorOptions);
|
|
23
|
+
}
|
|
24
|
+
declare class ActorValidationError extends Error {
|
|
25
|
+
constructor(message: string);
|
|
26
|
+
}
|
|
27
|
+
export { ActorConfigurationError, ActorDefinitionError, ActorInvocationError, ActorProtocolError, ActorSerializationError, ActorSessionError, ActorValidationError };
|
|
28
|
+
declare function errorMessage(error: unknown): string;
|
|
29
|
+
export { errorMessage };
|
|
30
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/client-runtime/errors.ts"],"names":[],"mappings":"AAAA,cAAM,uBAAwB,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItD;AAED,cAAM,oBAAqB,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI9B;AAED,gFAAgF;AAChF,cAAM,oBAAqB,SAAQ,KAAK;IACpC,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;gBAEd,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAM/D;AAED,cAAM,iBAAkB,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItD;AAED,cAAM,kBAAmB,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItD;AAED,cAAM,uBAAwB,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItD;AAED,cAAM,oBAAqB,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI9B;AAED,OAAO,EACH,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACvB,CAAA;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE5C;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
class ActorConfigurationError extends Error {
|
|
2
|
+
constructor(message, options) {
|
|
3
|
+
super(message, options);
|
|
4
|
+
this.name = "ActorConfigurationError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
class ActorDefinitionError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = "ActorDefinitionError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/** Remote failure. Retrying an `outcome_unknown` operation may run it twice. */
|
|
14
|
+
class ActorInvocationError extends Error {
|
|
15
|
+
/** Error category, such as `actor_error` or `outcome_unknown`. New codes may be added. */
|
|
16
|
+
code;
|
|
17
|
+
/** Identifies this caller attempt; it is not an application idempotency key. */
|
|
18
|
+
requestId;
|
|
19
|
+
constructor(code, requestId, message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = "ActorInvocationError";
|
|
22
|
+
this.code = code;
|
|
23
|
+
this.requestId = requestId;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
class ActorSessionError extends Error {
|
|
27
|
+
constructor(message, options) {
|
|
28
|
+
super(message, options);
|
|
29
|
+
this.name = "ActorSessionError";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
class ActorProtocolError extends Error {
|
|
33
|
+
constructor(message, options) {
|
|
34
|
+
super(message, options);
|
|
35
|
+
this.name = "ActorProtocolError";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
class ActorSerializationError extends Error {
|
|
39
|
+
constructor(message, options) {
|
|
40
|
+
super(message, options);
|
|
41
|
+
this.name = "ActorSerializationError";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
class ActorValidationError extends Error {
|
|
45
|
+
constructor(message) {
|
|
46
|
+
super(message);
|
|
47
|
+
this.name = "ActorValidationError";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export { ActorConfigurationError, ActorDefinitionError, ActorInvocationError, ActorProtocolError, ActorSerializationError, ActorSessionError, ActorValidationError };
|
|
51
|
+
function errorMessage(error) {
|
|
52
|
+
return error instanceof Error ? error.message : String(error);
|
|
53
|
+
}
|
|
54
|
+
export { errorMessage };
|
|
55
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/client-runtime/errors.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAwB,SAAQ,KAAK;IACvC,YAAY,OAAe,EAAE,OAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAA;IACzC,CAAC;CACJ;AAED,MAAM,oBAAqB,SAAQ,KAAK;IACpC,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACtC,CAAC;CACJ;AAED,gFAAgF;AAChF,MAAM,oBAAqB,SAAQ,KAAK;IACpC,0FAA0F;IACjF,IAAI,CAAQ;IACrB,gFAAgF;IACvE,SAAS,CAAQ;IAE1B,YAAY,IAAY,EAAE,SAAiB,EAAE,OAAe;QACxD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC9B,CAAC;CACJ;AAED,MAAM,iBAAkB,SAAQ,KAAK;IACjC,YAAY,OAAe,EAAE,OAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACnC,CAAC;CACJ;AAED,MAAM,kBAAmB,SAAQ,KAAK;IAClC,YAAY,OAAe,EAAE,OAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IACpC,CAAC;CACJ;AAED,MAAM,uBAAwB,SAAQ,KAAK;IACvC,YAAY,OAAe,EAAE,OAAsB;QAC/C,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAA;IACzC,CAAC;CACJ;AAED,MAAM,oBAAqB,SAAQ,KAAK;IACpC,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACtC,CAAC;CACJ;AAED,OAAO,EACH,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACvB,CAAA;AAED,SAAS,YAAY,CAAC,KAAc;IAChC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACjE,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { JsonValue } from "./json.js";
|
|
2
|
+
export declare class HttpActorHostTransport implements ActorHostTransport {
|
|
3
|
+
private readonly fetchRequest;
|
|
4
|
+
constructor(fetchRequest?: typeof globalThis.fetch);
|
|
5
|
+
invoke(target: ActorHostTarget, invocation: DirectActorInvocation): Promise<ActorHostReply>;
|
|
6
|
+
publish(target: ActorHostTarget, actor: ActorAddress, effects: readonly unknown[]): Promise<void>;
|
|
7
|
+
private post;
|
|
8
|
+
}
|
|
9
|
+
export declare function responseDocument(response: Response): Promise<unknown>;
|
|
10
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
11
|
+
export interface ActorAddress {
|
|
12
|
+
readonly projectId: string;
|
|
13
|
+
readonly actorName: string;
|
|
14
|
+
readonly actorId: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ActorHostTarget {
|
|
17
|
+
readonly route: string;
|
|
18
|
+
readonly token: string;
|
|
19
|
+
readonly ownerEpoch: number;
|
|
20
|
+
readonly expiresAtMs: number;
|
|
21
|
+
}
|
|
22
|
+
export interface DirectActorInvocation extends ActorAddress {
|
|
23
|
+
readonly requestId: string;
|
|
24
|
+
readonly method: string;
|
|
25
|
+
readonly args: readonly JsonValue[];
|
|
26
|
+
}
|
|
27
|
+
export type ActorHostReply = {
|
|
28
|
+
readonly type: "completed";
|
|
29
|
+
readonly result: unknown;
|
|
30
|
+
} | {
|
|
31
|
+
readonly type: "failed";
|
|
32
|
+
readonly code: string;
|
|
33
|
+
readonly message: string;
|
|
34
|
+
} | {
|
|
35
|
+
readonly type: "reroute";
|
|
36
|
+
} | {
|
|
37
|
+
readonly type: "unauthenticated";
|
|
38
|
+
} | {
|
|
39
|
+
readonly type: "not_dispatched";
|
|
40
|
+
};
|
|
41
|
+
export interface ActorHostTransport {
|
|
42
|
+
invoke(target: ActorHostTarget, invocation: DirectActorInvocation): Promise<ActorHostReply>;
|
|
43
|
+
publish(target: ActorHostTarget, actor: ActorAddress, effects: readonly unknown[]): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/client-runtime/http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAG1C,qBAAa,sBAAuB,YAAW,kBAAkB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,GAAE,OAAO,UAAU,CAAC,KAAwB;IAE/E,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;IAgC3F,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvG,OAAO,CAAC,IAAI;CAef;AAgBD,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAM3E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAC3B;AACD,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC/B;AACD,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAA;CACtC;AACD,MAAM,MAAM,cAAc,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAA;AACzC,MAAM,WAAW,kBAAkB;IAC/B,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IAC3F,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpG"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { ActorProtocolError } from "./errors.js";
|
|
2
|
+
import { projectActorPath, validateOrigin } from "./settings.js";
|
|
3
|
+
export class HttpActorHostTransport {
|
|
4
|
+
fetchRequest;
|
|
5
|
+
constructor(fetchRequest = globalThis.fetch) {
|
|
6
|
+
this.fetchRequest = fetchRequest;
|
|
7
|
+
}
|
|
8
|
+
async invoke(target, invocation) {
|
|
9
|
+
let response;
|
|
10
|
+
try {
|
|
11
|
+
response = await this.post(target, invocation, "invoke", {
|
|
12
|
+
requestId: invocation.requestId,
|
|
13
|
+
ownerEpoch: target.ownerEpoch,
|
|
14
|
+
method: invocation.method,
|
|
15
|
+
args: invocation.args
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (connectionRefused(error))
|
|
20
|
+
return { type: "not_dispatched" };
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
// A 401 is issued before dispatch, so refreshing this ticket cannot repeat actor code.
|
|
24
|
+
if (response.status === 401)
|
|
25
|
+
return { type: "unauthenticated" };
|
|
26
|
+
if (!response.ok)
|
|
27
|
+
throw new Error(`actor host returned HTTP ${response.status}`);
|
|
28
|
+
const reply = await responseDocument(response);
|
|
29
|
+
if (isRecord(reply)) {
|
|
30
|
+
if (reply.type === "completed" && Object.hasOwn(reply, "result"))
|
|
31
|
+
return { type: "completed", result: reply.result };
|
|
32
|
+
if (reply.type === "failed" &&
|
|
33
|
+
typeof reply.code === "string" &&
|
|
34
|
+
reply.code.length > 0 &&
|
|
35
|
+
typeof reply.message === "string")
|
|
36
|
+
return { type: "failed", code: reply.code, message: reply.message };
|
|
37
|
+
if (reply.type === "reroute")
|
|
38
|
+
return { type: "reroute" };
|
|
39
|
+
}
|
|
40
|
+
throw new ActorProtocolError("actor host response did not contain a valid outcome");
|
|
41
|
+
}
|
|
42
|
+
async publish(target, actor, effects) {
|
|
43
|
+
const response = await this.post(target, actor, "socket-effects", { ownerEpoch: target.ownerEpoch, effects });
|
|
44
|
+
if (!response.ok)
|
|
45
|
+
throw new Error(`socket effects returned HTTP ${response.status}`);
|
|
46
|
+
}
|
|
47
|
+
post(target, actor, endpoint, body) {
|
|
48
|
+
return this.fetchRequest(`${validateOrigin(target.route)}${projectActorPath(actor.projectId, actor.actorName, actor.actorId)}/${endpoint}`, {
|
|
49
|
+
method: "POST",
|
|
50
|
+
redirect: "error",
|
|
51
|
+
headers: {
|
|
52
|
+
authorization: `Bearer ${target.token}`,
|
|
53
|
+
"content-type": "application/json",
|
|
54
|
+
accept: "application/json"
|
|
55
|
+
},
|
|
56
|
+
body: JSON.stringify(body)
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function connectionRefused(error, ancestors = new Set()) {
|
|
61
|
+
if (!isRecord(error) || ancestors.has(error))
|
|
62
|
+
return false;
|
|
63
|
+
const visited = new Set(ancestors).add(error);
|
|
64
|
+
if (error.code !== undefined && error.code !== "ECONNREFUSED")
|
|
65
|
+
return false;
|
|
66
|
+
if (error.errors !== undefined)
|
|
67
|
+
return (Array.isArray(error.errors) &&
|
|
68
|
+
error.errors.length > 0 &&
|
|
69
|
+
error.errors.every(cause => connectionRefused(cause, visited)));
|
|
70
|
+
if (error.code === "ECONNREFUSED")
|
|
71
|
+
return error.syscall === "connect";
|
|
72
|
+
return connectionRefused(error.cause, visited);
|
|
73
|
+
}
|
|
74
|
+
export async function responseDocument(response) {
|
|
75
|
+
try {
|
|
76
|
+
return await response.json();
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw new ActorProtocolError(`HTTP ${response.status} response was not valid JSON`, { cause: error });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function isRecord(value) {
|
|
83
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/client-runtime/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SocketProxy as ServerProxy } from "./proxy.js";
|
|
2
|
+
import type { createActorStub as ServerStub, createActorTransport as ServerTransport } from "./stub.js";
|
|
3
|
+
declare const createActorStub: typeof ServerStub;
|
|
4
|
+
declare const createActorTransport: typeof ServerTransport;
|
|
5
|
+
declare const SocketProxy: typeof ServerProxy;
|
|
6
|
+
export { createActorStub, createActorTransport, SocketProxy };
|
|
7
|
+
export { ActorInvocationError } from "./errors.js";
|
|
8
|
+
//# sourceMappingURL=index.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../src/client-runtime/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,WAAW,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,IAAI,UAAU,EAAE,oBAAoB,IAAI,eAAe,EAAE,MAAM,WAAW,CAAA;AAEvG,QAAA,MAAM,eAAe,EAAE,OAAO,UAE7B,CAAA;AAED,QAAA,MAAM,oBAAoB,EAAE,OAAO,eAElC,CAAA;AAED,QAAA,MAAM,WAAW,EAID,OAAO,WAAW,CAAA;AAElC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const createActorStub = () => {
|
|
2
|
+
throw new Error("actors must be used on the server");
|
|
3
|
+
};
|
|
4
|
+
const createActorTransport = () => {
|
|
5
|
+
throw new Error("actors must be used on the server");
|
|
6
|
+
};
|
|
7
|
+
const SocketProxy = class {
|
|
8
|
+
constructor() {
|
|
9
|
+
throw new Error("ActorProxy must be used on the server");
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export { createActorStub, createActorTransport, SocketProxy };
|
|
13
|
+
export { ActorInvocationError } from "./errors.js";
|
|
14
|
+
//# sourceMappingURL=index.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../src/client-runtime/index.browser.ts"],"names":[],"mappings":"AAGA,MAAM,eAAe,GAAsB,GAAG,EAAE;IAC5C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;AACxD,CAAC,CAAA;AAED,MAAM,oBAAoB,GAA2B,GAAG,EAAE;IACtD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;AACxD,CAAC,CAAA;AAED,MAAM,WAAW,GAAG;IAChB;QACI,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC5D,CAAC;CAC6B,CAAA;AAElC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createActorStub, createActorTransport } from "./stub.js";
|
|
2
|
+
export type { ActorRpcTransport, DurableActorsClientOptions } from "./stub.js";
|
|
3
|
+
export { ActorInvocationError } from "./errors.js";
|
|
4
|
+
export { SocketProxy } from "./proxy.js";
|
|
5
|
+
export type { ProxyActor, SocketGrant, SocketProxyDependencies, SocketProxyOptions } from "./proxy.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client-runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACjE,YAAY,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAA;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client-runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type JsonPrimitive = string | number | boolean | null;
|
|
2
|
+
type JsonObject = {
|
|
3
|
+
readonly [key: string]: JsonValue;
|
|
4
|
+
};
|
|
5
|
+
type JsonValue = JsonPrimitive | JsonObject | readonly JsonValue[];
|
|
6
|
+
declare function cloneJson(value: unknown, label: string): JsonValue;
|
|
7
|
+
export { cloneJson };
|
|
8
|
+
export type { JsonValue };
|
|
9
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/client-runtime/json.ts"],"names":[],"mappings":"AAEA,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AACrD,KAAK,UAAU,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AACvD,KAAK,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,SAAS,EAAE,CAAA;AAElE,iBAAS,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAS3D;AAED,OAAO,EAAE,SAAS,EAAE,CAAA;AACpB,YAAY,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ActorSerializationError } from "./errors.js";
|
|
2
|
+
function cloneJson(value, label) {
|
|
3
|
+
try {
|
|
4
|
+
const encoded = JSON.stringify(value);
|
|
5
|
+
if (encoded === undefined)
|
|
6
|
+
throw new ActorSerializationError(`${label} must be JSON serializable`);
|
|
7
|
+
return JSON.parse(encoded);
|
|
8
|
+
}
|
|
9
|
+
catch (error) {
|
|
10
|
+
if (error instanceof ActorSerializationError)
|
|
11
|
+
throw error;
|
|
12
|
+
throw new ActorSerializationError(`${label} must be JSON serializable`, { cause: error });
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export { cloneJson };
|
|
16
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/client-runtime/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAMrD,SAAS,SAAS,CAAC,KAAc,EAAE,KAAa;IAC5C,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACrC,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,uBAAuB,CAAC,GAAG,KAAK,4BAA4B,CAAC,CAAA;QAClG,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAA;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,uBAAuB;YAAE,MAAM,KAAK,CAAA;QACzD,MAAM,IAAI,uBAAuB,CAAC,GAAG,KAAK,4BAA4B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAC7F,CAAC;AACL,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** Overrides for the backend's DURABLE_ACTORS environment settings. */
|
|
2
|
+
interface SocketProxyOptions {
|
|
3
|
+
readonly projectId?: string;
|
|
4
|
+
readonly controlPlaneUrl?: string;
|
|
5
|
+
readonly apiKey?: string;
|
|
6
|
+
/** Defaults to 180000 ms; accepts 1000–600000 ms. */
|
|
7
|
+
readonly setupTimeoutMs?: number;
|
|
8
|
+
}
|
|
9
|
+
interface SocketProxyDependencies {
|
|
10
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
11
|
+
}
|
|
12
|
+
interface ProxyActor<Metadata = unknown> {
|
|
13
|
+
readonly types?: Metadata;
|
|
14
|
+
}
|
|
15
|
+
/** Actor access your backend has already authorized. */
|
|
16
|
+
type SocketAuthorization<Actors extends Record<string, ProxyActor>> = {
|
|
17
|
+
[Name in keyof Actors & string]: {
|
|
18
|
+
readonly actorName: Name;
|
|
19
|
+
readonly actorId: string;
|
|
20
|
+
readonly metadata: Actors[Name] extends ProxyActor<infer Metadata> ? Metadata : never;
|
|
21
|
+
readonly homeRegion?: string;
|
|
22
|
+
readonly authorizationLifetimeMs?: number;
|
|
23
|
+
};
|
|
24
|
+
}[keyof Actors & string];
|
|
25
|
+
/** Browser connection URL and deadlines in Unix milliseconds. Treat the URL as a credential. */
|
|
26
|
+
interface SocketGrant {
|
|
27
|
+
websocketUrl: string;
|
|
28
|
+
homeRegion: string;
|
|
29
|
+
connectByMs: number;
|
|
30
|
+
authorizedUntilMs: number;
|
|
31
|
+
}
|
|
32
|
+
/** Issues browser connection URLs from your backend. */
|
|
33
|
+
declare class SocketProxy<Actors extends Record<string, ProxyActor>> {
|
|
34
|
+
private readonly actors;
|
|
35
|
+
private readonly projectId;
|
|
36
|
+
private readonly origin;
|
|
37
|
+
private readonly apiKey;
|
|
38
|
+
private readonly setupTimeoutMs;
|
|
39
|
+
private readonly fetchRequest;
|
|
40
|
+
constructor(actors: Actors, options?: SocketProxyOptions, dependencies?: SocketProxyDependencies);
|
|
41
|
+
/**
|
|
42
|
+
* Call after authenticating the user and checking actor access.
|
|
43
|
+
* Pass `websocketUrl` to the browser's `new WebSocket()`.
|
|
44
|
+
*/
|
|
45
|
+
handle(authorization: SocketAuthorization<Actors>): Promise<SocketGrant>;
|
|
46
|
+
}
|
|
47
|
+
export { SocketProxy };
|
|
48
|
+
export type { ProxyActor, SocketAuthorization, SocketGrant, SocketProxyDependencies, SocketProxyOptions };
|
|
49
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/client-runtime/proxy.ts"],"names":[],"mappings":"AAUA,uEAAuE;AACvE,UAAU,kBAAkB;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,qDAAqD;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACnC;AAED,UAAU,uBAAuB;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAC3C;AAED,UAAU,UAAU,CAAC,QAAQ,GAAG,OAAO;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAA;CAC5B;AAED,wDAAwD;AACxD,KAAK,mBAAmB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI;KACjE,IAAI,IAAI,MAAM,MAAM,GAAG,MAAM,GAAG;QAC7B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,MAAM,QAAQ,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAA;QACrF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;KAC5C;CACJ,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAA;AAExB,gGAAgG;AAChG,UAAU,WAAW;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;CAC5B;AAED,wDAAwD;AACxD,cAAM,WAAW,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;IAQnD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAP3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;gBAGjC,MAAM,EAAE,MAAM,EAC/B,OAAO,GAAE,kBAAuB,EAChC,YAAY,GAAE,uBAA4B;IAY9C;;;OAGG;IACG,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;CA6BjF;AAaD,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,CAAA"}
|