@filoz/repair-cli 0.0.1

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.
Files changed (127) hide show
  1. package/dist/src/cli.d.ts +3 -0
  2. package/dist/src/cli.d.ts.map +1 -0
  3. package/dist/src/cli.js +19 -0
  4. package/dist/src/cli.js.map +1 -0
  5. package/dist/src/commands/datasets.d.ts +9 -0
  6. package/dist/src/commands/datasets.d.ts.map +1 -0
  7. package/dist/src/commands/datasets.js +59 -0
  8. package/dist/src/commands/datasets.js.map +1 -0
  9. package/dist/src/commands/providers.d.ts +9 -0
  10. package/dist/src/commands/providers.d.ts.map +1 -0
  11. package/dist/src/commands/providers.js +84 -0
  12. package/dist/src/commands/providers.js.map +1 -0
  13. package/dist/src/commands/repair.d.ts +9 -0
  14. package/dist/src/commands/repair.d.ts.map +1 -0
  15. package/dist/src/commands/repair.js +170 -0
  16. package/dist/src/commands/repair.js.map +1 -0
  17. package/dist/src/commands/setup.d.ts +11 -0
  18. package/dist/src/commands/setup.d.ts.map +1 -0
  19. package/dist/src/commands/setup.js +127 -0
  20. package/dist/src/commands/setup.js.map +1 -0
  21. package/dist/src/commands/wallet.d.ts +9 -0
  22. package/dist/src/commands/wallet.d.ts.map +1 -0
  23. package/dist/src/commands/wallet.js +150 -0
  24. package/dist/src/commands/wallet.js.map +1 -0
  25. package/dist/src/db/get-pieces.d.ts +23 -0
  26. package/dist/src/db/get-pieces.d.ts.map +1 -0
  27. package/dist/src/db/get-pieces.js +84 -0
  28. package/dist/src/db/get-pieces.js.map +1 -0
  29. package/dist/src/db/get-providers-by-cid.d.ts +10 -0
  30. package/dist/src/db/get-providers-by-cid.d.ts.map +1 -0
  31. package/dist/src/db/get-providers-by-cid.js +45 -0
  32. package/dist/src/db/get-providers-by-cid.js.map +1 -0
  33. package/dist/src/db/get-repair-dataset.d.ts +9 -0
  34. package/dist/src/db/get-repair-dataset.d.ts.map +1 -0
  35. package/dist/src/db/get-repair-dataset.js +15 -0
  36. package/dist/src/db/get-repair-dataset.js.map +1 -0
  37. package/dist/src/db/get-repair-provider.d.ts +6 -0
  38. package/dist/src/db/get-repair-provider.d.ts.map +1 -0
  39. package/dist/src/db/get-repair-provider.js +28 -0
  40. package/dist/src/db/get-repair-provider.js.map +1 -0
  41. package/dist/src/db/get-target-dataset.d.ts +7 -0
  42. package/dist/src/db/get-target-dataset.d.ts.map +1 -0
  43. package/dist/src/db/get-target-dataset.js +27 -0
  44. package/dist/src/db/get-target-dataset.js.map +1 -0
  45. package/dist/src/db/repair-create.d.ts +7 -0
  46. package/dist/src/db/repair-create.d.ts.map +1 -0
  47. package/dist/src/db/repair-create.js +69 -0
  48. package/dist/src/db/repair-create.js.map +1 -0
  49. package/dist/src/db/repair-delete.d.ts +11 -0
  50. package/dist/src/db/repair-delete.d.ts.map +1 -0
  51. package/dist/src/db/repair-delete.js +22 -0
  52. package/dist/src/db/repair-delete.js.map +1 -0
  53. package/dist/src/db/repair-update.d.ts +10 -0
  54. package/dist/src/db/repair-update.d.ts.map +1 -0
  55. package/dist/src/db/repair-update.js +13 -0
  56. package/dist/src/db/repair-update.js.map +1 -0
  57. package/dist/src/db/sync-pieces-onchain.d.ts +10 -0
  58. package/dist/src/db/sync-pieces-onchain.d.ts.map +1 -0
  59. package/dist/src/db/sync-pieces-onchain.js +35 -0
  60. package/dist/src/db/sync-pieces-onchain.js.map +1 -0
  61. package/dist/src/db/update-operation.d.ts +11 -0
  62. package/dist/src/db/update-operation.d.ts.map +1 -0
  63. package/dist/src/db/update-operation.js +14 -0
  64. package/dist/src/db/update-operation.js.map +1 -0
  65. package/dist/src/db/upsert-operations.d.ts +8 -0
  66. package/dist/src/db/upsert-operations.d.ts.map +1 -0
  67. package/dist/src/db/upsert-operations.js +13 -0
  68. package/dist/src/db/upsert-operations.js.map +1 -0
  69. package/dist/src/error.d.ts +14 -0
  70. package/dist/src/error.d.ts.map +1 -0
  71. package/dist/src/error.js +27 -0
  72. package/dist/src/error.js.map +1 -0
  73. package/dist/src/indexer-schema.d.ts +549 -0
  74. package/dist/src/indexer-schema.d.ts.map +1 -0
  75. package/dist/src/indexer-schema.js +56 -0
  76. package/dist/src/indexer-schema.js.map +1 -0
  77. package/dist/src/local-schema.d.ts +456 -0
  78. package/dist/src/local-schema.d.ts.map +1 -0
  79. package/dist/src/local-schema.js +63 -0
  80. package/dist/src/local-schema.js.map +1 -0
  81. package/dist/src/middleware.d.ts +19 -0
  82. package/dist/src/middleware.d.ts.map +1 -0
  83. package/dist/src/middleware.js +28 -0
  84. package/dist/src/middleware.js.map +1 -0
  85. package/dist/src/pipeline/create-datasets.d.ts +10 -0
  86. package/dist/src/pipeline/create-datasets.d.ts.map +1 -0
  87. package/dist/src/pipeline/create-datasets.js +48 -0
  88. package/dist/src/pipeline/create-datasets.js.map +1 -0
  89. package/dist/src/pipeline/pull.d.ts +30 -0
  90. package/dist/src/pipeline/pull.d.ts.map +1 -0
  91. package/dist/src/pipeline/pull.js +169 -0
  92. package/dist/src/pipeline/pull.js.map +1 -0
  93. package/dist/src/types.d.ts +34 -0
  94. package/dist/src/types.d.ts.map +1 -0
  95. package/dist/src/types.js +1 -0
  96. package/dist/src/types.js.map +1 -0
  97. package/dist/src/utils.d.ts +11945 -0
  98. package/dist/src/utils.d.ts.map +1 -0
  99. package/dist/src/utils.js +121 -0
  100. package/dist/src/utils.js.map +1 -0
  101. package/package.json +135 -0
  102. package/readme.md +250 -0
  103. package/src/cli.ts +20 -0
  104. package/src/commands/datasets.ts +62 -0
  105. package/src/commands/providers.ts +99 -0
  106. package/src/commands/repair.ts +177 -0
  107. package/src/commands/setup.ts +142 -0
  108. package/src/commands/wallet.ts +159 -0
  109. package/src/db/get-pieces.ts +189 -0
  110. package/src/db/get-providers-by-cid.ts +75 -0
  111. package/src/db/get-repair-dataset.ts +44 -0
  112. package/src/db/get-repair-provider.ts +47 -0
  113. package/src/db/get-target-dataset.ts +47 -0
  114. package/src/db/repair-create.ts +101 -0
  115. package/src/db/repair-delete.ts +39 -0
  116. package/src/db/repair-update.ts +20 -0
  117. package/src/db/sync-pieces-onchain.ts +53 -0
  118. package/src/db/update-operation.ts +26 -0
  119. package/src/db/upsert-operations.ts +23 -0
  120. package/src/error.ts +33 -0
  121. package/src/indexer-schema.ts +77 -0
  122. package/src/local-schema.ts +91 -0
  123. package/src/middleware.ts +34 -0
  124. package/src/pipeline/create-datasets.ts +70 -0
  125. package/src/pipeline/pull.ts +255 -0
  126. package/src/types.ts +41 -0
  127. package/src/utils.ts +190 -0
@@ -0,0 +1,456 @@
1
+ import type { MetadataObject } from '@filoz/synapse-core';
2
+ import type * as SP from '@filoz/synapse-core/sp';
3
+ import * as t from 'drizzle-orm/sqlite-core';
4
+ export type RepairStatus = 'pending' | 'completed' | 'failed';
5
+ export type OperationStatus = 'pending' | 'completed' | 'failed' | 'skipped';
6
+ export type OperationType = 'create_dataset' | 'add_piece';
7
+ export type OperationResult = Omit<SP.AddPiecesSuccess, 'txStatus' | 'addMessageOk' | 'piecesAdded' | 'pieceCount' | 'confirmedPieceIds'>;
8
+ export declare const jsonType: {
9
+ (): t.SQLiteCustomColumnBuilder<{
10
+ name: "";
11
+ dataType: "custom";
12
+ columnType: "SQLiteCustomColumn";
13
+ data: unknown;
14
+ driverParam: unknown;
15
+ enumValues: undefined;
16
+ }>;
17
+ <TConfig extends Record<string, any>>(fieldConfig?: TConfig | undefined): t.SQLiteCustomColumnBuilder<{
18
+ name: "";
19
+ dataType: "custom";
20
+ columnType: "SQLiteCustomColumn";
21
+ data: unknown;
22
+ driverParam: unknown;
23
+ enumValues: undefined;
24
+ }>;
25
+ <TName extends string>(dbName: TName, fieldConfig?: unknown): t.SQLiteCustomColumnBuilder<{
26
+ name: TName;
27
+ dataType: "custom";
28
+ columnType: "SQLiteCustomColumn";
29
+ data: unknown;
30
+ driverParam: unknown;
31
+ enumValues: undefined;
32
+ }>;
33
+ };
34
+ export declare const bigintType: {
35
+ (): t.SQLiteCustomColumnBuilder<{
36
+ name: "";
37
+ dataType: "custom";
38
+ columnType: "SQLiteCustomColumn";
39
+ data: bigint;
40
+ driverParam: unknown;
41
+ enumValues: undefined;
42
+ }>;
43
+ <TConfig extends Record<string, any>>(fieldConfig?: TConfig | undefined): t.SQLiteCustomColumnBuilder<{
44
+ name: "";
45
+ dataType: "custom";
46
+ columnType: "SQLiteCustomColumn";
47
+ data: bigint;
48
+ driverParam: unknown;
49
+ enumValues: undefined;
50
+ }>;
51
+ <TName extends string>(dbName: TName, fieldConfig?: unknown): t.SQLiteCustomColumnBuilder<{
52
+ name: TName;
53
+ dataType: "custom";
54
+ columnType: "SQLiteCustomColumn";
55
+ data: bigint;
56
+ driverParam: unknown;
57
+ enumValues: undefined;
58
+ }>;
59
+ };
60
+ export type RepairInsert = typeof repairs.$inferInsert;
61
+ export type RepairSelect = typeof repairs.$inferSelect;
62
+ export type RepairUpdate = Partial<RepairInsert>;
63
+ export declare const repairs: t.SQLiteTableWithColumns<{
64
+ name: "repairs";
65
+ schema: undefined;
66
+ columns: {
67
+ id: t.SQLiteColumn<{
68
+ name: "id";
69
+ tableName: "repairs";
70
+ dataType: "number";
71
+ columnType: "SQLiteInteger";
72
+ data: number;
73
+ driverParam: number;
74
+ notNull: true;
75
+ hasDefault: true;
76
+ isPrimaryKey: true;
77
+ isAutoincrement: false;
78
+ hasRuntimeDefault: false;
79
+ enumValues: undefined;
80
+ baseColumn: never;
81
+ identity: undefined;
82
+ generated: undefined;
83
+ }, {}, {}>;
84
+ status: t.SQLiteColumn<{
85
+ name: "status";
86
+ tableName: "repairs";
87
+ dataType: "string";
88
+ columnType: "SQLiteText";
89
+ data: RepairStatus;
90
+ driverParam: string;
91
+ notNull: true;
92
+ hasDefault: true;
93
+ isPrimaryKey: false;
94
+ isAutoincrement: false;
95
+ hasRuntimeDefault: false;
96
+ enumValues: [string, ...string[]];
97
+ baseColumn: never;
98
+ identity: undefined;
99
+ generated: undefined;
100
+ }, {}, {
101
+ length: undefined;
102
+ $type: RepairStatus;
103
+ }>;
104
+ repairProviderId: t.SQLiteColumn<{
105
+ name: "repair_provider_id";
106
+ tableName: "repairs";
107
+ dataType: "custom";
108
+ columnType: "SQLiteCustomColumn";
109
+ data: bigint;
110
+ driverParam: unknown;
111
+ notNull: true;
112
+ hasDefault: false;
113
+ isPrimaryKey: false;
114
+ isAutoincrement: false;
115
+ hasRuntimeDefault: false;
116
+ enumValues: undefined;
117
+ baseColumn: never;
118
+ identity: undefined;
119
+ generated: undefined;
120
+ }, {}, {
121
+ sqliteColumnBuilderBrand: "SQLiteCustomColumnBuilderBrand";
122
+ }>;
123
+ targetProviderId: t.SQLiteColumn<{
124
+ name: "target_provider_id";
125
+ tableName: "repairs";
126
+ dataType: "custom";
127
+ columnType: "SQLiteCustomColumn";
128
+ data: bigint;
129
+ driverParam: unknown;
130
+ notNull: true;
131
+ hasDefault: false;
132
+ isPrimaryKey: false;
133
+ isAutoincrement: false;
134
+ hasRuntimeDefault: false;
135
+ enumValues: undefined;
136
+ baseColumn: never;
137
+ identity: undefined;
138
+ generated: undefined;
139
+ }, {}, {
140
+ sqliteColumnBuilderBrand: "SQLiteCustomColumnBuilderBrand";
141
+ }>;
142
+ targetProviderUrl: t.SQLiteColumn<{
143
+ name: "target_provider_url";
144
+ tableName: "repairs";
145
+ dataType: "string";
146
+ columnType: "SQLiteText";
147
+ data: string;
148
+ driverParam: string;
149
+ notNull: true;
150
+ hasDefault: false;
151
+ isPrimaryKey: false;
152
+ isAutoincrement: false;
153
+ hasRuntimeDefault: false;
154
+ enumValues: [string, ...string[]];
155
+ baseColumn: never;
156
+ identity: undefined;
157
+ generated: undefined;
158
+ }, {}, {
159
+ length: number | undefined;
160
+ }>;
161
+ targetDataSetId: t.SQLiteColumn<{
162
+ name: "target_data_set_id";
163
+ tableName: "repairs";
164
+ dataType: "custom";
165
+ columnType: "SQLiteCustomColumn";
166
+ data: bigint;
167
+ driverParam: unknown;
168
+ notNull: false;
169
+ hasDefault: false;
170
+ isPrimaryKey: false;
171
+ isAutoincrement: false;
172
+ hasRuntimeDefault: false;
173
+ enumValues: undefined;
174
+ baseColumn: never;
175
+ identity: undefined;
176
+ generated: undefined;
177
+ }, {}, {
178
+ sqliteColumnBuilderBrand: "SQLiteCustomColumnBuilderBrand";
179
+ }>;
180
+ blockNumber: t.SQLiteColumn<{
181
+ name: "block_number";
182
+ tableName: "repairs";
183
+ dataType: "custom";
184
+ columnType: "SQLiteCustomColumn";
185
+ data: bigint;
186
+ driverParam: unknown;
187
+ notNull: true;
188
+ hasDefault: false;
189
+ isPrimaryKey: false;
190
+ isAutoincrement: false;
191
+ hasRuntimeDefault: false;
192
+ enumValues: undefined;
193
+ baseColumn: never;
194
+ identity: undefined;
195
+ generated: undefined;
196
+ }, {}, {
197
+ sqliteColumnBuilderBrand: "SQLiteCustomColumnBuilderBrand";
198
+ }>;
199
+ createdAt: t.SQLiteColumn<{
200
+ name: "created_at";
201
+ tableName: "repairs";
202
+ dataType: "number";
203
+ columnType: "SQLiteInteger";
204
+ data: number;
205
+ driverParam: number;
206
+ notNull: true;
207
+ hasDefault: false;
208
+ isPrimaryKey: false;
209
+ isAutoincrement: false;
210
+ hasRuntimeDefault: false;
211
+ enumValues: undefined;
212
+ baseColumn: never;
213
+ identity: undefined;
214
+ generated: undefined;
215
+ }, {}, {}>;
216
+ updatedAt: t.SQLiteColumn<{
217
+ name: "updated_at";
218
+ tableName: "repairs";
219
+ dataType: "number";
220
+ columnType: "SQLiteInteger";
221
+ data: number;
222
+ driverParam: number;
223
+ notNull: true;
224
+ hasDefault: false;
225
+ isPrimaryKey: false;
226
+ isAutoincrement: false;
227
+ hasRuntimeDefault: false;
228
+ enumValues: undefined;
229
+ baseColumn: never;
230
+ identity: undefined;
231
+ generated: undefined;
232
+ }, {}, {}>;
233
+ };
234
+ dialect: "sqlite";
235
+ }>;
236
+ export type OperationInsert = typeof operations.$inferInsert;
237
+ export type OperationSelect = typeof operations.$inferSelect;
238
+ export declare const operations: t.SQLiteTableWithColumns<{
239
+ name: "operations";
240
+ schema: undefined;
241
+ columns: {
242
+ id: t.SQLiteColumn<{
243
+ name: "id";
244
+ tableName: "operations";
245
+ dataType: "number";
246
+ columnType: "SQLiteInteger";
247
+ data: number;
248
+ driverParam: number;
249
+ notNull: true;
250
+ hasDefault: true;
251
+ isPrimaryKey: true;
252
+ isAutoincrement: false;
253
+ hasRuntimeDefault: false;
254
+ enumValues: undefined;
255
+ baseColumn: never;
256
+ identity: undefined;
257
+ generated: undefined;
258
+ }, {}, {}>;
259
+ repairId: t.SQLiteColumn<{
260
+ name: "repair_id";
261
+ tableName: "operations";
262
+ dataType: "number";
263
+ columnType: "SQLiteInteger";
264
+ data: number;
265
+ driverParam: number;
266
+ notNull: true;
267
+ hasDefault: false;
268
+ isPrimaryKey: false;
269
+ isAutoincrement: false;
270
+ hasRuntimeDefault: false;
271
+ enumValues: undefined;
272
+ baseColumn: never;
273
+ identity: undefined;
274
+ generated: undefined;
275
+ }, {}, {}>;
276
+ type: t.SQLiteColumn<{
277
+ name: "type";
278
+ tableName: "operations";
279
+ dataType: "string";
280
+ columnType: "SQLiteText";
281
+ data: OperationType;
282
+ driverParam: string;
283
+ notNull: true;
284
+ hasDefault: false;
285
+ isPrimaryKey: false;
286
+ isAutoincrement: false;
287
+ hasRuntimeDefault: false;
288
+ enumValues: [string, ...string[]];
289
+ baseColumn: never;
290
+ identity: undefined;
291
+ generated: undefined;
292
+ }, {}, {
293
+ length: undefined;
294
+ $type: OperationType;
295
+ }>;
296
+ status: t.SQLiteColumn<{
297
+ name: "status";
298
+ tableName: "operations";
299
+ dataType: "string";
300
+ columnType: "SQLiteText";
301
+ data: OperationStatus;
302
+ driverParam: string;
303
+ notNull: true;
304
+ hasDefault: true;
305
+ isPrimaryKey: false;
306
+ isAutoincrement: false;
307
+ hasRuntimeDefault: false;
308
+ enumValues: [string, ...string[]];
309
+ baseColumn: never;
310
+ identity: undefined;
311
+ generated: undefined;
312
+ }, {}, {
313
+ length: undefined;
314
+ $type: OperationStatus;
315
+ }>;
316
+ cid: t.SQLiteColumn<{
317
+ name: "cid";
318
+ tableName: "operations";
319
+ dataType: "string";
320
+ columnType: "SQLiteText";
321
+ data: string;
322
+ driverParam: string;
323
+ notNull: true;
324
+ hasDefault: false;
325
+ isPrimaryKey: false;
326
+ isAutoincrement: false;
327
+ hasRuntimeDefault: false;
328
+ enumValues: [string, ...string[]];
329
+ baseColumn: never;
330
+ identity: undefined;
331
+ generated: undefined;
332
+ }, {}, {
333
+ length: undefined;
334
+ }>;
335
+ metadata: t.SQLiteColumn<{
336
+ name: "metadata";
337
+ tableName: "operations";
338
+ dataType: "custom";
339
+ columnType: "SQLiteCustomColumn";
340
+ data: MetadataObject;
341
+ driverParam: unknown;
342
+ notNull: true;
343
+ hasDefault: false;
344
+ isPrimaryKey: false;
345
+ isAutoincrement: false;
346
+ hasRuntimeDefault: false;
347
+ enumValues: undefined;
348
+ baseColumn: never;
349
+ identity: undefined;
350
+ generated: undefined;
351
+ }, {}, {
352
+ $type: MetadataObject;
353
+ sqliteColumnBuilderBrand: "SQLiteCustomColumnBuilderBrand";
354
+ }>;
355
+ alternateProvider: t.SQLiteColumn<{
356
+ name: "alternate_provider";
357
+ tableName: "operations";
358
+ dataType: "string";
359
+ columnType: "SQLiteText";
360
+ data: string;
361
+ driverParam: string;
362
+ notNull: true;
363
+ hasDefault: false;
364
+ isPrimaryKey: false;
365
+ isAutoincrement: false;
366
+ hasRuntimeDefault: false;
367
+ enumValues: [string, ...string[]];
368
+ baseColumn: never;
369
+ identity: undefined;
370
+ generated: undefined;
371
+ }, {}, {
372
+ length: number | undefined;
373
+ }>;
374
+ result: t.SQLiteColumn<{
375
+ name: "result";
376
+ tableName: "operations";
377
+ dataType: "custom";
378
+ columnType: "SQLiteCustomColumn";
379
+ data: OperationResult;
380
+ driverParam: unknown;
381
+ notNull: false;
382
+ hasDefault: false;
383
+ isPrimaryKey: false;
384
+ isAutoincrement: false;
385
+ hasRuntimeDefault: false;
386
+ enumValues: undefined;
387
+ baseColumn: never;
388
+ identity: undefined;
389
+ generated: undefined;
390
+ }, {}, {
391
+ $type: OperationResult;
392
+ sqliteColumnBuilderBrand: "SQLiteCustomColumnBuilderBrand";
393
+ }>;
394
+ error: t.SQLiteColumn<{
395
+ name: "error";
396
+ tableName: "operations";
397
+ dataType: "string";
398
+ columnType: "SQLiteText";
399
+ data: string;
400
+ driverParam: string;
401
+ notNull: false;
402
+ hasDefault: false;
403
+ isPrimaryKey: false;
404
+ isAutoincrement: false;
405
+ hasRuntimeDefault: false;
406
+ enumValues: [string, ...string[]];
407
+ baseColumn: never;
408
+ identity: undefined;
409
+ generated: undefined;
410
+ }, {}, {
411
+ length: undefined;
412
+ }>;
413
+ createdAt: t.SQLiteColumn<{
414
+ name: "created_at";
415
+ tableName: "operations";
416
+ dataType: "number";
417
+ columnType: "SQLiteInteger";
418
+ data: number;
419
+ driverParam: number;
420
+ notNull: true;
421
+ hasDefault: false;
422
+ isPrimaryKey: false;
423
+ isAutoincrement: false;
424
+ hasRuntimeDefault: false;
425
+ enumValues: undefined;
426
+ baseColumn: never;
427
+ identity: undefined;
428
+ generated: undefined;
429
+ }, {}, {}>;
430
+ updatedAt: t.SQLiteColumn<{
431
+ name: "updated_at";
432
+ tableName: "operations";
433
+ dataType: "number";
434
+ columnType: "SQLiteInteger";
435
+ data: number;
436
+ driverParam: number;
437
+ notNull: true;
438
+ hasDefault: false;
439
+ isPrimaryKey: false;
440
+ isAutoincrement: false;
441
+ hasRuntimeDefault: false;
442
+ enumValues: undefined;
443
+ baseColumn: never;
444
+ identity: undefined;
445
+ generated: undefined;
446
+ }, {}, {}>;
447
+ };
448
+ dialect: "sqlite";
449
+ }>;
450
+ export declare const repairRelations: import("drizzle-orm").Relations<"repairs", {
451
+ operations: import("drizzle-orm").Many<"operations">;
452
+ }>;
453
+ export declare const operationRelations: import("drizzle-orm").Relations<"operations", {
454
+ repair: import("drizzle-orm").One<"repairs", true>;
455
+ }>;
456
+ //# sourceMappingURL=local-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-schema.d.ts","sourceRoot":"","sources":["../../src/local-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAGjD,OAAO,KAAK,CAAC,MAAM,yBAAyB,CAAA;AAI5C,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;AAC7D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAA;AAC5E,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,WAAW,CAAA;AAE1D,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,EAAE,CAAC,gBAAgB,EACnB,UAAU,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,mBAAmB,CACjF,CAAA;AAMD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;CAUnB,CAAA;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;CAUrB,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,OAAO,OAAO,CAAC,YAAY,CAAA;AACtD,MAAM,MAAM,YAAY,GAAG,OAAO,OAAO,CAAC,YAAY,CAAA;AACtD,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;AAEhD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUlB,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,OAAO,UAAU,CAAC,YAAY,CAAA;AAC5D,MAAM,MAAM,eAAe,GAAG,OAAO,UAAU,CAAC,YAAY,CAAA;AAE5D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAerB,CAAA;AAEF,eAAO,MAAM,eAAe;;EAEzB,CAAA;AAEH,eAAO,MAAM,kBAAkB;;EAK5B,CAAA"}
@@ -0,0 +1,63 @@
1
+ import { relations } from 'drizzle-orm';
2
+ import * as t from 'drizzle-orm/sqlite-core';
3
+ import { customType, sqliteTable as table } from 'drizzle-orm/sqlite-core';
4
+ import * as Json from 'iso-base/json';
5
+ export const jsonType = customType({
6
+ dataType() {
7
+ return 'text';
8
+ },
9
+ toDriver(value) {
10
+ return Json.stringify(value);
11
+ },
12
+ fromDriver(value) {
13
+ return Json.parse(value);
14
+ },
15
+ });
16
+ export const bigintType = customType({
17
+ dataType() {
18
+ return 'text';
19
+ },
20
+ toDriver(value) {
21
+ return value.toString();
22
+ },
23
+ fromDriver(value) {
24
+ return BigInt(value);
25
+ },
26
+ });
27
+ export const repairs = table('repairs', {
28
+ id: t.int().primaryKey({ autoIncrement: true }),
29
+ status: t.text().$type().notNull().default('pending'),
30
+ repairProviderId: bigintType('repair_provider_id').notNull(),
31
+ targetProviderId: bigintType('target_provider_id').notNull(),
32
+ targetProviderUrl: t.text('target_provider_url').notNull(),
33
+ targetDataSetId: bigintType('target_data_set_id'),
34
+ blockNumber: bigintType('block_number').notNull(),
35
+ createdAt: t.integer('created_at').notNull(),
36
+ updatedAt: t.integer('updated_at').notNull(),
37
+ });
38
+ export const operations = table('operations', {
39
+ id: t.int().primaryKey({ autoIncrement: true }),
40
+ repairId: t
41
+ .int('repair_id')
42
+ .references(() => repairs.id)
43
+ .notNull(),
44
+ type: t.text().$type().notNull(),
45
+ status: t.text().$type().notNull().default('pending'),
46
+ cid: t.text().notNull(),
47
+ metadata: jsonType().$type().notNull(),
48
+ alternateProvider: t.text('alternate_provider').notNull(),
49
+ result: jsonType().$type(),
50
+ error: t.text(),
51
+ createdAt: t.integer('created_at').notNull(),
52
+ updatedAt: t.integer('updated_at').notNull(),
53
+ });
54
+ export const repairRelations = relations(repairs, ({ many }) => ({
55
+ operations: many(operations),
56
+ }));
57
+ export const operationRelations = relations(operations, ({ one }) => ({
58
+ repair: one(repairs, {
59
+ fields: [operations.repairId],
60
+ references: [repairs.id],
61
+ }),
62
+ }));
63
+ //# sourceMappingURL=local-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-schema.js","sourceRoot":"","sources":["../../src/local-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Chain } from '@filoz/synapse-core/chains';
2
+ import { z } from 'incur';
3
+ import type { Account, Client, Transport } from 'viem';
4
+ import type { IndexerDatabase, LocalDatabase } from './types.ts';
5
+ export declare const contextSchema: z.ZodObject<{
6
+ indexerDb: z.ZodCustom<IndexerDatabase, IndexerDatabase>;
7
+ localDb: z.ZodCustom<LocalDatabase, LocalDatabase>;
8
+ config: z.ZodCustom<import("conf").default<import("./types.ts").Config>, import("conf").default<import("./types.ts").Config>>;
9
+ client: z.ZodCustom<Client<Transport, Chain, Account>, Client<Transport, Chain, Account>>;
10
+ chain: z.ZodCustom<Chain, Chain>;
11
+ }, z.core.$strip>;
12
+ export declare const contextMiddleware: import("incur").MiddlewareHandler<z.ZodObject<{
13
+ indexerDb: z.ZodCustom<IndexerDatabase, IndexerDatabase>;
14
+ localDb: z.ZodCustom<LocalDatabase, LocalDatabase>;
15
+ config: z.ZodCustom<import("conf").default<import("./types.ts").Config>, import("conf").default<import("./types.ts").Config>>;
16
+ client: z.ZodCustom<Client<Transport, Chain, Account>, Client<Transport, Chain, Account>>;
17
+ chain: z.ZodCustom<Chain, Chain>;
18
+ }, z.core.$strip>, undefined>;
19
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAAc,CAAC,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAGhE,eAAO,MAAM,aAAa;;;;;;iBAMxB,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;6BAiB5B,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { drizzle as drizzlePostgres } from 'drizzle-orm/node-postgres';
2
+ import { middleware, z } from 'incur';
3
+ import * as indexerSchema from "./indexer-schema.js";
4
+ import { config, createLocalDatabase, getClient } from "./utils.js";
5
+ export const contextSchema = z.object({
6
+ indexerDb: z.custom(),
7
+ localDb: z.custom(),
8
+ config: z.custom(),
9
+ client: z.custom(),
10
+ chain: z.custom(),
11
+ });
12
+ export const contextMiddleware = middleware(async (c, next) => {
13
+ const { dbPath, chainId, indexerMainnetUrl, indexerCalibrationUrl } = config.store;
14
+ const localDb = await createLocalDatabase(dbPath);
15
+ const indexerDb = drizzlePostgres(chainId === 314 ? indexerMainnetUrl : indexerCalibrationUrl, {
16
+ schema: indexerSchema,
17
+ });
18
+ const { client, chain } = getClient(chainId);
19
+ c.set('localDb', localDb);
20
+ c.set('indexerDb', indexerDb);
21
+ c.set('config', config);
22
+ c.set('client', client);
23
+ c.set('chain', chain);
24
+ await next();
25
+ localDb.$client.close();
26
+ await indexerDb.$client.end();
27
+ });
28
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAErC,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAmB;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAiB;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAiB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAqC;IACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAS;CACzB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAuB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;IAClF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAC,KAAK,CAAA;IAClF,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACjD,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,EAAE;QAC7F,MAAM,EAAE,aAAa;KACtB,CAAC,CAAA;IAEF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IAC7B,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACvB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACvB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACrB,MAAM,IAAI,EAAE,CAAA;IAEZ,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACvB,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;AAC/B,CAAC,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { RepairSelect } from '../local-schema.ts';
2
+ import type { IndexerDatabase, LocalDatabase, WalletClient } from '../types.ts';
3
+ export type EnsureRepairDatasetOptions = {
4
+ localDb: LocalDatabase;
5
+ indexerDb: IndexerDatabase;
6
+ client: WalletClient;
7
+ repair: RepairSelect;
8
+ };
9
+ export declare function ensureRepairDataset({ localDb, indexerDb, client, repair, }: EnsureRepairDatasetOptions): Promise<bigint>;
10
+ //# sourceMappingURL=create-datasets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-datasets.d.ts","sourceRoot":"","sources":["../../../src/pipeline/create-datasets.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/E,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,aAAa,CAAA;IACtB,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;CACrB,CAAA;AAQD,wBAAsB,mBAAmB,CAAC,EACxC,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,GACP,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CA0C9C"}
@@ -0,0 +1,48 @@
1
+ import * as p from '@clack/prompts';
2
+ import * as SP from '@filoz/synapse-core/sp';
3
+ import { getPDPProvider } from '@filoz/synapse-core/sp-registry';
4
+ import { getRepairDataset } from "../db/get-repair-dataset.js";
5
+ import { repairUpdate } from "../db/repair-update.js";
6
+ import { getRepairDatasetMetadata, hashLink } from "../utils.js";
7
+ export async function ensureRepairDataset({ localDb, indexerDb, client, repair, }) {
8
+ const log = p.taskLog({
9
+ title: 'Ensuring repair dataset',
10
+ });
11
+ const provider = await getPDPProvider(client, {
12
+ providerId: repair.targetProviderId,
13
+ });
14
+ if (!provider)
15
+ throw new Error(`Target provider ${repair.targetProviderId} not found or inactive`);
16
+ let datasetId = null;
17
+ const existingDatasetId = await getRepairDataset({
18
+ indexerDb,
19
+ providerId: repair.targetProviderId,
20
+ payer: client.account.address,
21
+ });
22
+ if (existingDatasetId) {
23
+ datasetId = existingDatasetId;
24
+ log.success(`Data set #${datasetId} already exists at ${provider.pdp.serviceURL}`);
25
+ }
26
+ else {
27
+ const { txHash, statusUrl } = await SP.createDataSet(client, {
28
+ payee: provider.payee,
29
+ serviceURL: provider.pdp.serviceURL,
30
+ payer: client.account.address,
31
+ cdn: false,
32
+ metadata: getRepairDatasetMetadata(),
33
+ });
34
+ log.message(`Waiting for data to be created at ${provider.pdp.serviceURL} ${hashLink(txHash, client.chain)}...`);
35
+ const waitForResult = await SP.waitForCreateDataSet({
36
+ statusUrl,
37
+ });
38
+ datasetId = waitForResult.dataSetId;
39
+ log.success(`Data set #${datasetId} created at ${provider.pdp.serviceURL}`);
40
+ }
41
+ await repairUpdate({
42
+ localDb,
43
+ repairId: repair.id,
44
+ targetDataSetId: datasetId,
45
+ });
46
+ return datasetId;
47
+ }
48
+ //# sourceMappingURL=create-datasets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-datasets.js","sourceRoot":"","sources":["../../../src/pipeline/create-datasets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAGrD,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAehE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EACxC,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,GACqB;IAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;QACpB,KAAK,EAAE,yBAAyB;KACjC,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE;QAC5C,UAAU,EAAE,MAAM,CAAC,gBAAgB;KACpC,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,gBAAgB,wBAAwB,CAAC,CAAA;IAElG,IAAI,SAAS,GAAkB,IAAI,CAAA;IAEnC,MAAM,iBAAiB,GAAG,MAAM,gBAAgB,CAAC;QAC/C,SAAS;QACT,UAAU,EAAE,MAAM,CAAC,gBAAgB;QACnC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;KAC9B,CAAC,CAAA;IAEF,IAAI,iBAAiB,EAAE,CAAC;QACtB,SAAS,GAAG,iBAAiB,CAAA;QAC7B,GAAG,CAAC,OAAO,CAAC,aAAa,SAAS,sBAAsB,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IACpF,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE;YAC3D,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU;YACnC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;YAC7B,GAAG,EAAE,KAAK;YACV,QAAQ,EAAE,wBAAwB,EAAE;SACrC,CAAC,CAAA;QACF,GAAG,CAAC,OAAO,CAAC,qCAAqC,QAAQ,CAAC,GAAG,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAChH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,oBAAoB,CAAC;YAClD,SAAS;SACV,CAAC,CAAA;QACF,SAAS,GAAG,aAAa,CAAC,SAAS,CAAA;QACnC,GAAG,CAAC,OAAO,CAAC,aAAa,SAAS,eAAe,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IAC7E,CAAC;IACD,MAAM,YAAY,CAAC;QACjB,OAAO;QACP,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,eAAe,EAAE,SAAS;KAC3B,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC"}