@the_library/public 1.0.0 → 2.0.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 (113) hide show
  1. package/README.md +201 -28
  2. package/assets/branding/pond-enterprise-logo.svg +1 -1
  3. package/dist/Book-K86JRm42.d.ts +600 -0
  4. package/dist/bookSearchService-BmFHrvsv.d.ts +300 -0
  5. package/dist/branding/index.js +1 -66
  6. package/dist/branding/index.js.map +1 -1
  7. package/dist/chunk-3XUKOVEF.js +2 -0
  8. package/dist/chunk-3XUKOVEF.js.map +1 -0
  9. package/dist/chunk-46FQHZNM.js +2 -0
  10. package/dist/chunk-46FQHZNM.js.map +1 -0
  11. package/dist/chunk-7G3BMGV2.js +2 -0
  12. package/dist/chunk-7G3BMGV2.js.map +1 -0
  13. package/dist/chunk-D4DXGA2W.js +2 -0
  14. package/dist/chunk-D4DXGA2W.js.map +1 -0
  15. package/dist/chunk-EMA2QJTW.js +2 -0
  16. package/dist/chunk-EMA2QJTW.js.map +1 -0
  17. package/dist/chunk-FN52YV7L.js +2 -0
  18. package/dist/chunk-FN52YV7L.js.map +1 -0
  19. package/dist/chunk-GWQNULP4.js +2 -0
  20. package/dist/chunk-GWQNULP4.js.map +1 -0
  21. package/dist/chunk-OELHBR4F.js +2 -0
  22. package/dist/chunk-OELHBR4F.js.map +1 -0
  23. package/dist/chunk-PV3X54EU.js +2 -0
  24. package/dist/chunk-PV3X54EU.js.map +1 -0
  25. package/dist/chunk-SD3INWZF.js +2 -0
  26. package/dist/chunk-SD3INWZF.js.map +1 -0
  27. package/dist/downloader/dl2-sw.js +1 -198
  28. package/dist/downloader/dl2-sw.js.map +1 -1
  29. package/dist/downloader/file-worker-v2.js +1 -257
  30. package/dist/downloader/file-worker-v2.js.map +1 -1
  31. package/dist/downloader/index.d.ts +18 -2
  32. package/dist/downloader/index.js +1 -537
  33. package/dist/downloader/index.js.map +1 -1
  34. package/dist/downloader/mu-worker-v2.js +1 -196
  35. package/dist/downloader/mu-worker-v2.js.map +1 -1
  36. package/dist/downloader/react.d.ts +1 -1
  37. package/dist/downloader/react.js +1 -31
  38. package/dist/downloader/react.js.map +1 -1
  39. package/dist/downloader/solid.d.ts +1 -1
  40. package/dist/downloader/solid.js +1 -18
  41. package/dist/downloader/solid.js.map +1 -1
  42. package/dist/downloader/sw.js +1 -118
  43. package/dist/downloader/sw.js.map +1 -1
  44. package/dist/downloader/vue.d.ts +1 -1
  45. package/dist/downloader/vue.js +1 -18
  46. package/dist/downloader/vue.js.map +1 -1
  47. package/dist/enriched-index-T0sDG7JR.d.ts +209 -0
  48. package/dist/global/public.global.js +68 -0
  49. package/dist/global/public.manifest.json +484 -0
  50. package/dist/level-state-DXqglpAX.d.ts +27 -0
  51. package/dist/models/astro.d.ts +4 -3
  52. package/dist/models/astro.js +1 -43
  53. package/dist/models/astro.js.map +1 -1
  54. package/dist/models/index.d.ts +449 -22
  55. package/dist/models/index.js +1 -339
  56. package/dist/models/index.js.map +1 -1
  57. package/dist/models/models.d.ts +196 -441
  58. package/dist/models/models.js +1 -45
  59. package/dist/models/patch-worker.js +1 -542
  60. package/dist/models/patch-worker.js.map +1 -1
  61. package/dist/models/react.d.ts +6 -5
  62. package/dist/models/react.js +1 -72
  63. package/dist/models/react.js.map +1 -1
  64. package/dist/models/solid.d.ts +16 -6
  65. package/dist/models/solid.js +1 -94
  66. package/dist/models/solid.js.map +1 -1
  67. package/dist/models/vue.d.ts +90 -7
  68. package/dist/models/vue.js +1 -97
  69. package/dist/models/vue.js.map +1 -1
  70. package/dist/orm-MJTHCG9E.d.ts +1003 -0
  71. package/dist/{session-vqOnyxga.d.ts → session-JudUKAV7.d.ts} +76 -74
  72. package/dist/{state-BTsp-E4v.d.ts → state-CkYavOSt.d.ts} +16 -0
  73. package/dist/{types-Dn0EFMO_.d.ts → types-B-IX3HBn.d.ts} +94 -21
  74. package/dist/{types-Xb8Ta9tZ.d.ts → types-Blyx2A7F.d.ts} +10 -36
  75. package/dist/web3/auth.d.ts +89 -0
  76. package/dist/web3/auth.js +13 -0
  77. package/dist/web3/auth.js.map +1 -0
  78. package/dist/web3/index.d.ts +1913 -126
  79. package/dist/web3/index.js +1 -1019
  80. package/dist/web3/index.js.map +1 -1
  81. package/dist/web3/network.d.ts +6 -0
  82. package/dist/web3/network.js +2 -0
  83. package/dist/web3/network.js.map +1 -0
  84. package/dist/web3/registry.d.ts +34 -9
  85. package/dist/web3/registry.js +1 -22
  86. package/dist/web3/vue.d.ts +31 -14
  87. package/dist/web3/vue.js +1 -390
  88. package/dist/web3/vue.js.map +1 -1
  89. package/package.json +23 -2
  90. package/dist/chunk-2HFOWE5R.js +0 -296
  91. package/dist/chunk-2HFOWE5R.js.map +0 -1
  92. package/dist/chunk-3L6LH2XK.js +0 -465
  93. package/dist/chunk-3L6LH2XK.js.map +0 -1
  94. package/dist/chunk-4CWVFPBN.js +0 -28
  95. package/dist/chunk-4CWVFPBN.js.map +0 -1
  96. package/dist/chunk-AGHPATVL.js +0 -65
  97. package/dist/chunk-AGHPATVL.js.map +0 -1
  98. package/dist/chunk-JDUYLUDJ.js +0 -4835
  99. package/dist/chunk-JDUYLUDJ.js.map +0 -1
  100. package/dist/chunk-OEZK7IX7.js +0 -77
  101. package/dist/chunk-OEZK7IX7.js.map +0 -1
  102. package/dist/chunk-PUYDAUCI.js +0 -2873
  103. package/dist/chunk-PUYDAUCI.js.map +0 -1
  104. package/dist/chunk-WHWMTS7D.js +0 -99
  105. package/dist/chunk-WHWMTS7D.js.map +0 -1
  106. package/dist/chunk-Y7RS6RTM.js +0 -342
  107. package/dist/chunk-Y7RS6RTM.js.map +0 -1
  108. package/dist/chunk-ZEZGI2TP.js +0 -197
  109. package/dist/chunk-ZEZGI2TP.js.map +0 -1
  110. package/dist/core-dao-core-logo-VDT2I5IW.svg +0 -33
  111. package/dist/level-state-J3pj64Tr.d.ts +0 -15
  112. package/dist/models/models_v2.global.js +0 -1
  113. package/dist/orm-BvkX0aBT.d.ts +0 -507
@@ -0,0 +1,300 @@
1
+ import { B as Book } from './Book-K86JRm42.js';
2
+ import { L as Lang } from './orm-MJTHCG9E.js';
3
+
4
+ declare const SEARCH_SHARD_MAGIC = 1146114865;
5
+ declare const SEARCH_SHARD_FORMAT_VERSION = 1;
6
+ type SearchPresetKind = 'score' | 'label';
7
+ interface SearchPresetSpec {
8
+ name: string;
9
+ /** score: integer 0–255, 0 = none/unknown. label: free string, stored as an index into a sorted table. */
10
+ kind: SearchPresetKind;
11
+ }
12
+ /** Which fields, relations and preset columns a shard carries, in order. */
13
+ interface SearchShardSchema {
14
+ fields: readonly string[];
15
+ relations: readonly string[];
16
+ presets: readonly SearchPresetSpec[];
17
+ }
18
+ interface SearchDocInput {
19
+ wireId: bigint;
20
+ fields: Readonly<Record<string, string | null | undefined>>;
21
+ relations?: Readonly<Record<string, readonly bigint[] | undefined>>;
22
+ presets?: Readonly<Record<string, number | string | boolean | null | undefined>>;
23
+ }
24
+ interface SearchShardRelation {
25
+ name: string;
26
+ /** Sorted, unique. */
27
+ ids: bigint[];
28
+ /** Per doc d: indexes into `ids` at values[offsets[d] .. offsets[d+1]), ascending. */
29
+ offsets: Uint32Array;
30
+ values: Uint32Array;
31
+ }
32
+ interface SearchShardPreset {
33
+ name: string;
34
+ kind: SearchPresetKind;
35
+ /** Sorted; empty for score columns. */
36
+ labels: string[];
37
+ /** One byte per doc. score: the value; label: 0 = none, i + 1 = labels[i]. */
38
+ values: Uint8Array;
39
+ }
40
+ interface SearchShard {
41
+ lang: string;
42
+ /** Sorted, unique; doc index = position. */
43
+ wireIds: bigint[];
44
+ fields: string[];
45
+ /** fieldLengths[f][d] = tokens of field f in doc d. */
46
+ fieldLengths: Uint32Array[];
47
+ relations: SearchShardRelation[];
48
+ presets: SearchShardPreset[];
49
+ /** Sorted by UTF-16 code unit (default string order). */
50
+ terms: string[];
51
+ /** Postings of terms[t] are postingDocs[postingOffsets[t] .. postingOffsets[t+1]), docs ascending. */
52
+ postingOffsets: Uint32Array;
53
+ postingDocs: Uint32Array;
54
+ /** postingTf[p * fields.length + f] = occurrences of the term in field f of posting p's doc. */
55
+ postingTf: Uint16Array;
56
+ }
57
+ declare function compareBigint(a: bigint, b: bigint): number;
58
+ /** Build a shard in memory from records. Input order doesn't matter; wireIds must be unique. */
59
+ declare function buildSearchShard(lang: string, docs: readonly SearchDocInput[], schema: SearchShardSchema): SearchShard;
60
+ declare function serializeSearchShard(shard: SearchShard): Uint8Array;
61
+ declare function deserializeSearchShard(input: ArrayBuffer | Uint8Array): SearchShard;
62
+
63
+ /**
64
+ * What a Book contributes to the `search` tier (next/metadata_search.md §6.2–6.3):
65
+ * the schema (fields, relations, preset columns) and the preset precedence rule.
66
+ * Shared by corpus-builder's `buildSearchTier` (from decoded sidecars) and the
67
+ * app's local overlay (from live ORM records), so both produce the same columns.
68
+ */
69
+
70
+ declare const BOOK_SEARCH_SCHEMA: SearchShardSchema;
71
+ /** Preset columns that are also Book properties — the ones a curator can edit (§6.3). */
72
+ declare const BOOK_CURATABLE_PRESETS: readonly string[];
73
+ /** Default query-time field weights for Book shards. */
74
+ declare const BOOK_FIELD_WEIGHTS: Readonly<Record<string, number>>;
75
+ /**
76
+ * Preset values for one Book. The curator's value always wins:
77
+ * 1. a field a curator edited (flagged `manual` in the prov tier — every
78
+ * applied patch sets it, apply-patches-plain.ts) takes the extended-tier
79
+ * value, even 0 ("none") or false;
80
+ * 2. otherwise a non-zero extended-tier value (published; 0 there can't be
81
+ * told apart from "never set");
82
+ * 3. otherwise the AI record; otherwise unset.
83
+ *
84
+ * @param extended - the Book's extended-tier columns (e.g. a decoded
85
+ * `deserializeBookExtended` row, or values read off the ORM record)
86
+ * @param ai - the latest `deepseek`/`deepseek-chat` AI result value, if any
87
+ * @param curated - names of fields a curator edited (the Book's prov-tier `_prov` keys)
88
+ */
89
+ declare function bookSearchPresets(extended: Readonly<Record<string, unknown>> | undefined, ai: any, curated?: ReadonlySet<string>): NonNullable<SearchDocInput['presets']>;
90
+ /** An AI results map as stored on records and in the ai-for-D-safe tier: company → model → entries. */
91
+ type AiResultsMap = ReadonlyMap<string, ReadonlyMap<string, ReadonlySet<{
92
+ ts: number;
93
+ value: any;
94
+ }>>>;
95
+ /** The latest value (by `ts`) one company/model produced, if any — deepseek-chat by default. */
96
+ declare function latestAiValue(results: AiResultsMap | undefined, company?: string, model?: string): any;
97
+ /** Everything a Book contributes to search, however it was read (decoded sidecars or a live ORM record). */
98
+ interface BookSearchSource {
99
+ wireId: bigint;
100
+ title: string | null | undefined;
101
+ description: string | null | undefined;
102
+ safe: boolean | undefined;
103
+ deleted: boolean | undefined;
104
+ authorIds: readonly bigint[];
105
+ authorNames: readonly (string | null | undefined)[];
106
+ topicIds: readonly bigint[];
107
+ /** Extended-tier values by property name (at least BOOK_CURATABLE_PRESETS). */
108
+ extended?: Readonly<Record<string, unknown>>;
109
+ /** Latest deepseek-chat value (latestAiValue). */
110
+ ai?: any;
111
+ /** Curator-edited property names (§6.3). */
112
+ curated?: ReadonlySet<string>;
113
+ }
114
+ /**
115
+ * The one mapping from a Book to its search document — used by the publish
116
+ * build (corpus-builder) and the app's overlay alike. Null when the Book is
117
+ * not searchable (unsafe, deleted or untitled).
118
+ */
119
+ declare function bookSearchDoc(src: BookSearchSource): SearchDocInput | null;
120
+
121
+ type PresetFilter =
122
+ /** Inclusive range on a score column. 0 is "unknown" and never matches unless includeUnknown. */
123
+ {
124
+ min?: number;
125
+ max?: number;
126
+ includeUnknown?: boolean;
127
+ }
128
+ /** Any of these labels, on a label column. */
129
+ | {
130
+ in: readonly string[];
131
+ };
132
+ interface SearchFilters {
133
+ /** An empty `in` list is no filter (nothing selected), not "match nothing". */
134
+ presets?: Readonly<Record<string, PresetFilter>>;
135
+ /** Any of these ids within a relation; every listed relation must match. An empty list is no filter. */
136
+ relations?: Readonly<Record<string, readonly (bigint | string)[]>>;
137
+ }
138
+ interface SearchQuery {
139
+ lang: string;
140
+ /** Empty or omitted = filter-only browsing. */
141
+ text?: string;
142
+ filters?: SearchFilters;
143
+ /** Order by a preset column (unknown values last); default is relevance, then wireId. */
144
+ sort?: {
145
+ preset: string;
146
+ dir?: 'asc' | 'desc';
147
+ };
148
+ limit?: number;
149
+ offset?: number;
150
+ /** Preset or relation names to count over all matches (keys: label, score, or decimal id). */
151
+ facets?: readonly string[];
152
+ /** Per-field weights for this query; defaults to the index's (fields not listed weigh 1). */
153
+ fieldWeights?: Readonly<Record<string, number>>;
154
+ }
155
+ interface SearchIndexOptions {
156
+ /** Default per-field weights, e.g. BOOK_FIELD_WEIGHTS. */
157
+ fieldWeights?: Readonly<Record<string, number>>;
158
+ }
159
+ interface SearchHit {
160
+ wireId: bigint;
161
+ score: number;
162
+ }
163
+ interface SearchResult {
164
+ total: number;
165
+ hits: SearchHit[];
166
+ facets: Record<string, Record<string, number>>;
167
+ }
168
+ declare class SearchIndex {
169
+ private readonly langs;
170
+ private readonly hidden;
171
+ private readonly fieldWeights;
172
+ constructor(options?: SearchIndexOptions);
173
+ private state;
174
+ private invalidate;
175
+ /** Add a published (or in-browser fallback) shard. Later shards win over earlier ones for a shared wireId. */
176
+ addShard(shard: SearchShard): void;
177
+ /** Drop downloaded/fallback shards for one language while retaining its local overlay and hidden set. */
178
+ clearPublished(lang: string): void;
179
+ /** Replace the local overlay for `lang` (null removes it). The overlay wins over every published shard. */
180
+ setOverlay(lang: string, shard: SearchShard | null): void;
181
+ /** Exclude records from every result (e.g. trashStore: deleted or unsafe). */
182
+ hide(wireIds: Iterable<bigint>): void;
183
+ unhide(wireIds: Iterable<bigint>): void;
184
+ /** Replace the whole hidden set (e.g. with trashStore's current list). */
185
+ setHidden(wireIds: Iterable<bigint>): void;
186
+ /** Exclude records from one language without affecting their other translations. */
187
+ hideForLanguage(lang: string, wireIds: Iterable<bigint>): void;
188
+ unhideForLanguage(lang: string, wireIds: Iterable<bigint>): void;
189
+ /** Replace the language-local hidden set. */
190
+ setHiddenForLanguage(lang: string, wireIds: Iterable<bigint>): void;
191
+ /**
192
+ * A record's preset values in the published shards (ignoring the overlay):
193
+ * scores as numbers, labels as strings, unknown omitted. Undefined when no
194
+ * published shard has the record. The overlay inherits from this what it
195
+ * can't determine locally — e.g. AI-only scores when the app doesn't load
196
+ * the AI tier.
197
+ */
198
+ publishedPresets(lang: string, wireId: bigint): Record<string, number | string> | undefined;
199
+ /** wireIds that published shards list under `relation` = `id` (e.g. every book filed under a topic). */
200
+ publishedIdsWithRelation(lang: string, relation: string, id: bigint): bigint[];
201
+ /** Languages with at least one shard. */
202
+ languages(): string[];
203
+ /** Searchable records in `lang` (after overlay resolution and hiding). */
204
+ size(lang: string): number;
205
+ private resolve;
206
+ private isLive;
207
+ private stats;
208
+ private shardsOf;
209
+ search(query: SearchQuery): SearchResult;
210
+ /** BM25F contribution of one query word, per shard and doc (best matching dictionary term). */
211
+ private scoreWord;
212
+ private compileFilters;
213
+ private countFacet;
214
+ }
215
+
216
+ /**
217
+ * The app's Book search (next/metadata_search.md §8): one `SearchIndex`, fed by
218
+ * - the published `search` tier — every shard of a language, fetched in the
219
+ * background once boot is done (session.ts starts it), added as it arrives;
220
+ * - or, for a corpus published before the tier existed, shards built from the
221
+ * Book records already in memory, in small chunks between yields;
222
+ * - a local overlay of Books changed in this browser (own edits, restored
223
+ * patches, subscription sync — everything that goes through Orm.patch()),
224
+ * rebuilt shortly after each change;
225
+ * - trashStore, whose deleted/unsafe Books are hidden.
226
+ *
227
+ * Search never blocks or fails boot: a shard that can't be loaded marks that
228
+ * language `error` and leaves the rest of the app untouched.
229
+ */
230
+
231
+ type BookSearchStatus = 'idle' | 'loading' | 'ready' | 'error';
232
+ interface BookSearchLangState {
233
+ status: BookSearchStatus;
234
+ /** Where the index came from: the published tier, or the in-memory records (no tier published). */
235
+ source: 'published' | 'records' | null;
236
+ shards: number;
237
+ error?: string;
238
+ }
239
+ /** A live Book record, read the way the publish build reads decoded sidecars. */
240
+ declare function bookSearchSourceFromRecord(book: Book, lang: Lang): BookSearchSource;
241
+ declare class BookSearchService {
242
+ index: SearchIndex;
243
+ private readonly states;
244
+ private readonly loads;
245
+ private readonly waiters;
246
+ private readonly listeners;
247
+ /** Changed since boot — Books directly, Tags/Persons for the Books linked to them. */
248
+ private readonly dirtyBooks;
249
+ private readonly dirtyTags;
250
+ private readonly dirtyPersons;
251
+ /** Changed Books that are no longer searchable (e.g. title removed): their published entry must go. */
252
+ private readonly removedByOverlay;
253
+ /** Invalidates asynchronous work that was started before reset(). */
254
+ private generation;
255
+ private overlayTimer;
256
+ private unhook;
257
+ /**
258
+ * Start watching local changes. Call before replaying stored patches, so
259
+ * edits restored at boot land in the overlay too. Idempotent.
260
+ */
261
+ trackLocalChanges(): void;
262
+ /**
263
+ * Load `lang`'s index from its published shard URLs, or — when there are
264
+ * none — build it from the Book records in memory. Resolves when done;
265
+ * never rejects (failures show in `state(lang)`). Idempotent per language.
266
+ */
267
+ load(lang: Lang, shardUrls: readonly string[]): Promise<void>;
268
+ /** Resolves once `lang` (default: the session language) has finished loading, successfully or not. */
269
+ ready(lang?: Lang): Promise<void>;
270
+ state(lang?: Lang): BookSearchLangState;
271
+ /** Called on every index change (shard loaded, overlay rebuilt, trash changed). Returns an unsubscribe. */
272
+ subscribe(listener: () => void): () => void;
273
+ /**
274
+ * Search Books. `lang` defaults to the session language. A topic filter
275
+ * also matches the topic's descendant Tags ("Arts and Crafts" includes
276
+ * books filed under "Basketry").
277
+ */
278
+ search(query: Omit<SearchQuery, 'lang'> & {
279
+ lang?: Lang;
280
+ }): SearchResult;
281
+ /** Test/HMR: forget everything, including the change hook. */
282
+ reset(): void;
283
+ private waiter;
284
+ private setState;
285
+ private doLoad;
286
+ /** No published tier: index the Book records already in memory, a chunk at a time. */
287
+ private buildFromRecords;
288
+ private onRecordChanged;
289
+ /** Books whose search entry may differ from the published one — including ones that left a changed Tag/author. */
290
+ private changedBooks;
291
+ private rebuildOverlay;
292
+ private syncHidden;
293
+ private notify;
294
+ }
295
+ /** A topic and every Tag below it (Tag `tags` children), cycle-safe. */
296
+ declare function expandTopics(topicIds: readonly bigint[]): bigint[];
297
+ /** The app-wide Book search, loaded by bootModelsV2 (session.ts). */
298
+ declare const bookSearch: BookSearchService;
299
+
300
+ export { type AiResultsMap as A, type BookSearchLangState as B, bookSearchSourceFromRecord as C, BookSearchService as D, expandTopics as E, bookSearch as F, type PresetFilter as P, type SearchFilters as S, type SearchResult as a, SEARCH_SHARD_MAGIC as b, SEARCH_SHARD_FORMAT_VERSION as c, type SearchPresetKind as d, type SearchPresetSpec as e, type SearchShardSchema as f, type SearchDocInput as g, type SearchShardRelation as h, type SearchShardPreset as i, type SearchShard as j, compareBigint as k, buildSearchShard as l, deserializeSearchShard as m, BOOK_SEARCH_SCHEMA as n, BOOK_CURATABLE_PRESETS as o, BOOK_FIELD_WEIGHTS as p, bookSearchPresets as q, latestAiValue as r, serializeSearchShard as s, type BookSearchSource as t, bookSearchDoc as u, type SearchQuery as v, type SearchIndexOptions as w, type SearchHit as x, SearchIndex as y, type BookSearchStatus as z };
@@ -1,67 +1,2 @@
1
- // src/branding/index.ts
2
- var founder = {
3
- name: "Data Pond",
4
- email: "data@datapond.earth",
5
- whatsapp: "61490689222",
6
- linkedIn: "https://www.linkedin.com/in/datapond/",
7
- photoPath: "@the_library/public/branding/assets/founder-photo.jpg"
8
- };
9
- var builder = {
10
- name: "Pond Enterprise",
11
- url: "https://pondenterprise.com",
12
- email: "hello@pondenterprise.com",
13
- whatsapp: "61490689222",
14
- linkedIn: "https://www.linkedin.com/company/pond-enterprise",
15
- logoPath: "@the_library/public/branding/assets/pond-enterprise-logo.svg"
16
- };
17
- var socialMedia = {
18
- facebook: "https://www.facebook.com/the.world.library",
19
- instagram: "https://www.instagram.com/world_public_library/",
20
- bluesky: "https://bsky.app/profile/the-world-library.bsky.social",
21
- linkedin: "https://www.linkedin.com/company/the-world-library",
22
- x: "https://x.com/realDataPond",
23
- kickstarter: "https://www.kickstarter.com/projects/datapond/the-world-library"
24
- };
25
- var globalBranding = {
26
- founder,
27
- builder,
28
- socialMedia,
29
- contactFormUrl: "https://pondenterprise.com/p/contact-us"
30
- };
31
- var worldBiblioTechBranding = {
32
- appName: "World Biblio Tech",
33
- appUrl: "https://datapond.earth",
34
- comingSoonUrl: "https://worldbibliotech.com",
35
- contactFormUrl: "https://pondenterprise.com/p/contact-us",
36
- images: {
37
- logo: "@the_library/public/branding/assets/icon_transparent.png",
38
- favicon: "@the_library/public/branding/assets/library-favicon.png"
39
- }
40
- };
41
- var dsafeLegalBranding = {
42
- appName: "D-SAFE Legal",
43
- appUrl: "https://dsafe.us",
44
- supportEmail: "hello@dsafe.us",
45
- images: {
46
- logo: "@the_library/public/branding/assets/dsafe-logo.png",
47
- favicon: "@the_library/public/branding/assets/dsafe-logo.png"
48
- }
49
- };
50
- var worldBibliotekBranding = {
51
- appName: "World Bibliotek",
52
- appUrl: "https://worldbibliotek.com",
53
- images: {
54
- logo: "@the_library/public/branding/assets/icon_transparent.png",
55
- favicon: "@the_library/public/branding/assets/library-favicon.png"
56
- }
57
- };
58
- export {
59
- builder,
60
- dsafeLegalBranding,
61
- founder,
62
- globalBranding,
63
- socialMedia,
64
- worldBiblioTechBranding,
65
- worldBibliotekBranding
66
- };
1
+ var r={name:"Data Pond",email:"data@datapond.earth",whatsapp:"61490689222",linkedIn:"https://www.linkedin.com/in/datapond/",photoPath:"@the_library/public/branding/assets/founder-photo.jpg"},t={name:"Pond Enterprise",url:"https://pondenterprise.com",email:"hello@pondenterprise.com",whatsapp:"61490689222",linkedIn:"https://www.linkedin.com/company/pond-enterprise",logoPath:"@the_library/public/branding/assets/pond-enterprise-logo.svg"},n={facebook:"https://www.facebook.com/the.world.library",instagram:"https://www.instagram.com/world_public_library/",bluesky:"https://bsky.app/profile/the-world-library.bsky.social",linkedin:"https://www.linkedin.com/company/the-world-library",x:"https://x.com/realDataPond",kickstarter:"https://www.kickstarter.com/projects/datapond/the-world-library"},a={founder:r,builder:t,socialMedia:n,contactFormUrl:"https://pondenterprise.com"},i={appName:"World Biblio Tech",appUrl:"https://datapond.earth",comingSoonUrl:"https://worldbibliotech.com",contactFormUrl:"https://pondenterprise.com/p/contact-us",images:{logo:"@the_library/public/branding/assets/icon_transparent.png",favicon:"@the_library/public/branding/assets/library-favicon.png"}},o={appName:"D-SAFE Legal",appUrl:"https://dsafe.us",supportEmail:"hello@dsafe.us",images:{logo:"@the_library/public/branding/assets/dsafe-logo.png",favicon:"@the_library/public/branding/assets/dsafe-logo.png"}},e={appName:"World Bibliotek",appUrl:"https://worldbibliotek.com",images:{logo:"@the_library/public/branding/assets/icon_transparent.png",favicon:"@the_library/public/branding/assets/library-favicon.png"}};export{t as builder,o as dsafeLegalBranding,r as founder,a as globalBranding,n as socialMedia,i as worldBiblioTechBranding,e as worldBibliotekBranding};
67
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/branding/index.ts"],"mappings":";AAgDO,IAAM,UAAuB;AAAA,EAClC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AACb;AAEO,IAAM,UAAuB;AAAA,EAClC,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AACZ;AAWO,IAAM,cAA+B;AAAA,EAC1C,UAAU;AAAA,EACV,WAAW;AAAA,EACX,SAAS;AAAA,EACT,UAAU;AAAA,EACV,GAAG;AAAA,EACH,aAAa;AACf;AAEO,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAClB;AAGO,IAAM,0BAAuC;AAAA,EAClD,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAGO,IAAM,qBAAkC;AAAA,EAC7C,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAEO,IAAM,yBAAsC;AAAA,EACjD,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/branding/index.ts"],"mappings":"AAkIO,IAAMA,EAAuB,CAClC,KAAM,YACN,MAAO,sBACP,SAAU,cACV,SAAU,wCACV,UAAW,uDACb,EAEaC,EAAuB,CAClC,KAAM,kBACN,IAAK,6BACL,MAAO,2BACP,SAAU,cACV,SAAU,mDACV,SAAU,8DACZ,EAWaC,EAA+B,CAC1C,SAAU,6CACV,UAAW,kDACX,QAAS,yDACT,SAAU,qDACV,EAAG,6BACH,YAAa,iEACf,EAEaC,EAAiB,CAC5B,QAAAH,EACA,QAAAC,EACA,YAAAC,EACA,eAAgB,4BAClB,EAGaE,EAAuC,CAClD,QAAS,oBACT,OAAQ,yBACR,cAAe,8BACf,eAAgB,0CAChB,OAAQ,CACN,KAAM,2DACN,QAAS,yDACX,CACF,EAGaC,EAAkC,CAC7C,QAAS,eACT,OAAQ,mBACR,aAAc,iBACd,OAAQ,CACN,KAAM,qDACN,QAAS,oDACX,CACF,EAEaC,EAAsC,CACjD,QAAS,kBACT,OAAQ,6BACR,OAAQ,CACN,KAAM,2DACN,QAAS,yDACX,CACF","names":["founder","builder","socialMedia","globalBranding","worldBiblioTechBranding","dsafeLegalBranding","worldBibliotekBranding"]}
@@ -0,0 +1,2 @@
1
+ import{a as P}from"./chunk-EMA2QJTW.js";import{g as S}from"./chunk-FN52YV7L.js";import{c as O}from"./chunk-GWQNULP4.js";import{$a as $,Fa as Ce,Ka as J,La as ve,Lb as X,Ma as x,Oa as Pe,Ra as _,U as we,Z as Ae,_a as Y,aa as Ne,cb as L,db as Re,ea as Ee,h as Ie,jb as xe,l as B,n as q}from"./chunk-7G3BMGV2.js";var _e=[{inputs:[{internalType:"bytes32",name:"id",type:"bytes32"}],name:"getPriceUnsafe",outputs:[{components:[{internalType:"int64",name:"price",type:"int64"},{internalType:"uint64",name:"conf",type:"uint64"},{internalType:"int32",name:"expo",type:"int32"},{internalType:"uint256",name:"publishTime",type:"uint256"}],internalType:"struct PythStructs.Price",name:"price",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"updateData",type:"bytes[]"}],name:"getUpdateFee",outputs:[{internalType:"uint256",name:"feeAmount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes[]",name:"updateData",type:"bytes[]"}],name:"updatePriceFeeds",outputs:[],stateMutability:"payable",type:"function"}];var w=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"EmptyAddress",type:"error"},{inputs:[],name:"EmptyHash",type:"error"},{inputs:[],name:"EmptyString",type:"error"},{inputs:[{internalType:"address",name:"caller",type:"address"}],name:"Forbidden",type:"error"},{inputs:[],name:"NotFound",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"oldAdmin",type:"address"},{indexed:!0,internalType:"address",name:"newAdmin",type:"address"}],name:"AdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"string",name:"key",type:"string"},{indexed:!1,internalType:"string",name:"arweaveTxId",type:"string"},{indexed:!1,internalType:"bytes32",name:"sha256Hash",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"version",type:"uint256"}],name:"BlobRefAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"string",name:"name",type:"string"},{indexed:!0,internalType:"address",name:"contractAddress",type:"address"},{indexed:!1,internalType:"string",name:"abiUrl",type:"string"},{indexed:!1,internalType:"uint256",name:"version",type:"uint256"}],name:"ContractAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"string",name:"key",type:"string"},{indexed:!1,internalType:"string",name:"value",type:"string"},{indexed:!1,internalType:"uint256",name:"version",type:"uint256"}],name:"DataAdded",type:"event"},{inputs:[{internalType:"string",name:"key",type:"string"},{internalType:"string",name:"arweaveTxId",type:"string"},{internalType:"bytes32",name:"sha256Hash",type:"bytes32"}],name:"addBlobRef",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"address",name:"contractAddress",type:"address"},{internalType:"string",name:"abiUrl",type:"string"}],name:"addContract",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"string",name:"key",type:"string"},{internalType:"string",name:"value",type:"string"}],name:"addData",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"admin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newAdmin",type:"address"}],name:"changeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getAllBlobRefKeys",outputs:[{internalType:"string[]",name:"",type:"string[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAllContractNames",outputs:[{internalType:"string[]",name:"",type:"string[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"getAllDataKeys",outputs:[{internalType:"string[]",name:"",type:"string[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"key",type:"string"},{internalType:"uint256",name:"offset",type:"uint256"},{internalType:"uint256",name:"limit",type:"uint256"}],name:"getBlobRefHistory",outputs:[{components:[{internalType:"string",name:"arweaveTxId",type:"string"},{internalType:"bytes32",name:"sha256Hash",type:"bytes32"}],internalType:"struct AddressRegistry.BlobRef[]",name:"",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"name",type:"string"}],name:"getContractHistory",outputs:[{components:[{internalType:"address",name:"contractAddress",type:"address"},{internalType:"string",name:"abiUrl",type:"string"}],internalType:"struct AddressRegistry.ContractRecord[]",name:"",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"key",type:"string"}],name:"getDataHistory",outputs:[{internalType:"string[]",name:"",type:"string[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"key",type:"string"}],name:"getLatestBlobRef",outputs:[{internalType:"string",name:"",type:"string"},{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"name",type:"string"}],name:"getLatestContract",outputs:[{internalType:"address",name:"",type:"address"},{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"key",type:"string"}],name:"getLatestData",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}];var Le=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"EmptyAddress",type:"error"},{inputs:[{internalType:"address",name:"caller",type:"address"}],name:"Forbidden",type:"error"},{inputs:[],name:"ImportsFinalized",type:"error"},{inputs:[],name:"InvalidActionId",type:"error"},{inputs:[],name:"InvalidTargetMode",type:"error"},{inputs:[],name:"LengthMismatch",type:"error"},{inputs:[],name:"StorageFrozen",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint8",name:"actionId",type:"uint8"},{indexed:!1,internalType:"uint8",name:"objectType",type:"uint8"},{indexed:!1,internalType:"uint8",name:"propertyOrRelationId",type:"uint8"},{indexed:!1,internalType:"bool",name:"isRelation",type:"bool"},{indexed:!1,internalType:"uint8",name:"targetMode",type:"uint8"}],name:"ActionConfigSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"caller",type:"address"}],name:"AuthorizedAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"caller",type:"address"}],name:"AuthorizedRemoved",type:"event"},{anonymous:!1,inputs:[],name:"ImportsFinalized",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"frozen",type:"bool"}],name:"MigrationFrozen",type:"event"},{inputs:[],name:"VERSION",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"_isAuthorized",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"caller",type:"address"}],name:"addAuthorized",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"admin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"authorizedWriters",outputs:[{internalType:"address[]",name:"",type:"address[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"actorId",type:"uint32"}],name:"countByActor",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"targetKey",type:"bytes32"}],name:"countByTarget",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"targetUserId",type:"uint32"},{internalType:"uint32",name:"since",type:"uint32"}],name:"countNewSubscriptionsSince",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"exportActionConfigs",outputs:[{internalType:"uint8[]",name:"ids",type:"uint8[]"},{components:[{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint8",name:"propertyOrRelationId",type:"uint8"},{internalType:"bool",name:"isRelation",type:"bool"},{internalType:"uint8",name:"targetMode",type:"uint8"}],internalType:"struct IRelationshipIndexerStorage.ActionConfig[]",name:"configs",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"offset",type:"uint256"},{internalType:"uint256",name:"limit",type:"uint256"}],name:"exportActors",outputs:[{internalType:"uint256[]",name:"actorIds",type:"uint256[]"},{internalType:"uint256",name:"total",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"offset",type:"uint256"},{internalType:"uint256",name:"limit",type:"uint256"}],name:"exportAuthors",outputs:[{internalType:"bytes32[]",name:"objectKeys",type:"bytes32[]"},{internalType:"uint32[]",name:"authors",type:"uint32[]"},{internalType:"uint256",name:"total",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"offset",type:"uint256"},{internalType:"uint256",name:"limit",type:"uint256"}],name:"exportHintUsers",outputs:[{internalType:"uint256[]",name:"userIds",type:"uint256[]"},{internalType:"uint256",name:"total",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"userId",type:"uint32"},{internalType:"uint256",name:"offset",type:"uint256"},{internalType:"uint256",name:"limit",type:"uint256"}],name:"exportHints",outputs:[{components:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint32",name:"timestamp",type:"uint32"}],internalType:"struct IRelationshipIndexerStorage.SubscriptionHint[]",name:"hints",type:"tuple[]"},{internalType:"uint256",name:"total",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"offset",type:"uint256"},{internalType:"uint256",name:"limit",type:"uint256"}],name:"exportTargets",outputs:[{internalType:"bytes32[]",name:"targetKeys",type:"bytes32[]"},{internalType:"uint256",name:"total",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"finalizeImports",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"freezeForMigration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint8",name:"actionId",type:"uint8"}],name:"getActionConfig",outputs:[{components:[{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint8",name:"propertyOrRelationId",type:"uint8"},{internalType:"bool",name:"isRelation",type:"bool"},{internalType:"uint8",name:"targetMode",type:"uint8"}],internalType:"struct IRelationshipIndexerStorage.ActionConfig",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint256",name:"start",type:"uint256"},{internalType:"uint256",name:"count",type:"uint256"}],name:"getByActor",outputs:[{components:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint8",name:"actionId",type:"uint8"},{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint64",name:"objectId",type:"uint64"},{internalType:"uint64",name:"tagId",type:"uint64"},{internalType:"uint32",name:"timestamp",type:"uint32"}],internalType:"struct IRelationshipIndexerStorage.Relationship[]",name:"",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint64",name:"objectId",type:"uint64"},{internalType:"uint256",name:"start",type:"uint256"},{internalType:"uint256",name:"count",type:"uint256"}],name:"getByObjectTarget",outputs:[{components:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint8",name:"actionId",type:"uint8"},{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint64",name:"objectId",type:"uint64"},{internalType:"uint64",name:"tagId",type:"uint64"},{internalType:"uint32",name:"timestamp",type:"uint32"}],internalType:"struct IRelationshipIndexerStorage.Relationship[]",name:"",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint64",name:"tagId",type:"uint64"},{internalType:"uint256",name:"start",type:"uint256"},{internalType:"uint256",name:"count",type:"uint256"}],name:"getByTagTarget",outputs:[{components:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint8",name:"actionId",type:"uint8"},{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint64",name:"objectId",type:"uint64"},{internalType:"uint64",name:"tagId",type:"uint64"},{internalType:"uint32",name:"timestamp",type:"uint32"}],internalType:"struct IRelationshipIndexerStorage.Relationship[]",name:"",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"targetKey",type:"bytes32"},{internalType:"uint256",name:"start",type:"uint256"},{internalType:"uint256",name:"count",type:"uint256"}],name:"getByTarget",outputs:[{components:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint8",name:"actionId",type:"uint8"},{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint64",name:"objectId",type:"uint64"},{internalType:"uint64",name:"tagId",type:"uint64"},{internalType:"uint32",name:"timestamp",type:"uint32"}],internalType:"struct IRelationshipIndexerStorage.Relationship[]",name:"",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"targetUserId",type:"uint32"},{internalType:"uint32",name:"since",type:"uint32"}],name:"getNewSubscriptionsSince",outputs:[{internalType:"uint32[]",name:"actorIds",type:"uint32[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint8[]",name:"ids",type:"uint8[]"},{components:[{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint8",name:"propertyOrRelationId",type:"uint8"},{internalType:"bool",name:"isRelation",type:"bool"},{internalType:"uint8",name:"targetMode",type:"uint8"}],internalType:"struct IRelationshipIndexerStorage.ActionConfig[]",name:"configs",type:"tuple[]"}],name:"importActionConfigs",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint256",name:"startIndex",type:"uint256"},{components:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint8",name:"actionId",type:"uint8"},{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint64",name:"objectId",type:"uint64"},{internalType:"uint64",name:"tagId",type:"uint64"},{internalType:"uint32",name:"timestamp",type:"uint32"}],internalType:"struct IRelationshipIndexerStorage.Relationship[]",name:"rs",type:"tuple[]"}],name:"importActorRelationships",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32[]",name:"objectKeys",type:"bytes32[]"},{internalType:"uint32[]",name:"authors",type:"uint32[]"}],name:"importAuthors",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint32",name:"userId",type:"uint32"},{internalType:"uint256",name:"startIndex",type:"uint256"},{components:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint32",name:"timestamp",type:"uint32"}],internalType:"struct IRelationshipIndexerStorage.SubscriptionHint[]",name:"hints",type:"tuple[]"}],name:"importHints",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"targetKey",type:"bytes32"},{internalType:"uint256",name:"startIndex",type:"uint256"},{components:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint8",name:"actionId",type:"uint8"},{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint64",name:"objectId",type:"uint64"},{internalType:"uint64",name:"tagId",type:"uint64"},{internalType:"uint32",name:"timestamp",type:"uint32"}],internalType:"struct IRelationshipIndexerStorage.Relationship[]",name:"rs",type:"tuple[]"}],name:"importTargetRelationships",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"importsFinalized",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"caller",type:"address"}],name:"isAuthorized",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"migrationFrozen",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint64",name:"objectId",type:"uint64"}],name:"objectTargetKey",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint32",name:"actorId",type:"uint32"},{internalType:"uint256[]",name:"patches",type:"uint256[]"}],name:"recordActions",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"caller",type:"address"}],name:"removeAuthorized",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint8",name:"actionId",type:"uint8"},{components:[{internalType:"uint8",name:"objectType",type:"uint8"},{internalType:"uint8",name:"propertyOrRelationId",type:"uint8"},{internalType:"bool",name:"isRelation",type:"bool"},{internalType:"uint8",name:"targetMode",type:"uint8"}],internalType:"struct IRelationshipIndexerStorage.ActionConfig",name:"config",type:"tuple"}],name:"setActionConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint64",name:"tagId",type:"uint64"}],name:"tagTargetKey",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[],name:"unfreezeForMigration",outputs:[],stateMutability:"nonpayable",type:"function"}];import{createPublicClient as mt,http as yt}from"viem";import{DEFAULT_CHAIN_ID as gt,getChain as ft,getCanonicalRole as ht,getDeploymentEnvironment as bt,isChainDeployedForRole as St}from"@the_library/network-config";import{hexToString as at,stringToHex as it}from"viem";function W(r){let e=r.startsWith("0x")?r:"0x"+r;return at(e).replace(/\0/g,"")}function F(r){return it(r).padEnd(10,"0").slice(0,10)}import{BaseError as ot,ContractFunctionRevertedError as De,InsufficientFundsError as Me,NonceTooLowError as ke,TimeoutError as je,UserRejectedRequestError as Ue}from"viem";var st=[],f=class r extends Error{constructor(e,n,t){super(n),this.name="Web3Error",this.code=e,this.reason=t?.reason,this.data=t?.data,this.originalError=t?.originalError,Object.setPrototypeOf(this,r.prototype)}};function Z(r){if(r instanceof f)return r;let e=ut(r);for(let n of st)try{n(e)}catch(t){console.error("[web3/errors] registerOnErrorCb listener threw",t)}return e}var ct=r=>{let n=(r?.message||r?.reason||String(r)).toLowerCase();return n.includes("invalid compressedactions format")?new f("INVALID_COMPRESSED_ACTIONS","Invalid compressedActions format",{originalError:r}):n.includes("switch chain error")?new f("SWITCH_CHAIN_ERROR","Error Switching Chains",{data:r.code,reason:r.message,originalError:r}):n.includes("switching accounts while on an unsupported chainid")?new f("SWITCH_TO_UNSUPPORTED_CHAIN",n,{originalError:r}):null},Oe=r=>r instanceof Ue||r instanceof Me||r instanceof ke||r instanceof je||r instanceof De;function Be(r){if(r instanceof ot&&!Oe(r)){let e=r.walk(Oe);if(e)return Be(e)}return r instanceof Ue?new f("USER_REJECTED","User rejected the transaction",{reason:r.shortMessage,originalError:r}):r instanceof Me?new f("INSUFFICIENT_FUNDS","Insufficient funds for transaction",{reason:r.shortMessage,originalError:r}):r instanceof ke?new f("NONCE_TOO_LOW","Transaction nonce is too low",{reason:r.shortMessage,originalError:r}):r instanceof je?new f("TIMEOUT","Request timed out",{reason:r.shortMessage,originalError:r}):r instanceof De?new f("REVERT","Transaction reverted by contract",{reason:r.reason??r.data?.errorName??r.shortMessage,data:r.data,originalError:r}):null}function ut(r){let e=ct(r);if(e)return e;let n=Be(r);if(n)return n;let t=r?.message||r?.reason||String(r),a=t.toLowerCase();return a.includes("no account connected to wallet")?new f("NO_WALLET_CONNECTED","No account connected to wallet",{originalError:r}):a.includes("user rejected")||a.includes("user denied")||a.includes("user cancelled")||r?.code===4001||r?.code==="ACTION_REJECTED"?new f("USER_REJECTED","User rejected the transaction",{reason:r?.reason,originalError:r}):a.includes("insufficient funds")||a.includes("insufficient balance")||r?.code==="INSUFFICIENT_FUNDS"?new f("INSUFFICIENT_FUNDS","Insufficient funds for transaction",{reason:r?.reason,originalError:r}):a.includes("nonce too low")||a.includes("nonce has already been used")||r?.code==="NONCE_EXPIRED"?new f("NONCE_TOO_LOW","Transaction nonce is too low",{reason:r?.reason,originalError:r}):a.includes("revert")||a.includes("execution reverted")||r?.code==="CALL_EXCEPTION"||r?.code===3?new f("REVERT","Transaction reverted by contract",{reason:r?.reason||lt(r),data:r?.data,originalError:r}):a.includes("timeout")||r?.code==="TIMEOUT"?new f("TIMEOUT","Request timed out",{reason:r?.reason,originalError:r}):a.includes("network")||a.includes("connection")||r?.code==="NETWORK_ERROR"||r?.code==="ETIMEDOUT"?new f("NETWORK_ERROR","Network error occurred",{reason:r?.reason,originalError:r}):a.includes("invalid argument")||r?.code==="INVALID_ARGUMENT"?new f("INVALID_ARGUMENT","Invalid argument provided",{reason:r?.reason,originalError:r}):a.includes("unsupported")||r?.code==="UNSUPPORTED_OPERATION"?new f("UNSUPPORTED_OPERATION","Unsupported operation",{reason:r?.reason,originalError:r}):new f("UNKNOWN",t||"Unknown error occurred",{reason:r?.reason,data:r?.data,originalError:r})}function lt(r){if(r?.reason)return r.reason;if(r?.data?.message)return r.data.message;let n=(r?.message||"").match(/revert\s+(.+?)(?:\s|$|")/i);if(n)return n[1]}var pt="https://worldbibliotech.com",dt=/^https?:\/\/(?:worldbibliotech\.com|datapond\.earth)(?=$|[/?#]|https?:\/\/)/i,$e=/^[a-z][a-z0-9+.-]*:/i;function Q(r){let e;for(;e=r.match(dt);)r=r.slice(e[0].length);return!r||r.startsWith("/")||$e.test(r)?r:`/${r}`}function We(r){let e=Q(r);return $e.test(e)?e:pt+e}var Tt=3600,D=r=>[(r?.[0]||[]).map(e=>BigInt(e)),(r?.[1]||[]).map(e=>BigInt(e)),(r?.[2]||[]).map(String)],Fe=r=>({stripePaymentId:String(r.stripePaymentId??r[0]),amountUSD:BigInt(r.amountUSD??r[1]),username:String(r.username??r[2]),donor:String(r.donor??r[3]),country:String(r.country??r[4]),language:String(r.language??r[5]),timestamp:Number(r.timestamp??r[6]),chainId:Number(r.chainId??r[7])}),M=class{constructor(e,n="production"){this._contractAddresses={};this.chainId=e,this.environment=ht(n);let t=ft(e);if(this.config=t,this.deploymentEnvironment=bt(e,n),!St(e,n))throw new Error(`Chain EVM ${e} is not deployed for application environment ${n} (resolved deployment environment: ${this.deploymentEnvironment})`);this.chain=P(t),this.publicClient=mt({chain:this.chain,transport:yt(t.rpc)}),this.addressRegistry=this.createAddressRegistryReadAPI(),this.bouncerStorage=this.createBouncerStorageReadAPI(),this.scientistStorage=this.createScientistStorageReadAPI(),this.archivistStorage=this.createArchivistReadApi(),this.factory=this.createFactoryReadAPI(),this.accountManager=this.createAccountManagerReadAPI(),this.projectManagerStorage=this.createProjectManagerStorageReadAPI(),this.subscriptionManager=this.createSubscriptionManagerReadAPI(),this.libraryRegistryStorage=this.createLibraryRegistryStorageReadAPI(),this.publicLibraryStorage=this.createPublicLibraryStorageReadAPI(),this.dSafeHRStorage=this.createDSafeHRStorageReadAPI(),this.relationshipIndexerStorage=this.createRelationshipIndexerStorageReadAPI(),this._contractAddresses={...t.addresses||{}},this.ready=new Promise(async(i,s)=>{try{console.log(`[EvmClient] Initializing registry for chain ${this.chainId} (env: ${this.environment})...`);let o=await S.Initialize(this.chainId,this.addressRegistry,this.activeRegistryAddress,!0,this.environment);Object.assign(this._contractAddresses,o);let c=await S.loadAllKeys(this.chainId,this.environment);Object.assign(this._contractAddresses,c),this._manifestRegistryAddress=c.addressRegistry??o.addressRegistry,await S.waitForAbis(this.chainId,this.environment),console.log(`[EvmClient] Registry ready for ${this.chainId}. Addresses:`,this._contractAddresses),i()}catch(o){console.error(`[EvmClient] Failed to initialize registry for ${this.chainId}`,o),s(o)}})}setAccountOverride(e){this._accountOverride=e}async getUsdPrice(){let{price:e}=this.config;if(e.stable)return 1;let{pythOracle:n,usdPriceId:t}=e;if(!n||!t)throw new Error(`Pyth config missing for chain ${this.chainId}`);let a=await this.publicClient.readContract({address:n,abi:_e,functionName:"getPriceUnsafe",args:[t]}),i=Math.floor(Date.now()/1e3)-Number(a.publishTime??0);return a.publishTime!==void 0&&i>Tt&&console.warn(`[EvmClient] Pyth price on chain ${this.chainId} is ${Math.round(i/3600)}h old \u2014 contract payments will revert until a fresh price update is pushed`),Number(a.price)*Math.pow(10,Number(a.expo))}async getNativeBalance(e){return this.publicClient.getBalance({address:e})}get activeRegistryAddress(){return this._manifestRegistryAddress?this._manifestRegistryAddress:(this.deploymentEnvironment==="staging"&&this.config.addresses?.stagingAddressRegistry?this.config.addresses.stagingAddressRegistry:this.config.addresses?.addressRegistry)??""}addresses(){return this._contractAddresses}requireAbi(e){let n=S.getAbi(this.chainId,e,this.environment);if(!n)throw new Error(`[EvmClient] ABI for '${e}' on chain ${this.chainId} is not loaded. The registry ABI sync may have failed or not completed. Reads are blocked until it is ready.`);return n}async read(e){await this.ready;let n=this.addresses()[e.contractKey];if(!n){if(e.whenAddressMissing!==void 0)return e.whenAddressMissing;throw new Error(`[EvmClient] ${String(e.contractKey)} address missing for chain ${this.chainId}`)}try{let t=await this.publicClient.readContract({address:n,abi:this.requireAbi(e.contractName),functionName:e.functionName,args:e.args??[],...this._accountOverride?{account:this._accountOverride}:{}});return e.transform?e.transform(t):t}catch(t){throw Z(t)}}createAddressRegistryReadAPI(){return{getLatestContract:async e=>{let n=this.activeRegistryAddress;if(!n)throw new Error(`[EvmClient] addressRegistry address missing for chain ${this.chainId}`);let t=await this.publicClient.readContract({address:n,abi:w,functionName:"getLatestContract",args:[e]});return[t[0],t[1]]},getContractHistory:async e=>{let n=this.activeRegistryAddress;if(!n)throw new Error(`[EvmClient] addressRegistry address missing for chain ${this.chainId}`);return await this.publicClient.readContract({address:n,abi:w,functionName:"getContractHistory",args:[e]})},getAllContractNames:async()=>{let e=this.activeRegistryAddress;if(!e)throw new Error(`[EvmClient] addressRegistry address missing for chain ${this.chainId}`);return await this.publicClient.readContract({address:e,abi:w,functionName:"getAllContractNames",args:[]})},getLatestData:async e=>{let n=this.activeRegistryAddress;if(!n)throw new Error(`[EvmClient] addressRegistry address missing for chain ${this.chainId}`);let t=await this.publicClient.readContract({address:n,abi:w,functionName:"getLatestData",args:[e]});return String(t)},getAllDataKeys:async()=>{let e=this.activeRegistryAddress;if(!e)throw new Error(`[EvmClient] addressRegistry address missing for chain ${this.chainId}`);return await this.publicClient.readContract({address:e,abi:w,functionName:"getAllDataKeys",args:[]})},getLatestBlobRef:async e=>{let n=this.activeRegistryAddress;if(!n)throw new Error(`[EvmClient] addressRegistry address missing for chain ${this.chainId}`);let t=await this.publicClient.readContract({address:n,abi:w,functionName:"getLatestBlobRef",args:[e]});return[t[0],t[1]]},getBlobRefHistory:async(e,n,t)=>{let a=this.activeRegistryAddress;if(!a)throw new Error(`[EvmClient] addressRegistry address missing for chain ${this.chainId}`);return(await this.publicClient.readContract({address:a,abi:w,functionName:"getBlobRefHistory",args:[e,BigInt(n),BigInt(t)]})).map(s=>[s.arweaveTxId,s.sha256Hash])},admin:async()=>{let e=this.activeRegistryAddress;if(!e)throw new Error(`[EvmClient] addressRegistry address missing for chain ${this.chainId}`);let n=await this.publicClient.readContract({address:e,abi:w,functionName:"admin",args:[]});return String(n)},getLastUpdateInfo:async e=>{let n=this.activeRegistryAddress;if(!n)return null;let t={type:"event",name:"ContractAdded",inputs:[{type:"string",name:"name",indexed:!0},{type:"address",name:"contractAddress",indexed:!0},{type:"string",name:"abiUrl"},{type:"uint256",name:"version"}]},a=async o=>{let c=await this.publicClient.getBlock({blockNumber:o.blockNumber});return{timestamp:Number(c.timestamp),blockNumber:o.blockNumber,transactionHash:o.transactionHash}};try{let o=await this.publicClient.getLogs({address:n,event:t,args:{name:e},fromBlock:0n});return o.length===0?null:await a(o[o.length-1])}catch{}let i=9999n,s=50;try{let c=await this.publicClient.getBlockNumber();for(let p=0;p<s&&c>=0n;p++){let y=c>=i?c-i:0n,h=await this.publicClient.getLogs({address:n,event:t,args:{name:e},fromBlock:y,toBlock:c});if(h.length>0)return await a(h[h.length-1]);if(y===0n)break;c=y-1n}return null}catch(o){return console.error(`[EvmClient] Failed to get last update info for ${e}:`,o),null}}}}createArchivistReadApi(){let e="backupStorage",n="BackupStorage";return{userLevel:t=>this.read({contractKey:e,contractName:n,functionName:"userLevel",args:[t],transform:Number}),isAuthorized:t=>this.read({contractKey:e,contractName:n,functionName:"isAuthorized",args:[t],transform:Boolean}),nbWrites:t=>this.read({contractKey:e,contractName:n,functionName:"nbWrites",args:[t],transform:Number}),loadActions:t=>this.read({contractKey:e,contractName:n,functionName:"loadActions",args:[t],transform:D}),loadActionsSince:(t,a)=>this.read({contractKey:e,contractName:n,functionName:"loadActionsSince",args:[t,a],transform:D})}}createProjectManagerStorageReadAPI(){return{nbProjects:async()=>{if(await this.ready,!this.addresses().factory)return console.error("[EvmClient] Factory address missing in config!"),0;try{return await this.read({contractKey:"factory",contractName:"Factory",functionName:"nbProjects",transform:Number})}catch(n){throw console.error("[EvmClient] nbProjects failed:",n),n}},balanceOfAddress:e=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"getUserBalances",args:[e],transform:n=>({total:Number(n[0]),donations:Number(n[1]),unspent:Number(n[2])})}),loadProject:e=>this.read({contractKey:"factory",contractName:"Factory",functionName:"getProject",args:[e],transform:n=>({id:e,balance:n[1].reduce((t,a)=>t+Number(a),0),versions:n[2].map(t=>(t.uri=We(t.uri),t.publicationDate=new Date(Number(t.publicationDate)*1e3),t.maximumFunding=Number(t.maximumFunding),t.minimumFundingBeforeStartWork=Number(t.minimumFundingBeforeStartWork),t.tags=t.tags.map(Number),t.status=Number(t.status),t)),availableLanguages:n[3].map(t=>W(t))})}),addressDonationsPerProject:e=>this.read({contractKey:"factory",contractName:"Factory",functionName:"addressDonationsPerProject",args:[e],transform:n=>n.map(Number)}),getProjectSupportedLanguages:e=>this.read({contractKey:"factory",contractName:"Factory",functionName:"getProjectSupportedLanguages",args:[e],transform:n=>n.map(String)}),projectVotingBalances:e=>this.read({contractKey:"factory",contractName:"Factory",functionName:"getProjectAllocatedBudget",args:[e],transform:n=>n.map(Number)}),getWeeklyDonations:e=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"getWeeklyDonations",args:[BigInt(e)],transform:n=>n.map(Fe)}),getDonationsRange:(e,n)=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"getDonationsRange",args:[BigInt(e),BigInt(n)],transform:t=>t.map(Fe)}),isAuthorized:e=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"isAuthorized",args:[e],transform:Boolean}),admin:()=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"admin",transform:String}),getNbLanguages:e=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"getNbLanguages",args:[e],transform:Number}),getLanguageAtIndex:(e,n)=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"getLanguageAtIndex",args:[e,n],transform:t=>W(t)}),getNbVersions:(e,n)=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"getNbVersions",args:[e,F(n)],transform:Number}),getVersion:(e,n,t)=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"getVersion",args:[e,F(n),t],transform:a=>({uri:Q(a.uri),publicationDate:new Date(Number(a.publicationDate)*1e3),name:a.name,headline:a.headline,descriptionMarkdown:a.descriptionMarkdown,arweaveAddressLogo:a.arweaveAddressLogo,arweaveAddressBanner:a.arweaveAddressBanner,minimumFundingBeforeStartWork:Number(a.minimumFundingBeforeStartWork),maximumFunding:Number(a.maximumFunding),tags:a.tags.map(Number),status:Number(a.status),complexity:Number(a.complexity)})}),getVotingBalance:(e,n)=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"getVotingBalance",args:[e,F(n)]}),getUserBalances:e=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"getUserBalances",args:[e],transform:n=>[BigInt(n[0]),BigInt(n[1]),BigInt(n[2])]}),getVotePresets:()=>this.read({contractKey:"projectManagerStorage",contractName:"ProjectManagerStorage",functionName:"getVotePresets",transform:([e,n,t])=>e.map((a,i)=>({projectId:Number(a),lang:W(n[i]),bps:Number(t[i])}))})}}createBouncerStorageReadAPI(){let e="bouncerStorage",n="BouncerStorage";return{hasAccount:async t=>{await this.ready;let a=this.addresses().bouncerStorage;if(!a)return!1;try{let i=S.getAbi(this.chainId,n,this.environment);return i?!!await this.publicClient.readContract({address:a,abi:i,functionName:"hasAccount",args:[t]}):!1}catch(i){return console.error(`[EvmClient] hasAccount FAILED for ${t} (returning false):`,i),!1}},userInfos:t=>this.read({contractKey:e,contractName:n,functionName:"userInfos",args:[t],transform:a=>[String((a.username??a[0])||""),String((a.country??a[1])||""),String((a.language??a[2])||""),Number((a.newUserId??a[3])||0)]}),userData:t=>this.read({contractKey:e,contractName:n,functionName:"userData",args:[t],transform:a=>[Number(a.id??a[0]),String(a.addr??a[1]),String(a.username??a[2]),String(a.language??a[3]),String(a.country??a[4])]}),userIdOf:t=>this.read({contractKey:e,contractName:n,functionName:"userIdOf",args:[t],transform:Number}),userIdToUsername:t=>this.read({contractKey:e,contractName:n,functionName:"userIdToUsername",args:[BigInt(t)],transform:String}),userAddr:t=>this.read({contractKey:e,contractName:n,functionName:"userAddr",args:[BigInt(t)],transform:String}),getUsernameByAddress:t=>this.read({contractKey:e,contractName:n,functionName:"getUsernameByAddress",args:[t],transform:String}),getAccountCountByCountryLanguage:(t,a)=>this.read({contractKey:e,contractName:n,functionName:"getAccountCountByCountryLanguage",args:[t,a],transform:Number}),nbAccounts:()=>this.read({contractKey:e,contractName:n,functionName:"nbAccounts",transform:Number}),getAllLocationCounts:()=>this.read({contractKey:e,contractName:n,functionName:"getAllLocationCounts",transform:t=>t.map(a=>({country:String(a.country??a[0]),language:String(a.language??a[1]),count:Number(a.count??a[2])}))}),getActiveLocationCount:()=>this.read({contractKey:e,contractName:n,functionName:"getActiveLocationCount",transform:Number}),identityStats:()=>this.read({contractKey:e,contractName:n,functionName:"identityStats",transform:t=>[Number(t[0]),Number(t[1])]}),isAuthorized:t=>this.read({contractKey:e,contractName:n,functionName:"isAuthorized",args:[t],transform:Boolean}),getLatestRegisteredUser:async()=>{try{let t=await this.bouncerStorage.nbAccounts();return t===0?null:await this.bouncerStorage.userAddr(t)}catch(t){return console.error("[EvmClient] getLatestRegisteredUser FAILED:",t),null}},getTokenName:()=>this.read({contractKey:e,contractName:n,functionName:"getTokenName",transform:String}),usernameToUserId:t=>this.read({contractKey:e,contractName:n,functionName:"usernameToUserId",args:[t],transform:Number}),userIdByEmailHash:t=>this.read({contractKey:e,contractName:n,functionName:"userIdByEmailHash",args:[t],transform:Number})}}createScientistStorageReadAPI(){let e="scientistStorage",n="ScientistStorage";return{getDeploymentDate:()=>this.read({contractKey:e,contractName:n,functionName:"getDeploymentDate",transform:t=>[Number(t[0]),Number(t[1])]}),getLastMonthId:()=>this.read({contractKey:e,contractName:n,functionName:"getLastMonthId",transform:Number}),getStatsRaw:(t,a,i)=>this.read({contractKey:e,contractName:n,functionName:"getStatsRaw",args:[BigInt(t),BigInt(a),BigInt(i)],transform:s=>[s[0].map(o=>BigInt(o)),s[1].map(o=>Number(o))]}),isAuthorized:t=>this.read({contractKey:e,contractName:n,functionName:"isAuthorized",args:[t],transform:Boolean})}}createFactoryReadAPI(){let e="factory",n="Factory";return{nbWritesByUsername:t=>this.read({contractKey:e,contractName:n,functionName:"nbWritesByUsername",args:[t],transform:Number}),loadUsername:t=>this.read({contractKey:e,contractName:n,functionName:"loadUsername",args:[t],transform:D}),loadUsernameSince:(t,a)=>this.read({contractKey:e,contractName:n,functionName:"loadUsernameSince",args:[t,a],transform:D}),load:()=>this.read({contractKey:e,contractName:n,functionName:"load",transform:D}),isAuthorized:t=>this.read({contractKey:e,contractName:n,functionName:"isAuthorized",args:[t],transform:Boolean}),owner:()=>this.read({contractKey:e,contractName:n,functionName:"owner",transform:String}),oracleSigner:()=>this.read({contractKey:e,contractName:n,functionName:"oracleSigner",transform:String}),bouncerStorage:()=>this.read({contractKey:e,contractName:n,functionName:"bouncerStorage",transform:String}),scientistStorage:()=>this.read({contractKey:e,contractName:n,functionName:"scientistStorage",transform:String}),backupStorage:()=>this.read({contractKey:e,contractName:n,functionName:"backupStorage",transform:String}),projectManagerStorage:()=>this.read({contractKey:e,contractName:n,functionName:"projectManagerStorage",transform:String})}}createAccountManagerReadAPI(){let e="accountManager",n="AccountManager";return{address:async()=>{await this.ready;let t=this.addresses()[e];if(!t)throw new Error(`[EvmClient] accountManager address missing for chain ${this.chainId}`);return t},oracleSigner:()=>this.read({contractKey:e,contractName:n,functionName:"oracleSigner",transform:String}),usedDeletionConsents:t=>this.read({contractKey:e,contractName:n,functionName:"usedDeletionConsents",args:[t],transform:Boolean}),isPaymentIntentUsed:t=>this.read({contractKey:e,contractName:n,functionName:"isPaymentIntentUsed",args:[t],transform:Boolean})}}createSubscriptionManagerReadAPI(){let e="subscriptionManager",n="SubscriptionManager";return{getSubscriptions:t=>this.read({contractKey:e,contractName:n,functionName:"getSubscriptions",args:[t],transform:a=>[...a],whenAddressMissing:[]}),getSubscriptionCount:t=>this.read({contractKey:e,contractName:n,functionName:"getSubscriptionCount",args:[t],transform:BigInt,whenAddressMissing:0n}),isSubscribed:(t,a)=>this.read({contractKey:e,contractName:n,functionName:"isSubscribed",args:[t,a],transform:Boolean,whenAddressMissing:!1}),scoreOf:t=>this.read({contractKey:e,contractName:n,functionName:"scoreOf",args:[t],transform:BigInt,whenAddressMissing:0n})}}createLibraryRegistryStorageReadAPI(){let e="libraryRegistryStorage",n="LibraryRegistryStorage";return{admin:()=>this.read({contractKey:e,contractName:n,functionName:"admin",transform:String}),getUnverifiedCollectionIds:()=>this.read({contractKey:e,contractName:n,functionName:"getUnverifiedCollectionIds",transform:t=>[...t]}),getVerifiedCollectionIds:()=>this.read({contractKey:e,contractName:n,functionName:"getVerifiedCollectionIds",transform:t=>[...t]}),getCollection:t=>this.read({contractKey:e,contractName:n,functionName:"getCollection",args:[t],transform:a=>({id:String(a.id),slug:String(a.slug),manifestUrl:String(a.manifestUrl),importerUsername:String(a.importerUsername),owner:String(a.owner),verified:!!a.verified,fileCount:Number(a.fileCount),libraryType:Number(a.libraryType),publicLibraryId:Number(a.publicLibraryId),country:String(a.country),language:String(a.language),isPublic:!!a.isPublic,createdAt:Number(a.createdAt),updatedAt:Number(a.updatedAt),initialBookCount:Number(a.initialBookCount),dSafeBookCount:Number(a.dSafeBookCount),importStatus:Number(a.importStatus),published:!!a.published,preferredFormat:String(a.preferredFormat)})})}}createPublicLibraryStorageReadAPI(){let e="publicLibraryStorage",n="PublicLibraryStorage";return{libraryExists:t=>this.read({contractKey:e,contractName:n,functionName:"libraryExists",args:[t],transform:Boolean}),getPublicLibrary:t=>this.read({contractKey:e,contractName:n,functionName:"getPublicLibrary",args:[t],transform:a=>({id:Number(a.id),name:String(a.name),physicalAddress:String(a.physicalAddress),country:String(a.country),language:String(a.language),ownership:Number(a.ownership),website:String(a.website),preferredFormat:String(a.preferredFormat),createdAt:Number(a.createdAt),updatedAt:Number(a.updatedAt)})}),nbLibraries:()=>this.read({contractKey:e,contractName:n,functionName:"nbLibraries",transform:Number}),formatExists:t=>this.read({contractKey:e,contractName:n,functionName:"formatExists",args:[t],transform:Boolean}),getAllFormats:()=>this.read({contractKey:e,contractName:n,functionName:"getAllFormats",transform:t=>[...t]})}}createDSafeHRStorageReadAPI(){let e="dSafeHRStorage",n="DSafeHRStorage";return{isStaffOf:(t,a)=>this.read({contractKey:e,contractName:n,functionName:"isStaffOf",args:[t,a],transform:Boolean}),verifyMember:t=>this.read({contractKey:e,contractName:n,functionName:"verifyMember",args:[t],transform:Boolean}),getStaffLibraries:t=>this.read({contractKey:e,contractName:n,functionName:"getStaffLibraries",args:[t],transform:a=>a.map(Number)}),getCurrentRecordCounter:(t,a)=>this.read({contractKey:e,contractName:n,functionName:"getCurrentRecordCounter",args:[t,a],transform:Number}),getLibrarySequence:t=>this.read({contractKey:e,contractName:n,functionName:"getLibrarySequence",args:[t],transform:Number}),getPublishLock:t=>this.read({contractKey:e,contractName:n,functionName:"getPublishLock",args:[t],transform:a=>[String(a[0]),Number(a[1]),!!a[2]]})}}createRelationshipIndexerStorageReadAPI(){let e="relationshipIndexerStorage",n=i=>({actorId:Number(i.actorId??i[0]),actionId:Number(i.actionId??i[1]),objectType:Number(i.objectType??i[2]),objectId:BigInt(i.objectId??i[3]),tagId:BigInt(i.tagId??i[4]),timestamp:Number(i.timestamp??i[5])}),t=i=>(i||[]).map(n),a=async(i,s,o)=>{await this.ready;let c=this.addresses()[e];if(!c)throw new Error(`[EvmClient] relationshipIndexerStorage address missing for chain ${this.chainId}`);try{let p=await this.publicClient.readContract({address:c,abi:Le,functionName:i,args:s});return o(p)}catch(p){throw Z(p)}};return{getByObjectTarget:(i,s,o,c)=>a("getByObjectTarget",[i,s,BigInt(o),BigInt(c)],t),getByTagTarget:(i,s,o)=>a("getByTagTarget",[i,BigInt(s),BigInt(o)],t),getByActor:(i,s,o)=>a("getByActor",[i,BigInt(s),BigInt(o)],t),countByObjectTarget:async(i,s)=>{let o=await a("objectTargetKey",[i,s],c=>c);return a("countByTarget",[o],Number)},countByTagTarget:async i=>{let s=await a("tagTargetKey",[i],o=>o);return a("countByTarget",[s],Number)},countByActor:i=>a("countByActor",[i],Number),getNewSubscriptionsSince:(i,s)=>a("getNewSubscriptionsSince",[i,s],o=>(o||[]).map(Number)),countNewSubscriptionsSince:(i,s)=>a("countNewSubscriptionsSince",[i,s],Number)}}async getRegistryStatus(){return await this.ready,S.getLoadingStatus(this.chainId)}};function gn(r=gt,e="production"){return new M(r,e)}import{isChainDeployedForRole as It}from"@the_library/network-config";var wt={},At={},Nt={},Et={};function Ke(r,e){let n=e==="staging"?Et:Nt,t=e==="staging"?At:wt,a=n[r];if(!a){if(!It(r,e))throw new Error(`No EVM client for chain ${r} (${e})`);a=new M(r,e),n[r]=a,t[r]=a}return a}function A(r,e="production"){return Ke(r,e)}function ee(r,e="production"){return Ke(r,e)}async function Tn(r,e="production"){let n=ee(r,e);return await n.ready,await S.waitForAbis(r,e),n}var He="production",wn=r=>{He=r},k=()=>He;function Ct(){let r="@the_library/web3-session:",e="infos_web3_",n="active_session",t={active:null,known:[]},a=new Set,i=()=>a.forEach(u=>u()),s=(u,l)=>`${e}${l}_${u.toLowerCase()}`,o=u=>{if(typeof localStorage>"u")return;let l=s(u.account,u.chainId);localStorage.setItem(r+l,JSON.stringify(u))},c=(u,l)=>{if(typeof localStorage>"u")return;let d=s(u,l);localStorage.removeItem(r+d)},p=()=>{typeof localStorage>"u"||(t.active?localStorage.setItem(r+n,JSON.stringify({address:t.active.account,chainId:t.active.chainId})):localStorage.removeItem(r+n))},y=()=>{if(typeof localStorage>"u")return null;let u=localStorage.getItem(r+n);if(!u)return null;try{let l=JSON.parse(u);return t.known.find(d=>d.account.toLowerCase()===l.address.toLowerCase()&&d.chainId===l.chainId)||null}catch{return null}};function h(){if(typeof localStorage>"u")return;let u="infos_evm_";for(let l=0;l<localStorage.length;l++){let d=localStorage.key(l);if(!d)continue;let b=d.startsWith(r)?d.slice(r.length):null;if(b&&b.startsWith(u)){let I=r+e+b.slice(u.length);localStorage.setItem(I,localStorage.getItem(d)),localStorage.removeItem(d),l--}}}return{getState(){return t},setActive(u){t.active=u,u&&(t.known.some(d=>d.account.toLowerCase()===u.account.toLowerCase()&&d.chainId===u.chainId)||(t.known.push(u),o(u))),p(),i()},addKnown(u){let l=t.known.findIndex(d=>d.account.toLowerCase()===u.account.toLowerCase()&&d.chainId===u.chainId);l>=0?t.known[l]=u:t.known.push(u),o(u),t.active&&t.active.account.toLowerCase()===u.account.toLowerCase()&&t.active.chainId===u.chainId&&(t.active=u,p()),i()},updateAccount(u,l,d){let b=t.known.find(I=>I.account.toLowerCase()===u.toLowerCase()&&I.chainId===l);b&&(Object.assign(b,d),o(b),t.active&&t.active.account.toLowerCase()===u.toLowerCase()&&t.active.chainId===l&&(Object.assign(t.active,d),p()),i())},removeAccount(u,l){t.known=t.known.filter(d=>!(d.account.toLowerCase()===u.toLowerCase()&&d.chainId===l)),c(u,l),t.active&&t.active.account.toLowerCase()===u.toLowerCase()&&t.active.chainId===l&&(t.active=null,p()),i()},clearAll(){if(typeof localStorage<"u"){let u=[];for(let l=0;l<localStorage.length;l++){let d=localStorage.key(l);d&&d.startsWith(r)&&u.push(d)}for(let l of u)localStorage.removeItem(l)}t.active=null,t.known=[],i()},setLastSavedPatchIndex(u,l,d){this.updateAccount(u,l,{lastPatchIndex:d})},setLastRestorationIndex(u,l,d){this.updateAccount(u,l,{lastRestorationIndex:d})},lastSyncCounters(u,l){let d=t.known.find(b=>b.account.toLowerCase()===u.toLowerCase()&&b.chainId===l);return{lastPatchIndex:d?.lastPatchIndex??0,lastRestorationIndex:d?.lastRestorationIndex??0}},updateProjectVotes(u,l,d,b){let I=t.known.find(v=>v.account.toLowerCase()===u.toLowerCase()&&v.chainId===l);if(I){let v=d-1;if(v<0)return;let R=[...I.donationsPerProject||[]];for(;R.length<=v;)R.push(0);R[v]=(R[v]||0)+b,this.updateAccount(u,l,{donationsPerProject:R})}},persist(){for(let u of t.known)o(u);p()},load(){if(typeof localStorage>"u")return;h();let u=[];for(let l=0;l<localStorage.length;l++){let d=localStorage.key(l);if(d&&d.startsWith(r+e))try{let b=localStorage.getItem(d);if(b){let I=JSON.parse(b);u.push(I)}}catch(b){console.warn("Failed to parse loaded session account:",b)}}t.known=u,t.active=y(),i()},subscribe(u){return a.add(u),()=>a.delete(u)}}}var T=Ct(),Nn=()=>T.getState().known.filter(r=>r.hasAccount);var ne=class{constructor(){this.listeners=new Map}on(e,n){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(n),()=>this.off(e,n)}off(e,n){let t=this.listeners.get(e);t&&(t.delete(n),t.size===0&&this.listeners.delete(e))}emit(e,n){let t=this.listeners.get(e);t&&t.forEach(a=>{try{a(n)}catch(i){console.error(`Error in event listener for ${e}:`,i)}})}once(e,n){let t=a=>{n(a),this.off(e,t)};return this.on(e,t)}clear(e){e?this.listeners.delete(e):this.listeners.clear()}listenerCount(e){return this.listeners.get(e)?.size||0}},te=null;function re(){return te||(te=new ne),te}var vt=(c=>(c.WALLET_STATE_CHANGED="wallet:state:changed",c.WALLET_CHAIN_CHANGED="wallet:chain:changed",c.WALLET_ERROR="wallet:error",c.SESSION_UPDATED="session:updated",c.WALLET_DISCONNECTED="wallet:disconnected",c.SESSION_DELETED="session:deleted",c.SAVE_RESTORED="save:restored",c.SUBSCRIPTION_PATCHES_SYNCED="subscription:patches:synced",c))(vt||{}),Pt=(g=>(g.INITIALIZING="INITIALIZING",g.UPDATING_STATE_STARTED="UPDATING_STATE_STARTED",g.UPDATING_STATE_DONE="UPDATING_STATE_DONE",g.UPDATING_STATE_FAILED="UPDATING_STATE_FAILED",g.READY="READY",g.INTERNAL_ERROR="INTERNAL_ERROR",g.NOT_CONNECTED="NOT_CONNECTED",g.NOT_INSTALLED="NOT_INSTALLED",g.NOT_ALLOWED="NOT_ALLOWED",g.NOT_SUPPORTED="NOT_SUPPORTED",g.NOT_READY="NOT_READY",g.CONNECT_STARTED="CONNECT_STARTED",g.CONNECT_DONE="CONNECT_DONE",g.CONNECT_FAILED="CONNECT_FAILED",g.TRANSACTION_STARTED="TRANSACTION_STARTED",g.TRANSACTION_DONE="TRANSACTION_DONE",g.TRANSACTION_FAILED="TRANSACTION_FAILED",g.TIMEOUT="TIMEOUT",g.CHAIN_CHANGED_STARTED="CHAIN_CHANGED_STARTED",g.CHAIN_CHANGED_DONE="CHAIN_CHANGED_DONE",g.CHAIN_CHANGED_FAILED="CHAIN_CHANGED_FAILED",g.WALLET_INSTALLED="WALLET_INSTALLED",g))(Pt||{}),Rt=(m=>(m.NO_ACCOUNTS="NO_ACCOUNTS",m.USER_REJECTED="USER_REJECTED",m.INSUFFICIENT_FUNDS="INSUFFICIENT_FUNDS",m.LOGIN_INTO_WALLET="LOGIN_INTO_WALLET",m.REQUEST_ALREADY_PENDING="REQUEST_ALREADY_PENDING",m.UNKNOWN_ERROR="UNKNOWN_ERROR",m.CONFIG_MISSING="CONFIG_MISSING",m.NOT_SUPPORTED="NOT_SUPPORTED",m.NOT_CONNECTED="NOT_CONNECTED",m.NOT_INSTALLED="NOT_INSTALLED",m.NOT_ALLOWED="NOT_ALLOWED",m.NETWORK_NOT_SUPPORTED="NETWORK_NOT_SUPPORTED",m))(Rt||{}),xt=(s=>(s.NO_ACCOUNT_SWITCH="NO_ACCOUNT_SWITCH",s.NO_NETWORK_SWITCH="NO_NETWORK_SWITCH",s.NETWORK_NOT_SUPPORTED="NETWORK_NOT_SUPPORTED",s.NO_INTERNET="NO_INTERNET",s.NO_DISCONNECT="NO_DISCONNECT",s.NO_ACCOUNT_DISCONNECT="NO_ACCOUNT_DISCONNECT",s))(xt||{});var N=r=>e=>{re().emit(r,e)},E=r=>e=>re().on(r,e),ae={emitWalletStateEvent:N("wallet:state:changed"),onWalletStateEvent:E("wallet:state:changed"),emitSessionUpdated:N("session:updated"),onSessionUpdated:E("session:updated"),emitChainChanged:N("wallet:chain:changed"),onChainChanged:E("wallet:chain:changed"),emitDisconnected:N("wallet:disconnected"),onDisconnected:E("wallet:disconnected"),emitWalletSessionDeleted:N("session:deleted"),onWalletSessionDeleted:E("session:deleted"),emitWalletError:N("wallet:error"),onWalletError:E("wallet:error"),emitSaveRestored:N("save:restored"),onSaveRestored:E("save:restored"),emitSubscriptionPatchesSynced:N("subscription:patches:synced"),onSubscriptionPatchesSynced:E("subscription:patches:synced")};async function K(r,e,n,t,a){await Ce(r,e,n,t),!(!a||!$.threadInstance)&&await Promise.all([...Ee().values()].flatMap(i=>[...i.values()]).map(async i=>{let s=[],o=$.observePending(c=>{if(B(c)&&(c.objectType===i.schema.objectId&&c.objectId===i.id&&s.push(c),c.operation===q.EditRelation)){let p=Ie(c);p?.objectType===i.schema.objectId&&p.objectId===i.id&&s.push(p)}});try{let c=await $.threadInstance.sendRequest({cmd:"getRecord",payload:{objectType:i.schema.objectId,id:i.id,creatorUsername:i.creatorUsername}});if(c)i.replaceSnapshot(c);else{let p=new X(i.schema.objectId,X.createNewRequest(i.id));p.patch({operation:q.EditPropertyNumber,objectType:i.schema.objectId,objectId:i.id,propertyId:6,langId:0,value:1},!1,!1),i.replaceSnapshot(p.snapshot())}for(let p of s)i.patch(p,!1,!1);for(let p of we(i.schema))Ae.updateIndex(i.schema.objectId,p.propId,i);Ne.trigger(i)}finally{o()}}))}var _t="0xcA11bde05977b3631167028862bE2a173976CA11";function Lt(r){let e=S.getAddress(r.chainId,"subscriptionManager",r.environment),n=S.getAbi(r.chainId,"SubscriptionManager",r.environment);return!e||!n?null:{address:e,abi:n}}async function ze(r,e){let n=new Map;if(e.length===0)return n;let t=Lt(r);if(t)try{let a=await r.publicClient.multicall({multicallAddress:_t,allowFailure:!0,contracts:e.map(i=>({...t,functionName:"getSubscriptions",args:[i]}))});return e.forEach((i,s)=>{let o=a[s];if(o?.status!=="success")throw new Error(`Could not read subscriptions for ${i}`);n.set(i,(o.result??[]).map(Number))}),n}catch(a){console.warn("[subscription/contract] multicall getSubscriptions failed, falling back to sequential reads",a)}return await Promise.all(e.map(async a=>{n.set(a,await r.subscriptionManager.getSubscriptions(a))})),n}var Ot=50,Dt=1e3;async function Ge(r,e,n){let t=n?.maxNodes??Dt,a=n?.maxDepth,i=new Set([e]),s=new Map([[e,0]]),o=new Map,c=[e],p=!1;for(;c.length>0&&i.size<t;){let y=c.splice(0,Ot),h=await ze(r,y);for(let m of y){let u=h.get(m)??[];o.set(m,{userId:m,subscriptions:u});for(let l of u){if(i.has(l)||i.size>=t)continue;let d=(s.get(m)??0)+1;if(a!==void 0&&d>a){p=!0;continue}i.add(l),s.set(l,d),c.push(l)}}}return{rootUserId:e,nodes:o,truncated:c.length>0||p}}async function Mt(r,e,n){let[t,a,i]=await r.archivistStorage.loadActionsSince(e,n);return!t||t.length===0?null:{userId:e,fromIndex:n,toIndex:n+t.length,raw:{compressedActions:t,indexes:a,stringIndexes:i}}}async function Ve(r,e,n,t){let a=t?.concurrency??4,i=Array.from(e.nodes.keys()),s=[];for(let o=0;o<i.length;o+=a){let c=i.slice(o,o+a),p=await Promise.all(c.map(y=>Mt(r,y,n?.get(y)??0).catch(h=>(console.warn(`[subscription/patch-resolver] failed to fetch patches for userId ${y}`,h),null))));for(let y of p)y&&s.push(y)}return s}function H(r,e){let n=r.raw;return{version:e,patches:n.compressedActions,textIndex:n.indexes.map(Number),textData:n.stringIndexes}}var z=class{constructor(e){this.config=e;this.client=ee(e.chainId,e.environment??"production"),this.defaultMaxWalkNodes=e.maxWalkNodes,this.defaultMaxDepth=e.maxDepth}async walkGraph(e,n){return await this.client.ready,Ge(this.client,e,{maxNodes:n?.maxNodes??this.defaultMaxWalkNodes,maxDepth:n?.maxDepth??this.defaultMaxDepth})}async fetchPatches(e,n,t){return await this.client.ready,Ve(this.client,e,n,t)}async sync(e,n){let t=await this.walkGraph(e,n),a=await this.fetchPatches(t,void 0,n),i=new Map;for(let[o,c]of t.nodes)i.set(o,c.subscriptions.length);let s=new Map;for(let o of a)s.set(o.userId,Math.max(s.get(o.userId)??0,o.toIndex));for(let o of t.nodes.keys())s.has(o)||s.set(o,0);return{patches:a,cursor:{rootUserId:e,knownNodes:t.nodes,countSnapshot:i,patchIndex:s},truncated:t.truncated}}async syncSince(e,n){await this.client.ready;let t=await this.walkGraph(e.rootUserId,n);if(t.truncated)throw new Error("Subscription graph refresh truncated; increase traversal limits before retrying");let a=t.nodes,i=new Map([...a].map(([p,y])=>[p,y.subscriptions.length])),s=!1,o=await this.fetchPatches(t,e.patchIndex,n),c=new Map([...e.patchIndex].filter(([p])=>a.has(p)));for(let p of o)c.set(p.userId,Math.max(c.get(p.userId)??0,p.toIndex));for(let p of a.keys())c.has(p)||c.set(p,0);return{patches:o,cursor:{rootUserId:e.rootUserId,knownNodes:a,countSnapshot:i,patchIndex:c},truncated:s}}async getSubscriptions(e){return await this.client.ready,this.client.subscriptionManager.getSubscriptions(e)}async getScore(e){return await this.client.ready,this.client.subscriptionManager.scoreOf(e)}async loadLibraryByUsername(e){try{await this.client.ready,console.log(`[SubscriptionClient] Starting library load for @${e}...`),console.log(`[SubscriptionClient] Looking up userId for @${e}...`);let n=await this.client.bouncerStorage.usernameToUserId(e);if(!n){console.error(`[SubscriptionClient] Username @${e} not found on-chain`);return}console.log(`[SubscriptionClient] Resolved @${e} \u2192 userId ${n}`),console.log(`[SubscriptionClient] Syncing patches for userId ${n}...`);let t=await this.sync(n);if(t.truncated)throw new Error("Subscription graph truncated; refusing an incomplete view");if(await K(this.config.environment??"production",this.config.chainId,n,[...t.cursor.knownNodes.keys()],!0),console.log(`[SubscriptionClient] Fetched ${t.patches.length} patch(es), truncated: ${t.truncated}`),t.patches.length>0){console.log(`[SubscriptionClient] Applying patches for ${t.patches.length} subscription graph patch(es)...`);for(let a of t.patches)try{let i=await this.client.bouncerStorage.userIdToUsername(a.userId);if(!i){console.warn(`[SubscriptionClient] No username found for userId ${a.userId}, skipping patch`);continue}console.log(`[SubscriptionClient] Applying patch for @${i} (userId ${a.userId}, index ${a.fromIndex}\u2013${a.toIndex})...`),await L(i,H(a,_),{streamId:`${this.config.environment??"production"}:${this.config.chainId}:${a.userId}`,fromIndex:a.fromIndex});let s=await x(i);await O(s,i)}catch(i){console.error(`[SubscriptionClient] Failed to apply patch for userId ${a.userId}:`,i?.message||i)}}console.log(`[SubscriptionClient] Successfully loaded library for @${e}`)}catch(n){console.error(`[SubscriptionClient] Failed to load library for @${e}:`,n?.message||n)}}};var ie={};function qe(r,e="production"){let n=`${r}:${e}`;return ie[n]||(ie[n]=new z({chainId:r,environment:e})),ie[n]}import{del as kt,get as jt,set as Ut}from"idb-keyval";function Bt(r){return{rootUserId:r.rootUserId,knownNodes:Array.from(r.knownNodes.entries()),countSnapshot:Array.from(r.countSnapshot.entries()),patchIndex:Array.from(r.patchIndex.entries())}}function $t(r){return{rootUserId:r.rootUserId,knownNodes:new Map(r.knownNodes),countSnapshot:new Map(r.countSnapshot),patchIndex:new Map(r.patchIndex)}}function ir(r){return{rootUserId:r,knownNodes:new Map,countSnapshot:new Map,patchIndex:new Map}}var oe="web3-sdk:subscription-cursor:";function Je(r,e,n){return`${r}:${e}:${n}`}var se={async get(r){try{let e=await jt(`${oe}${r}`);return e?$t(e):void 0}catch(e){console.warn(`[cursorStore] Failed to read cursor for key ${r}:`,e);return}},async set(r,e){try{await Ut(`${oe}${r}`,Bt(e))}catch(n){console.warn(`[cursorStore] Failed to persist cursor for key ${r}:`,n)}},async clear(r){try{await kt(`${oe}${r}`)}catch{}}};var Ye="@the_library/web3-cache:";function Xe(){if(typeof window>"u"||typeof localStorage>"u")return!1;try{let r="__storage_test__";return localStorage.setItem(r,"test"),localStorage.removeItem(r),!0}catch{return!1}}function j(r){if(!Xe())return null;try{let e=localStorage.getItem(Ye+r);return e?JSON.parse(e):null}catch{return null}}function U(r,e){if(Xe())try{localStorage.setItem(Ye+r,JSON.stringify(e))}catch(n){console.warn("[session/storage] Failed to save to localStorage:",n)}}var G=new Map;async function Ze(r,e,n){let t=Je(n,e,r),a=G.get(t);if(a)return a;let i=(async()=>{let s=qe(e,n),o=await se.get(t),c=o?await s.syncSince(o):await s.sync(r);if(c.truncated)throw new Error("Subscription graph is truncated; cursor and active view remain unchanged");let p=!o||o.knownNodes.size!==c.cursor.knownNodes.size||[...o.knownNodes.keys()].some(u=>!c.cursor.knownNodes.has(u));await K(n,e,r,[...c.cursor.knownNodes.keys()],p);let y=0,h=new Set;if(c.patches.length>0){let u=A(e,n);await u.ready;for(let l of c.patches)try{let d=await u.bouncerStorage.userIdToUsername(l.userId);if(!d){h.add(l.userId);continue}await L(d,H(l,_),{streamId:`${n}:${e}:${l.userId}`,fromIndex:l.fromIndex});let b=await x(d);await O(b,d),y+=l.toIndex-l.fromIndex}catch(d){h.add(l.userId),console.warn(`[session/sync] failed to apply subscription patch for userId ${l.userId}`,d)}}let m=new Map(c.cursor.patchIndex);for(let u of h)m.set(u,o?.patchIndex.get(u)??0);await se.set(t,{...c.cursor,patchIndex:m}),ae.emitSubscriptionPatchesSynced({rootUserId:r,chainId:e,appliedCount:y,timestamp:Date.now(),failedUserIds:h.size>0?Array.from(h):void 0})})();G.set(t,i);try{await i}catch(s){G.delete(t),console.warn(`[session/sync] subscription sync failed for userId ${r}`,s)}finally{G.delete(t)}}async function Ar(r,e,n,t=k(),a=!1){let i=T.getState().known.find(p=>p.account.toLowerCase()===r.toLowerCase()&&p.chainId===e);if(!a&&i?.lastUpdated)return i.hasAccount&&i.userId&&Ze(i.userId,e,t),i;let s=A(e,t);await s.ready;let o=i?{...i}:{account:r,username:"",hasAccount:!1,userId:0,lastPatchIndex:0,lastRestorationIndex:0,chainId:e,wallet:n},c=await s.bouncerStorage.hasAccount(r);if(o.hasAccount=c,c){let[p,y,h,m]=await s.bouncerStorage.userInfos(r);o.username=p,o.country=y,o.language=h,o.userId=m;let{total:u,donations:l,unspent:d}=await s.projectManagerStorage.balanceOfAddress(r);o.projectBalance={contributions:u,allocated:l,remaining:d};try{o.level=await s.archivistStorage.userLevel(m)}catch{o.level=1}try{o.donationsPerProject=await s.projectManagerStorage.addressDonationsPerProject(r)}catch{o.donationsPerProject=[]}await Ze(m,e,t)}return o.lastUpdated=Date.now(),T.addKnown(o),o}async function Nr(r,e,n=k()){let t=T.getState().known.find(s=>s.account.toLowerCase()===r.toLowerCase()&&s.chainId===e);if(!t||!t.hasAccount)return!1;let a=A(e,n);if(await a.ready,!await a.bouncerStorage.hasAccount(r))return T.updateAccount(r,e,{hasAccount:!1}),!1;try{await Pe("mine")>0&&await Y.calculateLevel("mine");let s=await a.factory.nbWritesByUsername(t.username);if(s>t.lastRestorationIndex){let[o,c,p]=await a.factory.loadUsernameSince(t.username,t.lastRestorationIndex),y=0;if(o&&o.length>0){let h=await J("mine");await L("mine",{version:_,patches:o,textIndex:c.map(Number),textData:p},{streamId:`${n}:${e}:${t.userId}`,fromIndex:t.lastRestorationIndex});let m=await x("mine");await O(m,"mine"),xe(m.filter(u=>u.pk>h&&u.sourceStream&&!B(u))),y=o.length,await Y.calculateLevel("mine")}T.setLastRestorationIndex(r,e,s),ae.emitSaveRestored({wallet:t.wallet,chainId:e,account:r,username:t.username,newRestorationIndex:s,appliedCount:y,timestamp:Date.now()})}return!0}catch(s){return console.error(`[session/sync] restoreAccountSave failed for ${r} on ${e}`,s),!1}}async function Er(r,e){let{lastPatchIndex:n}=T.lastSyncCounters(r,e),t=await J("mine");if(t<=n)return!1;let a=(await ve("mine",n+1)).filter(i=>i.pk<=t&&!i.sourceStream);return a.length>0&&Re(a).patches.length>0}function Wt(r,e){if(r.length===0)return!1;let n=0;for(let t of r){let a=BigInt(t);for(;n<e.length&&BigInt(e[n])!==a;)n++;if(n===e.length)return!1;n++}return!0}async function Cr(r,e,n,t,a=k()){let i=T.getState().known.find(s=>s.account.toLowerCase()===r.toLowerCase()&&s.chainId===e);if(!i?.hasAccount||i.lastRestorationIndex!==n||t.length===0)return!1;try{let s=A(e,a);await s.ready;let o=await s.factory.nbWritesByUsername(i.username);if(o<=n)return!1;let[c]=await s.factory.loadUsernameSince(i.username,n);return c.length!==o-n||!Wt(c,t)?!1:(T.setLastRestorationIndex(r,e,o),!0)}catch(s){return console.warn(`[session/sync] acknowledgeOwnSave skipped for ${r} on ${e}`,s),!1}}async function vr(r,e=k(),n=!1){let t=`networkInfos_${r}${e==="staging"?"_staging":""}`;if(!n){let p=j(t);if(p)return p}let a=A(r,e);await a.ready;let[i,s,o]=await Promise.all([a.bouncerStorage.getAllLocationCounts(),a.projectManagerStorage.nbProjects(),a.bouncerStorage.nbAccounts()]),c={nbUsers:o,nbLocations:i.length,nbProjects:s,locationStats:i};return U(t,c),c}var ce=new Map;function Rr(r){ce.set(r.type,r)}function xr(r){return ce.get(r)}function _r(){return Array.from(ce.values())}var V="wallet_pk_",ue="@the_library/web3-session:",Qe=null;function Or(){return Qe}function Dr(r){Qe=r}function le(){if(typeof window>"u"||typeof localStorage>"u")return!1;try{let r="__storage_test__";return localStorage.setItem(r,"test"),localStorage.removeItem(r),!0}catch{return!1}}function et(r){if(!le())return null;try{let e=localStorage.getItem(ue+r);return e?JSON.parse(e):null}catch{return null}}function Ft(r,e){if(le())try{localStorage.setItem(ue+r,JSON.stringify(e))}catch(n){console.warn("Failed to save to localStorage:",n)}}function Kt(r,e){if(!e)throw new Error("Private key is required");let n=`${V}${r}`;Ft(n,e)}function C(r){let e=`${V}${r}`;return et(e)}function pe(r){let e=`${V}${r}`;return!!et(e)}function Mr(){if(!le())return!1;let r=`${ue}${V}`;for(let e=0;e<localStorage.length;e++)if(localStorage.key(e)?.startsWith(r))return!0;return!1}var kr=(r,e,n)=>Kt(r,e),jr=(r,e)=>C(r),Ur=r=>pe(r);import{getChain as Ht,DEFAULT_CHAIN_ID as zt}from"@the_library/network-config";import{privateKeyToAccount as me}from"viem/accounts";import{createWalletClient as Gt,http as Vt}from"viem";function ye(r){return r.startsWith("0x")?r:`0x${r}`}function tt(r){return me(ye(r)).address}function nt(r,e){let n=me(ye(e)),t=Ht(r);return Gt({account:n,chain:P(t),transport:Vt(t.rpc)})}var de=class{constructor(){this.type="private_key";this.activeChainId=0;this.chainChangedCallbacks=new Set}isAvailable(){return!0}async connect(e=zt){if(!pe(e))throw new Error(`No private key configured for chain ${e}`);this.activeChainId=e;let n=C(e);if(!n)throw new Error(`No private key configured for chain ${e}`);return{address:tt(n),chainId:e}}async getAccounts(){if(!this.activeChainId)return[];let e=C(this.activeChainId);return e?[tt(e)]:[]}async getChainId(){return this.activeChainId}async requestSwitchChain(e){if(!C(e))throw new Error(`No private key configured for chain ${e}`);this.activeChainId=e;for(let t of this.chainChangedCallbacks)t(e)}async sendTransaction(e,n){let t=C(n);if(!t)throw new Error(`No private key found for chain ${n}`);return await nt(n,t).sendTransaction(e)}async signMessage(e){if(!this.activeChainId)throw new Error("Wallet not connected");let n=C(this.activeChainId);if(!n)throw new Error("No private key found");return await me(ye(n)).signMessage({message:e})}async getWalletClient(e){let n=C(e);if(!n)throw new Error(`No private key configured for chain ${e}`);return nt(e,n)}onAccountChanged(e){return()=>{}}onChainChanged(e){return this.chainChangedCallbacks.add(e),()=>{this.chainChangedCallbacks.delete(e)}}disconnect(){this.activeChainId=0}};function zr(){return new de}var qt=(r,e,n)=>{let t=r.balance,a=r.availableLanguages.findIndex(s=>s===e);if(a!==-1)return{lang:r.availableLanguages[a],version:{...r.versions[a]},id:r.id,balance:t};let i=r.availableLanguages.findIndex(s=>s===" eng");if(i!==-1)return{lang:" eng",version:{...r.versions[i]},id:r.id,balance:t};if(r.availableLanguages.length===0)throw new Error(`No language available for project ${r.id}`);return{lang:r.availableLanguages[0],version:{...r.versions[0]},id:r.id,balance:t}},Jt=120*1e3,ge=class{projectKey(e,n,t){return`${e}_${n}_${t}_v2`}nbProjectsKey(e,n){return`${e}_${n}_nbProjects_v2`}nbProjects(e,n){let t=j(this.nbProjectsKey(e,n));return t?parseInt(t,10):0}setNbProjects(e,n,t){U(this.nbProjectsKey(e,n),t.toString())}getProject(e,n,t){return j(this.projectKey(e,n,t))}cacheProject(e,n,t){U(this.projectKey(e,n,t.id),{...t,cachedAt:Date.now()})}getCachedProjects(e,n){let t=this.nbProjects(e,n);if(t<=0)return[];let a=[];for(let i=1;i<=t;i++)a.push(this.getProject(e,n,i));return a}async loadProject(e,n,t,a=!1){let i=this.getProject(e,n,t);if(i!==null&&Date.now()-(i.cachedAt??0)<Jt&&!a)return i;try{let o=A(e);await o.ready;let c=qt(await o.projectManagerStorage.loadProject(t),n,e);return this.cacheProject(e,n,c),c}catch(o){if(i!==null&&!a)return i;throw o}}async loadProjects(e,n){let t;try{t=A(e)}catch(o){return console.warn(`[ProjectRegistry] No read client for chain ${e} \u2014 returning cached projects only.`,o),this.getCachedProjects(e,n)}await t.ready;let a=this.nbProjects(e,n),i=await t.projectManagerStorage.nbProjects();i!==a&&this.setNbProjects(e,n,i);let s=Array.from({length:i},(o,c)=>c+1);return Promise.all(s.map(o=>this.loadProject(e,n,o).catch(c=>(console.error(`[ProjectRegistry] Error loading project ${o}:`,c),null))))}},rt=new ge,Jr=(r,e)=>rt.loadProjects(r,e),Yr=(r,e,n,t=!1)=>rt.loadProject(r,e,n,t);import{createWalletClient as fe,custom as he}from"viem";import{getChain as be}from"@the_library/network-config";var Se=null;typeof window<"u"&&(window.addEventListener("eip6963:announceProvider",r=>{let e=r.detail;(e.info.rdns==="io.metamask"||e.info.rdns==="io.metamask.flask")&&(Se=e.provider)}),window.dispatchEvent(new Event("eip6963:requestProvider")));var Te=class{constructor(){this.type="metamask";this.accountChangedCallbacks=new Set;this.chainChangedCallbacks=new Set;this.isListening=!1}getProvider(){return Se||(typeof window<"u"?window.ethereum:null)}isAvailable(){return!!this.getProvider()}setupListeners(){if(this.isListening)return;let e=this.getProvider();e&&typeof e.on=="function"&&(e.on("accountsChanged",n=>{let t=n[0]||"";for(let a of this.accountChangedCallbacks)a(t)}),e.on("chainChanged",n=>{let t=parseInt(n,16);for(let a of this.chainChangedCallbacks)a(t)}),this.isListening=!0)}async connect(){let e=this.getProvider();if(!e)throw new Error("MetaMask provider not found");this.setupListeners();let n=await e.request({method:"eth_requestAccounts"}),t=await e.request({method:"eth_chainId"});return{address:n[0],chainId:parseInt(t,16)}}async getAccounts(){let e=this.getProvider();if(!e)return[];try{return await e.request({method:"eth_accounts"})||[]}catch{return[]}}async getChainId(){let e=this.getProvider();if(!e)return 0;try{let n=await e.request({method:"eth_chainId"});return parseInt(n,16)}catch{return 0}}async requestSwitchChain(e){let n=this.getProvider();if(!n)throw new Error("MetaMask provider not found");let t="0x"+e.toString(16);try{await n.request({method:"wallet_switchEthereumChain",params:[{chainId:t}]})}catch(a){if(a.code===4902){let i=be(e);if(!i)throw new Error(`No configuration found for chain ID: ${e}`);await n.request({method:"wallet_addEthereumChain",params:[{chainId:t,chainName:i.name,rpcUrls:[i.rpc],blockExplorerUrls:[i.explorer],nativeCurrency:{decimals:i.decimals||18,name:i.name,symbol:i.symbol}}]})}else throw a}}async sendTransaction(e,n){let t=this.getProvider();if(!t)throw new Error("MetaMask provider not found");let a=await this.getAccounts();if(a.length===0)throw new Error("No accounts connected");let i=P(be(n));return await fe({account:a[0],chain:i,transport:he(t)}).sendTransaction(e)}async signMessage(e){let n=this.getProvider();if(!n)throw new Error("MetaMask provider not found");let t=await this.getAccounts();if(t.length===0)throw new Error("No accounts connected");return await fe({account:t[0],transport:he(n)}).signMessage({account:t[0],message:e})}async getWalletClient(e){let n=this.getProvider();if(!n)throw new Error("MetaMask provider not found");let t=await this.getAccounts();if(t.length===0)throw new Error("No accounts connected");let a=P(be(e));return fe({account:t[0],chain:a,transport:he(n)})}onAccountChanged(e){return this.setupListeners(),this.accountChangedCallbacks.add(e),()=>{this.accountChangedCallbacks.delete(e)}}onChainChanged(e){return this.setupListeners(),this.chainChangedCallbacks.add(e),()=>{this.chainChangedCallbacks.delete(e)}}disconnect(){}};function ta(){return new Te}export{_e as a,w as b,Le as c,F as d,f as e,Z as f,Q as g,M as h,gn as i,wt as j,At as k,A as l,ee as m,Tn as n,wn as o,k as p,Ct as q,T as r,Nn as s,ne as t,re as u,vt as v,Pt as w,Rt as x,xt as y,ae as z,z as A,qe as B,Bt as C,$t as D,ir as E,Je as F,se as G,Ar as H,Nr as I,Er as J,Wt as K,Cr as L,vr as M,Rr as N,xr as O,_r as P,Or as Q,Dr as R,Kt as S,C as T,pe as U,Mr as V,kr as W,jr as X,Ur as Y,tt as Z,nt as _,de as $,zr as aa,qt as ba,Jt as ca,Jr as da,Yr as ea,Te as fa,ta as ga};
2
+ //# sourceMappingURL=chunk-3XUKOVEF.js.map