ponder 0.11.21 → 0.11.22
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 +6 -0
- package/dist/esm/bin/commands/createViews.js +9 -20
- package/dist/esm/bin/commands/createViews.js.map +1 -1
- package/dist/esm/bin/commands/dev.js +1 -1
- package/dist/esm/bin/commands/dev.js.map +1 -1
- package/dist/esm/bin/commands/list.js +4 -7
- package/dist/esm/bin/commands/list.js.map +1 -1
- package/dist/esm/bin/commands/prune.js +9 -21
- package/dist/esm/bin/commands/prune.js.map +1 -1
- package/dist/esm/bin/commands/serve.js +1 -1
- package/dist/esm/bin/commands/serve.js.map +1 -1
- package/dist/esm/bin/commands/start.js +3 -3
- package/dist/esm/bin/commands/start.js.map +1 -1
- package/dist/esm/bin/utils/run.js +159 -180
- package/dist/esm/bin/utils/run.js.map +1 -1
- package/dist/esm/build/index.js +1 -48
- package/dist/esm/build/index.js.map +1 -1
- package/dist/esm/build/plugin.js +1 -1
- package/dist/esm/client/index.js +9 -13
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/database/index.js +429 -141
- package/dist/esm/database/index.js.map +1 -1
- package/dist/esm/drizzle/index.js.map +1 -1
- package/dist/esm/drizzle/kit/index.js.map +1 -1
- package/dist/esm/drizzle/onchain.js +1 -8
- package/dist/esm/drizzle/onchain.js.map +1 -1
- package/dist/esm/graphql/index.js +16 -19
- package/dist/esm/graphql/index.js.map +1 -1
- package/dist/esm/graphql/middleware.js +7 -3
- package/dist/esm/graphql/middleware.js.map +1 -1
- package/dist/esm/indexing-store/cache.js +32 -26
- package/dist/esm/indexing-store/cache.js.map +1 -1
- package/dist/esm/indexing-store/historical.js +32 -23
- package/dist/esm/indexing-store/historical.js.map +1 -1
- package/dist/esm/indexing-store/index.js +18 -1
- package/dist/esm/indexing-store/index.js.map +1 -1
- package/dist/esm/indexing-store/realtime.js +140 -89
- package/dist/esm/indexing-store/realtime.js.map +1 -1
- package/dist/esm/internal/errors.js +0 -12
- package/dist/esm/internal/errors.js.map +1 -1
- package/dist/esm/server/index.js +2 -10
- package/dist/esm/server/index.js.map +1 -1
- package/dist/esm/sync-store/index.js +432 -403
- package/dist/esm/sync-store/index.js.map +1 -1
- package/dist/esm/utils/wait.js +0 -2
- package/dist/esm/utils/wait.js.map +1 -1
- package/dist/types/bin/commands/createViews.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/start.d.ts +0 -2
- package/dist/types/bin/commands/start.d.ts.map +1 -1
- package/dist/types/bin/utils/run.d.ts +1 -1
- package/dist/types/bin/utils/run.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/client/index.d.ts.map +1 -1
- package/dist/types/database/index.d.ts +73 -25
- package/dist/types/database/index.d.ts.map +1 -1
- package/dist/types/drizzle/index.d.ts +3 -2
- package/dist/types/drizzle/index.d.ts.map +1 -1
- package/dist/types/drizzle/kit/index.d.ts +4 -3
- package/dist/types/drizzle/kit/index.d.ts.map +1 -1
- package/dist/types/drizzle/onchain.d.ts +5 -12
- package/dist/types/drizzle/onchain.d.ts.map +1 -1
- package/dist/types/graphql/index.d.ts +4 -2
- package/dist/types/graphql/index.d.ts.map +1 -1
- package/dist/types/graphql/middleware.d.ts +1 -1
- package/dist/types/graphql/middleware.d.ts.map +1 -1
- package/dist/types/indexing-store/cache.d.ts +12 -5
- package/dist/types/indexing-store/cache.d.ts.map +1 -1
- package/dist/types/indexing-store/historical.d.ts +7 -2
- package/dist/types/indexing-store/historical.d.ts.map +1 -1
- package/dist/types/indexing-store/index.d.ts +2 -4
- package/dist/types/indexing-store/index.d.ts.map +1 -1
- package/dist/types/indexing-store/realtime.d.ts +3 -1
- package/dist/types/indexing-store/realtime.d.ts.map +1 -1
- package/dist/types/internal/errors.d.ts +0 -4
- package/dist/types/internal/errors.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/index.d.ts +1 -1
- package/dist/types/sync-store/index.d.ts.map +1 -1
- package/dist/types/utils/wait.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/bin/commands/createViews.ts +26 -37
- package/src/bin/commands/dev.ts +1 -1
- package/src/bin/commands/list.ts +4 -7
- package/src/bin/commands/prune.ts +17 -31
- package/src/bin/commands/serve.ts +1 -1
- package/src/bin/commands/start.ts +3 -4
- package/src/bin/utils/run.ts +210 -256
- package/src/build/index.ts +2 -53
- package/src/build/plugin.ts +1 -1
- package/src/client/index.ts +10 -21
- package/src/database/index.ts +742 -331
- package/src/drizzle/index.ts +3 -2
- package/src/drizzle/kit/index.ts +5 -2
- package/src/drizzle/onchain.ts +2 -26
- package/src/graphql/index.ts +26 -31
- package/src/graphql/middleware.ts +7 -5
- package/src/indexing-store/cache.ts +52 -35
- package/src/indexing-store/historical.ts +40 -28
- package/src/indexing-store/index.ts +27 -2
- package/src/indexing-store/realtime.ts +220 -176
- package/src/internal/errors.ts +0 -9
- package/src/server/index.ts +3 -14
- package/src/sync-store/index.ts +997 -870
- package/src/utils/wait.ts +0 -1
- package/dist/esm/database/queryBuilder.js +0 -206
- package/dist/esm/database/queryBuilder.js.map +0 -1
- package/dist/esm/database/utils.js +0 -100
- package/dist/esm/database/utils.js.map +0 -1
- package/dist/esm/drizzle/json.js +0 -119
- package/dist/esm/drizzle/json.js.map +0 -1
- package/dist/types/database/queryBuilder.d.ts +0 -37
- package/dist/types/database/queryBuilder.d.ts.map +0 -1
- package/dist/types/database/utils.d.ts +0 -25
- package/dist/types/database/utils.d.ts.map +0 -1
- package/dist/types/drizzle/json.d.ts +0 -51
- package/dist/types/drizzle/json.d.ts.map +0 -1
- package/src/database/queryBuilder.ts +0 -319
- package/src/database/utils.ts +0 -140
- package/src/drizzle/json.ts +0 -154
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Database } from "@/database/index.js";
|
|
2
2
|
import { getPrimaryKeyColumns } from "@/drizzle/index.js";
|
|
3
3
|
import type { Common } from "@/internal/common.js";
|
|
4
4
|
import { RecordNotFoundError } from "@/internal/errors.js";
|
|
@@ -10,6 +10,7 @@ import { drizzle } from "drizzle-orm/pg-proxy";
|
|
|
10
10
|
import {
|
|
11
11
|
type IndexingStore,
|
|
12
12
|
checkOnchainTable,
|
|
13
|
+
parseSqlError,
|
|
13
14
|
validateUpdateSet,
|
|
14
15
|
} from "./index.js";
|
|
15
16
|
import { getCacheKey, getWhereCondition } from "./utils.js";
|
|
@@ -17,14 +18,14 @@ import { getCacheKey, getWhereCondition } from "./utils.js";
|
|
|
17
18
|
export const createRealtimeIndexingStore = ({
|
|
18
19
|
common,
|
|
19
20
|
schemaBuild: { schema },
|
|
21
|
+
database,
|
|
20
22
|
}: {
|
|
21
23
|
common: Common;
|
|
22
24
|
schemaBuild: Pick<SchemaBuild, "schema">;
|
|
25
|
+
database: Database;
|
|
23
26
|
}): IndexingStore => {
|
|
24
|
-
let qb: QB = undefined!;
|
|
25
|
-
|
|
26
27
|
const find = (table: Table, key: object) => {
|
|
27
|
-
return qb
|
|
28
|
+
return database.qb.drizzle
|
|
28
29
|
.select()
|
|
29
30
|
.from(table)
|
|
30
31
|
.where(getWhereCondition(table, key))
|
|
@@ -33,144 +34,177 @@ export const createRealtimeIndexingStore = ({
|
|
|
33
34
|
|
|
34
35
|
return {
|
|
35
36
|
// @ts-ignore
|
|
36
|
-
find:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
find: (table: Table, key) =>
|
|
38
|
+
database.retry(async () => {
|
|
39
|
+
common.metrics.ponder_indexing_store_queries_total.inc({
|
|
40
|
+
table: getTableName(table),
|
|
41
|
+
method: "find",
|
|
42
|
+
});
|
|
43
|
+
checkOnchainTable(table, "find");
|
|
44
|
+
return find(table, key);
|
|
45
|
+
}),
|
|
44
46
|
// @ts-ignore
|
|
45
47
|
insert(table: Table) {
|
|
46
48
|
return {
|
|
47
49
|
values: (values: any) => {
|
|
48
50
|
// @ts-ignore
|
|
49
51
|
const inner = {
|
|
50
|
-
onConflictDoNothing:
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
onConflictDoNothing: () =>
|
|
53
|
+
database.retry(async () => {
|
|
54
|
+
common.metrics.ponder_indexing_store_queries_total.inc({
|
|
55
|
+
table: getTableName(table),
|
|
56
|
+
method: "insert",
|
|
57
|
+
});
|
|
58
|
+
checkOnchainTable(table, "insert");
|
|
56
59
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
const parseResult = (result: { [x: string]: any }[]) => {
|
|
61
|
+
if (Array.isArray(values) === false) {
|
|
62
|
+
return result.length === 1 ? result[0] : null;
|
|
63
|
+
}
|
|
61
64
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
if (result.length === 0) {
|
|
66
|
+
return new Array(values.length).fill(null);
|
|
67
|
+
}
|
|
65
68
|
|
|
66
|
-
|
|
67
|
-
|
|
69
|
+
const rows = [];
|
|
70
|
+
let resultIndex = 0;
|
|
68
71
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
for (let i = 0; i < values.length; i++) {
|
|
73
|
+
if (
|
|
74
|
+
getCacheKey(table, values[i]) ===
|
|
75
|
+
getCacheKey(table, result[resultIndex]!)
|
|
76
|
+
) {
|
|
77
|
+
rows.push(result[resultIndex++]!);
|
|
78
|
+
} else {
|
|
79
|
+
rows.push(null);
|
|
80
|
+
}
|
|
77
81
|
}
|
|
78
|
-
}
|
|
79
82
|
|
|
80
|
-
|
|
81
|
-
|
|
83
|
+
return rows;
|
|
84
|
+
};
|
|
82
85
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
86
|
+
try {
|
|
87
|
+
return await database.qb.drizzle
|
|
88
|
+
.insert(table)
|
|
89
|
+
.values(values)
|
|
90
|
+
.onConflictDoNothing()
|
|
91
|
+
.returning()
|
|
92
|
+
.then(parseResult);
|
|
93
|
+
} catch (e) {
|
|
94
|
+
throw parseSqlError(e);
|
|
95
|
+
}
|
|
96
|
+
}),
|
|
97
|
+
onConflictDoUpdate: (valuesU: any) =>
|
|
98
|
+
database.retry(async () => {
|
|
99
|
+
common.metrics.ponder_indexing_store_queries_total.inc({
|
|
100
|
+
table: getTableName(table),
|
|
101
|
+
method: "insert",
|
|
102
|
+
});
|
|
103
|
+
checkOnchainTable(table, "insert");
|
|
96
104
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
105
|
+
if (typeof valuesU === "object") {
|
|
106
|
+
try {
|
|
107
|
+
const set = validateUpdateSet(table, valuesU);
|
|
108
|
+
return await database.qb.drizzle
|
|
109
|
+
.insert(table)
|
|
110
|
+
.values(values)
|
|
111
|
+
.onConflictDoUpdate({
|
|
112
|
+
target: getPrimaryKeyColumns(table).map(
|
|
113
|
+
// @ts-ignore
|
|
114
|
+
({ js }) => table[js],
|
|
115
|
+
),
|
|
116
|
+
set,
|
|
117
|
+
})
|
|
118
|
+
.returning()
|
|
119
|
+
.then((res) => (Array.isArray(values) ? res : res[0]));
|
|
120
|
+
} catch (e) {
|
|
121
|
+
throw parseSqlError(e);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
112
124
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
125
|
+
if (Array.isArray(values)) {
|
|
126
|
+
const rows = [];
|
|
127
|
+
for (const value of values) {
|
|
128
|
+
const row = await find(table, value);
|
|
129
|
+
|
|
130
|
+
if (row === null) {
|
|
131
|
+
try {
|
|
132
|
+
rows.push(
|
|
133
|
+
await database.qb.drizzle
|
|
134
|
+
.insert(table)
|
|
135
|
+
.values(value)
|
|
136
|
+
.returning()
|
|
137
|
+
.then((res) => res[0]),
|
|
138
|
+
);
|
|
139
|
+
} catch (e) {
|
|
140
|
+
throw parseSqlError(e);
|
|
141
|
+
}
|
|
142
|
+
} else {
|
|
143
|
+
try {
|
|
144
|
+
const set = validateUpdateSet(table, valuesU(row));
|
|
145
|
+
rows.push(
|
|
146
|
+
await database.qb.drizzle
|
|
147
|
+
.update(table)
|
|
148
|
+
.set(set)
|
|
149
|
+
.where(getWhereCondition(table, value))
|
|
150
|
+
.returning()
|
|
151
|
+
.then((res) => res[0]),
|
|
152
|
+
);
|
|
153
|
+
} catch (e) {
|
|
154
|
+
throw parseSqlError(e);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return rows;
|
|
159
|
+
} else {
|
|
160
|
+
const row = await find(table, values);
|
|
117
161
|
|
|
118
162
|
if (row === null) {
|
|
119
|
-
|
|
120
|
-
await qb
|
|
163
|
+
try {
|
|
164
|
+
return await database.qb.drizzle
|
|
121
165
|
.insert(table)
|
|
122
|
-
.values(
|
|
166
|
+
.values(values)
|
|
123
167
|
.returning()
|
|
124
|
-
.then((res) => res[0])
|
|
125
|
-
)
|
|
168
|
+
.then((res) => res[0]);
|
|
169
|
+
} catch (e) {
|
|
170
|
+
throw parseSqlError(e);
|
|
171
|
+
}
|
|
126
172
|
} else {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
await qb
|
|
173
|
+
try {
|
|
174
|
+
const set = validateUpdateSet(table, valuesU(row));
|
|
175
|
+
return await database.qb.drizzle
|
|
130
176
|
.update(table)
|
|
131
177
|
.set(set)
|
|
132
|
-
.where(getWhereCondition(table,
|
|
178
|
+
.where(getWhereCondition(table, values))
|
|
133
179
|
.returning()
|
|
134
|
-
.then((res) => res[0])
|
|
135
|
-
)
|
|
180
|
+
.then((res) => res[0]);
|
|
181
|
+
} catch (e) {
|
|
182
|
+
throw parseSqlError(e);
|
|
183
|
+
}
|
|
136
184
|
}
|
|
137
185
|
}
|
|
138
|
-
|
|
139
|
-
} else {
|
|
140
|
-
const row = await find(table, values);
|
|
141
|
-
|
|
142
|
-
if (row === null) {
|
|
143
|
-
return qb()
|
|
144
|
-
.insert(table)
|
|
145
|
-
.values(values)
|
|
146
|
-
.returning()
|
|
147
|
-
.then((res) => res[0]);
|
|
148
|
-
} else {
|
|
149
|
-
const set = validateUpdateSet(table, valuesU(row));
|
|
150
|
-
return qb()
|
|
151
|
-
.update(table)
|
|
152
|
-
.set(set)
|
|
153
|
-
.where(getWhereCondition(table, values))
|
|
154
|
-
.returning()
|
|
155
|
-
.then((res) => res[0]);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
},
|
|
186
|
+
}),
|
|
159
187
|
// biome-ignore lint/suspicious/noThenProperty: <explanation>
|
|
160
188
|
then: (onFulfilled, onRejected) =>
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
189
|
+
database
|
|
190
|
+
.retry(async () => {
|
|
191
|
+
common.metrics.ponder_indexing_store_queries_total.inc({
|
|
192
|
+
table: getTableName(table),
|
|
193
|
+
method: "insert",
|
|
194
|
+
});
|
|
195
|
+
checkOnchainTable(table, "insert");
|
|
167
196
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
197
|
+
try {
|
|
198
|
+
return await database.qb.drizzle
|
|
199
|
+
.insert(table)
|
|
200
|
+
.values(values)
|
|
201
|
+
.returning()
|
|
202
|
+
.then((res) => (Array.isArray(values) ? res : res[0]));
|
|
203
|
+
} catch (e) {
|
|
204
|
+
throw parseSqlError(e);
|
|
205
|
+
}
|
|
206
|
+
})
|
|
207
|
+
.then(onFulfilled, onRejected),
|
|
174
208
|
catch: (onRejected) => inner.then(undefined, onRejected),
|
|
175
209
|
finally: (onFinally) =>
|
|
176
210
|
inner.then(
|
|
@@ -193,86 +227,96 @@ export const createRealtimeIndexingStore = ({
|
|
|
193
227
|
// @ts-ignore
|
|
194
228
|
update(table: Table, key) {
|
|
195
229
|
return {
|
|
196
|
-
set:
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
230
|
+
set: (values: any) =>
|
|
231
|
+
database.retry(async () => {
|
|
232
|
+
common.metrics.ponder_indexing_store_queries_total.inc({
|
|
233
|
+
table: getTableName(table),
|
|
234
|
+
method: "update",
|
|
235
|
+
});
|
|
236
|
+
checkOnchainTable(table, "update");
|
|
202
237
|
|
|
203
|
-
|
|
204
|
-
|
|
238
|
+
if (typeof values === "function") {
|
|
239
|
+
const row = await find(table, key);
|
|
205
240
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
241
|
+
if (row === null) {
|
|
242
|
+
const error = new RecordNotFoundError(
|
|
243
|
+
`No existing record found in table '${getTableName(table)}'`,
|
|
244
|
+
);
|
|
245
|
+
error.meta.push(`db.update arguments:\n${prettyPrint(key)}`);
|
|
246
|
+
throw error;
|
|
247
|
+
}
|
|
213
248
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
249
|
+
try {
|
|
250
|
+
const set = validateUpdateSet(table, values(row));
|
|
251
|
+
return await database.qb.drizzle
|
|
252
|
+
.update(table)
|
|
253
|
+
.set(set)
|
|
254
|
+
.where(getWhereCondition(table, key))
|
|
255
|
+
.returning()
|
|
256
|
+
.then((res) => res[0]);
|
|
257
|
+
} catch (e) {
|
|
258
|
+
throw parseSqlError(e);
|
|
259
|
+
}
|
|
260
|
+
} else {
|
|
261
|
+
try {
|
|
262
|
+
const set = validateUpdateSet(table, values);
|
|
263
|
+
return await database.qb.drizzle
|
|
264
|
+
.update(table)
|
|
265
|
+
.set(set)
|
|
266
|
+
.where(getWhereCondition(table, key))
|
|
267
|
+
.returning()
|
|
268
|
+
.then((res) => res[0]);
|
|
269
|
+
} catch (e) {
|
|
270
|
+
throw parseSqlError(e);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}),
|
|
231
274
|
};
|
|
232
275
|
},
|
|
233
276
|
// @ts-ignore
|
|
234
|
-
delete:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
277
|
+
delete: (table: Table, key) =>
|
|
278
|
+
database.retry(async () => {
|
|
279
|
+
common.metrics.ponder_indexing_store_queries_total.inc({
|
|
280
|
+
table: getTableName(table),
|
|
281
|
+
method: "delete",
|
|
282
|
+
});
|
|
283
|
+
checkOnchainTable(table, "delete");
|
|
240
284
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
285
|
+
const deleted = await database.qb.drizzle
|
|
286
|
+
.delete(table)
|
|
287
|
+
.where(getWhereCondition(table, key))
|
|
288
|
+
.returning();
|
|
245
289
|
|
|
246
|
-
|
|
247
|
-
|
|
290
|
+
return deleted.length > 0;
|
|
291
|
+
}),
|
|
248
292
|
// @ts-ignore
|
|
249
293
|
sql: drizzle(
|
|
250
294
|
async (_sql, params, method, typings) => {
|
|
251
295
|
const query: QueryWithTypings = { sql: _sql, params, typings };
|
|
252
|
-
const endClock = startClock();
|
|
253
296
|
|
|
254
297
|
try {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
query,
|
|
258
|
-
undefined,
|
|
259
|
-
undefined,
|
|
260
|
-
method === "all",
|
|
261
|
-
)
|
|
262
|
-
.execute();
|
|
298
|
+
return await database.retry(async () => {
|
|
299
|
+
const endClock = startClock();
|
|
263
300
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
301
|
+
const result = await database.qb.drizzle._.session
|
|
302
|
+
.prepareQuery(query, undefined, undefined, method === "all")
|
|
303
|
+
.execute()
|
|
304
|
+
.catch((error) => {
|
|
305
|
+
throw parseSqlError(error);
|
|
306
|
+
})
|
|
307
|
+
.finally(() => {
|
|
308
|
+
common.metrics.ponder_indexing_store_raw_sql_duration.observe(
|
|
309
|
+
endClock(),
|
|
310
|
+
);
|
|
311
|
+
});
|
|
312
|
+
// @ts-ignore
|
|
313
|
+
return { rows: result.rows.map((row) => Object.values(row)) };
|
|
314
|
+
});
|
|
315
|
+
} catch (error) {
|
|
316
|
+
throw parseSqlError(error);
|
|
270
317
|
}
|
|
271
318
|
},
|
|
272
319
|
{ schema, casing: "snake_case" },
|
|
273
320
|
),
|
|
274
|
-
set qb(_qb: QB) {
|
|
275
|
-
qb = _qb;
|
|
276
|
-
},
|
|
277
321
|
};
|
|
278
322
|
};
|
package/src/internal/errors.ts
CHANGED
|
@@ -126,12 +126,3 @@ export class ShutdownError extends NonRetryableError {
|
|
|
126
126
|
Object.setPrototypeOf(this, ShutdownError.prototype);
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
|
|
130
|
-
export class TransactionError extends NonRetryableError {
|
|
131
|
-
override name = "TransactionError";
|
|
132
|
-
|
|
133
|
-
constructor(message?: string | undefined) {
|
|
134
|
-
super(message);
|
|
135
|
-
Object.setPrototypeOf(this, TransactionError.prototype);
|
|
136
|
-
}
|
|
137
|
-
}
|
package/src/server/index.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import http from "node:http";
|
|
2
|
-
import {
|
|
3
|
-
type Database,
|
|
4
|
-
getPonderCheckpointTable,
|
|
5
|
-
getPonderMetaTable,
|
|
6
|
-
} from "@/database/index.js";
|
|
2
|
+
import type { Database } from "@/database/index.js";
|
|
7
3
|
import type { Common } from "@/internal/common.js";
|
|
8
4
|
import type { ApiBuild, Status } from "@/internal/types.js";
|
|
9
5
|
import { decodeCheckpoint } from "@/utils/checkpoint.js";
|
|
@@ -87,11 +83,7 @@ export async function createServer({
|
|
|
87
83
|
return c.text("", 200);
|
|
88
84
|
})
|
|
89
85
|
.get("/ready", async (c) => {
|
|
90
|
-
const isReady = await database
|
|
91
|
-
.readonlyQB("select_ready")
|
|
92
|
-
.select()
|
|
93
|
-
.from(getPonderMetaTable())
|
|
94
|
-
.then((result) => result[0]!.value.is_ready === 1);
|
|
86
|
+
const isReady = await database.getReady();
|
|
95
87
|
|
|
96
88
|
if (isReady) {
|
|
97
89
|
return c.text("", 200);
|
|
@@ -100,10 +92,7 @@ export async function createServer({
|
|
|
100
92
|
return c.text("Historical indexing is not complete.", 503);
|
|
101
93
|
})
|
|
102
94
|
.get("/status", async (c) => {
|
|
103
|
-
const checkpoints = await
|
|
104
|
-
.readonlyQB("select_checkpoints")
|
|
105
|
-
.select()
|
|
106
|
-
.from(getPonderCheckpointTable());
|
|
95
|
+
const checkpoints = await globalThis.PONDER_DATABASE.getCheckpoints();
|
|
107
96
|
const status: Status = {};
|
|
108
97
|
for (const { chainName, chainId, latestCheckpoint } of checkpoints) {
|
|
109
98
|
status[chainName] = {
|