@ensnode/ensdb-sdk 1.8.1 → 1.10.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.
- package/dist/ensindexer-abstract/index.d.ts +3 -3
- package/dist/ensindexer-abstract/index.js +114 -116
- package/dist/ensindexer-abstract/index.js.map +1 -1
- package/dist/{index-DHRbRciU.d.ts → index-DN0SGSyd.d.ts} +141 -79
- package/dist/index.d.ts +74 -11
- package/dist/index.js +279 -271
- package/dist/index.js.map +1 -1
- package/migrations/0001_enable_ext_pg_trgm.sql +3 -0
- package/migrations/meta/0001_snapshot.json +55 -0
- package/migrations/meta/_journal.json +7 -0
- package/package.json +11 -7
package/dist/index.js
CHANGED
|
@@ -4,18 +4,6 @@ var __export = (target, all) => {
|
|
|
4
4
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
5
|
};
|
|
6
6
|
|
|
7
|
-
// src/client/ensdb-reader.ts
|
|
8
|
-
import { and, eq } from "drizzle-orm/sql";
|
|
9
|
-
import {
|
|
10
|
-
deserializeCrossChainIndexingStatusSnapshot,
|
|
11
|
-
deserializeEnsIndexerPublicConfig
|
|
12
|
-
} from "@ensnode/ensnode-sdk";
|
|
13
|
-
|
|
14
|
-
// src/lib/drizzle.ts
|
|
15
|
-
import { drizzle } from "drizzle-orm/node-postgres";
|
|
16
|
-
import { isPgEnum } from "drizzle-orm/pg-core";
|
|
17
|
-
import { isTable, Table } from "drizzle-orm/table";
|
|
18
|
-
|
|
19
7
|
// src/ensindexer-abstract/index.ts
|
|
20
8
|
var ensindexer_abstract_exports = {};
|
|
21
9
|
__export(ensindexer_abstract_exports, {
|
|
@@ -24,7 +12,6 @@ __export(ensindexer_abstract_exports, {
|
|
|
24
12
|
domainEvent: () => domainEvent,
|
|
25
13
|
domainResolverRelation: () => domainResolverRelation,
|
|
26
14
|
domainResolverRelation_relations: () => domainResolverRelation_relations,
|
|
27
|
-
ensNodeMetadata: () => ensNodeMetadata,
|
|
28
15
|
event: () => event,
|
|
29
16
|
internal_registrarActionMetadata: () => internal_registrarActionMetadata,
|
|
30
17
|
internal_registrarActionMetadataType: () => internal_registrarActionMetadataType,
|
|
@@ -127,34 +114,9 @@ __export(ensindexer_abstract_exports, {
|
|
|
127
114
|
v2Domain: () => v2Domain
|
|
128
115
|
});
|
|
129
116
|
|
|
130
|
-
// src/ensindexer-abstract/ensnode-metadata.schema.ts
|
|
131
|
-
import { onchainTable } from "ponder";
|
|
132
|
-
var ensNodeMetadata = onchainTable("ensnode_metadata", (t) => ({
|
|
133
|
-
/**
|
|
134
|
-
* Key
|
|
135
|
-
*
|
|
136
|
-
* Allowed keys:
|
|
137
|
-
* - `EnsNodeMetadataEnsDbVersion['key']`
|
|
138
|
-
* - `EnsNodeMetadataEnsIndexerPublicConfig['key']`
|
|
139
|
-
* - `EnsNodeMetadataEnsIndexerIndexingStatus['key']`
|
|
140
|
-
*/
|
|
141
|
-
key: t.text().primaryKey(),
|
|
142
|
-
/**
|
|
143
|
-
* Value
|
|
144
|
-
*
|
|
145
|
-
* Allowed values:
|
|
146
|
-
* - `EnsNodeMetadataEnsDbVersion['value']`
|
|
147
|
-
* - `EnsNodeMetadataEnsIndexerPublicConfig['value']`
|
|
148
|
-
* - `EnsNodeMetadataEnsIndexerIndexingStatus['value']`
|
|
149
|
-
*
|
|
150
|
-
* Guaranteed to be a serialized representation of JSON object.
|
|
151
|
-
*/
|
|
152
|
-
value: t.jsonb().notNull()
|
|
153
|
-
}));
|
|
154
|
-
|
|
155
117
|
// src/ensindexer-abstract/ensv2.schema.ts
|
|
156
|
-
import { index, onchainEnum, onchainTable
|
|
157
|
-
var event =
|
|
118
|
+
import { index, onchainEnum, onchainTable, primaryKey, relations, sql, uniqueIndex } from "ponder";
|
|
119
|
+
var event = onchainTable(
|
|
158
120
|
"events",
|
|
159
121
|
(t) => ({
|
|
160
122
|
// Ponder's event.id
|
|
@@ -185,7 +147,7 @@ var event = onchainTable2(
|
|
|
185
147
|
byTimestamp: index().on(t.timestamp)
|
|
186
148
|
})
|
|
187
149
|
);
|
|
188
|
-
var domainEvent =
|
|
150
|
+
var domainEvent = onchainTable(
|
|
189
151
|
"domain_events",
|
|
190
152
|
(t) => ({
|
|
191
153
|
domainId: t.text().notNull().$type(),
|
|
@@ -193,7 +155,7 @@ var domainEvent = onchainTable2(
|
|
|
193
155
|
}),
|
|
194
156
|
(t) => ({ pk: primaryKey({ columns: [t.domainId, t.eventId] }) })
|
|
195
157
|
);
|
|
196
|
-
var resolverEvent =
|
|
158
|
+
var resolverEvent = onchainTable(
|
|
197
159
|
"resolver_events",
|
|
198
160
|
(t) => ({
|
|
199
161
|
resolverId: t.text().notNull().$type(),
|
|
@@ -201,7 +163,7 @@ var resolverEvent = onchainTable2(
|
|
|
201
163
|
}),
|
|
202
164
|
(t) => ({ pk: primaryKey({ columns: [t.resolverId, t.eventId] }) })
|
|
203
165
|
);
|
|
204
|
-
var permissionsEvent =
|
|
166
|
+
var permissionsEvent = onchainTable(
|
|
205
167
|
"permissions_events",
|
|
206
168
|
(t) => ({
|
|
207
169
|
permissionsId: t.text().notNull().$type(),
|
|
@@ -209,7 +171,7 @@ var permissionsEvent = onchainTable2(
|
|
|
209
171
|
}),
|
|
210
172
|
(t) => ({ pk: primaryKey({ columns: [t.permissionsId, t.eventId] }) })
|
|
211
173
|
);
|
|
212
|
-
var account =
|
|
174
|
+
var account = onchainTable("accounts", (t) => ({
|
|
213
175
|
id: t.hex().primaryKey().$type()
|
|
214
176
|
}));
|
|
215
177
|
var account_relations = relations(account, ({ many }) => ({
|
|
@@ -217,7 +179,7 @@ var account_relations = relations(account, ({ many }) => ({
|
|
|
217
179
|
domains: many(v2Domain),
|
|
218
180
|
permissions: many(permissionsUser)
|
|
219
181
|
}));
|
|
220
|
-
var registry =
|
|
182
|
+
var registry = onchainTable(
|
|
221
183
|
"registries",
|
|
222
184
|
(t) => ({
|
|
223
185
|
// see RegistryId for guarantees
|
|
@@ -242,7 +204,7 @@ var relations_registry = relations(registry, ({ one, many }) => ({
|
|
|
242
204
|
references: [permissions.chainId, permissions.address]
|
|
243
205
|
})
|
|
244
206
|
}));
|
|
245
|
-
var v1Domain =
|
|
207
|
+
var v1Domain = onchainTable(
|
|
246
208
|
"v1_domains",
|
|
247
209
|
(t) => ({
|
|
248
210
|
// keyed by node, see ENSv1DomainId for guarantees.
|
|
@@ -288,7 +250,7 @@ var relations_v1Domain = relations(v1Domain, ({ one, many }) => ({
|
|
|
288
250
|
}),
|
|
289
251
|
registrations: many(registration)
|
|
290
252
|
}));
|
|
291
|
-
var v2Domain =
|
|
253
|
+
var v2Domain = onchainTable(
|
|
292
254
|
"v2_domains",
|
|
293
255
|
(t) => ({
|
|
294
256
|
// see ENSv2DomainId for guarantees
|
|
@@ -342,15 +304,16 @@ var registrationType = onchainEnum("RegistrationType", [
|
|
|
342
304
|
"NameWrapper",
|
|
343
305
|
"BaseRegistrar",
|
|
344
306
|
"ThreeDNS",
|
|
345
|
-
"
|
|
307
|
+
"ENSv2RegistryRegistration",
|
|
308
|
+
"ENSv2RegistryReservation"
|
|
346
309
|
]);
|
|
347
|
-
var registration =
|
|
310
|
+
var registration = onchainTable(
|
|
348
311
|
"registrations",
|
|
349
312
|
(t) => ({
|
|
350
|
-
// keyed by (domainId,
|
|
313
|
+
// keyed by (domainId, registrationIndex)
|
|
351
314
|
id: t.text().primaryKey().$type(),
|
|
352
315
|
domainId: t.text().notNull().$type(),
|
|
353
|
-
|
|
316
|
+
registrationIndex: t.integer().notNull(),
|
|
354
317
|
// has a type
|
|
355
318
|
type: registrationType().notNull(),
|
|
356
319
|
// has a start
|
|
@@ -362,9 +325,11 @@ var registration = onchainTable2(
|
|
|
362
325
|
// registrar AccountId
|
|
363
326
|
registrarChainId: t.integer().notNull().$type(),
|
|
364
327
|
registrarAddress: t.hex().notNull().$type(),
|
|
365
|
-
//
|
|
328
|
+
// may reference a registrant
|
|
366
329
|
registrantId: t.hex().$type(),
|
|
367
|
-
// may
|
|
330
|
+
// may reference an unregistrant
|
|
331
|
+
unregistrantId: t.hex().$type(),
|
|
332
|
+
// may have referrer data
|
|
368
333
|
referrer: t.hex().$type(),
|
|
369
334
|
// may have fuses (NameWrapper, Wrapped BaseRegistrar)
|
|
370
335
|
fuses: t.integer(),
|
|
@@ -379,12 +344,12 @@ var registration = onchainTable2(
|
|
|
379
344
|
eventId: t.text().notNull()
|
|
380
345
|
}),
|
|
381
346
|
(t) => ({
|
|
382
|
-
byId: uniqueIndex().on(t.domainId, t.
|
|
347
|
+
byId: uniqueIndex().on(t.domainId, t.registrationIndex)
|
|
383
348
|
})
|
|
384
349
|
);
|
|
385
|
-
var latestRegistrationIndex =
|
|
350
|
+
var latestRegistrationIndex = onchainTable("latest_registration_indexes", (t) => ({
|
|
386
351
|
domainId: t.text().primaryKey().$type(),
|
|
387
|
-
|
|
352
|
+
registrationIndex: t.integer().notNull()
|
|
388
353
|
}));
|
|
389
354
|
var registration_relations = relations(registration, ({ one, many }) => ({
|
|
390
355
|
// belongs to either v1Domain or v2Domain
|
|
@@ -402,6 +367,12 @@ var registration_relations = relations(registration, ({ one, many }) => ({
|
|
|
402
367
|
references: [account.id],
|
|
403
368
|
relationName: "registrant"
|
|
404
369
|
}),
|
|
370
|
+
// has one unregistrant
|
|
371
|
+
unregistrant: one(account, {
|
|
372
|
+
fields: [registration.unregistrantId],
|
|
373
|
+
references: [account.id],
|
|
374
|
+
relationName: "unregistrant"
|
|
375
|
+
}),
|
|
405
376
|
// has many renewals
|
|
406
377
|
renewals: many(renewal),
|
|
407
378
|
// has an event
|
|
@@ -410,14 +381,14 @@ var registration_relations = relations(registration, ({ one, many }) => ({
|
|
|
410
381
|
references: [event.id]
|
|
411
382
|
})
|
|
412
383
|
}));
|
|
413
|
-
var renewal =
|
|
384
|
+
var renewal = onchainTable(
|
|
414
385
|
"renewals",
|
|
415
386
|
(t) => ({
|
|
416
387
|
// keyed by (registrationId, index)
|
|
417
388
|
id: t.text().primaryKey().$type(),
|
|
418
389
|
domainId: t.text().notNull().$type(),
|
|
419
390
|
registrationIndex: t.integer().notNull(),
|
|
420
|
-
|
|
391
|
+
renewalIndex: t.integer().notNull(),
|
|
421
392
|
// all renewals have a duration
|
|
422
393
|
duration: t.bigint().notNull(),
|
|
423
394
|
// may have a referrer
|
|
@@ -431,14 +402,14 @@ var renewal = onchainTable2(
|
|
|
431
402
|
eventId: t.text().notNull()
|
|
432
403
|
}),
|
|
433
404
|
(t) => ({
|
|
434
|
-
byId: uniqueIndex().on(t.domainId, t.registrationIndex, t.
|
|
405
|
+
byId: uniqueIndex().on(t.domainId, t.registrationIndex, t.renewalIndex)
|
|
435
406
|
})
|
|
436
407
|
);
|
|
437
408
|
var renewal_relations = relations(renewal, ({ one }) => ({
|
|
438
409
|
// belongs to registration
|
|
439
410
|
registration: one(registration, {
|
|
440
411
|
fields: [renewal.domainId, renewal.registrationIndex],
|
|
441
|
-
references: [registration.domainId, registration.
|
|
412
|
+
references: [registration.domainId, registration.registrationIndex]
|
|
442
413
|
}),
|
|
443
414
|
// has an event
|
|
444
415
|
event: one(event, {
|
|
@@ -446,16 +417,16 @@ var renewal_relations = relations(renewal, ({ one }) => ({
|
|
|
446
417
|
references: [event.id]
|
|
447
418
|
})
|
|
448
419
|
}));
|
|
449
|
-
var latestRenewalIndex =
|
|
420
|
+
var latestRenewalIndex = onchainTable(
|
|
450
421
|
"latest_renewal_indexes",
|
|
451
422
|
(t) => ({
|
|
452
423
|
domainId: t.text().notNull().$type(),
|
|
453
424
|
registrationIndex: t.integer().notNull(),
|
|
454
|
-
|
|
425
|
+
renewalIndex: t.integer().notNull()
|
|
455
426
|
}),
|
|
456
427
|
(t) => ({ pk: primaryKey({ columns: [t.domainId, t.registrationIndex] }) })
|
|
457
428
|
);
|
|
458
|
-
var permissions =
|
|
429
|
+
var permissions = onchainTable(
|
|
459
430
|
"permissions",
|
|
460
431
|
(t) => ({
|
|
461
432
|
id: t.text().primaryKey().$type(),
|
|
@@ -470,7 +441,7 @@ var relations_permissions = relations(permissions, ({ many }) => ({
|
|
|
470
441
|
resources: many(permissionsResource),
|
|
471
442
|
users: many(permissionsUser)
|
|
472
443
|
}));
|
|
473
|
-
var permissionsResource =
|
|
444
|
+
var permissionsResource = onchainTable(
|
|
474
445
|
"permissions_resources",
|
|
475
446
|
(t) => ({
|
|
476
447
|
id: t.text().primaryKey().$type(),
|
|
@@ -488,7 +459,7 @@ var relations_permissionsResource = relations(permissionsResource, ({ one }) =>
|
|
|
488
459
|
references: [permissions.chainId, permissions.address]
|
|
489
460
|
})
|
|
490
461
|
}));
|
|
491
|
-
var permissionsUser =
|
|
462
|
+
var permissionsUser = onchainTable(
|
|
492
463
|
"permissions_users",
|
|
493
464
|
(t) => ({
|
|
494
465
|
id: t.text().primaryKey().$type(),
|
|
@@ -521,7 +492,7 @@ var relations_permissionsUser = relations(permissionsUser, ({ one }) => ({
|
|
|
521
492
|
]
|
|
522
493
|
})
|
|
523
494
|
}));
|
|
524
|
-
var label =
|
|
495
|
+
var label = onchainTable(
|
|
525
496
|
"labels",
|
|
526
497
|
(t) => ({
|
|
527
498
|
labelHash: t.hex().primaryKey().$type(),
|
|
@@ -534,14 +505,14 @@ var label = onchainTable2(
|
|
|
534
505
|
var label_relations = relations(label, ({ many }) => ({
|
|
535
506
|
domains: many(v2Domain)
|
|
536
507
|
}));
|
|
537
|
-
var registryCanonicalDomain =
|
|
508
|
+
var registryCanonicalDomain = onchainTable("registry_canonical_domains", (t) => ({
|
|
538
509
|
registryId: t.text().primaryKey().$type(),
|
|
539
510
|
domainId: t.text().notNull().$type()
|
|
540
511
|
}));
|
|
541
512
|
|
|
542
513
|
// src/ensindexer-abstract/protocol-acceleration.schema.ts
|
|
543
|
-
import { onchainTable as
|
|
544
|
-
var reverseNameRecord =
|
|
514
|
+
import { onchainTable as onchainTable2, primaryKey as primaryKey2, relations as relations2, uniqueIndex as uniqueIndex2 } from "ponder";
|
|
515
|
+
var reverseNameRecord = onchainTable2(
|
|
545
516
|
"reverse_name_records",
|
|
546
517
|
(t) => ({
|
|
547
518
|
// keyed by (address, coinType)
|
|
@@ -550,19 +521,15 @@ var reverseNameRecord = onchainTable3(
|
|
|
550
521
|
/**
|
|
551
522
|
* Represents the ENSIP-19 Reverse Name Record for a given (address, coinType).
|
|
552
523
|
*
|
|
553
|
-
* The value of this field is guaranteed to be a non-empty
|
|
554
|
-
* `interpretNameRecordValue` for additional context and specific guarantees). Unnormalized
|
|
555
|
-
* names and empty string values are interpreted as a deletion of the associated Reverse Name
|
|
556
|
-
* Record entity (represented in the schema as the _absence_ of a relevant Reverse Name Record
|
|
557
|
-
* entity).
|
|
524
|
+
* The value of this field is guaranteed to be a non-empty {@link InterpretedName}.
|
|
558
525
|
*/
|
|
559
|
-
value: t.text().notNull()
|
|
526
|
+
value: t.text().notNull().$type()
|
|
560
527
|
}),
|
|
561
528
|
(t) => ({
|
|
562
529
|
pk: primaryKey2({ columns: [t.address, t.coinType] })
|
|
563
530
|
})
|
|
564
531
|
);
|
|
565
|
-
var domainResolverRelation =
|
|
532
|
+
var domainResolverRelation = onchainTable2(
|
|
566
533
|
"domain_resolver_relations",
|
|
567
534
|
(t) => ({
|
|
568
535
|
// keyed by (chainId, registry, node)
|
|
@@ -583,7 +550,7 @@ var domainResolverRelation_relations = relations2(domainResolverRelation, ({ one
|
|
|
583
550
|
references: [resolver.chainId, resolver.address]
|
|
584
551
|
})
|
|
585
552
|
}));
|
|
586
|
-
var resolver =
|
|
553
|
+
var resolver = onchainTable2(
|
|
587
554
|
"resolvers",
|
|
588
555
|
(t) => ({
|
|
589
556
|
// keyed by (chainId, address)
|
|
@@ -598,7 +565,7 @@ var resolver = onchainTable3(
|
|
|
598
565
|
var resolver_relations = relations2(resolver, ({ many }) => ({
|
|
599
566
|
records: many(resolverRecords)
|
|
600
567
|
}));
|
|
601
|
-
var resolverRecords =
|
|
568
|
+
var resolverRecords = onchainTable2(
|
|
602
569
|
"resolver_records",
|
|
603
570
|
(t) => ({
|
|
604
571
|
// keyed by (chainId, resolver, node)
|
|
@@ -609,14 +576,30 @@ var resolverRecords = onchainTable3(
|
|
|
609
576
|
/**
|
|
610
577
|
* Represents the value of the reverse-resolution (ENSIP-3) name() record, used for Reverse Resolution.
|
|
611
578
|
*
|
|
612
|
-
*
|
|
613
|
-
|
|
614
|
-
|
|
579
|
+
* If present, the value of this field is guaranteed to be a non-empty {@link InterpretedName}.
|
|
580
|
+
*/
|
|
581
|
+
name: t.text().$type(),
|
|
582
|
+
/**
|
|
583
|
+
* ENSIP-7 contenthash raw bytes or null if not set.
|
|
584
|
+
*/
|
|
585
|
+
contenthash: t.hex(),
|
|
586
|
+
/**
|
|
587
|
+
* PubkeyResolver (x, y) pair, or null if not set.
|
|
615
588
|
*
|
|
616
|
-
*
|
|
617
|
-
* (see `interpretNameRecordValue` for additional context and specific guarantees).
|
|
589
|
+
* Invariant: both null together, or both set together.
|
|
618
590
|
*/
|
|
619
|
-
|
|
591
|
+
pubkeyX: t.hex(),
|
|
592
|
+
pubkeyY: t.hex(),
|
|
593
|
+
/**
|
|
594
|
+
* IDNSZoneResolver zonehash or null if not set.
|
|
595
|
+
*/
|
|
596
|
+
dnszonehash: t.hex(),
|
|
597
|
+
/**
|
|
598
|
+
* IVersionableResolver version. Null when no `VersionChanged` event has been seen for this
|
|
599
|
+
* (chainId, address, node) — the resolver may not implement `IVersionableResolver`, or simply
|
|
600
|
+
* may never have been version-bumped. Consumers should treat null as "unknown" rather than 0.
|
|
601
|
+
*/
|
|
602
|
+
version: t.bigint().$type()
|
|
620
603
|
}),
|
|
621
604
|
(t) => ({
|
|
622
605
|
byId: uniqueIndex2().on(t.chainId, t.address, t.node)
|
|
@@ -633,7 +616,7 @@ var resolverRecords_relations = relations2(resolverRecords, ({ one, many }) => (
|
|
|
633
616
|
// resolverRecord has many text records
|
|
634
617
|
textRecords: many(resolverTextRecord)
|
|
635
618
|
}));
|
|
636
|
-
var resolverAddressRecord =
|
|
619
|
+
var resolverAddressRecord = onchainTable2(
|
|
637
620
|
"resolver_address_records",
|
|
638
621
|
(t) => ({
|
|
639
622
|
// keyed by ((chainId, resolver, node), coinType)
|
|
@@ -666,7 +649,7 @@ var resolverAddressRecordRelations = relations2(resolverAddressRecord, ({ one })
|
|
|
666
649
|
references: [resolverRecords.chainId, resolverRecords.address, resolverRecords.node]
|
|
667
650
|
})
|
|
668
651
|
}));
|
|
669
|
-
var resolverTextRecord =
|
|
652
|
+
var resolverTextRecord = onchainTable2(
|
|
670
653
|
"resolver_text_records",
|
|
671
654
|
(t) => ({
|
|
672
655
|
// keyed by ((chainId, resolver, node), key)
|
|
@@ -693,13 +676,13 @@ var resolverTextRecordRelations = relations2(resolverTextRecord, ({ one }) => ({
|
|
|
693
676
|
references: [resolverRecords.chainId, resolverRecords.address, resolverRecords.node]
|
|
694
677
|
})
|
|
695
678
|
}));
|
|
696
|
-
var migratedNode =
|
|
697
|
-
node: t.hex().primaryKey()
|
|
679
|
+
var migratedNode = onchainTable2("migrated_nodes", (t) => ({
|
|
680
|
+
node: t.hex().primaryKey().$type()
|
|
698
681
|
}));
|
|
699
682
|
|
|
700
683
|
// src/ensindexer-abstract/registrars.schema.ts
|
|
701
|
-
import { index as index2, onchainEnum as onchainEnum2, onchainTable as
|
|
702
|
-
var subregistries =
|
|
684
|
+
import { index as index2, onchainEnum as onchainEnum2, onchainTable as onchainTable3, relations as relations3, uniqueIndex as uniqueIndex3 } from "ponder";
|
|
685
|
+
var subregistries = onchainTable3(
|
|
703
686
|
"subregistries",
|
|
704
687
|
(t) => ({
|
|
705
688
|
/**
|
|
@@ -729,7 +712,7 @@ var subregistries = onchainTable4(
|
|
|
729
712
|
uniqueNode: uniqueIndex3().on(t.node)
|
|
730
713
|
})
|
|
731
714
|
);
|
|
732
|
-
var registrationLifecycles =
|
|
715
|
+
var registrationLifecycles = onchainTable3(
|
|
733
716
|
"registration_lifecycles",
|
|
734
717
|
(t) => ({
|
|
735
718
|
/**
|
|
@@ -769,7 +752,7 @@ var registrarActionType = onchainEnum2("registrar_action_type", [
|
|
|
769
752
|
"registration",
|
|
770
753
|
"renewal"
|
|
771
754
|
]);
|
|
772
|
-
var registrarActions =
|
|
755
|
+
var registrarActions = onchainTable3(
|
|
773
756
|
"registrar_actions",
|
|
774
757
|
(t) => ({
|
|
775
758
|
/**
|
|
@@ -961,7 +944,7 @@ var registrarActions = onchainTable4(
|
|
|
961
944
|
* 3) May be the "zero address" to represent that an `encodedReferrer` is
|
|
962
945
|
* defined but that it is interpreted as no referrer.
|
|
963
946
|
*/
|
|
964
|
-
decodedReferrer: t.hex(),
|
|
947
|
+
decodedReferrer: t.hex().$type(),
|
|
965
948
|
/**
|
|
966
949
|
* Number of the block that includes the "logical registrar action".
|
|
967
950
|
*
|
|
@@ -1026,7 +1009,7 @@ var internal_registrarActionMetadataType = onchainEnum2(
|
|
|
1026
1009
|
"_ensindexer_registrar_action_metadata_type",
|
|
1027
1010
|
["CURRENT_LOGICAL_REGISTRAR_ACTION"]
|
|
1028
1011
|
);
|
|
1029
|
-
var internal_registrarActionMetadata =
|
|
1012
|
+
var internal_registrarActionMetadata = onchainTable3(
|
|
1030
1013
|
"_ensindexer_registrar_action_metadata",
|
|
1031
1014
|
(t) => ({
|
|
1032
1015
|
/**
|
|
@@ -1075,7 +1058,7 @@ var registrarActionRelations = relations3(registrarActions, ({ one }) => ({
|
|
|
1075
1058
|
}));
|
|
1076
1059
|
|
|
1077
1060
|
// src/ensindexer-abstract/subgraph.schema.ts
|
|
1078
|
-
import { index as index3, onchainTable as
|
|
1061
|
+
import { index as index3, onchainTable as onchainTable4, relations as relations4, sql as sql2 } from "ponder";
|
|
1079
1062
|
|
|
1080
1063
|
// src/lib/collate.ts
|
|
1081
1064
|
function monkeypatchCollate(col, collation) {
|
|
@@ -1086,7 +1069,7 @@ function monkeypatchCollate(col, collation) {
|
|
|
1086
1069
|
}
|
|
1087
1070
|
|
|
1088
1071
|
// src/ensindexer-abstract/subgraph.schema.ts
|
|
1089
|
-
var subgraph_domain =
|
|
1072
|
+
var subgraph_domain = onchainTable4(
|
|
1090
1073
|
"subgraph_domains",
|
|
1091
1074
|
(t) => ({
|
|
1092
1075
|
// The namehash of the name
|
|
@@ -1155,9 +1138,12 @@ var subgraph_domain = onchainTable5(
|
|
|
1155
1138
|
expiryDate: t.bigint()
|
|
1156
1139
|
}),
|
|
1157
1140
|
(t) => ({
|
|
1158
|
-
//
|
|
1159
|
-
|
|
1160
|
-
//
|
|
1141
|
+
// uses a hash index because some name values exceed the btree max row size (8191 bytes)
|
|
1142
|
+
byExactName: index3().using("hash", t.name),
|
|
1143
|
+
// GIN trigram index for partial-match filters (_contains, _starts_with, _ends_with).
|
|
1144
|
+
// (inline `gin_trgm_ops` via `sql` because passing it through `.op()` gets dropped by Ponder,
|
|
1145
|
+
// producing `USING gin (name)` with no opclass)
|
|
1146
|
+
byFuzzyName: index3().using("gin", sql2`${t.name} gin_trgm_ops`),
|
|
1161
1147
|
byLabelhash: index3().on(t.labelhash),
|
|
1162
1148
|
byParentId: index3().on(t.parentId),
|
|
1163
1149
|
byOwnerId: index3().on(t.ownerId),
|
|
@@ -1213,7 +1199,7 @@ var subgraph_domainRelations = relations4(subgraph_domain, ({ one, many }) => ({
|
|
|
1213
1199
|
fusesSets: many(subgraph_fusesSet),
|
|
1214
1200
|
expiryExtendeds: many(subgraph_expiryExtended)
|
|
1215
1201
|
}));
|
|
1216
|
-
var subgraph_account =
|
|
1202
|
+
var subgraph_account = onchainTable4("subgraph_accounts", (t) => ({
|
|
1217
1203
|
id: t.hex().primaryKey()
|
|
1218
1204
|
}));
|
|
1219
1205
|
var subgraph_accountRelations = relations4(subgraph_account, ({ many }) => ({
|
|
@@ -1221,7 +1207,7 @@ var subgraph_accountRelations = relations4(subgraph_account, ({ many }) => ({
|
|
|
1221
1207
|
wrappedDomains: many(subgraph_wrappedDomain),
|
|
1222
1208
|
registrations: many(subgraph_registration)
|
|
1223
1209
|
}));
|
|
1224
|
-
var subgraph_resolver =
|
|
1210
|
+
var subgraph_resolver = onchainTable4(
|
|
1225
1211
|
"subgraph_resolvers",
|
|
1226
1212
|
(t) => ({
|
|
1227
1213
|
// The unique identifier for this resolver, which is a concatenation of the domain namehash and the resolver address
|
|
@@ -1266,7 +1252,7 @@ var subgraph_resolverRelations = relations4(subgraph_resolver, ({ one, many }) =
|
|
|
1266
1252
|
authorisationChangeds: many(subgraph_authorisationChanged),
|
|
1267
1253
|
versionChangeds: many(subgraph_versionChanged)
|
|
1268
1254
|
}));
|
|
1269
|
-
var subgraph_registration =
|
|
1255
|
+
var subgraph_registration = onchainTable4(
|
|
1270
1256
|
"subgraph_registrations",
|
|
1271
1257
|
(t) => ({
|
|
1272
1258
|
// The unique identifier of the registration
|
|
@@ -1322,7 +1308,7 @@ var subgraph_registrationRelations = relations4(subgraph_registration, ({ one, m
|
|
|
1322
1308
|
nameReneweds: many(subgraph_nameRenewed),
|
|
1323
1309
|
nameTransferreds: many(subgraph_nameTransferred)
|
|
1324
1310
|
}));
|
|
1325
|
-
var subgraph_wrappedDomain =
|
|
1311
|
+
var subgraph_wrappedDomain = onchainTable4(
|
|
1326
1312
|
"subgraph_wrapped_domains",
|
|
1327
1313
|
(t) => ({
|
|
1328
1314
|
// The unique identifier for each instance of the WrappedDomain entity
|
|
@@ -1382,7 +1368,7 @@ var domainEventIndex = (t) => ({
|
|
|
1382
1368
|
// sorting index
|
|
1383
1369
|
idx_compound: index3().on(t.domainId, t.id)
|
|
1384
1370
|
});
|
|
1385
|
-
var subgraph_transfer =
|
|
1371
|
+
var subgraph_transfer = onchainTable4(
|
|
1386
1372
|
"subgraph_transfers",
|
|
1387
1373
|
(t) => ({
|
|
1388
1374
|
...domainEvent2(t),
|
|
@@ -1390,7 +1376,7 @@ var subgraph_transfer = onchainTable5(
|
|
|
1390
1376
|
}),
|
|
1391
1377
|
domainEventIndex
|
|
1392
1378
|
);
|
|
1393
|
-
var subgraph_newOwner =
|
|
1379
|
+
var subgraph_newOwner = onchainTable4(
|
|
1394
1380
|
"subgraph_new_owners",
|
|
1395
1381
|
(t) => ({
|
|
1396
1382
|
...domainEvent2(t),
|
|
@@ -1399,7 +1385,7 @@ var subgraph_newOwner = onchainTable5(
|
|
|
1399
1385
|
}),
|
|
1400
1386
|
domainEventIndex
|
|
1401
1387
|
);
|
|
1402
|
-
var subgraph_newResolver =
|
|
1388
|
+
var subgraph_newResolver = onchainTable4(
|
|
1403
1389
|
"subgraph_new_resolvers",
|
|
1404
1390
|
(t) => ({
|
|
1405
1391
|
...domainEvent2(t),
|
|
@@ -1407,7 +1393,7 @@ var subgraph_newResolver = onchainTable5(
|
|
|
1407
1393
|
}),
|
|
1408
1394
|
domainEventIndex
|
|
1409
1395
|
);
|
|
1410
|
-
var subgraph_newTTL =
|
|
1396
|
+
var subgraph_newTTL = onchainTable4(
|
|
1411
1397
|
"subgraph_new_ttls",
|
|
1412
1398
|
(t) => ({
|
|
1413
1399
|
...domainEvent2(t),
|
|
@@ -1415,7 +1401,7 @@ var subgraph_newTTL = onchainTable5(
|
|
|
1415
1401
|
}),
|
|
1416
1402
|
domainEventIndex
|
|
1417
1403
|
);
|
|
1418
|
-
var subgraph_wrappedTransfer =
|
|
1404
|
+
var subgraph_wrappedTransfer = onchainTable4(
|
|
1419
1405
|
"subgraph_wrapped_transfers",
|
|
1420
1406
|
(t) => ({
|
|
1421
1407
|
...domainEvent2(t),
|
|
@@ -1423,7 +1409,7 @@ var subgraph_wrappedTransfer = onchainTable5(
|
|
|
1423
1409
|
}),
|
|
1424
1410
|
domainEventIndex
|
|
1425
1411
|
);
|
|
1426
|
-
var subgraph_nameWrapped =
|
|
1412
|
+
var subgraph_nameWrapped = onchainTable4(
|
|
1427
1413
|
"subgraph_name_wrapped",
|
|
1428
1414
|
(t) => ({
|
|
1429
1415
|
...domainEvent2(t),
|
|
@@ -1434,7 +1420,7 @@ var subgraph_nameWrapped = onchainTable5(
|
|
|
1434
1420
|
}),
|
|
1435
1421
|
domainEventIndex
|
|
1436
1422
|
);
|
|
1437
|
-
var subgraph_nameUnwrapped =
|
|
1423
|
+
var subgraph_nameUnwrapped = onchainTable4(
|
|
1438
1424
|
"subgraph_name_unwrapped",
|
|
1439
1425
|
(t) => ({
|
|
1440
1426
|
...domainEvent2(t),
|
|
@@ -1442,7 +1428,7 @@ var subgraph_nameUnwrapped = onchainTable5(
|
|
|
1442
1428
|
}),
|
|
1443
1429
|
domainEventIndex
|
|
1444
1430
|
);
|
|
1445
|
-
var subgraph_fusesSet =
|
|
1431
|
+
var subgraph_fusesSet = onchainTable4(
|
|
1446
1432
|
"subgraph_fuses_set",
|
|
1447
1433
|
(t) => ({
|
|
1448
1434
|
...domainEvent2(t),
|
|
@@ -1450,7 +1436,7 @@ var subgraph_fusesSet = onchainTable5(
|
|
|
1450
1436
|
}),
|
|
1451
1437
|
domainEventIndex
|
|
1452
1438
|
);
|
|
1453
|
-
var subgraph_expiryExtended =
|
|
1439
|
+
var subgraph_expiryExtended = onchainTable4(
|
|
1454
1440
|
"subgraph_expiry_extended",
|
|
1455
1441
|
(t) => ({
|
|
1456
1442
|
...domainEvent2(t),
|
|
@@ -1468,7 +1454,7 @@ var registrationEventIndex = (t) => ({
|
|
|
1468
1454
|
// sorting index
|
|
1469
1455
|
idx_compound: index3().on(t.registrationId, t.id)
|
|
1470
1456
|
});
|
|
1471
|
-
var subgraph_nameRegistered =
|
|
1457
|
+
var subgraph_nameRegistered = onchainTable4(
|
|
1472
1458
|
"subgraph_name_registered",
|
|
1473
1459
|
(t) => ({
|
|
1474
1460
|
...registrationEvent(t),
|
|
@@ -1477,7 +1463,7 @@ var subgraph_nameRegistered = onchainTable5(
|
|
|
1477
1463
|
}),
|
|
1478
1464
|
registrationEventIndex
|
|
1479
1465
|
);
|
|
1480
|
-
var subgraph_nameRenewed =
|
|
1466
|
+
var subgraph_nameRenewed = onchainTable4(
|
|
1481
1467
|
"subgraph_name_renewed",
|
|
1482
1468
|
(t) => ({
|
|
1483
1469
|
...registrationEvent(t),
|
|
@@ -1485,7 +1471,7 @@ var subgraph_nameRenewed = onchainTable5(
|
|
|
1485
1471
|
}),
|
|
1486
1472
|
registrationEventIndex
|
|
1487
1473
|
);
|
|
1488
|
-
var subgraph_nameTransferred =
|
|
1474
|
+
var subgraph_nameTransferred = onchainTable4(
|
|
1489
1475
|
"subgraph_name_transferred",
|
|
1490
1476
|
(t) => ({
|
|
1491
1477
|
...registrationEvent(t),
|
|
@@ -1503,7 +1489,7 @@ var resolverEventIndex = (t) => ({
|
|
|
1503
1489
|
// sorting index
|
|
1504
1490
|
idx_compound: index3().on(t.resolverId, t.id)
|
|
1505
1491
|
});
|
|
1506
|
-
var subgraph_addrChanged =
|
|
1492
|
+
var subgraph_addrChanged = onchainTable4(
|
|
1507
1493
|
"subgraph_addr_changed",
|
|
1508
1494
|
(t) => ({
|
|
1509
1495
|
...resolverEvent2(t),
|
|
@@ -1511,7 +1497,7 @@ var subgraph_addrChanged = onchainTable5(
|
|
|
1511
1497
|
}),
|
|
1512
1498
|
resolverEventIndex
|
|
1513
1499
|
);
|
|
1514
|
-
var subgraph_multicoinAddrChanged =
|
|
1500
|
+
var subgraph_multicoinAddrChanged = onchainTable4(
|
|
1515
1501
|
"subgraph_multicoin_addr_changed",
|
|
1516
1502
|
(t) => ({
|
|
1517
1503
|
...resolverEvent2(t),
|
|
@@ -1520,7 +1506,7 @@ var subgraph_multicoinAddrChanged = onchainTable5(
|
|
|
1520
1506
|
}),
|
|
1521
1507
|
resolverEventIndex
|
|
1522
1508
|
);
|
|
1523
|
-
var subgraph_nameChanged =
|
|
1509
|
+
var subgraph_nameChanged = onchainTable4(
|
|
1524
1510
|
"subgraph_name_changed",
|
|
1525
1511
|
(t) => ({
|
|
1526
1512
|
...resolverEvent2(t),
|
|
@@ -1528,7 +1514,7 @@ var subgraph_nameChanged = onchainTable5(
|
|
|
1528
1514
|
}),
|
|
1529
1515
|
resolverEventIndex
|
|
1530
1516
|
);
|
|
1531
|
-
var subgraph_abiChanged =
|
|
1517
|
+
var subgraph_abiChanged = onchainTable4(
|
|
1532
1518
|
"subgraph_abi_changed",
|
|
1533
1519
|
(t) => ({
|
|
1534
1520
|
...resolverEvent2(t),
|
|
@@ -1536,7 +1522,7 @@ var subgraph_abiChanged = onchainTable5(
|
|
|
1536
1522
|
}),
|
|
1537
1523
|
resolverEventIndex
|
|
1538
1524
|
);
|
|
1539
|
-
var subgraph_pubkeyChanged =
|
|
1525
|
+
var subgraph_pubkeyChanged = onchainTable4(
|
|
1540
1526
|
"subgraph_pubkey_changed",
|
|
1541
1527
|
(t) => ({
|
|
1542
1528
|
...resolverEvent2(t),
|
|
@@ -1545,7 +1531,7 @@ var subgraph_pubkeyChanged = onchainTable5(
|
|
|
1545
1531
|
}),
|
|
1546
1532
|
resolverEventIndex
|
|
1547
1533
|
);
|
|
1548
|
-
var subgraph_textChanged =
|
|
1534
|
+
var subgraph_textChanged = onchainTable4(
|
|
1549
1535
|
"subgraph_text_changed",
|
|
1550
1536
|
(t) => ({
|
|
1551
1537
|
...resolverEvent2(t),
|
|
@@ -1554,7 +1540,7 @@ var subgraph_textChanged = onchainTable5(
|
|
|
1554
1540
|
}),
|
|
1555
1541
|
resolverEventIndex
|
|
1556
1542
|
);
|
|
1557
|
-
var subgraph_contenthashChanged =
|
|
1543
|
+
var subgraph_contenthashChanged = onchainTable4(
|
|
1558
1544
|
"subgraph_contenthash_changed",
|
|
1559
1545
|
(t) => ({
|
|
1560
1546
|
...resolverEvent2(t),
|
|
@@ -1562,7 +1548,7 @@ var subgraph_contenthashChanged = onchainTable5(
|
|
|
1562
1548
|
}),
|
|
1563
1549
|
resolverEventIndex
|
|
1564
1550
|
);
|
|
1565
|
-
var subgraph_interfaceChanged =
|
|
1551
|
+
var subgraph_interfaceChanged = onchainTable4(
|
|
1566
1552
|
"subgraph_interface_changed",
|
|
1567
1553
|
(t) => ({
|
|
1568
1554
|
...resolverEvent2(t),
|
|
@@ -1571,7 +1557,7 @@ var subgraph_interfaceChanged = onchainTable5(
|
|
|
1571
1557
|
}),
|
|
1572
1558
|
resolverEventIndex
|
|
1573
1559
|
);
|
|
1574
|
-
var subgraph_authorisationChanged =
|
|
1560
|
+
var subgraph_authorisationChanged = onchainTable4(
|
|
1575
1561
|
"subgraph_authorisation_changed",
|
|
1576
1562
|
(t) => ({
|
|
1577
1563
|
...resolverEvent2(t),
|
|
@@ -1581,7 +1567,7 @@ var subgraph_authorisationChanged = onchainTable5(
|
|
|
1581
1567
|
}),
|
|
1582
1568
|
resolverEventIndex
|
|
1583
1569
|
);
|
|
1584
|
-
var subgraph_versionChanged =
|
|
1570
|
+
var subgraph_versionChanged = onchainTable4(
|
|
1585
1571
|
"subgraph_version_changed",
|
|
1586
1572
|
(t) => ({
|
|
1587
1573
|
...resolverEvent2(t),
|
|
@@ -1775,8 +1761,8 @@ var subgraph_versionChangedRelations = relations4(subgraph_versionChanged, ({ on
|
|
|
1775
1761
|
}));
|
|
1776
1762
|
|
|
1777
1763
|
// src/ensindexer-abstract/tokenscope.schema.ts
|
|
1778
|
-
import { index as index4, onchainTable as
|
|
1779
|
-
var nameSales =
|
|
1764
|
+
import { index as index4, onchainTable as onchainTable5 } from "ponder";
|
|
1765
|
+
var nameSales = onchainTable5(
|
|
1780
1766
|
"name_sales",
|
|
1781
1767
|
(t) => ({
|
|
1782
1768
|
/**
|
|
@@ -1872,7 +1858,7 @@ var nameSales = onchainTable6(
|
|
|
1872
1858
|
idx_timestamp: index4().on(t.timestamp)
|
|
1873
1859
|
})
|
|
1874
1860
|
);
|
|
1875
|
-
var nameTokens =
|
|
1861
|
+
var nameTokens = onchainTable5(
|
|
1876
1862
|
"name_tokens",
|
|
1877
1863
|
(t) => ({
|
|
1878
1864
|
/**
|
|
@@ -2010,37 +1996,34 @@ var metadata = ENSNODE_SCHEMA.table(
|
|
|
2010
1996
|
);
|
|
2011
1997
|
|
|
2012
1998
|
// src/lib/drizzle.ts
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
}
|
|
2022
|
-
return clone;
|
|
1999
|
+
import { drizzle } from "drizzle-orm/node-postgres";
|
|
2000
|
+
import { isPgEnum } from "drizzle-orm/pg-core";
|
|
2001
|
+
import { isTable, Table } from "drizzle-orm/table";
|
|
2002
|
+
|
|
2003
|
+
// src/lib/checksum.ts
|
|
2004
|
+
import { createHash } from "crypto";
|
|
2005
|
+
function createChecksum(data) {
|
|
2006
|
+
return createHash("sha256").update(data).digest("hex").slice(0, 10);
|
|
2023
2007
|
}
|
|
2008
|
+
|
|
2009
|
+
// src/lib/drizzle.ts
|
|
2010
|
+
var appliedNameForConcreteEnsIndexerSchema;
|
|
2024
2011
|
function buildConcreteEnsIndexerSchema(ensIndexerSchemaName) {
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
concreteSchemaObject.schema = ensIndexerSchemaName;
|
|
2038
|
-
ensIndexerSchema[key] = concreteSchemaObject;
|
|
2039
|
-
} else {
|
|
2040
|
-
ensIndexerSchema[key] = abstractSchemaObject;
|
|
2012
|
+
if (appliedNameForConcreteEnsIndexerSchema !== void 0 && appliedNameForConcreteEnsIndexerSchema !== ensIndexerSchemaName) {
|
|
2013
|
+
throw new Error(
|
|
2014
|
+
`buildConcreteEnsIndexerSchema was already called with schema "${appliedNameForConcreteEnsIndexerSchema}". Calling it again with "${ensIndexerSchemaName}" would corrupt the previously built schema.`
|
|
2015
|
+
);
|
|
2016
|
+
}
|
|
2017
|
+
appliedNameForConcreteEnsIndexerSchema = ensIndexerSchemaName;
|
|
2018
|
+
const concreteEnsIndexerSchema = ensindexer_abstract_exports;
|
|
2019
|
+
for (const dbObject of Object.values(ensindexer_abstract_exports)) {
|
|
2020
|
+
if (isTable(dbObject)) {
|
|
2021
|
+
dbObject[Table.Symbol.Schema] = ensIndexerSchemaName;
|
|
2022
|
+
} else if (isPgEnum(dbObject)) {
|
|
2023
|
+
dbObject.schema = ensIndexerSchemaName;
|
|
2041
2024
|
}
|
|
2042
2025
|
}
|
|
2043
|
-
return
|
|
2026
|
+
return concreteEnsIndexerSchema;
|
|
2044
2027
|
}
|
|
2045
2028
|
function buildIndividualEnsDbSchemas(ensIndexerSchemaName) {
|
|
2046
2029
|
return {
|
|
@@ -2063,6 +2046,50 @@ function buildEnsDbDrizzleClient(connectionString, concreteEnsIndexerSchema, log
|
|
|
2063
2046
|
logger
|
|
2064
2047
|
});
|
|
2065
2048
|
}
|
|
2049
|
+
function safeStringifyDrizzleSchema(schema) {
|
|
2050
|
+
const seen = /* @__PURE__ */ new WeakSet();
|
|
2051
|
+
return JSON.stringify(schema, (_key, value) => {
|
|
2052
|
+
if (typeof value === "bigint") return `${value}n`;
|
|
2053
|
+
if (typeof value === "object" && value !== null) {
|
|
2054
|
+
if (seen.has(value)) return "[circular]";
|
|
2055
|
+
seen.add(value);
|
|
2056
|
+
}
|
|
2057
|
+
return value;
|
|
2058
|
+
});
|
|
2059
|
+
}
|
|
2060
|
+
function getDrizzleSchemaChecksum(schema) {
|
|
2061
|
+
const stringifiedSchema = safeStringifyDrizzleSchema(schema);
|
|
2062
|
+
return createChecksum(stringifiedSchema);
|
|
2063
|
+
}
|
|
2064
|
+
|
|
2065
|
+
// src/client/ensdb-config.ts
|
|
2066
|
+
var ENSDB_SCHEMA_CHECKSUM = getDrizzleSchemaChecksum({
|
|
2067
|
+
...ensindexer_abstract_exports,
|
|
2068
|
+
...ensnode_exports
|
|
2069
|
+
});
|
|
2070
|
+
|
|
2071
|
+
// src/client/ensdb-reader.ts
|
|
2072
|
+
import { and, eq } from "drizzle-orm/sql";
|
|
2073
|
+
import {
|
|
2074
|
+
deserializeCrossChainIndexingStatusSnapshot,
|
|
2075
|
+
deserializeEnsIndexerPublicConfig
|
|
2076
|
+
} from "@ensnode/ensnode-sdk";
|
|
2077
|
+
|
|
2078
|
+
// src/lib/parse-pg-version-info.ts
|
|
2079
|
+
function parsePgVersionInfo(versionString) {
|
|
2080
|
+
if (typeof versionString !== "string") {
|
|
2081
|
+
throw new Error("PostgreSQL version string must be a string");
|
|
2082
|
+
}
|
|
2083
|
+
const match = versionString.match(/PostgreSQL (\d+\.\d+)/);
|
|
2084
|
+
if (!match) {
|
|
2085
|
+
throw new Error(`Failed to parse PostgreSQL version from version string: '${versionString}'`);
|
|
2086
|
+
}
|
|
2087
|
+
const parsedVersion = match[1];
|
|
2088
|
+
if (typeof parsedVersion !== "string") {
|
|
2089
|
+
throw new Error(`Parsed PostgreSQL version is not a string: '${parsedVersion}'`);
|
|
2090
|
+
}
|
|
2091
|
+
return parsedVersion;
|
|
2092
|
+
}
|
|
2066
2093
|
|
|
2067
2094
|
// src/client/ensnode-metadata.ts
|
|
2068
2095
|
var EnsNodeMetadataKeys = {
|
|
@@ -2092,21 +2119,21 @@ var EnsDbReader = class {
|
|
|
2092
2119
|
* This also identifies which ENSNode metadata records to read from the ENSNode Schema
|
|
2093
2120
|
* as the ENSNode Schema is multi-tenant across ENSIndexer instances / ENSIndexer Schemas in an ENSDb.
|
|
2094
2121
|
*/
|
|
2095
|
-
|
|
2122
|
+
_ensIndexerSchemaName;
|
|
2096
2123
|
_ensNodeSchema;
|
|
2097
2124
|
/**
|
|
2098
|
-
* @param
|
|
2125
|
+
* @param ensDbUrl The connection string for Drizzle to connect to the ENSDb instance.
|
|
2099
2126
|
* @param ensIndexerSchemaName The name of the ENSIndexer schema to read from in ENSDb, used to identify which ENSNode metadata records to read.
|
|
2100
2127
|
*/
|
|
2101
|
-
constructor(
|
|
2128
|
+
constructor(ensDbUrl, ensIndexerSchemaName) {
|
|
2102
2129
|
const { concreteEnsIndexerSchema, ensNodeSchema } = buildIndividualEnsDbSchemas(ensIndexerSchemaName);
|
|
2103
2130
|
const ensDbDrizzleClient = buildEnsDbDrizzleClient(
|
|
2104
|
-
|
|
2131
|
+
ensDbUrl,
|
|
2105
2132
|
concreteEnsIndexerSchema
|
|
2106
2133
|
);
|
|
2107
2134
|
this.drizzleClient = ensDbDrizzleClient;
|
|
2108
2135
|
this._concreteEnsIndexerSchema = concreteEnsIndexerSchema;
|
|
2109
|
-
this.
|
|
2136
|
+
this._ensIndexerSchemaName = ensIndexerSchemaName;
|
|
2110
2137
|
this._ensNodeSchema = ensNodeSchema;
|
|
2111
2138
|
}
|
|
2112
2139
|
/**
|
|
@@ -2114,7 +2141,7 @@ var EnsDbReader = class {
|
|
|
2114
2141
|
*
|
|
2115
2142
|
* Useful while working on complex queries for ENSDb.
|
|
2116
2143
|
*/
|
|
2117
|
-
get
|
|
2144
|
+
get ensDb() {
|
|
2118
2145
|
return this.drizzleClient;
|
|
2119
2146
|
}
|
|
2120
2147
|
/**
|
|
@@ -2125,12 +2152,18 @@ var EnsDbReader = class {
|
|
|
2125
2152
|
*
|
|
2126
2153
|
* Note: using `ensIndexerSchema` name for this getter to make it read better
|
|
2127
2154
|
* in the context of query building. For example:
|
|
2128
|
-
* `this.
|
|
2129
|
-
* `this.
|
|
2155
|
+
* `this.ensDb.select().from(this.ensIndexerSchema.event)` vs.
|
|
2156
|
+
* `this.ensDb.select().from(this.concreteEnsIndexerSchema.event)`.
|
|
2130
2157
|
*/
|
|
2131
2158
|
get ensIndexerSchema() {
|
|
2132
2159
|
return this._concreteEnsIndexerSchema;
|
|
2133
2160
|
}
|
|
2161
|
+
/**
|
|
2162
|
+
* Getter for the ENSIndexer Schema Name used by this ENSDbReader instance.
|
|
2163
|
+
*/
|
|
2164
|
+
get ensIndexerSchemaName() {
|
|
2165
|
+
return this._ensIndexerSchemaName;
|
|
2166
|
+
}
|
|
2134
2167
|
/**
|
|
2135
2168
|
* Getter for the ENSNode Schema definition used in the Drizzle client
|
|
2136
2169
|
* for ENSDb instance.
|
|
@@ -2165,6 +2198,15 @@ var EnsDbReader = class {
|
|
|
2165
2198
|
}
|
|
2166
2199
|
return deserializeEnsIndexerPublicConfig(record);
|
|
2167
2200
|
}
|
|
2201
|
+
/**
|
|
2202
|
+
* Build ENSDb Public Config
|
|
2203
|
+
*/
|
|
2204
|
+
async buildEnsDbPublicConfig() {
|
|
2205
|
+
const versionInfo = await this.buildEnsDbVersionInfo();
|
|
2206
|
+
return {
|
|
2207
|
+
versionInfo
|
|
2208
|
+
};
|
|
2209
|
+
}
|
|
2168
2210
|
/**
|
|
2169
2211
|
* Get Indexing Status Snapshot
|
|
2170
2212
|
*
|
|
@@ -2190,7 +2232,7 @@ var EnsDbReader = class {
|
|
|
2190
2232
|
* 'ensIndexerSchemaName' and 'key')
|
|
2191
2233
|
*/
|
|
2192
2234
|
async getEnsNodeMetadata(metadata2) {
|
|
2193
|
-
const result = await this.
|
|
2235
|
+
const result = await this.ensDb.select().from(this.ensNodeSchema.metadata).where(
|
|
2194
2236
|
and(
|
|
2195
2237
|
eq(this.ensNodeSchema.metadata.ensIndexerSchemaName, this.ensIndexerSchemaName),
|
|
2196
2238
|
eq(this.ensNodeSchema.metadata.key, metadata2.key)
|
|
@@ -2206,6 +2248,33 @@ var EnsDbReader = class {
|
|
|
2206
2248
|
`There must be exactly one ENSNodeMetadata record for ('${this.ensIndexerSchemaName}', '${metadata2.key}') composite key`
|
|
2207
2249
|
);
|
|
2208
2250
|
}
|
|
2251
|
+
/**
|
|
2252
|
+
* Get PostgreSQL version for the server hosting the ENSDb instance.
|
|
2253
|
+
*
|
|
2254
|
+
* @throws when the version cannot be retrieved or parsed from the query result.
|
|
2255
|
+
*/
|
|
2256
|
+
async getPostgresVersion() {
|
|
2257
|
+
const result = await this.ensDb.execute("SELECT version();");
|
|
2258
|
+
const versionString = result.rows[0]?.version;
|
|
2259
|
+
try {
|
|
2260
|
+
return parsePgVersionInfo(versionString);
|
|
2261
|
+
} catch (error) {
|
|
2262
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
2263
|
+
throw new Error(`Failed to get PostgreSQL version for the ENSDb instance: ${errorMessage}`);
|
|
2264
|
+
}
|
|
2265
|
+
}
|
|
2266
|
+
/**
|
|
2267
|
+
* Build ENSDb version info.
|
|
2268
|
+
*
|
|
2269
|
+
* @throws when version info cannot be retrieved or parsed from
|
|
2270
|
+
* the ENSDb instance.
|
|
2271
|
+
*/
|
|
2272
|
+
async buildEnsDbVersionInfo() {
|
|
2273
|
+
const postgresVersion = await this.getPostgresVersion();
|
|
2274
|
+
return {
|
|
2275
|
+
postgresql: postgresVersion
|
|
2276
|
+
};
|
|
2277
|
+
}
|
|
2209
2278
|
};
|
|
2210
2279
|
|
|
2211
2280
|
// src/client/ensdb-writer.ts
|
|
@@ -2267,7 +2336,7 @@ var EnsDbWriter = class extends EnsDbReader {
|
|
|
2267
2336
|
* @throws when upsert operation failed.
|
|
2268
2337
|
*/
|
|
2269
2338
|
async upsertEnsNodeMetadata(metadata2) {
|
|
2270
|
-
await this.
|
|
2339
|
+
await this.ensDb.insert(this.ensNodeSchema.metadata).values({
|
|
2271
2340
|
ensIndexerSchemaName: this.ensIndexerSchemaName,
|
|
2272
2341
|
key: metadata2.key,
|
|
2273
2342
|
value: metadata2.value
|
|
@@ -2277,115 +2346,54 @@ var EnsDbWriter = class extends EnsDbReader {
|
|
|
2277
2346
|
});
|
|
2278
2347
|
}
|
|
2279
2348
|
};
|
|
2349
|
+
|
|
2350
|
+
// src/client/validate/ensdb-config.ts
|
|
2351
|
+
import { prettifyError } from "zod/v4";
|
|
2352
|
+
|
|
2353
|
+
// src/client/zod-schemas/ensdb-config.ts
|
|
2354
|
+
import { parse as parseConnectionString } from "pg-connection-string";
|
|
2355
|
+
import { z } from "zod/v4";
|
|
2356
|
+
var EnsDbUrlSchema = z.string().refine(
|
|
2357
|
+
(url) => {
|
|
2358
|
+
try {
|
|
2359
|
+
if (!url.startsWith("postgresql://") && !url.startsWith("postgres://")) {
|
|
2360
|
+
return false;
|
|
2361
|
+
}
|
|
2362
|
+
const config = parseConnectionString(url);
|
|
2363
|
+
return !!(config.host && config.port && config.database);
|
|
2364
|
+
} catch {
|
|
2365
|
+
return false;
|
|
2366
|
+
}
|
|
2367
|
+
},
|
|
2368
|
+
{
|
|
2369
|
+
error: "Invalid PostgreSQL connection string for ENSDb. Expected format: postgresql://username:password@host:port/database"
|
|
2370
|
+
}
|
|
2371
|
+
);
|
|
2372
|
+
var EnsIndexerSchemaNameSchema = z.string({
|
|
2373
|
+
error: "ENSIndexer Schema Name is required."
|
|
2374
|
+
}).trim().nonempty({
|
|
2375
|
+
error: "ENSIndexer Schema Name cannot be an empty string."
|
|
2376
|
+
});
|
|
2377
|
+
var EnsDbConfigSchema = z.object({
|
|
2378
|
+
ensDbUrl: EnsDbUrlSchema,
|
|
2379
|
+
ensIndexerSchemaName: EnsIndexerSchemaNameSchema
|
|
2380
|
+
});
|
|
2381
|
+
|
|
2382
|
+
// src/client/validate/ensdb-config.ts
|
|
2383
|
+
function validateEnsDbConfig(unvalidatedConfig) {
|
|
2384
|
+
const ensDbConfig = EnsDbConfigSchema.safeParse(unvalidatedConfig);
|
|
2385
|
+
if (!ensDbConfig.success) {
|
|
2386
|
+
throw new Error(`Failed to parse ENSDb configuration:
|
|
2387
|
+
${prettifyError(ensDbConfig.error)}
|
|
2388
|
+
`);
|
|
2389
|
+
}
|
|
2390
|
+
return ensDbConfig.data;
|
|
2391
|
+
}
|
|
2280
2392
|
export {
|
|
2393
|
+
ENSDB_SCHEMA_CHECKSUM,
|
|
2281
2394
|
EnsDbReader,
|
|
2282
2395
|
EnsDbWriter,
|
|
2283
2396
|
EnsNodeMetadataKeys,
|
|
2284
|
-
|
|
2285
|
-
account_relations,
|
|
2286
|
-
domainEvent,
|
|
2287
|
-
domainResolverRelation,
|
|
2288
|
-
domainResolverRelation_relations,
|
|
2289
|
-
ensNodeMetadata,
|
|
2290
|
-
event,
|
|
2291
|
-
internal_registrarActionMetadata,
|
|
2292
|
-
internal_registrarActionMetadataType,
|
|
2293
|
-
label,
|
|
2294
|
-
label_relations,
|
|
2295
|
-
latestRegistrationIndex,
|
|
2296
|
-
latestRenewalIndex,
|
|
2297
|
-
migratedNode,
|
|
2298
|
-
nameSales,
|
|
2299
|
-
nameTokens,
|
|
2300
|
-
permissions,
|
|
2301
|
-
permissionsEvent,
|
|
2302
|
-
permissionsResource,
|
|
2303
|
-
permissionsUser,
|
|
2304
|
-
registrarActionRelations,
|
|
2305
|
-
registrarActionType,
|
|
2306
|
-
registrarActions,
|
|
2307
|
-
registration,
|
|
2308
|
-
registrationLifecycleRelations,
|
|
2309
|
-
registrationLifecycles,
|
|
2310
|
-
registrationType,
|
|
2311
|
-
registration_relations,
|
|
2312
|
-
registry,
|
|
2313
|
-
registryCanonicalDomain,
|
|
2314
|
-
relations_permissions,
|
|
2315
|
-
relations_permissionsResource,
|
|
2316
|
-
relations_permissionsUser,
|
|
2317
|
-
relations_registry,
|
|
2318
|
-
relations_v1Domain,
|
|
2319
|
-
relations_v2Domain,
|
|
2320
|
-
renewal,
|
|
2321
|
-
renewal_relations,
|
|
2322
|
-
resolver,
|
|
2323
|
-
resolverAddressRecord,
|
|
2324
|
-
resolverAddressRecordRelations,
|
|
2325
|
-
resolverEvent,
|
|
2326
|
-
resolverRecords,
|
|
2327
|
-
resolverRecords_relations,
|
|
2328
|
-
resolverTextRecord,
|
|
2329
|
-
resolverTextRecordRelations,
|
|
2330
|
-
resolver_relations,
|
|
2331
|
-
reverseNameRecord,
|
|
2332
|
-
subgraph_abiChanged,
|
|
2333
|
-
subgraph_abiChangedRelations,
|
|
2334
|
-
subgraph_account,
|
|
2335
|
-
subgraph_accountRelations,
|
|
2336
|
-
subgraph_addrChanged,
|
|
2337
|
-
subgraph_addrChangedRelations,
|
|
2338
|
-
subgraph_authorisationChanged,
|
|
2339
|
-
subgraph_authorisationChangedRelations,
|
|
2340
|
-
subgraph_contenthashChanged,
|
|
2341
|
-
subgraph_contenthashChangedRelations,
|
|
2342
|
-
subgraph_domain,
|
|
2343
|
-
subgraph_domainRelations,
|
|
2344
|
-
subgraph_expiryExtended,
|
|
2345
|
-
subgraph_expiryExtendedRelations,
|
|
2346
|
-
subgraph_fusesSet,
|
|
2347
|
-
subgraph_fusesSetRelations,
|
|
2348
|
-
subgraph_interfaceChanged,
|
|
2349
|
-
subgraph_interfaceChangedRelations,
|
|
2350
|
-
subgraph_multicoinAddrChanged,
|
|
2351
|
-
subgraph_multicoinAddrChangedRelations,
|
|
2352
|
-
subgraph_nameChanged,
|
|
2353
|
-
subgraph_nameChangedRelations,
|
|
2354
|
-
subgraph_nameRegistered,
|
|
2355
|
-
subgraph_nameRegisteredRelations,
|
|
2356
|
-
subgraph_nameRenewed,
|
|
2357
|
-
subgraph_nameRenewedRelations,
|
|
2358
|
-
subgraph_nameTransferred,
|
|
2359
|
-
subgraph_nameTransferredRelations,
|
|
2360
|
-
subgraph_nameUnwrapped,
|
|
2361
|
-
subgraph_nameUnwrappedRelations,
|
|
2362
|
-
subgraph_nameWrapped,
|
|
2363
|
-
subgraph_nameWrappedRelations,
|
|
2364
|
-
subgraph_newOwner,
|
|
2365
|
-
subgraph_newOwnerRelations,
|
|
2366
|
-
subgraph_newResolver,
|
|
2367
|
-
subgraph_newResolverRelations,
|
|
2368
|
-
subgraph_newTTL,
|
|
2369
|
-
subgraph_newTTLRelations,
|
|
2370
|
-
subgraph_pubkeyChanged,
|
|
2371
|
-
subgraph_pubkeyChangedRelations,
|
|
2372
|
-
subgraph_registration,
|
|
2373
|
-
subgraph_registrationRelations,
|
|
2374
|
-
subgraph_resolver,
|
|
2375
|
-
subgraph_resolverRelations,
|
|
2376
|
-
subgraph_textChanged,
|
|
2377
|
-
subgraph_textChangedRelations,
|
|
2378
|
-
subgraph_transfer,
|
|
2379
|
-
subgraph_transferRelations,
|
|
2380
|
-
subgraph_versionChanged,
|
|
2381
|
-
subgraph_versionChangedRelations,
|
|
2382
|
-
subgraph_wrappedDomain,
|
|
2383
|
-
subgraph_wrappedDomainRelations,
|
|
2384
|
-
subgraph_wrappedTransfer,
|
|
2385
|
-
subgraph_wrappedTransferRelations,
|
|
2386
|
-
subregistries,
|
|
2387
|
-
subregistryRelations,
|
|
2388
|
-
v1Domain,
|
|
2389
|
-
v2Domain
|
|
2397
|
+
validateEnsDbConfig
|
|
2390
2398
|
};
|
|
2391
2399
|
//# sourceMappingURL=index.js.map
|