@parity/product-deploy 0.11.0-rc.2 → 0.11.0-rc.4

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 (43) hide show
  1. package/assets/environments.json +2 -0
  2. package/dist/auth-config.js +4 -4
  3. package/dist/bug-report.d.ts +10 -1
  4. package/dist/bug-report.js +6 -4
  5. package/dist/{chunk-422RAWSV.js → chunk-23AKFLS3.js} +3 -3
  6. package/dist/{chunk-HXN2HJMZ.js → chunk-4CQ75L4W.js} +1 -1
  7. package/dist/{chunk-6YUT276Z.js → chunk-CYKONVA7.js} +1 -1
  8. package/dist/{chunk-AR5IUHCM.js → chunk-GQNCLVZM.js} +1 -1
  9. package/dist/{chunk-QRKI6MMK.js → chunk-JSYQ3JQS.js} +4 -1
  10. package/dist/{chunk-4IUTMHVB.js → chunk-MRQPJLPS.js} +24 -3
  11. package/dist/{chunk-MU75RB7Z.js → chunk-ORJM2DGE.js} +2 -2
  12. package/dist/{chunk-YVLDMADS.js → chunk-ORS77MUP.js} +41 -20
  13. package/dist/{chunk-2MRHO7I5.js → chunk-OVF6SN7P.js} +1 -1
  14. package/dist/{chunk-6ZF7V4PG.js → chunk-PRBEYWUY.js} +2 -2
  15. package/dist/{chunk-WCEPEDZA.js → chunk-Q6UOOXXS.js} +9 -3
  16. package/dist/{chunk-OXENTCOF.js → chunk-RC3CVUOG.js} +46 -12
  17. package/dist/{chunk-33T5FHX2.js → chunk-ZDJW2Q4R.js} +1 -1
  18. package/dist/chunk-probe.js +3 -3
  19. package/dist/commands/login.js +12 -12
  20. package/dist/commands/logout.js +5 -5
  21. package/dist/commands/transfer.js +5 -5
  22. package/dist/commands/whoami.js +4 -4
  23. package/dist/deploy-actors.js +7 -7
  24. package/dist/deploy.d.ts +10 -1
  25. package/dist/deploy.js +14 -12
  26. package/dist/dotns.d.ts +33 -2
  27. package/dist/dotns.js +9 -5
  28. package/dist/environments.d.ts +2 -0
  29. package/dist/environments.js +1 -1
  30. package/dist/index.js +13 -13
  31. package/dist/manifest/publish.js +13 -13
  32. package/dist/memory-report.js +2 -2
  33. package/dist/merkle.js +12 -12
  34. package/dist/personhood/bootstrap.js +5 -5
  35. package/dist/personhood/people-client.js +5 -5
  36. package/dist/pool.d.ts +3 -1
  37. package/dist/pool.js +1 -1
  38. package/dist/run-state.js +1 -1
  39. package/dist/sss-allowance-cache.js +5 -5
  40. package/dist/storage-signer.js +12 -12
  41. package/dist/telemetry.js +2 -2
  42. package/dist/version-check.js +3 -3
  43. package/package.json +1 -1
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-SI2ZUOYD.js";
4
4
  import {
5
5
  isTestnetSpecName
6
- } from "./chunk-4IUTMHVB.js";
6
+ } from "./chunk-MRQPJLPS.js";
7
7
  import {
8
8
  captureWarning,
9
9
  markCodePath,
@@ -11,10 +11,10 @@ import {
11
11
  setDeploySentryTag,
12
12
  truncateAddress,
13
13
  withSpan
14
- } from "./chunk-HXN2HJMZ.js";
14
+ } from "./chunk-4CQ75L4W.js";
15
15
  import {
16
16
  validateContractAddresses
17
- } from "./chunk-QRKI6MMK.js";
17
+ } from "./chunk-JSYQ3JQS.js";
18
18
  import {
19
19
  NonRetryableError
20
20
  } from "./chunk-ZOC4GITL.js";
@@ -126,6 +126,7 @@ var TX_WALL_CLOCK_CEILING_MS = 24e4;
126
126
  var TX_NO_PROGRESS_MS = 9e4;
127
127
  var WS_HEARTBEAT_TIMEOUT_MS = 3e5;
128
128
  var DOTNS_TX_MAX_ATTEMPTS = 3;
129
+ var VERIFY_EFFECT_CHAIN_SECONDS = 60;
129
130
  function classifyTxRetryDecision(err) {
130
131
  const msg = err instanceof Error ? err.message : String(err);
131
132
  const lower = msg.toLowerCase();
@@ -146,14 +147,22 @@ function dotnsRetryBackoffMs(attempt, rand = Math.random) {
146
147
  function shouldRetryTxAttempt(attempt, maxAttempts, decision) {
147
148
  return decision === "retry" && attempt < maxAttempts;
148
149
  }
150
+ function shouldRegateBeforeResign(attempt, isPhoneSigner) {
151
+ return attempt >= 2 && isPhoneSigner === true;
152
+ }
149
153
  function makeRetryStatusFilter(sink) {
150
154
  let buffered = false;
155
+ let includedSeen = false;
151
156
  return {
152
157
  callback: (status) => {
153
158
  if (status === "failed") {
154
159
  buffered = true;
155
160
  return;
156
161
  }
162
+ if (status === "included") {
163
+ if (includedSeen) return;
164
+ includedSeen = true;
165
+ }
157
166
  sink(status);
158
167
  },
159
168
  flush: () => {
@@ -161,6 +170,7 @@ function makeRetryStatusFilter(sink) {
161
170
  },
162
171
  reset: () => {
163
172
  buffered = false;
173
+ includedSeen = false;
164
174
  }
165
175
  };
166
176
  }
@@ -777,6 +787,9 @@ var ReviveClientWrapper = class _ReviveClientWrapper {
777
787
  let lastError;
778
788
  for (let attempt = 1; attempt <= DOTNS_TX_MAX_ATTEMPTS; attempt++) {
779
789
  filter.reset();
790
+ if (shouldRegateBeforeResign(attempt, opts.isPhoneSigner)) {
791
+ await opts.onResign?.(attempt);
792
+ }
780
793
  try {
781
794
  return await this.signAndSubmitExtrinsic(buildExtrinsic(), signer, filter.callback, opts);
782
795
  } catch (e) {
@@ -824,7 +837,7 @@ var ReviveClientWrapper = class _ReviveClientWrapper {
824
837
  storage_deposit_limit: storageDepositLimit
825
838
  };
826
839
  }
827
- async submitTransaction(contractAddress, value, encodedData, signerSubstrateAddress, signer, statusCallback, { rpcs, useNoncePolling, functionName, args, contracts, verifyEffect, feeAsset }) {
840
+ async submitTransaction(contractAddress, value, encodedData, signerSubstrateAddress, signer, statusCallback, { rpcs, useNoncePolling, functionName, args, contracts, verifyEffect, feeAsset, isPhoneSigner, onResign }) {
828
841
  await this.ensureAccountMapped(signerSubstrateAddress, signer);
829
842
  if (functionName === "register") {
830
843
  try {
@@ -856,7 +869,7 @@ var ReviveClientWrapper = class _ReviveClientWrapper {
856
869
  "chain.tx.submit",
857
870
  `sign+submit ${functionName ?? "Revive.call"}`,
858
871
  { "chain.function_name": functionName ?? "Revive.call", "chain.use_nonce_polling": Boolean(useNoncePolling) },
859
- () => this.signAndSubmitWithRetry(buildExtrinsic, signer, statusCallback, "Revive.call", { nonceFallback, verifyEffect, feeAsset })
872
+ () => this.signAndSubmitWithRetry(buildExtrinsic, signer, statusCallback, "Revive.call", { nonceFallback, verifyEffect, feeAsset, isPhoneSigner, onResign })
860
873
  );
861
874
  }
862
875
  // Dry-runs each call individually, then wraps them in a single
@@ -981,6 +994,8 @@ var DotNS = class {
981
994
  // back to the legacy paseo-only RPC_ENDPOINTS for direct library callers.
982
995
  assetHubEndpoints;
983
996
  _usesExternalSigner = false;
997
+ /** True only when the signer is a real phone/session signer that needs `_awaitPhoneReady`. */
998
+ _isPhoneSigner = false;
984
999
  _localMnemonic = null;
985
1000
  _contracts = CONTRACTS;
986
1001
  _nativeToEthRatio = NATIVE_TO_ETH_RATIO;
@@ -1049,6 +1064,7 @@ var DotNS = class {
1049
1064
  const rpc = options.rpc || process.env.DOTNS_RPC || this.assetHubEndpoints[0];
1050
1065
  this.rpc = rpc;
1051
1066
  this._usesExternalSigner = Boolean(options.signer && options.signerAddress);
1067
+ this._isPhoneSigner = options.phoneSigner ?? false;
1052
1068
  if (this._usesExternalSigner) {
1053
1069
  this.signer = options.signer;
1054
1070
  this.substrateAddress = options.signerAddress;
@@ -1475,7 +1491,22 @@ var DotNS = class {
1475
1491
  await this._awaitPhoneReady(phoneLabel);
1476
1492
  }
1477
1493
  return await withTimeout(
1478
- this.clientWrapper.submitTransaction(contractAddress, value, encodedCallData, this.substrateAddress, this.signer, statusCallback, { rpcs, useNoncePolling, functionName, args, contracts: this._contracts, verifyEffect, feeAsset }),
1494
+ this.clientWrapper.submitTransaction(contractAddress, value, encodedCallData, this.substrateAddress, this.signer, statusCallback, {
1495
+ rpcs,
1496
+ useNoncePolling,
1497
+ functionName,
1498
+ args,
1499
+ contracts: this._contracts,
1500
+ verifyEffect,
1501
+ feeAsset,
1502
+ // Re-gate phone-signer retries (#971): a verifyEffect false-negative
1503
+ // makes signAndSubmitWithRetry re-sign; for a phone signer that needs
1504
+ // another tap, so pause via _awaitPhoneReady ("Re-sign needed … Check
1505
+ // your phone / Press Y") before re-signing. Both _awaitPhoneReady and the
1506
+ // retry-loop guard no-op for non-phone signers (local/dev workers).
1507
+ isPhoneSigner: this._isPhoneSigner,
1508
+ onResign: phoneLabel !== void 0 ? () => this._awaitPhoneReady(phoneLabel) : void 0
1509
+ }),
1479
1510
  OPERATION_TIMEOUT_MS,
1480
1511
  functionName
1481
1512
  );
@@ -1578,7 +1609,7 @@ var DotNS = class {
1578
1609
  const parentNode = namehash(`${parentLabel}.dot`);
1579
1610
  const subnodeNode = namehash(`${sublabel}.${parentLabel}.dot`);
1580
1611
  const subnodeRecord = { parentNode, subLabel: sublabel, parentLabel, owner: this.evmAddress };
1581
- const MAX_VERIFY_CHAIN_SECONDS = 30;
1612
+ const MAX_VERIFY_CHAIN_SECONDS = VERIFY_EFFECT_CHAIN_SECONDS;
1582
1613
  const POLL_INTERVAL_MS = 2e3;
1583
1614
  const verifyEffect = async () => {
1584
1615
  const wrapper = this.clientWrapper;
@@ -1718,7 +1749,7 @@ var DotNS = class {
1718
1749
  } catch (_) {
1719
1750
  }
1720
1751
  setDeployAttribute("deploy.dotns.contenthash_unchanged", "false");
1721
- const MAX_VERIFY_CHAIN_SECONDS = 30;
1752
+ const MAX_VERIFY_CHAIN_SECONDS = VERIFY_EFFECT_CHAIN_SECONDS;
1722
1753
  const POLL_INTERVAL_MS = 2e3;
1723
1754
  const verifyEffect = async () => {
1724
1755
  const wrapper = this.clientWrapper;
@@ -1815,7 +1846,7 @@ var DotNS = class {
1815
1846
  this.ensureConnected();
1816
1847
  console.log(` Setting text[${key}]: ${value}`);
1817
1848
  const node = namehash(`${domainName}.dot`);
1818
- const MAX_VERIFY_CHAIN_SECONDS = 30;
1849
+ const MAX_VERIFY_CHAIN_SECONDS = VERIFY_EFFECT_CHAIN_SECONDS;
1819
1850
  const TEXT_POLL_INTERVAL_MS = 2e3;
1820
1851
  const verifyEffect = async () => {
1821
1852
  const wrapper = this.clientWrapper;
@@ -1947,7 +1978,7 @@ var DotNS = class {
1947
1978
  console.log(` Already published \u2014 skipping`);
1948
1979
  return { status: "already-published" };
1949
1980
  }
1950
- const MAX_VERIFY_CHAIN_SECONDS = 30;
1981
+ const MAX_VERIFY_CHAIN_SECONDS = VERIFY_EFFECT_CHAIN_SECONDS;
1951
1982
  const PUBLISH_POLL_INTERVAL_MS = 2e3;
1952
1983
  const verifyEffect = async () => {
1953
1984
  const wrapper = this.clientWrapper;
@@ -2020,7 +2051,7 @@ var DotNS = class {
2020
2051
  console.log(` Not currently published \u2014 skipping`);
2021
2052
  return { status: "already-unpublished" };
2022
2053
  }
2023
- const MAX_VERIFY_CHAIN_SECONDS = 30;
2054
+ const MAX_VERIFY_CHAIN_SECONDS = VERIFY_EFFECT_CHAIN_SECONDS;
2024
2055
  const UNPUBLISH_POLL_INTERVAL_MS = 2e3;
2025
2056
  const verifyEffect = async () => {
2026
2057
  const wrapper = this.clientWrapper;
@@ -2681,7 +2712,7 @@ var DotNS = class {
2681
2712
  * phone" notification) so the user knows the request is now being sent.
2682
2713
  */
2683
2714
  async _awaitPhoneReady(label) {
2684
- if (!this._usesExternalSigner) return;
2715
+ if (!this._isPhoneSigner) return;
2685
2716
  const attempt = (this._phoneSignatureAttempts.get(label) ?? 0) + 1;
2686
2717
  this._phoneSignatureAttempts.set(label, attempt);
2687
2718
  if (this._confirmPhoneReady) {
@@ -2697,6 +2728,7 @@ var DotNS = class {
2697
2728
  this.connected = false;
2698
2729
  }
2699
2730
  this._usesExternalSigner = false;
2731
+ this._isPhoneSigner = false;
2700
2732
  this._onPhoneSigningRequired = void 0;
2701
2733
  this._confirmPhoneReady = void 0;
2702
2734
  this._phoneSignatureTotal = 0;
@@ -2727,9 +2759,11 @@ export {
2727
2759
  TX_NO_PROGRESS_MS,
2728
2760
  WS_HEARTBEAT_TIMEOUT_MS,
2729
2761
  DOTNS_TX_MAX_ATTEMPTS,
2762
+ VERIFY_EFFECT_CHAIN_SECONDS,
2730
2763
  classifyTxRetryDecision,
2731
2764
  dotnsRetryBackoffMs,
2732
2765
  shouldRetryTxAttempt,
2766
+ shouldRegateBeforeResign,
2733
2767
  makeRetryStatusFilter,
2734
2768
  DEFAULT_MNEMONIC,
2735
2769
  fetchNonce,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  captureWarning
3
- } from "./chunk-HXN2HJMZ.js";
3
+ } from "./chunk-4CQ75L4W.js";
4
4
 
5
5
  // src/chunk-probe.ts
6
6
  import { Twox128, Blake2128Concat, decAnyMetadata, unifyMetadata } from "@polkadot-api/substrate-bindings";
@@ -5,9 +5,9 @@ import {
5
5
  _decodeStorageValue,
6
6
  _resetProbeSession,
7
7
  probeChunks
8
- } from "./chunk-33T5FHX2.js";
9
- import "./chunk-HXN2HJMZ.js";
10
- import "./chunk-AR5IUHCM.js";
8
+ } from "./chunk-ZDJW2Q4R.js";
9
+ import "./chunk-4CQ75L4W.js";
10
+ import "./chunk-GQNCLVZM.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-YVLDMADS.js";
6
+ } from "../chunk-ORS77MUP.js";
7
7
  import {
8
8
  preflightSssAllowance
9
- } from "../chunk-6YUT276Z.js";
9
+ } from "../chunk-CYKONVA7.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-WCEPEDZA.js";
19
- import "../chunk-2MRHO7I5.js";
20
- import "../chunk-33T5FHX2.js";
18
+ import "../chunk-Q6UOOXXS.js";
19
+ import "../chunk-OVF6SN7P.js";
20
+ import "../chunk-ZDJW2Q4R.js";
21
21
  import "../chunk-C2TS5MER.js";
22
- import "../chunk-6ZF7V4PG.js";
22
+ import "../chunk-PRBEYWUY.js";
23
23
  import "../chunk-JQKKMUCT.js";
24
24
  import {
25
25
  BULLETIN_RESOURCE,
@@ -36,18 +36,18 @@ import {
36
36
  getAuthClient,
37
37
  getPeopleChainEndpoints,
38
38
  resolveBulletinEndpoints
39
- } from "../chunk-MU75RB7Z.js";
39
+ } from "../chunk-ORJM2DGE.js";
40
40
  import {
41
41
  CLI_NAME
42
42
  } from "../chunk-TSPERKUS.js";
43
- import "../chunk-OXENTCOF.js";
43
+ import "../chunk-RC3CVUOG.js";
44
44
  import "../chunk-SI2ZUOYD.js";
45
- import "../chunk-4IUTMHVB.js";
46
- import "../chunk-HXN2HJMZ.js";
47
- import "../chunk-AR5IUHCM.js";
45
+ import "../chunk-MRQPJLPS.js";
46
+ import "../chunk-4CQ75L4W.js";
47
+ import "../chunk-GQNCLVZM.js";
48
48
  import {
49
49
  loadEnvironments
50
- } from "../chunk-QRKI6MMK.js";
50
+ } from "../chunk-JSYQ3JQS.js";
51
51
  import "../chunk-ZOC4GITL.js";
52
52
 
53
53
  // src/commands/login.ts
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clearSssAllowanceCache
3
- } from "../chunk-6YUT276Z.js";
3
+ } from "../chunk-CYKONVA7.js";
4
4
  import "../chunk-GRPLHUYC.js";
5
5
  import "../chunk-JQKKMUCT.js";
6
6
  import "../chunk-5FLTDWWP.js";
@@ -9,11 +9,11 @@ import {
9
9
  } from "../chunk-RIRDBSBG.js";
10
10
  import {
11
11
  getAuthClient
12
- } from "../chunk-MU75RB7Z.js";
12
+ } from "../chunk-ORJM2DGE.js";
13
13
  import "../chunk-TSPERKUS.js";
14
- import "../chunk-HXN2HJMZ.js";
15
- import "../chunk-AR5IUHCM.js";
16
- import "../chunk-QRKI6MMK.js";
14
+ import "../chunk-4CQ75L4W.js";
15
+ import "../chunk-GQNCLVZM.js";
16
+ import "../chunk-JSYQ3JQS.js";
17
17
  import "../chunk-ZOC4GITL.js";
18
18
 
19
19
  // src/commands/logout.ts
@@ -4,16 +4,16 @@ import {
4
4
  import {
5
5
  DEFAULT_MNEMONIC,
6
6
  DotNS
7
- } from "../chunk-OXENTCOF.js";
7
+ } from "../chunk-RC3CVUOG.js";
8
8
  import "../chunk-SI2ZUOYD.js";
9
- import "../chunk-4IUTMHVB.js";
10
- import "../chunk-HXN2HJMZ.js";
11
- import "../chunk-AR5IUHCM.js";
9
+ import "../chunk-MRQPJLPS.js";
10
+ import "../chunk-4CQ75L4W.js";
11
+ import "../chunk-GQNCLVZM.js";
12
12
  import {
13
13
  getPopSelfServeConfig,
14
14
  loadEnvironments,
15
15
  resolveEndpoints
16
- } from "../chunk-QRKI6MMK.js";
16
+ } from "../chunk-JSYQ3JQS.js";
17
17
  import "../chunk-ZOC4GITL.js";
18
18
 
19
19
  // src/commands/transfer.ts
@@ -2,13 +2,13 @@ import {
2
2
  STALE_SESSION_MESSAGE,
3
3
  getAuthClient,
4
4
  hasPersistedSession
5
- } from "../chunk-MU75RB7Z.js";
5
+ } from "../chunk-ORJM2DGE.js";
6
6
  import {
7
7
  CLI_NAME
8
8
  } from "../chunk-TSPERKUS.js";
9
- import "../chunk-HXN2HJMZ.js";
10
- import "../chunk-AR5IUHCM.js";
11
- import "../chunk-QRKI6MMK.js";
9
+ import "../chunk-4CQ75L4W.js";
10
+ import "../chunk-GQNCLVZM.js";
11
+ import "../chunk-JSYQ3JQS.js";
12
12
  import "../chunk-ZOC4GITL.js";
13
13
 
14
14
  // src/commands/whoami.ts
@@ -2,18 +2,18 @@ import {
2
2
  MainnetDefaultWorkerError,
3
3
  resolveDeployActors,
4
4
  resolveStorageSigner
5
- } from "./chunk-6ZF7V4PG.js";
5
+ } from "./chunk-PRBEYWUY.js";
6
6
  import "./chunk-JQKKMUCT.js";
7
7
  import "./chunk-5FLTDWWP.js";
8
8
  import "./chunk-RIRDBSBG.js";
9
- import "./chunk-MU75RB7Z.js";
9
+ import "./chunk-ORJM2DGE.js";
10
10
  import "./chunk-TSPERKUS.js";
11
- import "./chunk-OXENTCOF.js";
11
+ import "./chunk-RC3CVUOG.js";
12
12
  import "./chunk-SI2ZUOYD.js";
13
- import "./chunk-4IUTMHVB.js";
14
- import "./chunk-HXN2HJMZ.js";
15
- import "./chunk-AR5IUHCM.js";
16
- import "./chunk-QRKI6MMK.js";
13
+ import "./chunk-MRQPJLPS.js";
14
+ import "./chunk-4CQ75L4W.js";
15
+ import "./chunk-GQNCLVZM.js";
16
+ import "./chunk-JSYQ3JQS.js";
17
17
  import "./chunk-ZOC4GITL.js";
18
18
  export {
19
19
  MainnetDefaultWorkerError,
package/dist/deploy.d.ts CHANGED
@@ -146,6 +146,15 @@ declare function shouldHandoverName(opts: {
146
146
  * Fallback: " Storage signer: pool fallback (<reason>)"
147
147
  */
148
148
  declare function formatStorageSignerLine(slotAddress: string | null, failReason?: string, owned?: boolean): string;
149
+ /**
150
+ * #983: the transfer-mode DotNS announcement, printed at preflight once ownership
151
+ * is known. The up-front worker header states only the worker's storage role (it
152
+ * can't know ownership yet); this line states the transfer-vs-owned-update reality:
153
+ * New name: " DotNS: will register <name> and transfer it to your account <recipient>"
154
+ * Already owned: " DotNS: you already own <name> — content update needs your phone signature (no transfer)"
155
+ * Exported for unit testing.
156
+ */
157
+ declare function formatTransferModeDotnsLine(alreadyOwned: boolean, dotName: string, recipient: string): string;
149
158
  declare function storeFile(contentBytes: Uint8Array, { client: existingClient, unsafeApi: existingApi, signer: existingSigner, hashCode, }?: ExistingProvider & {
150
159
  hashCode?: number;
151
160
  }): Promise<string>;
@@ -456,4 +465,4 @@ declare function computePhoneSigningSteps(dotnsPreflight: {
456
465
  needsPopUpgrade: boolean;
457
466
  } | null, publishNeeded: boolean): string[];
458
467
 
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 };
468
+ 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, formatTransferModeDotnsLine, friendlyChainError, hasIPFS, interpretBitswapResult, isBenignTeardownError, isConnectionError, isPhoneSignerActive, makeBulletinStatusHandler, merkleize, probeP2pRetrieval, resolveDotnsConnectOptions, resolveReproducibleTimestamp, retryBudgetExhausted, setWsHaltCallback, shouldHandoverName, storeChunkedContent, storeDirectory, storeDirectoryV2, storeFile, unpublish };
package/dist/deploy.js CHANGED
@@ -31,6 +31,7 @@ import {
31
31
  encryptContent,
32
32
  estimateUploadBytes,
33
33
  formatStorageSignerLine,
34
+ formatTransferModeDotnsLine,
34
35
  friendlyChainError,
35
36
  hasIPFS,
36
37
  interpretBitswapResult,
@@ -50,30 +51,30 @@ import {
50
51
  storeDirectoryV2,
51
52
  storeFile,
52
53
  unpublish
53
- } from "./chunk-YVLDMADS.js";
54
- import "./chunk-6YUT276Z.js";
54
+ } from "./chunk-ORS77MUP.js";
55
+ import "./chunk-CYKONVA7.js";
55
56
  import "./chunk-GRPLHUYC.js";
56
57
  import "./chunk-HOTQDYHD.js";
57
58
  import "./chunk-IW3X2MJF.js";
58
59
  import "./chunk-KOSF5FDO.js";
59
60
  import "./chunk-J3NIXHZZ.js";
60
61
  import "./chunk-S7EM5VMW.js";
61
- import "./chunk-WCEPEDZA.js";
62
- import "./chunk-2MRHO7I5.js";
63
- import "./chunk-33T5FHX2.js";
62
+ import "./chunk-Q6UOOXXS.js";
63
+ import "./chunk-OVF6SN7P.js";
64
+ import "./chunk-ZDJW2Q4R.js";
64
65
  import "./chunk-C2TS5MER.js";
65
- import "./chunk-6ZF7V4PG.js";
66
+ import "./chunk-PRBEYWUY.js";
66
67
  import "./chunk-JQKKMUCT.js";
67
68
  import "./chunk-5FLTDWWP.js";
68
69
  import "./chunk-RIRDBSBG.js";
69
- import "./chunk-MU75RB7Z.js";
70
+ import "./chunk-ORJM2DGE.js";
70
71
  import "./chunk-TSPERKUS.js";
71
- import "./chunk-OXENTCOF.js";
72
+ import "./chunk-RC3CVUOG.js";
72
73
  import "./chunk-SI2ZUOYD.js";
73
- import "./chunk-4IUTMHVB.js";
74
- import "./chunk-HXN2HJMZ.js";
75
- import "./chunk-AR5IUHCM.js";
76
- import "./chunk-QRKI6MMK.js";
74
+ import "./chunk-MRQPJLPS.js";
75
+ import "./chunk-4CQ75L4W.js";
76
+ import "./chunk-GQNCLVZM.js";
77
+ import "./chunk-JSYQ3JQS.js";
77
78
  import {
78
79
  EXIT_CODE_NO_RETRY,
79
80
  NonRetryableError
@@ -113,6 +114,7 @@ export {
113
114
  encryptContent,
114
115
  estimateUploadBytes,
115
116
  formatStorageSignerLine,
117
+ formatTransferModeDotnsLine,
116
118
  friendlyChainError,
117
119
  hasIPFS,
118
120
  interpretBitswapResult,
package/dist/dotns.d.ts CHANGED
@@ -49,6 +49,16 @@ interface DotNSConnectOptions {
49
49
  attempt: number;
50
50
  total: number;
51
51
  }) => Promise<void>;
52
+ /**
53
+ * True when the injected signer is a real phone/session signer that needs the
54
+ * human-ready gate (`_awaitPhoneReady`). False (default) for local workers used
55
+ * in transfer mode and mnemonic signers — those sign in-process with no phone.
56
+ *
57
+ * Fixes #980: `_usesExternalSigner` is true for the local transfer-worker too,
58
+ * so it cannot distinguish phone-backed from in-process. This flag is the
59
+ * transfer-aware predicate that `isPhoneSignerActive` in deploy.ts already uses.
60
+ */
61
+ phoneSigner?: boolean;
52
62
  }
53
63
  interface OwnershipResult {
54
64
  owned: boolean;
@@ -138,6 +148,7 @@ declare const TX_WALL_CLOCK_CEILING_MS: number;
138
148
  declare const TX_NO_PROGRESS_MS: number;
139
149
  declare const WS_HEARTBEAT_TIMEOUT_MS: number;
140
150
  declare const DOTNS_TX_MAX_ATTEMPTS: number;
151
+ declare const VERIFY_EFFECT_CHAIN_SECONDS: number;
141
152
  declare function classifyTxRetryDecision(err: unknown): "retry" | "abort";
142
153
  declare function dotnsRetryBackoffMs(attempt: number, rand?: () => number): number;
143
154
  /**
@@ -149,11 +160,25 @@ declare function dotnsRetryBackoffMs(attempt: number, rand?: () => number): numb
149
160
  * invisible and the count appeared to stop one short.
150
161
  */
151
162
  declare function shouldRetryTxAttempt(attempt: number, maxAttempts: number, decision: "retry" | "abort"): boolean;
163
+ /**
164
+ * Whether to pause for the human-ready gate before a retry RE-SIGN (#971).
165
+ * Only a phone/session signer re-sign needs another tap, so the re-gate fires
166
+ * only on attempt ≥ 2 (a re-sign, not the first sign) AND when the signer is a
167
+ * phone signer. Local/dev workers re-sign locally and must NOT pause. Pure so
168
+ * the decision is unit-testable without driving a real retry.
169
+ */
170
+ declare function shouldRegateBeforeResign(attempt: number, isPhoneSigner: boolean | undefined): boolean;
152
171
  /** Wraps `sink` so that "failed" status events are buffered and only forwarded
153
172
  * when `flush()` is called (i.e. on final abort). All other statuses pass
154
173
  * through immediately. Call `reset()` at the top of each retry attempt to
155
174
  * discard a buffered "failed" from the previous attempt.
156
175
  *
176
+ * Also deduplicates "included": papi's txBestBlocksState subscription can fire
177
+ * with found=true multiple times (tx can appear/reappear across best-block
178
+ * updates), so without dedup the status line prints twice (#891). "included" is
179
+ * passed through only once per attempt; reset() clears the seen flag so the
180
+ * next attempt can emit it again if it succeeds through a different path.
181
+ *
157
182
  * Closes two leak paths (issue #704):
158
183
  * 1. Retry-recovered: attempt N emits "failed" before throwing; a later attempt
159
184
  * succeeds → reset() at the top of the next iteration discards the buffer,
@@ -327,9 +352,11 @@ declare class ReviveClientWrapper {
327
352
  };
328
353
  verifyEffect?: () => Promise<boolean>;
329
354
  feeAsset?: "pgas";
355
+ isPhoneSigner?: boolean;
356
+ onResign?: (attempt: number) => Promise<void>;
330
357
  }): Promise<TxResolution>;
331
358
  private dryRunReviveCall;
332
- submitTransaction(contractAddress: string, value: bigint, encodedData: string, signerSubstrateAddress: string, signer: PolkadotSigner, statusCallback: (status: string) => void, { rpcs, useNoncePolling, functionName, args, contracts, verifyEffect, feeAsset }: {
359
+ submitTransaction(contractAddress: string, value: bigint, encodedData: string, signerSubstrateAddress: string, signer: PolkadotSigner, statusCallback: (status: string) => void, { rpcs, useNoncePolling, functionName, args, contracts, verifyEffect, feeAsset, isPhoneSigner, onResign }: {
333
360
  rpcs: string[];
334
361
  useNoncePolling?: boolean;
335
362
  functionName?: string;
@@ -337,6 +364,8 @@ declare class ReviveClientWrapper {
337
364
  contracts?: Record<string, string>;
338
365
  verifyEffect?: () => Promise<boolean>;
339
366
  feeAsset?: "pgas";
367
+ isPhoneSigner?: boolean;
368
+ onResign?: (attempt: number) => Promise<void>;
340
369
  }): Promise<TxResolution>;
341
370
  submitBatchedTransactions(calls: {
342
371
  contractAddress: string;
@@ -422,6 +451,8 @@ declare class DotNS {
422
451
  connected: boolean;
423
452
  assetHubEndpoints: string[];
424
453
  private _usesExternalSigner;
454
+ /** True only when the signer is a real phone/session signer that needs `_awaitPhoneReady`. */
455
+ private _isPhoneSigner;
425
456
  private _localMnemonic;
426
457
  private _contracts;
427
458
  private _nativeToEthRatio;
@@ -642,4 +673,4 @@ declare class DotNS {
642
673
  }
643
674
  declare const dotns: DotNS;
644
675
 
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 };
676
+ 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, VERIFY_EFFECT_CHAIN_SECONDS, 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, shouldRegateBeforeResign, shouldRetryTxAttempt, stripTrailingDigits, validateDomainLabel, verifyNonceAdvanced, weiToNative };
package/dist/dotns.js CHANGED
@@ -21,6 +21,7 @@ import {
21
21
  TX_NO_PROGRESS_MS,
22
22
  TX_TIMEOUT_MS,
23
23
  TX_WALL_CLOCK_CEILING_MS,
24
+ VERIFY_EFFECT_CHAIN_SECONDS,
24
25
  WS_HEARTBEAT_TIMEOUT_MS,
25
26
  __formatContractDryRunFailureForTest,
26
27
  bufferedWeiToNative,
@@ -49,17 +50,18 @@ import {
49
50
  popStatusName,
50
51
  registerDepositWei,
51
52
  sanitizeDomainLabel,
53
+ shouldRegateBeforeResign,
52
54
  shouldRetryTxAttempt,
53
55
  stripTrailingDigits,
54
56
  validateDomainLabel,
55
57
  verifyNonceAdvanced,
56
58
  weiToNative
57
- } from "./chunk-OXENTCOF.js";
59
+ } from "./chunk-RC3CVUOG.js";
58
60
  import "./chunk-SI2ZUOYD.js";
59
- import "./chunk-4IUTMHVB.js";
60
- import "./chunk-HXN2HJMZ.js";
61
- import "./chunk-AR5IUHCM.js";
62
- import "./chunk-QRKI6MMK.js";
61
+ import "./chunk-MRQPJLPS.js";
62
+ import "./chunk-4CQ75L4W.js";
63
+ import "./chunk-GQNCLVZM.js";
64
+ import "./chunk-JSYQ3JQS.js";
63
65
  import "./chunk-ZOC4GITL.js";
64
66
  export {
65
67
  ATTR_TX_RESOLUTION_KIND,
@@ -84,6 +86,7 @@ export {
84
86
  TX_NO_PROGRESS_MS,
85
87
  TX_TIMEOUT_MS,
86
88
  TX_WALL_CLOCK_CEILING_MS,
89
+ VERIFY_EFFECT_CHAIN_SECONDS,
87
90
  WS_HEARTBEAT_TIMEOUT_MS,
88
91
  __formatContractDryRunFailureForTest,
89
92
  bufferedWeiToNative,
@@ -112,6 +115,7 @@ export {
112
115
  popStatusName,
113
116
  registerDepositWei,
114
117
  sanitizeDomainLabel,
118
+ shouldRegateBeforeResign,
115
119
  shouldRetryTxAttempt,
116
120
  stripTrailingDigits,
117
121
  validateDomainLabel,
@@ -29,6 +29,7 @@ interface Environment {
29
29
  registerStorageDeposit?: number;
30
30
  contracts?: Record<string, string>;
31
31
  popSelfServe?: PopSelfServeConfig;
32
+ bulletinAutoAuthorize?: boolean;
32
33
  }
33
34
  interface ChainEndpoint {
34
35
  wss: string | string[];
@@ -66,6 +67,7 @@ interface ResolvedEndpoints {
66
67
  contracts: Record<string, string>;
67
68
  nativeToEthRatio: bigint;
68
69
  registerStorageDeposit?: bigint;
70
+ bulletinAutoAuthorize: boolean;
69
71
  }
70
72
  declare function defaultBundledPath(): string;
71
73
  /**
@@ -9,7 +9,7 @@ import {
9
9
  loadEnvironments,
10
10
  resolveEndpoints,
11
11
  validateContractAddresses
12
- } from "./chunk-QRKI6MMK.js";
12
+ } from "./chunk-JSYQ3JQS.js";
13
13
  import "./chunk-ZOC4GITL.js";
14
14
  export {
15
15
  DEFAULT_ENV_ID,