@claw-network/core 0.1.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 (161) hide show
  1. package/dist/crypto/aes.d.ts +8 -0
  2. package/dist/crypto/aes.d.ts.map +1 -0
  3. package/dist/crypto/aes.js +29 -0
  4. package/dist/crypto/aes.js.map +1 -0
  5. package/dist/crypto/ed25519.d.ts +11 -0
  6. package/dist/crypto/ed25519.d.ts.map +1 -0
  7. package/dist/crypto/ed25519.js +25 -0
  8. package/dist/crypto/ed25519.js.map +1 -0
  9. package/dist/crypto/hash.d.ts +5 -0
  10. package/dist/crypto/hash.d.ts.map +1 -0
  11. package/dist/crypto/hash.js +16 -0
  12. package/dist/crypto/hash.js.map +1 -0
  13. package/dist/crypto/hkdf.d.ts +2 -0
  14. package/dist/crypto/hkdf.d.ts.map +1 -0
  15. package/dist/crypto/hkdf.js +6 -0
  16. package/dist/crypto/hkdf.js.map +1 -0
  17. package/dist/crypto/index.d.ts +10 -0
  18. package/dist/crypto/index.d.ts.map +1 -0
  19. package/dist/crypto/index.js +10 -0
  20. package/dist/crypto/index.js.map +1 -0
  21. package/dist/crypto/jcs.d.ts +3 -0
  22. package/dist/crypto/jcs.d.ts.map +1 -0
  23. package/dist/crypto/jcs.js +14 -0
  24. package/dist/crypto/jcs.js.map +1 -0
  25. package/dist/crypto/mnemonic.d.ts +9 -0
  26. package/dist/crypto/mnemonic.d.ts.map +1 -0
  27. package/dist/crypto/mnemonic.js +22 -0
  28. package/dist/crypto/mnemonic.js.map +1 -0
  29. package/dist/crypto/rotation.d.ts +20 -0
  30. package/dist/crypto/rotation.d.ts.map +1 -0
  31. package/dist/crypto/rotation.js +37 -0
  32. package/dist/crypto/rotation.js.map +1 -0
  33. package/dist/crypto/shamir.d.ts +3 -0
  34. package/dist/crypto/shamir.d.ts.map +1 -0
  35. package/dist/crypto/shamir.js +125 -0
  36. package/dist/crypto/shamir.js.map +1 -0
  37. package/dist/crypto/x25519.d.ts +8 -0
  38. package/dist/crypto/x25519.d.ts.map +1 -0
  39. package/dist/crypto/x25519.js +13 -0
  40. package/dist/crypto/x25519.js.map +1 -0
  41. package/dist/encoding/base58.d.ts +5 -0
  42. package/dist/encoding/base58.d.ts.map +1 -0
  43. package/dist/encoding/base58.js +63 -0
  44. package/dist/encoding/base58.js.map +1 -0
  45. package/dist/encoding/index.d.ts +2 -0
  46. package/dist/encoding/index.d.ts.map +1 -0
  47. package/dist/encoding/index.js +2 -0
  48. package/dist/encoding/index.js.map +1 -0
  49. package/dist/identity/did.d.ts +6 -0
  50. package/dist/identity/did.d.ts.map +1 -0
  51. package/dist/identity/did.js +48 -0
  52. package/dist/identity/did.js.map +1 -0
  53. package/dist/identity/index.d.ts +2 -0
  54. package/dist/identity/index.d.ts.map +1 -0
  55. package/dist/identity/index.js +2 -0
  56. package/dist/identity/index.js.map +1 -0
  57. package/dist/index.d.ts +8 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +8 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/p2p/config.d.ts +26 -0
  62. package/dist/p2p/config.d.ts.map +1 -0
  63. package/dist/p2p/config.js +14 -0
  64. package/dist/p2p/config.js.map +1 -0
  65. package/dist/p2p/index.d.ts +4 -0
  66. package/dist/p2p/index.d.ts.map +1 -0
  67. package/dist/p2p/index.js +4 -0
  68. package/dist/p2p/index.js.map +1 -0
  69. package/dist/p2p/node.d.ts +44 -0
  70. package/dist/p2p/node.d.ts.map +1 -0
  71. package/dist/p2p/node.js +299 -0
  72. package/dist/p2p/node.js.map +1 -0
  73. package/dist/p2p/topics.d.ts +6 -0
  74. package/dist/p2p/topics.d.ts.map +1 -0
  75. package/dist/p2p/topics.js +6 -0
  76. package/dist/p2p/topics.js.map +1 -0
  77. package/dist/protocol/constants.d.ts +3 -0
  78. package/dist/protocol/constants.d.ts.map +1 -0
  79. package/dist/protocol/constants.js +3 -0
  80. package/dist/protocol/constants.js.map +1 -0
  81. package/dist/protocol/credentials.d.ts +30 -0
  82. package/dist/protocol/credentials.d.ts.map +1 -0
  83. package/dist/protocol/credentials.js +61 -0
  84. package/dist/protocol/credentials.js.map +1 -0
  85. package/dist/protocol/event-hash.d.ts +10 -0
  86. package/dist/protocol/event-hash.d.ts.map +1 -0
  87. package/dist/protocol/event-hash.js +32 -0
  88. package/dist/protocol/event-hash.js.map +1 -0
  89. package/dist/protocol/index.d.ts +5 -0
  90. package/dist/protocol/index.d.ts.map +1 -0
  91. package/dist/protocol/index.js +5 -0
  92. package/dist/protocol/index.js.map +1 -0
  93. package/dist/protocol/key-rotation.d.ts +23 -0
  94. package/dist/protocol/key-rotation.d.ts.map +1 -0
  95. package/dist/protocol/key-rotation.js +34 -0
  96. package/dist/protocol/key-rotation.js.map +1 -0
  97. package/dist/storage/config.d.ts +22 -0
  98. package/dist/storage/config.d.ts.map +1 -0
  99. package/dist/storage/config.js +63 -0
  100. package/dist/storage/config.js.map +1 -0
  101. package/dist/storage/event-store.d.ts +49 -0
  102. package/dist/storage/event-store.d.ts.map +1 -0
  103. package/dist/storage/event-store.js +329 -0
  104. package/dist/storage/event-store.js.map +1 -0
  105. package/dist/storage/health.d.ts +9 -0
  106. package/dist/storage/health.d.ts.map +1 -0
  107. package/dist/storage/health.js +25 -0
  108. package/dist/storage/health.js.map +1 -0
  109. package/dist/storage/index.d.ts +13 -0
  110. package/dist/storage/index.d.ts.map +1 -0
  111. package/dist/storage/index.js +13 -0
  112. package/dist/storage/index.js.map +1 -0
  113. package/dist/storage/keystore.d.ts +36 -0
  114. package/dist/storage/keystore.d.ts.map +1 -0
  115. package/dist/storage/keystore.js +129 -0
  116. package/dist/storage/keystore.js.map +1 -0
  117. package/dist/storage/kv.d.ts +11 -0
  118. package/dist/storage/kv.d.ts.map +1 -0
  119. package/dist/storage/kv.js +2 -0
  120. package/dist/storage/kv.js.map +1 -0
  121. package/dist/storage/level.d.ts +17 -0
  122. package/dist/storage/level.d.ts.map +1 -0
  123. package/dist/storage/level.js +57 -0
  124. package/dist/storage/level.js.map +1 -0
  125. package/dist/storage/memory.d.ts +12 -0
  126. package/dist/storage/memory.d.ts.map +1 -0
  127. package/dist/storage/memory.js +20 -0
  128. package/dist/storage/memory.js.map +1 -0
  129. package/dist/storage/migrations.d.ts +11 -0
  130. package/dist/storage/migrations.d.ts.map +1 -0
  131. package/dist/storage/migrations.js +47 -0
  132. package/dist/storage/migrations.js.map +1 -0
  133. package/dist/storage/paths.d.ts +14 -0
  134. package/dist/storage/paths.d.ts.map +1 -0
  135. package/dist/storage/paths.js +30 -0
  136. package/dist/storage/paths.js.map +1 -0
  137. package/dist/storage/snapshot-scheduler.d.ts +16 -0
  138. package/dist/storage/snapshot-scheduler.d.ts.map +1 -0
  139. package/dist/storage/snapshot-scheduler.js +43 -0
  140. package/dist/storage/snapshot-scheduler.js.map +1 -0
  141. package/dist/storage/snapshots.d.ts +53 -0
  142. package/dist/storage/snapshots.d.ts.map +1 -0
  143. package/dist/storage/snapshots.js +192 -0
  144. package/dist/storage/snapshots.js.map +1 -0
  145. package/dist/storage/state-store.d.ts +14 -0
  146. package/dist/storage/state-store.d.ts.map +1 -0
  147. package/dist/storage/state-store.js +38 -0
  148. package/dist/storage/state-store.js.map +1 -0
  149. package/dist/utils/PromiseWithResolvers.d.ts +2 -0
  150. package/dist/utils/PromiseWithResolvers.d.ts.map +1 -0
  151. package/dist/utils/PromiseWithResolvers.js +18 -0
  152. package/dist/utils/PromiseWithResolvers.js.map +1 -0
  153. package/dist/utils/bytes.d.ts +8 -0
  154. package/dist/utils/bytes.d.ts.map +1 -0
  155. package/dist/utils/bytes.js +40 -0
  156. package/dist/utils/bytes.js.map +1 -0
  157. package/dist/utils/index.d.ts +2 -0
  158. package/dist/utils/index.d.ts.map +1 -0
  159. package/dist/utils/index.js +2 -0
  160. package/dist/utils/index.js.map +1 -0
  161. package/package.json +81 -0
@@ -0,0 +1,329 @@
1
+ import { canonicalizeBytes } from '../crypto/jcs.js';
2
+ import { eventHashHex } from '../protocol/event-hash.js';
3
+ import { bytesToUtf8, utf8ToBytes } from '../utils/bytes.js';
4
+ const PREFIX_EVENT = 'ev:';
5
+ const PREFIX_ISSUER_INDEX = 'ix:did:';
6
+ const PREFIX_ADDRESS_INDEX = 'ix:addr:';
7
+ const PREFIX_NONCE = 'ix:nonce:';
8
+ const KEY_SCHEMA_VERSION = 'meta:version';
9
+ const PREFIX_LOG_SEQ = 'log:seq:';
10
+ const PREFIX_LOG_HASH = 'log:hash:';
11
+ const KEY_LOG_SEQ = 'meta:logseq';
12
+ const PREFIX_EVENT_HEADER = 'evh:';
13
+ function encodeJson(value) {
14
+ return utf8ToBytes(JSON.stringify(value));
15
+ }
16
+ function decodeJson(value, fallback) {
17
+ if (!value) {
18
+ return fallback;
19
+ }
20
+ return JSON.parse(bytesToUtf8(value));
21
+ }
22
+ function encodeSeq(seq) {
23
+ return seq.toString(16).padStart(16, '0');
24
+ }
25
+ function decodeSeq(value) {
26
+ return Number.parseInt(value, 16);
27
+ }
28
+ function bytesEqual(a, b) {
29
+ if (a.length !== b.length) {
30
+ return false;
31
+ }
32
+ for (let i = 0; i < a.length; i++) {
33
+ if (a[i] !== b[i]) {
34
+ return false;
35
+ }
36
+ }
37
+ return true;
38
+ }
39
+ function parseEventEnvelope(bytes) {
40
+ try {
41
+ return JSON.parse(bytesToUtf8(bytes));
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ function extractHash(envelope) {
48
+ const hash = envelope.hash;
49
+ return typeof hash === 'string' && hash.length > 0 ? hash : null;
50
+ }
51
+ function validateEventBytes(hash, eventBytes) {
52
+ const envelope = parseEventEnvelope(eventBytes);
53
+ if (!envelope) {
54
+ throw new Error('Invalid event bytes (not JSON)');
55
+ }
56
+ const envelopeHash = extractHash(envelope);
57
+ if (!envelopeHash) {
58
+ throw new Error('Event envelope missing hash');
59
+ }
60
+ const computed = eventHashHex(envelope);
61
+ if (computed !== envelopeHash || envelopeHash !== hash) {
62
+ throw new Error('Event hash mismatch');
63
+ }
64
+ const canonical = canonicalizeBytes(envelope);
65
+ if (!bytesEqual(canonical, eventBytes)) {
66
+ throw new Error('Event bytes are not canonical JCS');
67
+ }
68
+ return { envelope, canonical };
69
+ }
70
+ export class EventStore {
71
+ store;
72
+ constructor(store) {
73
+ this.store = store;
74
+ }
75
+ async putEvent(hash, eventBytes) {
76
+ validateEventBytes(hash, eventBytes);
77
+ const key = `${PREFIX_EVENT}${hash}`;
78
+ const existing = await this.store.get(key);
79
+ if (existing) {
80
+ if (!bytesEqual(existing, eventBytes)) {
81
+ throw new Error('Event immutability violation');
82
+ }
83
+ return;
84
+ }
85
+ await this.store.put(key, eventBytes);
86
+ }
87
+ async appendEvent(hash, eventBytes) {
88
+ validateEventBytes(hash, eventBytes);
89
+ const existingSeq = await this.store.get(`${PREFIX_LOG_HASH}${hash}`);
90
+ if (existingSeq) {
91
+ return false;
92
+ }
93
+ const exists = await this.hasEvent(hash);
94
+ if (!exists) {
95
+ await this.putEvent(hash, eventBytes);
96
+ }
97
+ const seq = await this.nextLogSeq();
98
+ const seqKey = `${PREFIX_LOG_SEQ}${encodeSeq(seq)}`;
99
+ await this.store.put(seqKey, utf8ToBytes(hash));
100
+ await this.store.put(`${PREFIX_LOG_HASH}${hash}`, utf8ToBytes(encodeSeq(seq)));
101
+ await this.store.put(KEY_LOG_SEQ, encodeJson(seq + 1));
102
+ return true;
103
+ }
104
+ async getEventHeader(hash) {
105
+ const data = await this.store.get(`${PREFIX_EVENT_HEADER}${hash}`);
106
+ if (!data) {
107
+ return null;
108
+ }
109
+ try {
110
+ return JSON.parse(bytesToUtf8(data));
111
+ }
112
+ catch {
113
+ return null;
114
+ }
115
+ }
116
+ async saveEventHeader(hash, header) {
117
+ await this.store.put(`${PREFIX_EVENT_HEADER}${hash}`, encodeJson(header));
118
+ }
119
+ async getEvent(hash) {
120
+ return this.store.get(`${PREFIX_EVENT}${hash}`);
121
+ }
122
+ async hasEvent(hash) {
123
+ return (await this.getEvent(hash)) !== undefined;
124
+ }
125
+ async appendIssuerIndex(issuer, hash) {
126
+ const key = `${PREFIX_ISSUER_INDEX}${issuer}`;
127
+ const existing = decodeJson(await this.store.get(key), []);
128
+ existing.push(hash);
129
+ await this.store.put(key, encodeJson(existing));
130
+ }
131
+ async appendAddressIndex(address, hash) {
132
+ const key = `${PREFIX_ADDRESS_INDEX}${address}`;
133
+ const existing = decodeJson(await this.store.get(key), []);
134
+ existing.push(hash);
135
+ await this.store.put(key, encodeJson(existing));
136
+ }
137
+ async getIssuerEvents(issuer) {
138
+ return decodeJson(await this.store.get(`${PREFIX_ISSUER_INDEX}${issuer}`), []);
139
+ }
140
+ async getAddressEvents(address) {
141
+ return decodeJson(await this.store.get(`${PREFIX_ADDRESS_INDEX}${address}`), []);
142
+ }
143
+ async getCommittedNonce(issuer) {
144
+ return decodeJson(await this.store.get(`${PREFIX_NONCE}${issuer}`), 0);
145
+ }
146
+ async setCommittedNonce(issuer, nonce) {
147
+ await this.store.put(`${PREFIX_NONCE}${issuer}`, encodeJson(nonce));
148
+ }
149
+ async getEventLogRange(from, limit, maxBytes) {
150
+ if (limit <= 0) {
151
+ return { events: [], cursor: '' };
152
+ }
153
+ let startSeq = 0;
154
+ if (from) {
155
+ const seqBytes = await this.store.get(`${PREFIX_LOG_HASH}${from}`);
156
+ if (seqBytes) {
157
+ const seq = decodeSeq(bytesToUtf8(seqBytes));
158
+ startSeq = seq + 1;
159
+ }
160
+ }
161
+ const events = [];
162
+ let cursor = '';
163
+ let totalBytes = 0;
164
+ for await (const { key, value } of this.store.iterator(PREFIX_LOG_SEQ)) {
165
+ const seqHex = key.slice(PREFIX_LOG_SEQ.length);
166
+ const seq = decodeSeq(seqHex);
167
+ if (seq < startSeq) {
168
+ continue;
169
+ }
170
+ const hash = bytesToUtf8(value);
171
+ const eventBytes = await this.getEvent(hash);
172
+ if (!eventBytes) {
173
+ continue;
174
+ }
175
+ if (maxBytes !== undefined && totalBytes + eventBytes.length > maxBytes) {
176
+ break;
177
+ }
178
+ events.push(eventBytes);
179
+ totalBytes += eventBytes.length;
180
+ cursor = hash;
181
+ if (events.length >= limit) {
182
+ break;
183
+ }
184
+ }
185
+ return { events, cursor };
186
+ }
187
+ async getLatestEventHash() {
188
+ const nextSeq = await this.nextLogSeq();
189
+ if (nextSeq <= 0) {
190
+ return null;
191
+ }
192
+ const key = `${PREFIX_LOG_SEQ}${encodeSeq(nextSeq - 1)}`;
193
+ const value = await this.store.get(key);
194
+ return value ? bytesToUtf8(value) : null;
195
+ }
196
+ async getLogLength() {
197
+ return this.nextLogSeq();
198
+ }
199
+ async getEventSeq(hash) {
200
+ const seqBytes = await this.store.get(`${PREFIX_LOG_HASH}${hash}`);
201
+ if (!seqBytes) {
202
+ return null;
203
+ }
204
+ return decodeSeq(bytesToUtf8(seqBytes));
205
+ }
206
+ async verifyEventLog() {
207
+ const errors = [];
208
+ for await (const { value } of this.store.iterator(PREFIX_LOG_SEQ)) {
209
+ const hash = bytesToUtf8(value);
210
+ const eventBytes = await this.getEvent(hash);
211
+ if (!eventBytes) {
212
+ const header = await this.getEventHeader(hash);
213
+ if (!header) {
214
+ errors.push(`missing event bytes/header for ${hash}`);
215
+ }
216
+ continue;
217
+ }
218
+ try {
219
+ validateEventBytes(hash, eventBytes);
220
+ }
221
+ catch (error) {
222
+ errors.push(`${hash}: ${error.message}`);
223
+ }
224
+ }
225
+ return { ok: errors.length === 0, errors };
226
+ }
227
+ async rebuildIndexes(options = {}) {
228
+ const { rebuildIssuer = true, rebuildNonce = true, clearExisting = true, indexer } = options;
229
+ if (clearExisting) {
230
+ if (rebuildIssuer) {
231
+ for await (const entry of this.store.iterator(PREFIX_ISSUER_INDEX)) {
232
+ await this.store.del(entry.key);
233
+ }
234
+ }
235
+ if (rebuildNonce) {
236
+ for await (const entry of this.store.iterator(PREFIX_NONCE)) {
237
+ await this.store.del(entry.key);
238
+ }
239
+ }
240
+ if (indexer) {
241
+ for await (const entry of this.store.iterator(PREFIX_ADDRESS_INDEX)) {
242
+ await this.store.del(entry.key);
243
+ }
244
+ }
245
+ }
246
+ for await (const { value } of this.store.iterator(PREFIX_LOG_SEQ)) {
247
+ const hash = bytesToUtf8(value);
248
+ const eventBytes = await this.getEvent(hash);
249
+ if (!eventBytes) {
250
+ continue;
251
+ }
252
+ const envelope = parseEventEnvelope(eventBytes);
253
+ if (!envelope) {
254
+ continue;
255
+ }
256
+ const issuer = envelope.issuer ?? '';
257
+ const nonce = envelope.nonce ?? null;
258
+ if (rebuildIssuer && issuer) {
259
+ await this.appendIssuerIndex(issuer, hash);
260
+ }
261
+ if (rebuildNonce && issuer && typeof nonce === 'number') {
262
+ await this.setCommittedNonce(issuer, nonce);
263
+ }
264
+ if (indexer) {
265
+ const derived = indexer(envelope) ?? {};
266
+ const addresses = derived.addresses ?? [];
267
+ for (const address of addresses) {
268
+ if (address) {
269
+ await this.appendAddressIndex(address, hash);
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
275
+ async pruneEvents(options = {}) {
276
+ const minAgeMs = options.minAgeMs ?? 30 * 24 * 60 * 60 * 1000;
277
+ const minEvents = options.minEvents ?? 100_000;
278
+ const now = options.now ?? Date.now();
279
+ const logLength = await this.getLogLength();
280
+ const keepFromSeq = Math.max(0, logLength - minEvents);
281
+ const snapshotSeq = options.snapshotAt ? await this.getEventSeq(options.snapshotAt) : null;
282
+ const protectedSeq = snapshotSeq !== null ? snapshotSeq + 1 : 0;
283
+ const minSeqToKeep = Math.max(keepFromSeq, protectedSeq);
284
+ let pruned = 0;
285
+ for await (const { key, value } of this.store.iterator(PREFIX_LOG_SEQ)) {
286
+ const seqHex = key.slice(PREFIX_LOG_SEQ.length);
287
+ const seq = decodeSeq(seqHex);
288
+ if (seq >= minSeqToKeep) {
289
+ continue;
290
+ }
291
+ const hash = bytesToUtf8(value);
292
+ const eventBytes = await this.getEvent(hash);
293
+ if (!eventBytes) {
294
+ continue;
295
+ }
296
+ const envelope = parseEventEnvelope(eventBytes);
297
+ if (!envelope) {
298
+ continue;
299
+ }
300
+ const ts = typeof envelope.ts === 'number' ? envelope.ts : 0;
301
+ if (ts && now - ts < minAgeMs) {
302
+ continue;
303
+ }
304
+ if (options.shouldKeep && options.shouldKeep(envelope)) {
305
+ continue;
306
+ }
307
+ const header = {
308
+ hash,
309
+ ts,
310
+ issuer: envelope.issuer ?? null,
311
+ type: envelope.type ?? null,
312
+ };
313
+ await this.saveEventHeader(hash, header);
314
+ await this.store.del(`${PREFIX_EVENT}${hash}`);
315
+ pruned += 1;
316
+ }
317
+ return pruned;
318
+ }
319
+ async getSchemaVersion() {
320
+ return decodeJson(await this.store.get(KEY_SCHEMA_VERSION), null);
321
+ }
322
+ async setSchemaVersion(version) {
323
+ await this.store.put(KEY_SCHEMA_VERSION, encodeJson(version));
324
+ }
325
+ async nextLogSeq() {
326
+ return decodeJson(await this.store.get(KEY_LOG_SEQ), 0);
327
+ }
328
+ }
329
+ //# sourceMappingURL=event-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-store.js","sourceRoot":"","sources":["../../src/storage/event-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG7D,MAAM,YAAY,GAAG,KAAK,CAAC;AAC3B,MAAM,mBAAmB,GAAG,SAAS,CAAC;AACtC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AACxC,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAC1C,MAAM,cAAc,GAAG,UAAU,CAAC;AAClC,MAAM,eAAe,GAAG,WAAW,CAAC;AACpC,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,UAAU,CAAI,KAA6B,EAAE,QAAW;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAM,CAAC;AAC7C,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,CAAa,EAAE,CAAa;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAA4B,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAiC;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAY,EACZ,UAAsB;IAKtB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,YAAY,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,OAAO,UAAU;IACQ;IAA7B,YAA6B,KAAc;QAAd,UAAK,GAAL,KAAK,CAAS;IAAG,CAAC;IAE/C,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,UAAsB;QACjD,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,GAAG,YAAY,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,UAAsB;QACpD,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,GAAG,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,GAAG,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,GAAG,IAAI,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAA4B,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY,EAAE,MAA+B;QACjE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,IAAI,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,GAAG,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,IAAY;QAClD,MAAM,GAAG,GAAG,GAAG,mBAAmB,GAAG,MAAM,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,UAAU,CAAW,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,IAAY;QACpD,MAAM,GAAG,GAAG,GAAG,oBAAoB,GAAG,OAAO,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,UAAU,CAAW,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,oBAAoB,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc;QACpC,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,KAAa;QACnD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,GAAG,MAAM,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,IAAmB,EACnB,KAAa,EACb,QAAiB;QAEjB,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,GAAG,IAAI,EAAE,CAAC,CAAC;YACnE,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC7C,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACvE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,GAAG,GAAG,QAAQ,EAAE,CAAC;gBACnB,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,KAAK,SAAS,IAAI,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBACxE,MAAM;YACR,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxB,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC;YAChC,MAAM,GAAG,IAAI,CAAC;YACd,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC3B,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,GAAG,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,CAAC,IAAI,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;gBACxD,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,UASI,EAAE;QAEN,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,aAAa,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC7F,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBACnE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC5D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;oBACpE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAI,QAAQ,CAAC,MAAiB,IAAI,EAAE,CAAC;YACjD,MAAM,KAAK,GAAI,QAAQ,CAAC,KAAgB,IAAI,IAAI,CAAC;YAEjD,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,YAAY,IAAI,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACxD,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC1C,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;oBAChC,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC/C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,UAMI,EAAE;QAEN,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC;QAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAEtC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3F,MAAM,YAAY,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAEzD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACvE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAC9B,SAAS;YACX,CAAC;YACD,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvD,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG;gBACb,IAAI;gBACJ,EAAE;gBACF,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;gBAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;aAC5B,CAAC;YACF,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,GAAG,IAAI,EAAE,CAAC,CAAC;YAC/C,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { KVStore } from './kv.js';
2
+ export interface QuarantineRecord {
3
+ at: string;
4
+ reason: string;
5
+ }
6
+ export declare function getQuarantineStatus(store: KVStore): Promise<QuarantineRecord | null>;
7
+ export declare function enterQuarantine(store: KVStore, reason: string): Promise<void>;
8
+ export declare function clearQuarantine(store: KVStore): Promise<void>;
9
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/storage/health.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAU1F;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnF;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE"}
@@ -0,0 +1,25 @@
1
+ import { bytesToUtf8, utf8ToBytes } from '../utils/bytes.js';
2
+ const QUARANTINE_KEY = 'meta:quarantine';
3
+ export async function getQuarantineStatus(store) {
4
+ const raw = await store.get(QUARANTINE_KEY);
5
+ if (!raw) {
6
+ return null;
7
+ }
8
+ try {
9
+ return JSON.parse(bytesToUtf8(raw));
10
+ }
11
+ catch {
12
+ return null;
13
+ }
14
+ }
15
+ export async function enterQuarantine(store, reason) {
16
+ const record = {
17
+ at: new Date().toISOString(),
18
+ reason,
19
+ };
20
+ await store.put(QUARANTINE_KEY, utf8ToBytes(JSON.stringify(record)));
21
+ }
22
+ export async function clearQuarantine(store) {
23
+ await store.del(QUARANTINE_KEY);
24
+ }
25
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/storage/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG7D,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAOzC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAc;IACtD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAqB,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAc,EAAE,MAAc;IAClE,MAAM,MAAM,GAAqB;QAC/B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,MAAM;KACP,CAAC;IACF,MAAM,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAc;IAClD,MAAM,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export * from './event-store.js';
2
+ export * from './kv.js';
3
+ export * from './config.js';
4
+ export * from './health.js';
5
+ export * from './keystore.js';
6
+ export * from './level.js';
7
+ export * from './memory.js';
8
+ export * from './migrations.js';
9
+ export * from './paths.js';
10
+ export * from './snapshots.js';
11
+ export * from './snapshot-scheduler.js';
12
+ export * from './state-store.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export * from './event-store.js';
2
+ export * from './kv.js';
3
+ export * from './config.js';
4
+ export * from './health.js';
5
+ export * from './keystore.js';
6
+ export * from './level.js';
7
+ export * from './memory.js';
8
+ export * from './migrations.js';
9
+ export * from './paths.js';
10
+ export * from './snapshots.js';
11
+ export * from './snapshot-scheduler.js';
12
+ export * from './state-store.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { KeyRotationState } from '../crypto/rotation.js';
2
+ import { StoragePaths } from './paths.js';
3
+ export interface KeyDerivationParams {
4
+ t: number;
5
+ m: number;
6
+ p: number;
7
+ dkLen: number;
8
+ }
9
+ export declare const DEFAULT_KDF_PARAMS: KeyDerivationParams;
10
+ export declare const MIN_PASSPHRASE_LENGTH = 12;
11
+ export interface EncryptedKeyMaterial {
12
+ kdf: 'argon2id';
13
+ params: KeyDerivationParams;
14
+ salt: string;
15
+ nonce: string;
16
+ ciphertext: string;
17
+ tag: string;
18
+ }
19
+ export interface KeyRecord {
20
+ v: 1;
21
+ id: string;
22
+ type: 'ed25519';
23
+ publicKey: string;
24
+ encryptedPrivateKey: EncryptedKeyMaterial;
25
+ createdAt: string;
26
+ rotation?: KeyRotationState;
27
+ }
28
+ export declare function keyIdFromPublicKey(publicKey: Uint8Array): string;
29
+ export declare function encryptPrivateKey(privateKey: Uint8Array, passphrase: string, params?: KeyDerivationParams): EncryptedKeyMaterial;
30
+ export declare function decryptPrivateKey(encrypted: EncryptedKeyMaterial, passphrase: string): Uint8Array;
31
+ export declare function createKeyRecord(publicKey: Uint8Array, privateKey: Uint8Array, passphrase: string, params?: KeyDerivationParams): KeyRecord;
32
+ export declare function saveKeyRecord(paths: StoragePaths, record: KeyRecord): Promise<string>;
33
+ export declare function loadKeyRecord(paths: StoragePaths, id: string): Promise<KeyRecord>;
34
+ export declare function listKeyRecords(paths: StoragePaths): Promise<KeyRecord[]>;
35
+ export declare function decryptKeyRecord(record: KeyRecord, passphrase: string): Promise<Uint8Array>;
36
+ //# sourceMappingURL=keystore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.d.ts","sourceRoot":"","sources":["../../src/storage/keystore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,EAAE,mBAKhC,CAAC;AAEF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,CAAC,CAAC;IACL,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,oBAAoB,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AA6CD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAGhE;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,mBAAwC,GAC/C,oBAAoB,CAatB;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,oBAAoB,EAC/B,UAAU,EAAE,MAAM,GACjB,UAAU,CAQZ;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,UAAU,EACrB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,mBAAwC,GAC/C,SAAS,CAaX;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAK3F;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAIvF;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAwB9E;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,CAErB"}
@@ -0,0 +1,129 @@
1
+ import { randomBytes, createCipheriv, createDecipheriv } from 'node:crypto';
2
+ import { writeFile, readFile, readdir } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { argon2id } from '@noble/hashes/argon2';
5
+ import { sha256Hex } from '../crypto/hash.js';
6
+ import { initKeyRotationState } from '../crypto/rotation.js';
7
+ import { multibaseEncode } from '../encoding/base58.js';
8
+ import { bytesToBase64, base64ToBytes, utf8ToBytes } from '../utils/bytes.js';
9
+ import { ensureStorageDirs } from './paths.js';
10
+ export const DEFAULT_KDF_PARAMS = {
11
+ t: 3,
12
+ m: 65536,
13
+ p: 4,
14
+ dkLen: 32,
15
+ };
16
+ export const MIN_PASSPHRASE_LENGTH = 12;
17
+ function deriveKey(passphrase, salt, params) {
18
+ return argon2id(passphrase, salt, {
19
+ t: params.t,
20
+ m: params.m,
21
+ p: params.p,
22
+ dkLen: params.dkLen,
23
+ });
24
+ }
25
+ function assertPassphrase(passphrase) {
26
+ if (passphrase.length < MIN_PASSPHRASE_LENGTH) {
27
+ throw new Error(`Passphrase must be at least ${MIN_PASSPHRASE_LENGTH} characters`);
28
+ }
29
+ }
30
+ function encryptAes256Gcm(key, plaintext) {
31
+ const nonce = randomBytes(12);
32
+ const cipher = createCipheriv('aes-256-gcm', key, nonce);
33
+ const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
34
+ const tag = cipher.getAuthTag();
35
+ return {
36
+ nonce: new Uint8Array(nonce),
37
+ ciphertext: new Uint8Array(ciphertext),
38
+ tag: new Uint8Array(tag),
39
+ };
40
+ }
41
+ function decryptAes256Gcm(key, nonce, ciphertext, tag) {
42
+ const decipher = createDecipheriv('aes-256-gcm', key, nonce);
43
+ decipher.setAuthTag(Buffer.from(tag));
44
+ const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
45
+ return new Uint8Array(plaintext);
46
+ }
47
+ export function keyIdFromPublicKey(publicKey) {
48
+ const multibase = multibaseEncode(publicKey);
49
+ return sha256Hex(utf8ToBytes(multibase));
50
+ }
51
+ export function encryptPrivateKey(privateKey, passphrase, params = DEFAULT_KDF_PARAMS) {
52
+ assertPassphrase(passphrase);
53
+ const salt = randomBytes(16);
54
+ const key = deriveKey(passphrase, salt, params);
55
+ const { nonce, ciphertext, tag } = encryptAes256Gcm(key, privateKey);
56
+ return {
57
+ kdf: 'argon2id',
58
+ params,
59
+ salt: bytesToBase64(salt),
60
+ nonce: bytesToBase64(nonce),
61
+ ciphertext: bytesToBase64(ciphertext),
62
+ tag: bytesToBase64(tag),
63
+ };
64
+ }
65
+ export function decryptPrivateKey(encrypted, passphrase) {
66
+ assertPassphrase(passphrase);
67
+ const salt = base64ToBytes(encrypted.salt);
68
+ const key = deriveKey(passphrase, salt, encrypted.params);
69
+ const nonce = base64ToBytes(encrypted.nonce);
70
+ const ciphertext = base64ToBytes(encrypted.ciphertext);
71
+ const tag = base64ToBytes(encrypted.tag);
72
+ return decryptAes256Gcm(key, nonce, ciphertext, tag);
73
+ }
74
+ export function createKeyRecord(publicKey, privateKey, passphrase, params = DEFAULT_KDF_PARAMS) {
75
+ assertPassphrase(passphrase);
76
+ const publicKeyMb = multibaseEncode(publicKey);
77
+ const createdAt = new Date().toISOString();
78
+ return {
79
+ v: 1,
80
+ id: keyIdFromPublicKey(publicKey),
81
+ type: 'ed25519',
82
+ publicKey: publicKeyMb,
83
+ encryptedPrivateKey: encryptPrivateKey(privateKey, passphrase, params),
84
+ createdAt,
85
+ rotation: initKeyRotationState(createdAt),
86
+ };
87
+ }
88
+ export async function saveKeyRecord(paths, record) {
89
+ await ensureStorageDirs(paths);
90
+ const filename = join(paths.keys, `${record.id}.json`);
91
+ await writeFile(filename, JSON.stringify(record, null, 2), 'utf8');
92
+ return filename;
93
+ }
94
+ export async function loadKeyRecord(paths, id) {
95
+ const filename = join(paths.keys, `${id}.json`);
96
+ const raw = await readFile(filename, 'utf8');
97
+ return JSON.parse(raw);
98
+ }
99
+ export async function listKeyRecords(paths) {
100
+ await ensureStorageDirs(paths);
101
+ let entries = [];
102
+ try {
103
+ entries = await readdir(paths.keys);
104
+ }
105
+ catch (error) {
106
+ if (error.code === 'ENOENT') {
107
+ return [];
108
+ }
109
+ throw error;
110
+ }
111
+ const records = [];
112
+ for (const entry of entries) {
113
+ if (!entry.endsWith('.json')) {
114
+ continue;
115
+ }
116
+ try {
117
+ const raw = await readFile(join(paths.keys, entry), 'utf8');
118
+ records.push(JSON.parse(raw));
119
+ }
120
+ catch {
121
+ continue;
122
+ }
123
+ }
124
+ return records;
125
+ }
126
+ export async function decryptKeyRecord(record, passphrase) {
127
+ return decryptPrivateKey(record.encryptedPrivateKey, passphrase);
128
+ }
129
+ //# sourceMappingURL=keystore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.js","sourceRoot":"","sources":["../../src/storage/keystore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface KVStore {
2
+ get(key: string): Promise<Uint8Array | undefined>;
3
+ put(key: string, value: Uint8Array): Promise<void>;
4
+ del(key: string): Promise<void>;
5
+ iterator(prefix?: string): AsyncIterable<{
6
+ key: string;
7
+ value: Uint8Array;
8
+ }>;
9
+ close?(): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=kv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/storage/kv.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAClD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;IAC7E,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=kv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../src/storage/kv.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { KVStore } from './kv.js';
2
+ export interface LevelStoreOptions {
3
+ path: string;
4
+ }
5
+ export declare class LevelStore implements KVStore {
6
+ private readonly db;
7
+ constructor(options: LevelStoreOptions);
8
+ get(key: string): Promise<Uint8Array | undefined>;
9
+ put(key: string, value: Uint8Array): Promise<void>;
10
+ del(key: string): Promise<void>;
11
+ iterator(prefix?: string): AsyncIterable<{
12
+ key: string;
13
+ value: Uint8Array;
14
+ }>;
15
+ close(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=level.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level.d.ts","sourceRoot":"","sources":["../../src/storage/level.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAYD,qBAAa,UAAW,YAAW,OAAO;IACxC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA4B;gBAEnC,OAAO,EAAE,iBAAiB;IAIhC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAejD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9B,QAAQ,CAAC,MAAM,SAAK,GAAG,aAAa,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC;IAkBzE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}