@cef-ai/vault-sdk 0.5.1 → 1.0.1

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.
@@ -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":"AAGA,eAAO,MAAM,UAAU,QAAO,MAAkC,CAAC;AAEjE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AACD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AACD,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAGhD;AACD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAKzD;AAGD,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,CAIb;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"}
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"}
@@ -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":"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"}
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"}
@@ -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 = typeof fetch;
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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAGrC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;AACtE,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAElD,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,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,EAAE,qBAAqB;IAQzC;;;OAGG;IACG,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IA4C/E,OAAO,CAAC,QAAQ;CAWjB"}
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
- res = await this.fetchFn(url.toString(), {
38
- method,
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
- if (err instanceof Error && err.name === "AbortError") {
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
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"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"}
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.5.1",
3
+ "version": "1.0.1",
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.1",
29
+ "@cef-ai/transport": "1.0.0"
28
30
  },
29
31
  "optionalDependencies": {
30
32
  "@cere-ddc-sdk/blockchain": "^2.16.1",