@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
package/dist/fluent/job.js
CHANGED
|
@@ -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
|
package/dist/fluent/job.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../src/fluent/job.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAA8B,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../src/fluent/job.ts"],"names":[],"mappings":"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"}
|
package/dist/fluent/scope.d.ts
CHANGED
|
@@ -23,5 +23,29 @@ export declare class ScopeHandle {
|
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
25
|
subscribe<P = unknown>(filter: SubscribeFilter, handler: SubscribeHandler<P>, opts?: SubscribeOptions): Subscription;
|
|
26
|
+
/**
|
|
27
|
+
* Subscribe to events across every stream (context) in the scope.
|
|
28
|
+
*
|
|
29
|
+
* Implementation: lists streams under the scope, opens a per-stream
|
|
30
|
+
* `subscribe` for each one with the same handler + types filter, and
|
|
31
|
+
* periodically refreshes the stream list so newly created streams are
|
|
32
|
+
* picked up. Returns a merged Subscription that tears down all children
|
|
33
|
+
* (and the refresh timer) on `unsubscribe()`.
|
|
34
|
+
*
|
|
35
|
+
* `refreshIntervalMs` (default 30s) controls how often the stream list
|
|
36
|
+
* is re-polled.
|
|
37
|
+
*/
|
|
38
|
+
subscribeAll<P = unknown>(filter: ScopeWideSubscribeFilter, handler: SubscribeHandler<P>, opts?: ScopeWideSubscribeOptions): Subscription;
|
|
39
|
+
}
|
|
40
|
+
export interface ScopeWideSubscribeFilter {
|
|
41
|
+
/** Optional event-type allowlist applied to every per-stream child. */
|
|
42
|
+
types?: string[];
|
|
43
|
+
}
|
|
44
|
+
export interface ScopeWideSubscribeOptions extends SubscribeOptions {
|
|
45
|
+
/**
|
|
46
|
+
* Interval between stream-list refreshes, in ms. Default 30000.
|
|
47
|
+
* New streams in the scope are picked up at this cadence.
|
|
48
|
+
*/
|
|
49
|
+
refreshIntervalMs?: number;
|
|
26
50
|
}
|
|
27
51
|
//# sourceMappingURL=scope.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/fluent/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAU,KAAK,uBAAuB,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,cAAc;IAAG,OAAO,EAAE,MAAM,CAAA;CAAE;AAEnD,qBAAa,WAAW;IAKpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;aACR,IAAI,EAAE,MAAM;IAN9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAGb,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM;IAMxB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAS/D,OAAO;mBACK,kBAAkB,KAAQ,OAAO,CAAC,mBAAmB,CAAC;mBAErD,MAAM,KAAG,OAAO,CAAC,aAAa,CAAC;MAE1C;IAEF,MAAM,CAAC,OAAO,EAAE,MAAM;;mBAGT,CAAC,gBAAe,uBAAuB,KAAQ,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;;IAMlF,SAAS,CAAC,CAAC,GAAG,OAAO,EACnB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC5B,IAAI,GAAE,gBAAqB,GAC1B,YAAY;
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/fluent/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAU,KAAK,uBAAuB,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,cAAc;IAAG,OAAO,EAAE,MAAM,CAAA;CAAE;AAEnD,qBAAa,WAAW;IAKpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;aACR,IAAI,EAAE,MAAM;IAN9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAGb,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM;IAMxB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAS/D,OAAO;mBACK,kBAAkB,KAAQ,OAAO,CAAC,mBAAmB,CAAC;mBAErD,MAAM,KAAG,OAAO,CAAC,aAAa,CAAC;MAE1C;IAEF,MAAM,CAAC,OAAO,EAAE,MAAM;;mBAGT,CAAC,gBAAe,uBAAuB,KAAQ,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;;IAMlF,SAAS,CAAC,CAAC,GAAG,OAAO,EACnB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC5B,IAAI,GAAE,gBAAqB,GAC1B,YAAY;IAIf;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,CAAC,GAAG,OAAO,EACtB,MAAM,EAAE,wBAAwB,EAChC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC5B,IAAI,GAAE,yBAA8B,GACnC,YAAY;CAWhB;AAED,MAAM,WAAW,wBAAwB;IACvC,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
|
package/dist/fluent/scope.js
CHANGED
|
@@ -36,5 +36,75 @@ export class ScopeHandle {
|
|
|
36
36
|
subscribe(filter, handler, opts = {}) {
|
|
37
37
|
return subscribe(this.http, this.vaultId, this.name, filter, handler, opts);
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Subscribe to events across every stream (context) in the scope.
|
|
41
|
+
*
|
|
42
|
+
* Implementation: lists streams under the scope, opens a per-stream
|
|
43
|
+
* `subscribe` for each one with the same handler + types filter, and
|
|
44
|
+
* periodically refreshes the stream list so newly created streams are
|
|
45
|
+
* picked up. Returns a merged Subscription that tears down all children
|
|
46
|
+
* (and the refresh timer) on `unsubscribe()`.
|
|
47
|
+
*
|
|
48
|
+
* `refreshIntervalMs` (default 30s) controls how often the stream list
|
|
49
|
+
* is re-polled.
|
|
50
|
+
*/
|
|
51
|
+
subscribeAll(filter, handler, opts = {}) {
|
|
52
|
+
return subscribeScope(this.http, this.vaultId, this.name, this.browse, filter, handler, opts);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Internal: builds a `Subscription` that fans out to N per-context
|
|
57
|
+
* subscriptions, refreshes the stream list periodically, and unsubscribes
|
|
58
|
+
* cleanly.
|
|
59
|
+
*/
|
|
60
|
+
function subscribeScope(http, vaultId, scope, browse, filter, handler, opts) {
|
|
61
|
+
const refreshMs = opts.refreshIntervalMs ?? 30_000;
|
|
62
|
+
const onError = opts.onError ?? ((e) => {
|
|
63
|
+
console.warn("[vault-sdk] subscribeAll refresh failed:", e);
|
|
64
|
+
});
|
|
65
|
+
// Per-context children + a closed barrier resolved once everything is down.
|
|
66
|
+
const children = new Map();
|
|
67
|
+
let stopped = false;
|
|
68
|
+
let refreshTimer;
|
|
69
|
+
let closeResolve;
|
|
70
|
+
const closed = new Promise((r) => (closeResolve = r));
|
|
71
|
+
const ensureStream = (context) => {
|
|
72
|
+
if (children.has(context) || stopped)
|
|
73
|
+
return;
|
|
74
|
+
const sub = subscribe(http, vaultId, scope, { context, ...(filter.types ? { types: filter.types } : {}) }, handler, opts);
|
|
75
|
+
children.set(context, sub);
|
|
76
|
+
};
|
|
77
|
+
const refresh = async () => {
|
|
78
|
+
try {
|
|
79
|
+
const page = await browse.listStreams(vaultId, scope);
|
|
80
|
+
for (const s of page.items)
|
|
81
|
+
ensureStream(s.context);
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
onError(err);
|
|
85
|
+
}
|
|
86
|
+
if (!stopped)
|
|
87
|
+
refreshTimer = setTimeout(refresh, refreshMs);
|
|
88
|
+
};
|
|
89
|
+
// Kick off the first refresh synchronously so callers that immediately
|
|
90
|
+
// unsubscribe still see clean teardown semantics.
|
|
91
|
+
void refresh();
|
|
92
|
+
return {
|
|
93
|
+
unsubscribe() {
|
|
94
|
+
if (stopped)
|
|
95
|
+
return;
|
|
96
|
+
stopped = true;
|
|
97
|
+
if (refreshTimer)
|
|
98
|
+
clearTimeout(refreshTimer);
|
|
99
|
+
const closes = [];
|
|
100
|
+
for (const sub of children.values()) {
|
|
101
|
+
sub.unsubscribe();
|
|
102
|
+
closes.push(sub.closed);
|
|
103
|
+
}
|
|
104
|
+
children.clear();
|
|
105
|
+
void Promise.all(closes).then(() => closeResolve());
|
|
106
|
+
},
|
|
107
|
+
closed,
|
|
108
|
+
};
|
|
39
109
|
}
|
|
40
110
|
//# sourceMappingURL=scope.js.map
|
package/dist/fluent/scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/fluent/scope.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAyD,MAAM,uBAAuB,CAAC;AAEtG,OAAO,EACL,SAAS,GAKV,MAAM,gBAAgB,CAAC;AAIxB,MAAM,OAAO,WAAW;IAKH;IACA;IACD;IAND,MAAM,CAAS;IACf,MAAM,CAAS;IAEhC,YACmB,IAAqB,EACrB,OAAe,EAChB,IAAY;QAFX,SAAI,GAAJ,IAAI,CAAiB;QACrB,YAAO,GAAP,OAAO,CAAQ;QAChB,SAAI,GAAJ,IAAI,CAAQ;QAE5B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,KAAoB;QACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtE,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,GAAG;QACR,IAAI,EAAE,CAAC,IAAwB,EAAE,EAAgC,EAAE,CACjE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,GAAG,EAAE,CAAC,GAAW,EAA0B,EAAE,CAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;KACtD,CAAC;IAEF,MAAM,CAAC,OAAe;QACpB,OAAO;YACL,MAAM,EAAE;gBACN,IAAI,EAAE,CAAc,IAA6B,EAAE,EAA0B,EAAE,CAC7E,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;aACvE;SACF,CAAC;IACJ,CAAC;IAED,SAAS,CACP,MAAuB,EACvB,OAA4B,EAC5B,OAAyB,EAAE;QAE3B,OAAO,SAAS,CAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACjF,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/fluent/scope.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { VaultSDK } from "./client.js";
|
|
2
|
-
export type { VaultSDKConfig, EnsureVaultOptions } from "./client.js";
|
|
2
|
+
export type { VaultSDKConfig, EnsureVaultOptions, EnsureProgressEvent, } from "./client.js";
|
|
3
|
+
export { OnboardingRequiredError, OnboardingTimeoutError, } from "./internal/onboarding.js";
|
|
4
|
+
export type { OnboardingStatus, OnboardingResult, BootstrapResult, } from "./internal/onboarding.js";
|
|
3
5
|
export { Vault } from "./fluent/vault.js";
|
|
4
6
|
export { ScopeHandle } from "./fluent/scope.js";
|
|
5
7
|
export { AgentConnectionHandle } from "./fluent/agent-connection.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,YAAY,EACV,uBAAuB,EACvB,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,QAAQ,EACR,cAAc,EACd,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,KAAK,EACL,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,WAAW,EACX,YAAY,GACb,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// re-exported here; import them via `@cef-ai/vault-sdk/internal` if you
|
|
3
3
|
// genuinely need the lower level.
|
|
4
4
|
export { VaultSDK } from "./client.js";
|
|
5
|
+
export { OnboardingRequiredError, OnboardingTimeoutError, } from "./internal/onboarding.js";
|
|
5
6
|
export { Vault } from "./fluent/vault.js";
|
|
6
7
|
export { ScopeHandle } from "./fluent/scope.js";
|
|
7
8
|
export { AgentConnectionHandle } from "./fluent/agent-connection.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,wEAAwE;AACxE,kCAAkC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,wEAAwE;AACxE,kCAAkC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOvC,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAKtD,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAO1E,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type Sendable = unknown;
|
|
2
|
+
/**
|
|
3
|
+
* Minimal slice of the `@cere-ddc-sdk/blockchain` `Blockchain` class that
|
|
4
|
+
* `autoAddProxy` exercises. Defining it as an interface lets tests inject
|
|
5
|
+
* a fake without spinning up a real WebSocket connection to a Cere node.
|
|
6
|
+
*/
|
|
7
|
+
export interface AutoAddProxyChain {
|
|
8
|
+
api: {
|
|
9
|
+
tx: {
|
|
10
|
+
proxy: {
|
|
11
|
+
addProxy: (delegate: string, proxyType: string, delay: number) => Sendable;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
send: (tx: Sendable, opts: {
|
|
16
|
+
account: unknown;
|
|
17
|
+
}) => Promise<{
|
|
18
|
+
txHash: string;
|
|
19
|
+
events?: unknown[];
|
|
20
|
+
}>;
|
|
21
|
+
disconnect: () => Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export type ChainConnector = (wsEndpoint: string) => Promise<AutoAddProxyChain>;
|
|
24
|
+
export type SignerFactory = (embedWallet: unknown) => unknown;
|
|
25
|
+
/**
|
|
26
|
+
* Inject test doubles for the chain connector / signer factory.
|
|
27
|
+
* Mirrors the marketplace's same-named helper for parity with their
|
|
28
|
+
* test patterns.
|
|
29
|
+
*/
|
|
30
|
+
export declare function setAutoAddProxyFactoriesForTests(overrides: {
|
|
31
|
+
chainConnector?: ChainConnector;
|
|
32
|
+
signerFactory?: SignerFactory;
|
|
33
|
+
}): void;
|
|
34
|
+
export declare function resetAutoAddProxyFactoriesForTests(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Connect to the configured RPC, build `proxy.addProxy(<gateway>,
|
|
37
|
+
* NonTransfer, 0)`, sign + submit it via the user's Cere embed wallet,
|
|
38
|
+
* and disconnect. Returns the on-chain `txHash`. Callers should follow
|
|
39
|
+
* up with `pollUntilProxyReady` so the gateway sees the new proxy
|
|
40
|
+
* before requesting credentials.
|
|
41
|
+
*/
|
|
42
|
+
export declare function autoAddProxy(opts: {
|
|
43
|
+
rpcEndpoint: string;
|
|
44
|
+
gatewayPubKeyHex: string;
|
|
45
|
+
/**
|
|
46
|
+
* The Cere embed-wallet instance (NOT the SDK `Wallet` adapter).
|
|
47
|
+
* Typed as `unknown` because `@cere-ddc-sdk/blockchain` is an optional
|
|
48
|
+
* peer dep and we don't want to leak its types into the SDK surface;
|
|
49
|
+
* consumers that hit onboarding already hold this object.
|
|
50
|
+
*/
|
|
51
|
+
embedWallet: unknown;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
txHash: string;
|
|
54
|
+
}>;
|
|
55
|
+
//# sourceMappingURL=auto-add-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-add-proxy.d.ts","sourceRoot":"","sources":["../../src/internal/auto-add-proxy.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC;AAE/B;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE;QACH,EAAE,EAAE;YACF,KAAK,EAAE;gBACL,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC;aAC5E,CAAC;SACH,CAAC;KACH,CAAC;IACF,IAAI,EAAE,CACJ,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KACvB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IACrD,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAChF,MAAM,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC;AAsB9D;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,SAAS,EAAE;IAC1D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,GAAG,IAAI,CAGP;AAED,wBAAgB,kCAAkC,IAAI,IAAI,CAGzD;AAcD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB9B"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// src/internal/auto-add-proxy.ts
|
|
2
|
+
//
|
|
3
|
+
// Submits `proxy.addProxy(<gateway>, NonTransfer, 0)` from the user's
|
|
4
|
+
// Cere wallet — the one user-signed extrinsic the DDC onboarding flow
|
|
5
|
+
// requires before /auth/credentials will mint S3 keys (see
|
|
6
|
+
// ddc-s3-gateway docs/developer-guide.md §1). Replaces a manual
|
|
7
|
+
// Polkadot.js Apps deep-link with an in-app one-click sign.
|
|
8
|
+
//
|
|
9
|
+
// Lazy-imports `@cere-ddc-sdk/blockchain` so consumers that never hit
|
|
10
|
+
// onboarding (server-side flows, pre-provisioned wallets) don't need the
|
|
11
|
+
// chain-client tree on disk. Mirrors the lazy-import pattern in
|
|
12
|
+
// `delegation-token.ts`.
|
|
13
|
+
//
|
|
14
|
+
// API asymmetry — this function takes a raw `embedWallet` (typed as
|
|
15
|
+
// `unknown`) instead of the SDK's `Wallet` adapter, because
|
|
16
|
+
// `CereWalletSigner` from `@cere-ddc-sdk/blockchain` reads the
|
|
17
|
+
// Polkadot-extension-style API only the embed wallet exposes (it walks
|
|
18
|
+
// `embedWallet.subscribeAccounts`, `embedWallet.signer`, etc.). The
|
|
19
|
+
// SDK's `Wallet` adapter is intentionally narrower (sign-bytes only)
|
|
20
|
+
// and does not carry that surface. Server signers using `KeypairWallet`
|
|
21
|
+
// don't need autoAddProxy at all because their wallets are already
|
|
22
|
+
// provisioned, so the asymmetry is only visible to embed-wallet
|
|
23
|
+
// consumers — and they already have the `embedWallet` instance.
|
|
24
|
+
const defaultChainConnector = async (wsEndpoint) => {
|
|
25
|
+
// Cast through `any` because the dynamic import shape (with optional
|
|
26
|
+
// peer deps) doesn't fully resolve at type-check time even though the
|
|
27
|
+
// runtime export is present.
|
|
28
|
+
const blockchain = (await loadBlockchainModule());
|
|
29
|
+
return blockchain.Blockchain.connect({ wsEndpoint });
|
|
30
|
+
};
|
|
31
|
+
const defaultSignerFactory = async (embedWallet) => {
|
|
32
|
+
const blockchain = (await loadBlockchainModule());
|
|
33
|
+
return new blockchain.CereWalletSigner(embedWallet, { autoConnect: false });
|
|
34
|
+
};
|
|
35
|
+
let chainConnector = defaultChainConnector;
|
|
36
|
+
let signerFactory = defaultSignerFactory;
|
|
37
|
+
/**
|
|
38
|
+
* Inject test doubles for the chain connector / signer factory.
|
|
39
|
+
* Mirrors the marketplace's same-named helper for parity with their
|
|
40
|
+
* test patterns.
|
|
41
|
+
*/
|
|
42
|
+
export function setAutoAddProxyFactoriesForTests(overrides) {
|
|
43
|
+
if (overrides.chainConnector)
|
|
44
|
+
chainConnector = overrides.chainConnector;
|
|
45
|
+
if (overrides.signerFactory)
|
|
46
|
+
signerFactory = overrides.signerFactory;
|
|
47
|
+
}
|
|
48
|
+
export function resetAutoAddProxyFactoriesForTests() {
|
|
49
|
+
chainConnector = defaultChainConnector;
|
|
50
|
+
signerFactory = defaultSignerFactory;
|
|
51
|
+
}
|
|
52
|
+
async function loadBlockchainModule() {
|
|
53
|
+
try {
|
|
54
|
+
return await import("@cere-ddc-sdk/blockchain");
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
throw new Error("Onboarding requires @cere-ddc-sdk/blockchain. Install it as a peer dep, "
|
|
58
|
+
+ "or call vault.ensure({ onboard: false }) if your wallet is already provisioned.\n"
|
|
59
|
+
+ `Underlying error: ${err instanceof Error ? err.message : String(err)}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Connect to the configured RPC, build `proxy.addProxy(<gateway>,
|
|
64
|
+
* NonTransfer, 0)`, sign + submit it via the user's Cere embed wallet,
|
|
65
|
+
* and disconnect. Returns the on-chain `txHash`. Callers should follow
|
|
66
|
+
* up with `pollUntilProxyReady` so the gateway sees the new proxy
|
|
67
|
+
* before requesting credentials.
|
|
68
|
+
*/
|
|
69
|
+
export async function autoAddProxy(opts) {
|
|
70
|
+
const delegate = opts.gatewayPubKeyHex.startsWith("0x")
|
|
71
|
+
? opts.gatewayPubKeyHex
|
|
72
|
+
: "0x" + opts.gatewayPubKeyHex;
|
|
73
|
+
const blockchain = await chainConnector(opts.rpcEndpoint);
|
|
74
|
+
try {
|
|
75
|
+
const signer = await Promise.resolve(signerFactory(opts.embedWallet));
|
|
76
|
+
const ready = signer.isReady;
|
|
77
|
+
if (typeof ready === "function")
|
|
78
|
+
await ready.call(signer);
|
|
79
|
+
const tx = blockchain.api.tx.proxy.addProxy(delegate, "NonTransfer", 0);
|
|
80
|
+
const result = await blockchain.send(tx, { account: signer });
|
|
81
|
+
return { txHash: result.txHash };
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
await blockchain.disconnect().catch(() => {
|
|
85
|
+
/* best-effort cleanup */
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=auto-add-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-add-proxy.js","sourceRoot":"","sources":["../../src/internal/auto-add-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Wallet } from "../wallet/adapter.js";
|
|
2
|
+
export interface BuildDelegationTokenInput {
|
|
3
|
+
wallet: Wallet;
|
|
4
|
+
/** S3 Gateway ed25519 pubkey (`0x`-hex or bare hex). The token's subject. */
|
|
5
|
+
gatewayPubkey: string;
|
|
6
|
+
/** Whether the token can re-delegate. Defaults to true. */
|
|
7
|
+
canDelegate?: boolean;
|
|
8
|
+
/** Optional bucket id; usually omitted for the FIRST claim. */
|
|
9
|
+
bucketId?: bigint;
|
|
10
|
+
/** Optional validity window in seconds. */
|
|
11
|
+
expiresInSeconds?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Fetch the gateway's ed25519 public key from `/auth/info`. Thin wrapper
|
|
15
|
+
* over `getGatewayInfo` for the one-off pubkey-only callers; the
|
|
16
|
+
* onboarding flow uses `getGatewayInfo` directly so it can also see
|
|
17
|
+
* cluster_id / region.
|
|
18
|
+
*/
|
|
19
|
+
export declare function fetchGatewayPubkey(authInfoUrl: string, fetchFn?: typeof fetch): Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* Build, sign, and base58-encode a vault delegation token. Lazy-loads
|
|
22
|
+
* `@cere-ddc-sdk/ddc-client` so the import only fires when this helper is
|
|
23
|
+
* actually invoked. Throws a clear error if the optional dep is missing.
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildVaultDelegationToken(input: BuildDelegationTokenInput): Promise<string>;
|
|
26
|
+
//# sourceMappingURL=delegation-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation-token.d.ts","sourceRoot":"","sources":["../../src/internal/delegation-token.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAwCD;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// src/internal/delegation-token.ts
|
|
2
|
+
//
|
|
3
|
+
// Builds a DDC delegation token internally so browser apps don't have to ship
|
|
4
|
+
// `@cere-ddc-sdk/ddc-client` themselves. Mirrors the helper in
|
|
5
|
+
// `examples/vault-chat/utils/vault-token.ts` but reuses the SDK's own
|
|
6
|
+
// `Wallet` adapter instead of asking the consumer for a mnemonic.
|
|
7
|
+
//
|
|
8
|
+
// Trade-off: `@cere-ddc-sdk/ddc-client` is declared as an optionalDependency
|
|
9
|
+
// AND lazy-loaded via dynamic import only when this helper actually runs.
|
|
10
|
+
// Consumers that pre-build the token and pass it to `vault.ensure({ delegationToken })`
|
|
11
|
+
// never trigger this code path and never pull in the (heavy) ddc-client tree.
|
|
12
|
+
// Consumers that hit this path must have ddc-client installed at runtime.
|
|
13
|
+
import { getGatewayInfo } from "./gateway-info.js";
|
|
14
|
+
/**
|
|
15
|
+
* Fetch the gateway's ed25519 public key from `/auth/info`. Thin wrapper
|
|
16
|
+
* over `getGatewayInfo` for the one-off pubkey-only callers; the
|
|
17
|
+
* onboarding flow uses `getGatewayInfo` directly so it can also see
|
|
18
|
+
* cluster_id / region.
|
|
19
|
+
*/
|
|
20
|
+
export async function fetchGatewayPubkey(authInfoUrl, fetchFn = fetch) {
|
|
21
|
+
const info = await getGatewayInfo(authInfoUrl, fetchFn);
|
|
22
|
+
return info.pubkey;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Convert a hex pubkey ("0x.." or bare hex) to a Uint8Array. Required
|
|
26
|
+
* because DDC's Signer interface exposes `publicKey` as raw bytes.
|
|
27
|
+
*/
|
|
28
|
+
function hexToBytes(hex) {
|
|
29
|
+
const clean = hex.startsWith("0x") ? hex.slice(2) : hex;
|
|
30
|
+
if (clean.length % 2 !== 0) {
|
|
31
|
+
throw new Error(`Invalid hex pubkey length: ${hex}`);
|
|
32
|
+
}
|
|
33
|
+
const bytes = new Uint8Array(clean.length / 2);
|
|
34
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
35
|
+
bytes[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);
|
|
36
|
+
}
|
|
37
|
+
return bytes;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Adapt a `Wallet` (pubkey/sign) to the duck-typed surface DDC's
|
|
41
|
+
* `createSignature` reads from a Signer: `type`, `publicKey`, `isReady()`,
|
|
42
|
+
* `sign(bytes)`. We never extend `Signer` because that pulls in the
|
|
43
|
+
* blockchain pkg's prototype chain — duck typing is enough at runtime.
|
|
44
|
+
*/
|
|
45
|
+
function walletToDdcSigner(wallet) {
|
|
46
|
+
return {
|
|
47
|
+
type: wallet.sigType?.() ?? "ed25519",
|
|
48
|
+
publicKey: hexToBytes(wallet.pubkey()),
|
|
49
|
+
async isReady() { return true; },
|
|
50
|
+
async sign(data) {
|
|
51
|
+
return wallet.sign(data);
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Build, sign, and base58-encode a vault delegation token. Lazy-loads
|
|
57
|
+
* `@cere-ddc-sdk/ddc-client` so the import only fires when this helper is
|
|
58
|
+
* actually invoked. Throws a clear error if the optional dep is missing.
|
|
59
|
+
*/
|
|
60
|
+
export async function buildVaultDelegationToken(input) {
|
|
61
|
+
const subject = input.gatewayPubkey.startsWith("0x")
|
|
62
|
+
? input.gatewayPubkey
|
|
63
|
+
: `0x${input.gatewayPubkey}`;
|
|
64
|
+
let ddc;
|
|
65
|
+
try {
|
|
66
|
+
ddc = await import("@cere-ddc-sdk/ddc-client");
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
throw new Error("Building a delegation token internally requires the optional dependency "
|
|
70
|
+
+ "`@cere-ddc-sdk/ddc-client`. Install it, or pass a pre-built `delegationToken` "
|
|
71
|
+
+ "to `vault.ensure({ delegationToken })`.\n"
|
|
72
|
+
+ `Underlying error: ${err instanceof Error ? err.message : String(err)}`);
|
|
73
|
+
}
|
|
74
|
+
const { AuthToken } = ddc;
|
|
75
|
+
const args = {
|
|
76
|
+
subject,
|
|
77
|
+
canDelegate: input.canDelegate ?? true,
|
|
78
|
+
};
|
|
79
|
+
if (input.bucketId !== undefined)
|
|
80
|
+
args.bucketId = input.bucketId;
|
|
81
|
+
if (input.expiresInSeconds !== undefined)
|
|
82
|
+
args.expiresIn = input.expiresInSeconds;
|
|
83
|
+
const token = AuthToken.fullAccess(args);
|
|
84
|
+
// Cast the duck-typed adapter — DDC's createSignature only reads
|
|
85
|
+
// `type`, `publicKey`, `isReady()`, `sign()` (verified in 2.16.1).
|
|
86
|
+
await token.sign(walletToDdcSigner(input.wallet));
|
|
87
|
+
return token.toString();
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=delegation-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation-token.js","sourceRoot":"","sources":["../../src/internal/delegation-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface GatewayInfo {
|
|
2
|
+
/** ed25519 pubkey, `0x`-prefixed hex when the gateway returns it that way. */
|
|
3
|
+
pubkey: string;
|
|
4
|
+
/** Optional cluster id when the gateway exposes it. */
|
|
5
|
+
clusterId?: string;
|
|
6
|
+
/** Optional region label when the gateway exposes it. */
|
|
7
|
+
region?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Fetch the gateway's `/auth/info`. Throws on non-OK responses, missing
|
|
11
|
+
* pubkey, or invalid JSON. No caching here — the SDK caches one level
|
|
12
|
+
* up (`VaultSDK.cachedGatewayPubkey`) so it can be invalidated cleanly
|
|
13
|
+
* when needed.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getGatewayInfo(authInfoUrl: string, fetchFn?: typeof fetch): Promise<GatewayInfo>;
|
|
16
|
+
//# sourceMappingURL=gateway-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-info.d.ts","sourceRoot":"","sources":["../../src/internal/gateway-info.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,WAAW,CAAC,CAoBtB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// src/internal/gateway-info.ts
|
|
2
|
+
//
|
|
3
|
+
// Single source of truth for the DDC S3 gateway's `/auth/info` payload —
|
|
4
|
+
// the gateway's ed25519 pubkey, plus optional cluster/region metadata.
|
|
5
|
+
// The pubkey is needed in two places:
|
|
6
|
+
// - building a delegation token's `subject` (delegation-token.ts)
|
|
7
|
+
// - calling `proxy.addProxy(<gw>, NonTransfer, 0)` (auto-add-proxy.ts)
|
|
8
|
+
// so it makes sense to fetch it from one helper.
|
|
9
|
+
/**
|
|
10
|
+
* Fetch the gateway's `/auth/info`. Throws on non-OK responses, missing
|
|
11
|
+
* pubkey, or invalid JSON. No caching here — the SDK caches one level
|
|
12
|
+
* up (`VaultSDK.cachedGatewayPubkey`) so it can be invalidated cleanly
|
|
13
|
+
* when needed.
|
|
14
|
+
*/
|
|
15
|
+
export async function getGatewayInfo(authInfoUrl, fetchFn = fetch) {
|
|
16
|
+
const res = await fetchFn(authInfoUrl, {
|
|
17
|
+
headers: { Accept: "application/json" },
|
|
18
|
+
});
|
|
19
|
+
if (!res.ok) {
|
|
20
|
+
throw new Error(`Gateway /auth/info ${res.status}: ${await res.text().catch(() => "")}`);
|
|
21
|
+
}
|
|
22
|
+
const info = (await res.json());
|
|
23
|
+
const pubkey = info.gateway_public_key ?? info.pubkey;
|
|
24
|
+
if (!pubkey) {
|
|
25
|
+
throw new Error(`Gateway /auth/info response is missing gateway_public_key: ${JSON.stringify(info)}`);
|
|
26
|
+
}
|
|
27
|
+
const out = { pubkey };
|
|
28
|
+
if (info.cluster_id !== undefined)
|
|
29
|
+
out.clusterId = info.cluster_id;
|
|
30
|
+
if (info.region !== undefined)
|
|
31
|
+
out.region = info.region;
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=gateway-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-info.js","sourceRoot":"","sources":["../../src/internal/gateway-info.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,sCAAsC;AACtC,oEAAoE;AACpE,yEAAyE;AACzE,iDAAiD;AAmBjD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,UAAwB,KAAK;IAE7B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE;QACrC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;KACxC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,sBAAsB,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CACxE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAgB,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC;IACtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,8DAA8D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CACrF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAgB,EAAE,MAAM,EAAE,CAAC;IACpC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;QAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;IACnE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -11,6 +11,18 @@ export interface AgentManifest {
|
|
|
11
11
|
asPubKey: string;
|
|
12
12
|
[k: string]: unknown;
|
|
13
13
|
}
|
|
14
|
+
export interface ListAgentsOptions {
|
|
15
|
+
/** Page size. Server caps if omitted. */
|
|
16
|
+
limit?: number;
|
|
17
|
+
/** Opaque cursor returned by the previous page. */
|
|
18
|
+
cursor?: string;
|
|
19
|
+
/** Free-text search; mapped to `q=` on the wire. */
|
|
20
|
+
query?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ListAgentsResponse {
|
|
23
|
+
items: AgentManifest[];
|
|
24
|
+
nextCursor?: string;
|
|
25
|
+
}
|
|
14
26
|
/**
|
|
15
27
|
* Marketplace lives on a separate API server (see `pkg/compute/marketplace`
|
|
16
28
|
* in ddc-node). The SDK is configured with a dedicated `marketplaceEndpoint`
|
|
@@ -21,5 +33,6 @@ export declare class Marketplace {
|
|
|
21
33
|
private readonly http;
|
|
22
34
|
constructor(http: VaultHttpClient);
|
|
23
35
|
getAgent(agentId: string, version?: string): Promise<AgentManifest>;
|
|
36
|
+
list(opts?: ListAgentsOptions): Promise<ListAgentsResponse>;
|
|
24
37
|
}
|
|
25
38
|
//# sourceMappingURL=marketplace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/internal/marketplace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMvD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,eAAe;IAElD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/internal/marketplace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMvD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,eAAe;IAElD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOnE,IAAI,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAMhE"}
|