@ensnode/ponder-metadata 0.18.0 → 0.19.2
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/index.d.ts +400 -1
- package/dist/index.js +4 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { EnsRainbow } from '@ensnode/ensrainbow-sdk';
|
|
|
2
2
|
import { MiddlewareHandler } from 'hono';
|
|
3
3
|
import { ReadonlyDrizzle } from 'ponder';
|
|
4
4
|
import { PublicClient } from 'viem';
|
|
5
|
+
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Basic information about a block.
|
|
@@ -102,4 +103,402 @@ interface PonderMetadataModule {
|
|
|
102
103
|
type MetadataMiddlewareResponse = PonderMetadataMiddlewareResponse<PonderMetadataModule["AppInfo"], PonderMetadataModule["EnvVars"], PonderMetadataModule["RuntimeInfo"]>;
|
|
103
104
|
declare function ponderMetadata<AppInfo extends PonderMetadataModule["AppInfo"], EnvVars extends PonderMetadataModule["EnvVars"]>({ app, db, env, query, publicClients, }: PonderMetadataMiddlewareOptions<AppInfo, EnvVars>): MiddlewareHandler;
|
|
104
105
|
|
|
105
|
-
|
|
106
|
+
/**
|
|
107
|
+
* Internal ponder metadata type.
|
|
108
|
+
* Copied from https://github.com/ponder-sh/ponder/blob/32634897bf65e92a85dc4cccdaba70c9425d90f3/packages/core/src/database/index.ts#L94-L102
|
|
109
|
+
*/
|
|
110
|
+
type PonderAppMeta = {
|
|
111
|
+
is_locked: 0 | 1;
|
|
112
|
+
is_dev: 0 | 1;
|
|
113
|
+
heartbeat_at: number;
|
|
114
|
+
build_id: string;
|
|
115
|
+
checkpoint: string;
|
|
116
|
+
table_names: Array<string>;
|
|
117
|
+
version: string;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Get DB schema for _ponder_meta table.
|
|
121
|
+
* Akin to https://github.com/ponder-sh/ponder/blob/32634897bf65e92a85dc4cccdaba70c9425d90f3/packages/core/src/database/index.ts#L129-L141
|
|
122
|
+
*
|
|
123
|
+
* @param databaseNamespace A namespace for the database.
|
|
124
|
+
* @returns A table schema for _ponder_meta table.
|
|
125
|
+
* */
|
|
126
|
+
declare const getPonderMetaTableSchema: (databaseNamespace: string) => drizzle_orm_pg_core.PgTableWithColumns<{
|
|
127
|
+
name: "_ponder_meta";
|
|
128
|
+
schema: undefined;
|
|
129
|
+
columns: {
|
|
130
|
+
key: drizzle_orm_pg_core.PgColumn<{
|
|
131
|
+
name: "key";
|
|
132
|
+
tableName: "_ponder_meta";
|
|
133
|
+
dataType: "string";
|
|
134
|
+
columnType: "PgText";
|
|
135
|
+
data: "app";
|
|
136
|
+
driverParam: string;
|
|
137
|
+
notNull: true;
|
|
138
|
+
hasDefault: false;
|
|
139
|
+
isPrimaryKey: true;
|
|
140
|
+
isAutoincrement: false;
|
|
141
|
+
hasRuntimeDefault: false;
|
|
142
|
+
enumValues: [string, ...string[]];
|
|
143
|
+
baseColumn: never;
|
|
144
|
+
identity: undefined;
|
|
145
|
+
generated: undefined;
|
|
146
|
+
}, {}, {
|
|
147
|
+
$type: "app";
|
|
148
|
+
}>;
|
|
149
|
+
value: drizzle_orm_pg_core.PgColumn<{
|
|
150
|
+
name: "value";
|
|
151
|
+
tableName: "_ponder_meta";
|
|
152
|
+
dataType: "json";
|
|
153
|
+
columnType: "PgJsonb";
|
|
154
|
+
data: PonderAppMeta;
|
|
155
|
+
driverParam: unknown;
|
|
156
|
+
notNull: true;
|
|
157
|
+
hasDefault: false;
|
|
158
|
+
isPrimaryKey: false;
|
|
159
|
+
isAutoincrement: false;
|
|
160
|
+
hasRuntimeDefault: false;
|
|
161
|
+
enumValues: undefined;
|
|
162
|
+
baseColumn: never;
|
|
163
|
+
identity: undefined;
|
|
164
|
+
generated: undefined;
|
|
165
|
+
}, {}, {
|
|
166
|
+
$type: PonderAppMeta;
|
|
167
|
+
}>;
|
|
168
|
+
};
|
|
169
|
+
dialect: "pg";
|
|
170
|
+
}> | drizzle_orm_pg_core.PgTableWithColumns<{
|
|
171
|
+
name: "_ponder_meta";
|
|
172
|
+
schema: string;
|
|
173
|
+
columns: {
|
|
174
|
+
key: drizzle_orm_pg_core.PgColumn<{
|
|
175
|
+
name: "key";
|
|
176
|
+
tableName: "_ponder_meta";
|
|
177
|
+
dataType: "string";
|
|
178
|
+
columnType: "PgText";
|
|
179
|
+
data: "app";
|
|
180
|
+
driverParam: string;
|
|
181
|
+
notNull: true;
|
|
182
|
+
hasDefault: false;
|
|
183
|
+
isPrimaryKey: true;
|
|
184
|
+
isAutoincrement: false;
|
|
185
|
+
hasRuntimeDefault: false;
|
|
186
|
+
enumValues: [string, ...string[]];
|
|
187
|
+
baseColumn: never;
|
|
188
|
+
identity: undefined;
|
|
189
|
+
generated: undefined;
|
|
190
|
+
}, {}, {
|
|
191
|
+
$type: "app";
|
|
192
|
+
}>;
|
|
193
|
+
value: drizzle_orm_pg_core.PgColumn<{
|
|
194
|
+
name: "value";
|
|
195
|
+
tableName: "_ponder_meta";
|
|
196
|
+
dataType: "json";
|
|
197
|
+
columnType: "PgJsonb";
|
|
198
|
+
data: PonderAppMeta;
|
|
199
|
+
driverParam: unknown;
|
|
200
|
+
notNull: true;
|
|
201
|
+
hasDefault: false;
|
|
202
|
+
isPrimaryKey: false;
|
|
203
|
+
isAutoincrement: false;
|
|
204
|
+
hasRuntimeDefault: false;
|
|
205
|
+
enumValues: undefined;
|
|
206
|
+
baseColumn: never;
|
|
207
|
+
identity: undefined;
|
|
208
|
+
generated: undefined;
|
|
209
|
+
}, {}, {
|
|
210
|
+
$type: PonderAppMeta;
|
|
211
|
+
}>;
|
|
212
|
+
};
|
|
213
|
+
dialect: "pg";
|
|
214
|
+
}>;
|
|
215
|
+
/**
|
|
216
|
+
* Get DB schema for _ponder_status table.
|
|
217
|
+
* Akin to https://github.com/ponder-sh/ponder/blob/32634897bf65e92a85dc4cccdaba70c9425d90f3/packages/core/src/database/index.ts#L143-L159
|
|
218
|
+
*
|
|
219
|
+
* @param databaseNamespace A namespace for the database.
|
|
220
|
+
* @returns A table schema for _ponder_status table.
|
|
221
|
+
*/
|
|
222
|
+
declare const getPonderStatusTableSchema: (databaseNamespace: string) => drizzle_orm_pg_core.PgTableWithColumns<{
|
|
223
|
+
name: "_ponder_status";
|
|
224
|
+
schema: undefined;
|
|
225
|
+
columns: {
|
|
226
|
+
network_name: drizzle_orm_pg_core.PgColumn<{
|
|
227
|
+
name: "network_name";
|
|
228
|
+
tableName: "_ponder_status";
|
|
229
|
+
dataType: "string";
|
|
230
|
+
columnType: "PgText";
|
|
231
|
+
data: string;
|
|
232
|
+
driverParam: string;
|
|
233
|
+
notNull: true;
|
|
234
|
+
hasDefault: false;
|
|
235
|
+
isPrimaryKey: true;
|
|
236
|
+
isAutoincrement: false;
|
|
237
|
+
hasRuntimeDefault: false;
|
|
238
|
+
enumValues: [string, ...string[]];
|
|
239
|
+
baseColumn: never;
|
|
240
|
+
identity: undefined;
|
|
241
|
+
generated: undefined;
|
|
242
|
+
}, {}, {}>;
|
|
243
|
+
block_number: drizzle_orm_pg_core.PgColumn<{
|
|
244
|
+
name: "block_number";
|
|
245
|
+
tableName: "_ponder_status";
|
|
246
|
+
dataType: "number";
|
|
247
|
+
columnType: "PgBigInt53";
|
|
248
|
+
data: number;
|
|
249
|
+
driverParam: string | number;
|
|
250
|
+
notNull: false;
|
|
251
|
+
hasDefault: false;
|
|
252
|
+
isPrimaryKey: false;
|
|
253
|
+
isAutoincrement: false;
|
|
254
|
+
hasRuntimeDefault: false;
|
|
255
|
+
enumValues: undefined;
|
|
256
|
+
baseColumn: never;
|
|
257
|
+
identity: undefined;
|
|
258
|
+
generated: undefined;
|
|
259
|
+
}, {}, {}>;
|
|
260
|
+
block_timestamp: drizzle_orm_pg_core.PgColumn<{
|
|
261
|
+
name: "block_timestamp";
|
|
262
|
+
tableName: "_ponder_status";
|
|
263
|
+
dataType: "number";
|
|
264
|
+
columnType: "PgBigInt53";
|
|
265
|
+
data: number;
|
|
266
|
+
driverParam: string | number;
|
|
267
|
+
notNull: false;
|
|
268
|
+
hasDefault: false;
|
|
269
|
+
isPrimaryKey: false;
|
|
270
|
+
isAutoincrement: false;
|
|
271
|
+
hasRuntimeDefault: false;
|
|
272
|
+
enumValues: undefined;
|
|
273
|
+
baseColumn: never;
|
|
274
|
+
identity: undefined;
|
|
275
|
+
generated: undefined;
|
|
276
|
+
}, {}, {}>;
|
|
277
|
+
ready: drizzle_orm_pg_core.PgColumn<{
|
|
278
|
+
name: "ready";
|
|
279
|
+
tableName: "_ponder_status";
|
|
280
|
+
dataType: "boolean";
|
|
281
|
+
columnType: "PgBoolean";
|
|
282
|
+
data: boolean;
|
|
283
|
+
driverParam: boolean;
|
|
284
|
+
notNull: true;
|
|
285
|
+
hasDefault: false;
|
|
286
|
+
isPrimaryKey: false;
|
|
287
|
+
isAutoincrement: false;
|
|
288
|
+
hasRuntimeDefault: false;
|
|
289
|
+
enumValues: undefined;
|
|
290
|
+
baseColumn: never;
|
|
291
|
+
identity: undefined;
|
|
292
|
+
generated: undefined;
|
|
293
|
+
}, {}, {}>;
|
|
294
|
+
};
|
|
295
|
+
dialect: "pg";
|
|
296
|
+
}> | drizzle_orm_pg_core.PgTableWithColumns<{
|
|
297
|
+
name: "_ponder_status";
|
|
298
|
+
schema: string;
|
|
299
|
+
columns: {
|
|
300
|
+
network_name: drizzle_orm_pg_core.PgColumn<{
|
|
301
|
+
name: "network_name";
|
|
302
|
+
tableName: "_ponder_status";
|
|
303
|
+
dataType: "string";
|
|
304
|
+
columnType: "PgText";
|
|
305
|
+
data: string;
|
|
306
|
+
driverParam: string;
|
|
307
|
+
notNull: true;
|
|
308
|
+
hasDefault: false;
|
|
309
|
+
isPrimaryKey: true;
|
|
310
|
+
isAutoincrement: false;
|
|
311
|
+
hasRuntimeDefault: false;
|
|
312
|
+
enumValues: [string, ...string[]];
|
|
313
|
+
baseColumn: never;
|
|
314
|
+
identity: undefined;
|
|
315
|
+
generated: undefined;
|
|
316
|
+
}, {}, {}>;
|
|
317
|
+
block_number: drizzle_orm_pg_core.PgColumn<{
|
|
318
|
+
name: "block_number";
|
|
319
|
+
tableName: "_ponder_status";
|
|
320
|
+
dataType: "number";
|
|
321
|
+
columnType: "PgBigInt53";
|
|
322
|
+
data: number;
|
|
323
|
+
driverParam: string | number;
|
|
324
|
+
notNull: false;
|
|
325
|
+
hasDefault: false;
|
|
326
|
+
isPrimaryKey: false;
|
|
327
|
+
isAutoincrement: false;
|
|
328
|
+
hasRuntimeDefault: false;
|
|
329
|
+
enumValues: undefined;
|
|
330
|
+
baseColumn: never;
|
|
331
|
+
identity: undefined;
|
|
332
|
+
generated: undefined;
|
|
333
|
+
}, {}, {}>;
|
|
334
|
+
block_timestamp: drizzle_orm_pg_core.PgColumn<{
|
|
335
|
+
name: "block_timestamp";
|
|
336
|
+
tableName: "_ponder_status";
|
|
337
|
+
dataType: "number";
|
|
338
|
+
columnType: "PgBigInt53";
|
|
339
|
+
data: number;
|
|
340
|
+
driverParam: string | number;
|
|
341
|
+
notNull: false;
|
|
342
|
+
hasDefault: false;
|
|
343
|
+
isPrimaryKey: false;
|
|
344
|
+
isAutoincrement: false;
|
|
345
|
+
hasRuntimeDefault: false;
|
|
346
|
+
enumValues: undefined;
|
|
347
|
+
baseColumn: never;
|
|
348
|
+
identity: undefined;
|
|
349
|
+
generated: undefined;
|
|
350
|
+
}, {}, {}>;
|
|
351
|
+
ready: drizzle_orm_pg_core.PgColumn<{
|
|
352
|
+
name: "ready";
|
|
353
|
+
tableName: "_ponder_status";
|
|
354
|
+
dataType: "boolean";
|
|
355
|
+
columnType: "PgBoolean";
|
|
356
|
+
data: boolean;
|
|
357
|
+
driverParam: boolean;
|
|
358
|
+
notNull: true;
|
|
359
|
+
hasDefault: false;
|
|
360
|
+
isPrimaryKey: false;
|
|
361
|
+
isAutoincrement: false;
|
|
362
|
+
hasRuntimeDefault: false;
|
|
363
|
+
enumValues: undefined;
|
|
364
|
+
baseColumn: never;
|
|
365
|
+
identity: undefined;
|
|
366
|
+
generated: undefined;
|
|
367
|
+
}, {}, {}>;
|
|
368
|
+
};
|
|
369
|
+
dialect: "pg";
|
|
370
|
+
}>;
|
|
371
|
+
type PonderStatusTableSchema = ReturnType<typeof getPonderStatusTableSchema>;
|
|
372
|
+
/**
|
|
373
|
+
* Get a list of ponder status entries for each network.
|
|
374
|
+
*
|
|
375
|
+
* @param namespace A namespace for the database (e.g. "public").
|
|
376
|
+
* @param db Drizzle DB Client instance.
|
|
377
|
+
* @returns a list of ponder status entries for each network.
|
|
378
|
+
*/
|
|
379
|
+
declare function queryPonderStatus(namespace: string, db: ReadonlyDrizzle<Record<string, unknown>>): Promise<Array<PonderStatusTableSchema["$inferSelect"]>>;
|
|
380
|
+
type PonderMetaTableSchema = ReturnType<typeof getPonderMetaTableSchema>;
|
|
381
|
+
/**
|
|
382
|
+
* Get ponder metadata for the app.
|
|
383
|
+
*
|
|
384
|
+
* @param namespace A namespace for the database (e.g. "public").
|
|
385
|
+
* @param db Drizzle DB Client instance.
|
|
386
|
+
* @returns ponder metadata for the app.
|
|
387
|
+
* @throws Error if ponder metadata not found.
|
|
388
|
+
*/
|
|
389
|
+
declare function queryPonderMeta(namespace: string, db: ReadonlyDrizzle<Record<string, unknown>>): Promise<PonderMetaTableSchema["$inferSelect"]["value"]>;
|
|
390
|
+
|
|
391
|
+
declare module "parse-prometheus-text-format" {
|
|
392
|
+
interface PrometheusMetric {
|
|
393
|
+
name: string;
|
|
394
|
+
help: string;
|
|
395
|
+
type: string;
|
|
396
|
+
metrics: Array<{
|
|
397
|
+
value: string;
|
|
398
|
+
labels?: Record<string, string>;
|
|
399
|
+
}>;
|
|
400
|
+
}
|
|
401
|
+
export default function parsePrometheusTextFormat(text: string): Array<PrometheusMetric>;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
declare class PrometheusMetrics {
|
|
405
|
+
private readonly metrics;
|
|
406
|
+
private constructor();
|
|
407
|
+
static parse(maybePrometheusMetricsText: string): PrometheusMetrics;
|
|
408
|
+
/**
|
|
409
|
+
* Gets all metrics of a specific name
|
|
410
|
+
* @param name Metric name
|
|
411
|
+
* @returns Array of metrics or undefined if not found
|
|
412
|
+
* @example
|
|
413
|
+
* ```ts
|
|
414
|
+
* const metrics = parser.get('ponder_historical_total_indexing_seconds');
|
|
415
|
+
* // Returns: [
|
|
416
|
+
* // { value: 251224935, labels: { network: "1" } },
|
|
417
|
+
* // { value: 251224935, labels: { network: "8453" } }
|
|
418
|
+
* // ]
|
|
419
|
+
* ```
|
|
420
|
+
*/
|
|
421
|
+
get(name: string): Array<{
|
|
422
|
+
value: number;
|
|
423
|
+
labels?: Record<string, string>;
|
|
424
|
+
}> | undefined;
|
|
425
|
+
/**
|
|
426
|
+
* Gets a single metric value, optionally filtered by labels
|
|
427
|
+
* @param name Metric name
|
|
428
|
+
* @param labelFilter Optional label key-value pairs to match
|
|
429
|
+
* @returns Metric value or undefined if not found
|
|
430
|
+
* @example
|
|
431
|
+
* ```ts
|
|
432
|
+
* // Get simple value
|
|
433
|
+
* parser.getValue('ponder_historical_start_timestamp_seconds') // Returns: 1740391265
|
|
434
|
+
*
|
|
435
|
+
* // Get value with label filter
|
|
436
|
+
* parser.getValue('ponder_historical_total_indexing_seconds', { network: '1' }) // Returns: 251224935
|
|
437
|
+
* ```
|
|
438
|
+
*/
|
|
439
|
+
getValue(name: string, labelFilter?: Record<string, string>): number | undefined;
|
|
440
|
+
/**
|
|
441
|
+
* Gets a label value from a metric
|
|
442
|
+
* @param name Metric name
|
|
443
|
+
* @param label Label name to retrieve
|
|
444
|
+
* @returns Label value or undefined if not found
|
|
445
|
+
* @example
|
|
446
|
+
* ```ts
|
|
447
|
+
* parser.getLabel('ponder_version_info', 'version') // Returns: "0.9.18"
|
|
448
|
+
* parser.getLabel('ponder_settings_info', 'ordering') // Returns: "omnichain"
|
|
449
|
+
* ```
|
|
450
|
+
*/
|
|
451
|
+
getLabel(name: string, label: string): string | undefined;
|
|
452
|
+
/**
|
|
453
|
+
* Gets all unique label values for a metric
|
|
454
|
+
* @param name Metric name
|
|
455
|
+
* @param label Label name to retrieve
|
|
456
|
+
* @returns Array of unique label values
|
|
457
|
+
* @example
|
|
458
|
+
* ```ts
|
|
459
|
+
* // Get all network IDs
|
|
460
|
+
* parser.getLabels('ponder_historical_total_indexing_seconds', 'network')
|
|
461
|
+
* // Returns: ['1', '8453']
|
|
462
|
+
* ```
|
|
463
|
+
*/
|
|
464
|
+
getLabels(name: string, label: string): string[];
|
|
465
|
+
/**
|
|
466
|
+
* Gets help text for a metric
|
|
467
|
+
* @param name Metric name
|
|
468
|
+
* @returns Help text or undefined if not found
|
|
469
|
+
* @example
|
|
470
|
+
* ```ts
|
|
471
|
+
* parser.getHelp('ponder_historical_start_timestamp_seconds')
|
|
472
|
+
* // Returns: "Timestamp at which historical indexing started"
|
|
473
|
+
* ```
|
|
474
|
+
*/
|
|
475
|
+
getHelp(name: string): string | undefined;
|
|
476
|
+
/**
|
|
477
|
+
* Gets metric type
|
|
478
|
+
* @param name Metric name
|
|
479
|
+
* @returns Metric type or undefined if not found
|
|
480
|
+
* @example
|
|
481
|
+
* ```ts
|
|
482
|
+
* parser.getType('ponder_version_info') // Returns: "gauge"
|
|
483
|
+
* parser.getType('ponder_postgres_query_total') // Returns: "counter"
|
|
484
|
+
* ```
|
|
485
|
+
*/
|
|
486
|
+
getType(name: string): string | undefined;
|
|
487
|
+
/**
|
|
488
|
+
* Gets all metric names
|
|
489
|
+
* @returns Array of metric names
|
|
490
|
+
* @example
|
|
491
|
+
* ```ts
|
|
492
|
+
* parser.getMetricNames()
|
|
493
|
+
* // Returns: [
|
|
494
|
+
* // 'ponder_version_info',
|
|
495
|
+
* // 'ponder_settings_info',
|
|
496
|
+
* // 'ponder_historical_start_timestamp_seconds',
|
|
497
|
+
* // 'ponder_historical_total_indexing_seconds'
|
|
498
|
+
* // ]
|
|
499
|
+
* ```
|
|
500
|
+
*/
|
|
501
|
+
getMetricNames(): string[];
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
export { type BlockInfo, type MetadataMiddlewareResponse, type NetworkIndexingStatus, type PonderMetadataMiddlewareResponse, PrometheusMetrics, ponderMetadata, queryPonderMeta, queryPonderStatus };
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ensnode/ponder-metadata",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A Hono middleware for making Ponder app metadata available to clients.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"drizzle-orm": "^0.39.3",
|
|
30
30
|
"parse-prometheus-text-format": "^1.1.1",
|
|
31
31
|
"viem": "^2.22.13",
|
|
32
|
-
"@ensnode/ensrainbow-sdk": "0.
|
|
32
|
+
"@ensnode/ensrainbow-sdk": "0.19.2"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@biomejs/biome": "^1.9.4",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"tsup": "^8.3.6",
|
|
40
40
|
"typescript": "^5.7.3",
|
|
41
41
|
"vitest": "^3.1.1",
|
|
42
|
-
"@ensnode/shared-configs": "0.
|
|
42
|
+
"@ensnode/shared-configs": "0.19.2"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"hono": "^4.6.14",
|