genesis-mesh-sdk 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/LICENSE +21 -0
  3. package/README.md +276 -0
  4. package/dist/cjs/agreement.js +26 -0
  5. package/dist/cjs/attestation.js +22 -0
  6. package/dist/cjs/auth.js +54 -0
  7. package/dist/cjs/boundary.js +18 -0
  8. package/dist/cjs/client.js +78 -0
  9. package/dist/cjs/consensus.js +22 -0
  10. package/dist/cjs/data_usage.js +26 -0
  11. package/dist/cjs/disclosure.js +26 -0
  12. package/dist/cjs/errors.js +87 -0
  13. package/dist/cjs/evidence.js +18 -0
  14. package/dist/cjs/index.js +63 -0
  15. package/dist/cjs/types.js +7 -0
  16. package/dist/esm/agreement.js +23 -0
  17. package/dist/esm/agreement.js.map +1 -0
  18. package/dist/esm/attestation.js +19 -0
  19. package/dist/esm/attestation.js.map +1 -0
  20. package/dist/esm/auth.js +50 -0
  21. package/dist/esm/auth.js.map +1 -0
  22. package/dist/esm/boundary.js +15 -0
  23. package/dist/esm/boundary.js.map +1 -0
  24. package/dist/esm/client.js +75 -0
  25. package/dist/esm/client.js.map +1 -0
  26. package/dist/esm/consensus.js +19 -0
  27. package/dist/esm/consensus.js.map +1 -0
  28. package/dist/esm/data_usage.js +23 -0
  29. package/dist/esm/data_usage.js.map +1 -0
  30. package/dist/esm/disclosure.js +23 -0
  31. package/dist/esm/disclosure.js.map +1 -0
  32. package/dist/esm/errors.js +77 -0
  33. package/dist/esm/errors.js.map +1 -0
  34. package/dist/esm/evidence.js +15 -0
  35. package/dist/esm/evidence.js.map +1 -0
  36. package/dist/esm/index.js +42 -0
  37. package/dist/esm/index.js.map +1 -0
  38. package/dist/esm/types.js +7 -0
  39. package/dist/esm/types.js.map +1 -0
  40. package/dist/types/agreement.d.ts +42 -0
  41. package/dist/types/agreement.d.ts.map +1 -0
  42. package/dist/types/attestation.d.ts +28 -0
  43. package/dist/types/attestation.d.ts.map +1 -0
  44. package/dist/types/auth.d.ts +25 -0
  45. package/dist/types/auth.d.ts.map +1 -0
  46. package/dist/types/boundary.d.ts +20 -0
  47. package/dist/types/boundary.d.ts.map +1 -0
  48. package/dist/types/client.d.ts +31 -0
  49. package/dist/types/client.d.ts.map +1 -0
  50. package/dist/types/consensus.d.ts +29 -0
  51. package/dist/types/consensus.d.ts.map +1 -0
  52. package/dist/types/data_usage.d.ts +35 -0
  53. package/dist/types/data_usage.d.ts.map +1 -0
  54. package/dist/types/disclosure.d.ts +33 -0
  55. package/dist/types/disclosure.d.ts.map +1 -0
  56. package/dist/types/errors.d.ts +32 -0
  57. package/dist/types/errors.d.ts.map +1 -0
  58. package/dist/types/evidence.d.ts +20 -0
  59. package/dist/types/evidence.d.ts.map +1 -0
  60. package/dist/types/index.d.ts +39 -0
  61. package/dist/types/index.d.ts.map +1 -0
  62. package/dist/types/types.d.ts +228 -0
  63. package/dist/types/types.d.ts.map +1 -0
  64. package/package.json +52 -0
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ /** Typed error classes mirroring the NA HTTP error surface. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BadRequestError = exports.NetworkError = exports.RateLimitError = exports.NotFoundError = exports.ValidationError = exports.UnauthorizedError = exports.GenesisMeshError = void 0;
5
+ exports.fromHttpError = fromHttpError;
6
+ class GenesisMeshError extends Error {
7
+ code;
8
+ status;
9
+ constructor(message, code, status) {
10
+ super(message);
11
+ this.name = 'GenesisMeshError';
12
+ this.code = code;
13
+ this.status = status;
14
+ Object.setPrototypeOf(this, new.target.prototype);
15
+ }
16
+ }
17
+ exports.GenesisMeshError = GenesisMeshError;
18
+ class UnauthorizedError extends GenesisMeshError {
19
+ constructor(message = 'Unauthorized', code = 'unauthorized') {
20
+ super(message, code, 401);
21
+ this.name = 'UnauthorizedError';
22
+ }
23
+ }
24
+ exports.UnauthorizedError = UnauthorizedError;
25
+ class ValidationError extends GenesisMeshError {
26
+ constructor(message, code = 'validation_error') {
27
+ super(message, code, 422);
28
+ this.name = 'ValidationError';
29
+ }
30
+ }
31
+ exports.ValidationError = ValidationError;
32
+ class NotFoundError extends GenesisMeshError {
33
+ constructor(message, code = 'not_found') {
34
+ super(message, code, 404);
35
+ this.name = 'NotFoundError';
36
+ }
37
+ }
38
+ exports.NotFoundError = NotFoundError;
39
+ class RateLimitError extends GenesisMeshError {
40
+ constructor(message = 'Rate limit exceeded', code = 'rate_limit_exceeded') {
41
+ super(message, code, 429);
42
+ this.name = 'RateLimitError';
43
+ }
44
+ }
45
+ exports.RateLimitError = RateLimitError;
46
+ class NetworkError extends GenesisMeshError {
47
+ constructor(message, code = 'network_error') {
48
+ super(message, code, 0);
49
+ this.name = 'NetworkError';
50
+ }
51
+ }
52
+ exports.NetworkError = NetworkError;
53
+ class BadRequestError extends GenesisMeshError {
54
+ constructor(message, code = 'bad_request') {
55
+ super(message, code, 400);
56
+ this.name = 'BadRequestError';
57
+ }
58
+ }
59
+ exports.BadRequestError = BadRequestError;
60
+ /** Maps an HTTP error response body to the appropriate typed error.
61
+ *
62
+ * Handles both flat format { error: "string", code: "..." }
63
+ * and nested format { error: { message: "...", code: "..." } }
64
+ * as produced by the Genesis Mesh NA.
65
+ */
66
+ function fromHttpError(status, body) {
67
+ const errorField = body['error'];
68
+ let message;
69
+ let code;
70
+ if (typeof errorField === 'object' && errorField !== null) {
71
+ const nested = errorField;
72
+ message = String(nested['message'] ?? 'Unknown error');
73
+ code = String(nested['code'] ?? 'unknown');
74
+ }
75
+ else {
76
+ message = String(errorField ?? body['message'] ?? 'Unknown error');
77
+ code = String(body['code'] ?? 'unknown');
78
+ }
79
+ switch (status) {
80
+ case 400: return new BadRequestError(message, code);
81
+ case 401: return new UnauthorizedError(message, code);
82
+ case 404: return new NotFoundError(message, code);
83
+ case 422: return new ValidationError(message, code);
84
+ case 429: return new RateLimitError(message, code);
85
+ default: return new GenesisMeshError(message, code, status);
86
+ }
87
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EvidenceClient = void 0;
4
+ class EvidenceClient {
5
+ http;
6
+ constructor(http) {
7
+ this.http = http;
8
+ }
9
+ /** Build and sign trust evidence from a trust decision (admin). */
10
+ build(params) {
11
+ return this.http.adminPost('/admin/trust-evidence', params);
12
+ }
13
+ /** Verify trust evidence signatures (unauthenticated). */
14
+ verify(params) {
15
+ return this.http.publicPost('/trust-evidence/verify', params);
16
+ }
17
+ }
18
+ exports.EvidenceClient = EvidenceClient;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BadRequestError = exports.NetworkError = exports.RateLimitError = exports.NotFoundError = exports.ValidationError = exports.UnauthorizedError = exports.GenesisMeshError = exports.buildAdminHeaders = exports.signBytes = exports.canonicalJson = exports.HttpTransport = exports.DataUsageClient = exports.ConsensusClient = exports.DisclosureClient = exports.AttestationClient = exports.EvidenceClient = exports.BoundaryClient = exports.AgreementClient = exports.GenesisMeshClient = void 0;
4
+ const client_js_1 = require("./client.js");
5
+ const agreement_js_1 = require("./agreement.js");
6
+ const boundary_js_1 = require("./boundary.js");
7
+ const evidence_js_1 = require("./evidence.js");
8
+ const attestation_js_1 = require("./attestation.js");
9
+ const disclosure_js_1 = require("./disclosure.js");
10
+ const consensus_js_1 = require("./consensus.js");
11
+ const data_usage_js_1 = require("./data_usage.js");
12
+ class GenesisMeshClient {
13
+ agreement;
14
+ boundary;
15
+ evidence;
16
+ attestation;
17
+ disclosure;
18
+ consensus;
19
+ dataUsage;
20
+ constructor(options) {
21
+ const http = new client_js_1.HttpTransport(options);
22
+ this.agreement = new agreement_js_1.AgreementClient(http);
23
+ this.boundary = new boundary_js_1.BoundaryClient(http);
24
+ this.evidence = new evidence_js_1.EvidenceClient(http);
25
+ this.attestation = new attestation_js_1.AttestationClient(http);
26
+ this.disclosure = new disclosure_js_1.DisclosureClient(http);
27
+ this.consensus = new consensus_js_1.ConsensusClient(http);
28
+ this.dataUsage = new data_usage_js_1.DataUsageClient(http);
29
+ }
30
+ }
31
+ exports.GenesisMeshClient = GenesisMeshClient;
32
+ // Sub-client classes (for composition / dependency injection)
33
+ var agreement_js_2 = require("./agreement.js");
34
+ Object.defineProperty(exports, "AgreementClient", { enumerable: true, get: function () { return agreement_js_2.AgreementClient; } });
35
+ var boundary_js_2 = require("./boundary.js");
36
+ Object.defineProperty(exports, "BoundaryClient", { enumerable: true, get: function () { return boundary_js_2.BoundaryClient; } });
37
+ var evidence_js_2 = require("./evidence.js");
38
+ Object.defineProperty(exports, "EvidenceClient", { enumerable: true, get: function () { return evidence_js_2.EvidenceClient; } });
39
+ var attestation_js_2 = require("./attestation.js");
40
+ Object.defineProperty(exports, "AttestationClient", { enumerable: true, get: function () { return attestation_js_2.AttestationClient; } });
41
+ var disclosure_js_2 = require("./disclosure.js");
42
+ Object.defineProperty(exports, "DisclosureClient", { enumerable: true, get: function () { return disclosure_js_2.DisclosureClient; } });
43
+ var consensus_js_2 = require("./consensus.js");
44
+ Object.defineProperty(exports, "ConsensusClient", { enumerable: true, get: function () { return consensus_js_2.ConsensusClient; } });
45
+ var data_usage_js_2 = require("./data_usage.js");
46
+ Object.defineProperty(exports, "DataUsageClient", { enumerable: true, get: function () { return data_usage_js_2.DataUsageClient; } });
47
+ // Transport
48
+ var client_js_2 = require("./client.js");
49
+ Object.defineProperty(exports, "HttpTransport", { enumerable: true, get: function () { return client_js_2.HttpTransport; } });
50
+ // Auth utilities (canonical JSON, admin header signing)
51
+ var auth_js_1 = require("./auth.js");
52
+ Object.defineProperty(exports, "canonicalJson", { enumerable: true, get: function () { return auth_js_1.canonicalJson; } });
53
+ Object.defineProperty(exports, "signBytes", { enumerable: true, get: function () { return auth_js_1.signBytes; } });
54
+ Object.defineProperty(exports, "buildAdminHeaders", { enumerable: true, get: function () { return auth_js_1.buildAdminHeaders; } });
55
+ // Errors
56
+ var errors_js_1 = require("./errors.js");
57
+ Object.defineProperty(exports, "GenesisMeshError", { enumerable: true, get: function () { return errors_js_1.GenesisMeshError; } });
58
+ Object.defineProperty(exports, "UnauthorizedError", { enumerable: true, get: function () { return errors_js_1.UnauthorizedError; } });
59
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return errors_js_1.ValidationError; } });
60
+ Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return errors_js_1.NotFoundError; } });
61
+ Object.defineProperty(exports, "RateLimitError", { enumerable: true, get: function () { return errors_js_1.RateLimitError; } });
62
+ Object.defineProperty(exports, "NetworkError", { enumerable: true, get: function () { return errors_js_1.NetworkError; } });
63
+ Object.defineProperty(exports, "BadRequestError", { enumerable: true, get: function () { return errors_js_1.BadRequestError; } });
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * TypeScript interfaces for all stable Genesis Mesh protocol models.
4
+ * Field names match the Python Pydantic models exactly — JSON serialization
5
+ * is snake_case throughout the HTTP API.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,23 @@
1
+ export class AgreementClient {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ /** Create and sign a capability offer (admin). */
7
+ offer(params) {
8
+ return this.http.adminPost('/admin/agreements/offer', params);
9
+ }
10
+ /** Create and sign a counter-offer (admin). */
11
+ counter(params) {
12
+ return this.http.adminPost('/admin/agreements/counter', params);
13
+ }
14
+ /** Accept an offer or counter (admin). */
15
+ accept(params) {
16
+ return this.http.adminPost('/admin/agreements/accept', params);
17
+ }
18
+ /** Verify agreement signatures (unauthenticated). */
19
+ verify(params) {
20
+ return this.http.publicPost('/agreements/verify', params);
21
+ }
22
+ }
23
+ //# sourceMappingURL=agreement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agreement.js","sourceRoot":"","sources":["../../src/agreement.ts"],"names":[],"mappings":"AAwCA,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,kDAAkD;IAClD,KAAK,CAAC,MAAmB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAkB,yBAAyB,EAAE,MAAM,CAAC,CAAC;IACjF,CAAC;IAED,+CAA+C;IAC/C,OAAO,CAAC,MAAqB;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAoB,2BAA2B,EAAE,MAAM,CAAC,CAAC;IACrF,CAAC;IAED,0CAA0C;IAC1C,MAAM,CAAC,MAA+C;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAkB,0BAA0B,EAAE,MAAM,CAAC,CAAC;IAClF,CAAC;IAED,qDAAqD;IACrD,MAAM,CAAC,MAA6B;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAwB,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ export class AttestationClient {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ /** Issue a signed membership attestation (admin). */
7
+ issue(params) {
8
+ return this.http.adminPost('/admin/attestations', params);
9
+ }
10
+ /** Revoke a membership attestation by ID (admin). */
11
+ revoke(attestationId, params = {}) {
12
+ return this.http.adminPost(`/admin/attestations/${attestationId}/revoke`, params);
13
+ }
14
+ /** Set the active recognition policy for this sovereign (admin). */
15
+ savePolicy(params) {
16
+ return this.http.adminPost('/admin/recognition-policy', params);
17
+ }
18
+ }
19
+ //# sourceMappingURL=attestation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attestation.js","sourceRoot":"","sources":["../../src/attestation.ts"],"names":[],"mappings":"AAyBA,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,qDAAqD;IACrD,KAAK,CAAC,MAA8B;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAwB,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC;IAED,qDAAqD;IACrD,MAAM,CACJ,aAAqB,EACrB,SAAkC,EAAE;QAEpC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CACxB,uBAAuB,aAAa,SAAS,EAC7C,MAAM,CACP,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,UAAU,CAAC,MAAmC;QAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAA0B,2BAA2B,EAAE,MAAM,CAAC,CAAC;IAC3F,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Admin authentication for Genesis Mesh NA endpoints.
3
+ *
4
+ * The NA verifies requests via four HTTP headers:
5
+ * X-Admin-Key-Id — which operator key was used
6
+ * X-Admin-Signature — Ed25519(canonicalJson({body,key_id,nonce,timestamp}))
7
+ * X-Admin-Timestamp — ISO 8601 UTC timestamp
8
+ * X-Admin-Nonce — UUID v4 replay-protection token
9
+ *
10
+ * Canonical JSON matches Python json.dumps(..., sort_keys=True, separators=(",",":")):
11
+ * keys are recursively sorted, output is compact with no whitespace.
12
+ */
13
+ import { createPrivateKey, sign as cryptoSign, randomUUID } from 'node:crypto';
14
+ /** Recursively produce compact sorted JSON — stable across Python and Node.js. */
15
+ export function canonicalJson(value) {
16
+ if (value === null || typeof value !== 'object')
17
+ return JSON.stringify(value);
18
+ if (Array.isArray(value))
19
+ return '[' + value.map(canonicalJson).join(',') + ']';
20
+ const keys = Object.keys(value).sort();
21
+ const pairs = keys.map(k => `${JSON.stringify(k)}:${canonicalJson(value[k])}`);
22
+ return '{' + pairs.join(',') + '}';
23
+ }
24
+ /**
25
+ * PKCS8 DER prefix for an Ed25519 private key.
26
+ * Layout: SEQUENCE { INTEGER 0, SEQUENCE { OID 1.3.101.112 }, OCTET STRING { OCTET STRING <seed> } }
27
+ * Concatenate with the 32-byte seed to form a valid PKCS8 DER buffer.
28
+ */
29
+ const ED25519_PKCS8_PREFIX = Buffer.from('302e020100300506032b657004220420', 'hex');
30
+ /** Sign raw bytes with an Ed25519 seed (32-byte base64-encoded private key seed). */
31
+ export function signBytes(message, seedBase64) {
32
+ const seed = Buffer.from(seedBase64, 'base64');
33
+ const pkcs8 = Buffer.concat([ED25519_PKCS8_PREFIX, seed]);
34
+ const privateKey = createPrivateKey({ key: pkcs8, format: 'der', type: 'pkcs8' });
35
+ return cryptoSign(null, message, privateKey);
36
+ }
37
+ /** Build the four admin auth headers for a given request body. */
38
+ export function buildAdminHeaders(body, keyId, signingKeyBase64) {
39
+ const timestamp = new Date().toISOString();
40
+ const nonce = randomUUID();
41
+ const canonical = canonicalJson({ body, key_id: keyId, nonce, timestamp });
42
+ const sig = signBytes(Buffer.from(canonical, 'utf-8'), signingKeyBase64);
43
+ return {
44
+ 'X-Admin-Key-Id': keyId,
45
+ 'X-Admin-Signature': sig.toString('base64'),
46
+ 'X-Admin-Timestamp': timestamp,
47
+ 'X-Admin-Nonce': nonce,
48
+ };
49
+ }
50
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,IAAI,IAAI,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE/E,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAChF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,aAAa,CAAE,KAAiC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5G,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;AAEpF,qFAAqF;AACrF,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,UAAkB;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAClF,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC;AASD,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAC/B,IAAa,EACb,KAAa,EACb,gBAAwB;IAExB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACzE,OAAO;QACL,gBAAgB,EAAE,KAAK;QACvB,mBAAmB,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3C,mBAAmB,EAAE,SAAS;QAC9B,eAAe,EAAE,KAAK;KACvB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ export class BoundaryClient {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ /** Issue a signed boundary decision for a capability request (admin). */
7
+ decide(params) {
8
+ return this.http.adminPost('/admin/boundary/decide', params);
9
+ }
10
+ /** Verify a boundary decision signature (unauthenticated). */
11
+ verify(params) {
12
+ return this.http.publicPost('/boundary/verify', params);
13
+ }
14
+ }
15
+ //# sourceMappingURL=boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../src/boundary.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,yEAAyE;IACzE,MAAM,CAAC,MAAoB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAmB,wBAAwB,EAAE,MAAM,CAAC,CAAC;IACjF,CAAC;IAED,8DAA8D;IAC9D,MAAM,CAAC,MAA4B;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAuB,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * HTTP transport layer for the Genesis Mesh SDK.
3
+ * Handles request dispatch, response parsing, and error mapping.
4
+ * Admin-route authentication is delegated to auth.ts.
5
+ */
6
+ import { buildAdminHeaders } from './auth.js';
7
+ import { fromHttpError, NetworkError } from './errors.js';
8
+ export class HttpTransport {
9
+ baseUrl;
10
+ signingKeyBase64;
11
+ keyId;
12
+ timeout;
13
+ _fetch;
14
+ constructor(options) {
15
+ this.baseUrl = options.baseUrl.replace(/\/$/, '');
16
+ this.signingKeyBase64 = options.signingKeyBase64;
17
+ this.keyId = options.keyId ?? 'operator-local';
18
+ this.timeout = options.timeout ?? 10_000;
19
+ this._fetch = options.fetch ?? globalThis.fetch.bind(globalThis);
20
+ }
21
+ async adminPost(path, body) {
22
+ if (!this.signingKeyBase64) {
23
+ throw new Error('signingKeyBase64 is required for admin routes');
24
+ }
25
+ const adminHeaders = buildAdminHeaders(body, this.keyId, this.signingKeyBase64);
26
+ return this._post(path, body, adminHeaders);
27
+ }
28
+ async publicPost(path, body) {
29
+ return this._post(path, body, {});
30
+ }
31
+ async publicGet(path) {
32
+ const url = this.baseUrl + path;
33
+ let response;
34
+ try {
35
+ response = await this._fetch(url, {
36
+ method: 'GET',
37
+ signal: AbortSignal.timeout(this.timeout),
38
+ });
39
+ }
40
+ catch (err) {
41
+ throw new NetworkError(`GET ${path} failed: ${err.message}`);
42
+ }
43
+ return this._parse(response);
44
+ }
45
+ async _post(path, body, extraHeaders) {
46
+ const url = this.baseUrl + path;
47
+ let response;
48
+ try {
49
+ response = await this._fetch(url, {
50
+ method: 'POST',
51
+ headers: { 'Content-Type': 'application/json', ...extraHeaders },
52
+ body: JSON.stringify(body),
53
+ signal: AbortSignal.timeout(this.timeout),
54
+ });
55
+ }
56
+ catch (err) {
57
+ throw new NetworkError(`POST ${path} failed: ${err.message}`);
58
+ }
59
+ return this._parse(response);
60
+ }
61
+ async _parse(response) {
62
+ let data;
63
+ try {
64
+ data = await response.json();
65
+ }
66
+ catch {
67
+ throw new NetworkError(`Failed to parse response body (HTTP ${response.status})`);
68
+ }
69
+ if (!response.ok) {
70
+ throw fromHttpError(response.status, data);
71
+ }
72
+ return data;
73
+ }
74
+ }
75
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export class ConsensusClient {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ /** Cast a validator vote signed by the NA (admin). */
7
+ vote(params) {
8
+ return this.http.adminPost('/admin/consensus/vote', params);
9
+ }
10
+ /** Assemble a consensus proof from votes (admin). */
11
+ proof(params) {
12
+ return this.http.adminPost('/admin/consensus/proof', params);
13
+ }
14
+ /** Verify consensus proof signature and threshold (unauthenticated). */
15
+ verify(params) {
16
+ return this.http.publicPost('/consensus/verify', params);
17
+ }
18
+ }
19
+ //# sourceMappingURL=consensus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consensus.js","sourceRoot":"","sources":["../../src/consensus.ts"],"names":[],"mappings":"AA2BA,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,sDAAsD;IACtD,IAAI,CAAC,MAAkB;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAgB,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,MAA2B;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAiB,wBAAwB,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,MAA6B;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAwB,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAClF,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ export class DataUsageClient {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ /** Create and sign a data license policy (admin). */
7
+ createPolicy(params) {
8
+ return this.http.adminPost('/admin/data-usage/policy', params);
9
+ }
10
+ /** Create and sign a data access intent (admin). */
11
+ createIntent(params) {
12
+ return this.http.adminPost('/admin/data-usage/intent', params);
13
+ }
14
+ /** Get the currently active data license policy (unauthenticated). */
15
+ getPolicy() {
16
+ return this.http.publicGet('/data-usage/policy');
17
+ }
18
+ /** Verify a data access intent against a policy (unauthenticated). */
19
+ verify(params) {
20
+ return this.http.publicPost('/data-usage/verify', params);
21
+ }
22
+ }
23
+ //# sourceMappingURL=data_usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data_usage.js","sourceRoot":"","sources":["../../src/data_usage.ts"],"names":[],"mappings":"AA+BA,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,qDAAqD;IACrD,YAAY,CAAC,MAA0B;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAoB,0BAA0B,EAAE,MAAM,CAAC,CAAC;IACpF,CAAC;IAED,oDAAoD;IACpD,YAAY,CAAC,MAA0B;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAmB,0BAA0B,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC;IAED,sEAAsE;IACtE,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAoB,oBAAoB,CAAC,CAAC;IACtE,CAAC;IAED,sEAAsE;IACtE,MAAM,CAAC,MAA6B;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAwB,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ export class DisclosureClient {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ /** Commit to a set of capabilities under an agreement (admin). */
7
+ commit(params) {
8
+ return this.http.adminPost('/admin/disclosure/commit', params);
9
+ }
10
+ /** Issue a one-time nullifier for a proof (admin). */
11
+ nullifier(params) {
12
+ return this.http.adminPost('/admin/disclosure/nullifier', params);
13
+ }
14
+ /** Generate a Merkle membership proof (unauthenticated). */
15
+ prove(params) {
16
+ return this.http.publicPost('/disclosure/prove', params);
17
+ }
18
+ /** Verify a capability membership proof (unauthenticated). */
19
+ verify(params) {
20
+ return this.http.publicPost('/disclosure/verify', params);
21
+ }
22
+ }
23
+ //# sourceMappingURL=disclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosure.js","sourceRoot":"","sources":["../../src/disclosure.ts"],"names":[],"mappings":"AA+BA,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,kEAAkE;IAClE,MAAM,CAAC,MAAoB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAuB,0BAA0B,EAAE,MAAM,CAAC,CAAC;IACvF,CAAC;IAED,sDAAsD;IACtD,SAAS,CAAC,MAAuB;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAsB,6BAA6B,EAAE,MAAM,CAAC,CAAC;IACzF,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,MAAmB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAA4B,mBAAmB,EAAE,MAAM,CAAC,CAAC;IACtF,CAAC;IAED,8DAA8D;IAC9D,MAAM,CAAC,MAA8B;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAyB,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACpF,CAAC;CACF"}
@@ -0,0 +1,77 @@
1
+ /** Typed error classes mirroring the NA HTTP error surface. */
2
+ export class GenesisMeshError extends Error {
3
+ code;
4
+ status;
5
+ constructor(message, code, status) {
6
+ super(message);
7
+ this.name = 'GenesisMeshError';
8
+ this.code = code;
9
+ this.status = status;
10
+ Object.setPrototypeOf(this, new.target.prototype);
11
+ }
12
+ }
13
+ export class UnauthorizedError extends GenesisMeshError {
14
+ constructor(message = 'Unauthorized', code = 'unauthorized') {
15
+ super(message, code, 401);
16
+ this.name = 'UnauthorizedError';
17
+ }
18
+ }
19
+ export class ValidationError extends GenesisMeshError {
20
+ constructor(message, code = 'validation_error') {
21
+ super(message, code, 422);
22
+ this.name = 'ValidationError';
23
+ }
24
+ }
25
+ export class NotFoundError extends GenesisMeshError {
26
+ constructor(message, code = 'not_found') {
27
+ super(message, code, 404);
28
+ this.name = 'NotFoundError';
29
+ }
30
+ }
31
+ export class RateLimitError extends GenesisMeshError {
32
+ constructor(message = 'Rate limit exceeded', code = 'rate_limit_exceeded') {
33
+ super(message, code, 429);
34
+ this.name = 'RateLimitError';
35
+ }
36
+ }
37
+ export class NetworkError extends GenesisMeshError {
38
+ constructor(message, code = 'network_error') {
39
+ super(message, code, 0);
40
+ this.name = 'NetworkError';
41
+ }
42
+ }
43
+ export class BadRequestError extends GenesisMeshError {
44
+ constructor(message, code = 'bad_request') {
45
+ super(message, code, 400);
46
+ this.name = 'BadRequestError';
47
+ }
48
+ }
49
+ /** Maps an HTTP error response body to the appropriate typed error.
50
+ *
51
+ * Handles both flat format { error: "string", code: "..." }
52
+ * and nested format { error: { message: "...", code: "..." } }
53
+ * as produced by the Genesis Mesh NA.
54
+ */
55
+ export function fromHttpError(status, body) {
56
+ const errorField = body['error'];
57
+ let message;
58
+ let code;
59
+ if (typeof errorField === 'object' && errorField !== null) {
60
+ const nested = errorField;
61
+ message = String(nested['message'] ?? 'Unknown error');
62
+ code = String(nested['code'] ?? 'unknown');
63
+ }
64
+ else {
65
+ message = String(errorField ?? body['message'] ?? 'Unknown error');
66
+ code = String(body['code'] ?? 'unknown');
67
+ }
68
+ switch (status) {
69
+ case 400: return new BadRequestError(message, code);
70
+ case 401: return new UnauthorizedError(message, code);
71
+ case 404: return new NotFoundError(message, code);
72
+ case 422: return new ValidationError(message, code);
73
+ case 429: return new RateLimitError(message, code);
74
+ default: return new GenesisMeshError(message, code, status);
75
+ }
76
+ }
77
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export class EvidenceClient {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ /** Build and sign trust evidence from a trust decision (admin). */
7
+ build(params) {
8
+ return this.http.adminPost('/admin/trust-evidence', params);
9
+ }
10
+ /** Verify trust evidence signatures (unauthenticated). */
11
+ verify(params) {
12
+ return this.http.publicPost('/trust-evidence/verify', params);
13
+ }
14
+ }
15
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/evidence.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,mEAAmE;IACnE,KAAK,CAAC,MAA2B;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAgB,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC;IAED,0DAA0D;IAC1D,MAAM,CAAC,MAA4B;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAuB,wBAAwB,EAAE,MAAM,CAAC,CAAC;IACtF,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ import { HttpTransport } from './client.js';
2
+ import { AgreementClient } from './agreement.js';
3
+ import { BoundaryClient } from './boundary.js';
4
+ import { EvidenceClient } from './evidence.js';
5
+ import { AttestationClient } from './attestation.js';
6
+ import { DisclosureClient } from './disclosure.js';
7
+ import { ConsensusClient } from './consensus.js';
8
+ import { DataUsageClient } from './data_usage.js';
9
+ export class GenesisMeshClient {
10
+ agreement;
11
+ boundary;
12
+ evidence;
13
+ attestation;
14
+ disclosure;
15
+ consensus;
16
+ dataUsage;
17
+ constructor(options) {
18
+ const http = new HttpTransport(options);
19
+ this.agreement = new AgreementClient(http);
20
+ this.boundary = new BoundaryClient(http);
21
+ this.evidence = new EvidenceClient(http);
22
+ this.attestation = new AttestationClient(http);
23
+ this.disclosure = new DisclosureClient(http);
24
+ this.consensus = new ConsensusClient(http);
25
+ this.dataUsage = new DataUsageClient(http);
26
+ }
27
+ }
28
+ // Sub-client classes (for composition / dependency injection)
29
+ export { AgreementClient } from './agreement.js';
30
+ export { BoundaryClient } from './boundary.js';
31
+ export { EvidenceClient } from './evidence.js';
32
+ export { AttestationClient } from './attestation.js';
33
+ export { DisclosureClient } from './disclosure.js';
34
+ export { ConsensusClient } from './consensus.js';
35
+ export { DataUsageClient } from './data_usage.js';
36
+ // Transport
37
+ export { HttpTransport } from './client.js';
38
+ // Auth utilities (canonical JSON, admin header signing)
39
+ export { canonicalJson, signBytes, buildAdminHeaders } from './auth.js';
40
+ // Errors
41
+ export { GenesisMeshError, UnauthorizedError, ValidationError, NotFoundError, RateLimitError, NetworkError, BadRequestError, } from './errors.js';
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,OAAO,iBAAiB;IACnB,SAAS,CAAkB;IAC3B,QAAQ,CAAiB;IACzB,QAAQ,CAAiB;IACzB,WAAW,CAAoB;IAC/B,UAAU,CAAmB;IAC7B,SAAS,CAAkB;IAC3B,SAAS,CAAkB;IAEpC,YAAY,OAAsB;QAChC,MAAM,IAAI,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,GAAK,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAM,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAM,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAK,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAK,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,8DAA8D;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGxE,SAAS;AACT,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * TypeScript interfaces for all stable Genesis Mesh protocol models.
3
+ * Field names match the Python Pydantic models exactly — JSON serialization
4
+ * is snake_case throughout the HTTP API.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}