keri 0.0.0-dev.0ddd65e → 0.0.0-dev.7be936b

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 (73) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/dist/cli/main.d.ts +1 -1
  4. package/dist/cli/main.js +159 -56
  5. package/dist/cli/main.js.map +1 -0
  6. package/dist/client.d.ts +21 -0
  7. package/dist/client.js +72 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/controller.d.ts +64 -0
  10. package/dist/controller.js +472 -0
  11. package/dist/controller.js.map +1 -0
  12. package/dist/db/storage-sqlite.d.ts +12 -0
  13. package/dist/db/storage-sqlite.js +53 -0
  14. package/dist/db/storage-sqlite.js.map +1 -0
  15. package/dist/db/storage.d.ts +18 -0
  16. package/dist/db/storage.js +29 -0
  17. package/dist/db/storage.js.map +1 -0
  18. package/dist/events/event-store.d.ts +126 -0
  19. package/dist/events/event-store.js +242 -0
  20. package/dist/events/event-store.js.map +1 -0
  21. package/dist/events/events.d.ts +248 -0
  22. package/dist/events/events.js +184 -0
  23. package/dist/events/events.js.map +1 -0
  24. package/dist/keystore/encrypt.d.ts +10 -2
  25. package/dist/keystore/encrypt.js +26 -25
  26. package/dist/keystore/encrypt.js.map +1 -0
  27. package/dist/keystore/keystore.d.ts +16 -2
  28. package/dist/keystore/keystore.js +70 -1
  29. package/dist/keystore/keystore.js.map +1 -0
  30. package/dist/main.d.ts +6 -2
  31. package/dist/main.js +7 -2
  32. package/dist/main.js.map +1 -0
  33. package/package.json +27 -24
  34. package/dist/data-type.d.ts +0 -9
  35. package/dist/data-type.js +0 -1
  36. package/dist/db/event-store.d.ts +0 -20
  37. package/dist/db/event-store.js +0 -1
  38. package/dist/db/sqlite-db.d.ts +0 -13
  39. package/dist/db/sqlite-db.js +0 -123
  40. package/dist/events/common.d.ts +0 -6
  41. package/dist/events/common.js +0 -1
  42. package/dist/events/incept.d.ts +0 -26
  43. package/dist/events/incept.js +0 -28
  44. package/dist/events/interact.d.ts +0 -17
  45. package/dist/events/interact.js +0 -21
  46. package/dist/events/main.d.ts +0 -4
  47. package/dist/events/main.js +0 -4
  48. package/dist/events/reply.d.ts +0 -15
  49. package/dist/events/reply.js +0 -20
  50. package/dist/keri/habitat.d.ts +0 -20
  51. package/dist/keri/habitat.js +0 -130
  52. package/dist/keri/keri.d.ts +0 -26
  53. package/dist/keri/keri.js +0 -43
  54. package/dist/keystore/keystore-fs.d.ts +0 -13
  55. package/dist/keystore/keystore-fs.js +0 -50
  56. package/dist/keystore/keystore-web.d.ts +0 -12
  57. package/dist/keystore/keystore-web.js +0 -48
  58. package/dist/main-common.d.ts +0 -9
  59. package/dist/main-common.js +0 -8
  60. package/dist/main-web.d.ts +0 -2
  61. package/dist/main-web.js +0 -2
  62. package/dist/parser/base64.d.ts +0 -6
  63. package/dist/parser/base64.js +0 -74
  64. package/dist/parser/buffered-reader.d.ts +0 -5
  65. package/dist/parser/buffered-reader.js +0 -47
  66. package/dist/parser/cesr-encoding.d.ts +0 -34
  67. package/dist/parser/cesr-encoding.js +0 -158
  68. package/dist/parser/codes.d.ts +0 -143
  69. package/dist/parser/codes.js +0 -266
  70. package/dist/parser/parser.d.ts +0 -16
  71. package/dist/parser/parser.js +0 -161
  72. package/dist/parser/version.d.ts +0 -11
  73. package/dist/parser/version.js +0 -56
@@ -0,0 +1,472 @@
1
+ import { cesr, CountCode_10, encodeAttachmentsV1, encodeBase64Int, encodeCounter, encodeString, IndexCode, MatterCode, } from "cesr/__unstable__";
2
+ import { ControllerEventStore, } from "./events/event-store.js";
3
+ import { keri, formatDate, } from "./events/events.js";
4
+ import { Client, parseKeyEvents } from "./client.js";
5
+ function encodeHexNumber(num) {
6
+ return `${MatterCode.Salt_128}${encodeBase64Int(parseInt(num, 16), 22)}`;
7
+ }
8
+ function serializeSignatures(sigs, seal) {
9
+ const result = [];
10
+ if (sigs && sigs.length > 0) {
11
+ if (seal && seal.i && seal.s && seal.d) {
12
+ result.push(encodeCounter({
13
+ code: CountCode_10.TransIdxSigGroups,
14
+ count: 1,
15
+ }));
16
+ result.push(seal.i);
17
+ result.push(encodeHexNumber(seal.s));
18
+ result.push(seal.d);
19
+ }
20
+ result.push(encodeCounter({ code: CountCode_10.ControllerIdxSigs, count: sigs.length }));
21
+ result.push(...sigs);
22
+ }
23
+ return result.join("");
24
+ }
25
+ function serializeWitnessSignatures(receipts, backers) {
26
+ const result = [];
27
+ if (receipts.length > 0) {
28
+ result.push(encodeCounter({ code: CountCode_10.WitnessIdxSigs, count: receipts.length }));
29
+ for (const sig of receipts) {
30
+ const signature = cesr.decode(sig.signature);
31
+ const index = backers.indexOf(sig.backer);
32
+ if (index === -1) {
33
+ throw new Error(`Unknown backer ${sig.backer}`);
34
+ }
35
+ result.push(cesr.encodeIndexer({
36
+ code: getIndexedCode(signature.code),
37
+ raw: signature.raw,
38
+ index: index,
39
+ }));
40
+ }
41
+ }
42
+ return result.join("");
43
+ }
44
+ function serializeReceipts(receipts) {
45
+ const result = [];
46
+ if (receipts.length > 0) {
47
+ result.push(encodeCounter({ code: CountCode_10.NonTransReceiptCouples, count: receipts.length }));
48
+ result.push(...receipts.map((receipt) => receipt.backer + receipt.signature));
49
+ }
50
+ return result.join("");
51
+ }
52
+ function serializePathedGroup(path, attachments) {
53
+ const result = [];
54
+ result.push(encodeString(`-${path.join("-")}`));
55
+ result.push(...attachments);
56
+ return (encodeCounter({
57
+ code: CountCode_10.PathedMaterialGroup,
58
+ count: result.join("").length / 4,
59
+ }) + result.join(""));
60
+ }
61
+ function serializeAttachments(attachments) {
62
+ const result = attachments.join("");
63
+ return `${encodeAttachmentsV1(result.length / 4)}${result}`;
64
+ }
65
+ export function serializeEventSeal(seal) {
66
+ return [
67
+ encodeCounter({ code: CountCode_10.SealSourceTriples, count: 1 }),
68
+ seal.i,
69
+ encodeHexNumber(seal.s),
70
+ seal.d,
71
+ ].join("");
72
+ }
73
+ function serializeDigestSeal(seal) {
74
+ return [encodeCounter({ code: CountCode_10.SealSourceCouples, count: 1 }), encodeHexNumber(seal.s), seal.d].join("");
75
+ }
76
+ export class Controller {
77
+ #keystore;
78
+ #store;
79
+ get store() {
80
+ return this.#store;
81
+ }
82
+ constructor(deps) {
83
+ this.#store = new ControllerEventStore(deps.storage);
84
+ this.#keystore = deps.keystore;
85
+ }
86
+ async createIdentifier(args = {}) {
87
+ const keys = args.keys ?? [await this.#keystore.incept()];
88
+ const event = keri.incept({
89
+ k: keys.map((key) => key.current),
90
+ n: keys.map((key) => key.next),
91
+ b: args.wits,
92
+ bt: args.toad ? args.toad.toString(16) : undefined,
93
+ });
94
+ const sigs = await this.sign(event, keys.map((key) => key.current));
95
+ await this.#store.save({
96
+ event,
97
+ signatures: sigs,
98
+ });
99
+ await this.submit(event, sigs);
100
+ return await this.#store.state(event.i);
101
+ }
102
+ async interact(args) {
103
+ const state = await this.state(args.aid);
104
+ const sn = (parseInt(state.s ?? "0", 16) + 1).toString(16);
105
+ const event = keri.interact({ i: state.i, p: state.d, s: sn, a: [args.data] });
106
+ const sigs = await this.sign(event, state.k);
107
+ await this.#store.save({
108
+ event,
109
+ signatures: sigs,
110
+ });
111
+ await this.submit(event, sigs);
112
+ return event;
113
+ }
114
+ async createRegistry(args) {
115
+ const registry = keri.registry({
116
+ ii: args.owner,
117
+ n: args.nonce,
118
+ });
119
+ const anchor = await this.interact({
120
+ aid: args.owner,
121
+ data: {
122
+ d: registry.d,
123
+ s: registry.s,
124
+ i: registry.i,
125
+ },
126
+ });
127
+ const state = await this.state(args.owner);
128
+ for (const wit of state.b) {
129
+ const endpoint = await this.getClient(wit);
130
+ const attachment = serializeAttachments([serializeDigestSeal(anchor)]);
131
+ await endpoint.sendMessage({ event: registry, attachment });
132
+ }
133
+ await this.#store.save({
134
+ event: registry,
135
+ seal: {
136
+ i: anchor.i,
137
+ s: anchor.s,
138
+ d: anchor.d,
139
+ },
140
+ });
141
+ return registry;
142
+ }
143
+ async createCredential(args) {
144
+ const [registry] = (await this.#store.list(args.registryId));
145
+ if (!registry) {
146
+ throw new Error(`Registry ${args.registryId} not found`);
147
+ }
148
+ const state = await this.state(registry.event.ii);
149
+ const acdc = keri.credential({
150
+ i: state.i,
151
+ ri: registry.event.i,
152
+ s: args.schemaId,
153
+ u: args.salt,
154
+ a: {
155
+ i: args.holder,
156
+ dt: formatDate(args.timestamp ?? new Date()),
157
+ ...args.data,
158
+ },
159
+ r: args.rules,
160
+ e: args.edges,
161
+ });
162
+ const iss = keri.issue({
163
+ i: acdc.d,
164
+ ri: registry.event.i,
165
+ dt: formatDate(args.timestamp ?? new Date()),
166
+ });
167
+ const anchor = await this.interact({
168
+ aid: state.i,
169
+ data: {
170
+ d: iss.d,
171
+ s: iss.s,
172
+ i: iss.i,
173
+ },
174
+ });
175
+ for (const wit of state.b) {
176
+ const client = await this.getClient(wit);
177
+ const attachment = serializeAttachments([serializeDigestSeal(anchor)]);
178
+ await client.sendMessage({ event: iss, attachment });
179
+ }
180
+ await this.#store.save({
181
+ event: acdc,
182
+ seal: iss,
183
+ });
184
+ await this.#store.save({
185
+ event: iss,
186
+ seal: anchor,
187
+ });
188
+ return acdc;
189
+ }
190
+ async resolve(oobi) {
191
+ const response = await fetch(oobi);
192
+ if (!response.ok) {
193
+ throw new Error(`Failed to fetch oobi: ${response.status} ${response.statusText}`);
194
+ }
195
+ if (!response.body) {
196
+ throw new Error(`No body in response`);
197
+ }
198
+ for await (const event of parseKeyEvents(response.body)) {
199
+ await this.#store.save(event);
200
+ }
201
+ }
202
+ async getClient(cid) {
203
+ // const
204
+ const mailbox = await this.#store.endrole(cid, "mailbox");
205
+ const agent = await this.#store.endrole(cid, "agent");
206
+ const controller = await this.#store.endrole(cid, "controller");
207
+ const event = controller || agent || mailbox;
208
+ if (!event || !event.eid || typeof event.eid !== "string" || typeof event.role !== "string") {
209
+ throw new Error(`No valid end role aid found for aid ${cid}`);
210
+ }
211
+ return new Client({ endpoint: await this.getLocation(event.eid), role: event.role });
212
+ }
213
+ async getLocation(aid) {
214
+ const location = await this.#store.location(aid);
215
+ if (!location) {
216
+ throw new Error(`No valid location found for aid ${aid}`);
217
+ }
218
+ if (!location.eid || typeof location.eid !== "string") {
219
+ throw new Error(`No valid EID found for aid ${aid}`);
220
+ }
221
+ if (!location.scheme || typeof location.scheme !== "string") {
222
+ throw new Error(`No valid scheme found for aid ${aid}`);
223
+ }
224
+ return {
225
+ url: new URL(location.url).toString(),
226
+ scheme: location.scheme,
227
+ eid: location.eid,
228
+ };
229
+ }
230
+ async submit(event, signatures) {
231
+ if (!event || !("i" in event && typeof event.i === "string")) {
232
+ throw new Error("No such event");
233
+ }
234
+ const state = await this.state(event.i);
235
+ const receipts = {};
236
+ for (const wit of state.b) {
237
+ const client = await this.getClient(wit);
238
+ const attachment = serializeAttachments([serializeSignatures(signatures)]);
239
+ const response = await client.getReceipt({ event, attachment });
240
+ await this.#store.save(response);
241
+ receipts[wit] = response;
242
+ }
243
+ for (const wit of state.b) {
244
+ const client = await this.getClient(wit);
245
+ for (const [other, receipt] of Object.entries(receipts)) {
246
+ if (other === wit) {
247
+ continue;
248
+ }
249
+ const attachment = serializeAttachments([serializeReceipts(receipt.receipts)]);
250
+ await client.sendMessage({ event: receipt.event, attachment });
251
+ }
252
+ }
253
+ }
254
+ async state(said) {
255
+ if (!said || typeof said !== "string") {
256
+ throw new Error(`said must be a string, got ${said}`);
257
+ }
258
+ const result = await this.#store.state(said);
259
+ if (!result) {
260
+ throw new Error(`No state found for said ${said}`);
261
+ }
262
+ return result;
263
+ }
264
+ async list(id) {
265
+ return this.#store.list(id);
266
+ }
267
+ async sendCredentialArficats(credential, recipient) {
268
+ const client = await this.getClient(recipient);
269
+ const state = await this.state(credential.i);
270
+ if (credential.e) {
271
+ for (const [, edge] of Object.entries(credential.e)) {
272
+ if (typeof edge === "object" && "n" in edge && typeof edge.n === "string") {
273
+ const source = await this.store.get(edge.n);
274
+ if (source && source.event.v.startsWith("ACDC")) {
275
+ await this.sendCredentialArficats(source.event, recipient);
276
+ if (source.seal && source.event.i) {
277
+ await this.forward(client, {
278
+ event: source.event,
279
+ recipient: recipient,
280
+ sender: await this.state(source.event.i),
281
+ topic: "credential",
282
+ attachment: serializeEventSeal(source.seal),
283
+ });
284
+ }
285
+ }
286
+ }
287
+ }
288
+ }
289
+ // Introduce sender to mailbox
290
+ for (const event of await this.#store.list(state.i)) {
291
+ if ("t" in event.event) {
292
+ await client.sendMessage({
293
+ event: event.event,
294
+ attachment: serializeAttachments([
295
+ serializeSignatures(event.signatures),
296
+ serializeWitnessSignatures(event.receipts, state.b),
297
+ encodeCounter({
298
+ code: CountCode_10.FirstSeenReplayCouples,
299
+ count: 1,
300
+ }),
301
+ encodeHexNumber(event.event.s ?? "0"),
302
+ cesr.encodeDate(event.timestamp),
303
+ ]),
304
+ });
305
+ }
306
+ }
307
+ // Introduce sender to recipient
308
+ for (const event of await this.#store.list(state.i)) {
309
+ if ("t" in event.event) {
310
+ await this.forward(client, {
311
+ event: event.event,
312
+ recipient: recipient,
313
+ sender: state,
314
+ topic: "credential",
315
+ attachment: serializeAttachments([
316
+ serializeSignatures(event.signatures),
317
+ serializeWitnessSignatures(event.receipts, state.b),
318
+ encodeCounter({
319
+ code: CountCode_10.FirstSeenReplayCouples,
320
+ count: 1,
321
+ }),
322
+ encodeHexNumber(event.event.s ?? "0"),
323
+ cesr.encodeDate(event.timestamp),
324
+ ]),
325
+ });
326
+ }
327
+ }
328
+ // Introduce registry to recipient
329
+ for (const event of await this.#store.list(credential.ri)) {
330
+ if (!event.seal) {
331
+ throw new Error("No seal found for registry");
332
+ }
333
+ await this.forward(client, {
334
+ event: event.event,
335
+ recipient,
336
+ sender: state,
337
+ topic: "credential",
338
+ attachment: serializeAttachments([serializeDigestSeal(event.seal)]),
339
+ });
340
+ }
341
+ // Introduce transaction to recipient
342
+ for (const event of await this.#store.list(credential.d)) {
343
+ if (!event.seal) {
344
+ throw new Error("No seal found for issuance");
345
+ }
346
+ await this.forward(client, {
347
+ event: event.event,
348
+ recipient,
349
+ sender: state,
350
+ topic: "credential",
351
+ attachment: serializeAttachments([serializeDigestSeal(event.seal)]),
352
+ });
353
+ }
354
+ }
355
+ async grant(args) {
356
+ const state = await this.state(args.credential.i);
357
+ const [registry] = (await this.list(args.credential.ri));
358
+ if (!registry) {
359
+ throw new Error(`Registry not found for said ${args.credential.ri}`);
360
+ }
361
+ const recipient = args.recipient || args.credential.a.i;
362
+ if (!recipient) {
363
+ throw new Error(`No recipient specified and the credential has no issuee`);
364
+ }
365
+ const client = await this.getClient(recipient);
366
+ const seal = {
367
+ i: state.i,
368
+ s: state.ee.s,
369
+ d: state.ee.d,
370
+ };
371
+ const transactions = await this.#store.list(args.credential.d);
372
+ const [iss] = transactions;
373
+ if (!iss) {
374
+ throw new Error(`No issuance found for said ${args.credential.d}`);
375
+ }
376
+ if (!iss.seal) {
377
+ throw new Error(`No seal found for issuance ${iss.event.d}`);
378
+ }
379
+ const anchor = await this.#store.get(iss.seal.d);
380
+ if (!anchor) {
381
+ throw new Error(`No anchor found for issuance ${iss.event.d}`);
382
+ }
383
+ const grant = keri.exchange({
384
+ i: state.i,
385
+ r: "/ipex/grant",
386
+ dt: args.timestamp,
387
+ q: {},
388
+ a: {
389
+ m: "",
390
+ i: recipient,
391
+ },
392
+ e: {
393
+ acdc: args.credential,
394
+ iss: iss.event,
395
+ anc: anchor.event,
396
+ },
397
+ });
398
+ const grantsigs = await this.sign(grant, state.k);
399
+ await this.forward(client, {
400
+ event: grant,
401
+ recipient,
402
+ sender: state,
403
+ topic: "credential",
404
+ timestamp: args.timestamp,
405
+ attachment: [
406
+ serializeSignatures(grantsigs, seal),
407
+ serializePathedGroup(["e", "acdc"], [serializeEventSeal(iss.event)]),
408
+ serializePathedGroup(["e", "iss"], [serializeAttachments([serializeDigestSeal(anchor.event)])]),
409
+ serializePathedGroup(["e", "anc"], [
410
+ serializeAttachments([
411
+ serializeSignatures(anchor.signatures),
412
+ serializeWitnessSignatures(anchor.receipts, state.b),
413
+ encodeCounter({
414
+ code: CountCode_10.FirstSeenReplayCouples,
415
+ count: 1,
416
+ }),
417
+ encodeHexNumber(anchor.event.s ?? "0"),
418
+ cesr.encodeDate(anchor.timestamp),
419
+ ]),
420
+ ]),
421
+ ].join(""),
422
+ });
423
+ }
424
+ async forward(client, args) {
425
+ if (client.role !== "mailbox" && client.role !== "witness") {
426
+ const sigs = await this.sign(args.event, args.sender.k);
427
+ const attachments = [args.attachment ? [args.attachment] : [serializeSignatures(sigs)]].join("");
428
+ await client.sendMessage({ event: args.event, attachment: attachments });
429
+ return;
430
+ }
431
+ const seal = {
432
+ i: args.sender.i,
433
+ s: args.sender.ee.s,
434
+ d: args.sender.ee.d,
435
+ };
436
+ const fwd = keri.exchange({
437
+ i: args.sender.i,
438
+ r: "/fwd",
439
+ dt: args.timestamp,
440
+ // rp: args.recipient,
441
+ q: { pre: args.recipient, topic: args.topic },
442
+ a: {},
443
+ e: {
444
+ evt: args.event,
445
+ },
446
+ });
447
+ const fwdsigs = await this.sign(fwd, args.sender.k);
448
+ const evtsigs = await this.sign(args.event, args.sender.k);
449
+ const attachments = [
450
+ serializeSignatures(fwdsigs, seal),
451
+ serializePathedGroup(["e", "evt"], args.attachment ? [args.attachment] : [serializeSignatures(evtsigs, seal)]),
452
+ ].join("");
453
+ await client.sendMessage({ event: fwd, attachment: attachments });
454
+ }
455
+ async sign(event, keys) {
456
+ const encoder = new TextEncoder();
457
+ const payload = encoder.encode(JSON.stringify(event));
458
+ const sigs = await Promise.all(keys.map((key, idx) => this.#keystore.sign(key, payload, idx)));
459
+ return sigs;
460
+ }
461
+ }
462
+ function getIndexedCode(code) {
463
+ switch (code) {
464
+ case MatterCode.Ed25519_Sig:
465
+ return IndexCode.Ed25519_Sig;
466
+ case MatterCode.Ed448_Sig:
467
+ return IndexCode.Ed448_Sig;
468
+ default:
469
+ throw new Error(`Unsupported indexed signature type: ${code}`);
470
+ }
471
+ }
472
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { KeyValueStorage } from "../events/event-store.ts";
2
+ export interface SqliteStorageOptions {
3
+ filename?: string;
4
+ }
5
+ export declare class SqliteStorage implements KeyValueStorage {
6
+ #private;
7
+ constructor(options?: SqliteStorageOptions);
8
+ clear(): void;
9
+ init(): void;
10
+ get(key: string): Promise<string | null>;
11
+ set(key: string, value: string): Promise<void>;
12
+ }
@@ -0,0 +1,53 @@
1
+ import { DatabaseSync } from "node:sqlite";
2
+ import { existsSync, mkdirSync } from "node:fs";
3
+ import { dirname } from "node:path";
4
+ function ensureDirSync(filename) {
5
+ const dir = dirname(filename);
6
+ if (!existsSync(dir)) {
7
+ mkdirSync(dir);
8
+ }
9
+ }
10
+ export class SqliteStorage {
11
+ #db;
12
+ constructor(options = {}) {
13
+ if (options.filename) {
14
+ ensureDirSync(options.filename);
15
+ }
16
+ this.#db = new DatabaseSync(options.filename ?? ":memory:");
17
+ }
18
+ clear() {
19
+ this.#db.exec("DELETE FROM events;");
20
+ }
21
+ init() {
22
+ this.#db.exec([
23
+ "CREATE TABLE IF NOT EXISTS key_events (",
24
+ " event_id TEXT PRIMARY KEY,",
25
+ " event_data JSON NOT NULL",
26
+ ");",
27
+ ].join("\n"));
28
+ }
29
+ async get(key) {
30
+ const statement = ["SELECT event_data FROM key_events", "WHERE event_id = $event_id", "LIMIT 1;"].join("\n");
31
+ const result = this.#db.prepare(statement).get({ event_id: key });
32
+ if (!result || typeof result !== "object") {
33
+ return null;
34
+ }
35
+ if (!("event_data" in result)) {
36
+ throw new Error(`Row does not contain key: ${key}`);
37
+ }
38
+ const value = result["event_data"];
39
+ if (typeof value !== "string") {
40
+ throw new Error(`Row key "${key}" is not a string ${typeof value}`);
41
+ }
42
+ return value;
43
+ }
44
+ async set(key, value) {
45
+ const statement = [
46
+ "INSERT INTO key_events (event_id, event_data)",
47
+ "VALUES ($event_id, $event_data)",
48
+ "ON CONFLICT(event_id) DO UPDATE SET event_data = $event_data;",
49
+ ].join("\n");
50
+ this.#db.prepare(statement).run({ event_id: key, event_data: value ?? null });
51
+ }
52
+ }
53
+ //# sourceMappingURL=storage-sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-sqlite.js","sourceRoot":"","sources":["../../src/db/storage-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,aAAa;IACxB,GAAG,CAAe;IAElB,YAAY,UAAgC,EAAE;QAC5C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACvC,CAAC;IAED,IAAI;QACF,IAAI,CAAC,GAAG,CAAC,IAAI,CACX;YACE,yCAAyC;YACzC,8BAA8B;YAC9B,4BAA4B;YAC5B,IAAI;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,SAAS,GAAG,CAAC,mCAAmC,EAAE,4BAA4B,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7G,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QAEnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,qBAAqB,OAAO,KAAK,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,MAAM,SAAS,GAAG;YAChB,+CAA+C;YAC/C,iCAAiC;YACjC,+DAA+D;SAChE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { KeyValueStorage } from "../events/event-store.ts";
2
+ export interface Storage {
3
+ getItem(key: string): string | null;
4
+ setItem(key: string, value: string): void;
5
+ }
6
+ export declare class WebStorage implements KeyValueStorage {
7
+ #private;
8
+ constructor(storage: Storage);
9
+ get(key: string): Promise<string | null>;
10
+ set(key: string, value: string): Promise<void>;
11
+ }
12
+ export declare class MapStore implements KeyValueStorage {
13
+ #private;
14
+ constructor();
15
+ clear(): void;
16
+ get(key: string): Promise<string | null>;
17
+ set(key: string, value: string): Promise<void>;
18
+ }
@@ -0,0 +1,29 @@
1
+ export class WebStorage {
2
+ #storage;
3
+ constructor(storage) {
4
+ this.#storage = storage;
5
+ }
6
+ async get(key) {
7
+ return this.#storage.getItem(key);
8
+ }
9
+ async set(key, value) {
10
+ this.#storage.setItem(key, value);
11
+ }
12
+ }
13
+ export class MapStore {
14
+ #map;
15
+ constructor() {
16
+ this.#map = new Map();
17
+ }
18
+ clear() {
19
+ this.#map.clear();
20
+ }
21
+ async get(key) {
22
+ const result = this.#map.get(key);
23
+ return result ?? null;
24
+ }
25
+ async set(key, value) {
26
+ this.#map.set(key, value);
27
+ }
28
+ }
29
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/db/storage.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,UAAU;IACrB,QAAQ,CAAU;IAElB,YAAY,OAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,QAAQ;IACnB,IAAI,CAAsB;IAE1B;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;CACF"}