zklicensing 0.1.0-beta.2 → 0.1.0-beta.4

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 (173) hide show
  1. package/README.md +335 -97
  2. package/build/appsLookup.d.ts +14 -0
  3. package/build/appsLookup.d.ts.map +1 -0
  4. package/build/appsLookup.js +12 -0
  5. package/build/appsLookup.js.map +1 -0
  6. package/build/archiveBootstrap.d.ts +15 -1
  7. package/build/archiveBootstrap.d.ts.map +1 -0
  8. package/build/archiveBootstrap.js +62 -9
  9. package/build/archiveBootstrap.js.map +1 -0
  10. package/build/bindClient.d.ts +51 -0
  11. package/build/bindClient.d.ts.map +1 -0
  12. package/build/bindClient.js +115 -0
  13. package/build/bindClient.js.map +1 -0
  14. package/build/buyClient.d.ts +10 -3
  15. package/build/buyClient.d.ts.map +1 -0
  16. package/build/buyClient.js +33 -15
  17. package/build/buyClient.js.map +1 -0
  18. package/build/contractInterface.d.ts +11 -5
  19. package/build/contractInterface.d.ts.map +1 -0
  20. package/build/contractInterface.js +82 -17
  21. package/build/contractInterface.js.map +1 -0
  22. package/build/countryStats.d.ts +6 -1
  23. package/build/countryStats.d.ts.map +1 -0
  24. package/build/countryStats.js +33 -9
  25. package/build/countryStats.js.map +1 -0
  26. package/build/deployClient.d.ts.map +1 -0
  27. package/build/deployClient.js +1 -1
  28. package/build/deployClient.js.map +1 -0
  29. package/build/deviceIdentity.d.ts +68 -0
  30. package/build/deviceIdentity.d.ts.map +1 -0
  31. package/build/deviceIdentity.js +209 -0
  32. package/build/deviceIdentity.js.map +1 -0
  33. package/build/freezeClient.d.ts.map +1 -0
  34. package/build/freezeClient.js +1 -1
  35. package/build/freezeClient.js.map +1 -0
  36. package/build/generationClient.d.ts +1 -0
  37. package/build/generationClient.d.ts.map +1 -0
  38. package/build/generationClient.js +2 -2
  39. package/build/generationClient.js.map +1 -0
  40. package/build/index.d.ts +27 -37
  41. package/build/index.d.ts.map +1 -0
  42. package/build/index.js +85 -116
  43. package/build/index.js.map +1 -0
  44. package/build/licenseLeaf.d.ts +76 -0
  45. package/build/licenseLeaf.d.ts.map +1 -0
  46. package/build/licenseLeaf.js +189 -0
  47. package/build/licenseLeaf.js.map +1 -0
  48. package/build/licenseRecord.d.ts +20 -1
  49. package/build/licenseRecord.d.ts.map +1 -0
  50. package/build/licenseRecord.js +1 -1
  51. package/build/licenseRecord.js.map +1 -0
  52. package/build/licenseStore.d.ts +17 -2
  53. package/build/licenseStore.d.ts.map +1 -0
  54. package/build/licenseStore.js +167 -7
  55. package/build/licenseStore.js.map +1 -0
  56. package/build/manifestVerify.d.ts.map +1 -0
  57. package/build/manifestVerify.js +8 -3
  58. package/build/manifestVerify.js.map +1 -0
  59. package/build/migrateClient.d.ts +6 -21
  60. package/build/migrateClient.d.ts.map +1 -0
  61. package/build/migrateClient.js +30 -17
  62. package/build/migrateClient.js.map +1 -0
  63. package/build/onChainRoot.d.ts +67 -0
  64. package/build/onChainRoot.d.ts.map +1 -0
  65. package/build/onChainRoot.js +87 -0
  66. package/build/onChainRoot.js.map +1 -0
  67. package/build/ownershipLicenseHash.d.ts +25 -0
  68. package/build/ownershipLicenseHash.d.ts.map +1 -0
  69. package/build/ownershipLicenseHash.js +29 -0
  70. package/build/ownershipLicenseHash.js.map +1 -0
  71. package/build/ownershipSignature.d.ts +122 -0
  72. package/build/ownershipSignature.d.ts.map +1 -0
  73. package/build/ownershipSignature.js +244 -0
  74. package/build/ownershipSignature.js.map +1 -0
  75. package/build/proveErrors.d.ts +35 -0
  76. package/build/proveErrors.d.ts.map +1 -0
  77. package/build/proveErrors.js +49 -0
  78. package/build/proveErrors.js.map +1 -0
  79. package/build/refundClient.d.ts +2 -11
  80. package/build/refundClient.d.ts.map +1 -0
  81. package/build/refundClient.js +35 -17
  82. package/build/refundClient.js.map +1 -0
  83. package/build/renewClient.d.ts +4 -1
  84. package/build/renewClient.d.ts.map +1 -0
  85. package/build/renewClient.js +11 -4
  86. package/build/renewClient.js.map +1 -0
  87. package/build/seatName.d.ts +8 -0
  88. package/build/seatName.d.ts.map +1 -0
  89. package/build/seatName.js +136 -0
  90. package/build/seatName.js.map +1 -0
  91. package/build/statsClient.d.ts +47 -4
  92. package/build/statsClient.d.ts.map +1 -0
  93. package/build/statsClient.js +44 -5
  94. package/build/statsClient.js.map +1 -0
  95. package/build/trustAnchorVerify.d.ts +48 -0
  96. package/build/trustAnchorVerify.d.ts.map +1 -0
  97. package/build/trustAnchorVerify.js +431 -0
  98. package/build/trustAnchorVerify.js.map +1 -0
  99. package/build/trustAnchorVerifyCli.d.ts +35 -0
  100. package/build/trustAnchorVerifyCli.d.ts.map +1 -0
  101. package/build/trustAnchorVerifyCli.js +177 -0
  102. package/build/trustAnchorVerifyCli.js.map +1 -0
  103. package/build/txBroadcastClient.d.ts +26 -0
  104. package/build/txBroadcastClient.d.ts.map +1 -0
  105. package/build/txBroadcastClient.js +20 -0
  106. package/build/txBroadcastClient.js.map +1 -0
  107. package/build/unbindClient.d.ts +56 -0
  108. package/build/unbindClient.d.ts.map +1 -0
  109. package/build/unbindClient.js +113 -0
  110. package/build/unbindClient.js.map +1 -0
  111. package/build/vendorAccountClient.d.ts +56 -0
  112. package/build/vendorAccountClient.d.ts.map +1 -0
  113. package/build/vendorAccountClient.js +47 -0
  114. package/build/vendorAccountClient.js.map +1 -0
  115. package/build/verifyCore.d.ts +1 -1
  116. package/build/verifyCore.d.ts.map +1 -0
  117. package/build/verifyCore.js +11 -4
  118. package/build/verifyCore.js.map +1 -0
  119. package/build/verifyOffline.d.ts +85 -0
  120. package/build/verifyOffline.d.ts.map +1 -0
  121. package/build/verifyOffline.js +139 -0
  122. package/build/verifyOffline.js.map +1 -0
  123. package/build/verifyService.d.ts.map +1 -0
  124. package/build/verifyService.js +582 -455
  125. package/build/verifyService.js.map +1 -0
  126. package/build/verifyWithAncestors.d.ts +18 -0
  127. package/build/verifyWithAncestors.d.ts.map +1 -0
  128. package/build/verifyWithAncestors.js +119 -0
  129. package/build/verifyWithAncestors.js.map +1 -0
  130. package/build/zipToState.d.ts +2 -0
  131. package/build/zipToState.d.ts.map +1 -0
  132. package/build/zipToState.js +94 -0
  133. package/build/zipToState.js.map +1 -0
  134. package/package.json +57 -13
  135. package/src/appsLookup.ts +48 -0
  136. package/src/archiveBootstrap.ts +342 -0
  137. package/src/bindClient.ts +175 -0
  138. package/src/buyClient.ts +304 -0
  139. package/src/contractInterface.d.ts +61 -0
  140. package/src/contractInterface.ts +313 -0
  141. package/src/countryStats.ts +171 -0
  142. package/src/deployClient.ts +388 -0
  143. package/src/deviceIdentity.ts +249 -0
  144. package/src/freezeClient.ts +117 -0
  145. package/src/generationClient.ts +165 -0
  146. package/src/index.ts +329 -0
  147. package/src/licenseLeaf.ts +221 -0
  148. package/src/licenseRecord.ts +108 -0
  149. package/src/licenseStore.ts +538 -0
  150. package/src/manifestVerify.ts +111 -0
  151. package/src/migrateClient.ts +84 -0
  152. package/src/onChainRoot.ts +107 -0
  153. package/src/ownershipLicenseHash.ts +31 -0
  154. package/src/ownershipSignature.ts +354 -0
  155. package/src/proveErrors.ts +70 -0
  156. package/src/refundClient.ts +158 -0
  157. package/src/renewClient.ts +214 -0
  158. package/src/seatName.ts +165 -0
  159. package/src/statsClient.ts +235 -0
  160. package/src/trustAnchorVerify.ts +548 -0
  161. package/src/trustAnchorVerifyCli.ts +179 -0
  162. package/src/txBroadcastClient.ts +48 -0
  163. package/src/unbindClient.ts +149 -0
  164. package/src/vendorAccountClient.ts +110 -0
  165. package/src/verifyCore.ts +92 -0
  166. package/src/verifyOffline.ts +212 -0
  167. package/src/verifyService.ts +969 -0
  168. package/src/verifyWithAncestors.ts +153 -0
  169. package/src/zipToState.ts +94 -0
  170. package/build/licenseProof.d.ts +0 -26
  171. package/build/licenseProof.js +0 -41
  172. package/build/ownership.d.ts +0 -34
  173. package/build/ownership.js +0 -147
@@ -0,0 +1,209 @@
1
+ // Copyright (c) 2025-2026 zkLicensing project developers
2
+ // SPDX-License-Identifier: BUSL-1.1
3
+ /**
4
+ * deviceIdentity.ts
5
+ *
6
+ * Per-install Pallas Schnorr keypair used to identify a device to the
7
+ * non-custodial binding flow. `getOrCreateDeviceIdentity(storageKey)`
8
+ * returns a stable keypair for the caller's storage key: created on
9
+ * first call, loaded verbatim on every subsequent call.
10
+ *
11
+ * The `deviceCommitment` this module exposes matches the on-chain
12
+ * `occupied[i]` field shape written by `LicensingApp.bind()` — it's
13
+ * `Poseidon([pk.x, pk.isOdd.toField()])` over the device's Pallas
14
+ * pubkey (see `ownerPubKeyHash` in ./licenseLeaf.ts for the identical
15
+ * shape applied to the ownership pubkey). Callers pass the commitment
16
+ * to `proveBind` and to the ownership signature; the raw device pubkey
17
+ * itself never crosses the wire.
18
+ *
19
+ * Storage tradeoffs (documented up front — the plan's original
20
+ * assumption was WebCrypto extractable=false, which only applies to
21
+ * WebCrypto-native primitives):
22
+ *
23
+ * Browser path — IndexedDB.
24
+ * Pallas is not a WebCrypto primitive, so we cannot store the
25
+ * private key as a non-extractable CryptoKey. The private key is
26
+ * persisted as its Mina canonical base58 encoding. An adversary
27
+ * with access to the browser profile (malware running as the user,
28
+ * evil browser extension) can read it. This matches the trust
29
+ * model of every other browser-persisted secret today (bearer
30
+ * cookies, IndexedDB tokens); binding to a fresh device after
31
+ * compromise is a keypair regen + one on-chain bind — no funds
32
+ * at risk, only slot churn. Users who want stronger storage can
33
+ * wipe the storageKey between sessions and re-bind on demand.
34
+ *
35
+ * Node / Electron path — keytar (OS keychain).
36
+ * `keytar` is loaded lazily and marked as an optional peer
37
+ * dependency in package.json so the browser bundle isn't dragged
38
+ * into installing native bindings it can't use. If keytar is
39
+ * unavailable at runtime, the SDK throws with a clear message
40
+ * rather than falling back to plaintext-on-disk.
41
+ *
42
+ * The keypair is Pallas-scalar-random, NOT passphrase-derived — the
43
+ * device identity is meant to survive a passphrase reset (the user
44
+ * can re-derive their ownership key from the passphrase, then unbind
45
+ * / rebind existing device slots without re-installing the app).
46
+ */
47
+ import { PrivateKey, Poseidon } from 'o1js';
48
+ // ── Storage key namespacing ───────────────────────────────────────
49
+ // All device identities live under this shared prefix in whatever
50
+ // backing store is chosen. Callers pass a per-app / per-installation
51
+ // suffix (e.g. the app's short name) so a single browser profile can
52
+ // hold distinct device identities for distinct vendors' apps.
53
+ const STORAGE_PREFIX = 'zklic_device_';
54
+ function namespaced(storageKey) {
55
+ return `${STORAGE_PREFIX}${storageKey}`;
56
+ }
57
+ /**
58
+ * Compute the on-chain-shaped device commitment from a Pallas pubkey.
59
+ * Exported so tests and downstream tooling can re-derive it without
60
+ * re-instantiating the whole DeviceIdentity.
61
+ */
62
+ export function computeDeviceCommitment(devicePubKey) {
63
+ return Poseidon.hash([devicePubKey.x, devicePubKey.isOdd.toField()]).toString();
64
+ }
65
+ function buildIdentity(privateKey) {
66
+ const devicePubKey = privateKey.toPublicKey();
67
+ return {
68
+ devicePrivateKey: privateKey,
69
+ devicePubKey,
70
+ deviceCommitment: computeDeviceCommitment(devicePubKey),
71
+ };
72
+ }
73
+ // ── Environment detection ─────────────────────────────────────────
74
+ function hasIndexedDB() {
75
+ return typeof globalThis !== 'undefined'
76
+ && typeof globalThis.indexedDB !== 'undefined';
77
+ }
78
+ function isNodeLike() {
79
+ // Node exposes `process.versions.node`; Deno/Bun don't (their
80
+ // process shims omit this key). Browsers have no `process` global
81
+ // unless something's polyfilled it, but the indexedDB branch runs
82
+ // first so that ordering is fine.
83
+ return typeof globalThis.process !== 'undefined'
84
+ && typeof globalThis.process?.versions?.node === 'string';
85
+ }
86
+ // ── IndexedDB backing store (browser) ─────────────────────────────
87
+ // Small promisified wrapper — no third-party idb library, to keep the
88
+ // SDK dependency surface minimal. Single key/value store; the whole
89
+ // database is one object store with `storageKey` as the key.
90
+ const IDB_DB_NAME = 'zklicensing';
91
+ const IDB_STORE_NAME = 'device_identities';
92
+ const IDB_VERSION = 1;
93
+ function openIdb() {
94
+ return new Promise((resolve, reject) => {
95
+ const req = globalThis.indexedDB.open(IDB_DB_NAME, IDB_VERSION);
96
+ req.onupgradeneeded = () => {
97
+ const db = req.result;
98
+ if (!db.objectStoreNames.contains(IDB_STORE_NAME)) {
99
+ db.createObjectStore(IDB_STORE_NAME);
100
+ }
101
+ };
102
+ req.onsuccess = () => resolve(req.result);
103
+ req.onerror = () => reject(req.error ?? new Error('IndexedDB open failed'));
104
+ });
105
+ }
106
+ async function idbGet(key) {
107
+ const db = await openIdb();
108
+ try {
109
+ return await new Promise((resolve, reject) => {
110
+ const tx = db.transaction(IDB_STORE_NAME, 'readonly');
111
+ const store = tx.objectStore(IDB_STORE_NAME);
112
+ const req = store.get(key);
113
+ req.onsuccess = () => resolve(req.result ?? null);
114
+ req.onerror = () => reject(req.error ?? new Error('IndexedDB get failed'));
115
+ });
116
+ }
117
+ finally {
118
+ db.close();
119
+ }
120
+ }
121
+ async function idbPut(key, value) {
122
+ const db = await openIdb();
123
+ try {
124
+ await new Promise((resolve, reject) => {
125
+ const tx = db.transaction(IDB_STORE_NAME, 'readwrite');
126
+ const store = tx.objectStore(IDB_STORE_NAME);
127
+ const req = store.put(value, key);
128
+ req.onsuccess = () => resolve();
129
+ req.onerror = () => reject(req.error ?? new Error('IndexedDB put failed'));
130
+ });
131
+ }
132
+ finally {
133
+ db.close();
134
+ }
135
+ }
136
+ // ── keytar backing store (Node / Electron) ────────────────────────
137
+ // Loaded via dynamic import so a browser bundler doesn't try to
138
+ // resolve the native module. If keytar isn't installed we throw with
139
+ // a message that tells the caller which optional peer dep to add,
140
+ // rather than silently persisting to plaintext.
141
+ async function loadKeytar() {
142
+ try {
143
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
144
+ return await Function('return import("keytar")')();
145
+ }
146
+ catch {
147
+ throw new Error('deviceIdentity requires the optional peer dependency `keytar` in Node/Electron. ' +
148
+ 'Install it with `npm i keytar` alongside the zklicensing SDK.');
149
+ }
150
+ }
151
+ // keytar's shape: getPassword(service, account) / setPassword(service, account, value).
152
+ // We use a single service name and let `storageKey` be the account, so
153
+ // multiple apps under the same node install can coexist under distinct
154
+ // storage keys without stomping each other.
155
+ const KEYTAR_SERVICE = 'zklicensing-device-identity';
156
+ async function keytarGet(key) {
157
+ const keytar = await loadKeytar();
158
+ const mod = (keytar.default ?? keytar);
159
+ return mod.getPassword(KEYTAR_SERVICE, key);
160
+ }
161
+ async function keytarPut(key, value) {
162
+ const keytar = await loadKeytar();
163
+ const mod = (keytar.default ?? keytar);
164
+ await mod.setPassword(KEYTAR_SERVICE, key, value);
165
+ }
166
+ function pickBackend() {
167
+ if (hasIndexedDB())
168
+ return { get: idbGet, put: idbPut };
169
+ if (isNodeLike())
170
+ return { get: keytarGet, put: keytarPut };
171
+ throw new Error('deviceIdentity: no suitable storage backend detected. ' +
172
+ 'Expected IndexedDB in the browser or a Node/Electron runtime with `keytar` installed.');
173
+ }
174
+ // ── Public API ────────────────────────────────────────────────────
175
+ /**
176
+ * Load an existing device keypair for `storageKey`, or create + persist
177
+ * a fresh one on first call. Idempotent across every subsequent call
178
+ * for the same key on the same install.
179
+ *
180
+ * The `storageKey` should be per-app (e.g. the vendor's app short
181
+ * name or its `appId`), so a single browser profile / OS user account
182
+ * can hold distinct device identities for distinct vendors without
183
+ * cross-contamination.
184
+ */
185
+ export async function getOrCreateDeviceIdentity(storageKey) {
186
+ if (!storageKey || typeof storageKey !== 'string') {
187
+ throw new Error('getOrCreateDeviceIdentity: storageKey must be a non-empty string');
188
+ }
189
+ const backend = pickBackend();
190
+ const key = namespaced(storageKey);
191
+ const existing = await backend.get(key);
192
+ if (existing) {
193
+ try {
194
+ const privateKey = PrivateKey.fromBase58(existing);
195
+ return buildIdentity(privateKey);
196
+ }
197
+ catch {
198
+ // Corrupt persisted value — fall through and mint a fresh key,
199
+ // overwriting the bad blob. Losing a device identity here is
200
+ // recoverable: the caller re-binds the new keypair and unbinds
201
+ // the old slot from any other device that still has the
202
+ // ownership key.
203
+ }
204
+ }
205
+ const privateKey = PrivateKey.random();
206
+ await backend.put(key, privateKey.toBase58());
207
+ return buildIdentity(privateKey);
208
+ }
209
+ //# sourceMappingURL=deviceIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deviceIdentity.js","sourceRoot":"","sources":["../src/deviceIdentity.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oCAAoC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,UAAU,EAAa,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEvD,qEAAqE;AAErE,kEAAkE;AAClE,qEAAqE;AACrE,qEAAqE;AACrE,8DAA8D;AAC9D,MAAM,cAAc,GAAG,eAAe,CAAC;AAEvC,SAAS,UAAU,CAAC,UAAkB;IACpC,OAAO,GAAG,cAAc,GAAG,UAAU,EAAE,CAAC;AAC1C,CAAC;AAcD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,YAAuB;IAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,aAAa,CAAC,UAAsB;IAC3C,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO;QACL,gBAAgB,EAAE,UAAU;QAC5B,YAAY;QACZ,gBAAgB,EAAE,uBAAuB,CAAC,YAAY,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,qEAAqE;AAErE,SAAS,YAAY;IACnB,OAAO,OAAO,UAAU,KAAK,WAAW;WACnC,OAAQ,UAAkB,CAAC,SAAS,KAAK,WAAW,CAAC;AAC5D,CAAC;AAED,SAAS,UAAU;IACjB,8DAA8D;IAC9D,kEAAkE;IAClE,kEAAkE;IAClE,kCAAkC;IAClC,OAAO,OAAQ,UAAkB,CAAC,OAAO,KAAK,WAAW;WACpD,OAAQ,UAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC;AACvE,CAAC;AAED,qEAAqE;AAErE,sEAAsE;AACtE,oEAAoE;AACpE,6DAA6D;AAC7D,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAC3C,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,SAAS,OAAO;IACd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAI,UAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACzE,GAAG,CAAC,eAAe,GAAG,GAAG,EAAE;YACzB,MAAM,EAAE,GAAG,GAAG,CAAC,MAAqB,CAAC;YACrC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClD,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC;QACF,GAAG,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,GAAW;IAC/B,MAAM,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1D,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,GAAG,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAE,GAAG,CAAC,MAA6B,IAAI,IAAI,CAAC,CAAC;YAC1E,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,GAAW,EAAE,KAAa;IAC9C,MAAM,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAClC,GAAG,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAChC,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,qEAAqE;AAErE,gEAAgE;AAChE,qEAAqE;AACrE,kEAAkE;AAClE,gDAAgD;AAChD,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,8DAA8D;QAC9D,OAAO,MAAO,QAAQ,CAAC,yBAAyB,CAAC,EAAmB,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,kFAAkF;YAClF,+DAA+D,CAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,uEAAuE;AACvE,uEAAuE;AACvE,4CAA4C;AAC5C,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAErD,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAsE,CAAC;IAC5G,OAAO,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,KAAa;IACjD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAwE,CAAC;IAC9G,MAAM,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC;AASD,SAAS,WAAW;IAClB,IAAI,YAAY,EAAE;QAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACxD,IAAI,UAAU,EAAE;QAAK,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAC/D,MAAM,IAAI,KAAK,CACb,wDAAwD;QACxD,uFAAuF,CACxF,CAAC;AACJ,CAAC;AAED,qEAAqE;AAErE;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,UAAkB;IAChE,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnD,OAAO,aAAa,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;YAC/D,6DAA6D;YAC7D,+DAA+D;YAC/D,wDAAwD;YACxD,iBAAiB;QACnB,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IACvC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,OAAO,aAAa,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freezeClient.d.ts","sourceRoot":"","sources":["../src/freezeClient.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAW,MAAM,CAAC;IACxB,OAAO,EAAU,MAAM,CAAC;IACxB,IAAI,EAAa,MAAM,CAAC;IACxB,WAAW,EAAM,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAGxB,WAAW,EAAM,OAAO,CAAC;IAKzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAM/B,WAAW,EAAM,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAgBF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAG,OAAO,KAAK,CAAC;IACxB,MAAM,CAAC,EAAI,WAAW,CAAC;CACxB,CAAC;AAKF,wBAAsB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAKzF;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAS,MAAM,CAAC;IAGzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,CAAC,EAAU,OAAO,KAAK,CAAC;IAC/B,MAAM,CAAC,EAAW,WAAW,CAAC;CAC/B,CAAC;AAOF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,WAAW,CAAC,CAyB9F"}
@@ -1,5 +1,5 @@
1
1
  // Copyright (c) 2025-2026 zkLicensing project developers
2
- // All rights reserved.
2
+ // SPDX-License-Identifier: BUSL-1.1
3
3
  function baseUrl(url) {
4
4
  return url.replace(/\/+$/, '');
5
5
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freezeClient.js","sourceRoot":"","sources":["../src/freezeClient.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oCAAoC;AA8CpC,SAAS,OAAO,CAAC,GAAW;IAC1B,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,aAAa;IACpB,yEAAyE;IACzE,sDAAsD;IACtD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAQD,qEAAqE;AACrE,wEAAwE;AACxE,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAA4B;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACzF,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,OAAO,MAAM,IAAI,CAAC,IAAI,EAAkB,CAAC;AAC3C,CAAC;AAWD,yEAAyE;AACzE,oEAAoE;AACpE,yEAAyE;AACzE,6EAA6E;AAC7E,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAA+B;IACtE,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;QACzE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC1F,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAI,IAAI,CAAC,OAAO;YACvB,MAAM,EAAK,IAAI,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,OAAO;YACL,WAAW,EAAM,MAAM,CAAC,WAAW,KAAK,IAAI;YAC5C,eAAe,EAAE,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI;YAC3F,WAAW,EAAM,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;SACtE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,qEAAqE;QACrE,mBAAmB;QACnB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC1E,CAAC;AACH,CAAC"}
@@ -15,6 +15,7 @@ export interface GenerationInfo {
15
15
  }
16
16
  export interface FetchGenerationRequest {
17
17
  keeperUrl: string;
18
+ network: 'devnet' | 'mainnet';
18
19
  appId: string;
19
20
  /** Base64-encoded Ed25519 public keys pinned by the caller. Empty ⇒ verified:false. */
20
21
  pinnedPublicKeysBase64: readonly string[];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generationClient.d.ts","sourceRoot":"","sources":["../src/generationClient.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAW,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAQ,SAAS,GAAG,MAAM,CAAC;IACjC,UAAU,CAAC,EAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAG,MAAM,CAAC;IACrB,SAAS,CAAC,EAAI,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,sGAAsG;IACtG,OAAO,EAAM,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,qEAAqE;IACrE,QAAQ,EAAK,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAG,QAAQ,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAK,MAAM,CAAC;IACjB,uFAAuF;IACvF,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,MAAM,CAAC,EAAG,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,YAAY,EAAE,MAAM,CAAC;IACrB,uFAAuF;IACvF,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,MAAM,CAAC,EAAG,WAAW,CAAC;CACvB;AA6CD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,CAc9F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,+BAA+B,GACnC,OAAO,CAAC,cAAc,CAAC,CAmBzB"}
@@ -1,5 +1,5 @@
1
1
  // Copyright (c) 2025-2026 zkLicensing project developers
2
- // All rights reserved.
2
+ // SPDX-License-Identifier: BUSL-1.1
3
3
  /**
4
4
  * generationClient.ts
5
5
  *
@@ -61,7 +61,7 @@ async function verifyAndProject(parsed, pinnedPublicKeysBase64) {
61
61
  */
62
62
  export async function fetchGenerationInfo(req) {
63
63
  const fetcher = req.fetcher ?? fetch;
64
- const resp = await fetcher(`${baseUrl(req.keeperUrl)}/apps/${encodeURIComponent(req.appId)}`, {
64
+ const resp = await fetcher(`${baseUrl(req.keeperUrl)}/apps/${encodeURIComponent(req.appId)}?network=${req.network}`, {
65
65
  method: 'GET',
66
66
  signal: req.signal,
67
67
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generationClient.js","sourceRoot":"","sources":["../src/generationClient.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -1,60 +1,39 @@
1
1
  /**
2
2
  * verifyLicense — client SDK.
3
3
  *
4
- * Calls the keeper's GET /verify until the on-chain refund window for the
5
- * license has closed; from that point on returns from a local anchor and
6
- * never touches the network again. The refund-window decision is server-
7
- * side: the keeper returns `refundWindowClosed: boolean` on its /verify
8
- * response, computed from its own record of `purchaseSlot + REFUND_WINDOW_N`
9
- * against the on-chain `currentSlot`. The SDK gates anchor writes on that
10
- * boolean and never trusts a `purchaseSlot` supplied by the local proof
11
- * file, so a user who forges their proof metadata cannot force the offline
12
- * branch prematurely.
4
+ * Calls the licensing service's GET /verify until the on-chain refund
5
+ * window for the license has closed; from that point on returns from a
6
+ * local anchor and never touches the network again. The refund-window
7
+ * decision is server-side: the service returns `refundWindowClosed:
8
+ * boolean` on its /verify response, computed from its own record of
9
+ * `purchaseSlot + REFUND_WINDOW_N` against the on-chain `currentSlot`.
10
+ * The SDK gates anchor writes on that boolean and never trusts a
11
+ * `purchaseSlot` supplied by the local proof file, so a user who forges
12
+ * their proof metadata cannot force the offline branch prematurely.
13
13
  *
14
14
  * Anchor purity: every field persisted in the Anchor derives from the
15
- * keeper's /verify response — `anchoredSlot`, `expirySlot`, `ownership`.
16
- * The only client-supplied input to the offline branch is
17
- * `proof.expirySlot`, used solely as the loadAnchor binding key. A
18
- * tampered proof file therefore never gets a wrong answer; it gets no
19
- * offline branch at all and falls through to the keeper on every call.
15
+ * service's /verify response — `anchoredSlot`, `expirySlot`. The only
16
+ * client-supplied input to the offline branch is `proof.expirySlot`,
17
+ * used solely as the loadAnchor binding key. A tampered proof file
18
+ * therefore never gets a wrong answer; it gets no offline branch at all
19
+ * and falls through to the licensing service on every call.
20
20
  */
21
21
  import { REFUND_WINDOW_N, GRACE_PERIOD_N } from './contractInterface.js';
22
22
  declare const MS_PER_SLOT = 90000;
23
+ export declare const DEFAULT_VERIFIER_URL = "https://zklicensing.com/api/verify";
23
24
  export interface Storage {
24
25
  getItem(key: string): string | null;
25
26
  setItem(key: string, value: string): void;
26
27
  }
27
- export interface ActivationRecord {
28
- token: string;
29
- expiresAt: number;
30
- secretHash?: string;
31
- }
32
- export declare function loadActivation(storage: Storage, zkAppAddress: string, licenseHash: string, nowMs?: number): ActivationRecord | null;
33
- export declare function saveActivation(storage: Storage, zkAppAddress: string, licenseHash: string, rec: ActivationRecord): void;
34
28
  export interface ProofInput {
35
29
  licenseHash: string;
36
30
  zkAppAddress: string;
37
31
  expirySlot: number;
38
- verifierUrl?: string;
39
32
  }
40
- /**
41
- * Callback that proves an OwnershipChallenge using a stored secretHash.
42
- * Callers wire this up with their own o1js + LicenseProof imports so the SDK
43
- * stays dependency-free for the verify-only path. Return value is the
44
- * `proof.toJSON()` payload the verifier's POST /respond expects.
45
- */
46
- export type TokenProver = (input: {
47
- licenseHash: string;
48
- nonce: string;
49
- secretHash: string;
50
- }) => Promise<unknown>;
51
33
  export interface VerifyOptions {
52
- verifierUrl?: string;
53
34
  storage?: Storage | null;
54
35
  fetcher?: typeof fetch;
55
36
  now?: () => number;
56
- prover?: TokenProver;
57
- secretHash?: string;
58
37
  }
59
38
  export interface VerifyResult {
60
39
  valid: boolean;
@@ -65,8 +44,19 @@ export interface VerifyResult {
65
44
  remainingDays: number;
66
45
  reason: string | null;
67
46
  source: 'offline' | 'chain';
68
- ownership: 'verified' | 'unverified';
69
47
  }
70
48
  export declare function verifyLicense(proof: ProofInput, options?: VerifyOptions): Promise<VerifyResult>;
71
49
  export { REFUND_WINDOW_N, GRACE_PERIOD_N, MS_PER_SLOT };
50
+ export { proveBind, confirmBind } from './bindClient.js';
51
+ export type { ProveBindRequest, ProveBindResponse, ConfirmBindRequest, } from './bindClient.js';
52
+ export { proveUnbind, confirmUnbind } from './unbindClient.js';
53
+ export type { ProveUnbindRequest, ProveUnbindResponse, ConfirmUnbindRequest, } from './unbindClient.js';
54
+ export { getOrCreateDeviceIdentity, computeDeviceCommitment, } from './deviceIdentity.js';
55
+ export type { DeviceIdentity } from './deviceIdentity.js';
56
+ export { verifyOffline, deviceCommitmentFromFields } from './verifyOffline.js';
57
+ export type { VerifyOfflineInput, VerifyOfflineResult, DeviceSlotSnapshot, } from './verifyOffline.js';
58
+ export { fetchOnChainLicensesRoot, DEFAULT_MINA_GRAPHQL_URLS } from './onChainRoot.js';
59
+ export type { FetchOnChainLicensesRootInput, NetworkName } from './onChainRoot.js';
60
+ export { seatNameFor, SEAT_NAME_COMBINATIONS } from './seatName.js';
61
+ export type { SeatNameInput } from './seatName.js';
72
62
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,eAAe,EACf,cAAc,EAGf,MAAM,wBAAwB,CAAC;AAEhC,QAAA,MAAM,WAAW,QAAgB,CAAC;AAOlC,eAAO,MAAM,oBAAoB,uCAAuC,CAAC;AAezE,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IAInB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAIzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IAIvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CAC7B;AAgFD,wBAAsB,aAAa,CACjC,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAoGvB;AAID,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AAQxD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACzD,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAO1D,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC/E,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AACvF,YAAY,EAAE,6BAA6B,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAOnF,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}