@filoz/repair-cli 0.1.2 → 0.2.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.
Files changed (109) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/cli.js +2 -0
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/commands/datasets.d.ts +1 -0
  5. package/dist/src/commands/datasets.d.ts.map +1 -1
  6. package/dist/src/commands/datasets.js +14 -3
  7. package/dist/src/commands/datasets.js.map +1 -1
  8. package/dist/src/commands/providers.d.ts +1 -0
  9. package/dist/src/commands/providers.d.ts.map +1 -1
  10. package/dist/src/commands/providers.js.map +1 -1
  11. package/dist/src/commands/repair.d.ts +1 -0
  12. package/dist/src/commands/repair.d.ts.map +1 -1
  13. package/dist/src/commands/repair.js +7 -8
  14. package/dist/src/commands/repair.js.map +1 -1
  15. package/dist/src/commands/replicate.d.ts +24 -0
  16. package/dist/src/commands/replicate.d.ts.map +1 -0
  17. package/dist/src/commands/replicate.js +171 -0
  18. package/dist/src/commands/replicate.js.map +1 -0
  19. package/dist/src/commands/setup.d.ts.map +1 -1
  20. package/dist/src/commands/setup.js +15 -0
  21. package/dist/src/commands/setup.js.map +1 -1
  22. package/dist/src/commands/wallet.d.ts +1 -0
  23. package/dist/src/commands/wallet.d.ts.map +1 -1
  24. package/dist/src/db/dedupe-cids.d.ts +22 -0
  25. package/dist/src/db/dedupe-cids.d.ts.map +1 -0
  26. package/dist/src/db/dedupe-cids.js +28 -0
  27. package/dist/src/db/dedupe-cids.js.map +1 -0
  28. package/dist/src/db/find-providers-by-cid.d.ts +9 -0
  29. package/dist/src/db/find-providers-by-cid.d.ts.map +1 -0
  30. package/dist/src/db/{get-providers-by-cid.js → find-providers-by-cid.js} +4 -6
  31. package/dist/src/db/find-providers-by-cid.js.map +1 -0
  32. package/dist/src/db/find-repair-dataset.d.ts +10 -0
  33. package/dist/src/db/find-repair-dataset.d.ts.map +1 -0
  34. package/dist/src/db/{get-repair-dataset.js → find-repair-dataset.js} +3 -4
  35. package/dist/src/db/find-repair-dataset.js.map +1 -0
  36. package/dist/src/db/get-pieces.d.ts +16 -0
  37. package/dist/src/db/get-pieces.d.ts.map +1 -1
  38. package/dist/src/db/get-pieces.js +44 -3
  39. package/dist/src/db/get-pieces.js.map +1 -1
  40. package/dist/src/db/repair-create.d.ts.map +1 -1
  41. package/dist/src/db/repair-create.js +1 -0
  42. package/dist/src/db/repair-create.js.map +1 -1
  43. package/dist/src/db/repair-delete.d.ts.map +1 -1
  44. package/dist/src/db/repair-delete.js +0 -5
  45. package/dist/src/db/repair-delete.js.map +1 -1
  46. package/dist/src/db/replicate-create.d.ts +7 -0
  47. package/dist/src/db/replicate-create.d.ts.map +1 -0
  48. package/dist/src/db/replicate-create.js +78 -0
  49. package/dist/src/db/replicate-create.js.map +1 -0
  50. package/dist/src/db/upsert-operations.js +1 -1
  51. package/dist/src/db/upsert-operations.js.map +1 -1
  52. package/dist/src/local-schema.d.ts +19 -0
  53. package/dist/src/local-schema.d.ts.map +1 -1
  54. package/dist/src/local-schema.js +1 -0
  55. package/dist/src/local-schema.js.map +1 -1
  56. package/dist/src/middleware.d.ts +2 -0
  57. package/dist/src/middleware.d.ts.map +1 -1
  58. package/dist/src/middleware.js +4 -2
  59. package/dist/src/middleware.js.map +1 -1
  60. package/dist/src/pipeline/add-pieces.d.ts +12 -0
  61. package/dist/src/pipeline/add-pieces.d.ts.map +1 -0
  62. package/dist/src/pipeline/add-pieces.js +142 -0
  63. package/dist/src/pipeline/add-pieces.js.map +1 -0
  64. package/dist/src/pipeline/create-datasets.d.ts +3 -1
  65. package/dist/src/pipeline/create-datasets.d.ts.map +1 -1
  66. package/dist/src/pipeline/create-datasets.js +57 -5
  67. package/dist/src/pipeline/create-datasets.js.map +1 -1
  68. package/dist/src/utils.d.ts +32 -2
  69. package/dist/src/utils.d.ts.map +1 -1
  70. package/dist/src/utils.js +40 -7
  71. package/dist/src/utils.js.map +1 -1
  72. package/package.json +1 -1
  73. package/readme.md +110 -7
  74. package/src/cli.ts +2 -0
  75. package/src/commands/datasets.ts +15 -4
  76. package/src/commands/providers.ts +0 -1
  77. package/src/commands/repair.ts +12 -8
  78. package/src/commands/replicate.ts +183 -0
  79. package/src/commands/setup.ts +16 -0
  80. package/src/db/dedupe-cids.ts +49 -0
  81. package/src/db/{get-providers-by-cid.ts → find-providers-by-cid.ts} +5 -10
  82. package/src/db/{get-repair-dataset.ts → find-repair-dataset.ts} +6 -5
  83. package/src/db/get-pieces.ts +105 -3
  84. package/src/db/get-target-dataset.ts +1 -1
  85. package/src/db/repair-create.ts +1 -0
  86. package/src/db/repair-delete.ts +0 -5
  87. package/src/db/replicate-create.ts +106 -0
  88. package/src/db/upsert-operations.ts +1 -1
  89. package/src/local-schema.ts +1 -0
  90. package/src/middleware.ts +4 -2
  91. package/src/pipeline/add-pieces.ts +214 -0
  92. package/src/pipeline/create-datasets.ts +71 -5
  93. package/src/utils.ts +49 -10
  94. package/dist/src/db/get-providers-by-cid.d.ts +0 -10
  95. package/dist/src/db/get-providers-by-cid.d.ts.map +0 -1
  96. package/dist/src/db/get-providers-by-cid.js.map +0 -1
  97. package/dist/src/db/get-repair-dataset.d.ts +0 -9
  98. package/dist/src/db/get-repair-dataset.d.ts.map +0 -1
  99. package/dist/src/db/get-repair-dataset.js.map +0 -1
  100. package/dist/src/db/sync-pieces-onchain.d.ts +0 -10
  101. package/dist/src/db/sync-pieces-onchain.d.ts.map +0 -1
  102. package/dist/src/db/sync-pieces-onchain.js +0 -35
  103. package/dist/src/db/sync-pieces-onchain.js.map +0 -1
  104. package/dist/src/pipeline/pull.d.ts +0 -30
  105. package/dist/src/pipeline/pull.d.ts.map +0 -1
  106. package/dist/src/pipeline/pull.js +0 -169
  107. package/dist/src/pipeline/pull.js.map +0 -1
  108. package/src/db/sync-pieces-onchain.ts +0 -53
  109. package/src/pipeline/pull.ts +0 -255
package/src/utils.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import type { MetadataObject } from '@filoz/synapse-core'
2
2
  import { type Chain, getChain } from '@filoz/synapse-core/chains'
3
+ import * as Piece from '@filoz/synapse-core/piece'
4
+ import type * as SP from '@filoz/synapse-core/sp'
3
5
  import { getTableColumns, type SQL, sql } from 'drizzle-orm'
4
6
  import { drizzle } from 'drizzle-orm/libsql'
5
7
  import type { PgTable } from 'drizzle-orm/pg-core'
@@ -12,11 +14,10 @@ import terminalLink from 'terminal-link'
12
14
  import { createWalletClient, type Hex, http } from 'viem'
13
15
  import { privateKeyToAccount } from 'viem/accounts'
14
16
  import packageJson from '../package.json' with { type: 'json' }
17
+ import type { OperationSelect } from './local-schema.ts'
15
18
  import * as schema from './local-schema.ts'
16
19
  import type { LocalDatabase } from './types.ts'
17
20
 
18
- export const EARLY_REPAIR_SOURCE = 'early-repair6'
19
-
20
21
  export const configSchema = z.object({
21
22
  privateKey: z.string().optional(),
22
23
  indexerMainnetUrl: z.url().optional(),
@@ -95,11 +96,19 @@ export async function migrateLocalDatabase(db: LocalDatabase) {
95
96
  target_provider_id text NOT NULL,
96
97
  target_provider_url text NOT NULL,
97
98
  target_data_set_id text,
99
+ repair_data_set_id text,
98
100
  block_number text NOT NULL,
99
101
  created_at integer NOT NULL,
100
102
  updated_at integer NOT NULL
101
103
  )
102
104
  `)
105
+ try {
106
+ await db.$client.execute(`
107
+ ALTER TABLE repairs ADD COLUMN repair_data_set_id text
108
+ `)
109
+ } catch {
110
+ // Column already exists on databases created with the updated schema.
111
+ }
103
112
  await db.$client.execute(`
104
113
  CREATE TABLE IF NOT EXISTS operations (
105
114
  id integer PRIMARY KEY AUTOINCREMENT NOT NULL,
@@ -130,14 +139,6 @@ export function hashLink(hash: string, chain: Chain) {
130
139
  return link
131
140
  }
132
141
 
133
- /** Get metadata for the single IPFS-enabled repair dataset. */
134
- export function getRepairDatasetMetadata(): MetadataObject {
135
- return {
136
- source: EARLY_REPAIR_SOURCE,
137
- withIPFSIndexing: '',
138
- }
139
- }
140
-
141
142
  /**
142
143
  * Get a piece from a service URL
143
144
  */
@@ -200,3 +201,41 @@ export const buildConflictUpdateColumns = <T extends PgTable | SQLiteTable, Q ex
200
201
 
201
202
  return r
202
203
  }
204
+
205
+ /**
206
+ * Filter out operations by CID
207
+ */
208
+ export function excludeOperationsByCid(operations: OperationSelect[], cid: string) {
209
+ const operationToCommit: OperationSelect[] = []
210
+ const operationToFailed: OperationSelect[] = []
211
+ for (const operation of operations) {
212
+ if (operation.cid === cid) {
213
+ operationToFailed.push(operation)
214
+ } else {
215
+ operationToCommit.push(operation)
216
+ }
217
+ }
218
+ return { operationToCommit, operationToFailed }
219
+ }
220
+
221
+ /**
222
+ * Convert operations to pull pieces deduped by CID
223
+ */
224
+ export function operationsToPullPieces(operations: OperationSelect[]) {
225
+ const cids = new Set<string>()
226
+ const pieces: SP.PullPieceInput[] = []
227
+ for (const operation of operations) {
228
+ if (cids.has(operation.cid)) {
229
+ continue
230
+ }
231
+ pieces.push({
232
+ sourceUrl: Piece.createPieceUrlPDP({
233
+ cid: operation.cid,
234
+ serviceURL: operation.alternateProvider,
235
+ }),
236
+ pieceCid: Piece.from(operation.cid),
237
+ })
238
+ cids.add(operation.cid)
239
+ }
240
+ return pieces
241
+ }
@@ -1,10 +0,0 @@
1
- import type { IndexerDatabase, RepairProvider } from '../types.ts';
2
- export type GetProvidersByCidOptions = {
3
- indexerDb: IndexerDatabase;
4
- cids: readonly string[];
5
- excludedProviderIds: readonly bigint[];
6
- blockNumber: bigint;
7
- };
8
- export type ProvidersByCid = Record<string, RepairProvider[]>;
9
- export declare function getProvidersByCid({ indexerDb, cids, excludedProviderIds, blockNumber, }: GetProvidersByCidOptions): Promise<ProvidersByCid>;
10
- //# sourceMappingURL=get-providers-by-cid.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-providers-by-cid.d.ts","sourceRoot":"","sources":["../../../src/db/get-providers-by-cid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAElE,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,eAAe,CAAA;IAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IACvB,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAKD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;AAS7D,wBAAsB,iBAAiB,CAAC,EACtC,SAAS,EACT,IAAI,EACJ,mBAAmB,EACnB,WAAW,GACZ,EAAE,wBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC,CA+CpD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-providers-by-cid.js","sourceRoot":"","sources":["../../../src/db/get-providers-by-cid.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { Address } from 'viem';
2
- import type { IndexerDatabase } from '../types.ts';
3
- export type GetRepairDatasetOptions = {
4
- indexerDb: IndexerDatabase;
5
- providerId: bigint;
6
- payer: Address;
7
- };
8
- export declare function getRepairDataset({ indexerDb, providerId, payer, }: GetRepairDatasetOptions): Promise<bigint | null>;
9
- //# sourceMappingURL=get-repair-dataset.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-repair-dataset.d.ts","sourceRoot":"","sources":["../../../src/db/get-repair-dataset.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAGlD,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,eAAe,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAOD,wBAAsB,gBAAgB,CAAC,EACrC,SAAS,EACT,UAAU,EACV,KAAK,GACN,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BlD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-repair-dataset.js","sourceRoot":"","sources":["../../../src/db/get-repair-dataset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAajD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACrC,SAAS,EACT,UAAU,EACV,KAAK,GACmB;IACxB,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAErC,MAAM,MAAM,GAAG,MAAM,SAAS;SAC3B,MAAM,CAAC;QACN,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;KACrC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;SACrB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,EAC1C,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAClC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EACnC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,EAC9C,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC/C,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAClC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAC3C,CACF;SACA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACvC,KAAK,CAAC,CAAC,CAAC,CAAA;IAEX,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC5B,CAAC"}
@@ -1,10 +0,0 @@
1
- import type { OperationSelect } from '../local-schema.ts';
2
- import type { IndexerDatabase, LocalDatabase } from '../types.ts';
3
- export type SyncPiecesOnchainOptions = {
4
- indexerDb: IndexerDatabase;
5
- localDb: LocalDatabase;
6
- dataSetId: bigint;
7
- cidToOperation: Map<string, OperationSelect>;
8
- };
9
- export declare function syncPiecesOnchain({ indexerDb, localDb, dataSetId, cidToOperation }: SyncPiecesOnchainOptions): Promise<number>;
10
- //# sourceMappingURL=sync-pieces-onchain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-pieces-onchain.d.ts","sourceRoot":"","sources":["../../../src/db/sync-pieces-onchain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGjE,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,eAAe,CAAA;IAC1B,OAAO,EAAE,aAAa,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAC7C,CAAA;AAKD,wBAAsB,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,wBAAwB,mBAqClH"}
@@ -1,35 +0,0 @@
1
- import { and, eq, inArray } from 'drizzle-orm';
2
- import { upsertOperations } from "./upsert-operations.js";
3
- export async function syncPiecesOnchain({ indexerDb, localDb, dataSetId, cidToOperation }) {
4
- const cids = Array.from(cidToOperation.keys());
5
- const schema = indexerDb._.fullSchema;
6
- let completedOperations = 0;
7
- const rows = await indexerDb
8
- .select({ cid: schema.pieces.cid })
9
- .from(schema.pieces)
10
- .where(and(eq(schema.pieces.dataSetId, dataSetId), eq(schema.pieces.removed, false), inArray(schema.pieces.cid, cids)));
11
- const existingCids = new Set();
12
- const completedOperation = [];
13
- for (const row of rows) {
14
- const operation = cidToOperation.get(row.cid);
15
- if (!operation) {
16
- continue;
17
- }
18
- completedOperation.push({
19
- ...operation,
20
- status: 'completed',
21
- error: null,
22
- });
23
- existingCids.add(row.cid);
24
- cidToOperation.delete(row.cid);
25
- completedOperations++;
26
- }
27
- if (completedOperation.length > 0) {
28
- await upsertOperations({
29
- localDb,
30
- operations: completedOperation,
31
- });
32
- }
33
- return completedOperations;
34
- }
35
- //# sourceMappingURL=sync-pieces-onchain.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-pieces-onchain.js","sourceRoot":"","sources":["../../../src/db/sync-pieces-onchain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAYzD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAA4B;IACjH,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IACrC,IAAI,mBAAmB,GAAG,CAAC,CAAA;IAC3B,MAAM,IAAI,GAAG,MAAM,SAAS;SACzB,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;SAClC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;SACnB,KAAK,CACJ,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAChH,CAAA;IAEH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;IACtC,MAAM,kBAAkB,GAAsB,EAAE,CAAA;IAEhD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAQ;QACV,CAAC;QACD,kBAAkB,CAAC,IAAI,CAAC;YACtB,GAAG,SAAS;YACZ,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QACF,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACzB,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,mBAAmB,EAAE,CAAA;IACvB,CAAC;IAED,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,gBAAgB,CAAC;YACrB,OAAO;YACP,UAAU,EAAE,kBAAkB;SAC/B,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,mBAAmB,CAAA;AAC5B,CAAC"}
@@ -1,30 +0,0 @@
1
- import { taskLog } from '@clack/prompts';
2
- import type { OperationSelect, RepairSelect } from '../local-schema.ts';
3
- import type { IndexerDatabase, LocalDatabase, WalletClient } from '../types.ts';
4
- export type PullPiecesBatch = {
5
- operations: OperationSelect[];
6
- };
7
- export type RunPullPiecesPhaseOptions = {
8
- localDb: LocalDatabase;
9
- indexerDb: IndexerDatabase;
10
- repair: RepairSelect;
11
- concurrency: number;
12
- batchSize: number;
13
- client: WalletClient;
14
- reset: boolean;
15
- };
16
- export declare function createPullPiecesWorker({ localDb, indexerDb, repair, client, state, log, }: {
17
- localDb: LocalDatabase;
18
- indexerDb: IndexerDatabase;
19
- repair: RepairSelect;
20
- client: WalletClient;
21
- state: {
22
- totalBatches: number;
23
- totalOperations: number;
24
- completedOperations: number;
25
- failedOperations: number;
26
- };
27
- log: ReturnType<typeof taskLog>;
28
- }): (batch: PullPiecesBatch, batchNumber: number) => Promise<void>;
29
- export declare function runPullPiecesPhase({ localDb, indexerDb, repair, concurrency, batchSize, client, reset, }: RunPullPiecesPhaseOptions): Promise<void>;
30
- //# sourceMappingURL=pull.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/pipeline/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAUxC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/E,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,aAAa,CAAA;IACtB,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,EAAE,YAAY,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAGD,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,GACJ,EAAE;IACD,OAAO,EAAE,aAAa,CAAA;IACtB,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAA;QACpB,eAAe,EAAE,MAAM,CAAA;QACvB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,gBAAgB,EAAE,MAAM,CAAA;KACzB,CAAA;IACD,GAAG,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAA;CAChC,IACe,OAAO,eAAe,EAAE,aAAa,MAAM,mBA+H1D;AAQD,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,SAAS,EACT,MAAM,EACN,WAAW,EACX,SAAS,EACT,MAAM,EACN,KAAK,GACN,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D3C"}
@@ -1,169 +0,0 @@
1
- import { taskLog } from '@clack/prompts';
2
- import * as Piece from '@filoz/synapse-core/piece';
3
- import { createPieceUrlPDP } from '@filoz/synapse-core/piece';
4
- import * as SP from '@filoz/synapse-core/sp';
5
- import { and, asc, eq, gt, inArray } from 'drizzle-orm';
6
- import PQueue from 'p-queue';
7
- import { getTargetDataset } from "../db/get-target-dataset.js";
8
- import { syncPiecesOnchain } from "../db/sync-pieces-onchain.js";
9
- import { updateOperation } from "../db/update-operation.js";
10
- import { upsertOperations } from "../db/upsert-operations.js";
11
- import { hashLink } from "../utils.js";
12
- export function createPullPiecesWorker({ localDb, indexerDb, repair, client, state, log, }) {
13
- return async (batch, batchNumber) => {
14
- let completedCids = 0;
15
- let failedCids = 0;
16
- const cidToOperation = new Map();
17
- const spin = log.group(`Batch ${batchNumber}/${state.totalBatches}`);
18
- spin.message(`Pull 0 completed, 0 failed`);
19
- try {
20
- const dataset = await getTargetDataset({ localDb, repairId: repair.id, client });
21
- for (const operation of batch.operations) {
22
- cidToOperation.set(operation.cid, operation);
23
- }
24
- const completedOperations1 = await syncPiecesOnchain({
25
- indexerDb,
26
- localDb,
27
- dataSetId: dataset.dataSetId,
28
- cidToOperation,
29
- });
30
- state.completedOperations += completedOperations1;
31
- completedCids += completedOperations1;
32
- const pullPieces = [];
33
- for (const [cid, operation] of cidToOperation) {
34
- const pieceCid = Piece.from(cid);
35
- const sourceUrl = createPieceUrlPDP({
36
- cid,
37
- serviceURL: operation.alternateProvider,
38
- });
39
- pullPieces.push({ pieceCid, sourceUrl });
40
- }
41
- if (pullPieces.length > 0) {
42
- const pullResult = await SP.waitForPullPieces(client, {
43
- serviceURL: repair.targetProviderUrl,
44
- dataSetId: dataset.dataSetId,
45
- clientDataSetId: dataset.clientDataSetId,
46
- pieces: pullPieces,
47
- timeout: 1000 * 60 * 30,
48
- onStatus: (_status) => {
49
- const completed = _status.pieces.filter((piece) => piece.status === 'complete').length;
50
- const failed = _status.pieces.filter((piece) => piece.status === 'failed').length;
51
- spin.message(`Pull ${completed} completed, ${failed} failed`);
52
- },
53
- });
54
- for (const { pieceCid, status } of pullResult.pieces) {
55
- const cid = pieceCid.toString();
56
- const operation = cidToOperation.get(cid);
57
- if (!operation) {
58
- console.log(`operation not found for cid ${cid}`);
59
- continue;
60
- }
61
- if (status !== 'complete') {
62
- state.failedOperations++;
63
- failedCids++;
64
- cidToOperation.delete(cid);
65
- await updateOperation({
66
- localDb,
67
- operationId: operation.id,
68
- status: 'failed',
69
- error: `pull failed with status ${status}`,
70
- });
71
- }
72
- }
73
- }
74
- const completedOperations2 = await syncPiecesOnchain({
75
- indexerDb,
76
- localDb,
77
- dataSetId: dataset.dataSetId,
78
- cidToOperation,
79
- });
80
- state.completedOperations += completedOperations2;
81
- completedCids += completedOperations2;
82
- const commitPieces = [];
83
- for (const [cid] of cidToOperation) {
84
- commitPieces.push({
85
- pieceCid: Piece.from(cid),
86
- });
87
- }
88
- if (commitPieces.length > 0) {
89
- const addPiecesResult = await SP.addPieces(client, {
90
- serviceURL: repair.targetProviderUrl,
91
- dataSetId: dataset.dataSetId,
92
- clientDataSetId: dataset.clientDataSetId,
93
- pieces: commitPieces,
94
- });
95
- spin.message(`Waiting for add pieces ${hashLink(addPiecesResult.txHash, client.chain)}...`);
96
- const addPiecesResult2 = await SP.waitForAddPieces(addPiecesResult);
97
- state.completedOperations += cidToOperation.size;
98
- completedCids += cidToOperation.size;
99
- await upsertOperations({
100
- localDb,
101
- operations: Array.from(cidToOperation.values()).map((operation) => ({
102
- ...operation,
103
- status: 'completed',
104
- error: null,
105
- result: { dataSetId: addPiecesResult2.dataSetId, txHash: addPiecesResult2.txHash },
106
- })),
107
- });
108
- }
109
- spin.success(`Batch ${batchNumber}/${state.totalBatches} ${completedCids} added, ${failedCids} failed`);
110
- }
111
- catch (error) {
112
- state.failedOperations += cidToOperation.size;
113
- const message = error instanceof Error ? error.message : 'Unknown error';
114
- spin.error(`Batch ${batchNumber}/${state.totalBatches} - ${message.replace(/\n/g, ' ')}`);
115
- await upsertOperations({
116
- localDb,
117
- operations: Array.from(cidToOperation.values()).map((operation) => ({
118
- ...operation,
119
- status: 'failed',
120
- error: message,
121
- })),
122
- });
123
- }
124
- };
125
- }
126
- export async function runPullPiecesPhase({ localDb, indexerDb, repair, concurrency, batchSize, client, reset, }) {
127
- const localSchema = localDb._.fullSchema;
128
- const pullConcurrency = Math.max(1, concurrency);
129
- const pullBatchSize = Math.max(1, batchSize);
130
- let pullCursor = 0;
131
- const totalOperations = await localDb.$count(localSchema.operations, and(eq(localSchema.operations.repairId, repair.id), eq(localSchema.operations.type, 'add_piece'), inArray(localSchema.operations.status, reset ? ['pending', 'failed'] : ['pending'])));
132
- let batchNumber = 0;
133
- const state = {
134
- totalBatches: Math.ceil(totalOperations / pullBatchSize),
135
- totalOperations,
136
- completedOperations: 0,
137
- failedOperations: 0,
138
- };
139
- const log = taskLog({
140
- title: 'Pulling pieces',
141
- limit: 1,
142
- });
143
- async function getNextPullBatch() {
144
- const operations = await localDb.query.operations.findMany({
145
- where: and(eq(localSchema.operations.repairId, repair.id), eq(localSchema.operations.type, 'add_piece'), inArray(localSchema.operations.status, reset ? ['pending', 'failed'] : ['pending']), gt(localSchema.operations.id, pullCursor)),
146
- orderBy: [asc(localSchema.operations.id)],
147
- limit: pullBatchSize,
148
- });
149
- if (operations.length === 0) {
150
- return null;
151
- }
152
- pullCursor = operations.at(-1)?.id ?? pullCursor;
153
- return { operations };
154
- }
155
- const pullPiecesWorker = createPullPiecesWorker({ localDb, indexerDb, repair, client, state, log });
156
- const pullPiecesQueue = new PQueue({ concurrency: pullConcurrency });
157
- while (true) {
158
- await pullPiecesQueue.onSizeLessThan(pullConcurrency);
159
- const batch = await getNextPullBatch();
160
- if (!batch)
161
- break;
162
- batchNumber++;
163
- const currentBatchNumber = batchNumber;
164
- pullPiecesQueue.add(() => pullPiecesWorker(batch, currentBatchNumber)).catch(console.error);
165
- }
166
- await pullPiecesQueue.onIdle();
167
- log.success(`Pulled ${state.completedOperations} pieces, ${state.failedOperations} failed`);
168
- }
169
- //# sourceMappingURL=pull.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/pipeline/pull.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- import { and, eq, inArray } from 'drizzle-orm'
2
- import type { OperationInsert, OperationSelect } from '../local-schema.ts'
3
- import type { IndexerDatabase, LocalDatabase } from '../types.ts'
4
- import { upsertOperations } from './upsert-operations.ts'
5
-
6
- export type SyncPiecesOnchainOptions = {
7
- indexerDb: IndexerDatabase
8
- localDb: LocalDatabase
9
- dataSetId: bigint
10
- cidToOperation: Map<string, OperationSelect>
11
- }
12
-
13
- /**
14
- * Sync pieces onchain to avoid duplicates.
15
- */
16
- export async function syncPiecesOnchain({ indexerDb, localDb, dataSetId, cidToOperation }: SyncPiecesOnchainOptions) {
17
- const cids = Array.from(cidToOperation.keys())
18
- const schema = indexerDb._.fullSchema
19
- let completedOperations = 0
20
- const rows = await indexerDb
21
- .select({ cid: schema.pieces.cid })
22
- .from(schema.pieces)
23
- .where(
24
- and(eq(schema.pieces.dataSetId, dataSetId), eq(schema.pieces.removed, false), inArray(schema.pieces.cid, cids))
25
- )
26
-
27
- const existingCids = new Set<string>()
28
- const completedOperation: OperationInsert[] = []
29
-
30
- for (const row of rows) {
31
- const operation = cidToOperation.get(row.cid)
32
- if (!operation) {
33
- continue
34
- }
35
- completedOperation.push({
36
- ...operation,
37
- status: 'completed',
38
- error: null,
39
- })
40
- existingCids.add(row.cid)
41
- cidToOperation.delete(row.cid)
42
- completedOperations++
43
- }
44
-
45
- if (completedOperation.length > 0) {
46
- await upsertOperations({
47
- localDb,
48
- operations: completedOperation,
49
- })
50
- }
51
-
52
- return completedOperations
53
- }