@cef-ai/vault-sdk 0.1.0 → 0.2.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.
Files changed (48) hide show
  1. package/README.md +96 -20
  2. package/dist/client.d.ts +97 -3
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +100 -2
  5. package/dist/client.js.map +1 -1
  6. package/dist/core/endpoints.d.ts +1 -0
  7. package/dist/core/endpoints.d.ts.map +1 -1
  8. package/dist/core/endpoints.js +1 -0
  9. package/dist/core/endpoints.js.map +1 -1
  10. package/dist/core/types.d.ts +5 -0
  11. package/dist/core/types.d.ts.map +1 -1
  12. package/dist/fluent/job.d.ts +16 -0
  13. package/dist/fluent/job.d.ts.map +1 -1
  14. package/dist/fluent/job.js +55 -0
  15. package/dist/fluent/job.js.map +1 -1
  16. package/dist/fluent/scope.d.ts +24 -0
  17. package/dist/fluent/scope.d.ts.map +1 -1
  18. package/dist/fluent/scope.js +70 -0
  19. package/dist/fluent/scope.js.map +1 -1
  20. package/dist/index.d.ts +3 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/internal/auto-add-proxy.d.ts +55 -0
  25. package/dist/internal/auto-add-proxy.d.ts.map +1 -0
  26. package/dist/internal/auto-add-proxy.js +89 -0
  27. package/dist/internal/auto-add-proxy.js.map +1 -0
  28. package/dist/internal/delegation-token.d.ts +26 -0
  29. package/dist/internal/delegation-token.d.ts.map +1 -0
  30. package/dist/internal/delegation-token.js +89 -0
  31. package/dist/internal/delegation-token.js.map +1 -0
  32. package/dist/internal/gateway-info.d.ts +16 -0
  33. package/dist/internal/gateway-info.d.ts.map +1 -0
  34. package/dist/internal/gateway-info.js +34 -0
  35. package/dist/internal/gateway-info.js.map +1 -0
  36. package/dist/internal/marketplace.d.ts +13 -0
  37. package/dist/internal/marketplace.d.ts.map +1 -1
  38. package/dist/internal/marketplace.js +6 -0
  39. package/dist/internal/marketplace.js.map +1 -1
  40. package/dist/internal/onboarding.d.ts +99 -0
  41. package/dist/internal/onboarding.d.ts.map +1 -0
  42. package/dist/internal/onboarding.js +148 -0
  43. package/dist/internal/onboarding.js.map +1 -0
  44. package/dist/internal/scopes.d.ts +9 -0
  45. package/dist/internal/scopes.d.ts.map +1 -1
  46. package/dist/internal/scopes.js +25 -2
  47. package/dist/internal/scopes.js.map +1 -1
  48. package/package.json +7 -1
package/README.md CHANGED
@@ -11,29 +11,89 @@ pnpm add @cef-ai/vault-sdk
11
11
 
12
12
  ## Quickstart
13
13
 
14
+ Browser app driving onboarding through an embed-wallet:
15
+
14
16
  ```ts
15
- import { VaultSDK, CereWallet } from "@cef-ai/vault-sdk";
17
+ import { VaultSDK, type EnsureProgressEvent } from "@cef-ai/vault-sdk";
16
18
 
17
- const wallet = await CereWallet.fromMnemonic(process.env.WALLET_MNEMONIC!);
18
19
  const sdk = new VaultSDK({
19
20
  endpoint: "https://vault.cere.io",
20
- garEndpoint: "https://gar.cere.io", // required for vault.agents.connect
21
- wallet,
21
+ garEndpoint: "https://gar.cere.io",
22
+ rpcEndpoint: "wss://rpc.devnet.cere.network/ws",
23
+ s3GatewayAuthInfoUrl: "https://ddc-s3-gateway.compute.dev.ddcdragon.com/auth/info",
24
+ wallet: myWallet, // any `Wallet` adapter
25
+ embedWalletForOnboarding: myEmbedWallet, // optional; chain-side autoAddProxy
26
+ });
27
+
28
+ const vault = await sdk.vault.ensure({
29
+ onProgress: (e: EnsureProgressEvent) => console.log(e.kind),
22
30
  });
23
- const vault = await sdk.vault.ensure({ delegationToken });
24
31
 
25
32
  await vault.scope("default").publish({
26
33
  type: "user_message",
27
34
  context: "conv-42",
28
35
  payload: { text: "Hi" },
29
36
  });
37
+ ```
30
38
 
31
- const sub = vault.scope("default").subscribe(
32
- { context: "conv-42", types: ["assistant_message"] },
33
- (event) => console.log(event.payload),
34
- );
39
+ Server-side (pre-provisioned wallet, skip onboarding):
40
+
41
+ ```ts
42
+ import { VaultSDK, CereWallet } from "@cef-ai/vault-sdk";
43
+
44
+ const wallet = await CereWallet.fromMnemonic(process.env.WALLET_MNEMONIC!);
45
+ const sdk = new VaultSDK({
46
+ endpoint: "https://vault.cere.io",
47
+ garEndpoint: "https://gar.cere.io",
48
+ s3GatewayAuthInfoUrl: "https://ddc-s3-gateway.compute.dev.ddcdragon.com/auth/info",
49
+ wallet,
50
+ });
51
+ const vault = await sdk.vault.ensure({ onboard: false });
35
52
  ```
36
53
 
54
+ ## Onboarding
55
+
56
+ `vault.ensure()` runs the DDC onboarding pipeline by default. It probes the
57
+ gateway, optionally bootstraps a devnet wallet, submits the on-chain
58
+ `proxy.addProxy` extrinsic, and polls until the gateway sees the proxy.
59
+ Internally:
60
+
61
+ 1. **Status check** — `GET /auth/onboarding/status` (404 means prod, skip).
62
+ 2. **Bootstrap (devnet only)** — if `faucet_eligible` or `ddc_seed_eligible`,
63
+ `POST /auth/onboarding/bootstrap` to drip CERE and seed the DDC deposit.
64
+ 3. **autoAddProxy** — when the wallet is not yet a registered gateway proxy,
65
+ submit `proxy.addProxy(<gateway>, NonTransfer, 0)` via the configured
66
+ `embedWalletForOnboarding`.
67
+ 4. **Poll-until-ready** — re-fetch status until `gateway_is_proxy === true`
68
+ or the time budget is exhausted (defaults: 2 s interval / 60 s budget).
69
+
70
+ `onProgress` receives an `EnsureProgressEvent` for each stage:
71
+
72
+ | Kind | Meaning |
73
+ | --- | --- |
74
+ | `inspecting-wallet` | Gateway status probe is in flight. |
75
+ | `funding-wallet` | Devnet auto-fund (CERE drip + DDC seed deposit); never fires on prod. |
76
+ | `gateway-authorization-required` | Onboarding required; carries `status: OnboardingStatus`. |
77
+ | `authorizing-gateway` | Wallet popup is open for the `addProxy` signature. |
78
+ | `authorization-submitted` | Extrinsic accepted into the mempool; carries `txHash`. |
79
+ | `awaiting-chain-confirmation` | Polling the gateway until it sees the proxy. |
80
+ | `gateway-authorized` | Gateway confirmed the proxy on-chain. |
81
+ | `signing-delegation` | Building the DDC delegation token from the wallet. |
82
+ | `provisioning-vault` | Calling `POST /api/v1/vaults` to claim the record. |
83
+
84
+ Two errors can surface:
85
+
86
+ - `OnboardingTimeoutError` — the proxy poll exhausted its budget. The
87
+ extrinsic may still confirm later; calling `ensure()` again is safe.
88
+ - `OnboardingRequiredError` — `ensure({ onboard: false })` was passed but
89
+ the gateway reports the wallet still needs the proxy step. Server flows
90
+ catch this to fail fast.
91
+
92
+ `@cere-ddc-sdk/blockchain` (used by `autoAddProxy`) and
93
+ `@cere-ddc-sdk/ddc-client` (used to build the delegation token internally)
94
+ are declared as `optionalDependencies`. Apps that exercise the onboarding
95
+ or internal-token-build paths must install them as direct dependencies.
96
+
37
97
  ## Connecting an agent
38
98
 
39
99
  `vault.agents.connect({ manifest, scope, settings })` is the high-level entry
@@ -58,28 +118,34 @@ already have a pre-signed `agreementSignature` (e.g. from a custodial flow),
58
118
  drop down to the low-level `Agents.connect(vaultId, ConnectAgentRequest)`
59
119
  exported from `@cef-ai/vault-sdk/internal`.
60
120
 
61
- For delegation-token construction (`vault.ensure({ delegationToken })`),
62
- see `examples/vault-chat/utils/vault-token.ts` — the SDK accepts the token
63
- as opaque to avoid a runtime dep on `@cere-ddc-sdk/ddc-client`.
64
-
65
121
  ## Surface
66
122
 
67
123
  | Method | Maps to |
68
124
  | --- | --- |
69
- | `sdk.vault.ensure()` / `.current()` / `.rotateCredentials()` | `POST` / `GET` / `PUT /api/v1/vaults[/credentials]` |
125
+ | `sdk.vault.ensure({ onboard?, onProgress?, delegationToken? })` | runs the onboarding pipeline + `POST /api/v1/vaults` |
126
+ | `sdk.vault.current()` / `.rotateCredentials()` | `GET` / `PUT /api/v1/vaults[/credentials]` |
70
127
  | `vault.scopes.{list,get,create,update,delete}` | `/api/v1/vaults/:v/scopes` |
71
128
  | `vault.agents.connect({ manifest, scope, settings })` (signs GAR internally) | `POST {garEndpoint}/api/v1/agreements` + `POST /api/v1/vaults/:v/agents` |
72
129
  | `vault.agents.{list,get}` → `AgentConnectionHandle` | `/api/v1/vaults/:v/agents` |
73
130
  | `handle.update(settings)` / `handle.disconnect()` | `PATCH` / `DELETE` |
74
131
  | `handle.cubby(alias).query(...)` / `.exec(...)` | `/scopes/:s/cubbies/:alias/{query,exec}` |
75
- | `handle.jobs.list()` | `/agents/:a/jobs` |
132
+ | `handle.jobs.list({ state?, cursor?, limit? })` | `/agents/:a/jobs` |
76
133
  | `vault.scope(s).publish(input)` | `POST /scopes/:s/events` |
77
- | `vault.scope(s).subscribe(filter, handler)` | poll-backed long-poll over `/streams/:c/events` |
134
+ | `vault.scope(s).subscribe(filter, handler, opts?)` | poll-backed long-poll over `/streams/:c/events` |
135
+ | `vault.scope(s).subscribeAll(filter, handler, { refreshIntervalMs? })` | fans out across `streams.list()`; refreshes every 30 s by default |
78
136
  | `vault.scope(s).streams.list()` / `.get(c)` / `.stream(c).events.list()` | `/scopes/:s/streams[/:c[/events]]` |
79
- | `vault.jobs.list()` / `.get(id).activities.list()` | `/jobs[/...]` |
80
- | `sdk.marketplace.getAgent(id, version?)` | public `GET /api/v1/marketplace/agents/...` |
137
+ | `vault.jobs.list({ state? })` / `.get(jobId).activities.list()` | `/jobs[/...]` |
138
+ | `handle.jobs.get(jobId).activities.subscribe({ since? }, handler)` | poll-backed activity tail with seen-id dedupe |
139
+ | `sdk.marketplace.getAgent(id, version?)` | public `GET /api/v1/marketplace/agents/:id[/versions/:v]` |
140
+ | `sdk.marketplace.list({ limit?, cursor?, query? })` | public `GET /api/v1/marketplace/agents` |
81
141
  | `sdk.health.live()` / `.ready()` | public `GET /health` / `/ready` |
82
142
 
143
+ `Scope.metadata: Record<string, unknown>` is a free-form, server-stored map.
144
+ `vault.scopes.update(name, { metadata })` is a partial patch — server
145
+ semantics are shallow-merge per top-level key (keys in the patch overwrite,
146
+ others are preserved). The SDK whitelists the request body so only the keys
147
+ you supply reach the wire.
148
+
83
149
  ## Pluggable auth
84
150
 
85
151
  `VaultSDK` accepts either a `wallet` (default → `WalletAuthProvider`) or a
@@ -100,6 +166,11 @@ The `Wallet` interface is `{ pubkey(), sign(bytes), sigType?() }`.
100
166
  - `CereWallet.fromMnemonic(mnemonic, type?)` — wraps `UriSigner`.
101
167
  - `CereWallet.fromKeystore(json, passphrase, type?)` — Cere/Polkadot JSON keystore.
102
168
 
169
+ Browser apps using `@cere/embed-wallet` should write a thin adapter
170
+ implementing the 3-method `Wallet` interface against the embed-wallet's
171
+ signer surface; the chat-app pattern at `cef-chat/src/lib/wallet/embed-adapter.ts`
172
+ is a working reference.
173
+
103
174
  The `UriSigner` / `JsonSigner` classes powering `CereWallet` are vendored
104
175
  from [`@cere-activity-sdk/signers`](https://github.com/cere-io/cere-activity-sdk/tree/main/packages/signers)
105
176
  (Apache-2.0); see `src/wallet/cere-internal/README.md` for attribution and
@@ -113,8 +184,13 @@ Browser-extension and CereWalletNative adapters live in their own packages.
113
184
 
114
185
  `@cef-ai/vault-sdk/internal` re-exports `Vaults`, `Scopes`, `Agents`,
115
186
  `Events`, `Browse`, `Cubbies`, `Health`, `Marketplace`, plus
116
- `VaultHttpClient` and `endpoints`. Use it only when the fluent surface
117
- isn't enough.
187
+ `VaultHttpClient` and `endpoints`.
188
+
189
+ Onboarding primitives (`runOnboarding`, `pollUntilProxyReady`,
190
+ `getOnboardingStatus`, `runBootstrap`, `walletToOnboardingSigner`),
191
+ `autoAddProxy`, and `getGatewayInfo` live under their respective files in
192
+ `src/internal/` for advanced consumers that need to drive the pipeline
193
+ piecewise. Use them only when the fluent surface isn't enough.
118
194
 
119
195
  ## Spec
120
196
 
package/dist/client.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Marketplace } from "./internal/marketplace.js";
2
2
  import { Health } from "./internal/health.js";
3
3
  import { Vault } from "./fluent/vault.js";
4
+ import { type OnboardingStatus } from "./internal/onboarding.js";
4
5
  import type { AuthProvider } from "./auth/provider.js";
5
6
  import type { Wallet } from "./wallet/adapter.js";
6
7
  export interface VaultSDKConfig {
@@ -23,23 +24,116 @@ export interface VaultSDKConfig {
23
24
  auth?: AuthProvider;
24
25
  fetch?: typeof fetch;
25
26
  timeoutMs?: number;
27
+ /**
28
+ * S3 Gateway ed25519 pubkey (`0x`-hex or bare hex). When set, the SDK can
29
+ * build a delegation token internally on `vault.ensure()` if none is passed.
30
+ * Skip the round-trip when you know the gateway identity ahead of time.
31
+ */
32
+ s3GatewayPubkey?: string;
33
+ /**
34
+ * Fallback URL used to fetch the gateway pubkey when `s3GatewayPubkey` is
35
+ * not set. Defaults to the dev gateway. Override for prod.
36
+ */
37
+ s3GatewayAuthInfoUrl?: string;
38
+ /**
39
+ * Cere chain WebSocket RPC endpoint. Used by the onboarding pipeline when
40
+ * the wallet has not yet registered the gateway as an on-chain proxy and
41
+ * `vault.ensure()` needs to submit `proxy.addProxy` on the user's behalf.
42
+ * Defaults to the Cere devnet RPC.
43
+ */
44
+ rpcEndpoint?: string;
45
+ /**
46
+ * Cere embed-wallet instance (NOT the SDK `Wallet` adapter) used by the
47
+ * onboarding pipeline when it must submit an extrinsic via
48
+ * `@cere-ddc-sdk/blockchain`'s `CereWalletSigner`. Carries the
49
+ * Polkadot-extension-style API the chain client needs — a level lower
50
+ * than the pure signing surface our `Wallet` adapter exposes. Required
51
+ * only when `vault.ensure()` discovers onboarding-needed; can be omitted
52
+ * if `ensure({ onboard: false })` is used or the wallet is already a
53
+ * registered proxy.
54
+ */
55
+ embedWalletForOnboarding?: unknown;
26
56
  }
27
57
  export interface EnsureVaultOptions {
28
58
  name?: string;
29
- /** DDC delegation token issued during onboarding. Opaque base58 string. */
30
- delegationToken: string;
59
+ /**
60
+ * Pre-built DDC delegation token. Optional: if omitted, the SDK builds one
61
+ * internally using the configured `wallet` and either `s3GatewayPubkey`
62
+ * (static) or `s3GatewayAuthInfoUrl` (fetched). Building requires the
63
+ * optional dep `@cere-ddc-sdk/ddc-client` to be installed.
64
+ */
65
+ delegationToken?: string;
66
+ /**
67
+ * Run the DDC onboarding pipeline (status / bootstrap / addProxy / poll)
68
+ * before claiming the vault. Defaults to `true`. Set `false` for server
69
+ * flows that assume pre-provisioned wallets — in that case, an
70
+ * `OnboardingRequiredError` is raised if the gateway later reports the
71
+ * wallet still needs the proxy registration step.
72
+ */
73
+ onboard?: boolean;
74
+ /** Progress hook for UIs that want to drive a stepper / spinner. */
75
+ onProgress?: (e: EnsureProgressEvent) => void;
76
+ /** Poll cadence while waiting for the gateway to see the new proxy. */
77
+ proxyPollIntervalMs?: number;
78
+ /** Total time budget for the proxy-confirmation poll. */
79
+ proxyPollTimeoutMs?: number;
31
80
  }
81
+ /**
82
+ * Progress signal emitted by `vault.ensure()` so UIs can render a
83
+ * stepper without polling internal state. The order is roughly the
84
+ * order of emission, but `gateway-authorization-required` and friends
85
+ * only fire on the onboarding-required path.
86
+ */
87
+ export type EnsureProgressEvent = {
88
+ kind: "inspecting-wallet";
89
+ } | {
90
+ kind: "funding-wallet";
91
+ } | {
92
+ kind: "gateway-authorization-required";
93
+ status: OnboardingStatus;
94
+ } | {
95
+ kind: "authorizing-gateway";
96
+ } | {
97
+ kind: "authorization-submitted";
98
+ txHash: string;
99
+ } | {
100
+ kind: "awaiting-chain-confirmation";
101
+ } | {
102
+ kind: "gateway-authorized";
103
+ } | {
104
+ kind: "signing-delegation";
105
+ } | {
106
+ kind: "provisioning-vault";
107
+ };
32
108
  export declare class VaultSDK {
33
109
  private readonly http;
34
110
  private readonly marketplaceHttp;
35
111
  private readonly vaults;
36
112
  private readonly gar?;
37
113
  private readonly wallet?;
114
+ private readonly s3GatewayPubkey?;
115
+ private readonly s3GatewayAuthInfoUrl;
116
+ private readonly rpcEndpoint;
117
+ private readonly embedWalletForOnboarding?;
118
+ private readonly fetchFn;
119
+ private cachedGatewayPubkey?;
38
120
  readonly marketplace: Marketplace;
39
121
  readonly health: Health;
40
122
  constructor(config: VaultSDKConfig);
123
+ /**
124
+ * Resolves the gateway pubkey: prefers the static config, falls back to
125
+ * `/auth/info` (cached for the SDK's lifetime).
126
+ */
127
+ private resolveGatewayPubkey;
128
+ /**
129
+ * Strip `/auth/info` (and any trailing slash) off the configured auth-info
130
+ * URL to reach the gateway base — the prefix the onboarding endpoints sit
131
+ * under. Belongs here, not in onboarding.ts, because the strip is purely
132
+ * a config-shape concern.
133
+ */
134
+ private gatewayBaseUrl;
41
135
  vault: {
42
- ensure: (opts: EnsureVaultOptions) => Promise<Vault>;
136
+ ensure: (opts?: EnsureVaultOptions) => Promise<Vault>;
43
137
  current: () => Promise<Vault>;
44
138
  /** Rotate the SigV4 delegation credential. */
45
139
  rotateCredentials: (vaultId: string, delegationToken: string) => Promise<Vault>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,cAAc;IA8BlC,KAAK;uBACkB,kBAAkB,KAAG,OAAO,CAAC,KAAK,CAAC;uBAOrC,OAAO,CAAC,KAAK,CAAC;QAIjC,8CAA8C;qCAEnC,MAAM,mBACE,MAAM,KACtB,OAAO,CAAC,KAAK,CAAC;MAMjB;CACH"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -6,12 +6,23 @@ import { Health } from "./internal/health.js";
6
6
  import { Vault } from "./fluent/vault.js";
7
7
  import { WalletAuthProvider } from "./auth/wallet.js";
8
8
  import { GarClient } from "./agreements/gar-client.js";
9
+ import { buildVaultDelegationToken, fetchGatewayPubkey, } from "./internal/delegation-token.js";
10
+ import { OnboardingRequiredError, OnboardingTimeoutError, pollUntilProxyReady, runOnboarding, walletToOnboardingSigner, } from "./internal/onboarding.js";
11
+ import { autoAddProxy } from "./internal/auto-add-proxy.js";
12
+ const DEFAULT_S3_GATEWAY_AUTH_INFO_URL = "https://ddc-s3-gateway.compute.dev.ddcdragon.com/auth/info";
13
+ const DEFAULT_RPC_ENDPOINT = "wss://rpc.devnet.cere.network/ws";
9
14
  export class VaultSDK {
10
15
  http;
11
16
  marketplaceHttp;
12
17
  vaults;
13
18
  gar;
14
19
  wallet;
20
+ s3GatewayPubkey;
21
+ s3GatewayAuthInfoUrl;
22
+ rpcEndpoint;
23
+ embedWalletForOnboarding;
24
+ fetchFn;
25
+ cachedGatewayPubkey;
15
26
  marketplace;
16
27
  health;
17
28
  constructor(config) {
@@ -36,15 +47,102 @@ export class VaultSDK {
36
47
  }));
37
48
  }
38
49
  this.wallet = config.wallet;
50
+ this.s3GatewayPubkey = config.s3GatewayPubkey;
51
+ this.s3GatewayAuthInfoUrl =
52
+ config.s3GatewayAuthInfoUrl ?? DEFAULT_S3_GATEWAY_AUTH_INFO_URL;
53
+ this.rpcEndpoint = config.rpcEndpoint ?? DEFAULT_RPC_ENDPOINT;
54
+ this.embedWalletForOnboarding = config.embedWalletForOnboarding;
55
+ this.fetchFn = config.fetch ?? fetch.bind(globalThis);
39
56
  this.vaults = new Vaults(this.http);
40
57
  this.marketplace = new Marketplace(this.marketplaceHttp);
41
58
  this.health = new Health(this.http);
42
59
  }
60
+ /**
61
+ * Resolves the gateway pubkey: prefers the static config, falls back to
62
+ * `/auth/info` (cached for the SDK's lifetime).
63
+ */
64
+ async resolveGatewayPubkey() {
65
+ if (this.s3GatewayPubkey)
66
+ return this.s3GatewayPubkey;
67
+ if (this.cachedGatewayPubkey)
68
+ return this.cachedGatewayPubkey;
69
+ const pk = await fetchGatewayPubkey(this.s3GatewayAuthInfoUrl, this.fetchFn);
70
+ this.cachedGatewayPubkey = pk;
71
+ return pk;
72
+ }
73
+ /**
74
+ * Strip `/auth/info` (and any trailing slash) off the configured auth-info
75
+ * URL to reach the gateway base — the prefix the onboarding endpoints sit
76
+ * under. Belongs here, not in onboarding.ts, because the strip is purely
77
+ * a config-shape concern.
78
+ */
79
+ gatewayBaseUrl() {
80
+ return this.s3GatewayAuthInfoUrl
81
+ .replace(/\/auth\/info\/?$/, "")
82
+ .replace(/\/+$/, "");
83
+ }
43
84
  vault = {
44
- ensure: async (opts) => {
85
+ ensure: async (opts = {}) => {
86
+ const onProgress = opts.onProgress ?? (() => { });
87
+ const wantOnboard = opts.onboard !== false;
88
+ // Onboarding pipeline. Only runs when (a) the consumer hasn't opted
89
+ // out, and (b) we have a wallet to drive the gateway interactions.
90
+ // The wallet-less path skips silently — server-side flows that pass
91
+ // a pre-built `delegationToken` shouldn't touch the chain.
92
+ if (wantOnboard && this.wallet) {
93
+ const signer = walletToOnboardingSigner(this.wallet);
94
+ const gw = this.gatewayBaseUrl();
95
+ onProgress({ kind: "inspecting-wallet" });
96
+ const onb = await runOnboarding(gw, signer, this.fetchFn, () => {
97
+ onProgress({ kind: "funding-wallet" });
98
+ });
99
+ if (onb.kind === "awaiting-proxy") {
100
+ if (!this.embedWalletForOnboarding) {
101
+ throw new OnboardingRequiredError("Onboarding required but no embed-wallet was provided to VaultSDK config. "
102
+ + "Pass `embedWalletForOnboarding` or call ensure({ onboard: false }) and "
103
+ + "run onboarding externally.");
104
+ }
105
+ onProgress({ kind: "gateway-authorization-required", status: onb.status });
106
+ const gatewayPubkey = await this.resolveGatewayPubkey();
107
+ onProgress({ kind: "authorizing-gateway" });
108
+ const { txHash } = await autoAddProxy({
109
+ rpcEndpoint: this.rpcEndpoint,
110
+ gatewayPubKeyHex: gatewayPubkey,
111
+ embedWallet: this.embedWalletForOnboarding,
112
+ });
113
+ onProgress({ kind: "authorization-submitted", txHash });
114
+ onProgress({ kind: "awaiting-chain-confirmation" });
115
+ const ready = await pollUntilProxyReady(gw, signer, {
116
+ intervalMs: opts.proxyPollIntervalMs ?? 2000,
117
+ timeoutMs: opts.proxyPollTimeoutMs ?? 60_000,
118
+ fetchImpl: this.fetchFn,
119
+ });
120
+ if (!ready) {
121
+ throw new OnboardingTimeoutError("Gateway did not see the on-chain proxy within the timeout window. "
122
+ + "The transaction may still confirm later — try ensure() again.");
123
+ }
124
+ onProgress({ kind: "gateway-authorized" });
125
+ }
126
+ // 'skipped' (production gateway 404'd) and 'ready' both fall
127
+ // through silently to the existing claim path.
128
+ }
129
+ let delegationToken = opts.delegationToken;
130
+ if (!delegationToken) {
131
+ if (!this.wallet) {
132
+ throw new Error("vault.ensure() needs either a `delegationToken` or a `wallet` "
133
+ + "configured on VaultSDKConfig to build one internally.");
134
+ }
135
+ onProgress({ kind: "signing-delegation" });
136
+ const gatewayPubkey = await this.resolveGatewayPubkey();
137
+ delegationToken = await buildVaultDelegationToken({
138
+ wallet: this.wallet,
139
+ gatewayPubkey,
140
+ });
141
+ }
142
+ onProgress({ kind: "provisioning-vault" });
45
143
  const rec = await this.vaults.claim({
46
144
  name: opts.name,
47
- delegation_token: opts.delegationToken,
145
+ delegation_token: delegationToken,
48
146
  });
49
147
  return new Vault(this.http, rec, { gar: this.gar, wallet: this.wallet });
50
148
  },
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAiCvD,MAAM,OAAO,QAAQ;IACF,IAAI,CAAkB;IACtB,eAAe,CAAkB;IACjC,MAAM,CAAS;IACf,GAAG,CAAa;IAChB,MAAM,CAAU;IACxB,WAAW,CAAc;IACzB,MAAM,CAAS;IAExB,YAAY,MAAsB;QAChC,MAAM,IAAI,GACR,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC;YAC9B,GAAG,EAAE,MAAM,CAAC,QAAQ;YACpB,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC;YACzC,GAAG,EAAE,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,QAAQ;YAClD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,yEAAyE;YACzE,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CACtB,IAAI,eAAe,CAAC;gBAClB,GAAG,EAAE,MAAM,CAAC,WAAW;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CACH,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,GAAG;QACN,MAAM,EAAE,KAAK,EAAE,IAAwB,EAAkB,EAAE;YACzD,MAAM,GAAG,GAAgB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/C,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,gBAAgB,EAAE,IAAI,CAAC,eAAe;aACvC,CAAC,CAAC;YACH,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,EAAE,KAAK,IAAoB,EAAE;YAClC,MAAM,GAAG,GAAgB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrD,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,8CAA8C;QAC9C,iBAAiB,EAAE,KAAK,EACtB,OAAe,EACf,eAAuB,EACP,EAAE;YAClB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE;gBACvD,gBAAgB,EAAE,eAAe;aAClC,CAAC,CAAC;YACH,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;KACF,CAAC;CACH"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export declare const endpoints: {
17
17
  readonly jobActivity: (v: string, j: string, a: string) => string;
18
18
  readonly cubbyQuery: (v: string, s: string, alias: string) => string;
19
19
  readonly cubbyExec: (v: string, s: string, alias: string) => string;
20
+ readonly marketplaceAgents: () => string;
20
21
  readonly marketplaceAgent: (a: string) => string;
21
22
  readonly marketplaceAgentVersion: (a: string, v: string) => string;
22
23
  readonly health: () => string;
@@ -1 +1 @@
1
- {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../src/core/endpoints.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS;;wBAET,MAAM;mCACK,MAAM;yBAChB,MAAM;wBACP,MAAM,KAAK,MAAM;yBAChB,MAAM;wBACP,MAAM,KAAK,MAAM;8BACX,MAAM,KAAK,MAAM;+BAChB,MAAM,KAAK,MAAM;yBACvB,MAAM,KAAK,MAAM,OAAO,MAAM;+BAExB,MAAM,KAAK,MAAM,OAAO,MAAM;uBAEtC,MAAM;sBACP,MAAM,KAAK,MAAM;4BACX,MAAM,KAAK,MAAM;gCACb,MAAM,KAAK,MAAM;8BACnB,MAAM,KAAK,MAAM,KAAK,MAAM;6BAE7B,MAAM,KAAK,MAAM,SAAS,MAAM;4BAEjC,MAAM,KAAK,MAAM,SAAS,MAAM;mCAEzB,MAAM;0CACC,MAAM,KAAK,MAAM;;;;CAKtC,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC"}
1
+ {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../src/core/endpoints.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS;;wBAET,MAAM;mCACK,MAAM;yBAChB,MAAM;wBACP,MAAM,KAAK,MAAM;yBAChB,MAAM;wBACP,MAAM,KAAK,MAAM;8BACX,MAAM,KAAK,MAAM;+BAChB,MAAM,KAAK,MAAM;yBACvB,MAAM,KAAK,MAAM,OAAO,MAAM;+BAExB,MAAM,KAAK,MAAM,OAAO,MAAM;uBAEtC,MAAM;sBACP,MAAM,KAAK,MAAM;4BACX,MAAM,KAAK,MAAM;gCACb,MAAM,KAAK,MAAM;8BACnB,MAAM,KAAK,MAAM,KAAK,MAAM;6BAE7B,MAAM,KAAK,MAAM,SAAS,MAAM;4BAEjC,MAAM,KAAK,MAAM,SAAS,MAAM;;mCAGzB,MAAM;0CACC,MAAM,KAAK,MAAM;;;;CAKtC,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC"}
@@ -19,6 +19,7 @@ export const endpoints = {
19
19
  jobActivity: (v, j, a) => `${API_BASE}/vaults/${seg(v)}/jobs/${seg(j)}/activities/${seg(a)}`,
20
20
  cubbyQuery: (v, s, alias) => `${API_BASE}/vaults/${seg(v)}/scopes/${seg(s)}/cubbies/${seg(alias)}/query`,
21
21
  cubbyExec: (v, s, alias) => `${API_BASE}/vaults/${seg(v)}/scopes/${seg(s)}/cubbies/${seg(alias)}/exec`,
22
+ marketplaceAgents: () => `${API_BASE}/marketplace/agents`,
22
23
  marketplaceAgent: (a) => `${API_BASE}/marketplace/agents/${seg(a)}`,
23
24
  marketplaceAgentVersion: (a, v) => `${API_BASE}/marketplace/agents/${seg(a)}/versions/${seg(v)}`,
24
25
  health: () => `/health`,
@@ -1 +1 @@
1
- {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../src/core/endpoints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../src/core/endpoints.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,11 @@ export interface Scope {
13
13
  name: string;
14
14
  displayName?: string;
15
15
  streamLabel?: string;
16
+ /**
17
+ * Free-form, top-level shallow-merge map. Server semantics: keys present
18
+ * in the patch overwrite stored keys; absent keys are preserved.
19
+ */
20
+ metadata?: Record<string, unknown>;
16
21
  createdAt: string;
17
22
  }
18
23
  export type AgentConnectionStatus = "provisioning" | "active" | "revoking" | "revoked";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,17 @@
1
1
  import type { VaultHttpClient } from "../core/http.js";
2
2
  import { type ListActivitiesOptions } from "../internal/browse.js";
3
3
  import type { Activity, ActivitiesPage, Job } from "../core/types.js";
4
+ import type { SubscribeOptions, Subscription } from "./subscribe.js";
5
+ export interface ActivitySubscribeFilter {
6
+ /**
7
+ * Only deliver activities whose `startedAt` (or `endedAt` for terminal
8
+ * states) is at or after this ISO-8601 timestamp. Applied client-side.
9
+ */
10
+ since?: string;
11
+ }
12
+ export type ActivityHandler = (activity: Activity) => void | Promise<void>;
4
13
  export declare class JobHandle {
14
+ private readonly http;
5
15
  private readonly vaultId;
6
16
  readonly jobId: string;
7
17
  private readonly browse;
@@ -10,6 +20,12 @@ export declare class JobHandle {
10
20
  activities: {
11
21
  list: (o?: ListActivitiesOptions) => Promise<ActivitiesPage>;
12
22
  get: (a: string) => Promise<Activity>;
23
+ /**
24
+ * Poll-backed subscription over `ListActivities`. Mirrors the structure
25
+ * of `subscribe.ts`: tracks seen activity ids, filters duplicates,
26
+ * supports `unsubscribe()`. Stops cleanly via the returned handle.
27
+ */
28
+ subscribe: (filter: ActivitySubscribeFilter, handler: ActivityHandler, opts?: SubscribeOptions) => Subscription;
13
29
  };
14
30
  /**
15
31
  * Walk caused-by edges. Server tree route is not yet implemented (returns
@@ -1 +1 @@
1
- {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../src/fluent/job.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAU,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEtE,qBAAa,SAAS;IAIlB,OAAO,CAAC,QAAQ,CAAC,OAAO;aACR,KAAK,EAAE,MAAM;IAJ/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAE9B,IAAI,EAAE,eAAe,EACJ,OAAO,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM;IAI/B,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACnB,UAAU;mBACE,qBAAqB,KAAQ,OAAO,CAAC,cAAc,CAAC;iBAErD,MAAM,KAAG,OAAO,CAAC,QAAQ,CAAC;MACnC;IACF;;;OAGG;IACH,IAAI,IAAI,KAAK;CAKd"}
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../src/fluent/job.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAU,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3E,qBAAa,SAAS;IAGlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;aACR,KAAK,EAAE,MAAM;IAJ/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEb,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM;IAI/B,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACnB,UAAU;mBACE,qBAAqB,KAAQ,OAAO,CAAC,cAAc,CAAC;iBAErD,MAAM,KAAG,OAAO,CAAC,QAAQ,CAAC;QACnC;;;;WAIG;4BAEO,uBAAuB,WACtB,eAAe,SAClB,gBAAgB,KACrB,YAAY;MAGf;IACF;;;OAGG;IACH,IAAI,IAAI,KAAK;CAKd"}
@@ -1,9 +1,11 @@
1
1
  import { Browse } from "../internal/browse.js";
2
2
  export class JobHandle {
3
+ http;
3
4
  vaultId;
4
5
  jobId;
5
6
  browse;
6
7
  constructor(http, vaultId, jobId) {
8
+ this.http = http;
7
9
  this.vaultId = vaultId;
8
10
  this.jobId = jobId;
9
11
  this.browse = new Browse(http);
@@ -12,6 +14,12 @@ export class JobHandle {
12
14
  activities = {
13
15
  list: (o = {}) => this.browse.listActivities(this.vaultId, this.jobId, o),
14
16
  get: (a) => this.browse.getActivity(this.vaultId, this.jobId, a),
17
+ /**
18
+ * Poll-backed subscription over `ListActivities`. Mirrors the structure
19
+ * of `subscribe.ts`: tracks seen activity ids, filters duplicates,
20
+ * supports `unsubscribe()`. Stops cleanly via the returned handle.
21
+ */
22
+ subscribe: (filter, handler, opts = {}) => subscribeActivities(this.browse, this.vaultId, this.jobId, filter, handler, opts),
15
23
  };
16
24
  /**
17
25
  * Walk caused-by edges. Server tree route is not yet implemented (returns
@@ -21,4 +29,51 @@ export class JobHandle {
21
29
  throw new Error("JobHandle.tree() requires the orchestrator's tree route which is not yet implemented (returns 501).");
22
30
  }
23
31
  }
32
+ function subscribeActivities(browse, vaultId, jobId, filter, handler, opts) {
33
+ const interval = opts.intervalMs ?? 1000;
34
+ const pageSize = opts.pageSize ?? 100;
35
+ const onError = opts.onError ?? ((e) => {
36
+ console.warn("[vault-sdk] activities.subscribe poll failed:", e);
37
+ });
38
+ const seen = new Set();
39
+ let cursor;
40
+ let stopped = false;
41
+ let closeResolve;
42
+ const closed = new Promise((r) => (closeResolve = r));
43
+ const sinceMs = filter.since ? Date.parse(filter.since) : undefined;
44
+ const tick = async () => {
45
+ while (!stopped) {
46
+ try {
47
+ const page = await browse.listActivities(vaultId, jobId, {
48
+ cursor, limit: pageSize,
49
+ });
50
+ for (const activity of page.items) {
51
+ if (seen.has(activity.activityId))
52
+ continue;
53
+ seen.add(activity.activityId);
54
+ if (sinceMs !== undefined) {
55
+ const t = activity.startedAt ?? activity.endedAt;
56
+ if (t && Date.parse(t) < sinceMs)
57
+ continue;
58
+ }
59
+ await handler(activity);
60
+ }
61
+ if (page.nextCursor)
62
+ cursor = page.nextCursor;
63
+ }
64
+ catch (err) {
65
+ onError(err);
66
+ }
67
+ if (stopped)
68
+ break;
69
+ await new Promise((r) => setTimeout(r, interval));
70
+ }
71
+ closeResolve();
72
+ };
73
+ void tick();
74
+ return {
75
+ unsubscribe() { stopped = true; },
76
+ closed,
77
+ };
78
+ }
24
79
  //# sourceMappingURL=job.js.map