@filoz/repair-cli 0.4.0 → 1.0.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 (106) hide show
  1. package/dist/package.json +3 -3
  2. package/dist/src/api.d.ts +35 -0
  3. package/dist/src/api.d.ts.map +1 -0
  4. package/dist/src/api.js +118 -0
  5. package/dist/src/api.js.map +1 -0
  6. package/dist/src/commands/datasets.d.ts +3 -5
  7. package/dist/src/commands/datasets.d.ts.map +1 -1
  8. package/dist/src/commands/datasets.js +24 -33
  9. package/dist/src/commands/datasets.js.map +1 -1
  10. package/dist/src/commands/providers.d.ts +3 -5
  11. package/dist/src/commands/providers.d.ts.map +1 -1
  12. package/dist/src/commands/providers.js +32 -33
  13. package/dist/src/commands/providers.js.map +1 -1
  14. package/dist/src/commands/repair.d.ts +3 -5
  15. package/dist/src/commands/repair.d.ts.map +1 -1
  16. package/dist/src/commands/replicate.d.ts +3 -5
  17. package/dist/src/commands/replicate.d.ts.map +1 -1
  18. package/dist/src/commands/second-copy.d.ts +3 -5
  19. package/dist/src/commands/second-copy.d.ts.map +1 -1
  20. package/dist/src/commands/session-key.d.ts +3 -5
  21. package/dist/src/commands/session-key.d.ts.map +1 -1
  22. package/dist/src/commands/setup.d.ts.map +1 -1
  23. package/dist/src/commands/setup.js +11 -32
  24. package/dist/src/commands/setup.js.map +1 -1
  25. package/dist/src/commands/wallet.d.ts +3 -5
  26. package/dist/src/commands/wallet.d.ts.map +1 -1
  27. package/dist/src/db/dedupe-cids.d.ts +6 -7
  28. package/dist/src/db/dedupe-cids.d.ts.map +1 -1
  29. package/dist/src/db/dedupe-cids.js +2 -14
  30. package/dist/src/db/dedupe-cids.js.map +1 -1
  31. package/dist/src/db/find-repair-dataset.d.ts +3 -3
  32. package/dist/src/db/find-repair-dataset.d.ts.map +1 -1
  33. package/dist/src/db/find-repair-dataset.js +16 -14
  34. package/dist/src/db/find-repair-dataset.js.map +1 -1
  35. package/dist/src/db/get-active-data-set-ids.d.ts +9 -0
  36. package/dist/src/db/get-active-data-set-ids.d.ts.map +1 -0
  37. package/dist/src/db/get-active-data-set-ids.js +9 -0
  38. package/dist/src/db/get-active-data-set-ids.js.map +1 -0
  39. package/dist/src/db/get-alternate-provider-urls.d.ts +6 -0
  40. package/dist/src/db/get-alternate-provider-urls.d.ts.map +1 -0
  41. package/dist/src/db/get-alternate-provider-urls.js +24 -0
  42. package/dist/src/db/get-alternate-provider-urls.js.map +1 -0
  43. package/dist/src/db/get-pieces.d.ts +8 -27
  44. package/dist/src/db/get-pieces.d.ts.map +1 -1
  45. package/dist/src/db/get-pieces.js +44 -97
  46. package/dist/src/db/get-pieces.js.map +1 -1
  47. package/dist/src/db/get-repair-provider.d.ts +2 -2
  48. package/dist/src/db/get-repair-provider.d.ts.map +1 -1
  49. package/dist/src/db/get-repair-provider.js +8 -20
  50. package/dist/src/db/get-repair-provider.js.map +1 -1
  51. package/dist/src/db/repair-create.js +3 -3
  52. package/dist/src/db/repair-create.js.map +1 -1
  53. package/dist/src/db/replicate-create.d.ts.map +1 -1
  54. package/dist/src/db/replicate-create.js +13 -21
  55. package/dist/src/db/replicate-create.js.map +1 -1
  56. package/dist/src/db/second-copy-create.js +2 -2
  57. package/dist/src/db/second-copy-create.js.map +1 -1
  58. package/dist/src/local-schema.d.ts +1 -1
  59. package/dist/src/middleware.d.ts +7 -11
  60. package/dist/src/middleware.d.ts.map +1 -1
  61. package/dist/src/middleware.js +6 -10
  62. package/dist/src/middleware.js.map +1 -1
  63. package/dist/src/pipeline/add-pieces.d.ts +3 -3
  64. package/dist/src/pipeline/add-pieces.d.ts.map +1 -1
  65. package/dist/src/pipeline/add-pieces.js +15 -7
  66. package/dist/src/pipeline/add-pieces.js.map +1 -1
  67. package/dist/src/pipeline/create-datasets.d.ts +4 -4
  68. package/dist/src/pipeline/create-datasets.d.ts.map +1 -1
  69. package/dist/src/pipeline/create-datasets.js +7 -14
  70. package/dist/src/pipeline/create-datasets.js.map +1 -1
  71. package/dist/src/types.d.ts +6 -7
  72. package/dist/src/types.d.ts.map +1 -1
  73. package/dist/src/utils.d.ts +7 -10
  74. package/dist/src/utils.d.ts.map +1 -1
  75. package/dist/src/utils.js +1 -2
  76. package/dist/src/utils.js.map +1 -1
  77. package/package.json +3 -3
  78. package/readme.md +16 -13
  79. package/src/api.ts +220 -0
  80. package/src/commands/datasets.ts +24 -36
  81. package/src/commands/providers.ts +34 -42
  82. package/src/commands/setup.ts +12 -35
  83. package/src/db/dedupe-cids.ts +7 -24
  84. package/src/db/find-repair-dataset.ts +17 -28
  85. package/src/db/get-active-data-set-ids.ts +29 -0
  86. package/src/db/get-alternate-provider-urls.ts +43 -0
  87. package/src/db/get-pieces.ts +82 -214
  88. package/src/db/get-repair-provider.ts +10 -30
  89. package/src/db/repair-create.ts +3 -3
  90. package/src/db/replicate-create.ts +13 -21
  91. package/src/db/second-copy-create.ts +2 -2
  92. package/src/middleware.ts +7 -11
  93. package/src/pipeline/add-pieces.ts +20 -10
  94. package/src/pipeline/create-datasets.ts +9 -29
  95. package/src/types.ts +9 -7
  96. package/src/utils.ts +2 -4
  97. package/dist/src/db/find-providers-by-cid.d.ts +0 -9
  98. package/dist/src/db/find-providers-by-cid.d.ts.map +0 -1
  99. package/dist/src/db/find-providers-by-cid.js +0 -43
  100. package/dist/src/db/find-providers-by-cid.js.map +0 -1
  101. package/dist/src/indexer-schema.d.ts +0 -549
  102. package/dist/src/indexer-schema.d.ts.map +0 -1
  103. package/dist/src/indexer-schema.js +0 -56
  104. package/dist/src/indexer-schema.js.map +0 -1
  105. package/src/db/find-providers-by-cid.ts +0 -70
  106. package/src/indexer-schema.ts +0 -77
@@ -1,18 +1,16 @@
1
1
  import { Cli, z } from 'incur';
2
2
  export declare const sessionKey: Cli.Cli<{}, z.ZodObject<{
3
- indexerDb: z.ZodCustom<import("../types.ts").IndexerDatabase, import("../types.ts").IndexerDatabase>;
3
+ api: z.ZodCustom<import("../types.ts").IndexerApi, import("../types.ts").IndexerApi>;
4
4
  localDb: z.ZodCustom<import("../types.ts").LocalDatabase, import("../types.ts").LocalDatabase>;
5
5
  config: z.ZodCustom<import("iso-conf").Conf<z.ZodObject<{
6
6
  privateKey: z.ZodOptional<z.ZodString>;
7
- indexerMainnetUrl: z.ZodOptional<z.ZodURL>;
8
- indexerCalibrationUrl: z.ZodOptional<z.ZodURL>;
7
+ apiUrl: z.ZodOptional<z.ZodURL>;
9
8
  chainId: z.ZodOptional<z.ZodNumber>;
10
9
  dbPath: z.ZodOptional<z.ZodString>;
11
10
  source: z.ZodOptional<z.ZodString>;
12
11
  }, z.core.$strip>>, import("iso-conf").Conf<z.ZodObject<{
13
12
  privateKey: z.ZodOptional<z.ZodString>;
14
- indexerMainnetUrl: z.ZodOptional<z.ZodURL>;
15
- indexerCalibrationUrl: z.ZodOptional<z.ZodURL>;
13
+ apiUrl: z.ZodOptional<z.ZodURL>;
16
14
  chainId: z.ZodOptional<z.ZodNumber>;
17
15
  dbPath: z.ZodOptional<z.ZodString>;
18
16
  source: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"session-key.d.ts","sourceRoot":"","sources":["../../../src/commands/session-key.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAS9B,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;6BAGrB,CAAA"}
1
+ {"version":3,"file":"session-key.d.ts","sourceRoot":"","sources":["../../../src/commands/session-key.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAS9B,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;6BAGrB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAK,MAAM,OAAO,CAAA;AAqB9B,eAAO,MAAM,KAAK;;;;;;;wBAqIhB,CAAA"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAK,MAAM,OAAO,CAAA;AAgB9B,eAAO,MAAM,KAAK;;;;;;;wBAmHhB,CAAA"}
@@ -2,19 +2,16 @@ import * as p from '@clack/prompts';
2
2
  import { Cli, z } from 'incur';
3
3
  import path from 'path';
4
4
  import { privateKeyToAccount } from 'viem/accounts';
5
+ import { DEFAULT_API_URL } from "../api.js";
5
6
  import { config, createLocalDatabase, globalOptions, migrateLocalDatabase } from "../utils.js";
6
- function validatePostgresUrl(value) {
7
- let url;
7
+ function validateHttpUrl(value) {
8
8
  try {
9
- url = new URL(value);
9
+ const url = new URL(value);
10
+ return url.protocol === 'http:' || url.protocol === 'https:';
10
11
  }
11
12
  catch {
12
13
  return false;
13
14
  }
14
- if (url.protocol !== 'postgresql:' && url.protocol !== 'postgres:') {
15
- return false;
16
- }
17
- return Boolean(url.hostname && url.username && url.password && url.pathname.length > 1);
18
15
  }
19
16
  export const setup = Cli.create('setup', {
20
17
  description: 'Setup the CLI',
@@ -38,34 +35,17 @@ export const setup = Cli.create('setup', {
38
35
  retryable: false,
39
36
  });
40
37
  }
41
- const indexerMainnetUrl = await p.text({
42
- message: 'Enter your Mainnet Indexer Postgres URL',
43
- validate(value) {
44
- if (!value || !validatePostgresUrl(value)) {
45
- return `Invalid postgres URL!`;
46
- }
47
- },
48
- initialValue: config.get('indexerMainnetUrl'),
49
- withGuide: false,
50
- });
51
- if (p.isCancel(indexerMainnetUrl)) {
52
- return c.error({
53
- code: 'SETUP_CANCELLED',
54
- message: 'Setup cancelled',
55
- retryable: false,
56
- });
57
- }
58
- const indexerCalibrationUrl = await p.text({
59
- message: 'Enter your Calibration Indexer Postgres URL',
38
+ const apiUrl = await p.text({
39
+ message: 'Enter the Filecoin API URL',
60
40
  validate(value) {
61
- if (!value || !validatePostgresUrl(value)) {
62
- return `Invalid postgres URL!`;
41
+ if (!value || !validateHttpUrl(value)) {
42
+ return `Invalid http(s) URL!`;
63
43
  }
64
44
  },
65
- initialValue: config.get('indexerCalibrationUrl'),
45
+ initialValue: config.get('apiUrl') ?? DEFAULT_API_URL,
66
46
  withGuide: false,
67
47
  });
68
- if (p.isCancel(indexerCalibrationUrl)) {
48
+ if (p.isCancel(apiUrl)) {
69
49
  return c.error({
70
50
  code: 'SETUP_CANCELLED',
71
51
  message: 'Setup cancelled',
@@ -115,8 +95,7 @@ export const setup = Cli.create('setup', {
115
95
  });
116
96
  }
117
97
  config.set('privateKey', pk);
118
- config.set('indexerMainnetUrl', indexerMainnetUrl);
119
- config.set('indexerCalibrationUrl', indexerCalibrationUrl);
98
+ config.set('apiUrl', apiUrl);
120
99
  config.set('chainId', chainId);
121
100
  config.set('dbPath', dbPath);
122
101
  config.set('source', source);
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,16 @@
1
1
  import { Cli, z } from 'incur';
2
2
  export declare const wallet: Cli.Cli<{}, z.ZodObject<{
3
- indexerDb: z.ZodCustom<import("../types.ts").IndexerDatabase, import("../types.ts").IndexerDatabase>;
3
+ api: z.ZodCustom<import("../types.ts").IndexerApi, import("../types.ts").IndexerApi>;
4
4
  localDb: z.ZodCustom<import("../types.ts").LocalDatabase, import("../types.ts").LocalDatabase>;
5
5
  config: z.ZodCustom<import("iso-conf").Conf<z.ZodObject<{
6
6
  privateKey: z.ZodOptional<z.ZodString>;
7
- indexerMainnetUrl: z.ZodOptional<z.ZodURL>;
8
- indexerCalibrationUrl: z.ZodOptional<z.ZodURL>;
7
+ apiUrl: z.ZodOptional<z.ZodURL>;
9
8
  chainId: z.ZodOptional<z.ZodNumber>;
10
9
  dbPath: z.ZodOptional<z.ZodString>;
11
10
  source: z.ZodOptional<z.ZodString>;
12
11
  }, z.core.$strip>>, import("iso-conf").Conf<z.ZodObject<{
13
12
  privateKey: z.ZodOptional<z.ZodString>;
14
- indexerMainnetUrl: z.ZodOptional<z.ZodURL>;
15
- indexerCalibrationUrl: z.ZodOptional<z.ZodURL>;
13
+ apiUrl: z.ZodOptional<z.ZodURL>;
16
14
  chainId: z.ZodOptional<z.ZodNumber>;
17
15
  dbPath: z.ZodOptional<z.ZodString>;
18
16
  source: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAM9B,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;6BAGjB,CAAA"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAM9B,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;6BAGjB,CAAA"}
@@ -1,20 +1,19 @@
1
1
  import type { OperationSelect } from '../local-schema.ts';
2
- import type { IndexerDatabase, LocalDatabase } from '../types.ts';
3
- export type SyncPiecesOnchainOptions = {
4
- indexerDb: IndexerDatabase;
2
+ import type { LocalDatabase } from '../types.ts';
3
+ export type DedupeCidsOptions = {
5
4
  localDb: LocalDatabase;
6
- dataSetId: bigint;
5
+ existingCids: ReadonlySet<string>;
7
6
  operations: OperationSelect[];
8
7
  };
9
- export declare function dedupeCids({ indexerDb, localDb, dataSetId, operations }: SyncPiecesOnchainOptions): Promise<{
10
- metadata: import("@filoz/synapse-core").MetadataObject;
11
- cid: string;
8
+ export declare function dedupeCids({ localDb, existingCids, operations }: DedupeCidsOptions): Promise<{
12
9
  id: number;
13
10
  status: import("../local-schema.ts").OperationStatus;
14
11
  createdAt: number;
15
12
  updatedAt: number;
16
13
  repairId: number;
17
14
  type: import("../local-schema.ts").OperationType;
15
+ cid: string;
16
+ metadata: import("@filoz/synapse-core").MetadataObject;
18
17
  alternateProvider: string;
19
18
  txHash: string | null;
20
19
  error: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"dedupe-cids.d.ts","sourceRoot":"","sources":["../../../src/db/dedupe-cids.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,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,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B,CAAA;AAMD,wBAAsB,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,wBAAwB;;;;;;;;;;;;KAgCvG"}
1
+ {"version":3,"file":"dedupe-cids.d.ts","sourceRoot":"","sources":["../../../src/db/dedupe-cids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,aAAa,CAAA;IAEtB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B,CAAA;AAMD,wBAAsB,UAAU,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,iBAAiB;;;;;;;;;;;;KAgBxF"}
@@ -1,18 +1,6 @@
1
- import { and, eq, inArray } from 'drizzle-orm';
2
1
  import { upsertOperations } from "./upsert-operations.js";
3
- export async function dedupeCids({ indexerDb, localDb, dataSetId, operations }) {
4
- const cids = operations.map((operation) => operation.cid);
5
- const schema = indexerDb._.fullSchema;
6
- const rows = await indexerDb
7
- .select({ cid: schema.pieces.cid })
8
- .from(schema.pieces)
9
- .where(and(eq(schema.pieces.dataSetId, dataSetId), eq(schema.pieces.removed, false), inArray(schema.pieces.cid, cids)));
10
- const existingCids = new Set();
11
- const completedOperations = [];
12
- for (const row of rows) {
13
- completedOperations.push(...operations.filter((operation) => operation.cid === row.cid));
14
- existingCids.add(row.cid);
15
- }
2
+ export async function dedupeCids({ localDb, existingCids, operations }) {
3
+ const completedOperations = operations.filter((operation) => existingCids.has(operation.cid));
16
4
  if (completedOperations.length > 0) {
17
5
  await upsertOperations({
18
6
  localDb,
@@ -1 +1 @@
1
- {"version":3,"file":"dedupe-cids.js","sourceRoot":"","sources":["../../../src/db/dedupe-cids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAazD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAA4B;IACtG,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAErC,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,mBAAmB,GAAsB,EAAE,CAAA;IAEjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,mBAAmB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QACxF,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,gBAAgB,CAAC;YACrB,OAAO;YACP,UAAU,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAClD,GAAG,SAAS;gBACZ,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;SACJ,CAAC,CAAA;IACJ,CAAC;IAGD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;AAC3E,CAAC"}
1
+ {"version":3,"file":"dedupe-cids.js","sourceRoot":"","sources":["../../../src/db/dedupe-cids.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAazD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAqB;IACvF,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IAE7F,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,gBAAgB,CAAC;YACrB,OAAO;YACP,UAAU,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAClD,GAAG,SAAS;gBACZ,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;SACJ,CAAC,CAAA;IACJ,CAAC;IAGD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;AAC3E,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import type { Address } from 'viem';
2
- import type { IndexerDatabase } from '../types.ts';
2
+ import type { IndexerApi } from '../types.ts';
3
3
  export type FindRepairDatasetOptions = {
4
- indexerDb: IndexerDatabase;
4
+ api: IndexerApi;
5
5
  providerId: bigint;
6
6
  payer: Address;
7
7
  source: string;
8
8
  };
9
- export declare function findRepairDataset({ indexerDb, providerId, payer, source, }: FindRepairDatasetOptions): Promise<bigint | null>;
9
+ export declare function findRepairDataset({ api, providerId, payer, source, }: FindRepairDatasetOptions): Promise<bigint | null>;
10
10
  //# sourceMappingURL=find-repair-dataset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-repair-dataset.d.ts","sourceRoot":"","sources":["../../../src/db/find-repair-dataset.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,eAAe,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAOD,wBAAsB,iBAAiB,CAAC,EACtC,SAAS,EACT,UAAU,EACV,KAAK,EACL,MAAM,GACP,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BnD"}
1
+ {"version":3,"file":"find-repair-dataset.d.ts","sourceRoot":"","sources":["../../../src/db/find-repair-dataset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,UAAU,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAOD,wBAAsB,iBAAiB,CAAC,EACtC,GAAG,EACH,UAAU,EACV,KAAK,EACL,MAAM,GACP,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBnD"}
@@ -1,17 +1,19 @@
1
- import { and, asc, eq, isNull } from 'drizzle-orm';
2
- export async function findRepairDataset({ indexerDb, providerId, payer, source, }) {
3
- const schema = indexerDb._.fullSchema;
4
- const result = await indexerDb
5
- .select({
6
- dataSetId: schema.dataSets.dataSetId,
7
- })
8
- .from(schema.dataSets)
9
- .where(and(eq(schema.dataSets.providerId, providerId), eq(schema.dataSets.deleted, false), isNull(schema.dataSets.pdpEndEpoch), eq(schema.dataSets.payer, payer.toLowerCase()), eq(schema.dataSets.source, source), eq(schema.dataSets.withCdn, false), eq(schema.dataSets.withIpfsIndexing, true)))
10
- .orderBy(asc(schema.dataSets.dataSetId))
11
- .limit(1);
12
- if (result.length === 0) {
13
- return null;
1
+ import { listDataSets } from "../api.js";
2
+ export async function findRepairDataset({ api, providerId, payer, source, }) {
3
+ const dataSets = await listDataSets(api, {
4
+ owner: payer.toLowerCase(),
5
+ providerId,
6
+ deleted: false,
7
+ withCdn: false,
8
+ });
9
+ let dataSetId = null;
10
+ for (const dataSet of dataSets) {
11
+ if (dataSet.pdpEndEpoch != null || dataSet.source !== source || !dataSet.withIpfsIndexing)
12
+ continue;
13
+ const id = BigInt(dataSet.dataSetId);
14
+ if (dataSetId == null || id < dataSetId)
15
+ dataSetId = id;
14
16
  }
15
- return result[0].dataSetId;
17
+ return dataSetId;
16
18
  }
17
19
  //# sourceMappingURL=find-repair-dataset.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-repair-dataset.js","sourceRoot":"","sources":["../../../src/db/find-repair-dataset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAgBlD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,SAAS,EACT,UAAU,EACV,KAAK,EACL,MAAM,GACmB;IACzB,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,MAAM,CAAC,EAClC,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
+ {"version":3,"file":"find-repair-dataset.js","sourceRoot":"","sources":["../../../src/db/find-repair-dataset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAexC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,GAAG,EACH,UAAU,EACV,KAAK,EACL,MAAM,GACmB;IACzB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE;QACvC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;QAC1B,UAAU;QACV,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,KAAK;KACf,CAAC,CAAA;IAEF,IAAI,SAAS,GAAkB,IAAI,CAAA;IACnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAAE,SAAQ;QACnG,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACpC,IAAI,SAAS,IAAI,IAAI,IAAI,EAAE,GAAG,SAAS;YAAE,SAAS,GAAG,EAAE,CAAA;IACzD,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type DataSet } from '../api.ts';
2
+ import type { IndexerApi } from '../types.ts';
3
+ export declare function isDataSetActiveAt(dataSet: Pick<DataSet, 'deleted' | 'pdpEndEpoch'>, blockNumber: bigint): boolean;
4
+ export declare function getActiveDataSetIds({ api, providerId, blockNumber, }: {
5
+ api: IndexerApi;
6
+ providerId: bigint;
7
+ blockNumber: bigint;
8
+ }): Promise<Set<string>>;
9
+ //# sourceMappingURL=get-active-data-set-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-active-data-set-ids.d.ts","sourceRoot":"","sources":["../../../src/db/get-active-data-set-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAgB,MAAM,WAAW,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAO7C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,aAAa,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAEjH;AAKD,wBAAsB,mBAAmB,CAAC,EACxC,GAAG,EACH,UAAU,EACV,WAAW,GACZ,EAAE;IACD,GAAG,EAAE,UAAU,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAKvB"}
@@ -0,0 +1,9 @@
1
+ import { listDataSets } from "../api.js";
2
+ export function isDataSetActiveAt(dataSet, blockNumber) {
3
+ return !dataSet.deleted && (dataSet.pdpEndEpoch == null || BigInt(dataSet.pdpEndEpoch) > blockNumber);
4
+ }
5
+ export async function getActiveDataSetIds({ api, providerId, blockNumber, }) {
6
+ const dataSets = await listDataSets(api, { providerId, deleted: false });
7
+ return new Set(dataSets.filter((dataSet) => isDataSetActiveAt(dataSet, blockNumber)).map((dataSet) => dataSet.dataSetId));
8
+ }
9
+ //# sourceMappingURL=get-active-data-set-ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-active-data-set-ids.js","sourceRoot":"","sources":["../../../src/db/get-active-data-set-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,YAAY,EAAE,MAAM,WAAW,CAAA;AAQtD,MAAM,UAAU,iBAAiB,CAAC,OAAiD,EAAE,WAAmB;IACtG,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,CAAA;AACvG,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EACxC,GAAG,EACH,UAAU,EACV,WAAW,GAKZ;IACC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IACxE,OAAO,IAAI,GAAG,CACZ,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAC1G,CAAA;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { IndexerApi } from '../types.ts';
2
+ export declare function getAlternateProviderUrls({ api, repairProviderId, }: {
3
+ api: IndexerApi;
4
+ repairProviderId: bigint;
5
+ }): Promise<string[]>;
6
+ //# sourceMappingURL=get-alternate-provider-urls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-alternate-provider-urls.d.ts","sourceRoot":"","sources":["../../../src/db/get-alternate-provider-urls.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAoB7C,wBAAsB,wBAAwB,CAAC,EAC7C,GAAG,EACH,gBAAgB,GACjB,EAAE;IACD,GAAG,EAAE,UAAU,CAAA;IACf,gBAAgB,EAAE,MAAM,CAAA;CACzB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAepB"}
@@ -0,0 +1,24 @@
1
+ import { listProviders } from "../api.js";
2
+ function compareProviders(a, b) {
3
+ if (a.endorsed !== b.endorsed)
4
+ return a.endorsed ? -1 : 1;
5
+ if (a.approved !== b.approved)
6
+ return a.approved ? -1 : 1;
7
+ const x = BigInt(a.providerId);
8
+ const y = BigInt(b.providerId);
9
+ return x < y ? -1 : x > y ? 1 : 0;
10
+ }
11
+ export async function getAlternateProviderUrls({ api, repairProviderId, }) {
12
+ const providers = await listProviders(api);
13
+ const repairProviderUrl = providers.find((provider) => BigInt(provider.providerId) === repairProviderId)?.serviceUrl;
14
+ const urls = providers
15
+ .filter((provider) => (provider.approved || provider.endorsed) &&
16
+ provider.serviceUrl &&
17
+ BigInt(provider.providerId) !== repairProviderId)
18
+ .sort(compareProviders)
19
+ .map((provider) => provider.serviceUrl);
20
+ if (repairProviderUrl)
21
+ urls.push(repairProviderUrl);
22
+ return urls;
23
+ }
24
+ //# sourceMappingURL=get-alternate-provider-urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-alternate-provider-urls.js","sourceRoot":"","sources":["../../../src/db/get-alternate-provider-urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAiB,MAAM,WAAW,CAAA;AAIxD,SAAS,gBAAgB,CAAC,CAAW,EAAE,CAAW;IAChD,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;QAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzD,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;QAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,EAC7C,GAAG,EACH,gBAAgB,GAIjB;IACC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;IAC1C,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,gBAAgB,CAAC,EAAE,UAAU,CAAA;IACpH,MAAM,IAAI,GAAG,SAAS;SACnB,MAAM,CACL,CAAC,QAAQ,EAAE,EAAE,CACX,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;QACxC,QAAQ,CAAC,UAAU;QACnB,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,gBAAgB,CACnD;SACA,IAAI,CAAC,gBAAgB,CAAC;SACtB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAoB,CAAC,CAAA;IAEnD,IAAI,iBAAiB;QAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IACnD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1,39 +1,20 @@
1
1
  import type { OperationInsert } from '../local-schema.ts';
2
- import type { IndexerDatabase } from '../types.ts';
3
- export declare const DEFAULT_PIECES_PAGE_SIZE = 3000;
4
- export type GetPiecesPageOptions = {
5
- indexerDb: IndexerDatabase;
2
+ import type { IndexerApi } from '../types.ts';
3
+ export type ForEachPiecesPageOptions = {
4
+ api: IndexerApi;
6
5
  providerId: bigint;
7
6
  repairId: number;
8
7
  blockNumber: bigint;
9
- limit?: number;
10
- offset?: number;
11
- seenCids?: Set<string>;
12
8
  };
13
- export type GetPiecesPageResult = {
14
- operations: OperationInsert[];
15
- hasMore: boolean;
16
- nextOffset: number;
17
- seenCids: Set<string>;
18
- };
19
- export type ForEachPiecesPageOptions = Omit<GetPiecesPageOptions, 'offset' | 'seenCids'>;
20
- export type GetDataSetPiecesPageOptions = {
21
- indexerDb: IndexerDatabase;
9
+ export type ForEachDataSetPiecesPageOptions = {
10
+ api: IndexerApi;
22
11
  dataSetId: bigint;
23
12
  repairId: number;
24
13
  sourceProviderUrl: string;
25
- limit?: number;
26
- offset?: number;
27
14
  };
28
- export type GetDataSetPiecesPageResult = {
15
+ export type PiecesPage = {
29
16
  operations: OperationInsert[];
30
- hasMore: boolean;
31
- nextOffset: number;
32
17
  };
33
- export type ForEachDataSetPiecesPageOptions = Omit<GetDataSetPiecesPageOptions, 'offset'>;
34
- export declare function emptySeenCids(): Set<string>;
35
- export declare function getPiecesPage({ indexerDb, providerId, repairId, blockNumber, limit, offset, seenCids, }: GetPiecesPageOptions): Promise<GetPiecesPageResult>;
36
- export declare function getDataSetPiecesPage({ indexerDb, dataSetId, repairId, sourceProviderUrl, limit, offset, }: GetDataSetPiecesPageOptions): Promise<GetDataSetPiecesPageResult>;
37
- export declare function forEachPiecesPage(options: ForEachPiecesPageOptions, onPage: (page: GetPiecesPageResult) => Promise<void>): Promise<void>;
38
- export declare function forEachDataSetPiecesPage(options: ForEachDataSetPiecesPageOptions, onPage: (page: GetDataSetPiecesPageResult) => Promise<void>): Promise<void>;
18
+ export declare function forEachPiecesPage({ api, providerId, repairId, blockNumber }: ForEachPiecesPageOptions, onPage: (page: PiecesPage) => Promise<void>): Promise<void>;
19
+ export declare function forEachDataSetPiecesPage({ api, dataSetId, repairId, sourceProviderUrl }: ForEachDataSetPiecesPageOptions, onPage: (page: PiecesPage) => Promise<void>): Promise<void>;
39
20
  //# sourceMappingURL=get-pieces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-pieces.d.ts","sourceRoot":"","sources":["../../../src/db/get-pieces.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAG5C,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,eAAe,CAAA;IAE1B,UAAU,EAAE,MAAM,CAAA;IAElB,QAAQ,EAAE,MAAM,CAAA;IAEhB,WAAW,EAAE,MAAM,CAAA;IAEnB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,MAAM,CAAC,EAAE,MAAM,CAAA;IAKf,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACvB,CAAA;AAGD,MAAM,MAAM,mBAAmB,GAAG;IAEhC,UAAU,EAAE,eAAe,EAAE,CAAA;IAE7B,OAAO,EAAE,OAAO,CAAA;IAEhB,UAAU,EAAE,MAAM,CAAA;IAElB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACtB,CAAA;AAGD,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAA;AAGxF,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,eAAe,CAAA;IAE1B,SAAS,EAAE,MAAM,CAAA;IAEjB,QAAQ,EAAE,MAAM,CAAA;IAEhB,iBAAiB,EAAE,MAAM,CAAA;IAEzB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAGD,MAAM,MAAM,0BAA0B,GAAG;IAEvC,UAAU,EAAE,eAAe,EAAE,CAAA;IAE7B,OAAO,EAAE,OAAO,CAAA;IAEhB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAGD,MAAM,MAAM,+BAA+B,GAAG,IAAI,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAA;AAQzF,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,CAAC,CAE3C;AAeD,wBAAsB,aAAa,CAAC,EAClC,SAAS,EACT,UAAU,EACV,QAAQ,EACR,WAAW,EACX,KAAgC,EAChC,MAAU,EACV,QAA0B,GAC3B,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgFrD;AAUD,wBAAsB,oBAAoB,CAAC,EACzC,SAAS,EACT,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,KAAgC,EAChC,MAAU,GACX,EAAE,2BAA2B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA8BnE;AAUD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,EACjC,MAAM,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC,CAkBf;AAUD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,OAAO,CAAC,IAAI,CAAC,GAC1D,OAAO,CAAC,IAAI,CAAC,CAef"}
1
+ {"version":3,"file":"get-pieces.d.ts","sourceRoot":"","sources":["../../../src/db/get-pieces.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAK7C,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,UAAU,CAAA;IAEf,UAAU,EAAE,MAAM,CAAA;IAElB,QAAQ,EAAE,MAAM,CAAA;IAEhB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAGD,MAAM,MAAM,+BAA+B,GAAG;IAC5C,GAAG,EAAE,UAAU,CAAA;IAEf,SAAS,EAAE,MAAM,CAAA;IAEjB,QAAQ,EAAE,MAAM,CAAA;IAEhB,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAGD,MAAM,MAAM,UAAU,GAAG;IAEvB,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B,CAAA;AAmED,wBAAsB,iBAAiB,CACrC,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,wBAAwB,EACpE,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAiBf;AAYD,wBAAsB,wBAAwB,CAC5C,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,+BAA+B,EAChF,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -1,45 +1,17 @@
1
1
  import * as Piece from '@filoz/synapse-core/piece';
2
- import { and, asc, eq, isNull, lte, or } from 'drizzle-orm';
3
2
  import pMap from 'p-map';
4
- import { findProvidersByCid } from "./find-providers-by-cid.js";
5
- export const DEFAULT_PIECES_PAGE_SIZE = 3000;
6
- export function emptySeenCids() {
7
- return new Set();
8
- }
9
- export async function getPiecesPage({ indexerDb, providerId, repairId, blockNumber, limit = DEFAULT_PIECES_PAGE_SIZE, offset = 0, seenCids = emptySeenCids(), }) {
10
- const schema = indexerDb._.fullSchema;
11
- const rows = await indexerDb
12
- .select({
13
- cid: schema.pieces.cid,
14
- metadata: schema.pieces.metadata,
15
- })
16
- .from(schema.pieces)
17
- .innerJoin(schema.dataSets, eq(schema.pieces.dataSetId, schema.dataSets.dataSetId))
18
- .where(and(eq(schema.dataSets.providerId, providerId), eq(schema.dataSets.deleted, false), or(isNull(schema.dataSets.pdpEndEpoch), lte(schema.dataSets.pdpEndEpoch, blockNumber)), eq(schema.pieces.removed, false)))
19
- .orderBy(asc(schema.pieces.dataSetId), asc(schema.pieces.pieceId))
20
- .limit(limit)
21
- .offset(offset);
3
+ import { listDataSetPieces, MAX_PAGE_SIZE, providerPiecePages, toStringMetadata } from "../api.js";
4
+ import { getActiveDataSetIds } from "./get-active-data-set-ids.js";
5
+ import { getAlternateProviderUrls } from "./get-alternate-provider-urls.js";
6
+ async function piecesToRepairOperations({ pieces, repairId, alternateProviderUrls, }) {
22
7
  const now = Date.now();
23
- const pieces = [];
24
- for (const { cid, metadata } of rows) {
25
- if (seenCids.has(cid))
26
- continue;
27
- seenCids.add(cid);
28
- pieces.push({ cid, metadata });
29
- }
30
- const providersByCid = await findProvidersByCid({
31
- indexerDb,
32
- cids: pieces.map((piece) => piece.cid),
33
- blockNumber,
34
- });
35
- const operations = await pMap(pieces, async ({ cid, metadata }) => {
36
- const alternateProviders = providersByCid[cid]?.map((provider) => provider.serviceUrl) ?? [];
8
+ return pMap(pieces, async ({ cid, metadata }) => {
37
9
  let skippedMessage = '';
38
10
  let validProvider;
39
- if (alternateProviders.length > 0) {
40
- validProvider = await Piece.findPieceOnProviders(alternateProviders, Piece.from(cid));
11
+ if (alternateProviderUrls.length > 0) {
12
+ validProvider = await Piece.findPieceOnProviders(alternateProviderUrls, Piece.from(cid));
41
13
  if (!validProvider) {
42
- skippedMessage = `Found ${alternateProviders.length} alternate providers, but none are valid. ${alternateProviders.join(', ')}`;
14
+ skippedMessage = `Piece not found on any of ${alternateProviderUrls.length} probed providers`;
43
15
  }
44
16
  }
45
17
  else {
@@ -50,76 +22,51 @@ export async function getPiecesPage({ indexerDb, providerId, repairId, blockNumb
50
22
  type: 'add_piece',
51
23
  status: validProvider ? 'pending' : 'skipped',
52
24
  cid,
53
- metadata: metadata ?? {},
25
+ metadata,
54
26
  alternateProvider: validProvider ?? '',
55
27
  error: validProvider ? undefined : skippedMessage,
56
28
  createdAt: now,
57
29
  updatedAt: now,
58
30
  };
59
31
  }, { concurrency: 20 });
60
- return {
61
- operations,
62
- hasMore: rows.length === limit,
63
- nextOffset: offset + rows.length,
64
- seenCids,
65
- };
66
- }
67
- export async function getDataSetPiecesPage({ indexerDb, dataSetId, repairId, sourceProviderUrl, limit = DEFAULT_PIECES_PAGE_SIZE, offset = 0, }) {
68
- const schema = indexerDb._.fullSchema;
69
- const rows = await indexerDb
70
- .select({
71
- cid: schema.pieces.cid,
72
- metadata: schema.pieces.metadata,
73
- })
74
- .from(schema.pieces)
75
- .where(and(eq(schema.pieces.dataSetId, dataSetId), eq(schema.pieces.removed, false)))
76
- .orderBy(asc(schema.pieces.pieceId))
77
- .limit(limit)
78
- .offset(offset);
79
- const now = Date.now();
80
- const operations = rows.map(({ cid, metadata }) => ({
81
- repairId,
82
- type: 'add_piece',
83
- status: 'pending',
84
- cid,
85
- metadata: metadata ?? {},
86
- alternateProvider: sourceProviderUrl,
87
- createdAt: now,
88
- updatedAt: now,
89
- }));
90
- return {
91
- operations,
92
- hasMore: rows.length === limit,
93
- nextOffset: offset + rows.length,
94
- };
95
32
  }
96
- export async function forEachPiecesPage(options, onPage) {
97
- let offset = 0;
98
- let hasMore = true;
99
- let seenCids = emptySeenCids();
100
- while (hasMore) {
101
- const page = await getPiecesPage({
102
- ...options,
103
- offset,
104
- seenCids,
105
- });
106
- await onPage(page);
107
- offset = page.nextOffset;
108
- seenCids = page.seenCids;
109
- hasMore = page.hasMore;
33
+ export async function forEachPiecesPage({ api, providerId, repairId, blockNumber }, onPage) {
34
+ const activeDataSetIds = await getActiveDataSetIds({ api, providerId, blockNumber });
35
+ const alternateProviderUrls = await getAlternateProviderUrls({ api, repairProviderId: providerId });
36
+ const seenCids = new Set();
37
+ for await (const rows of providerPiecePages(api, providerId, { removed: false })) {
38
+ const pieces = [];
39
+ for (const { cid, metadata, dataSetId } of rows) {
40
+ if (!activeDataSetIds.has(dataSetId))
41
+ continue;
42
+ if (cid == null || seenCids.has(cid))
43
+ continue;
44
+ seenCids.add(cid);
45
+ pieces.push({ cid, metadata: toStringMetadata(metadata) });
46
+ }
47
+ await onPage({ operations: await piecesToRepairOperations({ pieces, repairId, alternateProviderUrls }) });
110
48
  }
111
49
  }
112
- export async function forEachDataSetPiecesPage(options, onPage) {
113
- let offset = 0;
114
- let hasMore = true;
115
- while (hasMore) {
116
- const page = await getDataSetPiecesPage({
117
- ...options,
118
- offset,
119
- });
120
- await onPage(page);
121
- offset = page.nextOffset;
122
- hasMore = page.hasMore;
50
+ export async function forEachDataSetPiecesPage({ api, dataSetId, repairId, sourceProviderUrl }, onPage) {
51
+ const pieces = (await listDataSetPieces(api, dataSetId, { removed: false })).reverse();
52
+ const now = Date.now();
53
+ for (let offset = 0; offset < pieces.length; offset += MAX_PAGE_SIZE) {
54
+ const operations = [];
55
+ for (const { cid, metadata } of pieces.slice(offset, offset + MAX_PAGE_SIZE)) {
56
+ if (cid == null)
57
+ continue;
58
+ operations.push({
59
+ repairId,
60
+ type: 'add_piece',
61
+ status: 'pending',
62
+ cid,
63
+ metadata: toStringMetadata(metadata),
64
+ alternateProvider: sourceProviderUrl,
65
+ createdAt: now,
66
+ updatedAt: now,
67
+ });
68
+ }
69
+ await onPage({ operations });
123
70
  }
124
71
  }
125
72
  //# sourceMappingURL=get-pieces.js.map