@polkadot-api/cli 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-F4ZKQC36.js → chunk-5LOFST3S.js} +145 -67
- package/dist/chunk-5LOFST3S.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/main.js +1 -1
- package/package.json +19 -19
- package/dist/chunk-F4ZKQC36.js.map +0 -1
- package/dist/metadataWorker.d.ts +0 -389
- package/dist/metadataWorker.js +0 -39
- package/dist/metadataWorker.js.map +0 -1
|
@@ -27,29 +27,31 @@ function getCli({ add: add2, generate: generate2, remove: remove2, update: updat
|
|
|
27
27
|
import { createClient } from "@polkadot-api/substrate-client";
|
|
28
28
|
import * as fs from "node:fs/promises";
|
|
29
29
|
import { metadata, v15 } from "@polkadot-api/substrate-bindings";
|
|
30
|
-
import {
|
|
30
|
+
import { getWsProvider } from "@polkadot-api/ws-provider/node";
|
|
31
31
|
import { Worker } from "node:worker_threads";
|
|
32
32
|
import { getObservableClient } from "@polkadot-api/observable-client";
|
|
33
33
|
import { filter, firstValueFrom } from "rxjs";
|
|
34
34
|
import { dirname } from "path";
|
|
35
35
|
import { fileURLToPath } from "url";
|
|
36
36
|
import * as knownChains2 from "@polkadot-api/known-chains";
|
|
37
|
-
import
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
import { withPolkadotSdkCompat } from "@polkadot-api/polkadot-sdk-compat";
|
|
38
|
+
import { startFromWorker } from "@polkadot-api/smoldot/from-node-worker";
|
|
39
|
+
import { getSmProvider } from "@polkadot-api/sm-provider";
|
|
40
|
+
var workerPath = fileURLToPath(
|
|
41
|
+
import.meta.resolve("@polkadot-api/smoldot/node-worker")
|
|
42
|
+
);
|
|
43
|
+
var smoldotWorker;
|
|
40
44
|
var workerRefCount = 0;
|
|
41
|
-
async function
|
|
42
|
-
if (!
|
|
43
|
-
|
|
45
|
+
async function getSmoldotWorker() {
|
|
46
|
+
if (!smoldotWorker) {
|
|
47
|
+
const worker = new Worker(workerPath, {
|
|
44
48
|
stdout: true,
|
|
45
49
|
stderr: true
|
|
46
50
|
});
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
metadataWorker?.postMessage("ready");
|
|
50
|
-
});
|
|
51
|
+
const client = startFromWorker(worker);
|
|
52
|
+
smoldotWorker = [client, worker];
|
|
51
53
|
}
|
|
52
|
-
return
|
|
54
|
+
return smoldotWorker;
|
|
53
55
|
}
|
|
54
56
|
var getMetadataCall = async (provider) => {
|
|
55
57
|
const client = getObservableClient(createClient(provider));
|
|
@@ -59,7 +61,7 @@ var getMetadataCall = async (provider) => {
|
|
|
59
61
|
client.destroy();
|
|
60
62
|
return { metadata: runtime.lookup.metadata, metadataRaw: runtime.metadataRaw };
|
|
61
63
|
};
|
|
62
|
-
var
|
|
64
|
+
var getChainSpecs = (chain) => {
|
|
63
65
|
if (!(chain in knownChains2)) {
|
|
64
66
|
const relayChainName2 = JSON.parse(chain).relay_chain;
|
|
65
67
|
return {
|
|
@@ -77,35 +79,34 @@ var getWorkerMessage = (chain) => {
|
|
|
77
79
|
chainSpec
|
|
78
80
|
};
|
|
79
81
|
};
|
|
80
|
-
var id = 0;
|
|
81
82
|
var getMetadataFromSmoldot = async (chain) => {
|
|
82
83
|
workerRefCount++;
|
|
83
84
|
try {
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
});
|
|
99
|
-
return metadata2;
|
|
85
|
+
const [smoldot] = await getSmoldotWorker();
|
|
86
|
+
const chainSpecs = getChainSpecs(chain);
|
|
87
|
+
const potentialRelayChains = await Promise.all(
|
|
88
|
+
chainSpecs.potentialRelayChainSpecs.map(
|
|
89
|
+
(chainSpec) => smoldot.addChain({ chainSpec })
|
|
90
|
+
)
|
|
91
|
+
);
|
|
92
|
+
const provider = getSmProvider(
|
|
93
|
+
smoldot.addChain({
|
|
94
|
+
chainSpec: chainSpecs.chainSpec,
|
|
95
|
+
potentialRelayChains
|
|
96
|
+
})
|
|
97
|
+
);
|
|
98
|
+
return await getMetadataCall(provider);
|
|
100
99
|
} finally {
|
|
101
100
|
workerRefCount--;
|
|
102
101
|
if (workerRefCount === 0) {
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
const [smoldot, worker] = smoldotWorker;
|
|
103
|
+
smoldotWorker = null;
|
|
104
|
+
await smoldot.terminate();
|
|
105
|
+
await worker.terminate();
|
|
105
106
|
}
|
|
106
107
|
}
|
|
107
108
|
};
|
|
108
|
-
var getMetadataFromWsURL = async (wsURL) => getMetadataCall(
|
|
109
|
+
var getMetadataFromWsURL = async (wsURL) => getMetadataCall(withPolkadotSdkCompat(getWsProvider(wsURL)));
|
|
109
110
|
async function getMetadata(entry) {
|
|
110
111
|
if (entry.metadata) {
|
|
111
112
|
const data = await fs.readFile(entry.metadata);
|
|
@@ -212,16 +213,84 @@ import { existsSync as existsSync2 } from "fs";
|
|
|
212
213
|
import fsExists2 from "fs.promises.exists";
|
|
213
214
|
import fs2, { mkdtemp, rm } from "fs/promises";
|
|
214
215
|
import { tmpdir } from "os";
|
|
215
|
-
import path, { join as
|
|
216
|
-
import
|
|
216
|
+
import path, { join as join3 } from "path";
|
|
217
|
+
import process2 from "process";
|
|
217
218
|
import tsc from "tsc-prog";
|
|
218
219
|
import tsup, { build } from "tsup";
|
|
219
220
|
import { updatePackage } from "write-package";
|
|
220
221
|
import { spawn } from "child_process";
|
|
221
222
|
import { readPackage as readPackage2 } from "read-pkg";
|
|
222
|
-
|
|
223
|
+
|
|
224
|
+
// src/packageManager.ts
|
|
225
|
+
import { readdir } from "node:fs/promises";
|
|
226
|
+
import { join as join2 } from "node:path";
|
|
227
|
+
import { execa } from "execa";
|
|
228
|
+
var detected = null;
|
|
229
|
+
async function detectPackageManager() {
|
|
230
|
+
if (detected) return detected;
|
|
231
|
+
const { packageManager, executable } = await detectByLockFile() ?? detectByEnvironment() ?? getFallback();
|
|
232
|
+
const version = await getVersion(executable);
|
|
233
|
+
return detected = {
|
|
234
|
+
packageManager,
|
|
235
|
+
executable,
|
|
236
|
+
version
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
async function detectByLockFile() {
|
|
240
|
+
try {
|
|
241
|
+
for (let i = 0, dir = "."; i < 5; i++, dir = join2(dir, "..")) {
|
|
242
|
+
const packageManager = await getByLockFile(dir);
|
|
243
|
+
if (packageManager) {
|
|
244
|
+
return {
|
|
245
|
+
packageManager,
|
|
246
|
+
executable: packageManager
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
} catch (ex) {
|
|
251
|
+
}
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
var lockFileToPackageManager = {
|
|
255
|
+
"pnpm-lock.yaml": "pnpm",
|
|
256
|
+
"yarn.lock": "yarn",
|
|
257
|
+
"bun.lockb": "bun",
|
|
258
|
+
"package-lock.json": "npm"
|
|
259
|
+
};
|
|
260
|
+
var lockFiles = new Set(Object.keys(lockFileToPackageManager));
|
|
261
|
+
async function getByLockFile(dir) {
|
|
262
|
+
const files = await readdir(dir);
|
|
263
|
+
const lockFile = files.find((v) => lockFiles.has(v));
|
|
264
|
+
return lockFile ? lockFileToPackageManager[lockFile] : null;
|
|
265
|
+
}
|
|
266
|
+
function detectByEnvironment() {
|
|
267
|
+
const npm_execpath = process.env.npm_execpath;
|
|
268
|
+
if (npm_execpath) {
|
|
269
|
+
const packageManager = Object.values(lockFileToPackageManager).find(
|
|
270
|
+
(manager) => npm_execpath.includes(manager)
|
|
271
|
+
);
|
|
272
|
+
return packageManager ? { packageManager, executable: npm_execpath } : null;
|
|
273
|
+
}
|
|
274
|
+
if (process.env.PNPM_PACKAGE_NAME) {
|
|
275
|
+
return { packageManager: "pnpm", executable: "pnpm" };
|
|
276
|
+
}
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
function getFallback() {
|
|
280
|
+
console.warn("Package manager couldn't be detected, fallback to npm");
|
|
281
|
+
return {
|
|
282
|
+
executable: "npm",
|
|
283
|
+
packageManager: "npm"
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
async function getVersion(executable) {
|
|
287
|
+
const res = await execa(executable, ["--version"]);
|
|
288
|
+
return res.stdout;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// src/commands/generate.ts
|
|
223
292
|
async function generate(opts) {
|
|
224
|
-
if (
|
|
293
|
+
if (process2.env.PAPI_SKIP_GENERATE) {
|
|
225
294
|
return;
|
|
226
295
|
}
|
|
227
296
|
const config = await readPapiConfig(opts.config);
|
|
@@ -241,31 +310,34 @@ async function generate(opts) {
|
|
|
241
310
|
}))
|
|
242
311
|
);
|
|
243
312
|
await cleanDescriptorsPackage(config.descriptorPath);
|
|
244
|
-
const descriptorsDir =
|
|
313
|
+
const descriptorsDir = join3(process2.cwd(), config.descriptorPath);
|
|
245
314
|
const clientPath = opts.clientLibrary ?? "polkadot-api";
|
|
246
315
|
const whitelist = opts.whitelist ? await readWhitelist(opts.whitelist) : null;
|
|
247
316
|
const hash = await outputCodegen(
|
|
248
317
|
chains,
|
|
249
|
-
|
|
318
|
+
join3(descriptorsDir, "src"),
|
|
250
319
|
clientPath,
|
|
251
320
|
whitelist
|
|
252
321
|
);
|
|
253
322
|
await replacePackageJson(descriptorsDir, hash);
|
|
254
323
|
await compileCodegen(descriptorsDir);
|
|
255
|
-
await fs2.rm(
|
|
324
|
+
await fs2.rm(join3(descriptorsDir, "src"), { recursive: true });
|
|
256
325
|
await runInstall();
|
|
257
326
|
}
|
|
258
327
|
async function cleanDescriptorsPackage(path2) {
|
|
259
|
-
const descriptorsDir =
|
|
328
|
+
const descriptorsDir = join3(process2.cwd(), path2);
|
|
260
329
|
if (!existsSync2(descriptorsDir)) {
|
|
261
330
|
await fs2.mkdir(descriptorsDir, { recursive: true });
|
|
262
331
|
await fs2.writeFile(
|
|
263
|
-
|
|
332
|
+
join3(descriptorsDir, ".gitignore"),
|
|
264
333
|
"*\n!.gitignore\n!package.json"
|
|
265
334
|
);
|
|
266
335
|
}
|
|
267
|
-
const packageJson = await
|
|
268
|
-
|
|
336
|
+
const [packageJson, protocol] = await Promise.all([
|
|
337
|
+
readPackage2(),
|
|
338
|
+
getPackageProtocol()
|
|
339
|
+
]);
|
|
340
|
+
const packageSource = `${protocol}:${path2}`;
|
|
269
341
|
const currentSource = packageJson.dependencies?.["@polkadot-api/descriptors"];
|
|
270
342
|
if (currentSource !== packageSource) {
|
|
271
343
|
await updatePackage({
|
|
@@ -274,21 +346,28 @@ async function cleanDescriptorsPackage(path2) {
|
|
|
274
346
|
}
|
|
275
347
|
});
|
|
276
348
|
}
|
|
277
|
-
const distDir =
|
|
349
|
+
const distDir = join3(descriptorsDir, "dist");
|
|
278
350
|
if (existsSync2(distDir)) {
|
|
279
351
|
await fs2.rm(distDir, { recursive: true });
|
|
280
352
|
}
|
|
281
353
|
}
|
|
282
|
-
async function
|
|
283
|
-
|
|
354
|
+
async function getPackageProtocol() {
|
|
355
|
+
const { packageManager, version } = await detectPackageManager();
|
|
356
|
+
switch (packageManager) {
|
|
357
|
+
case "yarn":
|
|
358
|
+
const yarnMajorVersion = Number(version.split(".").at(0));
|
|
359
|
+
return yarnMajorVersion >= 2 ? "portal" : "file";
|
|
360
|
+
default:
|
|
361
|
+
return "file";
|
|
362
|
+
}
|
|
284
363
|
}
|
|
285
364
|
async function runInstall() {
|
|
286
|
-
const
|
|
287
|
-
console.log(`${
|
|
288
|
-
const child = spawn(
|
|
365
|
+
const { executable } = await detectPackageManager();
|
|
366
|
+
console.log(`${executable} install`);
|
|
367
|
+
const child = spawn(executable, ["install"], {
|
|
289
368
|
stdio: "inherit",
|
|
290
369
|
env: {
|
|
291
|
-
...
|
|
370
|
+
...process2.env,
|
|
292
371
|
PAPI_SKIP_GENERATE: "true"
|
|
293
372
|
}
|
|
294
373
|
});
|
|
@@ -346,7 +425,7 @@ ${descriptorsFileContent}`
|
|
|
346
425
|
await Promise.all(
|
|
347
426
|
chains.map(
|
|
348
427
|
(chain, i) => fs2.writeFile(
|
|
349
|
-
|
|
428
|
+
join3(outputFolder, `${chain.key}.ts`),
|
|
350
429
|
descriptorTypesFileContent[i]
|
|
351
430
|
)
|
|
352
431
|
)
|
|
@@ -359,8 +438,8 @@ ${descriptorsFileContent}`
|
|
|
359
438
|
return hash;
|
|
360
439
|
}
|
|
361
440
|
async function compileCodegen(packageDir) {
|
|
362
|
-
const srcDir =
|
|
363
|
-
const outDir =
|
|
441
|
+
const srcDir = join3(packageDir, "src");
|
|
442
|
+
const outDir = join3(packageDir, "dist");
|
|
364
443
|
if (await fsExists2(outDir)) {
|
|
365
444
|
await fs2.rm(outDir, { recursive: true });
|
|
366
445
|
}
|
|
@@ -401,11 +480,11 @@ var generateIndex = async (path2, keys, publicTypes) => {
|
|
|
401
480
|
publicTypes.join(", "),
|
|
402
481
|
`} from './common-types';`
|
|
403
482
|
].join("\n");
|
|
404
|
-
await fs2.writeFile(
|
|
483
|
+
await fs2.writeFile(join3(path2, "index.ts"), indexTs);
|
|
405
484
|
};
|
|
406
485
|
async function replacePackageJson(descriptorsDir, version) {
|
|
407
486
|
await fs2.writeFile(
|
|
408
|
-
|
|
487
|
+
join3(descriptorsDir, "package.json"),
|
|
409
488
|
`{
|
|
410
489
|
"version": "0.1.0-autogenerated.${version}",
|
|
411
490
|
"name": "@polkadot-api/descriptors",
|
|
@@ -437,7 +516,7 @@ async function readWhitelist(filename) {
|
|
|
437
516
|
if (!await fsExists2(filename)) {
|
|
438
517
|
throw new Error("Whitelist file not found: " + filename);
|
|
439
518
|
}
|
|
440
|
-
const tmpDir = await mkdtemp(
|
|
519
|
+
const tmpDir = await mkdtemp(join3(tmpdir(), "papi-"));
|
|
441
520
|
try {
|
|
442
521
|
await build({
|
|
443
522
|
format: "esm",
|
|
@@ -450,7 +529,7 @@ async function readWhitelist(filename) {
|
|
|
450
529
|
},
|
|
451
530
|
silent: true
|
|
452
531
|
});
|
|
453
|
-
const { whitelist } = await import(
|
|
532
|
+
const { whitelist } = await import(join3(tmpDir, "index.mjs"));
|
|
454
533
|
return whitelist;
|
|
455
534
|
} finally {
|
|
456
535
|
await rm(tmpDir, { recursive: true }).catch(console.error);
|
|
@@ -463,7 +542,7 @@ import { fromHex } from "@polkadot-api/utils";
|
|
|
463
542
|
import { getMetadataFromRuntime } from "@polkadot-api/wasm-executor";
|
|
464
543
|
import * as fs3 from "node:fs/promises";
|
|
465
544
|
import ora from "ora";
|
|
466
|
-
import { join as
|
|
545
|
+
import { join as join4 } from "node:path";
|
|
467
546
|
import { existsSync as existsSync3 } from "node:fs";
|
|
468
547
|
async function add(key, options) {
|
|
469
548
|
const config = await readPapiConfig(options.config) ?? defaultConfig;
|
|
@@ -510,11 +589,11 @@ async function add(key, options) {
|
|
|
510
589
|
}
|
|
511
590
|
}
|
|
512
591
|
async function storeMetadata(metadata2, key) {
|
|
513
|
-
const defaultFolder =
|
|
592
|
+
const defaultFolder = join4(papiFolder, "metadata");
|
|
514
593
|
if (!existsSync3(defaultFolder)) {
|
|
515
594
|
await fs3.mkdir(defaultFolder, { recursive: true });
|
|
516
595
|
}
|
|
517
|
-
const filename =
|
|
596
|
+
const filename = join4(defaultFolder, `${key}.scale`);
|
|
518
597
|
await writeMetadataToDisk(metadata2, filename);
|
|
519
598
|
return filename;
|
|
520
599
|
}
|
|
@@ -587,15 +666,14 @@ async function update(keysInput, options) {
|
|
|
587
666
|
};
|
|
588
667
|
const spinner = ora2(`Updating`).start();
|
|
589
668
|
await Promise.all(keys.map(updateByKey));
|
|
590
|
-
console.log(`Updating descriptors`);
|
|
591
|
-
await generate({ config: options.config });
|
|
592
|
-
spinner.stop();
|
|
593
|
-
console.log(`Updated chain(s) "${keys.join(", ")}"`);
|
|
594
669
|
if (!options.skipCodegen) {
|
|
595
|
-
|
|
670
|
+
console.log(`Updating descriptors`);
|
|
671
|
+
await generate({
|
|
596
672
|
config: options.config
|
|
597
673
|
});
|
|
598
674
|
}
|
|
675
|
+
spinner.stop();
|
|
676
|
+
console.log(`Updated chain(s) "${keys.join(", ")}"`);
|
|
599
677
|
}
|
|
600
678
|
|
|
601
679
|
export {
|
|
@@ -605,4 +683,4 @@ export {
|
|
|
605
683
|
remove,
|
|
606
684
|
update
|
|
607
685
|
};
|
|
608
|
-
//# sourceMappingURL=chunk-
|
|
686
|
+
//# sourceMappingURL=chunk-5LOFST3S.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/metadata.ts","../src/papiConfig.ts","../src/commands/generate.ts","../src/packageManager.ts","../src/commands/add.ts","../src/commands/remove.ts","../src/commands/update.ts"],"sourcesContent":["import { Option, program } from \"@commander-js/extra-typings\"\nimport type { add, generate, remove, update } from \"./commands\"\nimport * as knownChains from \"@polkadot-api/known-chains\"\n\nexport type Commands = {\n add: typeof add\n generate: typeof generate\n remove: typeof remove\n update: typeof update\n}\n\nexport function getCli({ add, generate, remove, update }: Commands) {\n program.name(\"polkadot-api\").description(\"Polkadot API CLI\")\n\n const config = new Option(\"--config <filename>\", \"Source for the config file\")\n\n program\n .command(\"generate\", {\n isDefault: true,\n })\n .description(\"Generate descriptor files\")\n .addOption(config)\n .option(\n \"--whitelist <filename>\",\n \"Use whitelist file to reduce descriptor size\",\n )\n .action(generate)\n\n program\n .command(\"add\")\n .description(\"Add a new chain spec to the list\")\n .argument(\"<key>\", \"Key identifier for the chain spec\")\n .addOption(config)\n .option(\"-f, --file <filename>\", \"Source from metadata encoded file\")\n .option(\"-w, --wsUrl <URL>\", \"Source from websocket url\")\n .option(\"-c, --chainSpec <filename>\", \"Source from chain spec file\")\n .addOption(\n new Option(\"-n, --name <name>\", \"Source from a well-known chain\").choices(\n Object.keys(knownChains),\n ),\n )\n .option(\"--wasm <filename>\", \"Source from runtime wasm file\")\n .option(\"--no-persist\", \"Do not persist the metadata as a file\")\n .option(\"--skip-codegen\", \"Skip running codegen after adding\")\n .action(add)\n\n program\n .command(\"update\")\n .description(\"Update the metadata files and generate descriptor files\")\n .argument(\n \"[keys]\",\n \"Keys of the metadata files to update, separated by commas. Leave empty for all\",\n )\n .addOption(config)\n .option(\"--skip-codegen\", \"Skip running codegen after updating\")\n .action(update)\n\n program\n .command(\"remove\")\n .description(\"Remove a chain spec from the list\")\n .argument(\"<key>\", \"Key identifier for the chain spec\")\n .addOption(config)\n .option(\"--skip-codegen\", \"Skip running codegen after removing\")\n .action(remove)\n\n return program\n}\n","import { createClient } from \"@polkadot-api/substrate-client\"\nimport type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport * as fs from \"node:fs/promises\"\nimport { V14, V15, metadata, v15 } from \"@polkadot-api/substrate-bindings\"\nimport { getWsProvider } from \"@polkadot-api/ws-provider/node\"\nimport { Worker } from \"node:worker_threads\"\nimport { getObservableClient } from \"@polkadot-api/observable-client\"\nimport { filter, firstValueFrom } from \"rxjs\"\nimport { EntryConfig } from \"./papiConfig\"\nimport { dirname } from \"path\"\nimport { fileURLToPath } from \"url\"\nimport * as knownChains from \"@polkadot-api/known-chains\"\nimport { withPolkadotSdkCompat } from \"@polkadot-api/polkadot-sdk-compat\"\nimport { startFromWorker } from \"@polkadot-api/smoldot/from-node-worker\"\nimport { Client as SmoldotClient } from \"@polkadot-api/smoldot\"\nimport { getSmProvider } from \"@polkadot-api/sm-provider\"\n\nconst workerPath = fileURLToPath(\n import.meta.resolve(\"@polkadot-api/smoldot/node-worker\"),\n)\n\nlet smoldotWorker: [SmoldotClient, Worker] | null\nlet workerRefCount = 0\nasync function getSmoldotWorker() {\n if (!smoldotWorker) {\n const worker = new Worker(workerPath, {\n stdout: true,\n stderr: true,\n })\n const client = startFromWorker(worker)\n smoldotWorker = [client, worker]\n }\n return smoldotWorker\n}\n\nconst getMetadataCall = async (provider: JsonRpcProvider) => {\n const client = getObservableClient(createClient(provider))\n const { runtime$, unfollow } = client.chainHead$()\n const runtime = await firstValueFrom(runtime$.pipe(filter(Boolean)))\n\n unfollow()\n client.destroy()\n\n return { metadata: runtime.lookup.metadata, metadataRaw: runtime.metadataRaw }\n}\n\nconst getChainSpecs = (\n chain: string,\n): { potentialRelayChainSpecs: string[]; chainSpec: string } => {\n if (!(chain in knownChains)) {\n const relayChainName = JSON.parse(chain).relay_chain\n return {\n potentialRelayChainSpecs:\n relayChainName in knownChains\n ? [knownChains[relayChainName as keyof typeof knownChains]]\n : [],\n chainSpec: chain,\n }\n }\n\n const relayChainName = Object.keys(knownChains).find(\n (c) => c !== chain && chain.startsWith(c),\n )\n const potentialRelayChainSpecs = relayChainName\n ? [knownChains[relayChainName as keyof typeof knownChains]]\n : []\n const chainSpec = knownChains[chain as keyof typeof knownChains]\n\n return {\n potentialRelayChainSpecs,\n chainSpec,\n }\n}\n\nconst getMetadataFromSmoldot = async (chain: string) => {\n workerRefCount++\n try {\n const [smoldot] = await getSmoldotWorker()\n const chainSpecs = getChainSpecs(chain)\n const potentialRelayChains = await Promise.all(\n chainSpecs.potentialRelayChainSpecs.map((chainSpec) =>\n smoldot.addChain({ chainSpec }),\n ),\n )\n const provider = getSmProvider(\n smoldot.addChain({\n chainSpec: chainSpecs.chainSpec,\n potentialRelayChains,\n }),\n )\n return await getMetadataCall(provider)\n } finally {\n workerRefCount--\n if (workerRefCount === 0) {\n const [smoldot, worker] = smoldotWorker!\n smoldotWorker = null\n await smoldot.terminate()\n await worker.terminate()\n }\n }\n}\n\nconst getMetadataFromWsURL = async (wsURL: string) =>\n getMetadataCall(withPolkadotSdkCompat(getWsProvider(wsURL)))\n\nexport async function getMetadata(\n entry: EntryConfig,\n): Promise<{ metadata: V15 | V14; metadataRaw: Uint8Array } | null> {\n // metadata file always prevails over other entries.\n // cli's update will update the metadata file when the user requests it.\n if (entry.metadata) {\n const data = await fs.readFile(entry.metadata)\n const metadataRaw = new Uint8Array(data)\n\n let meta: V14 | V15\n try {\n meta = metadata.dec(metadataRaw).metadata.value as V14 | V15\n } catch (_) {\n meta = v15.dec(metadataRaw)\n }\n\n return {\n metadata: meta,\n metadataRaw,\n }\n }\n\n if (\"chain\" in entry) {\n return getMetadataFromSmoldot(entry.chain)\n }\n\n if (\"chainSpec\" in entry) {\n const chainSpec = await fs.readFile(entry.chainSpec, \"utf8\")\n return getMetadataFromSmoldot(chainSpec)\n }\n\n if (\"wsUrl\" in entry) {\n return getMetadataFromWsURL(entry.wsUrl)\n }\n\n return null\n}\n\nexport async function writeMetadataToDisk(\n metadataRaw: Uint8Array,\n outFile: string,\n) {\n await fs.mkdir(dirname(outFile), { recursive: true })\n await fs.writeFile(outFile, metadataRaw)\n}\n","import fsExists from \"fs.promises.exists\"\nimport { readPackage } from \"read-pkg\"\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\"\nimport { join } from \"node:path\"\nimport { existsSync } from \"node:fs\"\n\nexport type EntryConfig =\n | {\n metadata: string\n }\n | {\n chainSpec: string\n metadata?: string\n }\n | {\n wsUrl: string\n metadata?: string\n }\n | {\n chain: string\n metadata?: string\n }\ntype Entries = Record<string, EntryConfig>\nexport type PapiConfig = {\n version: 0\n descriptorPath: string\n entries: Record<string, EntryConfig>\n}\n\nexport const papiFolder = \".papi\"\nconst papiCfgDefaultFile = \"polkadot-api.json\"\nconst packageJsonKey = \"polkadot-api\"\n\nexport const defaultConfig: PapiConfig = {\n version: 0,\n descriptorPath: join(papiFolder, \"descriptors\"),\n entries: {},\n}\n\nexport async function readPapiConfig(\n configFile: string | undefined,\n): Promise<PapiConfig | null> {\n if (configFile) return readFromFile(configFile)\n\n const currentVersionLocation = join(papiFolder, papiCfgDefaultFile)\n const currentVersionLocationExists = await fsExists(currentVersionLocation)\n\n const readConfig =\n (await (currentVersionLocationExists\n ? readFromFile(currentVersionLocation)\n : readFromFile(papiCfgDefaultFile))) ?? (await readFromPackageJson())\n\n // Store into current version location if it wasn't there\n if (readConfig && !currentVersionLocationExists) {\n await writePapiConfig(undefined, readConfig)\n }\n return readConfig\n}\n\n/**\n * Writes config to configFile. If configFile is not specified, it writes to the\n * default path, by this priority order:\n *\n * 1. Default config file (polkadot-api.json)\n * 2. Package.json If no pre-existing config exists, then it creates a\n * polkadot-api.json file.\n */\nexport async function writePapiConfig(\n configFile: string | undefined,\n config: PapiConfig,\n) {\n if (configFile) return writeToFile(configFile, config)\n\n if (!existsSync(papiFolder)) {\n await mkdir(papiFolder)\n }\n return writeToFile(join(papiFolder, papiCfgDefaultFile), config)\n}\n\nasync function readFromFile(file: string) {\n const fileExists = await fsExists(file)\n if (!fileExists) return null\n\n return migrate(JSON.parse(await readFile(file, \"utf8\")))\n}\nasync function readFromPackageJson() {\n const packageJson = await readPackage()\n if (!(packageJsonKey in packageJson)) return null\n console.warn(\"Papi config in package.json is deprecated\")\n return migrate(packageJson[packageJsonKey])\n}\n\nfunction migrate(content: Entries | PapiConfig): PapiConfig {\n if (typeof content.version === \"number\") {\n return content as any\n }\n return {\n ...defaultConfig,\n entries: content as Entries,\n }\n}\n\nasync function writeToFile(file: string, config: PapiConfig) {\n if (file === \"package.json\") {\n throw new Error(\"Papi config in package.json is deprecated\")\n }\n return writeFile(file, JSON.stringify(config, null, 2))\n}\n","import { getMetadata } from \"@/metadata\"\nimport { readPapiConfig } from \"@/papiConfig\"\nimport { generateMultipleDescriptors } from \"@polkadot-api/codegen\"\nimport {\n EntryPointCodec,\n TypedefCodec,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n Binary,\n h64,\n Tuple,\n V14,\n V15,\n Vector,\n} from \"@polkadot-api/substrate-bindings\"\nimport { existsSync } from \"fs\"\nimport fsExists from \"fs.promises.exists\"\nimport fs, { mkdtemp, rm } from \"fs/promises\"\nimport { tmpdir } from \"os\"\nimport path, { join } from \"path\"\nimport process from \"process\"\nimport tsc from \"tsc-prog\"\nimport tsup, { build } from \"tsup\"\nimport { updatePackage } from \"write-package\"\nimport { CommonOptions } from \"./commonOptions\"\nimport { spawn } from \"child_process\"\nimport { readPackage } from \"read-pkg\"\nimport { detectPackageManager } from \"../packageManager\"\n\nexport interface GenerateOptions extends CommonOptions {\n clientLibrary?: string\n whitelist?: string\n}\n\nexport async function generate(opts: GenerateOptions) {\n if (process.env.PAPI_SKIP_GENERATE) {\n return\n }\n\n const config = await readPapiConfig(opts.config)\n if (!config) {\n throw new Error(\"Can't find the Polkadot-API configuration\")\n }\n const sources = config.entries\n\n if (Object.keys(sources).length == 0) {\n console.log(\"No chains defined in config file\")\n }\n\n console.log(`Reading metadata`)\n const chains = await Promise.all(\n Object.entries(sources).map(async ([key, source]) => ({\n key,\n metadata: (await getMetadata(source))!.metadata,\n knownTypes: {},\n })),\n )\n\n await cleanDescriptorsPackage(config.descriptorPath)\n const descriptorsDir = join(process.cwd(), config.descriptorPath)\n\n const clientPath = opts.clientLibrary ?? \"polkadot-api\"\n\n const whitelist = opts.whitelist ? await readWhitelist(opts.whitelist) : null\n const hash = await outputCodegen(\n chains,\n join(descriptorsDir, \"src\"),\n clientPath,\n whitelist,\n )\n await replacePackageJson(descriptorsDir, hash)\n\n await compileCodegen(descriptorsDir)\n await fs.rm(join(descriptorsDir, \"src\"), { recursive: true })\n await runInstall()\n}\n\nasync function cleanDescriptorsPackage(path: string) {\n const descriptorsDir = join(process.cwd(), path)\n if (!existsSync(descriptorsDir)) {\n await fs.mkdir(descriptorsDir, { recursive: true })\n\n // We have to keep the package.json in git because otherwise npm install on a fresh repo would fail\n await fs.writeFile(\n join(descriptorsDir, \".gitignore\"),\n \"*\\n!.gitignore\\n!package.json\",\n )\n }\n\n const [packageJson, protocol] = await Promise.all([\n readPackage(),\n getPackageProtocol(),\n ])\n\n const packageSource = `${protocol}:${path}`\n const currentSource = packageJson.dependencies?.[\"@polkadot-api/descriptors\"]\n if (currentSource !== packageSource) {\n await updatePackage({\n dependencies: {\n \"@polkadot-api/descriptors\": packageSource,\n },\n })\n }\n\n const distDir = join(descriptorsDir, \"dist\")\n if (existsSync(distDir)) {\n await fs.rm(distDir, { recursive: true })\n }\n}\n\nasync function getPackageProtocol() {\n const { packageManager, version } = await detectPackageManager()\n\n switch (packageManager) {\n case \"yarn\":\n const yarnMajorVersion = Number(version.split(\".\").at(0))\n\n return yarnMajorVersion >= 2 ? \"portal\" : \"file\"\n default:\n return \"file\"\n }\n}\n\nasync function runInstall() {\n const { executable } = await detectPackageManager()\n console.log(`${executable} install`)\n const child = spawn(executable, [\"install\"], {\n stdio: \"inherit\",\n env: {\n ...process.env,\n PAPI_SKIP_GENERATE: \"true\",\n },\n })\n await new Promise((resolve) => child.on(\"close\", resolve))\n}\n\nasync function outputCodegen(\n chains: Array<{\n key: string\n metadata: V14 | V15\n knownTypes: Record<string, string>\n }>,\n outputFolder: string,\n clientPath: string,\n whitelist: string[] | null,\n) {\n const {\n descriptorsFileContent,\n descriptorTypesFileContent,\n metadataTypes,\n typesFileContent,\n publicTypes,\n } = generateMultipleDescriptors(\n chains,\n {\n client: clientPath,\n metadataTypes: \"./metadataTypes.scale\",\n types: \"./common-types\",\n descriptorValues: \"./descriptors\",\n },\n {\n whitelist: whitelist ?? undefined,\n },\n )\n const hash = h64(\n Binary.fromText(\n Array.from(metadataTypes.checksumToIdx.keys()).join(\"\"),\n ).asBytes(),\n )\n\n const EntryPointsCodec = Vector(EntryPointCodec)\n const TypedefsCodec = Vector(TypedefCodec)\n const TypesCodec = Tuple(EntryPointsCodec, TypedefsCodec)\n\n await fs.mkdir(outputFolder, { recursive: true })\n await fs.writeFile(\n path.join(outputFolder, \"metadataTypes.scale\"),\n TypesCodec.enc([metadataTypes.entryPoints, metadataTypes.typedefs]),\n )\n await fs.writeFile(\n path.join(outputFolder, \"scale-import.d.ts\"),\n `declare module \"*.scale\" {\n const content: string;\n export default content;\n }\n `,\n )\n await fs.writeFile(\n path.join(outputFolder, \"descriptors.ts\"),\n `///<reference path=\"./scale-import.d.ts\"/>\n${descriptorsFileContent}`,\n )\n await fs.writeFile(\n path.join(outputFolder, \"common-types.ts\"),\n typesFileContent,\n )\n await Promise.all(\n chains.map((chain, i) =>\n fs.writeFile(\n join(outputFolder, `${chain.key}.ts`),\n descriptorTypesFileContent[i],\n ),\n ),\n )\n await generateIndex(\n outputFolder,\n chains.map((chain) => chain.key),\n publicTypes,\n )\n\n return hash\n}\n\nasync function compileCodegen(packageDir: string) {\n const srcDir = join(packageDir, \"src\")\n const outDir = join(packageDir, \"dist\")\n\n if (await fsExists(outDir)) {\n await fs.rm(outDir, { recursive: true })\n }\n\n await tsup.build({\n format: [\"cjs\", \"esm\"],\n entry: [path.join(srcDir, \"index.ts\")],\n loader: {\n \".scale\": \"binary\",\n },\n platform: \"neutral\",\n outDir,\n outExtension: (ctx) => ({\n js: ctx.format === \"esm\" ? \".mjs\" : \".js\",\n }),\n })\n\n tsc.build({\n basePath: srcDir,\n compilerOptions: {\n skipLibCheck: true,\n declaration: true,\n emitDeclarationOnly: true,\n target: \"esnext\",\n module: \"esnext\",\n moduleResolution: \"node\",\n resolveJsonModule: true,\n allowSyntheticDefaultImports: true,\n outDir,\n },\n })\n}\n\nconst generateIndex = async (\n path: string,\n keys: string[],\n publicTypes: string[],\n) => {\n const indexTs = [\n ...keys.flatMap((key) => [\n `export { default as ${key} } from \"./${key}\";`,\n `export type * from \"./${key}\";`,\n ]),\n `export {`,\n publicTypes.join(\", \"),\n `} from './common-types';`,\n ].join(\"\\n\")\n await fs.writeFile(join(path, \"index.ts\"), indexTs)\n}\n\nasync function replacePackageJson(descriptorsDir: string, version: bigint) {\n await fs.writeFile(\n join(descriptorsDir, \"package.json\"),\n `{\n \"version\": \"0.1.0-autogenerated.${version}\",\n \"name\": \"@polkadot-api/descriptors\",\n \"files\": [\n \"dist\"\n ],\n \"exports\": {\n \".\": {\n \"module\": \"./dist/index.mjs\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"browser\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"sideEffects\": false,\n \"peerDependencies\": {\n \"polkadot-api\": \"*\"\n }\n}\n`,\n )\n}\n\nasync function readWhitelist(filename: string): Promise<string[] | null> {\n if (!(await fsExists(filename))) {\n throw new Error(\"Whitelist file not found: \" + filename)\n }\n\n const tmpDir = await mkdtemp(join(tmpdir(), \"papi-\"))\n try {\n await build({\n format: \"esm\",\n entry: {\n index: filename,\n },\n outDir: tmpDir,\n outExtension() {\n return { js: \".mjs\" }\n },\n silent: true,\n })\n const { whitelist } = await import(join(tmpDir, \"index.mjs\"))\n return whitelist\n } finally {\n await rm(tmpDir, { recursive: true }).catch(console.error)\n }\n}\n","import { readdir } from \"node:fs/promises\"\nimport { join } from \"node:path\"\nimport { execa } from \"execa\"\n\nexport type PackageManager = \"npm\" | \"pnpm\" | \"yarn\" | \"bun\"\nexport interface PackageManagerDetection {\n packageManager: PackageManager\n executable: string\n version: string\n}\nlet detected: PackageManagerDetection | null = null\n\nexport async function detectPackageManager() {\n if (detected) return detected\n\n const { packageManager, executable } =\n (await detectByLockFile()) ?? detectByEnvironment() ?? getFallback()\n const version = await getVersion(executable)\n\n return (detected = {\n packageManager,\n executable,\n version,\n })\n}\n\nasync function detectByLockFile(): Promise<Omit<\n PackageManagerDetection,\n \"version\"\n> | null> {\n try {\n for (let i = 0, dir = \".\"; i < 5; i++, dir = join(dir, \"..\")) {\n const packageManager = await getByLockFile(dir)\n if (packageManager) {\n return {\n packageManager,\n executable: packageManager,\n }\n }\n }\n } catch (ex) {\n // fs access can fail for permission errors\n // We just assume that we have\n }\n return null\n}\n\nconst lockFileToPackageManager: Record<string, PackageManager> = {\n \"pnpm-lock.yaml\": \"pnpm\",\n \"yarn.lock\": \"yarn\",\n \"bun.lockb\": \"bun\",\n \"package-lock.json\": \"npm\",\n}\n\nconst lockFiles = new Set(Object.keys(lockFileToPackageManager))\nasync function getByLockFile(dir: string) {\n const files = await readdir(dir)\n const lockFile = files.find((v) => lockFiles.has(v))\n return lockFile ? lockFileToPackageManager[lockFile] : null\n}\n\nfunction detectByEnvironment(): Omit<\n PackageManagerDetection,\n \"version\"\n> | null {\n const npm_execpath = process.env.npm_execpath\n if (npm_execpath) {\n const packageManager = Object.values(lockFileToPackageManager).find(\n (manager) => npm_execpath.includes(manager),\n )\n return packageManager ? { packageManager, executable: npm_execpath } : null\n }\n if (process.env.PNPM_PACKAGE_NAME) {\n return { packageManager: \"pnpm\", executable: \"pnpm\" }\n }\n return null\n}\n\nfunction getFallback(): Omit<PackageManagerDetection, \"version\"> {\n console.warn(\"Package manager couldn't be detected, fallback to npm\")\n return {\n executable: \"npm\",\n packageManager: \"npm\",\n }\n}\n\nasync function getVersion(executable: string) {\n const res = await execa(executable, [\"--version\"])\n return res.stdout\n}\n","import { getMetadata, writeMetadataToDisk } from \"@/metadata\"\nimport {\n defaultConfig,\n EntryConfig,\n papiFolder,\n readPapiConfig,\n writePapiConfig,\n} from \"@/papiConfig\"\nimport { compactNumber } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\nimport { getMetadataFromRuntime } from \"@polkadot-api/wasm-executor\"\nimport * as fs from \"node:fs/promises\"\nimport ora from \"ora\"\nimport { CommonOptions } from \"./commonOptions\"\nimport { generate } from \"./generate\"\nimport { join } from \"node:path\"\nimport { existsSync } from \"node:fs\"\n\nexport interface AddOptions extends CommonOptions {\n file?: string\n wsUrl?: string\n chainSpec?: string\n // well-known chains\n name?: string\n wasm?: string\n noPersist?: boolean\n}\n\nexport async function add(key: string, options: AddOptions) {\n const config = (await readPapiConfig(options.config)) ?? defaultConfig\n const entries = config.entries\n\n if (key in entries) {\n console.warn(`Replacing existing ${key} config`)\n }\n\n if (options.file) {\n entries[key] = {\n metadata: options.file,\n }\n } else if (options.wasm) {\n const spinner = ora(`Loading metadata from runtime`).start()\n const metadataHex = (await fs.readFile(options.wasm)).toString(\"hex\")\n const opaqueMeta = fromHex(getMetadataFromRuntime(`0x${metadataHex}`))\n\n // metadata comes with compact length prepended\n const metadataLen = compactNumber.dec(opaqueMeta)\n const compactLen = compactNumber.enc(metadataLen).length\n // verify we got all data\n if (opaqueMeta.length - compactLen !== metadataLen)\n throw new Error(\"Not able to retrieve runtime metadata\")\n\n spinner.text = \"Writing metadata\"\n const metadataRaw = opaqueMeta.slice(compactLen)\n const filename = await storeMetadata(metadataRaw, key)\n\n entries[key] = {\n metadata: filename,\n }\n } else {\n const entry = entryFromOptions(options)\n entries[key] = entry\n\n if (!options.noPersist) {\n const spinner = ora(`Loading metadata`).start()\n const { metadataRaw } = (await getMetadata(entry))!\n\n spinner.text = \"Writing metadata\"\n const filename = await storeMetadata(metadataRaw, key)\n\n spinner.succeed(`Metadata saved as ${filename}`)\n entry.metadata = filename\n }\n }\n\n await writePapiConfig(options.config, config)\n console.log(`Saved new spec \"${key}\"`)\n\n if (!options.skipCodegen) {\n generate({\n config: options.config,\n })\n }\n}\n\nasync function storeMetadata(metadata: Uint8Array, key: string) {\n const defaultFolder = join(papiFolder, \"metadata\")\n if (!existsSync(defaultFolder)) {\n await fs.mkdir(defaultFolder, { recursive: true })\n }\n const filename = join(defaultFolder, `${key}.scale`)\n await writeMetadataToDisk(metadata, filename)\n return filename\n}\n\nconst entryFromOptions = (options: AddOptions): EntryConfig => {\n if (options.wsUrl) {\n return {\n wsUrl: options.wsUrl,\n }\n }\n if (options.chainSpec) {\n return {\n chainSpec: options.chainSpec,\n }\n }\n if (options.name) {\n return {\n chain: options.name,\n }\n }\n\n throw new Error(\n \"add command needs one source, specified by options -f -w -c or -n\",\n )\n}\n","import { defaultConfig, readPapiConfig, writePapiConfig } from \"@/papiConfig\"\nimport { CommonOptions } from \"./commonOptions\"\nimport { generate } from \"./generate\"\n\nexport async function remove(key: string, options: CommonOptions) {\n const config = (await readPapiConfig(options.config)) ?? defaultConfig\n const entries = config.entries\n\n if (!(key in entries)) {\n throw new Error(`Key ${key} not set in polkadot-api config`)\n }\n\n delete entries[key]\n\n await writePapiConfig(options.config, config)\n console.log(`Removed chain \"${key}\" from config`)\n\n if (!options.skipCodegen) {\n generate({\n config: options.config,\n })\n }\n}\n","import { getMetadata, writeMetadataToDisk } from \"@/metadata\"\nimport { defaultConfig, EntryConfig, readPapiConfig } from \"@/papiConfig\"\nimport ora from \"ora\"\nimport { CommonOptions } from \"./commonOptions\"\nimport { generate } from \"./generate\"\n\nexport async function update(\n keysInput: string | undefined,\n options: CommonOptions,\n) {\n const entries = ((await readPapiConfig(options.config)) ?? defaultConfig)\n .entries\n const keys =\n keysInput === undefined ? Object.keys(entries) : keysInput.split(\",\")\n\n const updateByKey = async (key: string) => {\n if (!(key in entries)) {\n throw new Error(`Key ${key} not set in polkadot-api config`)\n }\n\n // Exclude metadata file from the entry, otherwise getMetadata would load from the file\n const { metadata: filename, ...entry } = entries[key]\n if (!filename) {\n if (keysInput !== undefined) {\n console.warn(`Key ${key} doesn't have a metadata file to update`)\n }\n\n return\n }\n\n const metadata = await getMetadata(entry as EntryConfig)\n // For those without other sources than metadata file, we get a null.\n if (!metadata) {\n if (keysInput !== undefined) {\n console.warn(\n `Key ${key} doesn't have any external source to update from`,\n )\n }\n return\n }\n\n spinner.text = `Writing ${key} metadata`\n await writeMetadataToDisk(metadata.metadataRaw, filename)\n spinner.succeed(`${key} metadata updated`)\n }\n\n const spinner = ora(`Updating`).start()\n await Promise.all(keys.map(updateByKey))\n\n if (!options.skipCodegen) {\n console.log(`Updating descriptors`)\n await generate({\n config: options.config,\n })\n }\n\n spinner.stop()\n console.log(`Updated chain(s) \"${keys.join(\", \")}\"`)\n}\n"],"mappings":"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","names":["add","generate","remove","update","knownChains","relayChainName","mkdir","readFile","writeFile","existsSync","fsExists","fs","join","process","readPackage","join","process","join","fs","path","existsSync","readPackage","fsExists","fs","join","existsSync","metadata","ora","metadata","ora"]}
|
package/dist/index.js
CHANGED
package/dist/main.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkadot-api/cli",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"author": "Victor Oliva (https://github.com/voliva)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"sideEffects": true,
|
|
@@ -25,38 +25,38 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@commander-js/extra-typings": "^12.1.0",
|
|
27
27
|
"@polkadot-api/wasm-executor": "^0.1.1",
|
|
28
|
-
"@types/node": "^
|
|
28
|
+
"@types/node": "^22.2.0",
|
|
29
29
|
"commander": "^12.1.0",
|
|
30
|
-
"
|
|
30
|
+
"execa": "^9.3.0",
|
|
31
31
|
"fs.promises.exists": "^1.1.4",
|
|
32
32
|
"ora": "^8.0.1",
|
|
33
33
|
"read-pkg": "^9.0.1",
|
|
34
34
|
"rxjs": "^7.8.1",
|
|
35
35
|
"scale-ts": "^1.6.0",
|
|
36
36
|
"tsc-prog": "^2.3.0",
|
|
37
|
-
"tsup": "^8.2.
|
|
37
|
+
"tsup": "^8.2.4",
|
|
38
38
|
"typescript": "^5.5.4",
|
|
39
|
-
"write-package": "^7.0
|
|
39
|
+
"write-package": "^7.1.0",
|
|
40
40
|
"ws": "^8.18.0",
|
|
41
|
-
"@polkadot-api/
|
|
41
|
+
"@polkadot-api/codegen": "0.8.0",
|
|
42
42
|
"@polkadot-api/json-rpc-provider-proxy": "0.2.0",
|
|
43
|
-
"@polkadot-api/
|
|
44
|
-
"@polkadot-api/known-chains": "0.
|
|
45
|
-
"@polkadot-api/metadata-
|
|
46
|
-
"@polkadot-api/
|
|
47
|
-
"@polkadot-api/observable-client": "0.5.0",
|
|
48
|
-
"@polkadot-api/sm-provider": "0.1.1",
|
|
43
|
+
"@polkadot-api/json-rpc-provider": "0.0.3",
|
|
44
|
+
"@polkadot-api/known-chains": "0.4.0",
|
|
45
|
+
"@polkadot-api/metadata-builders": "0.5.0",
|
|
46
|
+
"@polkadot-api/metadata-compatibility": "0.1.2",
|
|
49
47
|
"@polkadot-api/polkadot-sdk-compat": "1.0.1",
|
|
50
|
-
"@polkadot-api/
|
|
51
|
-
"@polkadot-api/
|
|
52
|
-
"@polkadot-api/
|
|
53
|
-
"@polkadot-api/
|
|
54
|
-
"@polkadot-api/
|
|
48
|
+
"@polkadot-api/observable-client": "0.5.1",
|
|
49
|
+
"@polkadot-api/sm-provider": "0.1.1",
|
|
50
|
+
"@polkadot-api/smoldot": "0.3.0",
|
|
51
|
+
"@polkadot-api/substrate-client": "0.2.1",
|
|
52
|
+
"@polkadot-api/substrate-bindings": "0.6.3",
|
|
53
|
+
"@polkadot-api/ws-provider": "0.2.0",
|
|
54
|
+
"@polkadot-api/utils": "0.1.1"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@types/ws": "^8.5.
|
|
57
|
+
"@types/ws": "^8.5.12",
|
|
58
58
|
"clet": "^1.0.1",
|
|
59
|
-
"@polkadot-api/json-rpc-provider": "0.0.
|
|
59
|
+
"@polkadot-api/json-rpc-provider": "0.0.3"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"build-core": "tsc --noEmit && tsup-node src/main.ts src/index.ts src/metadataWorker.ts --clean --out-dir dist --dts --sourcemap --platform node --format esm",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/metadata.ts","../src/papiConfig.ts","../src/commands/generate.ts","../src/commands/add.ts","../src/commands/remove.ts","../src/commands/update.ts"],"sourcesContent":["import { Option, program } from \"@commander-js/extra-typings\"\nimport type { add, generate, remove, update } from \"./commands\"\nimport * as knownChains from \"@polkadot-api/known-chains\"\n\nexport type Commands = {\n add: typeof add\n generate: typeof generate\n remove: typeof remove\n update: typeof update\n}\n\nexport function getCli({ add, generate, remove, update }: Commands) {\n program.name(\"polkadot-api\").description(\"Polkadot API CLI\")\n\n const config = new Option(\"--config <filename>\", \"Source for the config file\")\n\n program\n .command(\"generate\", {\n isDefault: true,\n })\n .description(\"Generate descriptor files\")\n .addOption(config)\n .option(\n \"--whitelist <filename>\",\n \"Use whitelist file to reduce descriptor size\",\n )\n .action(generate)\n\n program\n .command(\"add\")\n .description(\"Add a new chain spec to the list\")\n .argument(\"<key>\", \"Key identifier for the chain spec\")\n .addOption(config)\n .option(\"-f, --file <filename>\", \"Source from metadata encoded file\")\n .option(\"-w, --wsUrl <URL>\", \"Source from websocket url\")\n .option(\"-c, --chainSpec <filename>\", \"Source from chain spec file\")\n .addOption(\n new Option(\"-n, --name <name>\", \"Source from a well-known chain\").choices(\n Object.keys(knownChains),\n ),\n )\n .option(\"--wasm <filename>\", \"Source from runtime wasm file\")\n .option(\"--no-persist\", \"Do not persist the metadata as a file\")\n .option(\"--skip-codegen\", \"Skip running codegen after adding\")\n .action(add)\n\n program\n .command(\"update\")\n .description(\"Update the metadata files and generate descriptor files\")\n .argument(\n \"[keys]\",\n \"Keys of the metadata files to update, separated by commas. Leave empty for all\",\n )\n .addOption(config)\n .option(\"--skip-codegen\", \"Skip running codegen after updating\")\n .action(update)\n\n program\n .command(\"remove\")\n .description(\"Remove a chain spec from the list\")\n .argument(\"<key>\", \"Key identifier for the chain spec\")\n .addOption(config)\n .option(\"--skip-codegen\", \"Skip running codegen after removing\")\n .action(remove)\n\n return program\n}\n","import { createClient } from \"@polkadot-api/substrate-client\"\nimport type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport * as fs from \"node:fs/promises\"\nimport { V14, V15, metadata, v15 } from \"@polkadot-api/substrate-bindings\"\nimport { WebSocketProvider } from \"@polkadot-api/ws-provider/node\"\nimport { Worker } from \"node:worker_threads\"\nimport { getObservableClient } from \"@polkadot-api/observable-client\"\nimport { filter, firstValueFrom } from \"rxjs\"\nimport { EntryConfig } from \"./papiConfig\"\nimport { dirname } from \"path\"\nimport { fileURLToPath } from \"url\"\nimport * as knownChains from \"@polkadot-api/known-chains\"\nimport compatEnhancer from \"@polkadot-api/polkadot-sdk-compat\"\nimport type {\n MetadataWithRaw,\n WorkerRequestMessage,\n WorkerResponseMessage,\n} from \"./metadataWorker\"\n\nconst workerPath = fileURLToPath(import.meta.resolve(\"./metadataWorker.js\"))\n\nlet metadataWorker: Worker | null\nlet workerRefCount = 0\nasync function getMetadataWorker() {\n if (!metadataWorker) {\n metadataWorker = new Worker(workerPath, {\n stdout: true,\n stderr: true,\n })\n await new Promise((resolve) => {\n metadataWorker?.once(\"message\", resolve)\n metadataWorker?.postMessage(\"ready\")\n })\n }\n return metadataWorker\n}\n\nconst getMetadataCall = async (provider: JsonRpcProvider) => {\n const client = getObservableClient(createClient(provider))\n const { runtime$, unfollow } = client.chainHead$()\n const runtime = await firstValueFrom(runtime$.pipe(filter(Boolean)))\n\n unfollow()\n client.destroy()\n\n return { metadata: runtime.lookup.metadata, metadataRaw: runtime.metadataRaw }\n}\n\nconst getWorkerMessage = (chain: string): Omit<WorkerRequestMessage, \"id\"> => {\n if (!(chain in knownChains)) {\n const relayChainName = JSON.parse(chain).relay_chain\n return {\n potentialRelayChainSpecs:\n relayChainName in knownChains\n ? [knownChains[relayChainName as keyof typeof knownChains]]\n : [],\n chainSpec: chain,\n }\n }\n\n const relayChainName = Object.keys(knownChains).find(\n (c) => c !== chain && chain.startsWith(c),\n )\n const potentialRelayChainSpecs = relayChainName\n ? [knownChains[relayChainName as keyof typeof knownChains]]\n : []\n const chainSpec = knownChains[chain as keyof typeof knownChains]\n\n return {\n potentialRelayChainSpecs,\n chainSpec,\n }\n}\n\nlet id = 0\nconst getMetadataFromSmoldot = async (chain: string) => {\n workerRefCount++\n try {\n const reqId = id++\n const metadataWorker = await getMetadataWorker()\n const message: WorkerRequestMessage = {\n ...getWorkerMessage(chain),\n id: reqId,\n }\n const metadata = await new Promise<MetadataWithRaw>((resolve) => {\n const listener = (data: WorkerResponseMessage) => {\n if (data.id !== reqId) return\n metadataWorker.off(\"message\", listener)\n resolve(data.metadata)\n }\n metadataWorker.on(\"message\", listener)\n metadataWorker.postMessage(message)\n })\n return metadata\n } finally {\n workerRefCount--\n if (workerRefCount === 0) {\n metadataWorker?.terminate()\n metadataWorker = null\n }\n }\n}\n\nconst getMetadataFromWsURL = async (wsURL: string) =>\n getMetadataCall(compatEnhancer(WebSocketProvider(wsURL)))\n\nexport async function getMetadata(\n entry: EntryConfig,\n): Promise<{ metadata: V15 | V14; metadataRaw: Uint8Array } | null> {\n // metadata file always prevails over other entries.\n // cli's update will update the metadata file when the user requests it.\n if (entry.metadata) {\n const data = await fs.readFile(entry.metadata)\n const metadataRaw = new Uint8Array(data)\n\n let meta: V14 | V15\n try {\n meta = metadata.dec(metadataRaw).metadata.value as V14 | V15\n } catch (_) {\n meta = v15.dec(metadataRaw)\n }\n\n return {\n metadata: meta,\n metadataRaw,\n }\n }\n\n if (\"chain\" in entry) {\n return getMetadataFromSmoldot(entry.chain)\n }\n\n if (\"chainSpec\" in entry) {\n const chainSpec = await fs.readFile(entry.chainSpec, \"utf8\")\n return getMetadataFromSmoldot(chainSpec)\n }\n\n if (\"wsUrl\" in entry) {\n return getMetadataFromWsURL(entry.wsUrl)\n }\n\n return null\n}\n\nexport async function writeMetadataToDisk(\n metadataRaw: Uint8Array,\n outFile: string,\n) {\n await fs.mkdir(dirname(outFile), { recursive: true })\n await fs.writeFile(outFile, metadataRaw)\n}\n","import fsExists from \"fs.promises.exists\"\nimport { readPackage } from \"read-pkg\"\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\"\nimport { join } from \"node:path\"\nimport { existsSync } from \"node:fs\"\n\nexport type EntryConfig =\n | {\n metadata: string\n }\n | {\n chainSpec: string\n metadata?: string\n }\n | {\n wsUrl: string\n metadata?: string\n }\n | {\n chain: string\n metadata?: string\n }\ntype Entries = Record<string, EntryConfig>\nexport type PapiConfig = {\n version: 0\n descriptorPath: string\n entries: Record<string, EntryConfig>\n}\n\nexport const papiFolder = \".papi\"\nconst papiCfgDefaultFile = \"polkadot-api.json\"\nconst packageJsonKey = \"polkadot-api\"\n\nexport const defaultConfig: PapiConfig = {\n version: 0,\n descriptorPath: join(papiFolder, \"descriptors\"),\n entries: {},\n}\n\nexport async function readPapiConfig(\n configFile: string | undefined,\n): Promise<PapiConfig | null> {\n if (configFile) return readFromFile(configFile)\n\n const currentVersionLocation = join(papiFolder, papiCfgDefaultFile)\n const currentVersionLocationExists = await fsExists(currentVersionLocation)\n\n const readConfig =\n (await (currentVersionLocationExists\n ? readFromFile(currentVersionLocation)\n : readFromFile(papiCfgDefaultFile))) ?? (await readFromPackageJson())\n\n // Store into current version location if it wasn't there\n if (readConfig && !currentVersionLocationExists) {\n await writePapiConfig(undefined, readConfig)\n }\n return readConfig\n}\n\n/**\n * Writes config to configFile. If configFile is not specified, it writes to the\n * default path, by this priority order:\n *\n * 1. Default config file (polkadot-api.json)\n * 2. Package.json If no pre-existing config exists, then it creates a\n * polkadot-api.json file.\n */\nexport async function writePapiConfig(\n configFile: string | undefined,\n config: PapiConfig,\n) {\n if (configFile) return writeToFile(configFile, config)\n\n if (!existsSync(papiFolder)) {\n await mkdir(papiFolder)\n }\n return writeToFile(join(papiFolder, papiCfgDefaultFile), config)\n}\n\nasync function readFromFile(file: string) {\n const fileExists = await fsExists(file)\n if (!fileExists) return null\n\n return migrate(JSON.parse(await readFile(file, \"utf8\")))\n}\nasync function readFromPackageJson() {\n const packageJson = await readPackage()\n if (!(packageJsonKey in packageJson)) return null\n console.warn(\"Papi config in package.json is deprecated\")\n return migrate(packageJson[packageJsonKey])\n}\n\nfunction migrate(content: Entries | PapiConfig): PapiConfig {\n if (typeof content.version === \"number\") {\n return content as any\n }\n return {\n ...defaultConfig,\n entries: content as Entries,\n }\n}\n\nasync function writeToFile(file: string, config: PapiConfig) {\n if (file === \"package.json\") {\n throw new Error(\"Papi config in package.json is deprecated\")\n }\n return writeFile(file, JSON.stringify(config, null, 2))\n}\n","import { getMetadata } from \"@/metadata\"\nimport { readPapiConfig } from \"@/papiConfig\"\nimport { generateMultipleDescriptors } from \"@polkadot-api/codegen\"\nimport {\n EntryPointCodec,\n TypedefCodec,\n} from \"@polkadot-api/metadata-compatibility\"\nimport {\n Binary,\n h64,\n Tuple,\n V14,\n V15,\n Vector,\n} from \"@polkadot-api/substrate-bindings\"\nimport { existsSync } from \"fs\"\nimport fsExists from \"fs.promises.exists\"\nimport fs, { mkdtemp, rm } from \"fs/promises\"\nimport { tmpdir } from \"os\"\nimport path, { join } from \"path\"\nimport process from \"process\"\nimport tsc from \"tsc-prog\"\nimport tsup, { build } from \"tsup\"\nimport { updatePackage } from \"write-package\"\nimport { CommonOptions } from \"./commonOptions\"\nimport { spawn } from \"child_process\"\nimport { readPackage } from \"read-pkg\"\nimport { detect } from \"detect-package-manager\"\n\nexport interface GenerateOptions extends CommonOptions {\n clientLibrary?: string\n whitelist?: string\n}\n\nexport async function generate(opts: GenerateOptions) {\n if (process.env.PAPI_SKIP_GENERATE) {\n return\n }\n\n const config = await readPapiConfig(opts.config)\n if (!config) {\n throw new Error(\"Can't find the Polkadot-API configuration\")\n }\n const sources = config.entries\n\n if (Object.keys(sources).length == 0) {\n console.log(\"No chains defined in config file\")\n }\n\n console.log(`Reading metadata`)\n const chains = await Promise.all(\n Object.entries(sources).map(async ([key, source]) => ({\n key,\n metadata: (await getMetadata(source))!.metadata,\n knownTypes: {},\n })),\n )\n\n await cleanDescriptorsPackage(config.descriptorPath)\n const descriptorsDir = join(process.cwd(), config.descriptorPath)\n\n const clientPath = opts.clientLibrary ?? \"polkadot-api\"\n\n const whitelist = opts.whitelist ? await readWhitelist(opts.whitelist) : null\n const hash = await outputCodegen(\n chains,\n join(descriptorsDir, \"src\"),\n clientPath,\n whitelist,\n )\n await replacePackageJson(descriptorsDir, hash)\n\n await compileCodegen(descriptorsDir)\n await fs.rm(join(descriptorsDir, \"src\"), { recursive: true })\n await runInstall()\n}\n\nasync function cleanDescriptorsPackage(path: string) {\n const descriptorsDir = join(process.cwd(), path)\n if (!existsSync(descriptorsDir)) {\n await fs.mkdir(descriptorsDir, { recursive: true })\n\n // We have to keep the package.json in git because otherwise npm install on a fresh repo would fail\n await fs.writeFile(\n join(descriptorsDir, \".gitignore\"),\n \"*\\n!.gitignore\\n!package.json\",\n )\n }\n\n const packageJson = await readPackage()\n const packageSource = `file:${path}`\n const currentSource = packageJson.dependencies?.[\"@polkadot-api/descriptors\"]\n if (currentSource !== packageSource) {\n await updatePackage({\n dependencies: {\n \"@polkadot-api/descriptors\": packageSource,\n },\n })\n }\n\n const distDir = join(descriptorsDir, \"dist\")\n if (existsSync(distDir)) {\n await fs.rm(distDir, { recursive: true })\n }\n}\n\nasync function getPackageManager() {\n return process.env.npm_execpath ?? (await detect())\n}\nasync function runInstall() {\n const path = await getPackageManager()\n console.log(`${path} install`)\n const child = spawn(await getPackageManager(), [\"install\"], {\n stdio: \"inherit\",\n env: {\n ...process.env,\n PAPI_SKIP_GENERATE: \"true\",\n },\n })\n await new Promise((resolve) => child.on(\"close\", resolve))\n}\n\nasync function outputCodegen(\n chains: Array<{\n key: string\n metadata: V14 | V15\n knownTypes: Record<string, string>\n }>,\n outputFolder: string,\n clientPath: string,\n whitelist: string[] | null,\n) {\n const {\n descriptorsFileContent,\n descriptorTypesFileContent,\n metadataTypes,\n typesFileContent,\n publicTypes,\n } = generateMultipleDescriptors(\n chains,\n {\n client: clientPath,\n metadataTypes: \"./metadataTypes.scale\",\n types: \"./common-types\",\n descriptorValues: \"./descriptors\",\n },\n {\n whitelist: whitelist ?? undefined,\n },\n )\n const hash = h64(\n Binary.fromText(\n Array.from(metadataTypes.checksumToIdx.keys()).join(\"\"),\n ).asBytes(),\n )\n\n const EntryPointsCodec = Vector(EntryPointCodec)\n const TypedefsCodec = Vector(TypedefCodec)\n const TypesCodec = Tuple(EntryPointsCodec, TypedefsCodec)\n\n await fs.mkdir(outputFolder, { recursive: true })\n await fs.writeFile(\n path.join(outputFolder, \"metadataTypes.scale\"),\n TypesCodec.enc([metadataTypes.entryPoints, metadataTypes.typedefs]),\n )\n await fs.writeFile(\n path.join(outputFolder, \"scale-import.d.ts\"),\n `declare module \"*.scale\" {\n const content: string;\n export default content;\n }\n `,\n )\n await fs.writeFile(\n path.join(outputFolder, \"descriptors.ts\"),\n `///<reference path=\"./scale-import.d.ts\"/>\n${descriptorsFileContent}`,\n )\n await fs.writeFile(\n path.join(outputFolder, \"common-types.ts\"),\n typesFileContent,\n )\n await Promise.all(\n chains.map((chain, i) =>\n fs.writeFile(\n join(outputFolder, `${chain.key}.ts`),\n descriptorTypesFileContent[i],\n ),\n ),\n )\n await generateIndex(\n outputFolder,\n chains.map((chain) => chain.key),\n publicTypes,\n )\n\n return hash\n}\n\nasync function compileCodegen(packageDir: string) {\n const srcDir = join(packageDir, \"src\")\n const outDir = join(packageDir, \"dist\")\n\n if (await fsExists(outDir)) {\n await fs.rm(outDir, { recursive: true })\n }\n\n await tsup.build({\n format: [\"cjs\", \"esm\"],\n entry: [path.join(srcDir, \"index.ts\")],\n loader: {\n \".scale\": \"binary\",\n },\n platform: \"neutral\",\n outDir,\n outExtension: (ctx) => ({\n js: ctx.format === \"esm\" ? \".mjs\" : \".js\",\n }),\n })\n\n tsc.build({\n basePath: srcDir,\n compilerOptions: {\n skipLibCheck: true,\n declaration: true,\n emitDeclarationOnly: true,\n target: \"esnext\",\n module: \"esnext\",\n moduleResolution: \"node\",\n resolveJsonModule: true,\n allowSyntheticDefaultImports: true,\n outDir,\n },\n })\n}\n\nconst generateIndex = async (\n path: string,\n keys: string[],\n publicTypes: string[],\n) => {\n const indexTs = [\n ...keys.flatMap((key) => [\n `export { default as ${key} } from \"./${key}\";`,\n `export type * from \"./${key}\";`,\n ]),\n `export {`,\n publicTypes.join(\", \"),\n `} from './common-types';`,\n ].join(\"\\n\")\n await fs.writeFile(join(path, \"index.ts\"), indexTs)\n}\n\nasync function replacePackageJson(descriptorsDir: string, version: bigint) {\n await fs.writeFile(\n join(descriptorsDir, \"package.json\"),\n `{\n \"version\": \"0.1.0-autogenerated.${version}\",\n \"name\": \"@polkadot-api/descriptors\",\n \"files\": [\n \"dist\"\n ],\n \"exports\": {\n \".\": {\n \"module\": \"./dist/index.mjs\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.mjs\",\n \"browser\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"sideEffects\": false,\n \"peerDependencies\": {\n \"polkadot-api\": \"*\"\n }\n}\n`,\n )\n}\n\nasync function readWhitelist(filename: string): Promise<string[] | null> {\n if (!(await fsExists(filename))) {\n throw new Error(\"Whitelist file not found: \" + filename)\n }\n\n const tmpDir = await mkdtemp(join(tmpdir(), \"papi-\"))\n try {\n await build({\n format: \"esm\",\n entry: {\n index: filename,\n },\n outDir: tmpDir,\n outExtension() {\n return { js: \".mjs\" }\n },\n silent: true,\n })\n const { whitelist } = await import(join(tmpDir, \"index.mjs\"))\n return whitelist\n } finally {\n await rm(tmpDir, { recursive: true }).catch(console.error)\n }\n}\n","import { getMetadata, writeMetadataToDisk } from \"@/metadata\"\nimport {\n defaultConfig,\n EntryConfig,\n papiFolder,\n readPapiConfig,\n writePapiConfig,\n} from \"@/papiConfig\"\nimport { compactNumber } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex } from \"@polkadot-api/utils\"\nimport { getMetadataFromRuntime } from \"@polkadot-api/wasm-executor\"\nimport * as fs from \"node:fs/promises\"\nimport ora from \"ora\"\nimport { CommonOptions } from \"./commonOptions\"\nimport { generate } from \"./generate\"\nimport { join } from \"node:path\"\nimport { existsSync } from \"node:fs\"\n\nexport interface AddOptions extends CommonOptions {\n file?: string\n wsUrl?: string\n chainSpec?: string\n // well-known chains\n name?: string\n wasm?: string\n noPersist?: boolean\n}\n\nexport async function add(key: string, options: AddOptions) {\n const config = (await readPapiConfig(options.config)) ?? defaultConfig\n const entries = config.entries\n\n if (key in entries) {\n console.warn(`Replacing existing ${key} config`)\n }\n\n if (options.file) {\n entries[key] = {\n metadata: options.file,\n }\n } else if (options.wasm) {\n const spinner = ora(`Loading metadata from runtime`).start()\n const metadataHex = (await fs.readFile(options.wasm)).toString(\"hex\")\n const opaqueMeta = fromHex(getMetadataFromRuntime(`0x${metadataHex}`))\n\n // metadata comes with compact length prepended\n const metadataLen = compactNumber.dec(opaqueMeta)\n const compactLen = compactNumber.enc(metadataLen).length\n // verify we got all data\n if (opaqueMeta.length - compactLen !== metadataLen)\n throw new Error(\"Not able to retrieve runtime metadata\")\n\n spinner.text = \"Writing metadata\"\n const metadataRaw = opaqueMeta.slice(compactLen)\n const filename = await storeMetadata(metadataRaw, key)\n\n entries[key] = {\n metadata: filename,\n }\n } else {\n const entry = entryFromOptions(options)\n entries[key] = entry\n\n if (!options.noPersist) {\n const spinner = ora(`Loading metadata`).start()\n const { metadataRaw } = (await getMetadata(entry))!\n\n spinner.text = \"Writing metadata\"\n const filename = await storeMetadata(metadataRaw, key)\n\n spinner.succeed(`Metadata saved as ${filename}`)\n entry.metadata = filename\n }\n }\n\n await writePapiConfig(options.config, config)\n console.log(`Saved new spec \"${key}\"`)\n\n if (!options.skipCodegen) {\n generate({\n config: options.config,\n })\n }\n}\n\nasync function storeMetadata(metadata: Uint8Array, key: string) {\n const defaultFolder = join(papiFolder, \"metadata\")\n if (!existsSync(defaultFolder)) {\n await fs.mkdir(defaultFolder, { recursive: true })\n }\n const filename = join(defaultFolder, `${key}.scale`)\n await writeMetadataToDisk(metadata, filename)\n return filename\n}\n\nconst entryFromOptions = (options: AddOptions): EntryConfig => {\n if (options.wsUrl) {\n return {\n wsUrl: options.wsUrl,\n }\n }\n if (options.chainSpec) {\n return {\n chainSpec: options.chainSpec,\n }\n }\n if (options.name) {\n return {\n chain: options.name,\n }\n }\n\n throw new Error(\n \"add command needs one source, specified by options -f -w -c or -n\",\n )\n}\n","import { defaultConfig, readPapiConfig, writePapiConfig } from \"@/papiConfig\"\nimport { CommonOptions } from \"./commonOptions\"\nimport { generate } from \"./generate\"\n\nexport async function remove(key: string, options: CommonOptions) {\n const config = (await readPapiConfig(options.config)) ?? defaultConfig\n const entries = config.entries\n\n if (!(key in entries)) {\n throw new Error(`Key ${key} not set in polkadot-api config`)\n }\n\n delete entries[key]\n\n await writePapiConfig(options.config, config)\n console.log(`Removed chain \"${key}\" from config`)\n\n if (!options.skipCodegen) {\n generate({\n config: options.config,\n })\n }\n}\n","import { getMetadata, writeMetadataToDisk } from \"@/metadata\"\nimport { defaultConfig, EntryConfig, readPapiConfig } from \"@/papiConfig\"\nimport ora from \"ora\"\nimport { CommonOptions } from \"./commonOptions\"\nimport { generate } from \"./generate\"\n\nexport async function update(\n keysInput: string | undefined,\n options: CommonOptions,\n) {\n const entries = ((await readPapiConfig(options.config)) ?? defaultConfig)\n .entries\n const keys =\n keysInput === undefined ? Object.keys(entries) : keysInput.split(\",\")\n\n const updateByKey = async (key: string) => {\n if (!(key in entries)) {\n throw new Error(`Key ${key} not set in polkadot-api config`)\n }\n\n // Exclude metadata file from the entry, otherwise getMetadata would load from the file\n const { metadata: filename, ...entry } = entries[key]\n if (!filename) {\n if (keysInput !== undefined) {\n console.warn(`Key ${key} doesn't have a metadata file to update`)\n }\n\n return\n }\n\n const metadata = await getMetadata(entry as EntryConfig)\n // For those without other sources than metadata file, we get a null.\n if (!metadata) {\n if (keysInput !== undefined) {\n console.warn(\n `Key ${key} doesn't have any external source to update from`,\n )\n }\n return\n }\n\n spinner.text = `Writing ${key} metadata`\n await writeMetadataToDisk(metadata.metadataRaw, filename)\n spinner.succeed(`${key} metadata updated`)\n }\n\n const spinner = ora(`Updating`).start()\n await Promise.all(keys.map(updateByKey))\n\n console.log(`Updating descriptors`)\n await generate({ config: options.config })\n\n spinner.stop()\n console.log(`Updated chain(s) \"${keys.join(\", \")}\"`)\n\n if (!options.skipCodegen) {\n generate({\n config: options.config,\n })\n }\n}\n"],"mappings":"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","names":["add","generate","remove","update","knownChains","relayChainName","metadataWorker","metadata","mkdir","readFile","writeFile","existsSync","fsExists","fs","join","readPackage","path","fs","join","existsSync","metadata","ora","metadata","ora"]}
|
package/dist/metadataWorker.d.ts
DELETED
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
import * as _polkadot_api_substrate_bindings from '@polkadot-api/substrate-bindings';
|
|
2
|
-
import { JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
|
|
3
|
-
|
|
4
|
-
type WorkerRequestMessage = {
|
|
5
|
-
id: number;
|
|
6
|
-
potentialRelayChainSpecs: string[];
|
|
7
|
-
chainSpec: string;
|
|
8
|
-
};
|
|
9
|
-
type WorkerResponseMessage = {
|
|
10
|
-
id: number;
|
|
11
|
-
metadata: MetadataWithRaw;
|
|
12
|
-
};
|
|
13
|
-
declare function getMetadataFromProvider(provider: JsonRpcProvider): Promise<{
|
|
14
|
-
metadata: {
|
|
15
|
-
lookup: {
|
|
16
|
-
id: number;
|
|
17
|
-
path: string[];
|
|
18
|
-
params: {
|
|
19
|
-
name: string;
|
|
20
|
-
type: number | undefined;
|
|
21
|
-
}[];
|
|
22
|
-
def: {
|
|
23
|
-
tag: "composite";
|
|
24
|
-
value: {
|
|
25
|
-
name: string | undefined;
|
|
26
|
-
type: number;
|
|
27
|
-
typeName: string | undefined;
|
|
28
|
-
docs: string[];
|
|
29
|
-
}[];
|
|
30
|
-
} | {
|
|
31
|
-
tag: "variant";
|
|
32
|
-
value: {
|
|
33
|
-
name: string;
|
|
34
|
-
fields: {
|
|
35
|
-
name: string | undefined;
|
|
36
|
-
type: number;
|
|
37
|
-
typeName: string | undefined;
|
|
38
|
-
docs: string[];
|
|
39
|
-
}[];
|
|
40
|
-
index: number;
|
|
41
|
-
docs: string[];
|
|
42
|
-
}[];
|
|
43
|
-
} | {
|
|
44
|
-
tag: "sequence";
|
|
45
|
-
value: number;
|
|
46
|
-
} | {
|
|
47
|
-
tag: "array";
|
|
48
|
-
value: {
|
|
49
|
-
len: number;
|
|
50
|
-
type: number;
|
|
51
|
-
};
|
|
52
|
-
} | {
|
|
53
|
-
tag: "tuple";
|
|
54
|
-
value: number[];
|
|
55
|
-
} | {
|
|
56
|
-
tag: "primitive";
|
|
57
|
-
value: {
|
|
58
|
-
tag: "bool";
|
|
59
|
-
value: undefined;
|
|
60
|
-
} | {
|
|
61
|
-
tag: "char";
|
|
62
|
-
value: undefined;
|
|
63
|
-
} | {
|
|
64
|
-
tag: "str";
|
|
65
|
-
value: undefined;
|
|
66
|
-
} | {
|
|
67
|
-
tag: "u8";
|
|
68
|
-
value: undefined;
|
|
69
|
-
} | {
|
|
70
|
-
tag: "u16";
|
|
71
|
-
value: undefined;
|
|
72
|
-
} | {
|
|
73
|
-
tag: "u32";
|
|
74
|
-
value: undefined;
|
|
75
|
-
} | {
|
|
76
|
-
tag: "u64";
|
|
77
|
-
value: undefined;
|
|
78
|
-
} | {
|
|
79
|
-
tag: "u128";
|
|
80
|
-
value: undefined;
|
|
81
|
-
} | {
|
|
82
|
-
tag: "u256";
|
|
83
|
-
value: undefined;
|
|
84
|
-
} | {
|
|
85
|
-
tag: "i8";
|
|
86
|
-
value: undefined;
|
|
87
|
-
} | {
|
|
88
|
-
tag: "i16";
|
|
89
|
-
value: undefined;
|
|
90
|
-
} | {
|
|
91
|
-
tag: "i32";
|
|
92
|
-
value: undefined;
|
|
93
|
-
} | {
|
|
94
|
-
tag: "i64";
|
|
95
|
-
value: undefined;
|
|
96
|
-
} | {
|
|
97
|
-
tag: "i128";
|
|
98
|
-
value: undefined;
|
|
99
|
-
} | {
|
|
100
|
-
tag: "i256";
|
|
101
|
-
value: undefined;
|
|
102
|
-
};
|
|
103
|
-
} | {
|
|
104
|
-
tag: "compact";
|
|
105
|
-
value: number;
|
|
106
|
-
} | {
|
|
107
|
-
tag: "bitSequence";
|
|
108
|
-
value: {
|
|
109
|
-
bitStoreType: number;
|
|
110
|
-
bitOrderType: number;
|
|
111
|
-
};
|
|
112
|
-
};
|
|
113
|
-
docs: string[];
|
|
114
|
-
}[];
|
|
115
|
-
pallets: {
|
|
116
|
-
docs: string[];
|
|
117
|
-
name: string;
|
|
118
|
-
storage: {
|
|
119
|
-
prefix: string;
|
|
120
|
-
items: {
|
|
121
|
-
name: string;
|
|
122
|
-
modifier: number;
|
|
123
|
-
type: {
|
|
124
|
-
tag: "map";
|
|
125
|
-
value: {
|
|
126
|
-
hashers: ({
|
|
127
|
-
tag: "Blake2128";
|
|
128
|
-
value: undefined;
|
|
129
|
-
} | {
|
|
130
|
-
tag: "Blake2256";
|
|
131
|
-
value: undefined;
|
|
132
|
-
} | {
|
|
133
|
-
tag: "Blake2128Concat";
|
|
134
|
-
value: undefined;
|
|
135
|
-
} | {
|
|
136
|
-
tag: "Twox128";
|
|
137
|
-
value: undefined;
|
|
138
|
-
} | {
|
|
139
|
-
tag: "Twox256";
|
|
140
|
-
value: undefined;
|
|
141
|
-
} | {
|
|
142
|
-
tag: "Twox64Concat";
|
|
143
|
-
value: undefined;
|
|
144
|
-
} | {
|
|
145
|
-
tag: "Identity";
|
|
146
|
-
value: undefined;
|
|
147
|
-
})[];
|
|
148
|
-
key: number;
|
|
149
|
-
value: number;
|
|
150
|
-
};
|
|
151
|
-
} | {
|
|
152
|
-
tag: "plain";
|
|
153
|
-
value: number;
|
|
154
|
-
};
|
|
155
|
-
fallback: _polkadot_api_substrate_bindings.HexString;
|
|
156
|
-
docs: string[];
|
|
157
|
-
}[];
|
|
158
|
-
} | undefined;
|
|
159
|
-
calls: number | undefined;
|
|
160
|
-
events: number | undefined;
|
|
161
|
-
constants: {
|
|
162
|
-
name: string;
|
|
163
|
-
type: number;
|
|
164
|
-
value: _polkadot_api_substrate_bindings.HexString;
|
|
165
|
-
docs: string[];
|
|
166
|
-
}[];
|
|
167
|
-
errors: number | undefined;
|
|
168
|
-
index: number;
|
|
169
|
-
}[];
|
|
170
|
-
extrinsic: {
|
|
171
|
-
type: number;
|
|
172
|
-
version: number;
|
|
173
|
-
signedExtensions: {
|
|
174
|
-
identifier: string;
|
|
175
|
-
type: number;
|
|
176
|
-
additionalSigned: number;
|
|
177
|
-
}[];
|
|
178
|
-
};
|
|
179
|
-
type: number;
|
|
180
|
-
apis: {
|
|
181
|
-
name: string;
|
|
182
|
-
methods: {
|
|
183
|
-
name: string;
|
|
184
|
-
inputs: {
|
|
185
|
-
name: string;
|
|
186
|
-
type: number;
|
|
187
|
-
}[];
|
|
188
|
-
output: number;
|
|
189
|
-
docs: string[];
|
|
190
|
-
}[];
|
|
191
|
-
docs: string[];
|
|
192
|
-
}[];
|
|
193
|
-
} | {
|
|
194
|
-
lookup: {
|
|
195
|
-
id: number;
|
|
196
|
-
path: string[];
|
|
197
|
-
params: {
|
|
198
|
-
name: string;
|
|
199
|
-
type: number | undefined;
|
|
200
|
-
}[];
|
|
201
|
-
def: {
|
|
202
|
-
tag: "composite";
|
|
203
|
-
value: {
|
|
204
|
-
name: string | undefined;
|
|
205
|
-
type: number;
|
|
206
|
-
typeName: string | undefined;
|
|
207
|
-
docs: string[];
|
|
208
|
-
}[];
|
|
209
|
-
} | {
|
|
210
|
-
tag: "variant";
|
|
211
|
-
value: {
|
|
212
|
-
name: string;
|
|
213
|
-
fields: {
|
|
214
|
-
name: string | undefined;
|
|
215
|
-
type: number;
|
|
216
|
-
typeName: string | undefined;
|
|
217
|
-
docs: string[];
|
|
218
|
-
}[];
|
|
219
|
-
index: number;
|
|
220
|
-
docs: string[];
|
|
221
|
-
}[];
|
|
222
|
-
} | {
|
|
223
|
-
tag: "sequence";
|
|
224
|
-
value: number;
|
|
225
|
-
} | {
|
|
226
|
-
tag: "array";
|
|
227
|
-
value: {
|
|
228
|
-
len: number;
|
|
229
|
-
type: number;
|
|
230
|
-
};
|
|
231
|
-
} | {
|
|
232
|
-
tag: "tuple";
|
|
233
|
-
value: number[];
|
|
234
|
-
} | {
|
|
235
|
-
tag: "primitive";
|
|
236
|
-
value: {
|
|
237
|
-
tag: "bool";
|
|
238
|
-
value: undefined;
|
|
239
|
-
} | {
|
|
240
|
-
tag: "char";
|
|
241
|
-
value: undefined;
|
|
242
|
-
} | {
|
|
243
|
-
tag: "str";
|
|
244
|
-
value: undefined;
|
|
245
|
-
} | {
|
|
246
|
-
tag: "u8";
|
|
247
|
-
value: undefined;
|
|
248
|
-
} | {
|
|
249
|
-
tag: "u16";
|
|
250
|
-
value: undefined;
|
|
251
|
-
} | {
|
|
252
|
-
tag: "u32";
|
|
253
|
-
value: undefined;
|
|
254
|
-
} | {
|
|
255
|
-
tag: "u64";
|
|
256
|
-
value: undefined;
|
|
257
|
-
} | {
|
|
258
|
-
tag: "u128";
|
|
259
|
-
value: undefined;
|
|
260
|
-
} | {
|
|
261
|
-
tag: "u256";
|
|
262
|
-
value: undefined;
|
|
263
|
-
} | {
|
|
264
|
-
tag: "i8";
|
|
265
|
-
value: undefined;
|
|
266
|
-
} | {
|
|
267
|
-
tag: "i16";
|
|
268
|
-
value: undefined;
|
|
269
|
-
} | {
|
|
270
|
-
tag: "i32";
|
|
271
|
-
value: undefined;
|
|
272
|
-
} | {
|
|
273
|
-
tag: "i64";
|
|
274
|
-
value: undefined;
|
|
275
|
-
} | {
|
|
276
|
-
tag: "i128";
|
|
277
|
-
value: undefined;
|
|
278
|
-
} | {
|
|
279
|
-
tag: "i256";
|
|
280
|
-
value: undefined;
|
|
281
|
-
};
|
|
282
|
-
} | {
|
|
283
|
-
tag: "compact";
|
|
284
|
-
value: number;
|
|
285
|
-
} | {
|
|
286
|
-
tag: "bitSequence";
|
|
287
|
-
value: {
|
|
288
|
-
bitStoreType: number;
|
|
289
|
-
bitOrderType: number;
|
|
290
|
-
};
|
|
291
|
-
};
|
|
292
|
-
docs: string[];
|
|
293
|
-
}[];
|
|
294
|
-
pallets: {
|
|
295
|
-
docs: string[];
|
|
296
|
-
name: string;
|
|
297
|
-
storage: {
|
|
298
|
-
prefix: string;
|
|
299
|
-
items: {
|
|
300
|
-
name: string;
|
|
301
|
-
modifier: number;
|
|
302
|
-
type: {
|
|
303
|
-
tag: "map";
|
|
304
|
-
value: {
|
|
305
|
-
hashers: ({
|
|
306
|
-
tag: "Blake2128";
|
|
307
|
-
value: undefined;
|
|
308
|
-
} | {
|
|
309
|
-
tag: "Blake2256";
|
|
310
|
-
value: undefined;
|
|
311
|
-
} | {
|
|
312
|
-
tag: "Blake2128Concat";
|
|
313
|
-
value: undefined;
|
|
314
|
-
} | {
|
|
315
|
-
tag: "Twox128";
|
|
316
|
-
value: undefined;
|
|
317
|
-
} | {
|
|
318
|
-
tag: "Twox256";
|
|
319
|
-
value: undefined;
|
|
320
|
-
} | {
|
|
321
|
-
tag: "Twox64Concat";
|
|
322
|
-
value: undefined;
|
|
323
|
-
} | {
|
|
324
|
-
tag: "Identity";
|
|
325
|
-
value: undefined;
|
|
326
|
-
})[];
|
|
327
|
-
key: number;
|
|
328
|
-
value: number;
|
|
329
|
-
};
|
|
330
|
-
} | {
|
|
331
|
-
tag: "plain";
|
|
332
|
-
value: number;
|
|
333
|
-
};
|
|
334
|
-
fallback: _polkadot_api_substrate_bindings.HexString;
|
|
335
|
-
docs: string[];
|
|
336
|
-
}[];
|
|
337
|
-
} | undefined;
|
|
338
|
-
calls: number | undefined;
|
|
339
|
-
events: number | undefined;
|
|
340
|
-
constants: {
|
|
341
|
-
name: string;
|
|
342
|
-
type: number;
|
|
343
|
-
value: _polkadot_api_substrate_bindings.HexString;
|
|
344
|
-
docs: string[];
|
|
345
|
-
}[];
|
|
346
|
-
errors: number | undefined;
|
|
347
|
-
index: number;
|
|
348
|
-
}[];
|
|
349
|
-
extrinsic: {
|
|
350
|
-
version: number;
|
|
351
|
-
address: number;
|
|
352
|
-
call: number;
|
|
353
|
-
signature: number;
|
|
354
|
-
extra: number;
|
|
355
|
-
signedExtensions: {
|
|
356
|
-
identifier: string;
|
|
357
|
-
type: number;
|
|
358
|
-
additionalSigned: number;
|
|
359
|
-
}[];
|
|
360
|
-
};
|
|
361
|
-
type: number;
|
|
362
|
-
apis: {
|
|
363
|
-
name: string;
|
|
364
|
-
methods: {
|
|
365
|
-
name: string;
|
|
366
|
-
inputs: {
|
|
367
|
-
name: string;
|
|
368
|
-
type: number;
|
|
369
|
-
}[];
|
|
370
|
-
output: number;
|
|
371
|
-
docs: string[];
|
|
372
|
-
}[];
|
|
373
|
-
docs: string[];
|
|
374
|
-
}[];
|
|
375
|
-
outerEnums: {
|
|
376
|
-
call: number;
|
|
377
|
-
event: number;
|
|
378
|
-
error: number;
|
|
379
|
-
};
|
|
380
|
-
custom: [string, {
|
|
381
|
-
type: number;
|
|
382
|
-
value: _polkadot_api_substrate_bindings.HexString;
|
|
383
|
-
}][];
|
|
384
|
-
};
|
|
385
|
-
metadataRaw: Uint8Array;
|
|
386
|
-
}>;
|
|
387
|
-
type MetadataWithRaw = Awaited<ReturnType<typeof getMetadataFromProvider>>;
|
|
388
|
-
|
|
389
|
-
export type { MetadataWithRaw, WorkerRequestMessage, WorkerResponseMessage };
|
package/dist/metadataWorker.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
// src/metadataWorker.ts
|
|
2
|
-
import { parentPort } from "node:worker_threads";
|
|
3
|
-
import { start } from "@polkadot-api/smoldot";
|
|
4
|
-
import { getSmProvider } from "@polkadot-api/sm-provider";
|
|
5
|
-
import { getObservableClient } from "@polkadot-api/observable-client";
|
|
6
|
-
import { createClient } from "@polkadot-api/substrate-client";
|
|
7
|
-
import { firstValueFrom, filter } from "rxjs";
|
|
8
|
-
var smoldot = start();
|
|
9
|
-
parentPort.on("message", async (data) => {
|
|
10
|
-
if (data === "ready") {
|
|
11
|
-
parentPort.postMessage("ready");
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
const potentialRelayChains = await Promise.all(
|
|
15
|
-
data.potentialRelayChainSpecs.map(
|
|
16
|
-
(chainSpec) => smoldot.addChain({ chainSpec })
|
|
17
|
-
)
|
|
18
|
-
);
|
|
19
|
-
const chain = await smoldot.addChain({
|
|
20
|
-
potentialRelayChains,
|
|
21
|
-
chainSpec: data.chainSpec
|
|
22
|
-
});
|
|
23
|
-
const metadata = await getMetadataFromProvider(getSmProvider(chain));
|
|
24
|
-
const response = {
|
|
25
|
-
metadata,
|
|
26
|
-
id: data.id
|
|
27
|
-
};
|
|
28
|
-
parentPort.postMessage(response);
|
|
29
|
-
});
|
|
30
|
-
parentPort.postMessage("ready");
|
|
31
|
-
async function getMetadataFromProvider(provider) {
|
|
32
|
-
const client = getObservableClient(createClient(provider));
|
|
33
|
-
const { runtime$, unfollow } = client.chainHead$();
|
|
34
|
-
const runtime = await firstValueFrom(runtime$.pipe(filter(Boolean)));
|
|
35
|
-
unfollow();
|
|
36
|
-
client.destroy();
|
|
37
|
-
return { metadata: runtime.lookup.metadata, metadataRaw: runtime.metadataRaw };
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=metadataWorker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/metadataWorker.ts"],"sourcesContent":["import { parentPort } from \"node:worker_threads\"\nimport { start } from \"@polkadot-api/smoldot\"\nimport { getSmProvider } from \"@polkadot-api/sm-provider\"\nimport { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getObservableClient } from \"@polkadot-api/observable-client\"\nimport { createClient } from \"@polkadot-api/substrate-client\"\nimport { firstValueFrom, filter } from \"rxjs\"\n\nexport type WorkerRequestMessage = {\n id: number\n potentialRelayChainSpecs: string[]\n chainSpec: string\n}\nexport type WorkerResponseMessage = {\n id: number\n metadata: MetadataWithRaw\n}\n\nconst smoldot = start()\nparentPort!.on(\"message\", async (data: WorkerRequestMessage | \"ready\") => {\n if (data === \"ready\") {\n parentPort!.postMessage(\"ready\")\n return\n }\n\n const potentialRelayChains = await Promise.all(\n data.potentialRelayChainSpecs.map((chainSpec) =>\n smoldot.addChain({ chainSpec }),\n ),\n )\n const chain = await smoldot.addChain({\n potentialRelayChains,\n chainSpec: data.chainSpec,\n })\n const metadata = await getMetadataFromProvider(getSmProvider(chain))\n const response: WorkerResponseMessage = {\n metadata,\n id: data.id,\n }\n parentPort!.postMessage(response)\n})\nparentPort!.postMessage(\"ready\")\n\nasync function getMetadataFromProvider(provider: JsonRpcProvider) {\n const client = getObservableClient(createClient(provider))\n const { runtime$, unfollow } = client.chainHead$()\n const runtime = await firstValueFrom(runtime$.pipe(filter(Boolean)))\n\n unfollow()\n client.destroy()\n\n return { metadata: runtime.lookup.metadata, metadataRaw: runtime.metadataRaw }\n}\nexport type MetadataWithRaw = Awaited<\n ReturnType<typeof getMetadataFromProvider>\n>\n"],"mappings":";AAAA,SAAS,kBAAkB;AAC3B,SAAS,aAAa;AACtB,SAAS,qBAAqB;AAE9B,SAAS,2BAA2B;AACpC,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB,cAAc;AAYvC,IAAM,UAAU,MAAM;AACtB,WAAY,GAAG,WAAW,OAAO,SAAyC;AACxE,MAAI,SAAS,SAAS;AACpB,eAAY,YAAY,OAAO;AAC/B;AAAA,EACF;AAEA,QAAM,uBAAuB,MAAM,QAAQ;AAAA,IACzC,KAAK,yBAAyB;AAAA,MAAI,CAAC,cACjC,QAAQ,SAAS,EAAE,UAAU,CAAC;AAAA,IAChC;AAAA,EACF;AACA,QAAM,QAAQ,MAAM,QAAQ,SAAS;AAAA,IACnC;AAAA,IACA,WAAW,KAAK;AAAA,EAClB,CAAC;AACD,QAAM,WAAW,MAAM,wBAAwB,cAAc,KAAK,CAAC;AACnE,QAAM,WAAkC;AAAA,IACtC;AAAA,IACA,IAAI,KAAK;AAAA,EACX;AACA,aAAY,YAAY,QAAQ;AAClC,CAAC;AACD,WAAY,YAAY,OAAO;AAE/B,eAAe,wBAAwB,UAA2B;AAChE,QAAM,SAAS,oBAAoB,aAAa,QAAQ,CAAC;AACzD,QAAM,EAAE,UAAU,SAAS,IAAI,OAAO,WAAW;AACjD,QAAM,UAAU,MAAM,eAAe,SAAS,KAAK,OAAO,OAAO,CAAC,CAAC;AAEnE,WAAS;AACT,SAAO,QAAQ;AAEf,SAAO,EAAE,UAAU,QAAQ,OAAO,UAAU,aAAa,QAAQ,YAAY;AAC/E;","names":[]}
|