@cef-ai/vault-sdk 0.5.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/canonical.d.ts +1 -4
- package/dist/core/canonical.d.ts.map +1 -1
- package/dist/core/canonical.js +10 -20
- package/dist/core/canonical.js.map +1 -1
- package/dist/core/endpoints.js +2 -2
- package/dist/core/endpoints.js.map +1 -1
- package/dist/core/http.d.ts +12 -4
- package/dist/core/http.d.ts.map +1 -1
- package/dist/core/http.js +50 -33
- package/dist/core/http.js.map +1 -1
- package/package.json +4 -2
package/dist/core/canonical.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
+
export { bytesToHex, encodeBase64Url, ensure0xHex, strip0xHex } from "@cef-ai/transport";
|
|
1
2
|
export declare const nowRFC3339: () => string;
|
|
2
|
-
export declare function ensure0xHex(s: string): string;
|
|
3
3
|
export declare function stripHexPrefix(s: string): string;
|
|
4
|
-
export declare function strip0xHex(s: string): string;
|
|
5
|
-
export declare function bytesToHex(b: Uint8Array): string;
|
|
6
|
-
export declare function encodeBase64Url(bytes: Uint8Array): string;
|
|
7
4
|
export interface StampedBody {
|
|
8
5
|
body: Record<string, unknown>;
|
|
9
6
|
bytes: Uint8Array;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/core/canonical.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/core/canonical.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIzF,eAAO,MAAM,UAAU,QAAO,MAAkC,CAAC;AAEjE,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE;AACjF,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,KAAK,GAAE,MAAM,MAAmB,GAC/B,WAAW,CASb;AAED,MAAM,WAAW,QAAQ;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE;AACjE,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAM,MAAmB,GAC/B,QAAQ,CAQV"}
|
package/dist/core/canonical.js
CHANGED
|
@@ -1,33 +1,23 @@
|
|
|
1
1
|
// src/core/canonical.ts
|
|
2
|
+
// Hex/base64url helpers are byte-identical to @cef-ai/transport's — re-export
|
|
3
|
+
// them rather than maintain a second copy. The signing-preamble
|
|
4
|
+
// helpers below (stampBody/buildPreamble/nowRFC3339) are vault-specific and
|
|
5
|
+
// stay here. `stripHexPrefix` is kept as a vault-local alias of `strip0xHex`.
|
|
6
|
+
export { bytesToHex, encodeBase64Url, ensure0xHex, strip0xHex } from "@cef-ai/transport";
|
|
2
7
|
const enc = new TextEncoder();
|
|
3
8
|
export const nowRFC3339 = () => new Date().toISOString();
|
|
4
|
-
export function ensure0xHex(s) {
|
|
5
|
-
return s.startsWith("0x") ? s : `0x${s}`;
|
|
6
|
-
}
|
|
7
9
|
export function stripHexPrefix(s) {
|
|
8
10
|
return s.startsWith("0x") ? s.slice(2) : s;
|
|
9
11
|
}
|
|
10
|
-
export function strip0xHex(s) {
|
|
11
|
-
return s.startsWith("0x") ? s.slice(2) : s;
|
|
12
|
-
}
|
|
13
|
-
export function bytesToHex(b) {
|
|
14
|
-
let s = "";
|
|
15
|
-
for (let i = 0; i < b.length; i++)
|
|
16
|
-
s += b[i].toString(16).padStart(2, "0");
|
|
17
|
-
return s;
|
|
18
|
-
}
|
|
19
|
-
export function encodeBase64Url(bytes) {
|
|
20
|
-
let bin = "";
|
|
21
|
-
for (let i = 0; i < bytes.length; i++)
|
|
22
|
-
bin += String.fromCharCode(bytes[i]);
|
|
23
|
-
const b64 = (typeof btoa === "function" ? btoa : nodeBtoa)(bin);
|
|
24
|
-
return b64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
|
|
25
|
-
}
|
|
26
|
-
function nodeBtoa(s) { return Buffer.from(s, "binary").toString("base64"); }
|
|
27
12
|
export function stampBody(body, clock = nowRFC3339) {
|
|
28
13
|
const stamped = { ...(body ?? {}) };
|
|
29
14
|
if (typeof stamped.timestamp !== "string")
|
|
30
15
|
stamped.timestamp = clock();
|
|
16
|
+
// Deliberately `JSON.stringify`, NOT transport's `canonicalize` (JCS): the
|
|
17
|
+
// vault auth scheme signs these exact bytes and they are sent on the wire
|
|
18
|
+
// verbatim, so the server verifies the same `JSON.stringify` output. JCS is
|
|
19
|
+
// for the separate marketplace/GAR signing path — swapping it in here would
|
|
20
|
+
// change the signed bytes and break verification.
|
|
31
21
|
return { body: stamped, bytes: enc.encode(JSON.stringify(stamped)) };
|
|
32
22
|
}
|
|
33
23
|
export function buildPreamble(method, path, query, clock = nowRFC3339) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../src/core/canonical.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../src/core/canonical.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,8EAA8E;AAC9E,gEAAgE;AAChE,4EAA4E;AAC5E,8EAA8E;AAC9E,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEzF,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;AAE9B,MAAM,CAAC,MAAM,UAAU,GAAG,GAAW,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAEjE,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAGD,MAAM,UAAU,SAAS,CACvB,IAAyC,EACzC,QAAsB,UAAU;IAEhC,MAAM,OAAO,GAA4B,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7D,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC;IACvE,2EAA2E;IAC3E,0EAA0E;IAC1E,4EAA4E;IAC5E,4EAA4E;IAC5E,kDAAkD;IAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC;AAGD,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,IAAY,EACZ,KAAa,EACb,QAAsB,UAAU;IAEhC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;QAC5B,IAAI;QACJ,KAAK;QACL,SAAS,EAAE,KAAK,EAAE;KACnB,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
package/dist/core/endpoints.js
CHANGED
|
@@ -18,8 +18,8 @@ export const endpoints = {
|
|
|
18
18
|
jobActivities: (v, j) => `${API_BASE}/vaults/${seg(v)}/jobs/${seg(j)}/activities`,
|
|
19
19
|
jobActivity: (v, j, a) => `${API_BASE}/vaults/${seg(v)}/jobs/${seg(j)}/activities/${seg(a)}`,
|
|
20
20
|
jobActivityLogs: (v, j, a) => `${API_BASE}/vaults/${seg(v)}/jobs/${seg(j)}/activities/${seg(a)}/logs`,
|
|
21
|
-
cubbyQuery: (v, s, a, alias) => `${API_BASE}/vaults/${seg(v)}/scopes/${seg(s)}/agents/${
|
|
22
|
-
cubbyExec: (v, s, a, alias) => `${API_BASE}/vaults/${seg(v)}/scopes/${seg(s)}/agents/${
|
|
21
|
+
cubbyQuery: (v, s, a, alias) => `${API_BASE}/vaults/${seg(v)}/scopes/${seg(s)}/agents/${a}/cubbies/${seg(alias)}/query`,
|
|
22
|
+
cubbyExec: (v, s, a, alias) => `${API_BASE}/vaults/${seg(v)}/scopes/${seg(s)}/agents/${a}/cubbies/${seg(alias)}/exec`,
|
|
23
23
|
marketplaceAgents: () => `${API_BASE}/marketplace/agents`,
|
|
24
24
|
marketplaceAgent: (a) => `${API_BASE}/marketplace/agents/${seg(a)}`,
|
|
25
25
|
marketplaceAgentVersion: (a, v) => `${API_BASE}/marketplace/agents/${seg(a)}/versions/${seg(v)}`,
|
|
@@ -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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"}
|
package/dist/core/http.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
+
import { type FetchLike, type QueryMap } from "@cef-ai/transport";
|
|
1
2
|
import type { AuthProvider } from "../auth/provider.js";
|
|
2
|
-
export type FetchLike
|
|
3
|
-
export type QueryValue = string | number | boolean | undefined | null;
|
|
4
|
-
export type QueryMap = Record<string, QueryValue>;
|
|
3
|
+
export type { FetchLike, QueryValue, QueryMap } from "@cef-ai/transport";
|
|
5
4
|
export interface VaultHttpClientConfig {
|
|
6
5
|
url: string;
|
|
7
6
|
/** Default auth provider applied to every call unless overridden per-call. */
|
|
@@ -15,10 +14,19 @@ export interface SendOptions {
|
|
|
15
14
|
/** Per-call auth override. Pass `new NoAuth()` for public endpoints on an authed client. */
|
|
16
15
|
auth?: AuthProvider;
|
|
17
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Vault transport: the request-signing seam (`AuthProvider`) layered on top of
|
|
19
|
+
* the shared `@cef-ai/transport` `HttpClient`. The vault-specific part — sign
|
|
20
|
+
* the exact body bytes + attach headers — is computed here; fetch, timeout,
|
|
21
|
+
* 204/JSON handling, and typed-error mapping are delegated to `HttpClient` so
|
|
22
|
+
* they are no longer reimplemented. Transport's typed errors are
|
|
23
|
+
* translated back to `VaultRequestError` so the vault-sdk error contract
|
|
24
|
+
* (status + code, 501 → `VaultNotImplementedError`) is unchanged for callers.
|
|
25
|
+
*/
|
|
18
26
|
export declare class VaultHttpClient {
|
|
19
27
|
private readonly baseUrl;
|
|
28
|
+
private readonly http;
|
|
20
29
|
private readonly defaultAuth;
|
|
21
|
-
private readonly fetchFn;
|
|
22
30
|
private readonly timeoutMs;
|
|
23
31
|
constructor(config: VaultHttpClientConfig);
|
|
24
32
|
/**
|
package/dist/core/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,4FAA4F;IAC5F,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAKD;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,EAAE,qBAAqB;IAgBzC;;;OAGG;IACG,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAwB/E,OAAO,CAAC,QAAQ;CAWjB"}
|
package/dist/core/http.js
CHANGED
|
@@ -1,70 +1,66 @@
|
|
|
1
1
|
// src/core/http.ts
|
|
2
|
+
import { HttpClient, HttpError, TimeoutError, NetworkError, TransportError, } from "@cef-ai/transport";
|
|
2
3
|
import { mapResponseError, VaultRequestError } from "./errors.js";
|
|
3
4
|
import { NoAuth } from "../auth/no-auth.js";
|
|
4
5
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
5
6
|
const NO_AUTH = new NoAuth();
|
|
7
|
+
/**
|
|
8
|
+
* Vault transport: the request-signing seam (`AuthProvider`) layered on top of
|
|
9
|
+
* the shared `@cef-ai/transport` `HttpClient`. The vault-specific part — sign
|
|
10
|
+
* the exact body bytes + attach headers — is computed here; fetch, timeout,
|
|
11
|
+
* 204/JSON handling, and typed-error mapping are delegated to `HttpClient` so
|
|
12
|
+
* they are no longer reimplemented. Transport's typed errors are
|
|
13
|
+
* translated back to `VaultRequestError` so the vault-sdk error contract
|
|
14
|
+
* (status + code, 501 → `VaultNotImplementedError`) is unchanged for callers.
|
|
15
|
+
*/
|
|
6
16
|
export class VaultHttpClient {
|
|
7
17
|
baseUrl;
|
|
18
|
+
http;
|
|
8
19
|
defaultAuth;
|
|
9
|
-
fetchFn;
|
|
10
20
|
timeoutMs;
|
|
11
21
|
constructor(config) {
|
|
12
22
|
if (!config.url)
|
|
13
23
|
throw new Error("VaultHttpClient: `url` is required");
|
|
14
24
|
this.baseUrl = config.url.replace(/\/$/, "");
|
|
15
25
|
this.defaultAuth = config.auth ?? NO_AUTH;
|
|
16
|
-
this.fetchFn = config.fetch ?? fetch.bind(globalThis);
|
|
17
26
|
this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
27
|
+
this.http = new HttpClient({
|
|
28
|
+
baseUrl: this.baseUrl,
|
|
29
|
+
fetch: config.fetch,
|
|
30
|
+
timeoutMs: this.timeoutMs,
|
|
31
|
+
// Pin no-retry explicitly: this is a request-SIGNING client, so an
|
|
32
|
+
// automatic retry would re-send already-signed bytes. Don't inherit a
|
|
33
|
+
// future change to transport's default retry policy.
|
|
34
|
+
retry: { retries: 0, baseDelayMs: 0 },
|
|
35
|
+
});
|
|
18
36
|
}
|
|
19
37
|
/**
|
|
20
38
|
* Generic transport. Resource classes call this directly. Public + private
|
|
21
39
|
* routes share the same path; per-call `opts.auth` switches between them.
|
|
22
40
|
*/
|
|
23
41
|
async send(method, path, opts = {}) {
|
|
24
|
-
const url = this.buildUrl(path, opts.query);
|
|
25
42
|
const auth = opts.auth ?? this.defaultAuth;
|
|
43
|
+
// Build the URL exactly as transport will (same baseUrl + join + query
|
|
44
|
+
// serialisation) so the pathname/query the AuthProvider signs match the
|
|
45
|
+
// bytes that go on the wire.
|
|
46
|
+
const url = this.buildUrl(path, opts.query);
|
|
26
47
|
const outcome = await auth.authenticate({
|
|
27
48
|
method,
|
|
28
49
|
path: url.pathname,
|
|
29
50
|
query: url.search.replace(/^\?/, ""),
|
|
30
51
|
body: opts.body,
|
|
31
52
|
});
|
|
32
|
-
const headers = { Accept: "application/json", ...outcome.headers };
|
|
33
|
-
const ctrl = new AbortController();
|
|
34
|
-
const timer = setTimeout(() => ctrl.abort(), this.timeoutMs);
|
|
35
|
-
let res;
|
|
36
53
|
try {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
headers,
|
|
54
|
+
return await this.http.request(method, path, {
|
|
55
|
+
query: opts.query,
|
|
56
|
+
headers: outcome.headers,
|
|
57
|
+
// Uint8Array (the signed bytes) is sent verbatim by HttpClient.
|
|
40
58
|
body: outcome.body,
|
|
41
|
-
signal: ctrl.signal,
|
|
42
59
|
});
|
|
43
60
|
}
|
|
44
61
|
catch (err) {
|
|
45
|
-
|
|
46
|
-
throw new VaultRequestError(`Request timed out after ${this.timeoutMs}ms`, 0, "TIMEOUT");
|
|
47
|
-
}
|
|
48
|
-
throw new VaultRequestError(err instanceof Error ? err.message : "Network error", 0, "NETWORK_ERROR");
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
clearTimeout(timer);
|
|
62
|
+
throw translateError(err, this.timeoutMs);
|
|
52
63
|
}
|
|
53
|
-
if (res.status === 204)
|
|
54
|
-
return undefined;
|
|
55
|
-
const text = await res.text();
|
|
56
|
-
let parsed = null;
|
|
57
|
-
if (text) {
|
|
58
|
-
try {
|
|
59
|
-
parsed = JSON.parse(text);
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
parsed = text;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (res.ok)
|
|
66
|
-
return parsed;
|
|
67
|
-
throw mapResponseError(res.status, parsed);
|
|
68
64
|
}
|
|
69
65
|
buildUrl(path, query) {
|
|
70
66
|
const joined = path.startsWith("/") ? `${this.baseUrl}${path}` : `${this.baseUrl}/${path}`;
|
|
@@ -79,4 +75,25 @@ export class VaultHttpClient {
|
|
|
79
75
|
return url;
|
|
80
76
|
}
|
|
81
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Map transport's typed errors back to the vault-sdk error contract.
|
|
80
|
+
* `HttpError` carries the parsed `body`, so vault's own `mapResponseError`
|
|
81
|
+
* reproduces `VaultRequestError`/`VaultNotImplementedError` with the same
|
|
82
|
+
* status + code semantics. Any other transport error is wrapped in a
|
|
83
|
+
* `VaultRequestError` so the vault-sdk error contract holds even if transport
|
|
84
|
+
* grows new error types; truly foreign errors pass through untouched.
|
|
85
|
+
*/
|
|
86
|
+
function translateError(err, timeoutMs) {
|
|
87
|
+
if (err instanceof HttpError)
|
|
88
|
+
return mapResponseError(err.status, err.body);
|
|
89
|
+
if (err instanceof TimeoutError) {
|
|
90
|
+
return new VaultRequestError(`Request timed out after ${timeoutMs}ms`, 0, "TIMEOUT");
|
|
91
|
+
}
|
|
92
|
+
if (err instanceof NetworkError)
|
|
93
|
+
return new VaultRequestError(err.message, 0, "NETWORK_ERROR");
|
|
94
|
+
if (err instanceof TransportError) {
|
|
95
|
+
return new VaultRequestError(err.message, 0, err.code ?? "TRANSPORT_ERROR");
|
|
96
|
+
}
|
|
97
|
+
return err;
|
|
98
|
+
}
|
|
82
99
|
//# sourceMappingURL=http.js.map
|
package/dist/core/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cef-ai/vault-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -24,7 +24,9 @@
|
|
|
24
24
|
"@noble/ed25519": "^2.1.0",
|
|
25
25
|
"@polkadot/keyring": "^10.4.2",
|
|
26
26
|
"@polkadot/util": "^10.4.2",
|
|
27
|
-
"@polkadot/util-crypto": "^10.4.2"
|
|
27
|
+
"@polkadot/util-crypto": "^10.4.2",
|
|
28
|
+
"@cef-ai/account": "1.0.0",
|
|
29
|
+
"@cef-ai/transport": "1.0.0"
|
|
28
30
|
},
|
|
29
31
|
"optionalDependencies": {
|
|
30
32
|
"@cere-ddc-sdk/blockchain": "^2.16.1",
|