@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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import { Cli } from 'incur';
3
+ import { datasets } from "./commands/datasets.js";
4
+ import { providers } from "./commands/providers.js";
5
+ import { repair } from "./commands/repair.js";
6
+ import { setup } from "./commands/setup.js";
7
+ import { wallet } from "./commands/wallet.js";
8
+ import { version } from "./utils.js";
9
+ const cli = Cli.create('repair', {
10
+ version,
11
+ description: 'Early repair for faulty service providers and datasets',
12
+ });
13
+ cli.command(setup);
14
+ cli.command(wallet);
15
+ cli.command(repair);
16
+ cli.command(datasets);
17
+ cli.command(providers);
18
+ cli.serve();
19
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC/B,OAAO;IACP,WAAW,EAAE,wDAAwD;CACtE,CAAC,CAAA;AAEF,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAClB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AACnB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AACnB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AACrB,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACtB,GAAG,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { Cli, z } from 'incur';
2
+ export declare const datasets: Cli.Cli<{}, z.ZodObject<{
3
+ indexerDb: z.ZodCustom<import("../types.ts").IndexerDatabase, import("../types.ts").IndexerDatabase>;
4
+ localDb: z.ZodCustom<import("../types.ts").LocalDatabase, import("../types.ts").LocalDatabase>;
5
+ config: z.ZodCustom<import("conf").default<import("../types.ts").Config>, import("conf").default<import("../types.ts").Config>>;
6
+ client: z.ZodCustom<import("viem").Client<import("viem").Transport, import("@filoz/synapse-core/chains").Chain, import("viem").Account>, import("viem").Client<import("viem").Transport, import("@filoz/synapse-core/chains").Chain, import("viem").Account>>;
7
+ chain: z.ZodCustom<import("@filoz/synapse-core/chains").Chain, import("@filoz/synapse-core/chains").Chain>;
8
+ }, z.core.$strip>, undefined>;
9
+ //# sourceMappingURL=datasets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasets.d.ts","sourceRoot":"","sources":["../../../src/commands/datasets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAG9B,eAAO,MAAM,QAAQ;;;;;;6BAInB,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { and, eq } from 'drizzle-orm';
2
+ import { Cli, z } from 'incur';
3
+ import { contextMiddleware, contextSchema } from "../middleware.js";
4
+ import { globalOptions } from "../utils.js";
5
+ export const datasets = Cli.create('datasets', {
6
+ description: 'Dataset commands',
7
+ options: globalOptions,
8
+ vars: contextSchema,
9
+ });
10
+ datasets.command('list', {
11
+ description: 'List all datasets owned by the repair wallet',
12
+ options: globalOptions.extend({
13
+ providerId: z.coerce.bigint().optional().describe('Filter datasets by provider ID'),
14
+ }),
15
+ middleware: [contextMiddleware],
16
+ run: async (c) => {
17
+ try {
18
+ const schema = c.var.indexerDb._.fullSchema;
19
+ const conditions = [
20
+ eq(schema.dataSets.deleted, false),
21
+ eq(schema.dataSets.payer, c.var.client.account.address.toLowerCase()),
22
+ ];
23
+ if (c.options.providerId != null) {
24
+ conditions.push(eq(schema.dataSets.providerId, c.options.providerId));
25
+ }
26
+ const datasets = await c.var.indexerDb.query.dataSets.findMany({
27
+ where: and(...conditions),
28
+ with: {
29
+ provider: true,
30
+ pieces: true,
31
+ },
32
+ });
33
+ const datasetsFlattened = datasets.map((dataset) => {
34
+ const { provider, pieces } = dataset;
35
+ return {
36
+ id: dataset.dataSetId,
37
+ withCdn: dataset.withCdn,
38
+ withIpfsIndexing: dataset.withIpfsIndexing,
39
+ source: dataset.source,
40
+ provider: provider.serviceUrl,
41
+ pdpEndEpoch: dataset.pdpEndEpoch,
42
+ pieces: pieces.length,
43
+ };
44
+ });
45
+ return c.ok({
46
+ datasets: datasetsFlattened,
47
+ });
48
+ }
49
+ catch (error) {
50
+ console.error(error);
51
+ return c.error({
52
+ code: 'DATASETS_FAILED',
53
+ message: error instanceof Error ? error.message : 'Failed to list datasets',
54
+ retryable: true,
55
+ });
56
+ }
57
+ },
58
+ });
59
+ //# sourceMappingURL=datasets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasets.js","sourceRoot":"","sources":["../../../src/commands/datasets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Cli, z } from 'incur';
2
+ export declare const providers: Cli.Cli<{}, z.ZodObject<{
3
+ indexerDb: z.ZodCustom<import("../types.ts").IndexerDatabase, import("../types.ts").IndexerDatabase>;
4
+ localDb: z.ZodCustom<import("../types.ts").LocalDatabase, import("../types.ts").LocalDatabase>;
5
+ config: z.ZodCustom<import("conf").default<import("../types.ts").Config>, import("conf").default<import("../types.ts").Config>>;
6
+ client: z.ZodCustom<import("viem").Client<import("viem").Transport, import("@filoz/synapse-core/chains").Chain, import("viem").Account>, import("viem").Client<import("viem").Transport, import("@filoz/synapse-core/chains").Chain, import("viem").Account>>;
7
+ chain: z.ZodCustom<import("@filoz/synapse-core/chains").Chain, import("@filoz/synapse-core/chains").Chain>;
8
+ }, z.core.$strip>, undefined>;
9
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../src/commands/providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAa9B,eAAO,MAAM,SAAS;;;;;;6BAIpB,CAAA"}
@@ -0,0 +1,84 @@
1
+ import { and, asc, count, eq, inArray, isNull, lte, or, sum } from 'drizzle-orm';
2
+ import { Cli, z } from 'incur';
3
+ import { getBlockNumber } from 'viem/actions';
4
+ import { contextMiddleware, contextSchema } from "../middleware.js";
5
+ import { globalOptions } from "../utils.js";
6
+ function formatBytesAsGb(bytes) {
7
+ const scaled = (bytes * 100n) / 1000000000n;
8
+ const whole = scaled / 100n;
9
+ const fraction = scaled % 100n;
10
+ return `${whole}.${fraction.toString().padStart(2, '0')} GB`;
11
+ }
12
+ export const providers = Cli.create('providers', {
13
+ description: 'Provider commands',
14
+ options: globalOptions,
15
+ vars: contextSchema,
16
+ });
17
+ providers.command('list', {
18
+ description: 'List all providers from the indexer',
19
+ options: globalOptions.extend({
20
+ all: z.boolean().optional().default(false).describe('Include all providers'),
21
+ }),
22
+ middleware: [contextMiddleware],
23
+ run: async (c) => {
24
+ try {
25
+ const schema = c.var.indexerDb._.fullSchema;
26
+ const filters = [
27
+ eq(schema.providers.providerActive, true),
28
+ eq(schema.providers.pdpProductActive, true),
29
+ ];
30
+ if (!c.options.all) {
31
+ filters.push(or(eq(schema.providers.approved, true), eq(schema.providers.endorsed, true)));
32
+ }
33
+ const blockNumber = await getBlockNumber(c.var.client);
34
+ const rows = await c.var.indexerDb.query.providers.findMany({
35
+ orderBy: [asc(schema.providers.providerId)],
36
+ where: and(...filters),
37
+ });
38
+ const providerIds = rows.map((provider) => provider.providerId);
39
+ const statsByProviderId = new Map();
40
+ if (providerIds.length > 0) {
41
+ const stats = await c.var.indexerDb
42
+ .select({
43
+ providerId: schema.dataSets.providerId,
44
+ pieceCount: count(schema.pieces.pieceId),
45
+ totalSize: sum(schema.pieces.rawSize),
46
+ })
47
+ .from(schema.pieces)
48
+ .innerJoin(schema.dataSets, eq(schema.pieces.dataSetId, schema.dataSets.dataSetId))
49
+ .where(and(inArray(schema.dataSets.providerId, providerIds), eq(schema.dataSets.deleted, false), or(isNull(schema.dataSets.pdpEndEpoch), lte(schema.dataSets.pdpEndEpoch, blockNumber)), eq(schema.pieces.removed, false)))
50
+ .groupBy(schema.dataSets.providerId);
51
+ for (const stat of stats) {
52
+ statsByProviderId.set(stat.providerId, {
53
+ pieceCount: stat.pieceCount,
54
+ totalSize: stat.totalSize == null ? 0n : BigInt(stat.totalSize),
55
+ });
56
+ }
57
+ }
58
+ const providersFlattened = rows.map((provider) => {
59
+ const stats = statsByProviderId.get(provider.providerId);
60
+ return {
61
+ id: provider.providerId,
62
+ name: provider.name,
63
+ serviceUrl: provider.serviceUrl,
64
+ approved: provider.approved,
65
+ endorsed: provider.endorsed,
66
+ pieceCount: stats?.pieceCount ?? 0,
67
+ totalSize: formatBytesAsGb(stats?.totalSize ?? 0n),
68
+ };
69
+ });
70
+ return c.ok({
71
+ providers: providersFlattened,
72
+ });
73
+ }
74
+ catch (error) {
75
+ console.error(error);
76
+ return c.error({
77
+ code: 'PROVIDERS_FAILED',
78
+ message: error instanceof Error ? error.message : 'Failed to list providers',
79
+ retryable: true,
80
+ });
81
+ }
82
+ },
83
+ });
84
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/commands/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAmB,GAAG,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG3C,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,WAAc,CAAA;IAC9C,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAA;IAC9B,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAA;AAC9D,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;IAC/C,WAAW,EAAE,mBAAmB;IAChC,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,aAAa;CACpB,CAAC,CAAA;AAEF,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE;IACxB,WAAW,EAAE,qCAAqC;IAClD,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC;QAC5B,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAC7E,CAAC;IACF,UAAU,EAAE,CAAC,iBAAiB,CAAC;IAC/B,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;YAC3C,MAAM,OAAO,GAA+B;gBAC1C,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC;gBACzC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC;aAE5C,CAAA;YACD,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;YAC5F,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACtD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC1D,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAC3C,KAAK,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;aACvB,CAAC,CAAA;YAEF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;YAC/D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAqD,CAAA;YAEtF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS;qBAChC,MAAM,CAAC;oBACN,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU;oBACtC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;oBACxC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;iBACtC,CAAC;qBACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;qBACnB,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;qBAClF,KAAK,CACJ,GAAG,CACD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,EAChD,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAClC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EACtF,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CACjC,CACF;qBACA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;gBAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;wBACrC,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;qBAChE,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC/C,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;gBACxD,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,UAAU;oBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,UAAU,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC;oBAClC,SAAS,EAAE,eAAe,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;iBACnD,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,OAAO,CAAC,CAAC,EAAE,CAAC;gBACV,SAAS,EAAE,kBAAkB;aAC9B,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACpB,OAAO,CAAC,CAAC,KAAK,CAAC;gBACb,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B;gBAC5E,SAAS,EAAE,IAAI;aAChB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { Cli, z } from 'incur';
2
+ export declare const repair: Cli.Cli<{}, z.ZodObject<{
3
+ indexerDb: z.ZodCustom<import("../types.ts").IndexerDatabase, import("../types.ts").IndexerDatabase>;
4
+ localDb: z.ZodCustom<import("../types.ts").LocalDatabase, import("../types.ts").LocalDatabase>;
5
+ config: z.ZodCustom<import("conf").default<import("../types.ts").Config>, import("conf").default<import("../types.ts").Config>>;
6
+ client: z.ZodCustom<import("viem").Client<import("viem").Transport, import("@filoz/synapse-core/chains").Chain, import("viem").Account>, import("viem").Client<import("viem").Transport, import("@filoz/synapse-core/chains").Chain, import("viem").Account>>;
7
+ chain: z.ZodCustom<import("@filoz/synapse-core/chains").Chain, import("@filoz/synapse-core/chains").Chain>;
8
+ }, z.core.$strip>, undefined>;
9
+ //# sourceMappingURL=repair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair.d.ts","sourceRoot":"","sources":["../../../src/commands/repair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAO9B,eAAO,MAAM,MAAM;;;;;;6BAGjB,CAAA"}
@@ -0,0 +1,170 @@
1
+ import { and, desc, eq, inArray } from 'drizzle-orm';
2
+ import { Cli, z } from 'incur';
3
+ import { repairCreate } from "../db/repair-create.js";
4
+ import { repairDelete } from "../db/repair-delete.js";
5
+ import { contextMiddleware, contextSchema } from "../middleware.js";
6
+ import { ensureRepairDataset } from "../pipeline/create-datasets.js";
7
+ import { runPullPiecesPhase } from "../pipeline/pull.js";
8
+ import { globalOptions } from "../utils.js";
9
+ export const repair = Cli.create('repair', {
10
+ description: 'Repair commands',
11
+ vars: contextSchema,
12
+ });
13
+ repair.command('create', {
14
+ description: 'Create a new repair',
15
+ options: globalOptions.extend({
16
+ providerId: z.coerce.bigint().describe('Provider ID to repair'),
17
+ targetProviderId: z.coerce.bigint().describe('Target provider ID for repair'),
18
+ }),
19
+ middleware: [contextMiddleware],
20
+ run: async (c) => {
21
+ try {
22
+ const { providerId, targetProviderId } = c.options;
23
+ const repairId = await repairCreate({
24
+ ...c.var,
25
+ repairProviderId: providerId,
26
+ targetProviderId,
27
+ });
28
+ return c.ok({
29
+ repairId,
30
+ });
31
+ }
32
+ catch (error) {
33
+ console.error(error);
34
+ return c.error({
35
+ code: 'REPAIR_FAILED',
36
+ message: error instanceof Error ? error.message : 'Failed to repair the dataset',
37
+ retryable: true,
38
+ });
39
+ }
40
+ },
41
+ });
42
+ repair.command('list', {
43
+ description: 'List all repairs',
44
+ options: globalOptions,
45
+ middleware: [contextMiddleware],
46
+ run: async (c) => {
47
+ try {
48
+ const localSchema = c.var.localDb._.fullSchema;
49
+ const repairs = await c.var.localDb.query.repairs.findMany({
50
+ orderBy: [desc(localSchema.repairs.createdAt)],
51
+ with: {
52
+ operations: true,
53
+ },
54
+ });
55
+ const repairFlattened = repairs.map((repair) => {
56
+ const { operations, ...repairWithoutOperations } = repair;
57
+ return {
58
+ id: repairWithoutOperations.id,
59
+ status: repairWithoutOperations.status,
60
+ repairProviderId: repairWithoutOperations.repairProviderId,
61
+ targetProviderId: repairWithoutOperations.targetProviderId,
62
+ targetProviderUrl: repairWithoutOperations.targetProviderUrl,
63
+ targetDataSetId: repairWithoutOperations.targetDataSetId,
64
+ blockNumber: repairWithoutOperations.blockNumber,
65
+ operations: operations.length,
66
+ pending: operations.filter((operation) => operation.status === 'pending').length,
67
+ failed: operations.filter((operation) => operation.status === 'failed').length,
68
+ completed: operations.filter((operation) => operation.status === 'completed').length,
69
+ skipped: operations.filter((operation) => operation.status === 'skipped').length,
70
+ };
71
+ });
72
+ return c.ok({
73
+ repairs: repairFlattened,
74
+ });
75
+ }
76
+ catch (error) {
77
+ console.error(error);
78
+ return c.error({
79
+ code: 'REPAIR_FAILED',
80
+ message: error instanceof Error ? error.message : 'Failed to repair the dataset',
81
+ retryable: true,
82
+ });
83
+ }
84
+ },
85
+ });
86
+ repair.command('delete', {
87
+ description: 'Delete a repair',
88
+ args: z.object({
89
+ repairId: z.coerce.number().describe('Repair ID to delete'),
90
+ }),
91
+ options: globalOptions,
92
+ middleware: [contextMiddleware],
93
+ run: async (c) => {
94
+ try {
95
+ const { deleted, operationsDeleted } = await repairDelete({
96
+ localDb: c.var.localDb,
97
+ repairId: c.args.repairId,
98
+ });
99
+ if (!deleted) {
100
+ return c.error({
101
+ code: 'REPAIR_NOT_FOUND',
102
+ message: 'Repair not found',
103
+ retryable: false,
104
+ });
105
+ }
106
+ return c.ok({
107
+ repairId: c.args.repairId,
108
+ operationsDeleted,
109
+ });
110
+ }
111
+ catch (error) {
112
+ console.error(error);
113
+ return c.error({
114
+ code: 'REPAIR_FAILED',
115
+ message: error instanceof Error ? error.message : 'Failed to delete the repair',
116
+ retryable: true,
117
+ });
118
+ }
119
+ },
120
+ });
121
+ repair.command('run', {
122
+ description: 'Run a repair',
123
+ args: z.object({
124
+ repairId: z.coerce.number().describe('Repair ID to run'),
125
+ }),
126
+ options: globalOptions.extend({
127
+ concurrency: z.coerce.number().default(4).describe('Concurrency level'),
128
+ batchSize: z.coerce.number().default(40).describe('Max add_piece operations per pull batch'),
129
+ reset: z.boolean().default(false).describe('Reset the repair'),
130
+ }),
131
+ middleware: [contextMiddleware],
132
+ run: async (c) => {
133
+ try {
134
+ const schema = c.var.localDb._.fullSchema;
135
+ const repair = await c.var.localDb.query.repairs.findFirst({
136
+ where: and(eq(schema.repairs.id, c.args.repairId), inArray(schema.repairs.status, ['pending'])),
137
+ });
138
+ if (!repair) {
139
+ return c.error({
140
+ code: 'REPAIR_NOT_FOUND',
141
+ message: 'Repair not found, it may have already been run or completed',
142
+ retryable: false,
143
+ });
144
+ }
145
+ await ensureRepairDataset({
146
+ ...c.var,
147
+ repair,
148
+ });
149
+ await runPullPiecesPhase({
150
+ ...c.var,
151
+ repair,
152
+ concurrency: c.options.concurrency,
153
+ batchSize: c.options.batchSize,
154
+ reset: c.options.reset,
155
+ });
156
+ return c.ok({
157
+ repairId: repair.id,
158
+ });
159
+ }
160
+ catch (error) {
161
+ console.error(error);
162
+ return c.error({
163
+ code: 'REPAIR_FAILED',
164
+ message: error instanceof Error ? error.message : 'Failed to repair the dataset',
165
+ retryable: true,
166
+ });
167
+ }
168
+ },
169
+ });
170
+ //# sourceMappingURL=repair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair.js","sourceRoot":"","sources":["../../../src/commands/repair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Cli } from 'incur';
2
+ export declare const setup: Cli.Cli<{
3
+ [x: string]: {
4
+ args: {};
5
+ options: {
6
+ debug: boolean;
7
+ privateKey?: string | undefined;
8
+ };
9
+ };
10
+ }, undefined, undefined>;
11
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +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;;;;;;;;wBAuHhB,CAAA"}
@@ -0,0 +1,127 @@
1
+ import * as p from '@clack/prompts';
2
+ import { Cli, z } from 'incur';
3
+ import path from 'path';
4
+ import { privateKeyToAccount } from 'viem/accounts';
5
+ import { config, createLocalDatabase, globalOptions, migrateLocalDatabase } from "../utils.js";
6
+ function validatePostgresUrl(value) {
7
+ let url;
8
+ try {
9
+ url = new URL(value);
10
+ }
11
+ catch {
12
+ return false;
13
+ }
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
+ }
19
+ export const setup = Cli.create('setup', {
20
+ description: 'Setup the CLI',
21
+ options: globalOptions.extend({
22
+ privateKey: z.string().optional().describe('Private key to use'),
23
+ }),
24
+ run: async (c) => {
25
+ try {
26
+ const pk = await p.text({
27
+ message: 'Enter your private key',
28
+ validate(value) {
29
+ if (!value || !/^0x[a-fA-F0-9]{64}$/.test(value)) {
30
+ return `Invalid private key!`;
31
+ }
32
+ },
33
+ initialValue: config.get('privateKey'),
34
+ withGuide: false,
35
+ });
36
+ if (p.isCancel(pk)) {
37
+ return c.error({
38
+ code: 'SETUP_CANCELLED',
39
+ message: 'Setup cancelled',
40
+ retryable: false,
41
+ });
42
+ }
43
+ const indexerMainnetUrl = await p.text({
44
+ message: 'Enter your Mainnet Indexer Postgres URL',
45
+ validate(value) {
46
+ if (!value || !validatePostgresUrl(value)) {
47
+ return `Invalid postgres URL!`;
48
+ }
49
+ },
50
+ initialValue: config.get('indexerMainnetUrl'),
51
+ withGuide: false,
52
+ });
53
+ if (p.isCancel(indexerMainnetUrl)) {
54
+ return c.error({
55
+ code: 'SETUP_CANCELLED',
56
+ message: 'Setup cancelled',
57
+ retryable: false,
58
+ });
59
+ }
60
+ const indexerCalibrationUrl = await p.text({
61
+ message: 'Enter your Calibration Indexer Postgres URL',
62
+ validate(value) {
63
+ if (!value || !validatePostgresUrl(value)) {
64
+ return `Invalid postgres URL!`;
65
+ }
66
+ },
67
+ initialValue: config.get('indexerCalibrationUrl'),
68
+ withGuide: false,
69
+ });
70
+ if (p.isCancel(indexerCalibrationUrl)) {
71
+ return c.error({
72
+ code: 'SETUP_CANCELLED',
73
+ message: 'Setup cancelled',
74
+ retryable: false,
75
+ });
76
+ }
77
+ const chainId = await p.select({
78
+ message: 'Select your chain',
79
+ options: [
80
+ { value: 314, label: 'Mainnet' },
81
+ { value: 314159, label: 'Calibration' },
82
+ ],
83
+ withGuide: false,
84
+ initialValue: config.get('chainId'),
85
+ });
86
+ if (p.isCancel(chainId)) {
87
+ return c.error({
88
+ code: 'SETUP_CANCELLED',
89
+ message: 'Setup cancelled',
90
+ retryable: false,
91
+ });
92
+ }
93
+ const dbPath = await p.text({
94
+ message: 'Enter your DB path',
95
+ initialValue: config.get('dbPath') || path.join(path.dirname(config.path), 'sqlite.db'),
96
+ withGuide: false,
97
+ });
98
+ if (p.isCancel(dbPath)) {
99
+ return c.error({
100
+ code: 'SETUP_CANCELLED',
101
+ message: 'Setup cancelled',
102
+ retryable: false,
103
+ });
104
+ }
105
+ config.set('privateKey', pk);
106
+ config.set('indexerMainnetUrl', indexerMainnetUrl);
107
+ config.set('indexerCalibrationUrl', indexerCalibrationUrl);
108
+ config.set('chainId', chainId);
109
+ config.set('dbPath', dbPath);
110
+ const db = await createLocalDatabase(dbPath);
111
+ await migrateLocalDatabase(db);
112
+ const account = privateKeyToAccount(pk);
113
+ return c.ok({
114
+ address: account.address,
115
+ });
116
+ }
117
+ catch (error) {
118
+ console.error(error);
119
+ return c.error({
120
+ code: 'SETUP_FAILED',
121
+ message: error instanceof Error ? error.message : 'Failed to setup the CLI',
122
+ retryable: true,
123
+ });
124
+ }
125
+ },
126
+ });
127
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Cli, z } from 'incur';
2
+ export declare const wallet: Cli.Cli<{}, z.ZodObject<{
3
+ indexerDb: z.ZodCustom<import("../types.ts").IndexerDatabase, import("../types.ts").IndexerDatabase>;
4
+ localDb: z.ZodCustom<import("../types.ts").LocalDatabase, import("../types.ts").LocalDatabase>;
5
+ config: z.ZodCustom<import("conf").default<import("../types.ts").Config>, import("conf").default<import("../types.ts").Config>>;
6
+ client: z.ZodCustom<import("viem").Client<import("viem").Transport, import("@filoz/synapse-core/chains").Chain, import("viem").Account>, import("viem").Client<import("viem").Transport, import("@filoz/synapse-core/chains").Chain, import("viem").Account>>;
7
+ chain: z.ZodCustom<import("@filoz/synapse-core/chains").Chain, import("@filoz/synapse-core/chains").Chain>;
8
+ }, z.core.$strip>, undefined>;
9
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAK9B,eAAO,MAAM,MAAM;;;;;;6BAGjB,CAAA"}