@moltzap/client 2026.528.0 → 2026.717.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/agent-client.d.ts +2 -65
- package/dist/agent-client.d.ts.map +1 -1
- package/dist/agent-client.js +1 -286
- package/dist/agent-client.js.map +1 -1
- package/dist/app-client.d.ts +3 -0
- package/dist/app-client.d.ts.map +1 -0
- package/dist/app-client.js +2 -0
- package/dist/app-client.js.map +1 -0
- package/dist/auth.d.ts +6 -15
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +12 -16
- package/dist/auth.js.map +1 -1
- package/dist/channel-base/format-cross-conv.d.ts +10 -15
- package/dist/channel-base/format-cross-conv.d.ts.map +1 -1
- package/dist/channel-base/format-cross-conv.js +10 -15
- package/dist/channel-base/format-cross-conv.js.map +1 -1
- package/dist/channel-base/format-group-block.d.ts +8 -10
- package/dist/channel-base/format-group-block.d.ts.map +1 -1
- package/dist/channel-base/format-group-block.js +8 -10
- package/dist/channel-base/format-group-block.js.map +1 -1
- package/dist/channel-base/index.d.ts +3 -62
- package/dist/channel-base/index.d.ts.map +1 -1
- package/dist/channel-base/index.js +2 -65
- package/dist/channel-base/index.js.map +1 -1
- package/dist/channel-base/lease-guard.d.ts +0 -2
- package/dist/channel-base/lease-guard.d.ts.map +1 -1
- package/dist/channel-base/lease-guard.js +0 -2
- package/dist/channel-base/lease-guard.js.map +1 -1
- package/dist/channel-base/lease-store.d.ts +2 -3
- package/dist/channel-base/lease-store.d.ts.map +1 -1
- package/dist/channel-base/lease-store.js +2 -3
- package/dist/channel-base/lease-store.js.map +1 -1
- package/dist/channel-base/lease.d.ts +25 -31
- package/dist/channel-base/lease.d.ts.map +1 -1
- package/dist/channel-base/lease.js +29 -45
- package/dist/channel-base/lease.js.map +1 -1
- package/dist/channel-core-enrichment.d.ts +1 -1
- package/dist/channel-core-enrichment.d.ts.map +1 -1
- package/dist/channel-core-test-support.d.ts +17 -11
- package/dist/channel-core-test-support.d.ts.map +1 -1
- package/dist/channel-core-test-support.js +5 -6
- package/dist/channel-core-test-support.js.map +1 -1
- package/dist/channel-core.d.ts +24 -29
- package/dist/channel-core.d.ts.map +1 -1
- package/dist/channel-core.js +18 -42
- package/dist/channel-core.js.map +1 -1
- package/dist/cli/commands/agents.d.ts +3 -6
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +14 -50
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/contacts.d.ts +5 -6
- package/dist/cli/commands/contacts.d.ts.map +1 -1
- package/dist/cli/commands/contacts.js +15 -43
- package/dist/cli/commands/contacts.js.map +1 -1
- package/dist/cli/commands/conversations.d.ts +8 -18
- package/dist/cli/commands/conversations.d.ts.map +1 -1
- package/dist/cli/commands/conversations.js +14 -65
- package/dist/cli/commands/conversations.js.map +1 -1
- package/dist/cli/commands/messages.d.ts +13 -35
- package/dist/cli/commands/messages.d.ts.map +1 -1
- package/dist/cli/commands/messages.js +21 -46
- package/dist/cli/commands/messages.js.map +1 -1
- package/dist/cli/commands/register.d.ts +10 -12
- package/dist/cli/commands/register.d.ts.map +1 -1
- package/dist/cli/commands/register.js +47 -133
- package/dist/cli/commands/register.js.map +1 -1
- package/dist/cli/commands/send.d.ts +23 -36
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +25 -72
- package/dist/cli/commands/send.js.map +1 -1
- package/dist/cli/commands/start.d.ts +10 -124
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +28 -510
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +8 -9
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/test-transport.d.ts +12 -5
- package/dist/cli/commands/test-transport.d.ts.map +1 -1
- package/dist/cli/commands/test-transport.js +15 -15
- package/dist/cli/commands/test-transport.js.map +1 -1
- package/dist/cli/index.js +13 -38
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +4 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +9 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/socket-client.d.ts +7 -14
- package/dist/cli/socket-client.d.ts.map +1 -1
- package/dist/cli/socket-client.js +15 -38
- package/dist/cli/socket-client.js.map +1 -1
- package/dist/cli/transport.d.ts +53 -116
- package/dist/cli/transport.d.ts.map +1 -1
- package/dist/cli/transport.js +45 -295
- package/dist/cli/transport.js.map +1 -1
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +35 -0
- package/dist/config.js.map +1 -0
- package/dist/config.test-utils.d.ts +13 -0
- package/dist/config.test-utils.d.ts.map +1 -0
- package/dist/config.test-utils.js +46 -0
- package/dist/config.test-utils.js.map +1 -0
- package/dist/index.d.ts +3 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -12
- package/dist/index.js.map +1 -1
- package/dist/local-daemon-rpc.d.ts +259 -8
- package/dist/local-daemon-rpc.d.ts.map +1 -1
- package/dist/local-daemon-rpc.js +189 -12
- package/dist/local-daemon-rpc.js.map +1 -1
- package/dist/{runtime/local-history.d.ts → local-history.d.ts} +16 -21
- package/dist/local-history.d.ts.map +1 -0
- package/dist/{runtime/local-history.js → local-history.js} +16 -21
- package/dist/local-history.js.map +1 -0
- package/dist/local-paths.d.ts +0 -2
- package/dist/local-paths.d.ts.map +1 -1
- package/dist/local-paths.js +0 -4
- package/dist/local-paths.js.map +1 -1
- package/dist/local-socket-server.d.ts +22 -0
- package/dist/local-socket-server.d.ts.map +1 -0
- package/dist/{runtime/local-socket-server.js → local-socket-server.js} +4 -9
- package/dist/local-socket-server.js.map +1 -0
- package/dist/message-rendering.d.ts +3 -0
- package/dist/message-rendering.d.ts.map +1 -0
- package/dist/message-rendering.js +7 -0
- package/dist/message-rendering.js.map +1 -0
- package/dist/notification/__tests__/{snapshot-semantics.types-check.d.ts → subscribe-signatures.types-check.d.ts} +1 -1
- package/dist/notification/__tests__/subscribe-signatures.types-check.d.ts.map +1 -0
- package/dist/notification/__tests__/subscribe-signatures.types-check.js +55 -0
- package/dist/notification/__tests__/subscribe-signatures.types-check.js.map +1 -0
- package/dist/notification/errors.d.ts +18 -6
- package/dist/notification/errors.d.ts.map +1 -1
- package/dist/notification/errors.js +13 -15
- package/dist/notification/errors.js.map +1 -1
- package/dist/notification/index.d.ts +5 -0
- package/dist/notification/index.d.ts.map +1 -0
- package/dist/notification/index.js +5 -0
- package/dist/notification/index.js.map +1 -0
- package/dist/notification/stream.d.ts +33 -49
- package/dist/notification/stream.d.ts.map +1 -1
- package/dist/notification/stream.js +33 -76
- package/dist/notification/stream.js.map +1 -1
- package/dist/pagination.d.ts +20 -10
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +8 -9
- package/dist/pagination.js.map +1 -1
- package/dist/profile.d.ts +92 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +149 -0
- package/dist/profile.js.map +1 -0
- package/dist/refs.d.ts.map +1 -0
- package/dist/refs.js.map +1 -0
- package/dist/service-archive-purge.d.ts +2 -1
- package/dist/service-archive-purge.d.ts.map +1 -1
- package/dist/service-archive-purge.js.map +1 -1
- package/dist/{runtime/service-helpers.d.ts → service-helpers.d.ts} +5 -11
- package/dist/service-helpers.d.ts.map +1 -0
- package/dist/{runtime/service-helpers.js → service-helpers.js} +2 -9
- package/dist/service-helpers.js.map +1 -0
- package/dist/service-local-daemon.d.ts +22 -0
- package/dist/service-local-daemon.d.ts.map +1 -0
- package/dist/service-local-daemon.js +185 -0
- package/dist/service-local-daemon.js.map +1 -0
- package/dist/service.d.ts +65 -57
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +205 -156
- package/dist/service.js.map +1 -1
- package/dist/test-utils/channel-service-fixture.d.ts +3 -2
- package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
- package/dist/test-utils/channel-service-fixture.js.map +1 -1
- package/dist/test-utils/fake-service.d.ts +26 -18
- package/dist/test-utils/fake-service.d.ts.map +1 -1
- package/dist/test-utils/fake-service.js +28 -42
- package/dist/test-utils/fake-service.js.map +1 -1
- package/dist/test-utils/ids.d.ts +3 -1
- package/dist/test-utils/ids.d.ts.map +1 -1
- package/dist/test-utils/ids.js.map +1 -1
- package/dist/test-utils/index.d.ts +9 -2
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +8 -1
- package/dist/test-utils/index.js.map +1 -1
- package/dist/test-utils/standalone-provisioning.d.ts +17 -0
- package/dist/test-utils/standalone-provisioning.d.ts.map +1 -0
- package/dist/test-utils/standalone-provisioning.js +14 -0
- package/dist/test-utils/standalone-provisioning.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +39 -17
- package/dist/auth.test.d.ts +0 -2
- package/dist/auth.test.d.ts.map +0 -1
- package/dist/auth.test.js +0 -121
- package/dist/auth.test.js.map +0 -1
- package/dist/channel-core-context.test.d.ts +0 -2
- package/dist/channel-core-context.test.d.ts.map +0 -1
- package/dist/channel-core-context.test.js +0 -342
- package/dist/channel-core-context.test.js.map +0 -1
- package/dist/channel-core-dispatch.test.d.ts +0 -2
- package/dist/channel-core-dispatch.test.d.ts.map +0 -1
- package/dist/channel-core-dispatch.test.js +0 -557
- package/dist/channel-core-dispatch.test.js.map +0 -1
- package/dist/channel-core.test.d.ts +0 -2
- package/dist/channel-core.test.d.ts.map +0 -1
- package/dist/channel-core.test.js +0 -232
- package/dist/channel-core.test.js.map +0 -1
- package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts +0 -2
- package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts.map +0 -1
- package/dist/cli/__tests__/cli-multi-agent.int.test.js +0 -132
- package/dist/cli/__tests__/cli-multi-agent.int.test.js.map +0 -1
- package/dist/cli/commands/invite.d.ts +0 -7
- package/dist/cli/commands/invite.d.ts.map +0 -1
- package/dist/cli/commands/invite.js +0 -11
- package/dist/cli/commands/invite.js.map +0 -1
- package/dist/cli/commands/messages.test.d.ts +0 -2
- package/dist/cli/commands/messages.test.d.ts.map +0 -1
- package/dist/cli/commands/messages.test.js +0 -99
- package/dist/cli/commands/messages.test.js.map +0 -1
- package/dist/cli/commands/ping.d.ts +0 -7
- package/dist/cli/commands/ping.d.ts.map +0 -1
- package/dist/cli/commands/ping.js +0 -37
- package/dist/cli/commands/ping.js.map +0 -1
- package/dist/cli/commands/presence.d.ts +0 -11
- package/dist/cli/commands/presence.d.ts.map +0 -1
- package/dist/cli/commands/presence.js +0 -33
- package/dist/cli/commands/presence.js.map +0 -1
- package/dist/cli/commands/register.test.d.ts +0 -2
- package/dist/cli/commands/register.test.d.ts.map +0 -1
- package/dist/cli/commands/register.test.js +0 -91
- package/dist/cli/commands/register.test.js.map +0 -1
- package/dist/cli/commands/send.test.d.ts +0 -2
- package/dist/cli/commands/send.test.d.ts.map +0 -1
- package/dist/cli/commands/send.test.js +0 -59
- package/dist/cli/commands/send.test.js.map +0 -1
- package/dist/cli/commands/start.test.d.ts +0 -2
- package/dist/cli/commands/start.test.d.ts.map +0 -1
- package/dist/cli/commands/start.test.js +0 -624
- package/dist/cli/commands/start.test.js.map +0 -1
- package/dist/cli/commands/whoami.d.ts +0 -8
- package/dist/cli/commands/whoami.d.ts.map +0 -1
- package/dist/cli/commands/whoami.js +0 -28
- package/dist/cli/commands/whoami.js.map +0 -1
- package/dist/cli/config.d.ts +0 -66
- package/dist/cli/config.d.ts.map +0 -1
- package/dist/cli/config.js +0 -148
- package/dist/cli/config.js.map +0 -1
- package/dist/cli/config.test.d.ts +0 -2
- package/dist/cli/config.test.d.ts.map +0 -1
- package/dist/cli/config.test.js +0 -89
- package/dist/cli/config.test.js.map +0 -1
- package/dist/cli/http-client.d.ts +0 -17
- package/dist/cli/http-client.d.ts.map +0 -1
- package/dist/cli/http-client.js +0 -38
- package/dist/cli/http-client.js.map +0 -1
- package/dist/cli/profile.d.ts +0 -126
- package/dist/cli/profile.d.ts.map +0 -1
- package/dist/cli/profile.js +0 -231
- package/dist/cli/profile.js.map +0 -1
- package/dist/cli/profile.test.d.ts +0 -2
- package/dist/cli/profile.test.d.ts.map +0 -1
- package/dist/cli/profile.test.js +0 -369
- package/dist/cli/profile.test.js.map +0 -1
- package/dist/cli/transport.test.d.ts +0 -2
- package/dist/cli/transport.test.d.ts.map +0 -1
- package/dist/cli/transport.test.js +0 -312
- package/dist/cli/transport.test.js.map +0 -1
- package/dist/notification/__tests__/filter-equivalence.test.d.ts +0 -2
- package/dist/notification/__tests__/filter-equivalence.test.d.ts.map +0 -1
- package/dist/notification/__tests__/filter-equivalence.test.js +0 -123
- package/dist/notification/__tests__/filter-equivalence.test.js.map +0 -1
- package/dist/notification/__tests__/snapshot-semantics.test.d.ts +0 -2
- package/dist/notification/__tests__/snapshot-semantics.test.d.ts.map +0 -1
- package/dist/notification/__tests__/snapshot-semantics.test.js +0 -261
- package/dist/notification/__tests__/snapshot-semantics.test.js.map +0 -1
- package/dist/notification/__tests__/snapshot-semantics.types-check.d.ts.map +0 -1
- package/dist/notification/__tests__/snapshot-semantics.types-check.js +0 -62
- package/dist/notification/__tests__/snapshot-semantics.types-check.js.map +0 -1
- package/dist/pagination.test.d.ts +0 -2
- package/dist/pagination.test.d.ts.map +0 -1
- package/dist/pagination.test.js +0 -72
- package/dist/pagination.test.js.map +0 -1
- package/dist/runtime/close-info.d.ts +0 -84
- package/dist/runtime/close-info.d.ts.map +0 -1
- package/dist/runtime/close-info.js +0 -102
- package/dist/runtime/close-info.js.map +0 -1
- package/dist/runtime/close-info.test.d.ts +0 -2
- package/dist/runtime/close-info.test.d.ts.map +0 -1
- package/dist/runtime/close-info.test.js +0 -109
- package/dist/runtime/close-info.test.js.map +0 -1
- package/dist/runtime/errors.d.ts +0 -11
- package/dist/runtime/errors.d.ts.map +0 -1
- package/dist/runtime/errors.js +0 -41
- package/dist/runtime/errors.js.map +0 -1
- package/dist/runtime/errors.test.d.ts +0 -2
- package/dist/runtime/errors.test.d.ts.map +0 -1
- package/dist/runtime/errors.test.js +0 -79
- package/dist/runtime/errors.test.js.map +0 -1
- package/dist/runtime/frame.d.ts +0 -8
- package/dist/runtime/frame.d.ts.map +0 -1
- package/dist/runtime/frame.js +0 -12
- package/dist/runtime/frame.js.map +0 -1
- package/dist/runtime/frame.test.d.ts +0 -2
- package/dist/runtime/frame.test.d.ts.map +0 -1
- package/dist/runtime/frame.test.js +0 -59
- package/dist/runtime/frame.test.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -10
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -9
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/local-history.d.ts.map +0 -1
- package/dist/runtime/local-history.js.map +0 -1
- package/dist/runtime/local-service-commands.d.ts +0 -26
- package/dist/runtime/local-service-commands.d.ts.map +0 -1
- package/dist/runtime/local-service-commands.js +0 -29
- package/dist/runtime/local-service-commands.js.map +0 -1
- package/dist/runtime/local-socket-server.d.ts +0 -20
- package/dist/runtime/local-socket-server.d.ts.map +0 -1
- package/dist/runtime/local-socket-server.js.map +0 -1
- package/dist/runtime/refs.d.ts.map +0 -1
- package/dist/runtime/refs.js.map +0 -1
- package/dist/runtime/runtime.test.d.ts +0 -2
- package/dist/runtime/runtime.test.d.ts.map +0 -1
- package/dist/runtime/runtime.test.js +0 -37
- package/dist/runtime/runtime.test.js.map +0 -1
- package/dist/runtime/service-helpers.d.ts.map +0 -1
- package/dist/runtime/service-helpers.js.map +0 -1
- package/dist/runtime/service-teardown.d.ts +0 -5
- package/dist/runtime/service-teardown.d.ts.map +0 -1
- package/dist/runtime/service-teardown.js +0 -36
- package/dist/runtime/service-teardown.js.map +0 -1
- package/dist/runtime/service-teardown.test.d.ts +0 -2
- package/dist/runtime/service-teardown.test.d.ts.map +0 -1
- package/dist/runtime/service-teardown.test.js +0 -80
- package/dist/runtime/service-teardown.test.js.map +0 -1
- package/dist/runtime/subscribers.d.ts +0 -152
- package/dist/runtime/subscribers.d.ts.map +0 -1
- package/dist/runtime/subscribers.js +0 -222
- package/dist/runtime/subscribers.js.map +0 -1
- package/dist/service-socket-path.test.d.ts +0 -2
- package/dist/service-socket-path.test.d.ts.map +0 -1
- package/dist/service-socket-path.test.js +0 -87
- package/dist/service-socket-path.test.js.map +0 -1
- package/dist/service.test.d.ts +0 -2
- package/dist/service.test.d.ts.map +0 -1
- package/dist/service.test.js +0 -796
- package/dist/service.test.js.map +0 -1
- package/dist/test/index.d.ts +0 -47
- package/dist/test/index.d.ts.map +0 -1
- package/dist/test/index.js +0 -39
- package/dist/test/index.js.map +0 -1
- package/dist/test-utils/conformance-adapter.d.ts +0 -40
- package/dist/test-utils/conformance-adapter.d.ts.map +0 -1
- package/dist/test-utils/conformance-adapter.js +0 -250
- package/dist/test-utils/conformance-adapter.js.map +0 -1
- package/dist/tm-client-test-support.d.ts +0 -184
- package/dist/tm-client-test-support.d.ts.map +0 -1
- package/dist/tm-client-test-support.js +0 -466
- package/dist/tm-client-test-support.js.map +0 -1
- package/dist/tm-client.d.ts +0 -269
- package/dist/tm-client.d.ts.map +0 -1
- package/dist/tm-client.js +0 -518
- package/dist/tm-client.js.map +0 -1
- package/dist/tm-client.test.d.ts +0 -2
- package/dist/tm-client.test.d.ts.map +0 -1
- package/dist/tm-client.test.js +0 -490
- package/dist/tm-client.test.js.map +0 -1
- /package/dist/{runtime/refs.d.ts → refs.d.ts} +0 -0
- /package/dist/{runtime/refs.js → refs.js} +0 -0
package/dist/agent-client.d.ts
CHANGED
|
@@ -1,66 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { type CloseInfo } from "./runtime/close-info.js";
|
|
4
|
-
export type { CloseInfo };
|
|
5
|
-
export interface RpcCallOptions {
|
|
6
|
-
readonly timeoutMs?: number;
|
|
7
|
-
}
|
|
8
|
-
type ConnectError = RpcCallError | RpcTimeoutError;
|
|
9
|
-
type ConnectResult = ResultOf<typeof Connect>;
|
|
10
|
-
export interface AgentClientOptions {
|
|
11
|
-
serverUrl: string;
|
|
12
|
-
agentKey: string;
|
|
13
|
-
onDisconnect?: (close: CloseInfo) => void;
|
|
14
|
-
onReconnect?: (helloOk: ConnectResult) => void;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* MoltZap agent client — outbound RPC only, no TM-callback inbound
|
|
18
|
-
* dispatch. `request` is narrowed to `AnyAgentClientRpcDefinition`; TM-only
|
|
19
|
-
* methods are unreachable at compile time (Spec D3 R11/R13).
|
|
20
|
-
*/
|
|
21
|
-
export declare class MoltZapAgentClient {
|
|
22
|
-
private readonly options;
|
|
23
|
-
private readonly stateRef;
|
|
24
|
-
private readonly malformedRef;
|
|
25
|
-
private readonly runtime;
|
|
26
|
-
private readonly subscribers;
|
|
27
|
-
private closed;
|
|
28
|
-
private reconnectFiber;
|
|
29
|
-
private _helloOk;
|
|
30
|
-
constructor(options: AgentClientOptions);
|
|
31
|
-
get helloOk(): ConnectResult | null;
|
|
32
|
-
connect(): Effect.Effect<ConnectResult, ConnectError>;
|
|
33
|
-
/**
|
|
34
|
-
* Outbound RPC. The compile-time constraint accepts any
|
|
35
|
-
* `RpcDefinition` so generic forwarders (service.sendRpc, CLI
|
|
36
|
-
* transport) can pass through without per-method narrowing; the R11
|
|
37
|
-
* agent-client catalog narrowing applies at runtime inside
|
|
38
|
-
* `AgentClientConnection` and rejects TM-only methods.
|
|
39
|
-
*/
|
|
40
|
-
sendRpc<D extends RpcDefinition<string, any, any>>(definition: D, params: ParamsOf<D>, opts?: RpcCallOptions): Effect.Effect<ResultOf<D>, ConnectError>;
|
|
41
|
-
subscribe<D extends AnyNotificationDefinition>(definition: D, refinement?: (params: NotificationParamsOf<D>) => boolean): Stream.Stream<DecodedNotification<D>, NotConnectedError, never>;
|
|
42
|
-
subscribe<D extends AnyNotificationDefinition, R extends NotificationParamsOf<D>>(definition: D, refinement: (params: NotificationParamsOf<D>) => params is R): Stream.Stream<DecodedNotification<D, R>, NotConnectedError, never>;
|
|
43
|
-
subscribeAll(refinement?: (notification: DecodedNotification<AnyNotificationDefinition>) => boolean): Stream.Stream<DecodedNotification<AnyNotificationDefinition>, NotConnectedError, never>;
|
|
44
|
-
close(): Effect.Effect<void, never>;
|
|
45
|
-
disconnect(): Effect.Effect<void, never>;
|
|
46
|
-
private disconnectSync;
|
|
47
|
-
private notifyDisconnect;
|
|
48
|
-
private connectEffect;
|
|
49
|
-
private webSocketUrl;
|
|
50
|
-
private openSocket;
|
|
51
|
-
private readerEffect;
|
|
52
|
-
private handleReaderExit;
|
|
53
|
-
private publishConnectionState;
|
|
54
|
-
private awaitConnectAuth;
|
|
55
|
-
private sendRpcEffect;
|
|
56
|
-
private recordMalformedFrame;
|
|
57
|
-
private handleDecodedResponse;
|
|
58
|
-
private handleDecodedServerRequest;
|
|
59
|
-
private handleDecodedNotification;
|
|
60
|
-
private handleDecodedFrame;
|
|
61
|
-
private handleIncoming;
|
|
62
|
-
private failConnectionPending;
|
|
63
|
-
private failAllPending;
|
|
64
|
-
private scheduleReconnect;
|
|
65
|
-
}
|
|
1
|
+
export { MoltZapAgentClient } from "@moltzap/protocol/socket";
|
|
2
|
+
export type { AgentClientOptions, RpcCallOptions, } from "@moltzap/protocol/socket";
|
|
66
3
|
//# sourceMappingURL=agent-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-client.d.ts","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-client.d.ts","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EACV,kBAAkB,EAClB,cAAc,GACf,MAAM,0BAA0B,CAAC"}
|
package/dist/agent-client.js
CHANGED
|
@@ -1,287 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import * as NodeSocket from "@effect/platform-node/NodeSocket";
|
|
3
|
-
import { Data, Deferred, Duration, Either, Effect, Exit, Fiber, ManagedRuntime, Option, Ref, Schedule, Scope, Stream, } from "effect";
|
|
4
|
-
import { PROTOCOL_VERSION, Connect, NotConnectedError, RpcTimeoutError, makeAgentClientConnection, } from "@moltzap/protocol";
|
|
5
|
-
import { decodeFrames } from "./runtime/frame.js";
|
|
6
|
-
import { makeSubscriberRegistry, } from "./runtime/subscribers.js";
|
|
7
|
-
import { subscribe as subscribeStream, subscribeAll as subscribeAllStream, } from "./notification/stream.js";
|
|
8
|
-
import { extractCloseInfo } from "./runtime/close-info.js";
|
|
9
|
-
/** Default per-RPC timeout. */
|
|
10
|
-
const RPC_TIMEOUT_MS = 30_000;
|
|
11
|
-
const BASE_RECONNECT_DELAY_MS = 1000;
|
|
12
|
-
const MAX_RECONNECT_DELAY_MS = 30_000;
|
|
13
|
-
const RECONNECT_BACKOFF_FACTOR = 2;
|
|
14
|
-
const NORMAL_CLOSE_CODE = 1000;
|
|
15
|
-
const WEB_SOCKET_OPEN_TIMEOUT_SECONDS = 10;
|
|
16
|
-
const MALFORMED_FRAME_PREVIEW_CHARS = 200;
|
|
17
|
-
const MALFORMED_LOG_EVERY = 50;
|
|
18
|
-
const shouldLogMalformedFrame = (count) => count === 1 || count % MALFORMED_LOG_EVERY === 0;
|
|
19
|
-
const MSG_NOT_CONNECTED = "WebSocket not connected";
|
|
20
|
-
const UTF8_DECODER = new TextDecoder("utf-8");
|
|
21
|
-
const makeNotConnectedError = () => new NotConnectedError({ message: MSG_NOT_CONNECTED });
|
|
22
|
-
class ReconnectAttemptFailedError extends Data.TaggedError("ReconnectAttemptFailedError") {
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* MoltZap agent client — outbound RPC only, no TM-callback inbound
|
|
26
|
-
* dispatch. `request` is narrowed to `AnyAgentClientRpcDefinition`; TM-only
|
|
27
|
-
* methods are unreachable at compile time (Spec D3 R11/R13).
|
|
28
|
-
*/
|
|
29
|
-
export class MoltZapAgentClient {
|
|
30
|
-
options;
|
|
31
|
-
stateRef;
|
|
32
|
-
malformedRef;
|
|
33
|
-
runtime;
|
|
34
|
-
subscribers;
|
|
35
|
-
closed = false;
|
|
36
|
-
reconnectFiber = null;
|
|
37
|
-
_helloOk = null;
|
|
38
|
-
constructor(options) {
|
|
39
|
-
this.options = options;
|
|
40
|
-
this.runtime = ManagedRuntime.make(NodeSocket.layerWebSocketConstructor);
|
|
41
|
-
this.stateRef = this.runtime.runSync(Ref.make(Option.none()));
|
|
42
|
-
this.malformedRef = this.runtime.runSync(Ref.make(0));
|
|
43
|
-
this.subscribers = this.runtime.runSync(makeSubscriberRegistry());
|
|
44
|
-
}
|
|
45
|
-
get helloOk() {
|
|
46
|
-
return this._helloOk;
|
|
47
|
-
}
|
|
48
|
-
connect() {
|
|
49
|
-
return this.runtime.runtimeEffect.pipe(Effect.flatMap(() => this.connectEffect()), Effect.provide(this.runtime));
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Outbound RPC. The compile-time constraint accepts any
|
|
53
|
-
* `RpcDefinition` so generic forwarders (service.sendRpc, CLI
|
|
54
|
-
* transport) can pass through without per-method narrowing; the R11
|
|
55
|
-
* agent-client catalog narrowing applies at runtime inside
|
|
56
|
-
* `AgentClientConnection` and rejects TM-only methods.
|
|
57
|
-
*/
|
|
58
|
-
sendRpc(definition, params, opts) {
|
|
59
|
-
const timeoutMs = opts?.timeoutMs ?? RPC_TIMEOUT_MS;
|
|
60
|
-
return this.sendRpcEffect(definition, params, timeoutMs);
|
|
61
|
-
}
|
|
62
|
-
subscribe(definition,
|
|
63
|
-
// eslint-disable-next-line agent-code-guard/no-conditional-chaining -- optional refinement is a value-level passthrough to the Stream factory; not a refinement-of-discriminant decision
|
|
64
|
-
refinement) {
|
|
65
|
-
return subscribeStream(this.subscribers, definition, refinement);
|
|
66
|
-
}
|
|
67
|
-
subscribeAll(
|
|
68
|
-
// eslint-disable-next-line agent-code-guard/no-conditional-chaining -- optional refinement is a value-level passthrough to the Stream factory; not a refinement-of-discriminant decision
|
|
69
|
-
refinement) {
|
|
70
|
-
return subscribeAllStream(this.subscribers, refinement);
|
|
71
|
-
}
|
|
72
|
-
close() {
|
|
73
|
-
return Effect.gen(this, function* () {
|
|
74
|
-
if (this.closed)
|
|
75
|
-
return;
|
|
76
|
-
const hasCompletedHandshake = this._helloOk !== null;
|
|
77
|
-
this.closed = true;
|
|
78
|
-
this._helloOk = null;
|
|
79
|
-
if (this.reconnectFiber !== null) {
|
|
80
|
-
const f = this.reconnectFiber;
|
|
81
|
-
this.reconnectFiber = null;
|
|
82
|
-
yield* Effect.forkDaemon(Fiber.interrupt(f));
|
|
83
|
-
}
|
|
84
|
-
yield* this.failAllPending(MSG_NOT_CONNECTED);
|
|
85
|
-
yield* this.subscribers.closeAll;
|
|
86
|
-
const state = yield* Ref.getAndSet(this.stateRef, Option.none());
|
|
87
|
-
if (Option.isSome(state)) {
|
|
88
|
-
if (hasCompletedHandshake) {
|
|
89
|
-
yield* state.value
|
|
90
|
-
.write(new Socket.CloseEvent(NORMAL_CLOSE_CODE, "normal"))
|
|
91
|
-
.pipe(Effect.orDie);
|
|
92
|
-
yield* Scope.close(state.value.scope, Exit.void);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
this.runtime.runFork(Scope.close(state.value.scope, Exit.void));
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}).pipe(Effect.asVoid, Effect.ensuring(Effect.sync(() => {
|
|
99
|
-
this.runtime.dispose();
|
|
100
|
-
})));
|
|
101
|
-
}
|
|
102
|
-
disconnect() {
|
|
103
|
-
return Effect.sync(() => this.disconnectSync());
|
|
104
|
-
}
|
|
105
|
-
disconnectSync() {
|
|
106
|
-
const state = this.runtime.runSync(Ref.get(this.stateRef));
|
|
107
|
-
if (Option.isNone(state))
|
|
108
|
-
return;
|
|
109
|
-
this.runtime.runSync(Ref.set(this.stateRef, Option.none()));
|
|
110
|
-
this.runtime.runFork(this.failConnectionPending(state.value));
|
|
111
|
-
this.runtime.runFork(Fiber.interrupt(state.value.readerFiber));
|
|
112
|
-
this.runtime.runFork(Scope.close(state.value.scope, Exit.void));
|
|
113
|
-
}
|
|
114
|
-
notifyDisconnect(close) {
|
|
115
|
-
return Effect.gen(this, function* () {
|
|
116
|
-
try {
|
|
117
|
-
this.options.onDisconnect?.(close);
|
|
118
|
-
}
|
|
119
|
-
catch (err) {
|
|
120
|
-
yield* Effect.logWarning("onDisconnect handler threw", err);
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
connectEffect() {
|
|
125
|
-
return Effect.gen(this, function* () {
|
|
126
|
-
const url = this.webSocketUrl();
|
|
127
|
-
const scope = yield* Scope.make();
|
|
128
|
-
const socket = yield* this.openSocket(url, scope);
|
|
129
|
-
const write = yield* Scope.extend(socket.writer, scope);
|
|
130
|
-
const agentConn = yield* Scope.extend(makeAgentClientConnection({
|
|
131
|
-
id: "agent-client",
|
|
132
|
-
handlers: {},
|
|
133
|
-
write: (raw) => write(raw),
|
|
134
|
-
idPrefix: "rpc",
|
|
135
|
-
}), scope);
|
|
136
|
-
const handshakeSettled = yield* Deferred.make();
|
|
137
|
-
const readerFiber = this.runtime.runFork(this.readerEffect(socket, handshakeSettled));
|
|
138
|
-
yield* this.publishConnectionState({
|
|
139
|
-
write,
|
|
140
|
-
readerFiber,
|
|
141
|
-
scope,
|
|
142
|
-
agentConn,
|
|
143
|
-
handshakeSettled,
|
|
144
|
-
});
|
|
145
|
-
return yield* this.awaitConnectAuth(handshakeSettled);
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
webSocketUrl() {
|
|
149
|
-
return this.options.serverUrl.replace(/^http/, "ws") + "/ws";
|
|
150
|
-
}
|
|
151
|
-
openSocket(url, scope) {
|
|
152
|
-
const openTimeout = Duration.seconds(WEB_SOCKET_OPEN_TIMEOUT_SECONDS);
|
|
153
|
-
return Scope.extend(Socket.makeWebSocket(url, { openTimeout }), scope).pipe(Effect.timeoutFail({
|
|
154
|
-
duration: openTimeout,
|
|
155
|
-
onTimeout: makeNotConnectedError,
|
|
156
|
-
}), Effect.catchAllCause((cause) => Effect.zipRight(Effect.logWarning("WebSocket open failed", cause), Effect.sync(() => {
|
|
157
|
-
this.runtime.runFork(Scope.close(scope, Exit.void));
|
|
158
|
-
}).pipe(Effect.zipRight(Effect.fail(makeNotConnectedError()))))));
|
|
159
|
-
}
|
|
160
|
-
readerEffect(socket, handshakeSettled) {
|
|
161
|
-
return socket
|
|
162
|
-
.runRaw((data) => this.handleIncoming(typeof data === "string" ? data : UTF8_DECODER.decode(data)))
|
|
163
|
-
.pipe(Effect.onExit((exit) => this.handleReaderExit(exit, handshakeSettled)));
|
|
164
|
-
}
|
|
165
|
-
handleReaderExit(exit, handshakeSettled) {
|
|
166
|
-
return Effect.gen(this, function* () {
|
|
167
|
-
if (Exit.isFailure(exit)) {
|
|
168
|
-
yield* Effect.logWarning("WebSocket error", exit.cause);
|
|
169
|
-
}
|
|
170
|
-
this._helloOk = null;
|
|
171
|
-
yield* this.failAllPending(MSG_NOT_CONNECTED);
|
|
172
|
-
yield* Deferred.fail(handshakeSettled, makeNotConnectedError()).pipe(Effect.ignore);
|
|
173
|
-
yield* Ref.set(this.stateRef, Option.none());
|
|
174
|
-
yield* this.notifyDisconnect(extractCloseInfo(exit));
|
|
175
|
-
if (!this.closed)
|
|
176
|
-
this.scheduleReconnect();
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
publishConnectionState(state) {
|
|
180
|
-
return Ref.set(this.stateRef, Option.some(state));
|
|
181
|
-
}
|
|
182
|
-
awaitConnectAuth(handshakeSettled) {
|
|
183
|
-
const authEffect = this.sendRpc(Connect, {
|
|
184
|
-
agentKey: this.options.agentKey,
|
|
185
|
-
minProtocol: PROTOCOL_VERSION,
|
|
186
|
-
maxProtocol: PROTOCOL_VERSION,
|
|
187
|
-
});
|
|
188
|
-
return Effect.raceFirst(authEffect, Deferred.await(handshakeSettled)).pipe(Effect.tap((value) => Effect.sync(() => {
|
|
189
|
-
this._helloOk = value;
|
|
190
|
-
})));
|
|
191
|
-
}
|
|
192
|
-
sendRpcEffect(definition, params, timeoutMs) {
|
|
193
|
-
return Effect.gen(this, function* () {
|
|
194
|
-
const state = yield* Ref.get(this.stateRef);
|
|
195
|
-
if (Option.isNone(state)) {
|
|
196
|
-
return yield* Effect.fail(makeNotConnectedError());
|
|
197
|
-
}
|
|
198
|
-
const call = state.value.agentConn.call;
|
|
199
|
-
return yield* call(definition, params).pipe(Effect.timeoutFail({
|
|
200
|
-
duration: `${timeoutMs} millis`,
|
|
201
|
-
onTimeout: () => new RpcTimeoutError({ method: definition.name, timeoutMs }),
|
|
202
|
-
}));
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
recordMalformedFrame(err) {
|
|
206
|
-
return Effect.gen(this, function* () {
|
|
207
|
-
const count = yield* Ref.updateAndGet(this.malformedRef, (n) => n + 1);
|
|
208
|
-
if (shouldLogMalformedFrame(count)) {
|
|
209
|
-
yield* Effect.logWarning(`Malformed frame (#${count})`).pipe(Effect.annotateLogs({
|
|
210
|
-
rawPreview: err.raw.slice(0, MALFORMED_FRAME_PREVIEW_CHARS),
|
|
211
|
-
}));
|
|
212
|
-
}
|
|
213
|
-
return null;
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
handleDecodedResponse(decoded) {
|
|
217
|
-
return Effect.gen(this, function* () {
|
|
218
|
-
const state = yield* Ref.get(this.stateRef);
|
|
219
|
-
if (Option.isNone(state))
|
|
220
|
-
return;
|
|
221
|
-
yield* state.value.agentConn.resolve(decoded.frame).pipe(Effect.asVoid);
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
// Agent clients receive no inbound RPC; if a malicious or stray
|
|
225
|
-
// ServerRequest arrives, log + drop.
|
|
226
|
-
handleDecodedServerRequest(decoded) {
|
|
227
|
-
return Effect.logWarning("AgentClient received unexpected ServerRequest").pipe(Effect.annotateLogs({ method: decoded.frame.method }));
|
|
228
|
-
}
|
|
229
|
-
handleDecodedNotification(decoded) {
|
|
230
|
-
return this.subscribers.dispatch(decoded);
|
|
231
|
-
}
|
|
232
|
-
handleDecodedFrame(decoded) {
|
|
233
|
-
switch (decoded._tag) {
|
|
234
|
-
case "ResponseSuccess":
|
|
235
|
-
case "ResponseError":
|
|
236
|
-
return this.handleDecodedResponse(decoded);
|
|
237
|
-
case "ServerRequest":
|
|
238
|
-
return this.handleDecodedServerRequest(decoded);
|
|
239
|
-
case "Notification":
|
|
240
|
-
return this.handleDecodedNotification(decoded);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
handleIncoming(raw) {
|
|
244
|
-
return Effect.gen(this, function* () {
|
|
245
|
-
const decodedFrames = yield* decodeFrames(raw).pipe(Effect.catchTag("MalformedFrameError", (err) => this.recordMalformedFrame(err)));
|
|
246
|
-
if (decodedFrames === null)
|
|
247
|
-
return;
|
|
248
|
-
for (const decoded of decodedFrames) {
|
|
249
|
-
yield* this.handleDecodedFrame(decoded);
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
failConnectionPending(state) {
|
|
254
|
-
return state.agentConn.failAllPending(new NotConnectedError({ message: MSG_NOT_CONNECTED }));
|
|
255
|
-
}
|
|
256
|
-
failAllPending(message) {
|
|
257
|
-
return Effect.gen(this, function* () {
|
|
258
|
-
const state = yield* Ref.get(this.stateRef);
|
|
259
|
-
if (Option.isNone(state))
|
|
260
|
-
return;
|
|
261
|
-
yield* state.value.agentConn.failAllPending(new NotConnectedError({ message }));
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
scheduleReconnect() {
|
|
265
|
-
if (this.closed || this.reconnectFiber !== null)
|
|
266
|
-
return;
|
|
267
|
-
const attempt = this.connectEffect().pipe(Effect.tap((helloOk) => Effect.gen(this, function* () {
|
|
268
|
-
try {
|
|
269
|
-
this.options.onReconnect?.(helloOk);
|
|
270
|
-
}
|
|
271
|
-
catch (err) {
|
|
272
|
-
yield* Effect.logWarning("onReconnect handler threw", err);
|
|
273
|
-
}
|
|
274
|
-
})), Effect.either, Effect.flatMap(Either.match({
|
|
275
|
-
onLeft: () => Effect.fail(new ReconnectAttemptFailedError({
|
|
276
|
-
reason: "reconnect attempt failed",
|
|
277
|
-
})),
|
|
278
|
-
onRight: (value) => Effect.succeed(value),
|
|
279
|
-
})));
|
|
280
|
-
const backoff = Schedule.exponential(Duration.millis(BASE_RECONNECT_DELAY_MS), RECONNECT_BACKOFF_FACTOR).pipe(Schedule.either(Schedule.spaced(Duration.millis(MAX_RECONNECT_DELAY_MS))), Schedule.jittered);
|
|
281
|
-
const loop = attempt.pipe(Effect.retry(backoff), Effect.asVoid, Effect.catchAll(() => Effect.void), Effect.ensuring(Effect.sync(() => {
|
|
282
|
-
this.reconnectFiber = null;
|
|
283
|
-
})), Effect.provide(NodeSocket.layerWebSocketConstructor));
|
|
284
|
-
this.reconnectFiber = this.runtime.runFork(loop);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
1
|
+
export { MoltZapAgentClient } from "@moltzap/protocol/socket";
|
|
287
2
|
//# sourceMappingURL=agent-client.js.map
|
package/dist/agent-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-client.js","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-client.js","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-client.d.ts","sourceRoot":"","sources":["../src/app-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-client.js","sourceRoot":"","sources":["../src/app-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/auth.d.ts
CHANGED
|
@@ -1,23 +1,15 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { Register } from "@moltzap/protocol/identity";
|
|
3
|
+
import type { ResultOf } from "@moltzap/protocol/rpc";
|
|
2
4
|
/**
|
|
3
5
|
* HTTP response from the agent registration endpoints
|
|
4
|
-
* (`/api/v1/auth/register`
|
|
6
|
+
* (`/api/v1/auth/register`).
|
|
5
7
|
*/
|
|
6
|
-
export
|
|
7
|
-
agentId: string;
|
|
8
|
-
apiKey: string;
|
|
9
|
-
claimUrl: string;
|
|
10
|
-
claimToken: string;
|
|
11
|
-
}
|
|
8
|
+
export type RegisterResponse = ResultOf<typeof Register>;
|
|
12
9
|
/** Options for {@link registerAgent}. */
|
|
13
10
|
export interface RegisterAgentOptions {
|
|
14
11
|
description?: string;
|
|
15
12
|
inviteCode?: string;
|
|
16
|
-
/**
|
|
17
|
-
* When set, registers via the secret-gated admin endpoint and pre-claims
|
|
18
|
-
* the agent for this user. See {@link registerAgent}.
|
|
19
|
-
*/
|
|
20
|
-
ownerUserId?: string;
|
|
21
13
|
}
|
|
22
14
|
declare const RegisterAgentError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
23
15
|
readonly _tag: "RegisterAgentError";
|
|
@@ -32,9 +24,8 @@ export declare class RegisterAgentError extends RegisterAgentError_base<{
|
|
|
32
24
|
* endpoints — the WebSocket dance is `MoltZapAgentClient`'s job; this just
|
|
33
25
|
* returns the credentials the caller feeds it as `agentKey` at construction.
|
|
34
26
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* to the public `/api/v1/auth/register` endpoint.
|
|
27
|
+
* Uses the public `/api/v1/auth/register` endpoint. Server boot policy owns
|
|
28
|
+
* the registered agent immediately and returns the credential once.
|
|
38
29
|
*/
|
|
39
30
|
export declare const registerAgent: (baseUrl: string, name: string, opts?: RegisterAgentOptions) => Effect.Effect<RegisterResponse, RegisterAgentError>;
|
|
40
31
|
export {};
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAMA,OAAO,EAAQ,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAMA,OAAO,EAAQ,MAAM,EAAkB,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEzD,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;;;;AASD,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC7E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;AAOL;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,MAAM,EACf,MAAM,MAAM,EACZ,OAAM,oBAAyB,KAC9B,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAgBlD,CAAC"}
|
package/dist/auth.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { HttpClient, HttpClientRequest, HttpClientResponse, } from "@effect/platform";
|
|
2
2
|
import { NodeHttpClient } from "@effect/platform-node";
|
|
3
|
-
import { Data, Effect, Either } from "effect";
|
|
3
|
+
import { Data, Effect, Either, Schema } from "effect";
|
|
4
|
+
import { Register } from "@moltzap/protocol/identity";
|
|
4
5
|
const PUBLIC_PATH = "/api/v1/auth/register";
|
|
5
|
-
const ADMIN_PATH = "/api/v1/admin/register-agent";
|
|
6
6
|
const HTTP_SUCCESS_STATUS_MIN = 200;
|
|
7
7
|
const HTTP_REDIRECT_STATUS_MIN = 300;
|
|
8
|
+
const decodeRegisterBody = Schema.decodeUnknown(Register.paramsSchema);
|
|
9
|
+
const encodeRegisterBody = Schema.encode(Register.paramsSchema);
|
|
10
|
+
const decodeRegisterResult = Schema.decodeUnknown(Register.resultSchema);
|
|
8
11
|
export class RegisterAgentError extends Data.TaggedError("RegisterAgentError") {
|
|
9
12
|
}
|
|
10
13
|
const registerAgentError = (message, cause) => new RegisterAgentError({ message, cause });
|
|
@@ -13,9 +16,8 @@ const registerAgentError = (message, cause) => new RegisterAgentError({ message,
|
|
|
13
16
|
* endpoints — the WebSocket dance is `MoltZapAgentClient`'s job; this just
|
|
14
17
|
* returns the credentials the caller feeds it as `agentKey` at construction.
|
|
15
18
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* to the public `/api/v1/auth/register` endpoint.
|
|
19
|
+
* Uses the public `/api/v1/auth/register` endpoint. Server boot policy owns
|
|
20
|
+
* the registered agent immediately and returns the credential once.
|
|
19
21
|
*/
|
|
20
22
|
export const registerAgent = (baseUrl, name, opts = {}) => registerAgentRequest(baseUrl, name, opts).pipe(Effect.provide(NodeHttpClient.layer), Effect.either, Effect.flatMap(Either.match({
|
|
21
23
|
onLeft: (cause) => Effect.fail(cause instanceof RegisterAgentError
|
|
@@ -26,8 +28,8 @@ export const registerAgent = (baseUrl, name, opts = {}) => registerAgentRequest(
|
|
|
26
28
|
function registerAgentRequest(baseUrl, name, opts) {
|
|
27
29
|
return Effect.gen(function* () {
|
|
28
30
|
const client = yield* HttpClient.HttpClient;
|
|
29
|
-
const body = registerAgentBody(name, opts);
|
|
30
|
-
const request = registerHttpRequest(baseUrl,
|
|
31
|
+
const body = yield* registerAgentBody(name, opts);
|
|
32
|
+
const request = registerHttpRequest(baseUrl, PUBLIC_PATH, body);
|
|
31
33
|
const response = yield* client
|
|
32
34
|
.execute(request)
|
|
33
35
|
.pipe(Effect.mapError((cause) => registerAgentError("Register request failed", cause)));
|
|
@@ -37,19 +39,13 @@ function registerAgentRequest(baseUrl, name, opts) {
|
|
|
37
39
|
});
|
|
38
40
|
}
|
|
39
41
|
function registerAgentBody(name, opts) {
|
|
40
|
-
return {
|
|
42
|
+
return decodeRegisterBody({
|
|
41
43
|
name,
|
|
42
44
|
...(opts?.description !== undefined
|
|
43
45
|
? { description: opts.description }
|
|
44
46
|
: {}),
|
|
45
47
|
...(opts?.inviteCode !== undefined ? { inviteCode: opts.inviteCode } : {}),
|
|
46
|
-
|
|
47
|
-
? { ownerUserId: opts.ownerUserId }
|
|
48
|
-
: {}),
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
function registerPath(opts) {
|
|
52
|
-
return opts?.ownerUserId ? ADMIN_PATH : PUBLIC_PATH;
|
|
48
|
+
}).pipe(Effect.flatMap(encodeRegisterBody), Effect.mapError((cause) => registerAgentError("Register request body decode failed", cause)));
|
|
53
49
|
}
|
|
54
50
|
function registerHttpRequest(baseUrl, path, body) {
|
|
55
51
|
return HttpClientRequest.post(`${baseUrl}${path}`).pipe(HttpClientRequest.setHeader("Content-Type", "application/json"), HttpClientRequest.bodyUnsafeJson(body));
|
|
@@ -72,7 +68,7 @@ function decodeResponseText(response) {
|
|
|
72
68
|
function decodeRegisterResponse(response) {
|
|
73
69
|
return response.json.pipe(Effect.either, Effect.flatMap(Either.match({
|
|
74
70
|
onLeft: (cause) => Effect.fail(registerAgentError("Register response decode failed", cause)),
|
|
75
|
-
onRight: (value) => Effect.
|
|
71
|
+
onRight: (value) => decodeRegisterResult(value).pipe(Effect.mapError((cause) => registerAgentError("Register response decode failed", cause))),
|
|
76
72
|
})));
|
|
77
73
|
}
|
|
78
74
|
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,9 @@
|
|
|
3
3
|
* formatter parameterized by markup variant or per-channel formatter
|
|
4
4
|
* callback.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* - `packages/nanoclaw-channel/src/channels/moltzap.ts → formatCrossConvNanoclaw`
|
|
10
|
-
* (markup variant: `"xml-system-reminder"`)
|
|
11
|
-
*
|
|
12
|
-
* Behavioral parity is locked via the golden-snapshot fixtures captured
|
|
13
|
-
* pre-refactor — see arch sub-issue #605 §3.5 and §4.6.
|
|
6
|
+
* Used by the openclaw channel (markup variant `"json-header"`) and the
|
|
7
|
+
* nanoclaw channel (markup variant `"xml-system-reminder"`). Behavioral
|
|
8
|
+
* parity across both is locked via golden-snapshot fixtures.
|
|
14
9
|
*/
|
|
15
10
|
import { type CrossConvMessage } from "../service.js";
|
|
16
11
|
export type { CrossConvMessage };
|
|
@@ -22,13 +17,13 @@ export type CrossConvFormatter = (messages: readonly CrossConvMessage[], opts: {
|
|
|
22
17
|
* Returns the formatted block, or `null` when `messages` is empty.
|
|
23
18
|
*
|
|
24
19
|
* Markup variants:
|
|
25
|
-
* - `"json-header"`:
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* - `"xml-system-reminder"`:
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
20
|
+
* - `"json-header"`: openclaw output. Header is
|
|
21
|
+
* `"Messages (untrusted metadata):"` followed by a ` ```json ` fenced
|
|
22
|
+
* JSON array.
|
|
23
|
+
* - `"xml-system-reminder"`: nanoclaw output. `<messages>` wrapper
|
|
24
|
+
* around `<message>` entries with `sender`/`conversation`/`time`
|
|
25
|
+
* attributes; sender/conv/time/text all run through
|
|
26
|
+
* `sanitizeForSystemReminder`.
|
|
32
27
|
*
|
|
33
28
|
* Or pass a custom `formatter` callback — channel-base owns the empty-check
|
|
34
29
|
* + ownAgentId disambiguation; the callback owns the markup.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-cross-conv.d.ts","sourceRoot":"","sources":["../../src/channel-base/format-cross-conv.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"format-cross-conv.d.ts","sourceRoot":"","sources":["../../src/channel-base/format-cross-conv.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,qBAAqB,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG,CAC/B,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,IAAI,EAAE;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,KAClC,MAAM,CAAC;AAmDZ;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,IAAI,EACA;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAA;CAAE,GAC1E,MAAM,GAAG,IAAI,CAWf"}
|
|
@@ -3,14 +3,9 @@
|
|
|
3
3
|
* formatter parameterized by markup variant or per-channel formatter
|
|
4
4
|
* callback.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* - `packages/nanoclaw-channel/src/channels/moltzap.ts → formatCrossConvNanoclaw`
|
|
10
|
-
* (markup variant: `"xml-system-reminder"`)
|
|
11
|
-
*
|
|
12
|
-
* Behavioral parity is locked via the golden-snapshot fixtures captured
|
|
13
|
-
* pre-refactor — see arch sub-issue #605 §3.5 and §4.6.
|
|
6
|
+
* Used by the openclaw channel (markup variant `"json-header"`) and the
|
|
7
|
+
* nanoclaw channel (markup variant `"xml-system-reminder"`). Behavioral
|
|
8
|
+
* parity across both is locked via golden-snapshot fixtures.
|
|
14
9
|
*/
|
|
15
10
|
import { sanitizeForSystemReminder, } from "../service.js";
|
|
16
11
|
const CROSS_CONV_HEADER_JSON = "Messages (untrusted metadata):";
|
|
@@ -42,13 +37,13 @@ function formatXmlSystemReminder(messages, opts) {
|
|
|
42
37
|
* Returns the formatted block, or `null` when `messages` is empty.
|
|
43
38
|
*
|
|
44
39
|
* Markup variants:
|
|
45
|
-
* - `"json-header"`:
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* - `"xml-system-reminder"`:
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
40
|
+
* - `"json-header"`: openclaw output. Header is
|
|
41
|
+
* `"Messages (untrusted metadata):"` followed by a ` ```json ` fenced
|
|
42
|
+
* JSON array.
|
|
43
|
+
* - `"xml-system-reminder"`: nanoclaw output. `<messages>` wrapper
|
|
44
|
+
* around `<message>` entries with `sender`/`conversation`/`time`
|
|
45
|
+
* attributes; sender/conv/time/text all run through
|
|
46
|
+
* `sanitizeForSystemReminder`.
|
|
52
47
|
*
|
|
53
48
|
* Or pass a custom `formatter` callback — channel-base owns the empty-check
|
|
54
49
|
* + ownAgentId disambiguation; the callback owns the markup.
|