@parity/product-deploy 0.11.0-rc.0 → 0.11.0-rc.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.
Files changed (38) hide show
  1. package/bin/bulletin-deploy +42 -10
  2. package/dist/auth-config.js +3 -3
  3. package/dist/bug-report.js +4 -4
  4. package/dist/{chunk-5LAKX4AB.js → chunk-2MRHO7I5.js} +1 -1
  5. package/dist/{chunk-BKEXG2QF.js → chunk-33T5FHX2.js} +1 -1
  6. package/dist/{chunk-QNXFKFJD.js → chunk-422RAWSV.js} +2 -2
  7. package/dist/{chunk-HN3YZDX4.js → chunk-6YUT276Z.js} +1 -1
  8. package/dist/{chunk-A2JFMAG3.js → chunk-6ZF7V4PG.js} +2 -2
  9. package/dist/{chunk-XQTDSVJG.js → chunk-AR5IUHCM.js} +2 -2
  10. package/dist/{chunk-D3NJNDEW.js → chunk-HXN2HJMZ.js} +1 -1
  11. package/dist/{chunk-X2BEJT4V.js → chunk-MU75RB7Z.js} +1 -1
  12. package/dist/{chunk-MDS7T32B.js → chunk-OXENTCOF.js} +51 -10
  13. package/dist/{chunk-RBTRQH32.js → chunk-WCEPEDZA.js} +3 -3
  14. package/dist/{chunk-VJITD6HN.js → chunk-YVLDMADS.js} +14 -27
  15. package/dist/chunk-probe.js +3 -3
  16. package/dist/commands/login.js +10 -10
  17. package/dist/commands/logout.js +4 -4
  18. package/dist/commands/transfer.js +3 -3
  19. package/dist/commands/whoami.js +3 -3
  20. package/dist/deploy-actors.js +5 -5
  21. package/dist/deploy.d.ts +26 -1
  22. package/dist/deploy.js +10 -10
  23. package/dist/dotns.d.ts +42 -2
  24. package/dist/dotns.js +3 -3
  25. package/dist/index.js +18 -18
  26. package/dist/manifest/publish.js +11 -11
  27. package/dist/memory-report.js +2 -2
  28. package/dist/merkle.js +10 -10
  29. package/dist/personhood/bootstrap.js +6 -6
  30. package/dist/personhood/people-client.js +3 -3
  31. package/dist/run-state.js +1 -1
  32. package/dist/sss-allowance-cache.js +4 -4
  33. package/dist/storage-signer.js +10 -10
  34. package/dist/suppress-localstorage-warning.d.ts +2 -0
  35. package/dist/suppress-localstorage-warning.js +7 -0
  36. package/dist/telemetry.js +2 -2
  37. package/dist/version-check.js +3 -3
  38. package/package.json +2 -2
@@ -1,5 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ // Must be the FIRST import: installs process.emitWarning suppressor before any
4
+ // SDK module-init code runs. In ESM, static imports are evaluated before inline
5
+ // code, so the suppressor must live in a separate module imported ahead of the
6
+ // SDK modules that trigger the "@parity/product-sdk-logger" localStorage warning.
7
+ import "../dist/suppress-localstorage-warning.js";
8
+
3
9
  import { deploy, DEFAULT_BULLETIN_RPC, DEFAULT_POOL_SIZE, NonRetryableError, EXIT_CODE_NO_RETRY, isConnectionError, isBenignTeardownError, unpublish } from "../dist/deploy.js";
4
10
  import { VERSION, setDeployAttribute, captureWarning, closeTelemetry, setRunStateActive, markRelaunchOomHintShown } from "../dist/telemetry.js";
5
11
  import { handleFailedDeploy, handlePreflightVersionCheck, fetchVersionInfo, preReleaseWarning, checkNodeVersion } from "../dist/version-check.js";
@@ -7,16 +13,7 @@ import { setDeployContext, installLogCapture, buildCliFlagsSummary } from "../di
7
13
  import { loadRunState, writeRunState, shouldSkipStaleWarning, shouldShowOomHint, probablyOomRssMb } from "../dist/run-state.js";
8
14
  import { loadEnvironments, listEnvironments, formatEnvironmentTable, DEFAULT_ENV_ID } from "../dist/environments.js";
9
15
  import * as fs from "fs";
10
-
11
- // Suppress "@parity/product-sdk-logger" localStorage warning in Node.js v22+.
12
- // The logger tries to read log-level config from localStorage which doesn't exist
13
- // in Node.js — it emits a NoSuchNativeMethod warning we cannot fix upstream.
14
- const _origEmitWarning = process.emitWarning.bind(process);
15
- process.emitWarning = (warning, ...rest) => {
16
- const msg = (typeof warning === "string" ? warning : warning?.message ?? String(warning)).toLowerCase();
17
- if (msg.includes("localstorage") || msg.includes("local storage")) return;
18
- _origEmitWarning(warning, ...rest);
19
- };
16
+ import * as readline from "readline";
20
17
 
21
18
  // Install early so anything printed during flag parsing / preflight is
22
19
  // available to the bug-report log tail.
@@ -477,6 +474,41 @@ try {
477
474
  publish: flags.publish,
478
475
  failOnPublishError: flags.failOnPublishError,
479
476
  transferToSignedInUser: !flags.noTransferToSignedinUser,
477
+ // Human-first phone signing hooks (spec: 2026-06-13-human-first-phone-signing-design).
478
+ onPhoneSignaturePlan: (steps) => {
479
+ if (steps.length === 1) {
480
+ console.log(`\nHave your phone ready — 1 signature needed (${steps[0].toLowerCase()})`);
481
+ } else if (steps.length > 1) {
482
+ const display = steps.flatMap((s, i) =>
483
+ s === "Register" && steps[i - 1] === "Commitment" ? ["(wait)", s] : [s]
484
+ );
485
+ console.log(`\nHave your phone ready — ${steps.length} signatures needed`);
486
+ console.log(` ${display.map(s => s.toLowerCase()).join(" · ")}`);
487
+ }
488
+ },
489
+ confirmPhoneReady: ({ label, attempt }) => new Promise((resolve, reject) => {
490
+ if (attempt >= 2) {
491
+ console.log(`\n Re-sign needed (attempt ${attempt}) — approve on your phone, then press Y to continue (Ctrl-C to abort).`);
492
+ } else {
493
+ console.log(`\n Check your phone → ${label}`);
494
+ console.log(` Press Y when ready (Ctrl-C to abort):`);
495
+ }
496
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
497
+ let settled = false;
498
+ const settle = (fn) => { if (!settled) { settled = true; rl.close(); fn(); } };
499
+ rl.on("close", () => settle(reject.bind(null, new Error("aborted by user"))));
500
+ const ask = () => {
501
+ rl.question(" > ", (line) => {
502
+ const answer = line.trim().toLowerCase();
503
+ if (answer === "y" || answer === "") {
504
+ settle(resolve);
505
+ } else {
506
+ ask();
507
+ }
508
+ });
509
+ };
510
+ ask();
511
+ }),
480
512
  });
481
513
 
482
514
  const output = process.env.GITHUB_OUTPUT;
@@ -9,10 +9,10 @@ import {
9
9
  getPeopleChainEndpoints,
10
10
  hasPersistedSession,
11
11
  resolveBulletinEndpoints
12
- } from "./chunk-X2BEJT4V.js";
12
+ } from "./chunk-MU75RB7Z.js";
13
13
  import "./chunk-TSPERKUS.js";
14
- import "./chunk-D3NJNDEW.js";
15
- import "./chunk-XQTDSVJG.js";
14
+ import "./chunk-HXN2HJMZ.js";
15
+ import "./chunk-AR5IUHCM.js";
16
16
  import "./chunk-QRKI6MMK.js";
17
17
  import "./chunk-ZOC4GITL.js";
18
18
  export {
@@ -9,10 +9,10 @@ import {
9
9
  offerBugReport,
10
10
  scrubSecrets,
11
11
  setDeployContext
12
- } from "./chunk-RBTRQH32.js";
13
- import "./chunk-5LAKX4AB.js";
14
- import "./chunk-D3NJNDEW.js";
15
- import "./chunk-XQTDSVJG.js";
12
+ } from "./chunk-WCEPEDZA.js";
13
+ import "./chunk-2MRHO7I5.js";
14
+ import "./chunk-HXN2HJMZ.js";
15
+ import "./chunk-AR5IUHCM.js";
16
16
  export {
17
17
  buildCliFlagsSummary,
18
18
  buildLabels,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-D3NJNDEW.js";
3
+ } from "./chunk-HXN2HJMZ.js";
4
4
 
5
5
  // src/version-check.ts
6
6
  import { execSync, execFileSync } from "child_process";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  captureWarning
3
- } from "./chunk-D3NJNDEW.js";
3
+ } from "./chunk-HXN2HJMZ.js";
4
4
 
5
5
  // src/chunk-probe.ts
6
6
  import { Twox128, Blake2128Concat, decAnyMetadata, unifyMetadata } from "@polkadot-api/substrate-bindings";
@@ -7,10 +7,10 @@ import {
7
7
  resolveDotnsConnectOptions,
8
8
  storeDirectory,
9
9
  storeFile
10
- } from "./chunk-VJITD6HN.js";
10
+ } from "./chunk-YVLDMADS.js";
11
11
  import {
12
12
  DotNS
13
- } from "./chunk-MDS7T32B.js";
13
+ } from "./chunk-OXENTCOF.js";
14
14
  import {
15
15
  getPopSelfServeConfig,
16
16
  loadEnvironments,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-GRPLHUYC.js";
4
4
  import {
5
5
  DOT_DAPP_ID
6
- } from "./chunk-X2BEJT4V.js";
6
+ } from "./chunk-MU75RB7Z.js";
7
7
 
8
8
  // src/sss-allowance-cache.ts
9
9
  import { mkdir, readFile, writeFile, unlink } from "fs/promises";
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-5FLTDWWP.js";
5
5
  import {
6
6
  DOT_PRODUCT_ID
7
- } from "./chunk-X2BEJT4V.js";
7
+ } from "./chunk-MU75RB7Z.js";
8
8
  import {
9
9
  DEFAULT_MNEMONIC
10
- } from "./chunk-MDS7T32B.js";
10
+ } from "./chunk-OXENTCOF.js";
11
11
 
12
12
  // src/deploy-actors.ts
13
13
  var DEFAULT_WORKER_SURI = DEFAULT_MNEMONIC;
@@ -6,7 +6,7 @@ import * as path from "path";
6
6
  // package.json
7
7
  var package_default = {
8
8
  name: "@parity/product-deploy",
9
- version: "0.11.0-rc.0",
9
+ version: "0.11.0-rc.2",
10
10
  private: false,
11
11
  repository: {
12
12
  type: "git",
@@ -51,7 +51,7 @@ var package_default = {
51
51
  "tools/release-retry-wrapper.mjs"
52
52
  ],
53
53
  scripts: {
54
- build: "tsup src/index.ts src/deploy.ts src/dotns.ts src/pool.ts src/telemetry.ts src/memory-report.ts src/merkle.ts src/gh-pages-mirror.ts src/version-check.ts src/bug-report.ts src/run-state.ts src/environments.ts src/errors.ts src/manifest.ts src/chunk-probe.ts src/manifest-embed.ts src/manifest-fetch.ts src/manifest-roundtrip.ts src/incremental-stats.ts src/chunker.ts src/personhood/encoding.ts src/personhood/hashing.ts src/personhood/constants.ts src/personhood/member-key.ts src/personhood/people-client.ts src/personhood/proof-validity.ts src/personhood/reprove.ts src/personhood/bind-personal-id.ts src/personhood/claim-pgas.ts src/personhood/bind-paid-alias.ts src/personhood/bootstrap.ts src/personhood/chain-prereqs.ts src/manifest/types.ts src/manifest/schema.ts src/manifest/byte-budget.ts src/manifest/config-load.ts src/manifest/publish.ts src/auth/index.ts src/auth/vendor/index.ts src/auth/vendor/ui/index.ts src/auth-config.ts src/commands/login.ts src/commands/logout.ts src/commands/whoami.ts src/commands/transfer.ts src/storage-signer.ts src/spinner.ts src/sss-allowance.ts src/sss-allowance-cache.ts src/deploy-actors.ts --format esm --dts --clean --target node22",
54
+ build: "tsup src/suppress-localstorage-warning.ts src/index.ts src/deploy.ts src/dotns.ts src/pool.ts src/telemetry.ts src/memory-report.ts src/merkle.ts src/gh-pages-mirror.ts src/version-check.ts src/bug-report.ts src/run-state.ts src/environments.ts src/errors.ts src/manifest.ts src/chunk-probe.ts src/manifest-embed.ts src/manifest-fetch.ts src/manifest-roundtrip.ts src/incremental-stats.ts src/chunker.ts src/personhood/encoding.ts src/personhood/hashing.ts src/personhood/constants.ts src/personhood/member-key.ts src/personhood/people-client.ts src/personhood/proof-validity.ts src/personhood/reprove.ts src/personhood/bind-personal-id.ts src/personhood/claim-pgas.ts src/personhood/bind-paid-alias.ts src/personhood/bootstrap.ts src/personhood/chain-prereqs.ts src/manifest/types.ts src/manifest/schema.ts src/manifest/byte-budget.ts src/manifest/config-load.ts src/manifest/publish.ts src/auth/index.ts src/auth/vendor/index.ts src/auth/vendor/ui/index.ts src/auth-config.ts src/commands/login.ts src/commands/logout.ts src/commands/whoami.ts src/commands/transfer.ts src/storage-signer.ts src/spinner.ts src/sss-allowance.ts src/sss-allowance-cache.ts src/deploy-actors.ts --format esm --dts --clean --target node22",
55
55
  "refresh-environments": "node scripts/refresh-environments.mjs",
56
56
  postinstall: "patch-package || true",
57
57
  prepare: "npm run build",
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  package_default,
3
3
  writeRunState
4
- } from "./chunk-XQTDSVJG.js";
4
+ } from "./chunk-AR5IUHCM.js";
5
5
 
6
6
  // src/memory-report.ts
7
7
  import * as fs2 from "fs";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-TSPERKUS.js";
4
4
  import {
5
5
  VERSION
6
- } from "./chunk-D3NJNDEW.js";
6
+ } from "./chunk-HXN2HJMZ.js";
7
7
  import {
8
8
  loadEnvironments
9
9
  } from "./chunk-QRKI6MMK.js";
@@ -11,7 +11,7 @@ import {
11
11
  setDeploySentryTag,
12
12
  truncateAddress,
13
13
  withSpan
14
- } from "./chunk-D3NJNDEW.js";
14
+ } from "./chunk-HXN2HJMZ.js";
15
15
  import {
16
16
  validateContractAddresses
17
17
  } from "./chunk-QRKI6MMK.js";
@@ -988,6 +988,11 @@ var DotNS = class {
988
988
  _popSelfServe = null;
989
989
  _registerStorageDeposit = MINIMUM_REGISTER_STORAGE_DEPOSIT;
990
990
  _onPhoneSigningRequired = void 0;
991
+ _confirmPhoneReady = void 0;
992
+ /** Total phone-signature count for this DotNS session (drives the `total` field passed to confirmPhoneReady). */
993
+ _phoneSignatureTotal = 0;
994
+ /** Running attempt counter per label for re-sign detection. Reset at connect/disconnect. */
995
+ _phoneSignatureAttempts = /* @__PURE__ */ new Map();
991
996
  // Test-only seam: consumed once by classifyAliasAccountState() then cleared.
992
997
  // Mirrors the __setDeployRootSpanForTest / __setSentryForTest pattern.
993
998
  _classifyOverrideForTest = null;
@@ -1038,6 +1043,9 @@ var DotNS = class {
1038
1043
  if (options.onPhoneSigningRequired !== void 0) {
1039
1044
  this._onPhoneSigningRequired = options.onPhoneSigningRequired;
1040
1045
  }
1046
+ if (options.confirmPhoneReady !== void 0) {
1047
+ this._confirmPhoneReady = options.confirmPhoneReady;
1048
+ }
1041
1049
  const rpc = options.rpc || process.env.DOTNS_RPC || this.assetHubEndpoints[0];
1042
1050
  this.rpc = rpc;
1043
1051
  this._usesExternalSigner = Boolean(options.signer && options.signerAddress);
@@ -1458,11 +1466,14 @@ var DotNS = class {
1458
1466
  return decodeFunctionResult({ abi: contractAbi, functionName, data: rawData });
1459
1467
  }
1460
1468
  async contractTransaction(contractAddress, value, contractAbi, functionName, args = [], statusCallback = () => {
1461
- }, { useNoncePolling, verifyEffect, feeAsset } = {}) {
1469
+ }, { useNoncePolling, verifyEffect, feeAsset, phoneLabel } = {}) {
1462
1470
  this.ensureConnected();
1463
1471
  if (!this.clientWrapper) throw new Error("contractTransaction: polkadot-api client not available");
1464
1472
  const encodedCallData = encodeFunctionData({ abi: contractAbi, functionName, args });
1465
1473
  const rpcs = this.rpc ? [this.rpc, ...this.assetHubEndpoints.filter((ep) => ep !== this.rpc)] : this.assetHubEndpoints;
1474
+ if (phoneLabel !== void 0) {
1475
+ await this._awaitPhoneReady(phoneLabel);
1476
+ }
1466
1477
  return await withTimeout(
1467
1478
  this.clientWrapper.submitTransaction(contractAddress, value, encodedCallData, this.substrateAddress, this.signer, statusCallback, { rpcs, useNoncePolling, functionName, args, contracts: this._contracts, verifyEffect, feeAsset }),
1468
1479
  OPERATION_TIMEOUT_MS,
@@ -1735,8 +1746,7 @@ var DotNS = class {
1735
1746
  };
1736
1747
  console.log(`
1737
1748
  Linking content...`);
1738
- this._onPhoneSigningRequired?.("Link content");
1739
- const txRes = await this.contractTransaction(this._contracts.DOTNS_CONTENT_RESOLVER, 0n, DOTNS_CONTENT_RESOLVER_ABI, "setContenthash", [node, contenthashHex], (s) => console.log(` ${s}`), { useNoncePolling: true, verifyEffect, feeAsset: opts.feeAsset });
1749
+ const txRes = await this.contractTransaction(this._contracts.DOTNS_CONTENT_RESOLVER, 0n, DOTNS_CONTENT_RESOLVER_ABI, "setContenthash", [node, contenthashHex], (s) => console.log(` ${s}`), { useNoncePolling: true, verifyEffect, feeAsset: opts.feeAsset, phoneLabel: "Link content" });
1740
1750
  const finalOnChain = (await this.getContenthash(domainName) || "0x").toLowerCase();
1741
1751
  if (finalOnChain !== expected) {
1742
1752
  throw new Error(
@@ -1963,8 +1973,7 @@ var DotNS = class {
1963
1973
  }
1964
1974
  };
1965
1975
  try {
1966
- this._onPhoneSigningRequired?.("Publish to registry");
1967
- const txRes = await this.contractTransaction(publisher, 0n, PUBLISHER_ABI, "publish", [label], (s) => console.log(` ${s}`), { useNoncePolling: true, verifyEffect });
1976
+ const txRes = await this.contractTransaction(publisher, 0n, PUBLISHER_ABI, "publish", [label], (s) => console.log(` ${s}`), { useNoncePolling: true, verifyEffect, phoneLabel: "Publish to registry" });
1968
1977
  const finalPublished = await withTimeout(
1969
1978
  this.contractCall(publisher, PUBLISHER_ABI, "isPublished", [labelhash]),
1970
1979
  3e4,
@@ -2108,8 +2117,7 @@ var DotNS = class {
2108
2117
  this.ensureConnected();
2109
2118
  console.log(`
2110
2119
  Submitting commitment...`);
2111
- this._onPhoneSigningRequired?.("Commitment");
2112
- const commitTxRes = await this.contractTransaction(this._contracts.DOTNS_REGISTRAR_CONTROLLER, 0n, DOTNS_REGISTRAR_CONTROLLER_ABI, "commit", [commitment], (s) => console.log(` ${s}`));
2120
+ const commitTxRes = await this.contractTransaction(this._contracts.DOTNS_REGISTRAR_CONTROLLER, 0n, DOTNS_REGISTRAR_CONTROLLER_ABI, "commit", [commitment], (s) => console.log(` ${s}`), { phoneLabel: "Commitment" });
2113
2121
  logTxResolution(commitTxRes);
2114
2122
  console.log(` Committed at: ${(/* @__PURE__ */ new Date()).toISOString()}`);
2115
2123
  }
@@ -2202,8 +2210,7 @@ var DotNS = class {
2202
2210
  setDeployAttribute("deploy.payment_wei", priceWei.toString());
2203
2211
  console.log(` Oracle price: ${formatEther(priceWei)} PAS`);
2204
2212
  console.log(` Paying: ${formatEther(bufferedPaymentWei)} PAS`);
2205
- this._onPhoneSigningRequired?.("Register");
2206
- const registerTxRes = await this.contractTransaction(this._contracts.DOTNS_REGISTRAR_CONTROLLER, bufferedPaymentNative, DOTNS_REGISTRAR_CONTROLLER_ABI, "register", [registration], (s) => console.log(` ${s}`));
2213
+ const registerTxRes = await this.contractTransaction(this._contracts.DOTNS_REGISTRAR_CONTROLLER, bufferedPaymentNative, DOTNS_REGISTRAR_CONTROLLER_ABI, "register", [registration], (s) => console.log(` ${s}`), { phoneLabel: "Register" });
2207
2214
  logTxResolution(registerTxRes);
2208
2215
  if (registerTxRes.kind === TX_KIND_HASH) {
2209
2216
  setDeployAttribute("deploy.register.tx", registerTxRes.hash);
@@ -2651,6 +2658,37 @@ var DotNS = class {
2651
2658
  const envId = this._environmentId ?? "paseo-next-v2";
2652
2659
  return runBootstrap({ mnemonic, environmentId: envId });
2653
2660
  }
2661
+ /**
2662
+ * Set the expected total number of phone signatures for this DotNS session.
2663
+ * Called from deploy() at preflight after computePhoneSigningSteps so that
2664
+ * confirmPhoneReady receives the correct `total`.
2665
+ */
2666
+ setPhoneSignatureTotal(total) {
2667
+ this._phoneSignatureTotal = total;
2668
+ }
2669
+ /**
2670
+ * Internal: await the human-ready gate then fire the "check your phone"
2671
+ * notification. Must be called OUTSIDE any withTimeout — the human wait is
2672
+ * unbounded and must never be inside the machine timeout.
2673
+ *
2674
+ * Behaviour:
2675
+ * - confirmPhoneReady provided → await it (counts re-signs via attempt map).
2676
+ * - not provided → proceed without a gate (opt-in only; an in-process
2677
+ * external signer, e.g. injected PolkadotSigner or mnemonic, needs no
2678
+ * phone gate — _usesExternalSigner alone cannot distinguish phone from
2679
+ * in-process).
2680
+ * After the gate resolves, fires onPhoneSigningRequired (the "check your
2681
+ * phone" notification) so the user knows the request is now being sent.
2682
+ */
2683
+ async _awaitPhoneReady(label) {
2684
+ if (!this._usesExternalSigner) return;
2685
+ const attempt = (this._phoneSignatureAttempts.get(label) ?? 0) + 1;
2686
+ this._phoneSignatureAttempts.set(label, attempt);
2687
+ if (this._confirmPhoneReady) {
2688
+ await this._confirmPhoneReady({ label, attempt, total: this._phoneSignatureTotal });
2689
+ }
2690
+ this._onPhoneSigningRequired?.(label);
2691
+ }
2654
2692
  disconnect() {
2655
2693
  if (this.client) {
2656
2694
  this.client.destroy();
@@ -2660,6 +2698,9 @@ var DotNS = class {
2660
2698
  }
2661
2699
  this._usesExternalSigner = false;
2662
2700
  this._onPhoneSigningRequired = void 0;
2701
+ this._confirmPhoneReady = void 0;
2702
+ this._phoneSignatureTotal = 0;
2703
+ this._phoneSignatureAttempts.clear();
2663
2704
  }
2664
2705
  };
2665
2706
  var dotns = new DotNS();
@@ -2,15 +2,15 @@ import {
2
2
  classifyErrorArea,
3
3
  isInteractive,
4
4
  promptYesNo
5
- } from "./chunk-5LAKX4AB.js";
5
+ } from "./chunk-2MRHO7I5.js";
6
6
  import {
7
7
  VERSION,
8
8
  getCurrentSentryTraceId,
9
9
  resolveIssueRepoSlug
10
- } from "./chunk-D3NJNDEW.js";
10
+ } from "./chunk-HXN2HJMZ.js";
11
11
  import {
12
12
  package_default
13
- } from "./chunk-XQTDSVJG.js";
13
+ } from "./chunk-AR5IUHCM.js";
14
14
 
15
15
  // src/bug-report.ts
16
16
  import { execSync, execFileSync } from "child_process";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  preflightSssAllowance
3
- } from "./chunk-HN3YZDX4.js";
3
+ } from "./chunk-6YUT276Z.js";
4
4
  import {
5
5
  statementSigningAccount
6
6
  } from "./chunk-GRPLHUYC.js";
@@ -31,16 +31,16 @@ import {
31
31
  } from "./chunk-S7EM5VMW.js";
32
32
  import {
33
33
  setDeployContext
34
- } from "./chunk-RBTRQH32.js";
34
+ } from "./chunk-WCEPEDZA.js";
35
35
  import {
36
36
  probeChunks
37
- } from "./chunk-BKEXG2QF.js";
37
+ } from "./chunk-33T5FHX2.js";
38
38
  import {
39
39
  packSection
40
40
  } from "./chunk-C2TS5MER.js";
41
41
  import {
42
42
  resolveStorageSigner
43
- } from "./chunk-A2JFMAG3.js";
43
+ } from "./chunk-6ZF7V4PG.js";
44
44
  import {
45
45
  createSlotAccountSigner,
46
46
  requestResourceAllocation
@@ -49,7 +49,7 @@ import {
49
49
  STALE_SESSION_MESSAGE,
50
50
  getPeopleChainEndpoints,
51
51
  hasPersistedSession
52
- } from "./chunk-X2BEJT4V.js";
52
+ } from "./chunk-MU75RB7Z.js";
53
53
  import {
54
54
  CLI_NAME
55
55
  } from "./chunk-TSPERKUS.js";
@@ -62,7 +62,7 @@ import {
62
62
  parseDomainName,
63
63
  popStatusName,
64
64
  verifyNonceAdvanced
65
- } from "./chunk-MDS7T32B.js";
65
+ } from "./chunk-OXENTCOF.js";
66
66
  import {
67
67
  derivePoolAccounts,
68
68
  detectTestnet,
@@ -84,7 +84,7 @@ import {
84
84
  truncateAddress,
85
85
  withDeploySpan,
86
86
  withSpan
87
- } from "./chunk-D3NJNDEW.js";
87
+ } from "./chunk-HXN2HJMZ.js";
88
88
  import {
89
89
  DEFAULT_ENV_ID,
90
90
  getPopSelfServeConfig,
@@ -2217,17 +2217,7 @@ async function deploy(content, domainName = null, options = {}) {
2217
2217
  }
2218
2218
  if (phoneSignerActive) {
2219
2219
  const steps = computePhoneSigningSteps(dotnsPreflight, preflightPublishNeeded);
2220
- if (steps.length === 1) {
2221
- console.log(`
2222
- Have your phone ready \u2014 1 signature needed (${steps[0].toLowerCase()})`);
2223
- } else if (steps.length > 1) {
2224
- const display = steps.flatMap(
2225
- (s, i) => s === "Register" && steps[i - 1] === "Commitment" ? ["(wait)", s] : [s]
2226
- );
2227
- console.log(`
2228
- Have your phone ready \u2014 ${steps.length} signatures needed`);
2229
- console.log(` ${display.map((s) => s.toLowerCase()).join(" \xB7 ")}`);
2230
- }
2220
+ options.onPhoneSignaturePlan?.(steps);
2231
2221
  }
2232
2222
  provider = await reconnect();
2233
2223
  const providerWithReconnect = { ...provider, reconnect };
@@ -2436,13 +2426,10 @@ Have your phone ready \u2014 ${steps.length} signatures needed`);
2436
2426
  };
2437
2427
  await ownerDotns.connect({
2438
2428
  ...resolveDotnsConnectOptions({ ...options, signer: owner.signer, signerAddress: owner.address }, envAssetHub, envAutoAccountMapping, envContracts, envNativeToEthRatio, envId, envPopSelfServe, envRegisterStorageDeposit),
2439
- onPhoneSigningRequired: (label) => console.log(`
2440
- Check your phone \u2192 ${label}`)
2429
+ confirmPhoneReady: options.confirmPhoneReady
2441
2430
  });
2442
2431
  const willPublish = !!(options.publish && parsed && preflightPublishNeeded !== false);
2443
- console.log(willPublish ? `
2444
- Have your phone ready \u2014 2 signatures needed (link content \xB7 publish)` : `
2445
- Have your phone ready \u2014 1 signature needed (link content)`);
2432
+ ownerDotns.setPhoneSignatureTotal(willPublish ? 2 : 1);
2446
2433
  const contenthashHex2 = `0x${encodeContenthash(cid)}`;
2447
2434
  await ownerDotns.setContenthash(name, contenthashHex2, { feeAsset: "pgas" });
2448
2435
  if (willPublish) await publish(ownerDotns, parsed, options.failOnPublishError);
@@ -2451,11 +2438,11 @@ Have your phone ready \u2014 1 signature needed (link content)`);
2451
2438
  const dotns = new DotNS();
2452
2439
  await dotns.connect({
2453
2440
  ...resolveDotnsConnectOptions(options, envAssetHub, envAutoAccountMapping, envContracts, envNativeToEthRatio, envId, envPopSelfServe, envRegisterStorageDeposit),
2454
- // Per-step "check your phone" reminder — only for a phone-backed signer
2455
- // (see phoneSignerActive); a transfer-mode local worker signs locally.
2456
- ...phoneSignerActive ? { onPhoneSigningRequired: (label) => console.log(`
2457
- Check your phone \u2192 ${label}`) } : {}
2441
+ confirmPhoneReady: options.confirmPhoneReady
2458
2442
  });
2443
+ if (phoneSignerActive) {
2444
+ dotns.setPhoneSignatureTotal(computePhoneSigningSteps(dotnsPreflight, preflightPublishNeeded).length);
2445
+ }
2459
2446
  let registeredFresh = false;
2460
2447
  if (parsed?.isSubdomain) {
2461
2448
  const { owned, owner } = await dotns.checkSubdomainOwnership(parsed.sublabel, parsed.parentLabel);
@@ -5,9 +5,9 @@ import {
5
5
  _decodeStorageValue,
6
6
  _resetProbeSession,
7
7
  probeChunks
8
- } from "./chunk-BKEXG2QF.js";
9
- import "./chunk-D3NJNDEW.js";
10
- import "./chunk-XQTDSVJG.js";
8
+ } from "./chunk-33T5FHX2.js";
9
+ import "./chunk-HXN2HJMZ.js";
10
+ import "./chunk-AR5IUHCM.js";
11
11
  export {
12
12
  ChainProbeCrossValidationError,
13
13
  ChainProbeMetadataError,
@@ -3,10 +3,10 @@ import {
3
3
  } from "../chunk-J7CYVTAW.js";
4
4
  import {
5
5
  waitForBulletinAuthorization
6
- } from "../chunk-VJITD6HN.js";
6
+ } from "../chunk-YVLDMADS.js";
7
7
  import {
8
8
  preflightSssAllowance
9
- } from "../chunk-HN3YZDX4.js";
9
+ } from "../chunk-6YUT276Z.js";
10
10
  import {
11
11
  statementSigningAccount
12
12
  } from "../chunk-GRPLHUYC.js";
@@ -15,11 +15,11 @@ import "../chunk-IW3X2MJF.js";
15
15
  import "../chunk-KOSF5FDO.js";
16
16
  import "../chunk-J3NIXHZZ.js";
17
17
  import "../chunk-S7EM5VMW.js";
18
- import "../chunk-RBTRQH32.js";
19
- import "../chunk-5LAKX4AB.js";
20
- import "../chunk-BKEXG2QF.js";
18
+ import "../chunk-WCEPEDZA.js";
19
+ import "../chunk-2MRHO7I5.js";
20
+ import "../chunk-33T5FHX2.js";
21
21
  import "../chunk-C2TS5MER.js";
22
- import "../chunk-A2JFMAG3.js";
22
+ import "../chunk-6ZF7V4PG.js";
23
23
  import "../chunk-JQKKMUCT.js";
24
24
  import {
25
25
  BULLETIN_RESOURCE,
@@ -36,15 +36,15 @@ import {
36
36
  getAuthClient,
37
37
  getPeopleChainEndpoints,
38
38
  resolveBulletinEndpoints
39
- } from "../chunk-X2BEJT4V.js";
39
+ } from "../chunk-MU75RB7Z.js";
40
40
  import {
41
41
  CLI_NAME
42
42
  } from "../chunk-TSPERKUS.js";
43
- import "../chunk-MDS7T32B.js";
43
+ import "../chunk-OXENTCOF.js";
44
44
  import "../chunk-SI2ZUOYD.js";
45
45
  import "../chunk-4IUTMHVB.js";
46
- import "../chunk-D3NJNDEW.js";
47
- import "../chunk-XQTDSVJG.js";
46
+ import "../chunk-HXN2HJMZ.js";
47
+ import "../chunk-AR5IUHCM.js";
48
48
  import {
49
49
  loadEnvironments
50
50
  } from "../chunk-QRKI6MMK.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clearSssAllowanceCache
3
- } from "../chunk-HN3YZDX4.js";
3
+ } from "../chunk-6YUT276Z.js";
4
4
  import "../chunk-GRPLHUYC.js";
5
5
  import "../chunk-JQKKMUCT.js";
6
6
  import "../chunk-5FLTDWWP.js";
@@ -9,10 +9,10 @@ import {
9
9
  } from "../chunk-RIRDBSBG.js";
10
10
  import {
11
11
  getAuthClient
12
- } from "../chunk-X2BEJT4V.js";
12
+ } from "../chunk-MU75RB7Z.js";
13
13
  import "../chunk-TSPERKUS.js";
14
- import "../chunk-D3NJNDEW.js";
15
- import "../chunk-XQTDSVJG.js";
14
+ import "../chunk-HXN2HJMZ.js";
15
+ import "../chunk-AR5IUHCM.js";
16
16
  import "../chunk-QRKI6MMK.js";
17
17
  import "../chunk-ZOC4GITL.js";
18
18
 
@@ -4,11 +4,11 @@ import {
4
4
  import {
5
5
  DEFAULT_MNEMONIC,
6
6
  DotNS
7
- } from "../chunk-MDS7T32B.js";
7
+ } from "../chunk-OXENTCOF.js";
8
8
  import "../chunk-SI2ZUOYD.js";
9
9
  import "../chunk-4IUTMHVB.js";
10
- import "../chunk-D3NJNDEW.js";
11
- import "../chunk-XQTDSVJG.js";
10
+ import "../chunk-HXN2HJMZ.js";
11
+ import "../chunk-AR5IUHCM.js";
12
12
  import {
13
13
  getPopSelfServeConfig,
14
14
  loadEnvironments,
@@ -2,12 +2,12 @@ import {
2
2
  STALE_SESSION_MESSAGE,
3
3
  getAuthClient,
4
4
  hasPersistedSession
5
- } from "../chunk-X2BEJT4V.js";
5
+ } from "../chunk-MU75RB7Z.js";
6
6
  import {
7
7
  CLI_NAME
8
8
  } from "../chunk-TSPERKUS.js";
9
- import "../chunk-D3NJNDEW.js";
10
- import "../chunk-XQTDSVJG.js";
9
+ import "../chunk-HXN2HJMZ.js";
10
+ import "../chunk-AR5IUHCM.js";
11
11
  import "../chunk-QRKI6MMK.js";
12
12
  import "../chunk-ZOC4GITL.js";
13
13
 
@@ -2,17 +2,17 @@ import {
2
2
  MainnetDefaultWorkerError,
3
3
  resolveDeployActors,
4
4
  resolveStorageSigner
5
- } from "./chunk-A2JFMAG3.js";
5
+ } from "./chunk-6ZF7V4PG.js";
6
6
  import "./chunk-JQKKMUCT.js";
7
7
  import "./chunk-5FLTDWWP.js";
8
8
  import "./chunk-RIRDBSBG.js";
9
- import "./chunk-X2BEJT4V.js";
9
+ import "./chunk-MU75RB7Z.js";
10
10
  import "./chunk-TSPERKUS.js";
11
- import "./chunk-MDS7T32B.js";
11
+ import "./chunk-OXENTCOF.js";
12
12
  import "./chunk-SI2ZUOYD.js";
13
13
  import "./chunk-4IUTMHVB.js";
14
- import "./chunk-D3NJNDEW.js";
15
- import "./chunk-XQTDSVJG.js";
14
+ import "./chunk-HXN2HJMZ.js";
15
+ import "./chunk-AR5IUHCM.js";
16
16
  import "./chunk-QRKI6MMK.js";
17
17
  import "./chunk-ZOC4GITL.js";
18
18
  export {
package/dist/deploy.d.ts CHANGED
@@ -1,9 +1,15 @@
1
1
  import { WsEvent } from 'polkadot-api/ws';
2
2
  import { CID } from 'multiformats/cid';
3
3
  import { ManifestFileEntry } from './manifest.js';
4
+ import { PhoneSignatureStep } from './dotns.js';
4
5
  import { PopSelfServeConfig } from './environments.js';
5
6
  import { PolkadotSigner } from 'polkadot-api';
6
7
  export { EXIT_CODE_NO_RETRY, NonRetryableError } from './errors.js';
8
+ import './personhood/bootstrap.js';
9
+ import './personhood/bind-personal-id.js';
10
+ import './personhood/claim-pgas.js';
11
+ import './personhood/bind-paid-alias.js';
12
+ import './personhood/chain-prereqs.js';
7
13
 
8
14
  interface DeployResult {
9
15
  domainName: string;
@@ -348,6 +354,25 @@ interface DeployOptions {
348
354
  * CLI: --contract <KEY>=<0xADDRESS> (repeatable).
349
355
  */
350
356
  contracts?: Record<string, string>;
357
+ /**
358
+ * Plan of phone signatures this deploy will need. Fired once, at preflight,
359
+ * BEFORE storage. Notification only; used by the CLI bin to print the
360
+ * "Have your phone ready" banner up front.
361
+ */
362
+ onPhoneSignaturePlan?: (steps: PhoneSignatureStep[]) => void;
363
+ /**
364
+ * Human-ready gate. Awaited immediately BEFORE each phone signature request
365
+ * is sent. Resolve when the human is at their phone and ready; reject/throw
366
+ * to abort. The per-signature operation timeout starts only AFTER this
367
+ * resolves. `attempt` >= 2 means a re-sign.
368
+ * Absent + non-TTY → fail fast (NonRetryableError).
369
+ * Absent + TTY → CLI bin must supply the hook; core does not readline.
370
+ */
371
+ confirmPhoneReady?: (ctx: {
372
+ label: string;
373
+ attempt: number;
374
+ total: number;
375
+ }) => Promise<void>;
351
376
  }
352
377
  declare function resolveDotnsConnectOptions(options: Pick<DeployOptions, "mnemonic" | "derivationPath" | "signer" | "signerAddress">, assetHubEndpoints?: string[], autoAccountMapping?: boolean, contracts?: Record<string, string>, nativeToEthRatio?: bigint, environmentId?: string, popSelfServe?: PopSelfServeConfig | null, registerStorageDeposit?: bigint): {
353
378
  signer?: PolkadotSigner;
@@ -431,4 +456,4 @@ declare function computePhoneSigningSteps(dotnsPreflight: {
431
456
  needsPopUpgrade: boolean;
432
457
  } | null, publishNeeded: boolean): string[];
433
458
 
434
- export { BLAKE2B_256_MULTIHASH_CODE, BULLETIN_ENDPOINTS, type BitswapErrorVariant, type BitswapProbeResult, CHUNK_MORTALITY_PERIOD, DEFAULT_BULLETIN_RPC, DEFAULT_POOL_SIZE, type DeployContent, type DeployOptions, type DeployResult, ENCRYPT_KEY_LEN, ENCRYPT_MAGIC, ENCRYPT_NONCE_LEN, ENCRYPT_PBKDF2_ITERATIONS, ENCRYPT_SALT_LEN, ENCRYPT_TAG_LEN, SHA256_MULTIHASH_CODE, type SizeDecision, type StoreDirectoryOptions, WS_HEARTBEAT_TIMEOUT_MS, __assignDenseNoncesForTest, __selectStorageProviderModeForTest, applyManifestFetchAttributes, assertSubdomainOwnerMatchesSigner, browserUrlFor, buildFilesMap, checkDeploySize, chooseSignerInput, chunk, computePhoneSigningSteps, computeStorageCid, createCID, deploy, deriveRootSigner, detectFramework, encodeContenthash, encryptContent, estimateUploadBytes, formatStorageSignerLine, friendlyChainError, hasIPFS, interpretBitswapResult, isBenignTeardownError, isConnectionError, isPhoneSignerActive, makeBulletinStatusHandler, merkleize, probeP2pRetrieval, resolveDotnsConnectOptions, resolveReproducibleTimestamp, retryBudgetExhausted, setWsHaltCallback, shouldHandoverName, storeChunkedContent, storeDirectory, storeDirectoryV2, storeFile, unpublish };
459
+ export { BLAKE2B_256_MULTIHASH_CODE, BULLETIN_ENDPOINTS, type BitswapErrorVariant, type BitswapProbeResult, CHUNK_MORTALITY_PERIOD, DEFAULT_BULLETIN_RPC, DEFAULT_POOL_SIZE, type DeployContent, type DeployOptions, type DeployResult, ENCRYPT_KEY_LEN, ENCRYPT_MAGIC, ENCRYPT_NONCE_LEN, ENCRYPT_PBKDF2_ITERATIONS, ENCRYPT_SALT_LEN, ENCRYPT_TAG_LEN, PhoneSignatureStep, SHA256_MULTIHASH_CODE, type SizeDecision, type StoreDirectoryOptions, WS_HEARTBEAT_TIMEOUT_MS, __assignDenseNoncesForTest, __selectStorageProviderModeForTest, applyManifestFetchAttributes, assertSubdomainOwnerMatchesSigner, browserUrlFor, buildFilesMap, checkDeploySize, chooseSignerInput, chunk, computePhoneSigningSteps, computeStorageCid, createCID, deploy, deriveRootSigner, detectFramework, encodeContenthash, encryptContent, estimateUploadBytes, formatStorageSignerLine, friendlyChainError, hasIPFS, interpretBitswapResult, isBenignTeardownError, isConnectionError, isPhoneSignerActive, makeBulletinStatusHandler, merkleize, probeP2pRetrieval, resolveDotnsConnectOptions, resolveReproducibleTimestamp, retryBudgetExhausted, setWsHaltCallback, shouldHandoverName, storeChunkedContent, storeDirectory, storeDirectoryV2, storeFile, unpublish };
package/dist/deploy.js CHANGED
@@ -50,29 +50,29 @@ import {
50
50
  storeDirectoryV2,
51
51
  storeFile,
52
52
  unpublish
53
- } from "./chunk-VJITD6HN.js";
54
- import "./chunk-HN3YZDX4.js";
53
+ } from "./chunk-YVLDMADS.js";
54
+ import "./chunk-6YUT276Z.js";
55
55
  import "./chunk-GRPLHUYC.js";
56
56
  import "./chunk-HOTQDYHD.js";
57
57
  import "./chunk-IW3X2MJF.js";
58
58
  import "./chunk-KOSF5FDO.js";
59
59
  import "./chunk-J3NIXHZZ.js";
60
60
  import "./chunk-S7EM5VMW.js";
61
- import "./chunk-RBTRQH32.js";
62
- import "./chunk-5LAKX4AB.js";
63
- import "./chunk-BKEXG2QF.js";
61
+ import "./chunk-WCEPEDZA.js";
62
+ import "./chunk-2MRHO7I5.js";
63
+ import "./chunk-33T5FHX2.js";
64
64
  import "./chunk-C2TS5MER.js";
65
- import "./chunk-A2JFMAG3.js";
65
+ import "./chunk-6ZF7V4PG.js";
66
66
  import "./chunk-JQKKMUCT.js";
67
67
  import "./chunk-5FLTDWWP.js";
68
68
  import "./chunk-RIRDBSBG.js";
69
- import "./chunk-X2BEJT4V.js";
69
+ import "./chunk-MU75RB7Z.js";
70
70
  import "./chunk-TSPERKUS.js";
71
- import "./chunk-MDS7T32B.js";
71
+ import "./chunk-OXENTCOF.js";
72
72
  import "./chunk-SI2ZUOYD.js";
73
73
  import "./chunk-4IUTMHVB.js";
74
- import "./chunk-D3NJNDEW.js";
75
- import "./chunk-XQTDSVJG.js";
74
+ import "./chunk-HXN2HJMZ.js";
75
+ import "./chunk-AR5IUHCM.js";
76
76
  import "./chunk-QRKI6MMK.js";
77
77
  import {
78
78
  EXIT_CODE_NO_RETRY,
package/dist/dotns.d.ts CHANGED
@@ -6,6 +6,8 @@ import './personhood/claim-pgas.js';
6
6
  import './personhood/bind-paid-alias.js';
7
7
  import './personhood/chain-prereqs.js';
8
8
 
9
+ /** One step in the phone-signature plan fired at preflight. */
10
+ type PhoneSignatureStep = "Commitment" | "Register" | "Link content" | "Publish to registry";
9
11
  interface DotNSConnectOptions {
10
12
  rpc?: string;
11
13
  keyUri?: string;
@@ -36,6 +38,17 @@ interface DotNSConnectOptions {
36
38
  * is active; pool/mnemonic paths leave this unset.
37
39
  */
38
40
  onPhoneSigningRequired?: (label: string) => void;
41
+ /**
42
+ * Human-ready gate. Awaited immediately BEFORE each phone signature request
43
+ * is sent. Resolve when the human is at their phone and ready; reject/throw
44
+ * to abort. The per-signature operation timeout starts only AFTER this
45
+ * resolves. `attempt` >= 2 means a re-sign (principle 4).
46
+ */
47
+ confirmPhoneReady?: (ctx: {
48
+ label: string;
49
+ attempt: number;
50
+ total: number;
51
+ }) => Promise<void>;
39
52
  }
40
53
  interface OwnershipResult {
41
54
  owned: boolean;
@@ -416,6 +429,11 @@ declare class DotNS {
416
429
  private _popSelfServe;
417
430
  private _registerStorageDeposit;
418
431
  private _onPhoneSigningRequired;
432
+ private _confirmPhoneReady;
433
+ /** Total phone-signature count for this DotNS session (drives the `total` field passed to confirmPhoneReady). */
434
+ private _phoneSignatureTotal;
435
+ /** Running attempt counter per label for re-sign detection. Reset at connect/disconnect. */
436
+ private _phoneSignatureAttempts;
419
437
  private _classifyOverrideForTest;
420
438
  /** Test-only: inject a fixed classifyAliasAccountState return value for the next call. Consumed once. */
421
439
  __setClassifyOverrideForTest(state: AliasAccountState): void;
@@ -468,10 +486,11 @@ declare class DotNS {
468
486
  * for read paths that must always return a value.
469
487
  */
470
488
  contractCallNullable(contractAddress: string, contractAbi: readonly any[], functionName: string, args?: any[]): Promise<any | null>;
471
- contractTransaction(contractAddress: string, value: bigint, contractAbi: readonly any[], functionName: string, args?: any[], statusCallback?: (status: string) => void, { useNoncePolling, verifyEffect, feeAsset }?: {
489
+ contractTransaction(contractAddress: string, value: bigint, contractAbi: readonly any[], functionName: string, args?: any[], statusCallback?: (status: string) => void, { useNoncePolling, verifyEffect, feeAsset, phoneLabel }?: {
472
490
  useNoncePolling?: boolean;
473
491
  verifyEffect?: () => Promise<boolean>;
474
492
  feeAsset?: "pgas";
493
+ phoneLabel?: string;
475
494
  }): Promise<TxResolution>;
476
495
  checkOwnership(label: string, ownerAddress?: string | null): Promise<OwnershipResult>;
477
496
  /** Live transfer-fee quote. transferFloor is a pure PopRules view — it
@@ -598,8 +617,29 @@ declare class DotNS {
598
617
  * personhood faucet (https://sudo.personhood.dev/personhood-faucet).
599
618
  */
600
619
  bootstrap(mnemonic: string): Promise<BootstrapResult>;
620
+ /**
621
+ * Set the expected total number of phone signatures for this DotNS session.
622
+ * Called from deploy() at preflight after computePhoneSigningSteps so that
623
+ * confirmPhoneReady receives the correct `total`.
624
+ */
625
+ setPhoneSignatureTotal(total: number): void;
626
+ /**
627
+ * Internal: await the human-ready gate then fire the "check your phone"
628
+ * notification. Must be called OUTSIDE any withTimeout — the human wait is
629
+ * unbounded and must never be inside the machine timeout.
630
+ *
631
+ * Behaviour:
632
+ * - confirmPhoneReady provided → await it (counts re-signs via attempt map).
633
+ * - not provided → proceed without a gate (opt-in only; an in-process
634
+ * external signer, e.g. injected PolkadotSigner or mnemonic, needs no
635
+ * phone gate — _usesExternalSigner alone cannot distinguish phone from
636
+ * in-process).
637
+ * After the gate resolves, fires onPhoneSigningRequired (the "check your
638
+ * phone" notification) so the user knows the request is now being sent.
639
+ */
640
+ private _awaitPhoneReady;
601
641
  disconnect(): void;
602
642
  }
603
643
  declare const dotns: DotNS;
604
644
 
605
- export { ATTR_TX_RESOLUTION_KIND, type AliasAccountClassification, type AliasAccountState, CONNECTION_TIMEOUT_MS, CONTRACTS, ContractDryRunRevertError, DECIMALS, DEFAULT_MNEMONIC, DOTNS_TX_MAX_ATTEMPTS, DOT_NODE, DotNS, type DotNSConnectOptions, type DotnsPreflightResult, type DotnsSuccessAction, MINIMUM_REGISTER_STORAGE_DEPOSIT, NATIVE_TO_ETH_RATIO, OPERATION_TIMEOUT_MS, type OwnershipResult, PUBLISHER_ABI, type ParsedDomainName, type PriceValidationResult, ProofOfPersonhoodStatus, PublisherNotSupportedError, RPC_ENDPOINTS, TX_CHAIN_TIME_BUDGET_MS, TX_KIND_HASH, TX_KIND_NONCE_ADVANCED, TX_NO_PROGRESS_MS, TX_TIMEOUT_MS, TX_WALL_CLOCK_CEILING_MS, type TxResolution, WS_HEARTBEAT_TIMEOUT_MS, __formatContractDryRunFailureForTest, bufferedWeiToNative, canRegister, classifyAliasAccountRow, classifyDotnsLabel, classifyTxRetryDecision, computeDomainTokenId, convertToHexString, convertWeiToNative, countTrailingDigits, decodePublisherRevert, dotns, dotnsRetryBackoffMs, feeFloorFor, fetchNonce, fmtPas, formatDispatchError, formatPersonhoodRemediation, formatPopShortfallReason, isCommitmentMature, isCommitmentTimingBarerevert, makeRetryStatusFilter, parseDomainName, parseProofOfPersonhoodStatus, popStatusName, registerDepositWei, sanitizeDomainLabel, shouldRetryTxAttempt, stripTrailingDigits, validateDomainLabel, verifyNonceAdvanced, weiToNative };
645
+ export { ATTR_TX_RESOLUTION_KIND, type AliasAccountClassification, type AliasAccountState, CONNECTION_TIMEOUT_MS, CONTRACTS, ContractDryRunRevertError, DECIMALS, DEFAULT_MNEMONIC, DOTNS_TX_MAX_ATTEMPTS, DOT_NODE, DotNS, type DotNSConnectOptions, type DotnsPreflightResult, type DotnsSuccessAction, MINIMUM_REGISTER_STORAGE_DEPOSIT, NATIVE_TO_ETH_RATIO, OPERATION_TIMEOUT_MS, type OwnershipResult, PUBLISHER_ABI, type ParsedDomainName, type PhoneSignatureStep, type PriceValidationResult, ProofOfPersonhoodStatus, PublisherNotSupportedError, RPC_ENDPOINTS, TX_CHAIN_TIME_BUDGET_MS, TX_KIND_HASH, TX_KIND_NONCE_ADVANCED, TX_NO_PROGRESS_MS, TX_TIMEOUT_MS, TX_WALL_CLOCK_CEILING_MS, type TxResolution, WS_HEARTBEAT_TIMEOUT_MS, __formatContractDryRunFailureForTest, bufferedWeiToNative, canRegister, classifyAliasAccountRow, classifyDotnsLabel, classifyTxRetryDecision, computeDomainTokenId, convertToHexString, convertWeiToNative, countTrailingDigits, decodePublisherRevert, dotns, dotnsRetryBackoffMs, feeFloorFor, fetchNonce, fmtPas, formatDispatchError, formatPersonhoodRemediation, formatPopShortfallReason, isCommitmentMature, isCommitmentTimingBarerevert, makeRetryStatusFilter, parseDomainName, parseProofOfPersonhoodStatus, popStatusName, registerDepositWei, sanitizeDomainLabel, shouldRetryTxAttempt, stripTrailingDigits, validateDomainLabel, verifyNonceAdvanced, weiToNative };
package/dist/dotns.js CHANGED
@@ -54,11 +54,11 @@ import {
54
54
  validateDomainLabel,
55
55
  verifyNonceAdvanced,
56
56
  weiToNative
57
- } from "./chunk-MDS7T32B.js";
57
+ } from "./chunk-OXENTCOF.js";
58
58
  import "./chunk-SI2ZUOYD.js";
59
59
  import "./chunk-4IUTMHVB.js";
60
- import "./chunk-D3NJNDEW.js";
61
- import "./chunk-XQTDSVJG.js";
60
+ import "./chunk-HXN2HJMZ.js";
61
+ import "./chunk-AR5IUHCM.js";
62
62
  import "./chunk-QRKI6MMK.js";
63
63
  import "./chunk-ZOC4GITL.js";
64
64
  export {
package/dist/index.js CHANGED
@@ -4,7 +4,14 @@ import {
4
4
  } from "./chunk-362JEZKM.js";
5
5
  import {
6
6
  publishManifest
7
- } from "./chunk-QNXFKFJD.js";
7
+ } from "./chunk-422RAWSV.js";
8
+ import {
9
+ DEFAULT_TEXT_RECORD_BUDGET_BYTES,
10
+ PLACEHOLDER_CID,
11
+ assertWithinBudget,
12
+ getTextRecordBudgetBytes,
13
+ pessimisticSizePreflight
14
+ } from "./chunk-WIMRJK32.js";
8
15
  import {
9
16
  validateExecutableManifest,
10
17
  validateProductConfig,
@@ -13,19 +20,12 @@ import {
13
20
  import {
14
21
  defineConfig
15
22
  } from "./chunk-GZD2UFLR.js";
16
- import {
17
- DEFAULT_TEXT_RECORD_BUDGET_BYTES,
18
- PLACEHOLDER_CID,
19
- assertWithinBudget,
20
- getTextRecordBudgetBytes,
21
- pessimisticSizePreflight
22
- } from "./chunk-WIMRJK32.js";
23
23
  import {
24
24
  deploy,
25
25
  merkleizeJS,
26
26
  merkleizeWithStableOrder
27
- } from "./chunk-VJITD6HN.js";
28
- import "./chunk-HN3YZDX4.js";
27
+ } from "./chunk-YVLDMADS.js";
28
+ import "./chunk-6YUT276Z.js";
29
29
  import "./chunk-GRPLHUYC.js";
30
30
  import "./chunk-HOTQDYHD.js";
31
31
  import {
@@ -49,24 +49,24 @@ import {
49
49
  isVolatilePath,
50
50
  parseManifest
51
51
  } from "./chunk-S7EM5VMW.js";
52
- import "./chunk-RBTRQH32.js";
53
- import "./chunk-5LAKX4AB.js";
52
+ import "./chunk-WCEPEDZA.js";
53
+ import "./chunk-2MRHO7I5.js";
54
54
  import {
55
55
  probeChunks
56
- } from "./chunk-BKEXG2QF.js";
56
+ } from "./chunk-33T5FHX2.js";
57
57
  import "./chunk-C2TS5MER.js";
58
- import "./chunk-A2JFMAG3.js";
58
+ import "./chunk-6ZF7V4PG.js";
59
59
  import "./chunk-JQKKMUCT.js";
60
60
  import "./chunk-5FLTDWWP.js";
61
61
  import "./chunk-RIRDBSBG.js";
62
- import "./chunk-X2BEJT4V.js";
62
+ import "./chunk-MU75RB7Z.js";
63
63
  import "./chunk-TSPERKUS.js";
64
64
  import {
65
65
  DEFAULT_MNEMONIC,
66
66
  DotNS,
67
67
  parseDomainName,
68
68
  sanitizeDomainLabel
69
- } from "./chunk-MDS7T32B.js";
69
+ } from "./chunk-OXENTCOF.js";
70
70
  import "./chunk-SI2ZUOYD.js";
71
71
  import {
72
72
  bootstrapPool,
@@ -75,7 +75,7 @@ import {
75
75
  fetchPoolAuthorizations,
76
76
  selectAccount
77
77
  } from "./chunk-4IUTMHVB.js";
78
- import "./chunk-D3NJNDEW.js";
78
+ import "./chunk-HXN2HJMZ.js";
79
79
  import {
80
80
  VERSION,
81
81
  loadRunState,
@@ -85,7 +85,7 @@ import {
85
85
  shouldSkipStaleWarning,
86
86
  stateFilePath,
87
87
  writeRunState
88
- } from "./chunk-XQTDSVJG.js";
88
+ } from "./chunk-AR5IUHCM.js";
89
89
  import {
90
90
  DEFAULT_ENV_ID,
91
91
  deepMergeEnvironments,
@@ -1,30 +1,30 @@
1
1
  import {
2
2
  publishManifest
3
- } from "../chunk-QNXFKFJD.js";
3
+ } from "../chunk-422RAWSV.js";
4
4
  import "../chunk-WIMRJK32.js";
5
- import "../chunk-VJITD6HN.js";
6
- import "../chunk-HN3YZDX4.js";
5
+ import "../chunk-YVLDMADS.js";
6
+ import "../chunk-6YUT276Z.js";
7
7
  import "../chunk-GRPLHUYC.js";
8
8
  import "../chunk-HOTQDYHD.js";
9
9
  import "../chunk-IW3X2MJF.js";
10
10
  import "../chunk-KOSF5FDO.js";
11
11
  import "../chunk-J3NIXHZZ.js";
12
12
  import "../chunk-S7EM5VMW.js";
13
- import "../chunk-RBTRQH32.js";
14
- import "../chunk-5LAKX4AB.js";
15
- import "../chunk-BKEXG2QF.js";
13
+ import "../chunk-WCEPEDZA.js";
14
+ import "../chunk-2MRHO7I5.js";
15
+ import "../chunk-33T5FHX2.js";
16
16
  import "../chunk-C2TS5MER.js";
17
- import "../chunk-A2JFMAG3.js";
17
+ import "../chunk-6ZF7V4PG.js";
18
18
  import "../chunk-JQKKMUCT.js";
19
19
  import "../chunk-5FLTDWWP.js";
20
20
  import "../chunk-RIRDBSBG.js";
21
- import "../chunk-X2BEJT4V.js";
21
+ import "../chunk-MU75RB7Z.js";
22
22
  import "../chunk-TSPERKUS.js";
23
- import "../chunk-MDS7T32B.js";
23
+ import "../chunk-OXENTCOF.js";
24
24
  import "../chunk-SI2ZUOYD.js";
25
25
  import "../chunk-4IUTMHVB.js";
26
- import "../chunk-D3NJNDEW.js";
27
- import "../chunk-XQTDSVJG.js";
26
+ import "../chunk-HXN2HJMZ.js";
27
+ import "../chunk-AR5IUHCM.js";
28
28
  import "../chunk-QRKI6MMK.js";
29
29
  import "../chunk-ZOC4GITL.js";
30
30
  export {
@@ -5,8 +5,8 @@ import {
5
5
  maybeWriteMemoryReport,
6
6
  safeHeap,
7
7
  sampleFromBytes
8
- } from "./chunk-D3NJNDEW.js";
9
- import "./chunk-XQTDSVJG.js";
8
+ } from "./chunk-HXN2HJMZ.js";
9
+ import "./chunk-AR5IUHCM.js";
10
10
  export {
11
11
  DEFAULT_THRESHOLD_MB,
12
12
  buildMemoryReport,
package/dist/merkle.js CHANGED
@@ -6,29 +6,29 @@ import {
6
6
  merkleizeKuboBackend,
7
7
  merkleizeWithStableOrder,
8
8
  rebuildOrderedCarFromBytes
9
- } from "./chunk-VJITD6HN.js";
10
- import "./chunk-HN3YZDX4.js";
9
+ } from "./chunk-YVLDMADS.js";
10
+ import "./chunk-6YUT276Z.js";
11
11
  import "./chunk-GRPLHUYC.js";
12
12
  import "./chunk-HOTQDYHD.js";
13
13
  import "./chunk-IW3X2MJF.js";
14
14
  import "./chunk-KOSF5FDO.js";
15
15
  import "./chunk-J3NIXHZZ.js";
16
16
  import "./chunk-S7EM5VMW.js";
17
- import "./chunk-RBTRQH32.js";
18
- import "./chunk-5LAKX4AB.js";
19
- import "./chunk-BKEXG2QF.js";
17
+ import "./chunk-WCEPEDZA.js";
18
+ import "./chunk-2MRHO7I5.js";
19
+ import "./chunk-33T5FHX2.js";
20
20
  import "./chunk-C2TS5MER.js";
21
- import "./chunk-A2JFMAG3.js";
21
+ import "./chunk-6ZF7V4PG.js";
22
22
  import "./chunk-JQKKMUCT.js";
23
23
  import "./chunk-5FLTDWWP.js";
24
24
  import "./chunk-RIRDBSBG.js";
25
- import "./chunk-X2BEJT4V.js";
25
+ import "./chunk-MU75RB7Z.js";
26
26
  import "./chunk-TSPERKUS.js";
27
- import "./chunk-MDS7T32B.js";
27
+ import "./chunk-OXENTCOF.js";
28
28
  import "./chunk-SI2ZUOYD.js";
29
29
  import "./chunk-4IUTMHVB.js";
30
- import "./chunk-D3NJNDEW.js";
31
- import "./chunk-XQTDSVJG.js";
30
+ import "./chunk-HXN2HJMZ.js";
31
+ import "./chunk-AR5IUHCM.js";
32
32
  import "./chunk-QRKI6MMK.js";
33
33
  import "./chunk-ZOC4GITL.js";
34
34
  export {
@@ -1,3 +1,6 @@
1
+ import {
2
+ runChainPrereqProbes
3
+ } from "../chunk-XAB7WM3S.js";
1
4
  import {
2
5
  claimPgas
3
6
  } from "../chunk-EATOPQFR.js";
@@ -16,20 +19,17 @@ import {
16
19
  import {
17
20
  bytesToHex
18
21
  } from "../chunk-ZYVGHDMU.js";
19
- import {
20
- runChainPrereqProbes
21
- } from "../chunk-XAB7WM3S.js";
22
22
  import {
23
23
  WS_HEARTBEAT_TIMEOUT_MS
24
- } from "../chunk-MDS7T32B.js";
24
+ } from "../chunk-OXENTCOF.js";
25
25
  import {
26
26
  DOTNS_CONTEXT_BYTES,
27
27
  PEOPLE_MEMBER_IDENTIFIER_HEX,
28
28
  PGAS_ASSET_ID
29
29
  } from "../chunk-SI2ZUOYD.js";
30
30
  import "../chunk-4IUTMHVB.js";
31
- import "../chunk-D3NJNDEW.js";
32
- import "../chunk-XQTDSVJG.js";
31
+ import "../chunk-HXN2HJMZ.js";
32
+ import "../chunk-AR5IUHCM.js";
33
33
  import {
34
34
  loadEnvironments
35
35
  } from "../chunk-QRKI6MMK.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  WS_HEARTBEAT_TIMEOUT_MS
3
- } from "../chunk-MDS7T32B.js";
3
+ } from "../chunk-OXENTCOF.js";
4
4
  import "../chunk-SI2ZUOYD.js";
5
5
  import "../chunk-4IUTMHVB.js";
6
- import "../chunk-D3NJNDEW.js";
7
- import "../chunk-XQTDSVJG.js";
6
+ import "../chunk-HXN2HJMZ.js";
7
+ import "../chunk-AR5IUHCM.js";
8
8
  import {
9
9
  loadEnvironments
10
10
  } from "../chunk-QRKI6MMK.js";
package/dist/run-state.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  shouldSkipStaleWarning,
8
8
  stateFilePath,
9
9
  writeRunState
10
- } from "./chunk-XQTDSVJG.js";
10
+ } from "./chunk-AR5IUHCM.js";
11
11
  export {
12
12
  VERSION,
13
13
  loadRunState,
@@ -4,12 +4,12 @@ import {
4
4
  preflightSssAllowance,
5
5
  sssPeriodEndSec,
6
6
  writeSssAllowanceCache
7
- } from "./chunk-HN3YZDX4.js";
7
+ } from "./chunk-6YUT276Z.js";
8
8
  import "./chunk-GRPLHUYC.js";
9
- import "./chunk-X2BEJT4V.js";
9
+ import "./chunk-MU75RB7Z.js";
10
10
  import "./chunk-TSPERKUS.js";
11
- import "./chunk-D3NJNDEW.js";
12
- import "./chunk-XQTDSVJG.js";
11
+ import "./chunk-HXN2HJMZ.js";
12
+ import "./chunk-AR5IUHCM.js";
13
13
  import "./chunk-QRKI6MMK.js";
14
14
  import "./chunk-ZOC4GITL.js";
15
15
  export {
@@ -7,29 +7,29 @@ import {
7
7
  readBulletinSlotSigner,
8
8
  waitForBulletinAuthorization,
9
9
  writeBulletinSlotKey
10
- } from "./chunk-VJITD6HN.js";
11
- import "./chunk-HN3YZDX4.js";
10
+ } from "./chunk-YVLDMADS.js";
11
+ import "./chunk-6YUT276Z.js";
12
12
  import "./chunk-GRPLHUYC.js";
13
13
  import "./chunk-HOTQDYHD.js";
14
14
  import "./chunk-IW3X2MJF.js";
15
15
  import "./chunk-KOSF5FDO.js";
16
16
  import "./chunk-J3NIXHZZ.js";
17
17
  import "./chunk-S7EM5VMW.js";
18
- import "./chunk-RBTRQH32.js";
19
- import "./chunk-5LAKX4AB.js";
20
- import "./chunk-BKEXG2QF.js";
18
+ import "./chunk-WCEPEDZA.js";
19
+ import "./chunk-2MRHO7I5.js";
20
+ import "./chunk-33T5FHX2.js";
21
21
  import "./chunk-C2TS5MER.js";
22
- import "./chunk-A2JFMAG3.js";
22
+ import "./chunk-6ZF7V4PG.js";
23
23
  import "./chunk-JQKKMUCT.js";
24
24
  import "./chunk-5FLTDWWP.js";
25
25
  import "./chunk-RIRDBSBG.js";
26
- import "./chunk-X2BEJT4V.js";
26
+ import "./chunk-MU75RB7Z.js";
27
27
  import "./chunk-TSPERKUS.js";
28
- import "./chunk-MDS7T32B.js";
28
+ import "./chunk-OXENTCOF.js";
29
29
  import "./chunk-SI2ZUOYD.js";
30
30
  import "./chunk-4IUTMHVB.js";
31
- import "./chunk-D3NJNDEW.js";
32
- import "./chunk-XQTDSVJG.js";
31
+ import "./chunk-HXN2HJMZ.js";
32
+ import "./chunk-AR5IUHCM.js";
33
33
  import "./chunk-QRKI6MMK.js";
34
34
  import "./chunk-ZOC4GITL.js";
35
35
  export {
@@ -0,0 +1,2 @@
1
+
2
+ export { }
@@ -0,0 +1,7 @@
1
+ // src/suppress-localstorage-warning.ts
2
+ var _origEmitWarning = process.emitWarning.bind(process);
3
+ process.emitWarning = (warning, ...rest) => {
4
+ const msg = (typeof warning === "string" ? warning : warning?.message ?? String(warning)).toLowerCase();
5
+ if (msg.includes("localstorage") || msg.includes("local storage")) return;
6
+ _origEmitWarning(warning, ...rest);
7
+ };
package/dist/telemetry.js CHANGED
@@ -36,8 +36,8 @@ import {
36
36
  truncateAddress,
37
37
  withDeploySpan,
38
38
  withSpan
39
- } from "./chunk-D3NJNDEW.js";
40
- import "./chunk-XQTDSVJG.js";
39
+ } from "./chunk-HXN2HJMZ.js";
40
+ import "./chunk-AR5IUHCM.js";
41
41
  export {
42
42
  VERSION,
43
43
  __setDeployRootSpanForTest,
@@ -11,9 +11,9 @@ import {
11
11
  isPreReleaseVersion,
12
12
  preReleaseWarning,
13
13
  promptYesNo
14
- } from "./chunk-5LAKX4AB.js";
15
- import "./chunk-D3NJNDEW.js";
16
- import "./chunk-XQTDSVJG.js";
14
+ } from "./chunk-2MRHO7I5.js";
15
+ import "./chunk-HXN2HJMZ.js";
16
+ import "./chunk-AR5IUHCM.js";
17
17
  export {
18
18
  assessVersion,
19
19
  checkNodeVersion,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parity/product-deploy",
3
- "version": "0.11.0-rc.0",
3
+ "version": "0.11.0-rc.2",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,7 +45,7 @@
45
45
  "tools/release-retry-wrapper.mjs"
46
46
  ],
47
47
  "scripts": {
48
- "build": "tsup src/index.ts src/deploy.ts src/dotns.ts src/pool.ts src/telemetry.ts src/memory-report.ts src/merkle.ts src/gh-pages-mirror.ts src/version-check.ts src/bug-report.ts src/run-state.ts src/environments.ts src/errors.ts src/manifest.ts src/chunk-probe.ts src/manifest-embed.ts src/manifest-fetch.ts src/manifest-roundtrip.ts src/incremental-stats.ts src/chunker.ts src/personhood/encoding.ts src/personhood/hashing.ts src/personhood/constants.ts src/personhood/member-key.ts src/personhood/people-client.ts src/personhood/proof-validity.ts src/personhood/reprove.ts src/personhood/bind-personal-id.ts src/personhood/claim-pgas.ts src/personhood/bind-paid-alias.ts src/personhood/bootstrap.ts src/personhood/chain-prereqs.ts src/manifest/types.ts src/manifest/schema.ts src/manifest/byte-budget.ts src/manifest/config-load.ts src/manifest/publish.ts src/auth/index.ts src/auth/vendor/index.ts src/auth/vendor/ui/index.ts src/auth-config.ts src/commands/login.ts src/commands/logout.ts src/commands/whoami.ts src/commands/transfer.ts src/storage-signer.ts src/spinner.ts src/sss-allowance.ts src/sss-allowance-cache.ts src/deploy-actors.ts --format esm --dts --clean --target node22",
48
+ "build": "tsup src/suppress-localstorage-warning.ts src/index.ts src/deploy.ts src/dotns.ts src/pool.ts src/telemetry.ts src/memory-report.ts src/merkle.ts src/gh-pages-mirror.ts src/version-check.ts src/bug-report.ts src/run-state.ts src/environments.ts src/errors.ts src/manifest.ts src/chunk-probe.ts src/manifest-embed.ts src/manifest-fetch.ts src/manifest-roundtrip.ts src/incremental-stats.ts src/chunker.ts src/personhood/encoding.ts src/personhood/hashing.ts src/personhood/constants.ts src/personhood/member-key.ts src/personhood/people-client.ts src/personhood/proof-validity.ts src/personhood/reprove.ts src/personhood/bind-personal-id.ts src/personhood/claim-pgas.ts src/personhood/bind-paid-alias.ts src/personhood/bootstrap.ts src/personhood/chain-prereqs.ts src/manifest/types.ts src/manifest/schema.ts src/manifest/byte-budget.ts src/manifest/config-load.ts src/manifest/publish.ts src/auth/index.ts src/auth/vendor/index.ts src/auth/vendor/ui/index.ts src/auth-config.ts src/commands/login.ts src/commands/logout.ts src/commands/whoami.ts src/commands/transfer.ts src/storage-signer.ts src/spinner.ts src/sss-allowance.ts src/sss-allowance-cache.ts src/deploy-actors.ts --format esm --dts --clean --target node22",
49
49
  "refresh-environments": "node scripts/refresh-environments.mjs",
50
50
  "postinstall": "patch-package || true",
51
51
  "prepare": "npm run build",