@dcdr/contracts 1.9.6

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 (69) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +411 -0
  3. package/dist/capabilities.contract.d.ts +69 -0
  4. package/dist/capabilities.contract.d.ts.map +1 -0
  5. package/dist/capabilities.contract.js +126 -0
  6. package/dist/control.contract.d.ts +39 -0
  7. package/dist/control.contract.d.ts.map +1 -0
  8. package/dist/control.contract.js +2 -0
  9. package/dist/credentials.contract.d.ts +37 -0
  10. package/dist/credentials.contract.d.ts.map +1 -0
  11. package/dist/credentials.contract.js +15 -0
  12. package/dist/entitlements.contract.d.ts +107 -0
  13. package/dist/entitlements.contract.d.ts.map +1 -0
  14. package/dist/entitlements.contract.js +11 -0
  15. package/dist/errors.contract.d.ts +47 -0
  16. package/dist/errors.contract.d.ts.map +1 -0
  17. package/dist/errors.contract.js +48 -0
  18. package/dist/execution.contract.d.ts +240 -0
  19. package/dist/execution.contract.d.ts.map +1 -0
  20. package/dist/execution.contract.js +22 -0
  21. package/dist/http.contract.d.ts +20 -0
  22. package/dist/http.contract.d.ts.map +1 -0
  23. package/dist/http.contract.js +8 -0
  24. package/dist/implementations.contract.d.ts +120 -0
  25. package/dist/implementations.contract.d.ts.map +1 -0
  26. package/dist/implementations.contract.js +2 -0
  27. package/dist/index.d.ts +22 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +37 -0
  30. package/dist/intent.contract.d.ts +137 -0
  31. package/dist/intent.contract.d.ts.map +1 -0
  32. package/dist/intent.contract.js +76 -0
  33. package/dist/logs.contract.d.ts +10 -0
  34. package/dist/logs.contract.d.ts.map +1 -0
  35. package/dist/logs.contract.js +2 -0
  36. package/dist/messages.contract.d.ts +16 -0
  37. package/dist/messages.contract.d.ts.map +1 -0
  38. package/dist/messages.contract.js +2 -0
  39. package/dist/policies.contract.d.ts +253 -0
  40. package/dist/policies.contract.d.ts.map +1 -0
  41. package/dist/policies.contract.js +283 -0
  42. package/dist/prompt-variable-schema.contract.d.ts +75 -0
  43. package/dist/prompt-variable-schema.contract.d.ts.map +1 -0
  44. package/dist/prompt-variable-schema.contract.js +572 -0
  45. package/dist/prompts.contract.d.ts +97 -0
  46. package/dist/prompts.contract.d.ts.map +1 -0
  47. package/dist/prompts.contract.js +87 -0
  48. package/dist/provider.contract.d.ts +477 -0
  49. package/dist/provider.contract.d.ts.map +1 -0
  50. package/dist/provider.contract.js +3310 -0
  51. package/dist/registry.stats.contract.d.ts +39 -0
  52. package/dist/registry.stats.contract.d.ts.map +1 -0
  53. package/dist/registry.stats.contract.js +9 -0
  54. package/dist/runtime.client.d.ts +362 -0
  55. package/dist/runtime.client.d.ts.map +1 -0
  56. package/dist/runtime.client.js +545 -0
  57. package/dist/service-tokens.contract.d.ts +29 -0
  58. package/dist/service-tokens.contract.d.ts.map +1 -0
  59. package/dist/service-tokens.contract.js +10 -0
  60. package/dist/session.contract.d.ts +51 -0
  61. package/dist/session.contract.d.ts.map +1 -0
  62. package/dist/session.contract.js +187 -0
  63. package/dist/subscription.contract.d.ts +37 -0
  64. package/dist/subscription.contract.d.ts.map +1 -0
  65. package/dist/subscription.contract.js +45 -0
  66. package/dist/utils.contract.d.ts +21 -0
  67. package/dist/utils.contract.d.ts.map +1 -0
  68. package/dist/utils.contract.js +79 -0
  69. package/package.json +57 -0
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DcdrSessionToken = void 0;
4
+ /**
5
+ * Token format:
6
+ * token = base64url(JSON(payload)) + "." + base64url(HMAC_SHA256(secret, payloadB64url))
7
+ */
8
+ class DcdrSessionToken {
9
+ static sign(deps, payload, secret) {
10
+ this.assertValidPayload(payload);
11
+ const payloadJson = JSON.stringify(payload);
12
+ const payloadB64url = base64urlEncode(utf8ToBytes(payloadJson));
13
+ const sigB64 = deps
14
+ .createHmac("sha256", secret)
15
+ .update(payloadB64url)
16
+ .digest("base64");
17
+ const sigB64url = base64ToBase64url(sigB64);
18
+ return `${payloadB64url}.${sigB64url}`;
19
+ }
20
+ static verify(deps, token, secrets, opts) {
21
+ const secretsArr = Array.isArray(secrets) ? secrets : [secrets];
22
+ const clockSkewMilliseconds = (opts?.clockSkewSeconds ?? 30) * 1000;
23
+ if (!token || typeof token !== "string")
24
+ throw new Error("TOKEN_MISSING");
25
+ const parts = token.split(".");
26
+ if (parts.length !== 2)
27
+ throw new Error("TOKEN_FORMAT_INVALID");
28
+ const [payloadB64url, sigB64url] = parts;
29
+ if (!payloadB64url || !sigB64url)
30
+ throw new Error("TOKEN_FORMAT_INVALID");
31
+ const sigB64 = base64urlToBase64(sigB64url);
32
+ // Verify signature against any allowed secret (rotation)
33
+ let ok = false;
34
+ for (const secret of secretsArr) {
35
+ const expectedB64 = deps
36
+ .createHmac("sha256", secret)
37
+ .update(payloadB64url)
38
+ .digest("base64");
39
+ if (safeEqualBase64(deps, expectedB64, sigB64)) {
40
+ ok = true;
41
+ break;
42
+ }
43
+ }
44
+ if (!ok)
45
+ throw new Error("TOKEN_SIGNATURE_INVALID");
46
+ // Decode payload
47
+ const payloadJson = bytesToUtf8(base64urlDecodeToBytes(payloadB64url));
48
+ const payload = normalizePayloadTimes(JSON.parse(payloadJson));
49
+ this.assertValidPayload(payload);
50
+ // Time checks (unix milliseconds)
51
+ const now = Date.now();
52
+ if (opts?.revokeBeforeIat && payload.iat < opts.revokeBeforeIat) {
53
+ throw new Error("TOKEN_REVOKED");
54
+ }
55
+ if (payload.iat > now + clockSkewMilliseconds) {
56
+ throw new Error("TOKEN_IAT_IN_FUTURE");
57
+ }
58
+ if (payload.exp < now - clockSkewMilliseconds) {
59
+ throw new Error("TOKEN_EXPIRED");
60
+ }
61
+ return payload;
62
+ }
63
+ static decodeUnverified(token) {
64
+ const [payloadB64url] = (token ?? "").split(".");
65
+ if (!payloadB64url)
66
+ throw new Error("TOKEN_FORMAT_INVALID");
67
+ const payloadJson = bytesToUtf8(base64urlDecodeToBytes(payloadB64url));
68
+ const payload = normalizePayloadTimes(JSON.parse(payloadJson));
69
+ this.assertValidPayload(payload);
70
+ return payload;
71
+ }
72
+ static assertValidPayload(p) {
73
+ if (!p || typeof p !== "object")
74
+ throw new Error("PAYLOAD_INVALID");
75
+ if (!p.id || typeof p.id !== "string")
76
+ throw new Error("PAYLOAD_ID_INVALID");
77
+ if (!p.aid || typeof p.aid !== "string")
78
+ throw new Error("PAYLOAD_AID_INVALID");
79
+ if (typeof p.iat !== "number" || !Number.isFinite(p.iat))
80
+ throw new Error("PAYLOAD_IAT_INVALID");
81
+ if (typeof p.exp !== "number" || !Number.isFinite(p.exp))
82
+ throw new Error("PAYLOAD_EXP_INVALID");
83
+ if (!Array.isArray(p.scopes) ||
84
+ p.scopes.some((s) => typeof s !== "string" || !s)) {
85
+ throw new Error("PAYLOAD_SCOPES_INVALID");
86
+ }
87
+ }
88
+ }
89
+ exports.DcdrSessionToken = DcdrSessionToken;
90
+ function normalizePayloadTimes(p) {
91
+ // Accept legacy unix seconds timestamps: heuristic based on magnitude.
92
+ // - unix seconds in 2026 ~ 1.7e9
93
+ // - unix milliseconds in 2026 ~ 1.7e12
94
+ const normalize = (n) => {
95
+ if (!Number.isFinite(n))
96
+ return n;
97
+ if (n < 100_000_000_000)
98
+ return Math.floor(n * 1000); // likely seconds
99
+ return Math.floor(n); // milliseconds
100
+ };
101
+ if (p && typeof p === "object") {
102
+ p.iat = normalize(p.iat);
103
+ p.exp = normalize(p.exp);
104
+ }
105
+ return p;
106
+ }
107
+ // -------------------------------------------------------------------------------------
108
+ // Internal helpers (no direct "crypto" import)
109
+ // -------------------------------------------------------------------------------------
110
+ function safeEqualBase64(deps, aB64, bB64) {
111
+ if (aB64.length !== bB64.length)
112
+ return false;
113
+ if (deps.timingSafeEqual) {
114
+ const a = base64DecodeToBytes(aB64);
115
+ const b = base64DecodeToBytes(bB64);
116
+ if (a.length !== b.length)
117
+ return false;
118
+ return deps.timingSafeEqual(a, b);
119
+ }
120
+ // Fallback: normal compare (OK for internal usage)
121
+ return aB64 === bB64;
122
+ }
123
+ function base64ToBase64url(b64) {
124
+ return b64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
125
+ }
126
+ function base64urlToBase64(b64url) {
127
+ const b64 = b64url.replace(/-/g, "+").replace(/_/g, "/");
128
+ const pad = (4 - (b64.length % 4)) % 4;
129
+ return b64 + "=".repeat(pad);
130
+ }
131
+ function base64urlEncode(bytes) {
132
+ return base64ToBase64url(base64Encode(bytes));
133
+ }
134
+ function base64urlDecodeToBytes(b64url) {
135
+ return base64DecodeToBytes(base64urlToBase64(b64url));
136
+ }
137
+ function base64Encode(bytes) {
138
+ // Node runtime (dynamic access avoids bundler static detection)
139
+ const g = globalThis;
140
+ if (g.Buffer && typeof g.Buffer.from === "function") {
141
+ return g.Buffer.from(bytes).toString("base64");
142
+ }
143
+ // Browser fallback
144
+ let bin = "";
145
+ for (let i = 0; i < bytes.length; i++)
146
+ bin += String.fromCharCode(bytes[i]);
147
+ // eslint-disable-next-line no-undef
148
+ return btoa(bin);
149
+ }
150
+ function base64DecodeToBytes(b64) {
151
+ // Node runtime (dynamic access avoids bundler static detection)
152
+ const g = globalThis;
153
+ if (g.Buffer && typeof g.Buffer.from === "function") {
154
+ return new Uint8Array(g.Buffer.from(b64, "base64"));
155
+ }
156
+ // Browser fallback
157
+ // eslint-disable-next-line no-undef
158
+ const bin = atob(b64);
159
+ const out = new Uint8Array(bin.length);
160
+ for (let i = 0; i < bin.length; i++)
161
+ out[i] = bin.charCodeAt(i);
162
+ return out;
163
+ }
164
+ function utf8ToBytes(s) {
165
+ // Prefer standard API first (works in modern Node and browsers)
166
+ // eslint-disable-next-line no-undef
167
+ if (typeof TextEncoder !== "undefined")
168
+ return new TextEncoder().encode(s);
169
+ // Node fallback without referencing Buffer symbol directly
170
+ const g = globalThis;
171
+ if (g.Buffer && typeof g.Buffer.from === "function") {
172
+ return new Uint8Array(g.Buffer.from(s, "utf8"));
173
+ }
174
+ throw new Error("UTF8_ENCODER_UNAVAILABLE");
175
+ }
176
+ function bytesToUtf8(bytes) {
177
+ // Prefer standard API first (works in modern Node and browsers)
178
+ // eslint-disable-next-line no-undef
179
+ if (typeof TextDecoder !== "undefined")
180
+ return new TextDecoder("utf-8").decode(bytes);
181
+ // Node fallback without referencing Buffer symbol directly
182
+ const g = globalThis;
183
+ if (g.Buffer && typeof g.Buffer.from === "function") {
184
+ return g.Buffer.from(bytes).toString("utf8");
185
+ }
186
+ throw new Error("UTF8_DECODER_UNAVAILABLE");
187
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Subscription/contract status for customer entitlements.
3
+ *
4
+ * Notes
5
+ * - Kept in contracts to avoid scattering status lists across services.
6
+ * - This aligns with backend contract lifecycle, but uses a generic name to reduce collisions.
7
+ */
8
+ export declare enum SubscriptionStatus {
9
+ DRAFT = "DRAFT",
10
+ TRIAL = "TRIAL",
11
+ ACTIVE = "ACTIVE",
12
+ ENDED = "ENDED",
13
+ SUSPENDED = "SUSPENDED",
14
+ CANCELED = "CANCELED"
15
+ }
16
+ /**
17
+ * Centralized policy helpers for {@link SubscriptionStatus}.
18
+ */
19
+ export declare class SubscriptionStatusPolicy {
20
+ /**
21
+ * Returns the statuses that are considered valid for a contract to exist for downstream consumers.
22
+ *
23
+ * Notes
24
+ * - Some surfaces (e.g. BI) may allow ENDED contracts to remain visible.
25
+ * - Keep this centralized to avoid scattering status lists across the codebase.
26
+ */
27
+ static validStatuses(): SubscriptionStatus[];
28
+ /**
29
+ * Returns the statuses that are considered valid to show *current* data.
30
+ *
31
+ * Notes
32
+ * - This excludes ENDED/SUSPENDED/CANCELED.
33
+ * - Keep this centralized to avoid scattering status lists across the codebase.
34
+ */
35
+ static validStatusesToShowCurrentData(): SubscriptionStatus[];
36
+ }
37
+ //# sourceMappingURL=subscription.contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription.contract.d.ts","sourceRoot":"","sources":["../src/subscription.contract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,oBAAY,kBAAkB;IAC5B,KAAK,UAAU;IACf,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,qBAAa,wBAAwB;IACnC;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,IAAI,kBAAkB,EAAE;IAI5C;;;;;;OAMG;IACH,MAAM,CAAC,8BAA8B,IAAI,kBAAkB,EAAE;CAG9D"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SubscriptionStatusPolicy = exports.SubscriptionStatus = void 0;
4
+ /**
5
+ * Subscription/contract status for customer entitlements.
6
+ *
7
+ * Notes
8
+ * - Kept in contracts to avoid scattering status lists across services.
9
+ * - This aligns with backend contract lifecycle, but uses a generic name to reduce collisions.
10
+ */
11
+ var SubscriptionStatus;
12
+ (function (SubscriptionStatus) {
13
+ SubscriptionStatus["DRAFT"] = "DRAFT";
14
+ SubscriptionStatus["TRIAL"] = "TRIAL";
15
+ SubscriptionStatus["ACTIVE"] = "ACTIVE";
16
+ SubscriptionStatus["ENDED"] = "ENDED";
17
+ SubscriptionStatus["SUSPENDED"] = "SUSPENDED";
18
+ SubscriptionStatus["CANCELED"] = "CANCELED";
19
+ })(SubscriptionStatus || (exports.SubscriptionStatus = SubscriptionStatus = {}));
20
+ /**
21
+ * Centralized policy helpers for {@link SubscriptionStatus}.
22
+ */
23
+ class SubscriptionStatusPolicy {
24
+ /**
25
+ * Returns the statuses that are considered valid for a contract to exist for downstream consumers.
26
+ *
27
+ * Notes
28
+ * - Some surfaces (e.g. BI) may allow ENDED contracts to remain visible.
29
+ * - Keep this centralized to avoid scattering status lists across the codebase.
30
+ */
31
+ static validStatuses() {
32
+ return [SubscriptionStatus.ACTIVE, SubscriptionStatus.TRIAL, SubscriptionStatus.ENDED];
33
+ }
34
+ /**
35
+ * Returns the statuses that are considered valid to show *current* data.
36
+ *
37
+ * Notes
38
+ * - This excludes ENDED/SUSPENDED/CANCELED.
39
+ * - Keep this centralized to avoid scattering status lists across the codebase.
40
+ */
41
+ static validStatusesToShowCurrentData() {
42
+ return [SubscriptionStatus.ACTIVE, SubscriptionStatus.TRIAL];
43
+ }
44
+ }
45
+ exports.SubscriptionStatusPolicy = SubscriptionStatusPolicy;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared utilities for `@dcdr/contracts`.
3
+ */
4
+ /**
5
+ * Stable JSON stringify with deterministic object key ordering.
6
+ *
7
+ * Why
8
+ * - Used to compute semantic hashes over JSON payloads (e.g. registries) in a
9
+ * way that is invariant to JavaScript object insertion order.
10
+ * - Arrays preserve order.
11
+ * - Object keys are sorted lexicographically (recursively).
12
+ *
13
+ * Semantics (intentionally mirrors JSON.stringify behavior where relevant)
14
+ * - Object properties with values `undefined`, functions, or symbols are omitted.
15
+ * - Array slots with `undefined`, functions, or symbols become `null`.
16
+ * - `bigint` is serialized as a JSON string.
17
+ * - `toJSON()` is honored.
18
+ * - Circular references throw.
19
+ */
20
+ export declare function stableJsonStringify(value: unknown): string;
21
+ //# sourceMappingURL=utils.contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.contract.d.ts","sourceRoot":"","sources":["../src/utils.contract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAmE1D"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * Shared utilities for `@dcdr/contracts`.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.stableJsonStringify = stableJsonStringify;
7
+ /**
8
+ * Stable JSON stringify with deterministic object key ordering.
9
+ *
10
+ * Why
11
+ * - Used to compute semantic hashes over JSON payloads (e.g. registries) in a
12
+ * way that is invariant to JavaScript object insertion order.
13
+ * - Arrays preserve order.
14
+ * - Object keys are sorted lexicographically (recursively).
15
+ *
16
+ * Semantics (intentionally mirrors JSON.stringify behavior where relevant)
17
+ * - Object properties with values `undefined`, functions, or symbols are omitted.
18
+ * - Array slots with `undefined`, functions, or symbols become `null`.
19
+ * - `bigint` is serialized as a JSON string.
20
+ * - `toJSON()` is honored.
21
+ * - Circular references throw.
22
+ */
23
+ function stableJsonStringify(value) {
24
+ const seen = new Set();
25
+ const walk = (v) => {
26
+ if (v === null)
27
+ return "null";
28
+ const t = typeof v;
29
+ if (t === "string" || t === "number" || t === "boolean") {
30
+ return JSON.stringify(v);
31
+ }
32
+ if (t === "bigint")
33
+ return JSON.stringify(v.toString());
34
+ if (t === "undefined" || t === "function" || t === "symbol") {
35
+ // Match JSON.stringify behavior for array slots.
36
+ return "null";
37
+ }
38
+ if (typeof v === "object") {
39
+ const maybeToJson = v.toJSON;
40
+ if (typeof maybeToJson === "function") {
41
+ return walk(maybeToJson.call(v));
42
+ }
43
+ }
44
+ if (Array.isArray(v)) {
45
+ if (seen.has(v)) {
46
+ throw new Error("stableJsonStringify: circular reference");
47
+ }
48
+ // Arrays are objects in JS; safe to track for circular refs.
49
+ seen.add(v);
50
+ const out = `[${v.map((item) => walk(item)).join(",")}]`;
51
+ seen.delete(v);
52
+ return out;
53
+ }
54
+ if (t === "object") {
55
+ if (seen.has(v)) {
56
+ throw new Error("stableJsonStringify: circular reference");
57
+ }
58
+ seen.add(v);
59
+ const obj = v;
60
+ const keys = Object.keys(obj).sort();
61
+ const parts = [];
62
+ for (const key of keys) {
63
+ const next = obj[key];
64
+ const nextType = typeof next;
65
+ if (nextType === "undefined" ||
66
+ nextType === "function" ||
67
+ nextType === "symbol") {
68
+ continue;
69
+ }
70
+ parts.push(`${JSON.stringify(key)}:${walk(next)}`);
71
+ }
72
+ const out = `{${parts.join(",")}}`;
73
+ seen.delete(v);
74
+ return out;
75
+ }
76
+ return JSON.stringify(v);
77
+ };
78
+ return walk(value);
79
+ }
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@dcdr/contracts",
3
+ "version": "1.9.6",
4
+ "description": "Interfaces for Dcdr Platform",
5
+ "private": false,
6
+ "license": "Apache-2.0",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "prepare": "npm run build",
14
+ "check": "tsc --noEmit",
15
+ "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
16
+ "build": "npm run clean && tsc -p tsconfig.json",
17
+ "test": "npm run build && jest",
18
+ "test:ci": "npm run build && jest --runInBand"
19
+ },
20
+ "devDependencies": {
21
+ "@types/jest": "^30.0.0",
22
+ "jest": "^30.3.0",
23
+ "jest-junit": "^16.0.0",
24
+ "ts-jest": "^29.4.9",
25
+ "typescript": "^5.7.2"
26
+ },
27
+ "volta": {
28
+ "node": "22.22.0"
29
+ },
30
+ "exports": {
31
+ ".": "./dist/index.js",
32
+ "./runtime.client": "./dist/runtime.client.js",
33
+ "./capabilities.contract": "./dist/capabilities.contract.js",
34
+ "./control.contract": "./dist/control.contract.js",
35
+ "./credentials.contract": "./dist/credentials.contract.js",
36
+ "./subscription.contract": "./dist/subscription.contract.js",
37
+ "./utils.contract": "./dist/utils.contract.js",
38
+ "./prompt-variable-schema.contract": "./dist/prompt-variable-schema.contract.js",
39
+ "./registry.stats.contract": "./dist/registry.stats.contract.js",
40
+ "./http.contract": "./dist/http.contract.js",
41
+ "./entitlements.contract": "./dist/entitlements.contract.js",
42
+ "./errors.contract": "./dist/errors.contract.js",
43
+ "./execution.contract": "./dist/execution.contract.js",
44
+ "./implementations.contract": "./dist/implementations.contract.js",
45
+ "./intent.contract": "./dist/intent.contract.js",
46
+ "./logs.contract": "./dist/logs.contract.js",
47
+ "./messages.contract": "./dist/messages.contract.js",
48
+ "./policies.contract": "./dist/policies.contract.js",
49
+ "./prompts.contract": "./dist/prompts.contract.js",
50
+ "./provider.contract": "./dist/provider.contract.js",
51
+ "./service-tokens.contract": "./dist/service-tokens.contract.js",
52
+ "./session.contract": "./dist/session.contract.js"
53
+ },
54
+ "dependencies": {
55
+ "class-validator": "^0.15.1"
56
+ }
57
+ }