@cef-ai/vault-sdk 0.1.0 → 0.3.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/README.md +113 -20
- package/dist/client.d.ts +103 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +107 -3
- package/dist/client.js.map +1 -1
- package/dist/core/endpoints.d.ts +1 -0
- package/dist/core/endpoints.d.ts.map +1 -1
- package/dist/core/endpoints.js +1 -0
- package/dist/core/endpoints.js.map +1 -1
- package/dist/core/types.d.ts +5 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/fluent/job.d.ts +16 -0
- package/dist/fluent/job.d.ts.map +1 -1
- package/dist/fluent/job.js +55 -0
- package/dist/fluent/job.js.map +1 -1
- package/dist/fluent/scope.d.ts +24 -0
- package/dist/fluent/scope.d.ts.map +1 -1
- package/dist/fluent/scope.js +70 -0
- package/dist/fluent/scope.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/auto-add-proxy.d.ts +55 -0
- package/dist/internal/auto-add-proxy.d.ts.map +1 -0
- package/dist/internal/auto-add-proxy.js +89 -0
- package/dist/internal/auto-add-proxy.js.map +1 -0
- package/dist/internal/delegation-token.d.ts +26 -0
- package/dist/internal/delegation-token.d.ts.map +1 -0
- package/dist/internal/delegation-token.js +89 -0
- package/dist/internal/delegation-token.js.map +1 -0
- package/dist/internal/gateway-info.d.ts +16 -0
- package/dist/internal/gateway-info.d.ts.map +1 -0
- package/dist/internal/gateway-info.js +34 -0
- package/dist/internal/gateway-info.js.map +1 -0
- package/dist/internal/marketplace.d.ts +13 -0
- package/dist/internal/marketplace.d.ts.map +1 -1
- package/dist/internal/marketplace.js +6 -0
- package/dist/internal/marketplace.js.map +1 -1
- package/dist/internal/onboarding.d.ts +99 -0
- package/dist/internal/onboarding.d.ts.map +1 -0
- package/dist/internal/onboarding.js +148 -0
- package/dist/internal/onboarding.js.map +1 -0
- package/dist/internal/scopes.d.ts +9 -0
- package/dist/internal/scopes.d.ts.map +1 -1
- package/dist/internal/scopes.js +25 -2
- package/dist/internal/scopes.js.map +1 -1
- package/package.json +7 -1
|
@@ -18,5 +18,11 @@ export class Marketplace {
|
|
|
18
18
|
: endpoints.marketplaceAgent(agentId);
|
|
19
19
|
return this.http.send("GET", path, { auth: PUBLIC });
|
|
20
20
|
}
|
|
21
|
+
list(opts = {}) {
|
|
22
|
+
return this.http.send("GET", endpoints.marketplaceAgents(), {
|
|
23
|
+
auth: PUBLIC,
|
|
24
|
+
query: { limit: opts.limit, cursor: opts.cursor, q: opts.query },
|
|
25
|
+
});
|
|
26
|
+
}
|
|
21
27
|
}
|
|
22
28
|
//# sourceMappingURL=marketplace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/internal/marketplace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/internal/marketplace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AA6B5B;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,IAAqB;QAArB,SAAI,GAAJ,IAAI,CAAiB;IAAG,CAAC;IAEtD,QAAQ,CAAC,OAAe,EAAE,OAAgB;QACxC,MAAM,IAAI,GAAG,OAAO;YAClB,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC;YACrD,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,OAA0B,EAAE;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,iBAAiB,EAAE,EAAE;YAC1D,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE;SACjE,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { Wallet } from "../wallet/adapter.js";
|
|
2
|
+
export type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
3
|
+
export interface OnboardingSigner {
|
|
4
|
+
/** 0x-hex public key. */
|
|
5
|
+
publicKeyHex: string;
|
|
6
|
+
keyType: "ed25519" | "sr25519";
|
|
7
|
+
/**
|
|
8
|
+
* Sign raw bytes; return a hex signature (with or without `0x` prefix —
|
|
9
|
+
* the gateway client strips a leading `0x` before adding the header).
|
|
10
|
+
*/
|
|
11
|
+
signRawHex: (bytes: Uint8Array) => Promise<string>;
|
|
12
|
+
}
|
|
13
|
+
export interface OnboardingStatus {
|
|
14
|
+
address: string;
|
|
15
|
+
native_balance: string;
|
|
16
|
+
native_floor: string;
|
|
17
|
+
ddc_deposit_total: string;
|
|
18
|
+
gateway_is_proxy: boolean;
|
|
19
|
+
faucet_eligible: boolean;
|
|
20
|
+
ddc_seed_eligible: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface BootstrapResult {
|
|
23
|
+
native_transferred: string;
|
|
24
|
+
ddc_deposited: string;
|
|
25
|
+
errors?: string[];
|
|
26
|
+
next_user_action?: string;
|
|
27
|
+
}
|
|
28
|
+
export type OnboardingResult = {
|
|
29
|
+
kind: "skipped";
|
|
30
|
+
status: null;
|
|
31
|
+
} | {
|
|
32
|
+
kind: "ready";
|
|
33
|
+
status: OnboardingStatus;
|
|
34
|
+
} | {
|
|
35
|
+
kind: "awaiting-proxy";
|
|
36
|
+
status: OnboardingStatus;
|
|
37
|
+
bootstrap?: BootstrapResult;
|
|
38
|
+
};
|
|
39
|
+
export interface PollOptions {
|
|
40
|
+
intervalMs: number;
|
|
41
|
+
timeoutMs: number;
|
|
42
|
+
fetchImpl?: FetchLike;
|
|
43
|
+
sleep?: (ms: number) => Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
/** Thrown when {@link pollUntilProxyReady} exhausts its budget. */
|
|
46
|
+
export declare class OnboardingTimeoutError extends Error {
|
|
47
|
+
constructor(message: string);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Thrown by `vault.ensure()` when onboarding is skipped via
|
|
51
|
+
* `onboard: false` but the gateway reports the wallet still needs the
|
|
52
|
+
* proxy registration step. Lets server-side consumers (which assume
|
|
53
|
+
* pre-provisioned wallets) catch this case explicitly.
|
|
54
|
+
*/
|
|
55
|
+
export declare class OnboardingRequiredError extends Error {
|
|
56
|
+
constructor(message: string);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Bridge from the SDK's `Wallet` adapter to the onboarding signer shape.
|
|
60
|
+
* The gateway's onboarding endpoints sign over **empty** bytes (`X-Signature`
|
|
61
|
+
* header) — same convention vault-api uses elsewhere. Hex-encodes both the
|
|
62
|
+
* wallet pubkey (already 0x-hex) and the raw-bytes signature output.
|
|
63
|
+
*/
|
|
64
|
+
export declare function walletToOnboardingSigner(wallet: Wallet): OnboardingSigner;
|
|
65
|
+
/**
|
|
66
|
+
* Fetch the gateway's onboarding status for the signer's wallet. Returns
|
|
67
|
+
* `null` when the gateway responds 404 (onboarding disabled, i.e. prod).
|
|
68
|
+
*/
|
|
69
|
+
export declare function getOnboardingStatus(gatewayUrl: string, signer: OnboardingSigner, fetchImpl?: FetchLike): Promise<OnboardingStatus | null>;
|
|
70
|
+
/**
|
|
71
|
+
* Trigger devnet seeding (faucet drip + DDC deposit) for the signer's
|
|
72
|
+
* wallet. Accepts both 200 (full success) and 207 (partial) — the body
|
|
73
|
+
* contains an `errors` array in the partial case.
|
|
74
|
+
*/
|
|
75
|
+
export declare function runBootstrap(gatewayUrl: string, signer: OnboardingSigner, fetchImpl?: FetchLike): Promise<BootstrapResult>;
|
|
76
|
+
/**
|
|
77
|
+
* Orchestrate the full devnet onboarding flow once per wallet:
|
|
78
|
+
* 1) GET /auth/onboarding/status
|
|
79
|
+
* 2) if faucet_eligible || ddc_seed_eligible
|
|
80
|
+
* → POST /auth/onboarding/bootstrap → refresh status
|
|
81
|
+
* 3) caller decides between proceeding (ready) and prompting
|
|
82
|
+
* `proxy.addProxy` (awaiting-proxy).
|
|
83
|
+
*
|
|
84
|
+
* Returns `'skipped'` when the gateway has onboarding disabled (404).
|
|
85
|
+
*
|
|
86
|
+
* Callers can pass `onBootstrap` to be notified just before the
|
|
87
|
+
* bootstrap POST fires — used by `vault.ensure()` to surface a
|
|
88
|
+
* `funding-wallet` progress event.
|
|
89
|
+
*/
|
|
90
|
+
export declare function runOnboarding(gatewayUrl: string, signer: OnboardingSigner, fetchImpl?: FetchLike, onBootstrap?: () => void): Promise<OnboardingResult>;
|
|
91
|
+
/**
|
|
92
|
+
* Poll `/auth/onboarding/status` until `gateway_is_proxy` flips true, the
|
|
93
|
+
* attempt budget is spent, or the gateway 404s. Returns the latest status
|
|
94
|
+
* on success, `null` on terminal-not-ready (timeout or 404). Budget is
|
|
95
|
+
* `floor(timeoutMs/intervalMs) + 1` attempts; with the SDK defaults
|
|
96
|
+
* (60_000 / 2_000) that's 31 probes spaced 2s apart.
|
|
97
|
+
*/
|
|
98
|
+
export declare function pollUntilProxyReady(gatewayUrl: string, signer: OnboardingSigner, opts: PollOptions): Promise<OnboardingStatus | null>;
|
|
99
|
+
//# sourceMappingURL=onboarding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/internal/onboarding.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAInD,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC7B,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B;;;OAGG;IACH,UAAU,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAC;IAAC,SAAS,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC;AAEtF,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,mEAAmE;AACnE,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAWzE;AAoBD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,SAAiB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAMlC;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,SAAiB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAO1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,SAAiB,EAC5B,WAAW,CAAC,EAAE,MAAM,IAAI,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAgB3B;AAID;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAWlC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// src/internal/onboarding.ts
|
|
2
|
+
//
|
|
3
|
+
// Onboarding orchestrator for the DDC S3 gateway's devnet auto-fund flow.
|
|
4
|
+
// Gateway: github.com/Cerebellum-Network/ddc-s3-gateway. The endpoints
|
|
5
|
+
// 404 when ONBOARDING_ENABLED=false, so callers must treat null as
|
|
6
|
+
// "production gateway, skip the whole branch".
|
|
7
|
+
//
|
|
8
|
+
// Why no `buildAddProxyDeepLink` here: that helper builds a Polkadot.js
|
|
9
|
+
// Apps URL the user can open to manually run `proxy.addProxy`. It is a UX
|
|
10
|
+
// fallback for apps that can't auto-submit (no embed wallet available);
|
|
11
|
+
// the SDK's job is to expose primitives — orchestration + auto-submit —
|
|
12
|
+
// not chrome. Apps that need the deep link can build it in three lines.
|
|
13
|
+
/** Thrown when {@link pollUntilProxyReady} exhausts its budget. */
|
|
14
|
+
export class OnboardingTimeoutError extends Error {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "OnboardingTimeoutError";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Thrown by `vault.ensure()` when onboarding is skipped via
|
|
22
|
+
* `onboard: false` but the gateway reports the wallet still needs the
|
|
23
|
+
* proxy registration step. Lets server-side consumers (which assume
|
|
24
|
+
* pre-provisioned wallets) catch this case explicitly.
|
|
25
|
+
*/
|
|
26
|
+
export class OnboardingRequiredError extends Error {
|
|
27
|
+
constructor(message) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = "OnboardingRequiredError";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Bridge from the SDK's `Wallet` adapter to the onboarding signer shape.
|
|
34
|
+
* The gateway's onboarding endpoints sign over **empty** bytes (`X-Signature`
|
|
35
|
+
* header) — same convention vault-api uses elsewhere. Hex-encodes both the
|
|
36
|
+
* wallet pubkey (already 0x-hex) and the raw-bytes signature output.
|
|
37
|
+
*/
|
|
38
|
+
export function walletToOnboardingSigner(wallet) {
|
|
39
|
+
const pubkey = wallet.pubkey();
|
|
40
|
+
const publicKeyHex = pubkey.startsWith("0x") ? pubkey : `0x${pubkey}`;
|
|
41
|
+
return {
|
|
42
|
+
publicKeyHex,
|
|
43
|
+
keyType: wallet.sigType?.() ?? "ed25519",
|
|
44
|
+
async signRawHex(bytes) {
|
|
45
|
+
const sig = await wallet.sign(bytes);
|
|
46
|
+
return bytesToHex(sig);
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function bytesToHex(bytes) {
|
|
51
|
+
let hex = "";
|
|
52
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
53
|
+
hex += bytes[i].toString(16).padStart(2, "0");
|
|
54
|
+
}
|
|
55
|
+
return hex;
|
|
56
|
+
}
|
|
57
|
+
async function signedHeaders(signer) {
|
|
58
|
+
const sigHex = await signer.signRawHex(new Uint8Array(0));
|
|
59
|
+
const sig = sigHex.startsWith("0x") ? sigHex.slice(2) : sigHex;
|
|
60
|
+
return {
|
|
61
|
+
"X-Public-Key": signer.publicKeyHex,
|
|
62
|
+
"X-Signature": sig,
|
|
63
|
+
"X-Signature-Type": signer.keyType,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Fetch the gateway's onboarding status for the signer's wallet. Returns
|
|
68
|
+
* `null` when the gateway responds 404 (onboarding disabled, i.e. prod).
|
|
69
|
+
*/
|
|
70
|
+
export async function getOnboardingStatus(gatewayUrl, signer, fetchImpl = fetch) {
|
|
71
|
+
const url = gatewayUrl.replace(/\/+$/, "") + "/auth/onboarding/status";
|
|
72
|
+
const r = await fetchImpl(url, { method: "GET", headers: await signedHeaders(signer) });
|
|
73
|
+
if (r.status === 404)
|
|
74
|
+
return null;
|
|
75
|
+
if (!r.ok)
|
|
76
|
+
throw new Error(`onboarding status ${r.status}`);
|
|
77
|
+
return (await r.json());
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Trigger devnet seeding (faucet drip + DDC deposit) for the signer's
|
|
81
|
+
* wallet. Accepts both 200 (full success) and 207 (partial) — the body
|
|
82
|
+
* contains an `errors` array in the partial case.
|
|
83
|
+
*/
|
|
84
|
+
export async function runBootstrap(gatewayUrl, signer, fetchImpl = fetch) {
|
|
85
|
+
const url = gatewayUrl.replace(/\/+$/, "") + "/auth/onboarding/bootstrap";
|
|
86
|
+
const r = await fetchImpl(url, { method: "POST", headers: await signedHeaders(signer) });
|
|
87
|
+
if (r.status !== 200 && r.status !== 207) {
|
|
88
|
+
throw new Error(`onboarding bootstrap ${r.status}`);
|
|
89
|
+
}
|
|
90
|
+
return (await r.json());
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Orchestrate the full devnet onboarding flow once per wallet:
|
|
94
|
+
* 1) GET /auth/onboarding/status
|
|
95
|
+
* 2) if faucet_eligible || ddc_seed_eligible
|
|
96
|
+
* → POST /auth/onboarding/bootstrap → refresh status
|
|
97
|
+
* 3) caller decides between proceeding (ready) and prompting
|
|
98
|
+
* `proxy.addProxy` (awaiting-proxy).
|
|
99
|
+
*
|
|
100
|
+
* Returns `'skipped'` when the gateway has onboarding disabled (404).
|
|
101
|
+
*
|
|
102
|
+
* Callers can pass `onBootstrap` to be notified just before the
|
|
103
|
+
* bootstrap POST fires — used by `vault.ensure()` to surface a
|
|
104
|
+
* `funding-wallet` progress event.
|
|
105
|
+
*/
|
|
106
|
+
export async function runOnboarding(gatewayUrl, signer, fetchImpl = fetch, onBootstrap) {
|
|
107
|
+
const initial = await getOnboardingStatus(gatewayUrl, signer, fetchImpl);
|
|
108
|
+
if (initial === null)
|
|
109
|
+
return { kind: "skipped", status: null };
|
|
110
|
+
if (initial.gateway_is_proxy)
|
|
111
|
+
return { kind: "ready", status: initial };
|
|
112
|
+
let bootstrap;
|
|
113
|
+
let status = initial;
|
|
114
|
+
if (initial.faucet_eligible || initial.ddc_seed_eligible) {
|
|
115
|
+
onBootstrap?.();
|
|
116
|
+
bootstrap = await runBootstrap(gatewayUrl, signer, fetchImpl);
|
|
117
|
+
const refreshed = await getOnboardingStatus(gatewayUrl, signer, fetchImpl);
|
|
118
|
+
if (refreshed)
|
|
119
|
+
status = refreshed;
|
|
120
|
+
}
|
|
121
|
+
if (status.gateway_is_proxy)
|
|
122
|
+
return { kind: "ready", status };
|
|
123
|
+
return { kind: "awaiting-proxy", status, bootstrap };
|
|
124
|
+
}
|
|
125
|
+
const defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
126
|
+
/**
|
|
127
|
+
* Poll `/auth/onboarding/status` until `gateway_is_proxy` flips true, the
|
|
128
|
+
* attempt budget is spent, or the gateway 404s. Returns the latest status
|
|
129
|
+
* on success, `null` on terminal-not-ready (timeout or 404). Budget is
|
|
130
|
+
* `floor(timeoutMs/intervalMs) + 1` attempts; with the SDK defaults
|
|
131
|
+
* (60_000 / 2_000) that's 31 probes spaced 2s apart.
|
|
132
|
+
*/
|
|
133
|
+
export async function pollUntilProxyReady(gatewayUrl, signer, opts) {
|
|
134
|
+
const fetchImpl = opts.fetchImpl ?? fetch;
|
|
135
|
+
const sleep = opts.sleep ?? defaultSleep;
|
|
136
|
+
const maxAttempts = Math.max(1, Math.floor(opts.timeoutMs / opts.intervalMs) + 1);
|
|
137
|
+
for (let i = 0; i < maxAttempts; i++) {
|
|
138
|
+
if (i > 0)
|
|
139
|
+
await sleep(opts.intervalMs);
|
|
140
|
+
const status = await getOnboardingStatus(gatewayUrl, signer, fetchImpl);
|
|
141
|
+
if (!status)
|
|
142
|
+
return null;
|
|
143
|
+
if (status.gateway_is_proxy)
|
|
144
|
+
return status;
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=onboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/internal/onboarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,19 @@ export interface CreateScopeRequest {
|
|
|
4
4
|
name: string;
|
|
5
5
|
displayName?: string;
|
|
6
6
|
streamLabel?: string;
|
|
7
|
+
/** Initial metadata; the server stores it verbatim. */
|
|
8
|
+
metadata?: Record<string, unknown>;
|
|
7
9
|
}
|
|
8
10
|
export interface UpdateScopeRequest {
|
|
9
11
|
displayName?: string;
|
|
10
12
|
streamLabel?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Partial metadata patch. Server semantics: shallow-merge per top-level
|
|
15
|
+
* key — keys here overwrite the stored map's keys, others are preserved.
|
|
16
|
+
* Pass an empty object to no-op metadata; omit the field entirely to
|
|
17
|
+
* leave metadata untouched in the request body.
|
|
18
|
+
*/
|
|
19
|
+
metadata?: Record<string, unknown>;
|
|
11
20
|
}
|
|
12
21
|
export declare class Scopes {
|
|
13
22
|
private readonly http;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../../src/internal/scopes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../../src/internal/scopes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,eAAe;IAClD,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IACjC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IACzC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC;IAK1D,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC;IAKrE,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG5C"}
|
package/dist/internal/scopes.js
CHANGED
|
@@ -7,13 +7,36 @@ export class Scopes {
|
|
|
7
7
|
list(v) { return this.http.send("GET", endpoints.scopes(v)); }
|
|
8
8
|
get(v, n) { return this.http.send("GET", endpoints.scope(v, n)); }
|
|
9
9
|
create(v, req) {
|
|
10
|
-
return this.http.send("POST", endpoints.scopes(v), {
|
|
10
|
+
return this.http.send("POST", endpoints.scopes(v), {
|
|
11
|
+
body: buildScopeRequestBody(req),
|
|
12
|
+
});
|
|
11
13
|
}
|
|
12
14
|
update(v, n, req) {
|
|
13
|
-
return this.http.send("PATCH", endpoints.scope(v, n), {
|
|
15
|
+
return this.http.send("PATCH", endpoints.scope(v, n), {
|
|
16
|
+
body: buildScopeRequestBody(req),
|
|
17
|
+
});
|
|
14
18
|
}
|
|
15
19
|
delete(v, n) {
|
|
16
20
|
return this.http.send("DELETE", endpoints.scope(v, n), { body: {} });
|
|
17
21
|
}
|
|
18
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Whitelist + omit-undefined the request body so PATCH only sends the keys
|
|
25
|
+
* the caller actually supplied. Matters for `metadata`: an `undefined` value
|
|
26
|
+
* would still serialise (after JSON.stringify the key is dropped, but it's
|
|
27
|
+
* cleaner to never include it) and the server would otherwise have to
|
|
28
|
+
* disambiguate "not patched" from "patched to {}".
|
|
29
|
+
*/
|
|
30
|
+
function buildScopeRequestBody(req) {
|
|
31
|
+
const out = {};
|
|
32
|
+
if ("name" in req && req.name !== undefined)
|
|
33
|
+
out.name = req.name;
|
|
34
|
+
if (req.displayName !== undefined)
|
|
35
|
+
out.displayName = req.displayName;
|
|
36
|
+
if (req.streamLabel !== undefined)
|
|
37
|
+
out.streamLabel = req.streamLabel;
|
|
38
|
+
if (req.metadata !== undefined)
|
|
39
|
+
out.metadata = req.metadata;
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
19
42
|
//# sourceMappingURL=scopes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../src/internal/scopes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../src/internal/scopes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAuBjD,MAAM,OAAO,MAAM;IACY;IAA7B,YAA6B,IAAqB;QAArB,SAAI,GAAJ,IAAI,CAAiB;IAAG,CAAC;IACtD,IAAI,CAAC,CAAS,IAAsB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,GAAG,CAAC,CAAS,EAAE,CAAS,IAAoB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,CAAC,CAAS,EAAE,GAAuB;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACjD,IAAI,EAAE,qBAAqB,CAAC,GAAG,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,GAAuB;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACpD,IAAI,EAAE,qBAAqB,CAAC,GAAG,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,CAAS,EAAE,CAAS;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;CACF;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC5B,GAA4C;IAE5C,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACjE,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;QAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IACrE,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;QAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IACrE,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;QAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC5D,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cef-ai/vault-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -26,7 +26,13 @@
|
|
|
26
26
|
"@polkadot/util": "^10.4.2",
|
|
27
27
|
"@polkadot/util-crypto": "^10.4.2"
|
|
28
28
|
},
|
|
29
|
+
"optionalDependencies": {
|
|
30
|
+
"@cere-ddc-sdk/blockchain": "^2.16.1",
|
|
31
|
+
"@cere-ddc-sdk/ddc-client": "^2.16.1"
|
|
32
|
+
},
|
|
29
33
|
"devDependencies": {
|
|
34
|
+
"@cere-ddc-sdk/blockchain": "^2.16.1",
|
|
35
|
+
"@cere-ddc-sdk/ddc-client": "^2.16.1",
|
|
30
36
|
"@types/node": "^20.11.0",
|
|
31
37
|
"typescript": "^5.4.0",
|
|
32
38
|
"vitest": "^1.5.0"
|