ponder 0.16.9 → 0.17.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/CHANGELOG.md +29 -0
- package/dist/esm/bin/commands/codegen.js +3 -12
- package/dist/esm/bin/commands/codegen.js.map +1 -1
- package/dist/esm/bin/commands/createViews.js +2 -5
- package/dist/esm/bin/commands/createViews.js.map +1 -1
- package/dist/esm/bin/commands/dev.js +4 -22
- package/dist/esm/bin/commands/dev.js.map +1 -1
- package/dist/esm/bin/commands/list.js +4 -8
- package/dist/esm/bin/commands/list.js.map +1 -1
- package/dist/esm/bin/commands/prune.js +4 -8
- package/dist/esm/bin/commands/prune.js.map +1 -1
- package/dist/esm/bin/commands/serve.js +5 -20
- package/dist/esm/bin/commands/serve.js.map +1 -1
- package/dist/esm/bin/commands/start.js +4 -20
- package/dist/esm/bin/commands/start.js.map +1 -1
- package/dist/esm/bin/isolatedController.js +3 -3
- package/dist/esm/bin/isolatedController.js.map +1 -1
- package/dist/esm/bin/isolatedWorker.js +0 -5
- package/dist/esm/bin/isolatedWorker.js.map +1 -1
- package/dist/esm/bin/ponder.js.map +1 -1
- package/dist/esm/bin/utils/exit.js +1 -5
- package/dist/esm/bin/utils/exit.js.map +1 -1
- package/dist/esm/build/config.js +2 -2
- package/dist/esm/build/config.js.map +1 -1
- package/dist/esm/build/factory.js +1 -1
- package/dist/esm/build/factory.js.map +1 -1
- package/dist/esm/build/index.js +17 -14
- package/dist/esm/build/index.js.map +1 -1
- package/dist/esm/build/pre.js +2 -2
- package/dist/esm/build/pre.js.map +1 -1
- package/dist/esm/build/schema.js +2 -2
- package/dist/esm/build/schema.js.map +1 -1
- package/dist/esm/build/stacktrace.js +5 -5
- package/dist/esm/build/stacktrace.js.map +1 -1
- package/dist/esm/client/index.js +8 -9
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/database/actions.js +7 -9
- package/dist/esm/database/actions.js.map +1 -1
- package/dist/esm/database/index.js +7 -7
- package/dist/esm/database/index.js.map +1 -1
- package/dist/esm/database/queryBuilder.js +4 -7
- package/dist/esm/database/queryBuilder.js.map +1 -1
- package/dist/esm/drizzle/bigint.js +3 -5
- package/dist/esm/drizzle/bigint.js.map +1 -1
- package/dist/esm/drizzle/bytes.js +3 -5
- package/dist/esm/drizzle/bytes.js.map +1 -1
- package/dist/esm/drizzle/hex.js +3 -5
- package/dist/esm/drizzle/hex.js.map +1 -1
- package/dist/esm/drizzle/index.js.map +1 -1
- package/dist/esm/drizzle/json.js +8 -12
- package/dist/esm/drizzle/json.js.map +1 -1
- package/dist/esm/drizzle/kit/index.js +24 -38
- package/dist/esm/drizzle/kit/index.js.map +1 -1
- package/dist/esm/drizzle/onchain.js +15 -17
- package/dist/esm/drizzle/onchain.js.map +1 -1
- package/dist/esm/drizzle/text.js +3 -5
- package/dist/esm/drizzle/text.js.map +1 -1
- package/dist/esm/graphql/index.js +6 -6
- package/dist/esm/graphql/index.js.map +1 -1
- package/dist/esm/graphql/json.js.map +1 -1
- package/dist/esm/graphql/middleware.js +2 -2
- package/dist/esm/graphql/middleware.js.map +1 -1
- package/dist/esm/index.js +5 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/indexing/addStackTrace.js +1 -1
- package/dist/esm/indexing/addStackTrace.js.map +1 -1
- package/dist/esm/indexing/client.js +11 -12
- package/dist/esm/indexing/client.js.map +1 -1
- package/dist/esm/indexing/index.js +6 -4
- package/dist/esm/indexing/index.js.map +1 -1
- package/dist/esm/indexing/profile.js +2 -2
- package/dist/esm/indexing/profile.js.map +1 -1
- package/dist/esm/indexing-store/cache.js +4 -4
- package/dist/esm/indexing-store/cache.js.map +1 -1
- package/dist/esm/indexing-store/index.js +10 -13
- package/dist/esm/indexing-store/index.js.map +1 -1
- package/dist/esm/indexing-store/profile.js +3 -3
- package/dist/esm/indexing-store/profile.js.map +1 -1
- package/dist/esm/indexing-store/utils.js +3 -3
- package/dist/esm/indexing-store/utils.js.map +1 -1
- package/dist/esm/internal/logger.js +7 -7
- package/dist/esm/internal/logger.js.map +1 -1
- package/dist/esm/internal/metrics.js +15 -15
- package/dist/esm/internal/metrics.js.map +1 -1
- package/dist/esm/internal/options.js +6 -9
- package/dist/esm/internal/options.js.map +1 -1
- package/dist/esm/internal/shutdown.js.map +1 -1
- package/dist/esm/rpc/actions.js +7 -8
- package/dist/esm/rpc/actions.js.map +1 -1
- package/dist/esm/rpc/http.js +8 -4
- package/dist/esm/rpc/http.js.map +1 -1
- package/dist/esm/rpc/index.js +19 -19
- package/dist/esm/rpc/index.js.map +1 -1
- package/dist/esm/runtime/events.js +7 -9
- package/dist/esm/runtime/events.js.map +1 -1
- package/dist/esm/runtime/filter.js +1 -1
- package/dist/esm/runtime/filter.js.map +1 -1
- package/dist/esm/runtime/fragments.js.map +1 -1
- package/dist/esm/runtime/historical.js +7 -7
- package/dist/esm/runtime/historical.js.map +1 -1
- package/dist/esm/runtime/index.js +2 -2
- package/dist/esm/runtime/index.js.map +1 -1
- package/dist/esm/runtime/isolated.js +18 -11
- package/dist/esm/runtime/isolated.js.map +1 -1
- package/dist/esm/runtime/multichain.js +19 -12
- package/dist/esm/runtime/multichain.js.map +1 -1
- package/dist/esm/runtime/omnichain.js +19 -12
- package/dist/esm/runtime/omnichain.js.map +1 -1
- package/dist/esm/runtime/realtime.js +12 -12
- package/dist/esm/runtime/realtime.js.map +1 -1
- package/dist/esm/server/error.js +1 -1
- package/dist/esm/server/error.js.map +1 -1
- package/dist/esm/server/index.js +4 -4
- package/dist/esm/server/index.js.map +1 -1
- package/dist/esm/sync-historical/index.js +2 -2
- package/dist/esm/sync-historical/index.js.map +1 -1
- package/dist/esm/sync-realtime/bloom.js +1 -1
- package/dist/esm/sync-realtime/bloom.js.map +1 -1
- package/dist/esm/sync-realtime/index.js +1 -1
- package/dist/esm/sync-realtime/index.js.map +1 -1
- package/dist/esm/sync-store/encode.js +1 -1
- package/dist/esm/sync-store/encode.js.map +1 -1
- package/dist/esm/sync-store/index.js +12 -31
- package/dist/esm/sync-store/index.js.map +1 -1
- package/dist/esm/sync-store/migrations.js +1 -1
- package/dist/esm/sync-store/migrations.js.map +1 -1
- package/dist/esm/sync-store/schema.js +2 -2
- package/dist/esm/sync-store/schema.js.map +1 -1
- package/dist/esm/types/db.js.map +1 -1
- package/dist/esm/ui/app.js +2 -2
- package/dist/esm/ui/app.js.map +1 -1
- package/dist/esm/ui/patch.js +1 -2
- package/dist/esm/ui/patch.js.map +1 -1
- package/dist/esm/utils/abi.js +1 -1
- package/dist/esm/utils/abi.js.map +1 -1
- package/dist/esm/utils/bigint.js.map +1 -1
- package/dist/esm/utils/checkpoint.js.map +1 -1
- package/dist/esm/utils/chunk.js.map +1 -1
- package/dist/esm/utils/copy.js +1 -1
- package/dist/esm/utils/copy.js.map +1 -1
- package/dist/esm/utils/decodeAbiParameters.js +2 -3
- package/dist/esm/utils/decodeAbiParameters.js.map +1 -1
- package/dist/esm/utils/decodeEventLog.js.map +1 -1
- package/dist/esm/utils/duplicates.js.map +1 -1
- package/dist/esm/utils/finality.js.map +1 -1
- package/dist/esm/utils/generators.js.map +1 -1
- package/dist/esm/utils/interval.js.map +1 -1
- package/dist/esm/utils/mutex.js.map +1 -1
- package/dist/esm/utils/offset.js.map +1 -1
- package/dist/esm/utils/order.js.map +1 -1
- package/dist/esm/utils/partition.js.map +1 -1
- package/dist/esm/utils/pg.js +2 -2
- package/dist/esm/utils/pg.js.map +1 -1
- package/dist/esm/utils/pglite.js +4 -6
- package/dist/esm/utils/pglite.js.map +1 -1
- package/dist/esm/utils/port.js.map +1 -1
- package/dist/esm/utils/promiseAllSettledWithThrow.js.map +1 -1
- package/dist/esm/utils/queue.js +7 -7
- package/dist/esm/utils/queue.js.map +1 -1
- package/dist/esm/utils/result.js +1 -1
- package/dist/esm/utils/result.js.map +1 -1
- package/dist/esm/utils/sql-parse.js +10 -10
- package/dist/esm/utils/sql-parse.js.map +1 -1
- package/dist/esm/utils/zipper.js.map +1 -1
- package/dist/types/bin/commands/codegen.d.ts.map +1 -1
- package/dist/types/bin/commands/createViews.d.ts.map +1 -1
- package/dist/types/bin/commands/dev.d.ts.map +1 -1
- package/dist/types/bin/commands/list.d.ts.map +1 -1
- package/dist/types/bin/commands/prune.d.ts.map +1 -1
- package/dist/types/bin/commands/serve.d.ts.map +1 -1
- package/dist/types/bin/commands/start.d.ts.map +1 -1
- package/dist/types/bin/isolatedController.d.ts.map +1 -1
- package/dist/types/bin/isolatedWorker.d.ts.map +1 -1
- package/dist/types/bin/ponder.d.ts +1 -1
- package/dist/types/bin/ponder.d.ts.map +1 -1
- package/dist/types/bin/utils/exit.d.ts +1 -1
- package/dist/types/bin/utils/exit.d.ts.map +1 -1
- package/dist/types/build/config.d.ts +1 -1
- package/dist/types/build/config.d.ts.map +1 -1
- package/dist/types/build/factory.d.ts.map +1 -1
- package/dist/types/build/index.d.ts +1 -1
- package/dist/types/build/index.d.ts.map +1 -1
- package/dist/types/build/plugin.d.ts +1 -1
- package/dist/types/build/plugin.d.ts.map +1 -1
- package/dist/types/build/schema.d.ts.map +1 -1
- package/dist/types/client/index.d.ts.map +1 -1
- package/dist/types/config/address.d.ts +1 -1
- package/dist/types/config/address.d.ts.map +1 -1
- package/dist/types/config/index.d.ts +6 -6
- package/dist/types/config/index.d.ts.map +1 -1
- package/dist/types/database/actions.d.ts +5 -5
- package/dist/types/database/actions.d.ts.map +1 -1
- package/dist/types/database/index.d.ts +2 -2
- package/dist/types/database/index.d.ts.map +1 -1
- package/dist/types/database/queryBuilder.d.ts +4 -4
- package/dist/types/database/queryBuilder.d.ts.map +1 -1
- package/dist/types/drizzle/bigint.d.ts +1 -1
- package/dist/types/drizzle/bigint.d.ts.map +1 -1
- package/dist/types/drizzle/bytes.d.ts +2 -1
- package/dist/types/drizzle/bytes.d.ts.map +1 -1
- package/dist/types/drizzle/hex.d.ts +1 -1
- package/dist/types/drizzle/hex.d.ts.map +1 -1
- package/dist/types/drizzle/index.d.ts.map +1 -1
- package/dist/types/drizzle/json.d.ts.map +1 -1
- package/dist/types/drizzle/kit/index.d.ts.map +1 -1
- package/dist/types/drizzle/onchain.d.ts +1 -1
- package/dist/types/drizzle/onchain.d.ts.map +1 -1
- package/dist/types/drizzle/text.d.ts +1 -1
- package/dist/types/drizzle/text.d.ts.map +1 -1
- package/dist/types/graphql/index.d.ts +2 -2
- package/dist/types/graphql/index.d.ts.map +1 -1
- package/dist/types/graphql/middleware.d.ts +3 -3
- package/dist/types/graphql/middleware.d.ts.map +1 -1
- package/dist/types/index.d.ts +11 -11
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/indexing/addStackTrace.d.ts.map +1 -1
- package/dist/types/indexing/client.d.ts +2 -3
- package/dist/types/indexing/client.d.ts.map +1 -1
- package/dist/types/indexing/index.d.ts +2 -2
- package/dist/types/indexing/index.d.ts.map +1 -1
- package/dist/types/indexing/profile.d.ts.map +1 -1
- package/dist/types/indexing-store/cache.d.ts +2 -2
- package/dist/types/indexing-store/cache.d.ts.map +1 -1
- package/dist/types/indexing-store/index.d.ts +3 -4
- package/dist/types/indexing-store/index.d.ts.map +1 -1
- package/dist/types/indexing-store/profile.d.ts +1 -1
- package/dist/types/indexing-store/profile.d.ts.map +1 -1
- package/dist/types/indexing-store/utils.d.ts.map +1 -1
- package/dist/types/internal/common.d.ts +0 -2
- package/dist/types/internal/common.d.ts.map +1 -1
- package/dist/types/internal/logger.d.ts +1 -1
- package/dist/types/internal/logger.d.ts.map +1 -1
- package/dist/types/internal/metrics.d.ts +1 -1
- package/dist/types/internal/metrics.d.ts.map +1 -1
- package/dist/types/internal/options.d.ts +1 -7
- package/dist/types/internal/options.d.ts.map +1 -1
- package/dist/types/internal/types.d.ts +4 -4
- package/dist/types/internal/types.d.ts.map +1 -1
- package/dist/types/rpc/actions.d.ts.map +1 -1
- package/dist/types/rpc/http.d.ts +1 -1
- package/dist/types/rpc/http.d.ts.map +1 -1
- package/dist/types/rpc/index.d.ts +2 -2
- package/dist/types/rpc/index.d.ts.map +1 -1
- package/dist/types/runtime/events.d.ts +1 -1
- package/dist/types/runtime/events.d.ts.map +1 -1
- package/dist/types/runtime/filter.d.ts +1 -1
- package/dist/types/runtime/filter.d.ts.map +1 -1
- package/dist/types/runtime/fragments.d.ts +1 -1
- package/dist/types/runtime/fragments.d.ts.map +1 -1
- package/dist/types/runtime/historical.d.ts.map +1 -1
- package/dist/types/runtime/index.d.ts +2 -3
- package/dist/types/runtime/index.d.ts.map +1 -1
- package/dist/types/runtime/isolated.d.ts.map +1 -1
- package/dist/types/runtime/multichain.d.ts.map +1 -1
- package/dist/types/runtime/omnichain.d.ts.map +1 -1
- package/dist/types/runtime/realtime.d.ts.map +1 -1
- package/dist/types/server/error.d.ts +1 -1
- package/dist/types/server/error.d.ts.map +1 -1
- package/dist/types/server/index.d.ts +1 -1
- package/dist/types/server/index.d.ts.map +1 -1
- package/dist/types/sync-historical/index.d.ts +1 -1
- package/dist/types/sync-historical/index.d.ts.map +1 -1
- package/dist/types/sync-realtime/bloom.d.ts +1 -1
- package/dist/types/sync-realtime/bloom.d.ts.map +1 -1
- package/dist/types/sync-realtime/index.d.ts +1 -1
- package/dist/types/sync-realtime/index.d.ts.map +1 -1
- package/dist/types/sync-store/encode.d.ts.map +1 -1
- package/dist/types/sync-store/index.d.ts +2 -2
- package/dist/types/sync-store/index.d.ts.map +1 -1
- package/dist/types/sync-store/migrations.d.ts +1 -1
- package/dist/types/sync-store/migrations.d.ts.map +1 -1
- package/dist/types/sync-store/schema.d.ts +2 -2
- package/dist/types/sync-store/schema.d.ts.map +1 -1
- package/dist/types/types/db.d.ts +3 -3
- package/dist/types/types/db.d.ts.map +1 -1
- package/dist/types/ui/app.d.ts +3 -3
- package/dist/types/ui/app.d.ts.map +1 -1
- package/dist/types/ui/patch.d.ts.map +1 -1
- package/dist/types/utils/abi.d.ts.map +1 -1
- package/dist/types/utils/chains.d.ts +2 -0
- package/dist/types/utils/chains.d.ts.map +1 -1
- package/dist/types/utils/checkpoint.d.ts.map +1 -1
- package/dist/types/utils/chunk.d.ts.map +1 -1
- package/dist/types/utils/copy.d.ts.map +1 -1
- package/dist/types/utils/decodeAbiParameters.d.ts.map +1 -1
- package/dist/types/utils/estimate.d.ts.map +1 -1
- package/dist/types/utils/partition.d.ts.map +1 -1
- package/dist/types/utils/pg.d.ts +1 -1
- package/dist/types/utils/pg.d.ts.map +1 -1
- package/dist/types/utils/pglite.d.ts +1 -1
- package/dist/types/utils/pglite.d.ts.map +1 -1
- package/dist/types/utils/port.d.ts.map +1 -1
- package/dist/types/utils/promiseWithResolvers.d.ts.map +1 -1
- package/dist/types/utils/queue.d.ts.map +1 -1
- package/dist/types/utils/result.d.ts.map +1 -1
- package/dist/types/utils/zipper.d.ts +2 -2
- package/dist/types/utils/zipper.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/bin/commands/codegen.ts +3 -13
- package/src/bin/commands/createViews.ts +3 -6
- package/src/bin/commands/dev.ts +5 -25
- package/src/bin/commands/list.ts +6 -9
- package/src/bin/commands/prune.ts +6 -9
- package/src/bin/commands/serve.ts +5 -21
- package/src/bin/commands/start.ts +5 -22
- package/src/bin/isolatedController.ts +1 -1
- package/src/bin/isolatedWorker.ts +0 -6
- package/src/bin/ponder.ts +1 -1
- package/src/bin/utils/exit.ts +1 -9
- package/src/build/config.ts +22 -16
- package/src/build/factory.ts +2 -2
- package/src/build/index.ts +29 -19
- package/src/build/plugin.ts +1 -1
- package/src/build/pre.ts +2 -2
- package/src/build/schema.ts +20 -14
- package/src/build/stacktrace.ts +5 -5
- package/src/client/index.ts +23 -21
- package/src/config/address.ts +1 -1
- package/src/config/index.ts +1 -1
- package/src/database/actions.ts +18 -20
- package/src/database/index.ts +17 -17
- package/src/database/queryBuilder.ts +12 -14
- package/src/drizzle/bigint.ts +4 -4
- package/src/drizzle/bytes.ts +4 -4
- package/src/drizzle/hex.ts +4 -4
- package/src/drizzle/index.ts +1 -1
- package/src/drizzle/json.ts +6 -6
- package/src/drizzle/kit/index.ts +30 -44
- package/src/drizzle/onchain.ts +27 -23
- package/src/drizzle/text.ts +2 -2
- package/src/graphql/index.ts +16 -14
- package/src/graphql/json.ts +1 -1
- package/src/graphql/middleware.ts +6 -4
- package/src/index.ts +75 -83
- package/src/indexing/addStackTrace.ts +3 -3
- package/src/indexing/client.ts +40 -37
- package/src/indexing/index.ts +8 -6
- package/src/indexing/profile.ts +3 -3
- package/src/indexing-store/cache.ts +15 -15
- package/src/indexing-store/index.ts +26 -25
- package/src/indexing-store/profile.ts +4 -4
- package/src/indexing-store/utils.ts +11 -11
- package/src/internal/common.ts +0 -2
- package/src/internal/logger.ts +12 -9
- package/src/internal/metrics.ts +4 -4
- package/src/internal/options.ts +2 -10
- package/src/internal/types.ts +13 -13
- package/src/rpc/actions.ts +16 -17
- package/src/rpc/http.ts +9 -5
- package/src/rpc/index.ts +20 -16
- package/src/runtime/events.ts +22 -21
- package/src/runtime/filter.ts +9 -3
- package/src/runtime/fragments.ts +1 -1
- package/src/runtime/historical.ts +9 -6
- package/src/runtime/index.ts +6 -4
- package/src/runtime/isolated.ts +26 -20
- package/src/runtime/multichain.ts +24 -18
- package/src/runtime/omnichain.ts +24 -18
- package/src/runtime/realtime.ts +9 -11
- package/src/server/error.ts +2 -2
- package/src/server/index.ts +5 -5
- package/src/sync-historical/index.ts +13 -13
- package/src/sync-realtime/bloom.ts +1 -1
- package/src/sync-realtime/index.ts +7 -7
- package/src/sync-store/encode.ts +2 -2
- package/src/sync-store/index.ts +33 -58
- package/src/sync-store/migrations.ts +1 -1
- package/src/sync-store/schema.ts +1 -1
- package/src/types/db.ts +3 -3
- package/src/types.d.ts +2 -0
- package/src/ui/app.ts +1 -1
- package/src/ui/patch.ts +2 -3
- package/src/utils/abi.ts +7 -4
- package/src/utils/checkpoint.ts +1 -1
- package/src/utils/copy.ts +1 -1
- package/src/utils/decodeAbiParameters.ts +5 -7
- package/src/utils/pg.ts +1 -1
- package/src/utils/pglite.ts +5 -6
- package/src/utils/queue.ts +4 -4
- package/src/utils/result.ts +1 -1
- package/src/utils/sql-parse.ts +6 -6
- package/dist/esm/internal/telemetry.js +0 -200
- package/dist/esm/internal/telemetry.js.map +0 -1
- package/dist/types/internal/telemetry.d.ts +0 -43
- package/dist/types/internal/telemetry.d.ts.map +0 -1
- package/src/internal/telemetry.ts +0 -303
package/src/sync-store/index.ts
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
+
import {
|
|
3
|
+
and,
|
|
4
|
+
asc,
|
|
5
|
+
desc,
|
|
6
|
+
eq,
|
|
7
|
+
gte,
|
|
8
|
+
inArray,
|
|
9
|
+
isNull,
|
|
10
|
+
lt,
|
|
11
|
+
lte,
|
|
12
|
+
or,
|
|
13
|
+
type SQL,
|
|
14
|
+
sql,
|
|
15
|
+
} from "drizzle-orm";
|
|
16
|
+
import {
|
|
17
|
+
type PgColumn,
|
|
18
|
+
type PgSelectBase,
|
|
19
|
+
unionAll,
|
|
20
|
+
} from "drizzle-orm/pg-core";
|
|
21
|
+
import { type Address, hexToNumber, isHex } from "viem";
|
|
2
22
|
import type { QB } from "@/database/queryBuilder.js";
|
|
3
23
|
import { extractBlockNumberParam } from "@/indexing/client.js";
|
|
4
24
|
import type { Common } from "@/internal/common.js";
|
|
@@ -49,30 +69,9 @@ import type {
|
|
|
49
69
|
IntervalWithFilter,
|
|
50
70
|
} from "@/runtime/index.js";
|
|
51
71
|
import type { Interval } from "@/utils/interval.js";
|
|
52
|
-
import { intervalUnion } from "@/utils/interval.js";
|
|
53
72
|
import { toLowerCase } from "@/utils/lowercase.js";
|
|
54
73
|
import { orderObject } from "@/utils/order.js";
|
|
55
74
|
import { startClock } from "@/utils/timer.js";
|
|
56
|
-
import {
|
|
57
|
-
type SQL,
|
|
58
|
-
and,
|
|
59
|
-
asc,
|
|
60
|
-
desc,
|
|
61
|
-
eq,
|
|
62
|
-
gte,
|
|
63
|
-
inArray,
|
|
64
|
-
isNull,
|
|
65
|
-
lt,
|
|
66
|
-
lte,
|
|
67
|
-
or,
|
|
68
|
-
sql,
|
|
69
|
-
} from "drizzle-orm";
|
|
70
|
-
import {
|
|
71
|
-
type PgColumn,
|
|
72
|
-
type PgSelectBase,
|
|
73
|
-
unionAll,
|
|
74
|
-
} from "drizzle-orm/pg-core";
|
|
75
|
-
import { type Address, hexToNumber, isHex } from "viem";
|
|
76
75
|
import {
|
|
77
76
|
encodeBlock,
|
|
78
77
|
encodeLog,
|
|
@@ -203,7 +202,10 @@ export type SyncStore = {
|
|
|
203
202
|
export const createSyncStore = ({
|
|
204
203
|
common,
|
|
205
204
|
qb,
|
|
206
|
-
}: {
|
|
205
|
+
}: {
|
|
206
|
+
common: Common;
|
|
207
|
+
qb: QB<typeof PONDER_SYNC>;
|
|
208
|
+
}): SyncStore => {
|
|
207
209
|
const syncStore = {
|
|
208
210
|
insertIntervals: async (
|
|
209
211
|
{ intervals, factoryIntervals, chainId },
|
|
@@ -420,31 +422,6 @@ export const createSyncStore = ({
|
|
|
420
422
|
|
|
421
423
|
result.get(factory)!.push({ fragment, intervals });
|
|
422
424
|
}
|
|
423
|
-
|
|
424
|
-
// Note: This is a stand-in for a migration to the `intervals` table
|
|
425
|
-
// required in `v0.15`. It is an invariant that filter with factories
|
|
426
|
-
// have a row in the intervals table for both the filter and the factory.
|
|
427
|
-
// If this invariant is broken, it must be because of the migration from
|
|
428
|
-
// `v0.14` to `v0.15`. In this case, we can assume that the factory interval
|
|
429
|
-
// is the same as the filter interval.
|
|
430
|
-
|
|
431
|
-
const filterIntervals = intervalUnion(
|
|
432
|
-
result.get(filter)!.flatMap(({ intervals }) => intervals),
|
|
433
|
-
);
|
|
434
|
-
const factoryIntervals = intervalUnion(
|
|
435
|
-
result.get(factory)!.flatMap(({ intervals }) => intervals),
|
|
436
|
-
);
|
|
437
|
-
|
|
438
|
-
if (
|
|
439
|
-
filterIntervals.length > 0 &&
|
|
440
|
-
factoryIntervals.length === 0 &&
|
|
441
|
-
filter.fromBlock === factory.fromBlock &&
|
|
442
|
-
filter.toBlock === factory.toBlock
|
|
443
|
-
) {
|
|
444
|
-
for (const factoryInterval of result.get(factory)!) {
|
|
445
|
-
factoryInterval.intervals = filterIntervals;
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
425
|
}
|
|
449
426
|
}
|
|
450
427
|
|
|
@@ -835,7 +812,7 @@ export const createSyncStore = ({
|
|
|
835
812
|
};
|
|
836
813
|
|
|
837
814
|
for (const column of unionFilterIncludeBlock(filters)) {
|
|
838
|
-
// @ts-
|
|
815
|
+
// @ts-expect-error
|
|
839
816
|
blockSelect[column] = PONDER_SYNC.blocks[column];
|
|
840
817
|
}
|
|
841
818
|
|
|
@@ -862,7 +839,7 @@ export const createSyncStore = ({
|
|
|
862
839
|
};
|
|
863
840
|
|
|
864
841
|
for (const column of unionFilterIncludeTransaction(filters)) {
|
|
865
|
-
// @ts-
|
|
842
|
+
// @ts-expect-error
|
|
866
843
|
transactionSelect[column] = PONDER_SYNC.transactions[column];
|
|
867
844
|
}
|
|
868
845
|
|
|
@@ -891,7 +868,7 @@ export const createSyncStore = ({
|
|
|
891
868
|
};
|
|
892
869
|
|
|
893
870
|
for (const column of unionFilterIncludeTransactionReceipt(filters)) {
|
|
894
|
-
// @ts-
|
|
871
|
+
// @ts-expect-error
|
|
895
872
|
transactionReceiptSelect[column] =
|
|
896
873
|
PONDER_SYNC.transactionReceipts[column];
|
|
897
874
|
}
|
|
@@ -926,7 +903,7 @@ export const createSyncStore = ({
|
|
|
926
903
|
};
|
|
927
904
|
|
|
928
905
|
for (const column of unionFilterIncludeTrace(filters)) {
|
|
929
|
-
// @ts-
|
|
906
|
+
// @ts-expect-error
|
|
930
907
|
traceSelect[column] = PONDER_SYNC.traces[column];
|
|
931
908
|
}
|
|
932
909
|
|
|
@@ -1213,19 +1190,19 @@ export const createSyncStore = ({
|
|
|
1213
1190
|
internalLog.address = toLowerCase(log.address);
|
|
1214
1191
|
internalLog.removed = false;
|
|
1215
1192
|
internalLog.topics = [
|
|
1216
|
-
// @ts-
|
|
1193
|
+
// @ts-expect-error
|
|
1217
1194
|
log.topic0,
|
|
1218
1195
|
log.topic1,
|
|
1219
1196
|
log.topic2,
|
|
1220
1197
|
log.topic3,
|
|
1221
1198
|
];
|
|
1222
|
-
// @ts-
|
|
1199
|
+
// @ts-expect-error
|
|
1223
1200
|
log.topic0 = undefined;
|
|
1224
|
-
// @ts-
|
|
1201
|
+
// @ts-expect-error
|
|
1225
1202
|
log.topic1 = undefined;
|
|
1226
|
-
// @ts-
|
|
1203
|
+
// @ts-expect-error
|
|
1227
1204
|
log.topic2 = undefined;
|
|
1228
|
-
// @ts-
|
|
1205
|
+
// @ts-expect-error
|
|
1229
1206
|
log.topic3 = undefined;
|
|
1230
1207
|
}
|
|
1231
1208
|
|
|
@@ -1499,9 +1476,7 @@ const addressFilter = (
|
|
|
1499
1476
|
): SQL => {
|
|
1500
1477
|
// `factory` filtering is handled in-memory
|
|
1501
1478
|
if (isAddressFactory(address)) return sql`true`;
|
|
1502
|
-
// @ts-ignore
|
|
1503
1479
|
if (Array.isArray(address)) return inArray(column, address);
|
|
1504
|
-
// @ts-ignore
|
|
1505
1480
|
if (typeof address === "string") return eq(column, address);
|
|
1506
1481
|
return sql`true`;
|
|
1507
1482
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type Logger, createNoopLogger } from "@/internal/logger.js";
|
|
2
1
|
import type { Kysely, Migration, MigrationProvider } from "kysely";
|
|
3
2
|
import { sql } from "kysely";
|
|
4
3
|
import { maxUint256 } from "viem";
|
|
4
|
+
import { createNoopLogger, type Logger } from "@/internal/logger.js";
|
|
5
5
|
|
|
6
6
|
let logger = createNoopLogger();
|
|
7
7
|
|
package/src/sync-store/schema.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Factory, FragmentId } from "@/internal/types.js";
|
|
2
1
|
import {
|
|
3
2
|
customType,
|
|
4
3
|
index,
|
|
@@ -7,6 +6,7 @@ import {
|
|
|
7
6
|
unique,
|
|
8
7
|
} from "drizzle-orm/pg-core";
|
|
9
8
|
import type { Address, Hash, Hex } from "viem";
|
|
9
|
+
import type { Factory, FragmentId } from "@/internal/types.js";
|
|
10
10
|
|
|
11
11
|
const nummultirange = customType<{ data: string }>({
|
|
12
12
|
dataType() {
|
package/src/types/db.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { onchain } from "@/drizzle/onchain.js";
|
|
2
|
-
import type { OnchainTable, PrimaryKeyBuilder } from "@/drizzle/onchain.js";
|
|
3
|
-
import type { Schema } from "@/internal/types.js";
|
|
4
1
|
import type {
|
|
5
2
|
Column,
|
|
6
3
|
GetColumnData,
|
|
@@ -11,6 +8,9 @@ import type {
|
|
|
11
8
|
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
|
|
12
9
|
import type { PgTableExtraConfig, TableConfig } from "drizzle-orm/pg-core";
|
|
13
10
|
import type { PgliteDatabase } from "drizzle-orm/pglite";
|
|
11
|
+
import type { OnchainTable, PrimaryKeyBuilder } from "@/drizzle/onchain.js";
|
|
12
|
+
import { onchain } from "@/drizzle/onchain.js";
|
|
13
|
+
import type { Schema } from "@/internal/types.js";
|
|
14
14
|
import type { PonderTypeError, Prettify } from "./utils.js";
|
|
15
15
|
|
|
16
16
|
export type Drizzle<TSchema extends Schema = { [name: string]: never }> =
|
package/src/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
declare module "ponder:registry" {
|
|
2
2
|
import type { Virtual } from "ponder";
|
|
3
|
+
|
|
3
4
|
type config = typeof import("ponder:internal").config;
|
|
4
5
|
type schema = typeof import("ponder:internal").schema;
|
|
5
6
|
|
|
@@ -21,6 +22,7 @@ declare module "ponder:registry" {
|
|
|
21
22
|
|
|
22
23
|
declare module "ponder:schema" {
|
|
23
24
|
const schema: typeof import("ponder:internal").schema;
|
|
25
|
+
|
|
24
26
|
export { schema as default };
|
|
25
27
|
}
|
|
26
28
|
|
package/src/ui/app.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
1
2
|
import type {
|
|
2
3
|
getAppProgress,
|
|
3
4
|
getIndexingProgress,
|
|
4
5
|
getSyncProgress,
|
|
5
6
|
} from "@/internal/metrics.js";
|
|
6
7
|
import { formatEta, formatPercentage } from "@/utils/format.js";
|
|
7
|
-
import pc from "picocolors";
|
|
8
8
|
|
|
9
9
|
export type UiState = {
|
|
10
10
|
port: number;
|
package/src/ui/patch.ts
CHANGED
|
@@ -61,7 +61,7 @@ export function patchWriteStreams({ getLines }: { getLines: () => string[] }) {
|
|
|
61
61
|
this: NodeJS.WriteStream,
|
|
62
62
|
buffer: string | Uint8Array,
|
|
63
63
|
encoding?: BufferEncoding,
|
|
64
|
-
cb?: (err?: Error) => void,
|
|
64
|
+
cb?: (err?: Error | null) => void,
|
|
65
65
|
) {
|
|
66
66
|
const originalWrite =
|
|
67
67
|
this === process.stderr ? originalStderrWrite : originalStdoutWrite;
|
|
@@ -123,8 +123,7 @@ export function patchWriteStreams({ getLines }: { getLines: () => string[] }) {
|
|
|
123
123
|
const makeConsoleWriter =
|
|
124
124
|
(stream: NodeJS.WriteStream, _: typeof originalStdoutWrite) =>
|
|
125
125
|
(...args: unknown[]) => {
|
|
126
|
-
|
|
127
|
-
const formatted = util.format(...args) + "\n";
|
|
126
|
+
const formatted = `${util.format(...args)}\n`;
|
|
128
127
|
|
|
129
128
|
// handleOutput so TUI is cleared + re-rendered
|
|
130
129
|
handleOutput.call(stream, formatted, "utf8", undefined);
|
package/src/utils/abi.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { getDuplicateElements } from "@/utils/duplicates.js";
|
|
2
1
|
import {
|
|
3
2
|
type Abi,
|
|
4
3
|
type AbiEvent,
|
|
@@ -6,12 +5,13 @@ import {
|
|
|
6
5
|
formatAbiItem,
|
|
7
6
|
} from "abitype";
|
|
8
7
|
import {
|
|
9
|
-
type GetEventArgs,
|
|
10
|
-
type Hex,
|
|
11
8
|
encodeEventTopics,
|
|
9
|
+
type GetEventArgs,
|
|
12
10
|
getAbiItem,
|
|
11
|
+
type Hex,
|
|
13
12
|
parseAbiItem,
|
|
14
13
|
} from "viem";
|
|
14
|
+
import { getDuplicateElements } from "@/utils/duplicates.js";
|
|
15
15
|
import type { Config } from "../config/index.js";
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -27,7 +27,10 @@ declare global {
|
|
|
27
27
|
export const toSafeName = ({
|
|
28
28
|
abi,
|
|
29
29
|
item,
|
|
30
|
-
}: {
|
|
30
|
+
}: {
|
|
31
|
+
abi: Abi;
|
|
32
|
+
item: AbiEvent | AbiFunction;
|
|
33
|
+
}) => {
|
|
31
34
|
if (item.type === "event") {
|
|
32
35
|
const abiEvents = abi
|
|
33
36
|
.filter((item): item is AbiEvent => item.type === "event")
|
package/src/utils/checkpoint.ts
CHANGED
package/src/utils/copy.ts
CHANGED
|
@@ -11,7 +11,7 @@ export const COPY_ON_WRITE = Symbol.for("ponder:copyOnWrite");
|
|
|
11
11
|
export const copyOnWrite = <T extends object>(obj: T): T => {
|
|
12
12
|
let copiedObject: T | undefined;
|
|
13
13
|
|
|
14
|
-
// @ts-
|
|
14
|
+
// @ts-expect-error
|
|
15
15
|
obj[util.inspect.custom] = () => {
|
|
16
16
|
return copiedObject ?? obj;
|
|
17
17
|
};
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
|
+
AbiDecodingDataSizeTooSmallError,
|
|
3
|
+
AbiDecodingZeroDataError,
|
|
2
4
|
type AbiParameter,
|
|
3
5
|
type AbiParameterToPrimitiveType,
|
|
6
|
+
checksumAddress,
|
|
4
7
|
type DecodeAbiParametersReturnType,
|
|
5
8
|
type Hex,
|
|
6
|
-
InvalidHexBooleanError,
|
|
7
|
-
} from "viem";
|
|
8
|
-
import {
|
|
9
|
-
AbiDecodingDataSizeTooSmallError,
|
|
10
|
-
AbiDecodingZeroDataError,
|
|
11
|
-
InvalidAbiDecodingTypeError,
|
|
12
|
-
checksumAddress,
|
|
13
9
|
hexToBigInt,
|
|
14
10
|
hexToNumber,
|
|
15
11
|
hexToString,
|
|
12
|
+
InvalidAbiDecodingTypeError,
|
|
13
|
+
InvalidHexBooleanError,
|
|
16
14
|
} from "viem";
|
|
17
15
|
|
|
18
16
|
const TRUE_BOOL =
|
package/src/utils/pg.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Logger } from "@/internal/logger.js";
|
|
2
1
|
import pg, { type PoolConfig } from "pg";
|
|
3
2
|
import parse from "pg-connection-string";
|
|
3
|
+
import type { Logger } from "@/internal/logger.js";
|
|
4
4
|
|
|
5
5
|
// The default parser for numeric[] (1231) seems to parse values as Number
|
|
6
6
|
// or perhaps through JSON.parse(). Use the int8[] (1016) parser instead,
|
package/src/utils/pglite.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { mkdirSync } from "node:fs";
|
|
2
|
-
import type { Prettify } from "@/types/utils.js";
|
|
3
2
|
import { type PGliteOptions as Options, PGlite } from "@electric-sql/pglite";
|
|
4
3
|
import {
|
|
5
4
|
CompiledQuery,
|
|
@@ -12,6 +11,7 @@ import {
|
|
|
12
11
|
type QueryResult,
|
|
13
12
|
type TransactionSettings,
|
|
14
13
|
} from "kysely";
|
|
14
|
+
import type { Prettify } from "@/types/utils.js";
|
|
15
15
|
|
|
16
16
|
export type PGliteOptions = Prettify<Options & { dataDir: string }>;
|
|
17
17
|
|
|
@@ -19,12 +19,11 @@ export function createPglite(options: PGliteOptions) {
|
|
|
19
19
|
// PGlite uses the memory FS by default, and Windows doesn't like the
|
|
20
20
|
// "memory://" path, so it's better to pass `undefined` here.
|
|
21
21
|
if (options.dataDir === "memory://") {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
} else {
|
|
25
|
-
mkdirSync(options.dataDir, { recursive: true });
|
|
22
|
+
const { dataDir: _, ...pgliteOptions } = options;
|
|
23
|
+
return new PGlite(pgliteOptions);
|
|
26
24
|
}
|
|
27
25
|
|
|
26
|
+
mkdirSync(options.dataDir, { recursive: true });
|
|
28
27
|
return new PGlite(options);
|
|
29
28
|
}
|
|
30
29
|
|
|
@@ -90,7 +89,7 @@ class PGliteConnection implements DatabaseConnection {
|
|
|
90
89
|
]);
|
|
91
90
|
}
|
|
92
91
|
|
|
93
|
-
// biome-ignore lint/correctness/useYield:
|
|
92
|
+
// biome-ignore lint/correctness/useYield: PGlite never streams, but the interface requires this method.
|
|
94
93
|
async *streamQuery(): AsyncGenerator<never, void, unknown> {
|
|
95
94
|
throw new Error("PGlite does not support streaming.");
|
|
96
95
|
}
|
package/src/utils/queue.ts
CHANGED
|
@@ -83,7 +83,7 @@ export const createQueue = <returnType, taskType = void>({
|
|
|
83
83
|
CreateQueueParameters<unknown, unknown>,
|
|
84
84
|
"frequency" | "concurrency"
|
|
85
85
|
> = _parameters;
|
|
86
|
-
let queue
|
|
86
|
+
let queue: InnerQueue<returnType, taskType>[number][] = [];
|
|
87
87
|
let pending = 0;
|
|
88
88
|
let timestamp = 0;
|
|
89
89
|
let requests = 0;
|
|
@@ -93,10 +93,10 @@ export const createQueue = <returnType, taskType = void>({
|
|
|
93
93
|
|
|
94
94
|
let emptyPromiseWithResolvers:
|
|
95
95
|
| (PromiseWithResolvers<void> & { completed: boolean })
|
|
96
|
-
| undefined
|
|
96
|
+
| undefined;
|
|
97
97
|
let idlePromiseWithResolvers:
|
|
98
98
|
| (PromiseWithResolvers<void> & { completed: boolean })
|
|
99
|
-
| undefined
|
|
99
|
+
| undefined;
|
|
100
100
|
|
|
101
101
|
const next = () => {
|
|
102
102
|
if (!isStarted) return;
|
|
@@ -191,7 +191,7 @@ export const createQueue = <returnType, taskType = void>({
|
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
-
queue =
|
|
194
|
+
queue = [] as InnerQueue<returnType, taskType>[number][];
|
|
195
195
|
clearTimeout(timer);
|
|
196
196
|
timer = undefined;
|
|
197
197
|
},
|
package/src/utils/result.ts
CHANGED
package/src/utils/sql-parse.ts
CHANGED
|
@@ -14,7 +14,7 @@ const ALLOW_CACHE = new Map<string, boolean>();
|
|
|
14
14
|
const RELATIONS_CACHE = new Map<string, Set<string>>();
|
|
15
15
|
|
|
16
16
|
export const parseSQLQuery = async (sql: string): Promise<Node> => {
|
|
17
|
-
// @ts-
|
|
17
|
+
// @ts-expect-error
|
|
18
18
|
const Parser = await import(/* webpackIgnore: true */ "pg-query-emscripten");
|
|
19
19
|
|
|
20
20
|
if (sql.length > 5_000) {
|
|
@@ -85,11 +85,11 @@ export const validateAllowableSQLQuery = async (sql: string) => {
|
|
|
85
85
|
throw new Error(`${getNodeType(node)} not supported`);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
// @ts-
|
|
88
|
+
// @ts-expect-error
|
|
89
89
|
ALLOW_LIST.get(getNodeType(node))!.validate?.(node[getNodeType(node)]);
|
|
90
90
|
|
|
91
91
|
for (const child of ALLOW_LIST.get(getNodeType(node))!.children(
|
|
92
|
-
// @ts-
|
|
92
|
+
// @ts-expect-error
|
|
93
93
|
node[getNodeType(node)],
|
|
94
94
|
)) {
|
|
95
95
|
validate(child);
|
|
@@ -129,7 +129,7 @@ export const isReadonlySQLQuery = async (sql: string): Promise<boolean> => {
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
for (const child of ALLOW_LIST.get(getNodeType(node))!.children(
|
|
132
|
-
// @ts-
|
|
132
|
+
// @ts-expect-error
|
|
133
133
|
node[getNodeType(node)],
|
|
134
134
|
)) {
|
|
135
135
|
validate(child);
|
|
@@ -186,7 +186,7 @@ export const getSQLQueryRelations = async (
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
for (const child of FIND_LIST.get(getNodeType(node))!.children(
|
|
189
|
-
// @ts-
|
|
189
|
+
// @ts-expect-error
|
|
190
190
|
node[getNodeType(node)],
|
|
191
191
|
)) {
|
|
192
192
|
find(child);
|
|
@@ -700,7 +700,7 @@ const FUNC_CALL_VALIDATOR: ValidatorNode<"FuncCall"> = {
|
|
|
700
700
|
node.funcname?.every(
|
|
701
701
|
(name) =>
|
|
702
702
|
getNodeType(name) === "String" &&
|
|
703
|
-
// @ts-
|
|
703
|
+
// @ts-expect-error
|
|
704
704
|
ALLOWED_FUNCTIONS.has(name.String.sval),
|
|
705
705
|
)
|
|
706
706
|
) {
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import { exec } from "node:child_process";
|
|
2
|
-
import { createHash, randomBytes } from "node:crypto";
|
|
3
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
4
|
-
import os from "node:os";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
import { promisify } from "node:util";
|
|
7
|
-
import { createQueue } from '../utils/queue.js';
|
|
8
|
-
import { startClock } from '../utils/timer.js';
|
|
9
|
-
import Conf from "conf";
|
|
10
|
-
import { detect, getNpmVersion } from "detect-package-manager";
|
|
11
|
-
import { ShutdownError } from "./errors.js";
|
|
12
|
-
const HEARTBEAT_INTERVAL_MS = 60000;
|
|
13
|
-
export function createTelemetry({ options, logger, shutdown, }) {
|
|
14
|
-
if (options.telemetryDisabled) {
|
|
15
|
-
return {
|
|
16
|
-
record: (_event) => { },
|
|
17
|
-
flush: async () => { },
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
const conf = new Conf({
|
|
21
|
-
projectName: "ponder",
|
|
22
|
-
cwd: options.telemetryConfigDir,
|
|
23
|
-
});
|
|
24
|
-
if (conf.get("notifiedAt") === undefined) {
|
|
25
|
-
conf.set("notifiedAt", Date.now().toString());
|
|
26
|
-
logger.info({
|
|
27
|
-
msg: "Ponder collects anonymous telemetry data to identify issues and prioritize features. See https://ponder.sh/docs/advanced/telemetry for more information.",
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
const sessionId = randomBytes(8).toString("hex");
|
|
31
|
-
let anonymousId = conf.get("anonymousId");
|
|
32
|
-
if (anonymousId === undefined) {
|
|
33
|
-
anonymousId = randomBytes(8).toString("hex");
|
|
34
|
-
conf.set("anonymousId", anonymousId);
|
|
35
|
-
}
|
|
36
|
-
// Before 0.4.3, the anonymous ID was 64 characters long. Truncate it to 16
|
|
37
|
-
// here to align with new ID lengths.
|
|
38
|
-
if (anonymousId.length > 16)
|
|
39
|
-
anonymousId = anonymousId.slice(0, 16);
|
|
40
|
-
let salt = conf.get("salt");
|
|
41
|
-
if (salt === undefined) {
|
|
42
|
-
salt = randomBytes(8).toString("hex");
|
|
43
|
-
conf.set("salt", salt);
|
|
44
|
-
}
|
|
45
|
-
// Prepend the value with a secret salt to ensure a credible one-way hash.
|
|
46
|
-
const oneWayHash = (value) => {
|
|
47
|
-
const hash = createHash("sha256");
|
|
48
|
-
hash.update(salt);
|
|
49
|
-
hash.update(value);
|
|
50
|
-
return hash.digest("hex").slice(0, 16);
|
|
51
|
-
};
|
|
52
|
-
const buildContext = async () => {
|
|
53
|
-
// Project ID is a one-way hash of the git remote URL OR the current working directory.
|
|
54
|
-
const gitRemoteUrl = await getGitRemoteUrl();
|
|
55
|
-
const projectIdRaw = gitRemoteUrl ?? process.cwd();
|
|
56
|
-
const projectId = oneWayHash(projectIdRaw);
|
|
57
|
-
const { packageManager, packageManagerVersion } = await getPackageManager();
|
|
58
|
-
// Attempt to find and read the users package.json file.
|
|
59
|
-
const packageJson = getPackageJson(options.rootDir);
|
|
60
|
-
const ponderVersion = packageJson?.dependencies?.ponder ?? "unknown";
|
|
61
|
-
const viemVersion = packageJson?.dependencies?.viem ?? "unknown";
|
|
62
|
-
// Make a guess as to whether the project is internal (within the monorepo) or not.
|
|
63
|
-
const isInternal = ponderVersion === "workspace:*";
|
|
64
|
-
const cpus = os.cpus();
|
|
65
|
-
return {
|
|
66
|
-
common: {
|
|
67
|
-
session_id: sessionId,
|
|
68
|
-
project_id: projectId,
|
|
69
|
-
is_internal: isInternal,
|
|
70
|
-
},
|
|
71
|
-
session: {
|
|
72
|
-
ponder_core_version: ponderVersion,
|
|
73
|
-
viem_version: viemVersion,
|
|
74
|
-
package_manager: packageManager,
|
|
75
|
-
package_manager_version: packageManagerVersion,
|
|
76
|
-
node_version: process.versions.node,
|
|
77
|
-
system_platform: os.platform(),
|
|
78
|
-
system_release: os.release(),
|
|
79
|
-
system_architecture: os.arch(),
|
|
80
|
-
cpu_count: cpus.length,
|
|
81
|
-
cpu_model: cpus.length > 0 ? cpus[0].model : "unknown",
|
|
82
|
-
cpu_speed: cpus.length > 0 ? cpus[0].speed : 0,
|
|
83
|
-
total_memory_bytes: os.totalmem(),
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
};
|
|
87
|
-
let context = undefined;
|
|
88
|
-
const contextPromise = buildContext();
|
|
89
|
-
const queue = createQueue({
|
|
90
|
-
initialStart: true,
|
|
91
|
-
concurrency: 10,
|
|
92
|
-
worker: async (event) => {
|
|
93
|
-
if (shutdown.isKilled)
|
|
94
|
-
return;
|
|
95
|
-
const endClock = startClock();
|
|
96
|
-
try {
|
|
97
|
-
if (context === undefined)
|
|
98
|
-
context = await contextPromise;
|
|
99
|
-
const properties = event.name === "lifecycle:session_start"
|
|
100
|
-
? { ...event.properties, ...context.common, ...context.session }
|
|
101
|
-
: { ...event.properties, ...context.common };
|
|
102
|
-
const body = JSON.stringify({
|
|
103
|
-
distinctId: anonymousId,
|
|
104
|
-
event: event.name,
|
|
105
|
-
properties,
|
|
106
|
-
});
|
|
107
|
-
await fetch(options.telemetryUrl, {
|
|
108
|
-
method: "POST",
|
|
109
|
-
headers: { "Content-Type": "application/json" },
|
|
110
|
-
body,
|
|
111
|
-
});
|
|
112
|
-
logger.trace({
|
|
113
|
-
msg: "Sent telemetry event",
|
|
114
|
-
event: event.name,
|
|
115
|
-
duration: endClock(),
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
catch (error_) {
|
|
119
|
-
const error = error_;
|
|
120
|
-
if (shutdown.isKilled) {
|
|
121
|
-
throw new ShutdownError();
|
|
122
|
-
}
|
|
123
|
-
logger.trace({
|
|
124
|
-
msg: "Failed to send telemetry event",
|
|
125
|
-
event: event.name,
|
|
126
|
-
duration: endClock(),
|
|
127
|
-
error,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
|
-
});
|
|
132
|
-
const record = (event) => {
|
|
133
|
-
queue.add(event);
|
|
134
|
-
};
|
|
135
|
-
const heartbeatInterval = setInterval(() => {
|
|
136
|
-
record({
|
|
137
|
-
name: "lifecycle:heartbeat_send",
|
|
138
|
-
properties: { duration_seconds: process.uptime() },
|
|
139
|
-
});
|
|
140
|
-
}, HEARTBEAT_INTERVAL_MS);
|
|
141
|
-
shutdown.add(() => {
|
|
142
|
-
clearInterval(heartbeatInterval);
|
|
143
|
-
});
|
|
144
|
-
// Note that this method is only used for testing.
|
|
145
|
-
const flush = async () => {
|
|
146
|
-
await queue.onIdle();
|
|
147
|
-
};
|
|
148
|
-
return { record, flush };
|
|
149
|
-
}
|
|
150
|
-
async function getPackageManager() {
|
|
151
|
-
let packageManager = "unknown";
|
|
152
|
-
let packageManagerVersion = "unknown";
|
|
153
|
-
try {
|
|
154
|
-
packageManager = await detect();
|
|
155
|
-
packageManagerVersion = await getNpmVersion(packageManager);
|
|
156
|
-
}
|
|
157
|
-
catch (e) { }
|
|
158
|
-
return { packageManager, packageManagerVersion };
|
|
159
|
-
}
|
|
160
|
-
const execa = promisify(exec);
|
|
161
|
-
async function getGitRemoteUrl() {
|
|
162
|
-
const result = await execa("git config --local --get remote.origin.url", {
|
|
163
|
-
timeout: 250,
|
|
164
|
-
windowsHide: true,
|
|
165
|
-
}).catch(() => undefined);
|
|
166
|
-
return result?.stdout.trim();
|
|
167
|
-
}
|
|
168
|
-
function getPackageJson(rootDir) {
|
|
169
|
-
try {
|
|
170
|
-
const rootPath = path.join(rootDir, "package.json");
|
|
171
|
-
const cwdPath = path.join(process.cwd(), "package.json");
|
|
172
|
-
const packageJsonPath = existsSync(rootPath)
|
|
173
|
-
? rootPath
|
|
174
|
-
: existsSync(cwdPath)
|
|
175
|
-
? cwdPath
|
|
176
|
-
: undefined;
|
|
177
|
-
if (packageJsonPath === undefined)
|
|
178
|
-
return undefined;
|
|
179
|
-
const packageJsonString = readFileSync(packageJsonPath, "utf8");
|
|
180
|
-
const packageJson = JSON.parse(packageJsonString);
|
|
181
|
-
return packageJson;
|
|
182
|
-
}
|
|
183
|
-
catch (e) {
|
|
184
|
-
return undefined;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
export function buildPayload({ preBuild, schemaBuild, indexingBuild, }) {
|
|
188
|
-
const table_count = schemaBuild ? Object.keys(schemaBuild.schema).length : 0;
|
|
189
|
-
const indexing_function_count = indexingBuild
|
|
190
|
-
? Object.values(indexingBuild.indexingFunctions).reduce((acc, f) => acc + Object.keys(f).length, 0)
|
|
191
|
-
: 0;
|
|
192
|
-
return {
|
|
193
|
-
database_kind: preBuild?.databaseConfig.kind,
|
|
194
|
-
contract_count: 0,
|
|
195
|
-
network_count: indexingBuild?.chains.length ?? 0,
|
|
196
|
-
table_count,
|
|
197
|
-
indexing_function_count,
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
//# sourceMappingURL=telemetry.js.map
|