@ponder/react 0.14.12 → 0.15.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/esm/checkpoint.js +37 -0
- package/dist/esm/checkpoint.js.map +1 -0
- package/dist/esm/hook.js +26 -16
- package/dist/esm/hook.js.map +1 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/utils.js +1 -1
- package/dist/esm/utils.js.map +1 -1
- package/dist/types/checkpoint.d.ts +10 -0
- package/dist/types/checkpoint.d.ts.map +1 -0
- package/dist/types/hook.d.ts +8 -1
- package/dist/types/hook.d.ts.map +1 -1
- package/dist/types/utils.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/checkpoint.ts +61 -0
- package/src/hook.ts +48 -29
- package/src/utils.ts +3 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// 10 digits for unix timestamp gets us to the year 2277.
|
|
2
|
+
const BLOCK_TIMESTAMP_DIGITS = 10;
|
|
3
|
+
// Chain IDs are uint256. As of writing the largest Chain ID on https://chainlist.org
|
|
4
|
+
// is 13 digits. 16 digits should be enough (JavaScript's max safe integer).
|
|
5
|
+
const CHAIN_ID_DIGITS = 16;
|
|
6
|
+
// Same logic as chain ID.
|
|
7
|
+
const BLOCK_NUMBER_DIGITS = 16;
|
|
8
|
+
// Same logic as chain ID.
|
|
9
|
+
const TRANSACTION_INDEX_DIGITS = 16;
|
|
10
|
+
// At time of writing, we only have 2 event types planned, so one digit (10 types) is enough.
|
|
11
|
+
const EVENT_TYPE_DIGITS = 1;
|
|
12
|
+
// This could contain log index, trace index, etc. 16 digits should be enough.
|
|
13
|
+
const EVENT_INDEX_DIGITS = 16;
|
|
14
|
+
export const decodeCheckpoint = (checkpoint) => {
|
|
15
|
+
let offset = 0;
|
|
16
|
+
const blockTimestamp = BigInt(checkpoint.slice(offset, offset + BLOCK_TIMESTAMP_DIGITS));
|
|
17
|
+
offset += BLOCK_TIMESTAMP_DIGITS;
|
|
18
|
+
const chainId = BigInt(checkpoint.slice(offset, offset + CHAIN_ID_DIGITS));
|
|
19
|
+
offset += CHAIN_ID_DIGITS;
|
|
20
|
+
const blockNumber = BigInt(checkpoint.slice(offset, offset + BLOCK_NUMBER_DIGITS));
|
|
21
|
+
offset += BLOCK_NUMBER_DIGITS;
|
|
22
|
+
const transactionIndex = BigInt(checkpoint.slice(offset, offset + TRANSACTION_INDEX_DIGITS));
|
|
23
|
+
offset += TRANSACTION_INDEX_DIGITS;
|
|
24
|
+
const eventType = +checkpoint.slice(offset, offset + EVENT_TYPE_DIGITS);
|
|
25
|
+
offset += EVENT_TYPE_DIGITS;
|
|
26
|
+
const eventIndex = BigInt(checkpoint.slice(offset, offset + EVENT_INDEX_DIGITS));
|
|
27
|
+
offset += EVENT_INDEX_DIGITS;
|
|
28
|
+
return {
|
|
29
|
+
blockTimestamp,
|
|
30
|
+
chainId,
|
|
31
|
+
blockNumber,
|
|
32
|
+
transactionIndex,
|
|
33
|
+
eventType,
|
|
34
|
+
eventIndex,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=checkpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/checkpoint.ts"],"names":[],"mappings":"AASA,yDAAyD;AACzD,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,qFAAqF;AACrF,4EAA4E;AAC5E,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,0BAA0B;AAC1B,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,0BAA0B;AAC1B,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,6FAA6F;AAC7F,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,8EAA8E;AAC9E,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAc,EAAE;IACjE,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,cAAc,GAAG,MAAM,CAC3B,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,CAAC,CAC1D,CAAC;IACF,MAAM,IAAI,sBAAsB,CAAC;IAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;IAC3E,MAAM,IAAI,eAAe,CAAC;IAE1B,MAAM,WAAW,GAAG,MAAM,CACxB,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC,CACvD,CAAC;IACF,MAAM,IAAI,mBAAmB,CAAC;IAE9B,MAAM,gBAAgB,GAAG,MAAM,CAC7B,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CAAC,CAC5D,CAAC;IACF,MAAM,IAAI,wBAAwB,CAAC;IAEnC,MAAM,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC,CAAC;IACxE,MAAM,IAAI,iBAAiB,CAAC;IAE5B,MAAM,UAAU,GAAG,MAAM,CACvB,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAAC,CACtD,CAAC;IACF,MAAM,IAAI,kBAAkB,CAAC;IAE7B,OAAO;QACL,cAAc;QACd,OAAO;QACP,WAAW;QACX,gBAAgB;QAChB,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/esm/hook.js
CHANGED
|
@@ -1,22 +1,31 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery, useQueryClient, } from "@tanstack/react-query";
|
|
3
3
|
import { useContext, useEffect, useMemo } from "react";
|
|
4
|
+
import { decodeCheckpoint } from "./checkpoint.js";
|
|
4
5
|
import { PonderContext } from "./context.js";
|
|
5
6
|
import { getPonderQueryOptions } from "./utils.js";
|
|
6
7
|
export function usePonderQuery(params) {
|
|
8
|
+
const live = params.live ?? true;
|
|
7
9
|
const queryClient = useQueryClient();
|
|
8
10
|
const client = usePonderClient();
|
|
9
11
|
// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
|
|
10
12
|
const queryOptions = useMemo(() => getPonderQueryOptions(client, params.queryFn), [params.queryFn]);
|
|
11
13
|
// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
|
|
12
14
|
useEffect(() => {
|
|
13
|
-
|
|
15
|
+
if (live === false)
|
|
16
|
+
return;
|
|
17
|
+
const { unsubscribe } = client.live(queryOptions.queryFn, (data) => {
|
|
18
|
+
queryClient.setQueryData(queryOptions.queryKey, data);
|
|
19
|
+
});
|
|
14
20
|
return unsubscribe;
|
|
15
|
-
}, queryOptions.queryKey);
|
|
21
|
+
}, [...queryOptions.queryKey, live]);
|
|
16
22
|
return useQuery({
|
|
17
23
|
...params,
|
|
18
24
|
queryKey: queryOptions.queryKey,
|
|
19
25
|
queryFn: queryOptions.queryFn,
|
|
26
|
+
staleTime: live
|
|
27
|
+
? (params.staleTime ?? Number.POSITIVE_INFINITY)
|
|
28
|
+
: params.staleTime,
|
|
20
29
|
});
|
|
21
30
|
}
|
|
22
31
|
export function usePonderClient() {
|
|
@@ -30,22 +39,23 @@ export function usePonderQueryOptions(queryFn) {
|
|
|
30
39
|
const client = usePonderClient();
|
|
31
40
|
return getPonderQueryOptions(client, queryFn);
|
|
32
41
|
}
|
|
33
|
-
const statusQueryKey = ["status"];
|
|
34
42
|
export function usePonderStatus(params) {
|
|
35
|
-
|
|
36
|
-
const client = useContext(PonderContext);
|
|
37
|
-
if (client === undefined) {
|
|
38
|
-
throw new Error("PonderProvider not found");
|
|
39
|
-
}
|
|
40
|
-
// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
const { unsubscribe } = client.live(() => Promise.resolve(), () => queryClient.invalidateQueries({ queryKey: statusQueryKey }));
|
|
43
|
-
return unsubscribe;
|
|
44
|
-
}, []);
|
|
45
|
-
return useQuery({
|
|
43
|
+
return usePonderQuery({
|
|
46
44
|
...params,
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
queryFn: (db) => db.execute("SELECT * FROM _ponder_checkpoint"),
|
|
46
|
+
select(checkpoints) {
|
|
47
|
+
const status = {};
|
|
48
|
+
for (const { chain_name, chain_id, latest_checkpoint, } of checkpoints.sort((a, b) => (a.chain_id > b.chain_id ? 1 : -1))) {
|
|
49
|
+
status[chain_name] = {
|
|
50
|
+
id: chain_id,
|
|
51
|
+
block: {
|
|
52
|
+
number: Number(decodeCheckpoint(latest_checkpoint).blockNumber),
|
|
53
|
+
timestamp: Number(decodeCheckpoint(latest_checkpoint).blockTimestamp),
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return status;
|
|
58
|
+
},
|
|
49
59
|
});
|
|
50
60
|
}
|
|
51
61
|
//# sourceMappingURL=hook.js.map
|
package/dist/esm/hook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/hook.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAKL,QAAQ,EACR,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,UAAU,cAAc,CAK5B,
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/hook.ts"],"names":[],"mappings":"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"}
|