@welshman/app 0.0.1 → 0.0.3

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 (105) hide show
  1. package/build/src/collection.cjs +53 -0
  2. package/build/src/collection.cjs.map +1 -0
  3. package/build/src/collection.d.ts +15 -0
  4. package/build/src/collection.mjs +49 -0
  5. package/build/src/collection.mjs.map +1 -0
  6. package/build/src/context.cjs +38 -0
  7. package/build/src/context.cjs.map +1 -0
  8. package/build/src/context.d.ts +30 -0
  9. package/build/src/context.mjs +33 -0
  10. package/build/src/context.mjs.map +1 -0
  11. package/build/src/core.cjs +54 -0
  12. package/build/src/core.cjs.map +1 -0
  13. package/build/src/core.d.ts +14 -0
  14. package/build/src/core.mjs +49 -0
  15. package/build/src/core.mjs.map +1 -0
  16. package/build/src/follows.cjs +27 -0
  17. package/build/src/follows.cjs.map +1 -0
  18. package/build/src/follows.d.ts +9 -0
  19. package/build/src/follows.mjs +23 -0
  20. package/build/src/follows.mjs.map +1 -0
  21. package/build/src/freshness.cjs +21 -0
  22. package/build/src/freshness.cjs.map +1 -0
  23. package/build/src/freshness.d.ts +8 -0
  24. package/build/src/freshness.mjs +14 -0
  25. package/build/src/freshness.mjs.map +1 -0
  26. package/build/src/handles.cjs +85 -0
  27. package/build/src/handles.cjs.map +1 -0
  28. package/build/src/handles.d.ts +24 -0
  29. package/build/src/handles.mjs +77 -0
  30. package/build/src/handles.mjs.map +1 -0
  31. package/build/src/index.cjs +17 -2
  32. package/build/src/index.cjs.map +1 -1
  33. package/build/src/index.d.ts +17 -2
  34. package/build/src/index.mjs +17 -2
  35. package/build/src/mutes.cjs +27 -0
  36. package/build/src/mutes.cjs.map +1 -0
  37. package/build/src/mutes.d.ts +9 -0
  38. package/build/src/mutes.mjs +23 -0
  39. package/build/src/mutes.mjs.map +1 -0
  40. package/build/src/plaintext.cjs +24 -0
  41. package/build/src/plaintext.cjs.map +1 -0
  42. package/build/src/plaintext.d.ts +8 -0
  43. package/build/src/plaintext.mjs +18 -0
  44. package/build/src/plaintext.mjs.map +1 -0
  45. package/build/src/profiles.cjs +40 -0
  46. package/build/src/profiles.cjs.map +1 -0
  47. package/build/src/profiles.d.ts +12 -0
  48. package/build/src/profiles.mjs +34 -0
  49. package/build/src/profiles.mjs.map +1 -0
  50. package/build/src/relaySelections.cjs +34 -0
  51. package/build/src/relaySelections.cjs.map +1 -0
  52. package/build/src/relaySelections.d.ts +18 -0
  53. package/build/src/relaySelections.mjs +27 -0
  54. package/build/src/relaySelections.mjs.map +1 -0
  55. package/build/src/relays.cjs +116 -0
  56. package/build/src/relays.cjs.map +1 -0
  57. package/build/src/relays.d.ts +28 -0
  58. package/build/src/relays.mjs +109 -0
  59. package/build/src/relays.mjs.map +1 -0
  60. package/build/src/router.cjs +375 -0
  61. package/build/src/router.cjs.map +1 -0
  62. package/build/src/router.d.ts +197 -0
  63. package/build/src/router.mjs +355 -0
  64. package/build/src/router.mjs.map +1 -0
  65. package/build/src/session.cjs +27 -19
  66. package/build/src/session.cjs.map +1 -1
  67. package/build/src/session.d.ts +13 -1
  68. package/build/src/session.mjs +23 -19
  69. package/build/src/session.mjs.map +1 -1
  70. package/build/src/storage.cjs +101 -0
  71. package/build/src/storage.cjs.map +1 -0
  72. package/build/src/storage.d.ts +45 -0
  73. package/build/src/storage.mjs +92 -0
  74. package/build/src/storage.mjs.map +1 -0
  75. package/build/src/thunk.cjs +44 -0
  76. package/build/src/thunk.cjs.map +1 -0
  77. package/build/src/thunk.d.ts +37 -0
  78. package/build/src/thunk.mjs +39 -0
  79. package/build/src/thunk.mjs.map +1 -0
  80. package/build/src/topics.cjs +30 -0
  81. package/build/src/topics.cjs.map +1 -0
  82. package/build/src/topics.d.ts +10 -0
  83. package/build/src/topics.mjs +27 -0
  84. package/build/src/topics.mjs.map +1 -0
  85. package/build/src/util.cjs +62 -0
  86. package/build/src/util.cjs.map +1 -0
  87. package/build/src/util.d.ts +22 -0
  88. package/build/src/util.mjs +47 -0
  89. package/build/src/util.mjs.map +1 -0
  90. package/build/src/zappers.cjs +64 -0
  91. package/build/src/zappers.cjs.map +1 -0
  92. package/build/src/zappers.d.ts +11 -0
  93. package/build/src/zappers.mjs +58 -0
  94. package/build/src/zappers.mjs.map +1 -0
  95. package/package.json +10 -4
  96. package/build/src/relay.cjs +0 -13
  97. package/build/src/relay.cjs.map +0 -1
  98. package/build/src/relay.d.ts +0 -6
  99. package/build/src/relay.mjs +0 -10
  100. package/build/src/relay.mjs.map +0 -1
  101. package/build/src/types.cjs +0 -3
  102. package/build/src/types.cjs.map +0 -1
  103. package/build/src/types.d.ts +0 -15
  104. package/build/src/types.mjs +0 -2
  105. package/build/src/types.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"session.cjs","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":";;;AAAA,wCAAoC;AACpC,uCAA4C;AAC5C,yCAA0C;AAC1C,2CAAkD;AAClD,uCAA4C;AAC5C,6CAAmF;AAGtE,QAAA,MAAM,GAAG,IAAA,kBAAU,EAAC,IAAA,cAAM,EAAgB,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;AAE1D,QAAA,QAAQ,GAAG,IAAA,kBAAU,EAAC,IAAA,cAAM,EAA0B,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;AAEtE,QAAA,OAAO,GAAG,IAAA,kBAAU,EAC/B,IAAA,eAAO,EAAC,CAAC,cAAM,EAAE,gBAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAC7F,CAAA;AAEM,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,gBAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;AAAvD,QAAA,UAAU,cAA6C;AAE7D,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC7C,gBAAQ,CAAC,MAAM,CAAC,IAAA,WAAK,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC/C,cAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,CAAC,CAAA;AAHY,QAAA,UAAU,cAGtB;AAEY,QAAA,UAAU,GAAG,0EAA0E,CAAA;AAEvF,QAAA,SAAS,GAAG,IAAA,aAAO,EAAC,CAAC,OAAgB,EAAE,EAAE;IACpD,QAAQ,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;QACvB,KAAK,WAAW;YACd,OAAO,IAAI,oBAAW,EAAE,CAAA;QAC1B,KAAK,SAAS;YACZ,OAAO,IAAI,oBAAW,CAAC,OAAO,CAAC,MAAO,CAAC,CAAA;QACzC,KAAK,OAAO;YACV,OAAO,IAAI,oBAAW,CAAC,oBAAW,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAO,EAAE,OAAO,CAAC,OAAQ,CAAC,CAAC,CAAA;QAC5F;YACE,OAAO,IAAI,CAAA;KACd;AACH,CAAC,CAAC,CAAA;AAEW,QAAA,MAAM,GAAG,IAAA,kBAAU,EAAC,IAAA,eAAO,EAAC,eAAO,EAAE,iBAAS,CAAC,CAAC,CAAA;AAE7D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE,CAAA;AAEhC,MAAM,CAAC,MAAM,CAAC,oBAAc,EAAE;IAC5B,MAAM,EAAE,KAAK,EAAE,GAAW,EAAE,SAAiB,EAAE,EAAE;QAC/C,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,cAAM,CAAC,GAAG,EAAE,EAAE;YAClD,OAAM;SACP;QAED,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAE7B,MAAM,KAAK,GAAG,MAAM,cAAM,CAAC,GAAG,EAAG,CAAC,IAAI,CACpC,IAAA,kBAAW,EAAC,KAAK,EAAE;YACjB,IAAI,EAAE;gBACJ,CAAC,OAAO,EAAE,GAAG,CAAC;gBACd,CAAC,WAAW,EAAE,SAAS,CAAC;aACzB;SACF,CAAC,CACH,CAAA;QAED,oBAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;QAElD,OAAO,KAAK,CAAA;IACd,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"session.cjs","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,13 @@
1
1
  /// <reference types="svelte" />
2
+ import { type Nip46Handler } from "@welshman/signer";
2
3
  import { Nip46Signer, Nip07Signer, Nip01Signer } from "@welshman/signer";
3
- import type { Session } from "./types";
4
+ export type Session = {
5
+ method: string;
6
+ pubkey: string;
7
+ token?: string;
8
+ secret?: string;
9
+ handler?: Nip46Handler;
10
+ };
4
11
  export declare const pubkey: import("svelte/store").Writable<string | null> & {
5
12
  get: () => string | null;
6
13
  };
@@ -12,8 +19,13 @@ export declare const session: import("svelte/store").Readable<Session | null> &
12
19
  };
13
20
  export declare const getSession: (pubkey: string) => Session;
14
21
  export declare const addSession: (session: Session) => void;
22
+ export declare const putSession: (session: Session) => void;
23
+ export declare const updateSession: (pubkey: string, f: (session: Session) => Session) => void;
24
+ export declare const dropSession: (pubkey: string) => void;
15
25
  export declare const nip46Perms = "sign_event:22242,nip04_encrypt,nip04_decrypt,nip44_encrypt,nip44_decrypt";
16
26
  export declare const getSigner: (...args: any[]) => Nip07Signer | Nip01Signer | Nip46Signer | null;
17
27
  export declare const signer: import("svelte/store").Readable<Nip07Signer | Nip01Signer | Nip46Signer | null> & {
18
28
  get: () => Nip07Signer | Nip01Signer | Nip46Signer | null;
19
29
  };
30
+ export declare const authChallenges: Set<unknown>;
31
+ export declare const onAuth: (url: string, challenge: string) => Promise<any>;
@@ -1,8 +1,7 @@
1
1
  import { derived } from "svelte/store";
2
- import { memoize, assoc } from "@welshman/lib";
2
+ import { ctx, memoize, omit, equals, assoc } from "@welshman/lib";
3
3
  import { createEvent } from "@welshman/util";
4
4
  import { withGetter, synced } from "@welshman/store";
5
- import { NetworkContext } from "@welshman/net";
6
5
  import { Nip46Broker, Nip46Signer, Nip07Signer, Nip01Signer } from "@welshman/signer";
7
6
  export const pubkey = withGetter(synced("pubkey", null));
8
7
  export const sessions = withGetter(synced("sessions", {}));
@@ -12,6 +11,13 @@ export const addSession = (session) => {
12
11
  sessions.update(assoc(session.pubkey, session));
13
12
  pubkey.set(session.pubkey);
14
13
  };
14
+ export const putSession = (session) => {
15
+ if (!equals(getSession(session.pubkey), session)) {
16
+ sessions.update(assoc(session.pubkey, session));
17
+ }
18
+ };
19
+ export const updateSession = (pubkey, f) => putSession(f(getSession(pubkey)));
20
+ export const dropSession = (pubkey) => sessions.update($sessions => omit([pubkey], $sessions));
15
21
  export const nip46Perms = "sign_event:22242,nip04_encrypt,nip04_decrypt,nip44_encrypt,nip44_decrypt";
16
22
  export const getSigner = memoize((session) => {
17
23
  switch (session === null || session === void 0 ? void 0 : session.method) {
@@ -26,21 +32,19 @@ export const getSigner = memoize((session) => {
26
32
  }
27
33
  });
28
34
  export const signer = withGetter(derived(session, getSigner));
29
- const seenChallenges = new Set();
30
- Object.assign(NetworkContext, {
31
- onAuth: async (url, challenge) => {
32
- if (seenChallenges.has(challenge) || !signer.get()) {
33
- return;
34
- }
35
- seenChallenges.add(challenge);
36
- const event = await signer.get().sign(createEvent(22242, {
37
- tags: [
38
- ["relay", url],
39
- ["challenge", challenge],
40
- ],
41
- }));
42
- NetworkContext.pool.get(url).send(["AUTH", event]);
43
- return event;
44
- },
45
- });
35
+ export const authChallenges = new Set();
36
+ export const onAuth = async (url, challenge) => {
37
+ if (authChallenges.has(challenge) || !signer.get()) {
38
+ return;
39
+ }
40
+ authChallenges.add(challenge);
41
+ const event = await signer.get().sign(createEvent(22242, {
42
+ tags: [
43
+ ["relay", url],
44
+ ["challenge", challenge],
45
+ ],
46
+ }));
47
+ ctx.net.pool.get(url).send(["AUTH", event]);
48
+ return event;
49
+ };
46
50
  //# sourceMappingURL=session.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.mjs","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.mjs","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.storageAdapters = exports.clearStorage = exports.closeStorage = exports.initStorage = exports.initIndexedDbAdapter = exports.bulkDelete = exports.bulkPut = exports.getAll = exports.subs = exports.dead = exports.db = void 0;
4
+ const idb_1 = require("idb");
5
+ const throttle_debounce_1 = require("throttle-debounce");
6
+ const store_1 = require("svelte/store");
7
+ const lib_1 = require("@welshman/lib");
8
+ const store_2 = require("@welshman/store");
9
+ exports.dead = (0, store_2.withGetter)((0, store_1.writable)(false));
10
+ exports.subs = [];
11
+ const getAll = async (name) => {
12
+ const tx = exports.db.transaction(name, "readwrite");
13
+ const store = tx.objectStore(name);
14
+ const result = await store.getAll();
15
+ await tx.done;
16
+ return result;
17
+ };
18
+ exports.getAll = getAll;
19
+ const bulkPut = async (name, data) => {
20
+ const tx = exports.db.transaction(name, "readwrite");
21
+ const store = tx.objectStore(name);
22
+ await Promise.all(data.map(item => store.put(item)));
23
+ await tx.done;
24
+ };
25
+ exports.bulkPut = bulkPut;
26
+ const bulkDelete = async (name, ids) => {
27
+ const tx = exports.db.transaction(name, "readwrite");
28
+ const store = tx.objectStore(name);
29
+ await Promise.all(ids.map(id => store.delete(id)));
30
+ await tx.done;
31
+ };
32
+ exports.bulkDelete = bulkDelete;
33
+ const initIndexedDbAdapter = async (name, adapter) => {
34
+ let prevRecords = await (0, exports.getAll)(name);
35
+ adapter.store.set(prevRecords);
36
+ adapter.store.subscribe((0, throttle_debounce_1.throttle)((0, lib_1.randomInt)(3000, 5000), async (newRecords) => {
37
+ if (exports.dead.get()) {
38
+ return;
39
+ }
40
+ const currentIds = new Set(newRecords.map(item => item[adapter.keyPath]));
41
+ const removedRecords = prevRecords.filter(r => !currentIds.has(r[adapter.keyPath]));
42
+ prevRecords = newRecords;
43
+ if (newRecords.length > 0) {
44
+ await (0, exports.bulkPut)(name, newRecords);
45
+ }
46
+ if (removedRecords.length > 0) {
47
+ await (0, exports.bulkDelete)(name, removedRecords.map(item => item[adapter.keyPath]));
48
+ }
49
+ }));
50
+ };
51
+ exports.initIndexedDbAdapter = initIndexedDbAdapter;
52
+ const initStorage = async (name, version, adapters) => {
53
+ if (!window.indexedDB)
54
+ return;
55
+ window.addEventListener("beforeunload", () => (0, exports.closeStorage)());
56
+ if (exports.db) {
57
+ throw new Error("Db initialized multiple times");
58
+ }
59
+ exports.db = await (0, idb_1.openDB)(name, version, {
60
+ upgrade(db) {
61
+ const names = Object.keys(adapters);
62
+ for (const name of db.objectStoreNames) {
63
+ if (!names.includes(name)) {
64
+ db.deleteObjectStore(name);
65
+ }
66
+ }
67
+ for (const [name, { keyPath }] of Object.entries(adapters)) {
68
+ try {
69
+ db.createObjectStore(name, { keyPath });
70
+ }
71
+ catch (e) {
72
+ console.warn(e);
73
+ }
74
+ }
75
+ },
76
+ });
77
+ await Promise.all(Object.entries(adapters).map(([name, config]) => (0, exports.initIndexedDbAdapter)(name, config)));
78
+ };
79
+ exports.initStorage = initStorage;
80
+ const closeStorage = async () => {
81
+ exports.dead.set(true);
82
+ exports.subs.forEach(unsub => unsub());
83
+ await (exports.db === null || exports.db === void 0 ? void 0 : exports.db.close());
84
+ };
85
+ exports.closeStorage = closeStorage;
86
+ const clearStorage = async () => {
87
+ await (0, exports.closeStorage)();
88
+ await (0, idb_1.deleteDB)(exports.db.name);
89
+ };
90
+ exports.clearStorage = clearStorage;
91
+ exports.storageAdapters = {
92
+ fromObjectStore: (store) => ({
93
+ keyPath: "key",
94
+ store: (0, store_2.adapter)({
95
+ store: store,
96
+ forward: ($data) => Object.entries($data).map(([key, value]) => ({ key, value })),
97
+ backward: (data) => (0, lib_1.fromPairs)(data.map(({ key, value }) => [key, value])),
98
+ }),
99
+ }),
100
+ };
101
+ //# sourceMappingURL=storage.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.cjs","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /// <reference types="svelte" />
2
+ import type { IDBPDatabase } from "idb";
3
+ import type { Unsubscriber, Writable } from "svelte/store";
4
+ export type Item = Record<string, any>;
5
+ export type IndexedDbAdapter = {
6
+ keyPath: string;
7
+ store: Writable<Item[]>;
8
+ };
9
+ export declare let db: IDBPDatabase;
10
+ export declare const dead: Writable<boolean> & {
11
+ get: () => boolean;
12
+ };
13
+ export declare const subs: Unsubscriber[];
14
+ export declare const getAll: (name: string) => Promise<any[]>;
15
+ export declare const bulkPut: (name: string, data: any[]) => Promise<void>;
16
+ export declare const bulkDelete: (name: string, ids: string[]) => Promise<void>;
17
+ export declare const initIndexedDbAdapter: (name: string, adapter: IndexedDbAdapter) => Promise<void>;
18
+ export declare const initStorage: (name: string, version: number, adapters: Record<string, IndexedDbAdapter>) => Promise<void>;
19
+ export declare const closeStorage: () => Promise<void>;
20
+ export declare const clearStorage: () => Promise<void>;
21
+ export declare const storageAdapters: {
22
+ fromObjectStore: <T>(store: Writable<Record<string, T>>) => {
23
+ keyPath: string;
24
+ store: {
25
+ set: (x: {
26
+ key: string;
27
+ value: T;
28
+ }[]) => void;
29
+ update: (f: (x: {
30
+ key: string;
31
+ value: T;
32
+ }[]) => {
33
+ key: string;
34
+ value: T;
35
+ }[]) => void;
36
+ subscribe(this: void, run: import("svelte/store").Subscriber<{
37
+ key: string;
38
+ value: T;
39
+ }[]>, invalidate?: import("svelte/store").Invalidator<{
40
+ key: string;
41
+ value: T;
42
+ }[]> | undefined): Unsubscriber;
43
+ };
44
+ };
45
+ };
@@ -0,0 +1,92 @@
1
+ import { openDB, deleteDB } from "idb";
2
+ import { throttle } from "throttle-debounce";
3
+ import { writable } from "svelte/store";
4
+ import { randomInt, fromPairs } from "@welshman/lib";
5
+ import { withGetter, adapter } from "@welshman/store";
6
+ export let db;
7
+ export const dead = withGetter(writable(false));
8
+ export const subs = [];
9
+ export const getAll = async (name) => {
10
+ const tx = db.transaction(name, "readwrite");
11
+ const store = tx.objectStore(name);
12
+ const result = await store.getAll();
13
+ await tx.done;
14
+ return result;
15
+ };
16
+ export const bulkPut = async (name, data) => {
17
+ const tx = db.transaction(name, "readwrite");
18
+ const store = tx.objectStore(name);
19
+ await Promise.all(data.map(item => store.put(item)));
20
+ await tx.done;
21
+ };
22
+ export const bulkDelete = async (name, ids) => {
23
+ const tx = db.transaction(name, "readwrite");
24
+ const store = tx.objectStore(name);
25
+ await Promise.all(ids.map(id => store.delete(id)));
26
+ await tx.done;
27
+ };
28
+ export const initIndexedDbAdapter = async (name, adapter) => {
29
+ let prevRecords = await getAll(name);
30
+ adapter.store.set(prevRecords);
31
+ adapter.store.subscribe(throttle(randomInt(3000, 5000), async (newRecords) => {
32
+ if (dead.get()) {
33
+ return;
34
+ }
35
+ const currentIds = new Set(newRecords.map(item => item[adapter.keyPath]));
36
+ const removedRecords = prevRecords.filter(r => !currentIds.has(r[adapter.keyPath]));
37
+ prevRecords = newRecords;
38
+ if (newRecords.length > 0) {
39
+ await bulkPut(name, newRecords);
40
+ }
41
+ if (removedRecords.length > 0) {
42
+ await bulkDelete(name, removedRecords.map(item => item[adapter.keyPath]));
43
+ }
44
+ }));
45
+ };
46
+ export const initStorage = async (name, version, adapters) => {
47
+ if (!window.indexedDB)
48
+ return;
49
+ window.addEventListener("beforeunload", () => closeStorage());
50
+ if (db) {
51
+ throw new Error("Db initialized multiple times");
52
+ }
53
+ db = await openDB(name, version, {
54
+ upgrade(db) {
55
+ const names = Object.keys(adapters);
56
+ for (const name of db.objectStoreNames) {
57
+ if (!names.includes(name)) {
58
+ db.deleteObjectStore(name);
59
+ }
60
+ }
61
+ for (const [name, { keyPath }] of Object.entries(adapters)) {
62
+ try {
63
+ db.createObjectStore(name, { keyPath });
64
+ }
65
+ catch (e) {
66
+ console.warn(e);
67
+ }
68
+ }
69
+ },
70
+ });
71
+ await Promise.all(Object.entries(adapters).map(([name, config]) => initIndexedDbAdapter(name, config)));
72
+ };
73
+ export const closeStorage = async () => {
74
+ dead.set(true);
75
+ subs.forEach(unsub => unsub());
76
+ await (db === null || db === void 0 ? void 0 : db.close());
77
+ };
78
+ export const clearStorage = async () => {
79
+ await closeStorage();
80
+ await deleteDB(db.name);
81
+ };
82
+ export const storageAdapters = {
83
+ fromObjectStore: (store) => ({
84
+ keyPath: "key",
85
+ store: adapter({
86
+ store: store,
87
+ forward: ($data) => Object.entries($data).map(([key, value]) => ({ key, value })),
88
+ backward: (data) => fromPairs(data.map(({ key, value }) => [key, value])),
89
+ }),
90
+ }),
91
+ };
92
+ //# sourceMappingURL=storage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.mjs","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.publishThunk = exports.makeThunk = exports.thunkWorker = exports.publishStatusData = void 0;
4
+ const store_1 = require("svelte/store");
5
+ const lib_1 = require("@welshman/lib");
6
+ const signer_1 = require("@welshman/signer");
7
+ const net_1 = require("@welshman/net");
8
+ const core_1 = require("./core.cjs");
9
+ const session_1 = require("./session.cjs");
10
+ exports.publishStatusData = (0, store_1.writable)({});
11
+ exports.thunkWorker = new lib_1.Worker();
12
+ exports.thunkWorker.addGlobalHandler(async ({ event, relays, resolve }) => {
13
+ const session = (0, session_1.getSession)(event.pubkey);
14
+ if (!session) {
15
+ return console.warn(`No session found for ${event.pubkey}`);
16
+ }
17
+ const signedEvent = await (0, session_1.getSigner)(session).sign(event);
18
+ const pub = (0, net_1.publish)({ event: signedEvent, relays });
19
+ core_1.repository.getEvent(signedEvent.id).sig = signedEvent.sig;
20
+ // Track publish success
21
+ const { id } = event;
22
+ const statusByUrl = {};
23
+ pub.emitter.on("*", (status, url, message) => {
24
+ exports.publishStatusData.update((0, lib_1.assoc)(id, Object.assign(statusByUrl, { [url]: { id, url, status, message } })));
25
+ if (Object.values(statusByUrl).filter(s => s.status !== net_1.PublishStatus.Pending).length ===
26
+ relays.length) {
27
+ resolve(statusByUrl);
28
+ }
29
+ });
30
+ });
31
+ const makeThunk = ({ event, relays }) => {
32
+ const $pubkey = (0, store_1.get)(session_1.pubkey);
33
+ if (!$pubkey) {
34
+ throw new Error("Unable to make thunk if no user is logged in");
35
+ }
36
+ return { event: (0, signer_1.hash)((0, signer_1.own)((0, signer_1.stamp)(event), $pubkey)), relays };
37
+ };
38
+ exports.makeThunk = makeThunk;
39
+ const publishThunk = (thunk) => new Promise(resolve => {
40
+ exports.thunkWorker.push({ ...thunk, resolve });
41
+ core_1.repository.publish(thunk.event);
42
+ });
43
+ exports.publishThunk = publishThunk;
44
+ //# sourceMappingURL=thunk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thunk.cjs","sourceRoot":"","sources":["../../src/thunk.ts"],"names":[],"mappings":";;;AAAA,wCAA0C;AAC1C,uCAA2C;AAC3C,6CAAiD;AAEjD,uCAAoD;AACpD,qCAAiC;AACjC,2CAAuD;AAa1C,QAAA,iBAAiB,GAAG,IAAA,gBAAQ,EAA6B,EAAE,CAAC,CAAA;AAW5D,QAAA,WAAW,GAAG,IAAI,YAAM,EAAoB,CAAA;AAEzD,mBAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAmB,EAAE,EAAE;IAChF,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAExC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,OAAO,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;KAC5D;IAED,MAAM,WAAW,GAAG,MAAM,IAAA,mBAAS,EAAC,OAAO,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzD,MAAM,GAAG,GAAG,IAAA,aAAO,EAAC,EAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAC,CAAC,CAGhD;IAAC,iBAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAiB,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAA;IAE3E,wBAAwB;IACxB,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAA;IAClB,MAAM,WAAW,GAA2B,EAAE,CAAA;IAE9C,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAqB,EAAE,GAAW,EAAE,OAAe,EAAE,EAAE;QAC1E,yBAAiB,CAAC,MAAM,CACtB,IAAA,WAAK,EAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAC,EAAC,CAAC,CAAC,CAC3E,CAAA;QAED,IACE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,mBAAa,CAAC,OAAO,CAAC,CAAC,MAAM;YACjF,MAAM,CAAC,MAAM,EACb;YACA,OAAO,CAAC,WAAW,CAAC,CAAA;SACrB;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAOK,MAAM,SAAS,GAAG,CAAC,EAAC,KAAK,EAAE,MAAM,EAAc,EAAE,EAAE;IACxD,MAAM,OAAO,GAAG,IAAA,WAAG,EAAC,gBAAM,CAAC,CAAA;IAE3B,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;KAChE;IAED,OAAO,EAAC,KAAK,EAAE,IAAA,aAAI,EAAC,IAAA,YAAG,EAAC,IAAA,cAAK,EAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,EAAC,CAAA;AAC1D,CAAC,CAAA;AARY,QAAA,SAAS,aAQrB;AAEM,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,EAAE,CAC3C,IAAI,OAAO,CAAyB,OAAO,CAAC,EAAE;IAC5C,mBAAW,CAAC,IAAI,CAAC,EAAC,GAAG,KAAK,EAAE,OAAO,EAAC,CAAC,CAAA;IACrC,iBAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AACjC,CAAC,CAAC,CAAA;AAJS,QAAA,YAAY,gBAIrB"}
@@ -0,0 +1,37 @@
1
+ /// <reference types="svelte" />
2
+ import { Worker } from '@welshman/lib';
3
+ import type { HashedEvent, EventTemplate } from '@welshman/util';
4
+ import { PublishStatus } from "@welshman/net";
5
+ export type PublishStatusData = {
6
+ id: string;
7
+ url: string;
8
+ message: string;
9
+ status: PublishStatus;
10
+ };
11
+ export type PublishStatusDataByUrl = Record<string, PublishStatusData>;
12
+ export type PublishStatusDataByUrlById = Record<string, PublishStatusDataByUrl>;
13
+ export declare const publishStatusData: import("svelte/store").Writable<PublishStatusDataByUrlById>;
14
+ export type Thunk = {
15
+ event: HashedEvent;
16
+ relays: string[];
17
+ };
18
+ export type ThunkWithResolve = Thunk & {
19
+ resolve: (data: PublishStatusDataByUrl) => void;
20
+ };
21
+ export declare const thunkWorker: Worker<ThunkWithResolve>;
22
+ export type ThunkParams = {
23
+ event: EventTemplate;
24
+ relays: string[];
25
+ };
26
+ export declare const makeThunk: ({ event, relays }: ThunkParams) => {
27
+ event: {
28
+ id: string;
29
+ tags: string[][];
30
+ content: string;
31
+ kind: number;
32
+ created_at: number;
33
+ pubkey: string;
34
+ };
35
+ relays: string[];
36
+ };
37
+ export declare const publishThunk: (thunk: Thunk) => Promise<PublishStatusDataByUrl>;
@@ -0,0 +1,39 @@
1
+ import { writable, get } from 'svelte/store';
2
+ import { Worker, assoc } from '@welshman/lib';
3
+ import { stamp, own, hash } from "@welshman/signer";
4
+ import { publish, PublishStatus } from "@welshman/net";
5
+ import { repository } from "./core.mjs";
6
+ import { pubkey, getSession, getSigner } from "./session.mjs";
7
+ export const publishStatusData = writable({});
8
+ export const thunkWorker = new Worker();
9
+ thunkWorker.addGlobalHandler(async ({ event, relays, resolve }) => {
10
+ const session = getSession(event.pubkey);
11
+ if (!session) {
12
+ return console.warn(`No session found for ${event.pubkey}`);
13
+ }
14
+ const signedEvent = await getSigner(session).sign(event);
15
+ const pub = publish({ event: signedEvent, relays });
16
+ repository.getEvent(signedEvent.id).sig = signedEvent.sig;
17
+ // Track publish success
18
+ const { id } = event;
19
+ const statusByUrl = {};
20
+ pub.emitter.on("*", (status, url, message) => {
21
+ publishStatusData.update(assoc(id, Object.assign(statusByUrl, { [url]: { id, url, status, message } })));
22
+ if (Object.values(statusByUrl).filter(s => s.status !== PublishStatus.Pending).length ===
23
+ relays.length) {
24
+ resolve(statusByUrl);
25
+ }
26
+ });
27
+ });
28
+ export const makeThunk = ({ event, relays }) => {
29
+ const $pubkey = get(pubkey);
30
+ if (!$pubkey) {
31
+ throw new Error("Unable to make thunk if no user is logged in");
32
+ }
33
+ return { event: hash(own(stamp(event), $pubkey)), relays };
34
+ };
35
+ export const publishThunk = (thunk) => new Promise(resolve => {
36
+ thunkWorker.push({ ...thunk, resolve });
37
+ repository.publish(thunk.event);
38
+ });
39
+ //# sourceMappingURL=thunk.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thunk.mjs","sourceRoot":"","sources":["../../src/thunk.ts"],"names":[],"mappings":"OAAO,EAAC,QAAQ,EAAE,GAAG,EAAC,MAAM,cAAc;OACnC,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,eAAe;OACpC,EAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAC,MAAM,kBAAkB;OAE1C,EAAC,OAAO,EAAE,aAAa,EAAC,MAAM,eAAe;OAC7C,EAAC,UAAU,EAAC;OACZ,EAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAC;AAatC,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAA6B,EAAE,CAAC,CAAA;AAWzE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,MAAM,EAAoB,CAAA;AAEzD,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAmB,EAAE,EAAE;IAChF,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAExC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,OAAO,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;KAC5D;IAED,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,EAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAC,CAAC,CAGhD;IAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAiB,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAA;IAE3E,wBAAwB;IACxB,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAA;IAClB,MAAM,WAAW,GAA2B,EAAE,CAAA;IAE9C,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAqB,EAAE,GAAW,EAAE,OAAe,EAAE,EAAE;QAC1E,iBAAiB,CAAC,MAAM,CACtB,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAC,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAC,EAAC,CAAC,CAAC,CAC3E,CAAA;QAED,IACE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM;YACjF,MAAM,CAAC,MAAM,EACb;YACA,OAAO,CAAC,WAAW,CAAC,CAAA;SACrB;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAOF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAC,KAAK,EAAE,MAAM,EAAc,EAAE,EAAE;IACxD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;IAE3B,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;KAChE;IAED,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,EAAC,CAAA;AAC1D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,EAAE,CAC3C,IAAI,OAAO,CAAyB,OAAO,CAAC,EAAE;IAC5C,WAAW,CAAC,IAAI,CAAC,EAAC,GAAG,KAAK,EAAE,OAAO,EAAC,CAAC,CAAA;IACrC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AACjC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.topicSearch = exports.topics = void 0;
4
+ const throttle_debounce_1 = require("throttle-debounce");
5
+ const store_1 = require("svelte/store");
6
+ const lib_1 = require("@welshman/lib");
7
+ const store_2 = require("@welshman/store");
8
+ const util_1 = require("./util.cjs");
9
+ const core_1 = require("./core.cjs");
10
+ exports.topics = (0, store_2.custom)(setter => {
11
+ const getTopics = () => {
12
+ const topics = new Map();
13
+ for (const tagString of core_1.repository.eventsByTag.keys()) {
14
+ if (tagString.startsWith("t:")) {
15
+ const topic = tagString.slice(2).toLowerCase();
16
+ topics.set(topic, (0, lib_1.inc)(topics.get(topic)));
17
+ }
18
+ }
19
+ return Array.from(topics.entries()).map(([name, count]) => ({ name, count }));
20
+ };
21
+ setter(getTopics());
22
+ const onUpdate = (0, throttle_debounce_1.throttle)(3000, () => setter(getTopics()));
23
+ core_1.repository.on("update", onUpdate);
24
+ return () => core_1.repository.off("update", onUpdate);
25
+ });
26
+ exports.topicSearch = (0, store_1.derived)(exports.topics, $topics => (0, util_1.createSearch)($topics, {
27
+ getValue: (topic) => topic.name,
28
+ fuseOptions: { keys: ["name"] },
29
+ }));
30
+ //# sourceMappingURL=topics.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topics.cjs","sourceRoot":"","sources":["../../src/topics.ts"],"names":[],"mappings":";;;AAAA,yDAA0C;AAC1C,wCAAoC;AACpC,uCAAiC;AACjC,2CAAsC;AACtC,qCAAmC;AACnC,qCAAiC;AAOpB,QAAA,MAAM,GAAG,IAAA,cAAM,EAAU,MAAM,CAAC,EAAE;IAC7C,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;QACxC,KAAK,MAAM,SAAS,IAAI,iBAAU,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE;YACrD,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;gBAE9C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAA,SAAG,EAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;aAC1C;SACF;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC,CAAA;IAC7E,CAAC,CAAA;IAED,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;IAEnB,MAAM,QAAQ,GAAG,IAAA,4BAAQ,EAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IAE1D,iBAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAEjC,OAAO,GAAG,EAAE,CAAC,iBAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC,CAAC,CAAA;AAEW,QAAA,WAAW,GAAG,IAAA,eAAO,EAAC,cAAM,EAAE,OAAO,CAAC,EAAE,CACnD,IAAA,mBAAY,EAAC,OAAO,EAAE;IACpB,QAAQ,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI;IACtC,WAAW,EAAE,EAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAC;CAC9B,CAAC,CACH,CAAA"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="svelte" />
2
+ export type Topic = {
3
+ name: string;
4
+ count: number;
5
+ };
6
+ export declare const topics: {
7
+ set: (newValue: Topic[]) => void;
8
+ subscribe: (sub: import("svelte/store").Subscriber<Topic[]>) => () => void;
9
+ };
10
+ export declare const topicSearch: import("svelte/store").Readable<import("./util").Search<string, Topic>>;
@@ -0,0 +1,27 @@
1
+ import { throttle } from 'throttle-debounce';
2
+ import { derived } from 'svelte/store';
3
+ import { inc } from '@welshman/lib';
4
+ import { custom } from '@welshman/store';
5
+ import { createSearch } from "./util.mjs";
6
+ import { repository } from "./core.mjs";
7
+ export const topics = custom(setter => {
8
+ const getTopics = () => {
9
+ const topics = new Map();
10
+ for (const tagString of repository.eventsByTag.keys()) {
11
+ if (tagString.startsWith("t:")) {
12
+ const topic = tagString.slice(2).toLowerCase();
13
+ topics.set(topic, inc(topics.get(topic)));
14
+ }
15
+ }
16
+ return Array.from(topics.entries()).map(([name, count]) => ({ name, count }));
17
+ };
18
+ setter(getTopics());
19
+ const onUpdate = throttle(3000, () => setter(getTopics()));
20
+ repository.on("update", onUpdate);
21
+ return () => repository.off("update", onUpdate);
22
+ });
23
+ export const topicSearch = derived(topics, $topics => createSearch($topics, {
24
+ getValue: (topic) => topic.name,
25
+ fuseOptions: { keys: ["name"] },
26
+ }));
27
+ //# sourceMappingURL=topics.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topics.mjs","sourceRoot":"","sources":["../../src/topics.ts"],"names":[],"mappings":"OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB;OACnC,EAAC,OAAO,EAAC,MAAM,cAAc;OAC7B,EAAC,GAAG,EAAC,MAAM,eAAe;OAC1B,EAAC,MAAM,EAAC,MAAM,iBAAiB;OAC/B,EAAC,YAAY,EAAC;OACd,EAAC,UAAU,EAAC;AAOnB,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAU,MAAM,CAAC,EAAE;IAC7C,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;QACxC,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE;YACrD,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;gBAE9C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;aAC1C;SACF;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC,CAAA;IAC7E,CAAC,CAAA;IAED,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;IAEnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IAE1D,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAEjC,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CACnD,YAAY,CAAC,OAAO,EAAE;IACpB,QAAQ,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI;IACtC,WAAW,EAAE,EAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAC;CAC9B,CAAC,CACH,CAAA"}