bulletin-deploy 0.13.1 → 0.13.2-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 (40) hide show
  1. package/assets/environments.json +1 -0
  2. package/bin/bulletin-deploy +16 -5
  3. package/dist/auth-config.js +4 -4
  4. package/dist/bug-report.js +4 -4
  5. package/dist/{chunk-PYCUFN2I.js → chunk-3ZEMX4WD.js} +2 -0
  6. package/dist/{chunk-RGPNNEPX.js → chunk-46BS77ZZ.js} +55 -2
  7. package/dist/{chunk-VBGFBY5L.js → chunk-A33TZ7T6.js} +3 -3
  8. package/dist/{chunk-CEHA7IPP.js → chunk-DPSGCV2F.js} +2 -2
  9. package/dist/{chunk-KLRDACMI.js → chunk-G7Y7QZIE.js} +1 -1
  10. package/dist/{chunk-QFXYMMGX.js → chunk-IELQ4GO6.js} +3 -3
  11. package/dist/{chunk-E6EQ27PD.js → chunk-MYQO2UNZ.js} +1 -1
  12. package/dist/{chunk-54KV6TLM.js → chunk-P7MXONT2.js} +2 -2
  13. package/dist/{chunk-IOBSHARJ.js → chunk-PEJQIIGR.js} +21 -11
  14. package/dist/{chunk-SYDD2DHJ.js → chunk-PMYMVWFT.js} +1 -1
  15. package/dist/{chunk-ZJFBWLNE.js → chunk-XIMLHQX5.js} +1 -1
  16. package/dist/{chunk-H6RP4NTZ.js → chunk-XOVXFR6G.js} +1 -1
  17. package/dist/chunk-probe.js +3 -3
  18. package/dist/commands/login.js +11 -11
  19. package/dist/commands/logout.js +5 -5
  20. package/dist/commands/transfer.js +4 -4
  21. package/dist/commands/whoami.js +4 -4
  22. package/dist/deploy-actors.js +6 -6
  23. package/dist/deploy.d.ts +26 -4
  24. package/dist/deploy.js +13 -11
  25. package/dist/dotns.d.ts +44 -1
  26. package/dist/dotns.js +12 -4
  27. package/dist/environments.d.ts +8 -0
  28. package/dist/environments.js +1 -1
  29. package/dist/index.js +12 -12
  30. package/dist/manifest/publish.js +12 -12
  31. package/dist/memory-report.js +2 -2
  32. package/dist/merkle.js +11 -11
  33. package/dist/personhood/bootstrap.js +4 -4
  34. package/dist/personhood/people-client.js +4 -4
  35. package/dist/run-state.js +1 -1
  36. package/dist/sss-allowance-cache.js +5 -5
  37. package/dist/storage-signer.js +11 -11
  38. package/dist/telemetry.js +2 -2
  39. package/dist/version-check.js +3 -3
  40. package/package.json +1 -1
@@ -137,6 +137,7 @@
137
137
  "description": "Polkadot Community Foundation products devnet — Paseo system chains (Asset Hub 1000 / People 1004 / Bulletin 1010)",
138
138
  "e2eEligible": false,
139
139
  "ipfs": "https://devnet-ipfs.api.polkadotcommunity.foundation",
140
+ "webGateway": "dev-dot.li",
140
141
  "autoAccountMapping": true,
141
142
  "nativeToEthRatio": 100000000,
142
143
  "registerStorageDeposit": 2000000000000,
@@ -6,7 +6,7 @@
6
6
  // SDK modules that trigger the "@parity/product-sdk-logger" localStorage warning.
7
7
  import "../dist/suppress-localstorage-warning.js";
8
8
 
9
- import { deploy, DEFAULT_BULLETIN_RPC, DEFAULT_POOL_SIZE, NonRetryableError, EXIT_CODE_NO_RETRY, isConnectionError, isBenignTeardownError, unpublish } from "../dist/deploy.js";
9
+ import { deploy, DEFAULT_BULLETIN_RPC, DEFAULT_POOL_SIZE, NonRetryableError, EXIT_CODE_NO_RETRY, isConnectionError, isBenignTeardownError, unpublish, resolveEffectiveMnemonic } from "../dist/deploy.js";
10
10
  import { VERSION, setDeployAttribute, captureWarning, closeTelemetry, setRunStateActive, markRelaunchOomHintShown } from "../dist/telemetry.js";
11
11
  import { handleFailedDeploy, handlePreflightVersionCheck, fetchVersionInfo, preReleaseWarning, checkNodeVersion } from "../dist/version-check.js";
12
12
  import { setDeployContext, installLogCapture, buildCliFlagsSummary } from "../dist/bug-report.js";
@@ -78,6 +78,17 @@ if (flags.publish && flags.unpublish) {
78
78
  process.exit(1);
79
79
  }
80
80
 
81
+ // #1107: the mnemonic actually used to sign — --mnemonic flag > MNEMONIC env
82
+ // var > DOTNS_MNEMONIC env var. Used everywhere deploy/publish/unpublish need
83
+ // a signer identity (existence guards below intentionally keep checking
84
+ // flags.mnemonic / process.env.MNEMONIC directly — only the VALUE forwarded
85
+ // to options.mnemonic changes here).
86
+ const effectiveMnemonic = resolveEffectiveMnemonic({
87
+ flagMnemonic: flags.mnemonic,
88
+ envMnemonic: process.env.MNEMONIC,
89
+ envDotnsMnemonic: process.env.DOTNS_MNEMONIC,
90
+ });
91
+
81
92
  // --environment-file: propagate to the env var so all internal loadEnvironments()
82
93
  // call sites (deploy.ts, manifest/publish.ts, personhood) honor the override.
83
94
  if (flags.environmentFile) {
@@ -119,7 +130,7 @@ if (flags.unpublish) {
119
130
  }
120
131
  try {
121
132
  const result = await unpublish(domain, {
122
- mnemonic: flags.mnemonic,
133
+ mnemonic: effectiveMnemonic,
123
134
  derivationPath: flags.derivationPath,
124
135
  rpc: flags.rpc,
125
136
  env: flags.env,
@@ -445,7 +456,7 @@ try {
445
456
  rpc: effectiveRpc,
446
457
  repo: process.env.GITHUB_REPOSITORY,
447
458
  branch: process.env.GITHUB_HEAD_REF || process.env.GITHUB_REF_NAME,
448
- signerMode: flags.mnemonic ? "direct" : "pool",
459
+ signerMode: effectiveMnemonic ? "direct" : "pool",
449
460
  deployTag,
450
461
  cliFlags: buildCliFlagsSummary(flags),
451
462
  ci,
@@ -473,7 +484,7 @@ try {
473
484
  }
474
485
 
475
486
  const result = await deploy(buildDir, domain, {
476
- mnemonic: flags.mnemonic,
487
+ mnemonic: effectiveMnemonic,
477
488
  derivationPath: flags.derivationPath,
478
489
  suri: flags.suri,
479
490
  rpc: flags.rpc,
@@ -557,7 +568,7 @@ try {
557
568
  buildDirCid: { absPath: buildDirAbs, cid: result.cid },
558
569
  env: flags.env,
559
570
  rpc: flags.rpc,
560
- mnemonic: flags.mnemonic,
571
+ mnemonic: effectiveMnemonic,
561
572
  derivationPath: flags.derivationPath,
562
573
  });
563
574
  } catch (err) {
@@ -9,11 +9,11 @@ import {
9
9
  getPeopleChainEndpoints,
10
10
  hasPersistedSession,
11
11
  resolveBulletinEndpoints
12
- } from "./chunk-54KV6TLM.js";
12
+ } from "./chunk-P7MXONT2.js";
13
13
  import "./chunk-TSPERKUS.js";
14
- import "./chunk-E6EQ27PD.js";
15
- import "./chunk-ZJFBWLNE.js";
16
- import "./chunk-PYCUFN2I.js";
14
+ import "./chunk-MYQO2UNZ.js";
15
+ import "./chunk-XIMLHQX5.js";
16
+ import "./chunk-3ZEMX4WD.js";
17
17
  import "./chunk-ZOC4GITL.js";
18
18
  export {
19
19
  DOT_DAPP_ID,
@@ -10,10 +10,10 @@ import {
10
10
  offerBugReport,
11
11
  scrubSecrets,
12
12
  setDeployContext
13
- } from "./chunk-VBGFBY5L.js";
14
- import "./chunk-H6RP4NTZ.js";
15
- import "./chunk-E6EQ27PD.js";
16
- import "./chunk-ZJFBWLNE.js";
13
+ } from "./chunk-A33TZ7T6.js";
14
+ import "./chunk-XOVXFR6G.js";
15
+ import "./chunk-MYQO2UNZ.js";
16
+ import "./chunk-XIMLHQX5.js";
17
17
  export {
18
18
  buildCliFlagsSummary,
19
19
  buildLabels,
@@ -146,6 +146,7 @@ var environments_default = {
146
146
  description: "Polkadot Community Foundation products devnet \u2014 Paseo system chains (Asset Hub 1000 / People 1004 / Bulletin 1010)",
147
147
  e2eEligible: false,
148
148
  ipfs: "https://devnet-ipfs.api.polkadotcommunity.foundation",
149
+ webGateway: "dev-dot.li",
149
150
  autoAccountMapping: true,
150
151
  nativeToEthRatio: 1e8,
151
152
  registerStorageDeposit: 2e12,
@@ -669,6 +670,7 @@ function resolveEndpoints(doc, envId) {
669
670
  network: env.network,
670
671
  envName: env.name,
671
672
  ipfs: env.ipfs,
673
+ webGateway: env.webGateway,
672
674
  autoAccountMapping: env.autoAccountMapping ?? false,
673
675
  contracts: env.contracts ?? {},
674
676
  nativeToEthRatio: BigInt(env.nativeToEthRatio ?? 1e6),
@@ -11,10 +11,10 @@ import {
11
11
  setDeploySentryTag,
12
12
  truncateAddress,
13
13
  withSpan
14
- } from "./chunk-E6EQ27PD.js";
14
+ } from "./chunk-MYQO2UNZ.js";
15
15
  import {
16
16
  validateContractAddresses
17
- } from "./chunk-PYCUFN2I.js";
17
+ } from "./chunk-3ZEMX4WD.js";
18
18
  import {
19
19
  NonRetryableError
20
20
  } from "./chunk-ZOC4GITL.js";
@@ -274,6 +274,42 @@ async function verifyNonceAdvanced(endpoints, ss58Address, originalNonce) {
274
274
  }
275
275
  return { advanced: false };
276
276
  }
277
+ var NONCE_CONTENTION_BACKOFF_BASE_MS = 250;
278
+ var NONCE_CONTENTION_BACKOFF_MAX_MS = 2e3;
279
+ function nonceContentionBackoffMs(attempt, rand = Math.random) {
280
+ const base = Math.min(NONCE_CONTENTION_BACKOFF_BASE_MS * 2 ** (attempt - 1), NONCE_CONTENTION_BACKOFF_MAX_MS);
281
+ const jitter = (rand() * 2 - 1) * NONCE_CONTENTION_BACKOFF_BASE_MS;
282
+ return Math.max(0, Math.round(base + jitter));
283
+ }
284
+ var DOTNS_NONCE_CONTENTION_MAX_ATTEMPTS = 5;
285
+ function isNonceContentionAmbiguous(err) {
286
+ const msg = err instanceof Error ? err.message : String(err);
287
+ return msg.startsWith("nonce-advance fallback:");
288
+ }
289
+ async function reacquireNonceOnContention(resubmit, nonceFallback, label, opts = {}) {
290
+ const fetchNonceFn = opts.fetchNonce ?? fetchNonce;
291
+ const sleepFn = opts.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
292
+ const backoffFn = opts.backoffMs ?? nonceContentionBackoffMs;
293
+ const maxAttempts = opts.maxAttempts ?? DOTNS_NONCE_CONTENTION_MAX_ATTEMPTS;
294
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
295
+ setDeployAttribute("deploy.dotns.nonce_contention_retries", attempt);
296
+ const ms = backoffFn(attempt);
297
+ console.log(` ${label}: nonce contention (attempt ${attempt}/${maxAttempts}) \u2014 re-acquiring nonce and resubmitting in ${ms}ms\u2026`);
298
+ await sleepFn(ms);
299
+ try {
300
+ nonceFallback.expectedNonce = await fetchNonceFn(nonceFallback.rpcs, nonceFallback.senderSS58);
301
+ } catch {
302
+ }
303
+ try {
304
+ return await resubmit();
305
+ } catch (e) {
306
+ if (!isNonceContentionAmbiguous(e)) throw e;
307
+ }
308
+ }
309
+ throw new NonRetryableError(
310
+ `DotNS write could not acquire a nonce slot after ${maxAttempts} attempts \u2014 the shared signer (${nonceFallback.senderSS58}) is under nonce contention; pass your own --mnemonic for an isolated nonce space.`
311
+ );
312
+ }
277
313
  var ProofOfPersonhoodStatus = {
278
314
  NoStatus: 0,
279
315
  ProofOfPersonhoodLite: 1,
@@ -875,6 +911,19 @@ var ReviveClientWrapper = class _ReviveClientWrapper {
875
911
  filter.flush();
876
912
  throw fastFail;
877
913
  }
914
+ if (opts.nonceFallback && isNonceContentionAmbiguous(e)) {
915
+ try {
916
+ return await reacquireNonceOnContention(
917
+ () => this.signAndSubmitExtrinsic(buildExtrinsic(), signer, filter.callback, opts),
918
+ opts.nonceFallback,
919
+ label,
920
+ { fetchNonce: opts.fetchNonce, sleep: opts.sleep, backoffMs: opts.nonceContentionBackoffMs }
921
+ );
922
+ } catch (contentionErr) {
923
+ filter.flush();
924
+ throw contentionErr;
925
+ }
926
+ }
878
927
  const decision = classifyTxRetryDecision(e);
879
928
  const msg = e?.message ?? String(e);
880
929
  if (!shouldRetryTxAttempt(attempt, DOTNS_TX_MAX_ATTEMPTS, decision)) {
@@ -2936,6 +2985,10 @@ export {
2936
2985
  DEFAULT_MNEMONIC,
2937
2986
  fetchNonce,
2938
2987
  verifyNonceAdvanced,
2988
+ nonceContentionBackoffMs,
2989
+ DOTNS_NONCE_CONTENTION_MAX_ATTEMPTS,
2990
+ isNonceContentionAmbiguous,
2991
+ reacquireNonceOnContention,
2939
2992
  ProofOfPersonhoodStatus,
2940
2993
  PUBLISHER_ABI,
2941
2994
  PublisherNotSupportedError,
@@ -2,15 +2,15 @@ import {
2
2
  classifyErrorArea,
3
3
  isInteractive,
4
4
  promptYesNo
5
- } from "./chunk-H6RP4NTZ.js";
5
+ } from "./chunk-XOVXFR6G.js";
6
6
  import {
7
7
  VERSION,
8
8
  getCurrentSentryTraceId,
9
9
  resolveIssueRepoSlug
10
- } from "./chunk-E6EQ27PD.js";
10
+ } from "./chunk-MYQO2UNZ.js";
11
11
  import {
12
12
  package_default
13
- } from "./chunk-ZJFBWLNE.js";
13
+ } from "./chunk-XIMLHQX5.js";
14
14
 
15
15
  // src/bug-report.ts
16
16
  import { execSync, execFileSync } from "child_process";
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-5FLTDWWP.js";
5
5
  import {
6
6
  DOT_PRODUCT_ID
7
- } from "./chunk-54KV6TLM.js";
7
+ } from "./chunk-P7MXONT2.js";
8
8
  import {
9
9
  DEFAULT_MNEMONIC
10
- } from "./chunk-RGPNNEPX.js";
10
+ } from "./chunk-46BS77ZZ.js";
11
11
 
12
12
  // src/deploy-actors.ts
13
13
  var DEFAULT_WORKER_SURI = DEFAULT_MNEMONIC;
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-GRPLHUYC.js";
4
4
  import {
5
5
  DOT_DAPP_ID
6
- } from "./chunk-54KV6TLM.js";
6
+ } from "./chunk-P7MXONT2.js";
7
7
 
8
8
  // src/sss-allowance-cache.ts
9
9
  import { mkdir, readFile, writeFile, unlink } from "fs/promises";
@@ -7,15 +7,15 @@ import {
7
7
  resolveDotnsConnectOptions,
8
8
  storeDirectory,
9
9
  storeFile
10
- } from "./chunk-IOBSHARJ.js";
10
+ } from "./chunk-PEJQIIGR.js";
11
11
  import {
12
12
  DotNS
13
- } from "./chunk-RGPNNEPX.js";
13
+ } from "./chunk-46BS77ZZ.js";
14
14
  import {
15
15
  getPopSelfServeConfig,
16
16
  loadEnvironments,
17
17
  resolveEndpoints
18
- } from "./chunk-PYCUFN2I.js";
18
+ } from "./chunk-3ZEMX4WD.js";
19
19
  import {
20
20
  NonRetryableError
21
21
  } from "./chunk-ZOC4GITL.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  package_default,
3
3
  writeRunState
4
- } from "./chunk-ZJFBWLNE.js";
4
+ } from "./chunk-XIMLHQX5.js";
5
5
 
6
6
  // src/memory-report.ts
7
7
  import * as fs2 from "fs";
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-TSPERKUS.js";
4
4
  import {
5
5
  VERSION
6
- } from "./chunk-E6EQ27PD.js";
6
+ } from "./chunk-MYQO2UNZ.js";
7
7
  import {
8
8
  loadEnvironments
9
- } from "./chunk-PYCUFN2I.js";
9
+ } from "./chunk-3ZEMX4WD.js";
10
10
 
11
11
  // src/auth-config.ts
12
12
  import { existsSync, readdirSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  preflightSssAllowance
3
- } from "./chunk-KLRDACMI.js";
3
+ } from "./chunk-G7Y7QZIE.js";
4
4
  import {
5
5
  statementSigningAccount
6
6
  } from "./chunk-GRPLHUYC.js";
@@ -31,18 +31,18 @@ import {
31
31
  } from "./chunk-S7EM5VMW.js";
32
32
  import {
33
33
  setDeployContext
34
- } from "./chunk-VBGFBY5L.js";
34
+ } from "./chunk-A33TZ7T6.js";
35
35
  import {
36
36
  getBestBlockNumber,
37
37
  probeChunks,
38
38
  probeFinalityGap
39
- } from "./chunk-SYDD2DHJ.js";
39
+ } from "./chunk-PMYMVWFT.js";
40
40
  import {
41
41
  packSection
42
42
  } from "./chunk-C2TS5MER.js";
43
43
  import {
44
44
  resolveStorageSigner
45
- } from "./chunk-CEHA7IPP.js";
45
+ } from "./chunk-DPSGCV2F.js";
46
46
  import {
47
47
  createSlotAccountSigner,
48
48
  requestResourceAllocation
@@ -51,7 +51,7 @@ import {
51
51
  STALE_SESSION_MESSAGE,
52
52
  getPeopleChainEndpoints,
53
53
  hasPersistedSession
54
- } from "./chunk-54KV6TLM.js";
54
+ } from "./chunk-P7MXONT2.js";
55
55
  import {
56
56
  CLI_NAME
57
57
  } from "./chunk-TSPERKUS.js";
@@ -64,7 +64,7 @@ import {
64
64
  parseDomainName,
65
65
  popStatusName,
66
66
  verifyNonceAdvanced
67
- } from "./chunk-RGPNNEPX.js";
67
+ } from "./chunk-46BS77ZZ.js";
68
68
  import {
69
69
  derivePoolAccounts,
70
70
  detectTestnet,
@@ -86,13 +86,13 @@ import {
86
86
  truncateAddress,
87
87
  withDeploySpan,
88
88
  withSpan
89
- } from "./chunk-E6EQ27PD.js";
89
+ } from "./chunk-MYQO2UNZ.js";
90
90
  import {
91
91
  DEFAULT_ENV_ID,
92
92
  getPopSelfServeConfig,
93
93
  loadEnvironments,
94
94
  resolveEndpoints
95
- } from "./chunk-PYCUFN2I.js";
95
+ } from "./chunk-3ZEMX4WD.js";
96
96
  import {
97
97
  NonRetryableError
98
98
  } from "./chunk-ZOC4GITL.js";
@@ -641,6 +641,9 @@ function __selectStorageProviderModeForTest(options) {
641
641
  if (options.mnemonic) return "direct";
642
642
  return "pool";
643
643
  }
644
+ function resolveEffectiveMnemonic(opts) {
645
+ return opts.flagMnemonic ?? opts.envMnemonic ?? opts.envDotnsMnemonic;
646
+ }
644
647
  function chooseSignerInput(opts) {
645
648
  if (opts.mnemonic) return "mnemonic";
646
649
  if (opts.hasInjectedSigner) return "injected";
@@ -2038,8 +2041,9 @@ async function unpublish(domainName, options = {}) {
2038
2041
  }
2039
2042
  }
2040
2043
  }
2041
- function browserUrlFor(name, envId) {
2042
- const base = `https://${name}.dot.li`;
2044
+ function browserUrlFor(name, envId, webGateway) {
2045
+ const host = webGateway ?? "dot.li";
2046
+ const base = `https://${name}.${host}`;
2043
2047
  return envId === "preview" ? `${base}?network=previewnet` : base;
2044
2048
  }
2045
2049
  function interpretBitswapResult(outcome) {
@@ -2088,6 +2092,7 @@ async function deploy(content, domainName = null, options = {}) {
2088
2092
  let envNetwork;
2089
2093
  let envName;
2090
2094
  let envIpfs;
2095
+ let envWebGateway;
2091
2096
  let envAutoAccountMapping = false;
2092
2097
  let envContracts = {};
2093
2098
  let envNativeToEthRatio;
@@ -2107,6 +2112,7 @@ async function deploy(content, domainName = null, options = {}) {
2107
2112
  envNetwork = resolved.network;
2108
2113
  envName = resolved.envName;
2109
2114
  envIpfs = resolved.ipfs;
2115
+ envWebGateway = resolved.webGateway;
2110
2116
  envAutoAccountMapping = resolved.autoAccountMapping;
2111
2117
  envContracts = resolved.contracts;
2112
2118
  envNativeToEthRatio = resolved.nativeToEthRatio;
@@ -2135,6 +2141,9 @@ async function deploy(content, domainName = null, options = {}) {
2135
2141
  hasInjectedSigner: !!(options.signer && options.signerAddress),
2136
2142
  hasSession
2137
2143
  });
2144
+ if (signerChoice === "mnemonic" && hasSession) {
2145
+ console.error("Using the provided mnemonic; the persisted login session will be ignored for this deploy.");
2146
+ }
2138
2147
  let resolvedUserSession = void 0;
2139
2148
  if (signerChoice === "resolve") {
2140
2149
  const { resolveDeployActors } = await import("./deploy-actors.js");
@@ -2673,7 +2682,7 @@ async function deploy(content, domainName = null, options = {}) {
2673
2682
  console.log("DEPLOYMENT COMPLETE!");
2674
2683
  console.log("=".repeat(60));
2675
2684
  console.log("\nCheck it out here:");
2676
- console.log(` ${browserUrlFor(name, envId)}`);
2685
+ console.log(` ${browserUrlFor(name, envId, envWebGateway)}`);
2677
2686
  console.log(` ${name}.dot (in a Polkadot app: mobile or desktop)`);
2678
2687
  console.log("\n" + "=".repeat(60) + "\n");
2679
2688
  return { domainName: name, fullDomain: `${name}.dot`, cid, ipfsCid };
@@ -3127,6 +3136,7 @@ export {
3127
3136
  ENCRYPT_PBKDF2_ITERATIONS,
3128
3137
  encryptContent,
3129
3138
  __selectStorageProviderModeForTest,
3139
+ resolveEffectiveMnemonic,
3130
3140
  chooseSignerInput,
3131
3141
  isPhoneSignerActive,
3132
3142
  shouldHandoverName,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  captureWarning
3
- } from "./chunk-E6EQ27PD.js";
3
+ } from "./chunk-MYQO2UNZ.js";
4
4
 
5
5
  // src/chunk-probe.ts
6
6
  import { Twox128, Blake2128Concat, decAnyMetadata, unifyMetadata } from "@polkadot-api/substrate-bindings";
@@ -6,7 +6,7 @@ import * as path from "path";
6
6
  // package.json
7
7
  var package_default = {
8
8
  name: "bulletin-deploy",
9
- version: "0.13.1",
9
+ version: "0.13.2-rc.2",
10
10
  private: false,
11
11
  repository: {
12
12
  type: "git",
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-E6EQ27PD.js";
3
+ } from "./chunk-MYQO2UNZ.js";
4
4
 
5
5
  // src/version-check.ts
6
6
  import { execSync, execFileSync } from "child_process";
@@ -8,9 +8,9 @@ import {
8
8
  getBestBlockNumber,
9
9
  probeChunks,
10
10
  probeFinalityGap
11
- } from "./chunk-SYDD2DHJ.js";
12
- import "./chunk-E6EQ27PD.js";
13
- import "./chunk-ZJFBWLNE.js";
11
+ } from "./chunk-PMYMVWFT.js";
12
+ import "./chunk-MYQO2UNZ.js";
13
+ import "./chunk-XIMLHQX5.js";
14
14
  export {
15
15
  ChainProbeCrossValidationError,
16
16
  ChainProbeMetadataError,
@@ -3,10 +3,10 @@ import {
3
3
  } from "../chunk-J7CYVTAW.js";
4
4
  import {
5
5
  waitForBulletinAuthorization
6
- } from "../chunk-IOBSHARJ.js";
6
+ } from "../chunk-PEJQIIGR.js";
7
7
  import {
8
8
  preflightSssAllowance
9
- } from "../chunk-KLRDACMI.js";
9
+ } from "../chunk-G7Y7QZIE.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-VBGFBY5L.js";
19
- import "../chunk-H6RP4NTZ.js";
20
- import "../chunk-SYDD2DHJ.js";
18
+ import "../chunk-A33TZ7T6.js";
19
+ import "../chunk-XOVXFR6G.js";
20
+ import "../chunk-PMYMVWFT.js";
21
21
  import "../chunk-C2TS5MER.js";
22
- import "../chunk-CEHA7IPP.js";
22
+ import "../chunk-DPSGCV2F.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-54KV6TLM.js";
39
+ } from "../chunk-P7MXONT2.js";
40
40
  import {
41
41
  CLI_NAME
42
42
  } from "../chunk-TSPERKUS.js";
43
- import "../chunk-RGPNNEPX.js";
43
+ import "../chunk-46BS77ZZ.js";
44
44
  import "../chunk-SI2ZUOYD.js";
45
45
  import "../chunk-4AEFFDHP.js";
46
- import "../chunk-E6EQ27PD.js";
47
- import "../chunk-ZJFBWLNE.js";
46
+ import "../chunk-MYQO2UNZ.js";
47
+ import "../chunk-XIMLHQX5.js";
48
48
  import {
49
49
  loadEnvironments
50
- } from "../chunk-PYCUFN2I.js";
50
+ } from "../chunk-3ZEMX4WD.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-KLRDACMI.js";
3
+ } from "../chunk-G7Y7QZIE.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-54KV6TLM.js";
12
+ } from "../chunk-P7MXONT2.js";
13
13
  import "../chunk-TSPERKUS.js";
14
- import "../chunk-E6EQ27PD.js";
15
- import "../chunk-ZJFBWLNE.js";
16
- import "../chunk-PYCUFN2I.js";
14
+ import "../chunk-MYQO2UNZ.js";
15
+ import "../chunk-XIMLHQX5.js";
16
+ import "../chunk-3ZEMX4WD.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-RGPNNEPX.js";
7
+ } from "../chunk-46BS77ZZ.js";
8
8
  import "../chunk-SI2ZUOYD.js";
9
9
  import "../chunk-4AEFFDHP.js";
10
- import "../chunk-E6EQ27PD.js";
11
- import "../chunk-ZJFBWLNE.js";
10
+ import "../chunk-MYQO2UNZ.js";
11
+ import "../chunk-XIMLHQX5.js";
12
12
  import {
13
13
  getPopSelfServeConfig,
14
14
  loadEnvironments,
15
15
  resolveEndpoints
16
- } from "../chunk-PYCUFN2I.js";
16
+ } from "../chunk-3ZEMX4WD.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-54KV6TLM.js";
5
+ } from "../chunk-P7MXONT2.js";
6
6
  import {
7
7
  CLI_NAME
8
8
  } from "../chunk-TSPERKUS.js";
9
- import "../chunk-E6EQ27PD.js";
10
- import "../chunk-ZJFBWLNE.js";
11
- import "../chunk-PYCUFN2I.js";
9
+ import "../chunk-MYQO2UNZ.js";
10
+ import "../chunk-XIMLHQX5.js";
11
+ import "../chunk-3ZEMX4WD.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-CEHA7IPP.js";
5
+ } from "./chunk-DPSGCV2F.js";
6
6
  import "./chunk-JQKKMUCT.js";
7
7
  import "./chunk-5FLTDWWP.js";
8
8
  import "./chunk-RIRDBSBG.js";
9
- import "./chunk-54KV6TLM.js";
9
+ import "./chunk-P7MXONT2.js";
10
10
  import "./chunk-TSPERKUS.js";
11
- import "./chunk-RGPNNEPX.js";
11
+ import "./chunk-46BS77ZZ.js";
12
12
  import "./chunk-SI2ZUOYD.js";
13
13
  import "./chunk-4AEFFDHP.js";
14
- import "./chunk-E6EQ27PD.js";
15
- import "./chunk-ZJFBWLNE.js";
16
- import "./chunk-PYCUFN2I.js";
14
+ import "./chunk-MYQO2UNZ.js";
15
+ import "./chunk-XIMLHQX5.js";
16
+ import "./chunk-3ZEMX4WD.js";
17
17
  import "./chunk-ZOC4GITL.js";
18
18
  export {
19
19
  MainnetDefaultWorkerError,
package/dist/deploy.d.ts CHANGED
@@ -103,6 +103,21 @@ declare const ENCRYPT_PBKDF2_ITERATIONS = 100000;
103
103
  declare function encryptContent(data: Uint8Array, password: string): Promise<Uint8Array>;
104
104
  /** storageSigner > signer > mnemonic > pool precedence for storage routing. Exported for unit testing. */
105
105
  declare function __selectStorageProviderModeForTest(options: Pick<DeployOptions, "storageSigner" | "storageSignerAddress" | "signer" | "signerAddress" | "mnemonic">): "storageSigner" | "signer" | "direct" | "pool";
106
+ /**
107
+ * Resolve the mnemonic the CLI should act with, in precedence order:
108
+ * `--mnemonic` flag > `MNEMONIC` env var > `DOTNS_MNEMONIC` env var.
109
+ *
110
+ * Exists so the bin's flag/env resolution is unit-testable and so the two
111
+ * env vars are forwarded consistently (issue #1107: previously the bin only
112
+ * forwarded `flags.mnemonic` into `options.mnemonic`, so an env-only mnemonic
113
+ * never reached `chooseSignerInput` and a persisted session silently won
114
+ * instead — even though `chooseSignerInput` already prefers mnemonic first).
115
+ */
116
+ declare function resolveEffectiveMnemonic(opts: {
117
+ flagMnemonic: string | undefined;
118
+ envMnemonic: string | undefined;
119
+ envDotnsMnemonic: string | undefined;
120
+ }): string | undefined;
106
121
  /**
107
122
  * Decide how to source the signer for a deploy invocation. Exported for unit testing.
108
123
  *
@@ -470,14 +485,21 @@ declare function unpublish(domainName: string, options?: {
470
485
  txHash?: string;
471
486
  }>;
472
487
  /**
473
- * Returns the dot.li browser URL for the given domain name, optionally
474
- * suffixed with a network query parameter so the SPA opens the right chain.
488
+ * Returns the browser URL for the given domain name, optionally suffixed
489
+ * with a network query parameter so the SPA opens the right chain.
475
490
  * Currently only the "preview" env needs a suffix — the SPA defaults to
476
491
  * paseo-next-v2 which would show "no content" for preview deployments.
492
+ *
493
+ * The gateway host defaults to "dot.li" (issue #142: devnet-family names are
494
+ * NOT resolvable via dot.li — they're served by a different gateway, e.g.
495
+ * "dev-dot.li" — so callers must pass the resolved env's `webGateway` when
496
+ * one is set; otherwise the link loads but resolves the name against the
497
+ * wrong network).
477
498
  * @param name - the DotNS label (e.g. "myapp")
478
499
  * @param envId - the environment id from options.env ?? DEFAULT_ENV_ID
500
+ * @param webGateway - the resolved env's `webGateway`, if any (defaults to "dot.li")
479
501
  */
480
- declare function browserUrlFor(name: string, envId: string | undefined): string;
502
+ declare function browserUrlFor(name: string, envId: string | undefined, webGateway?: string): string;
481
503
  type BitswapErrorVariant = "none" | "not_found" | "timeout" | "error";
482
504
  interface BitswapProbeResult {
483
505
  retrievable: boolean;
@@ -518,4 +540,4 @@ declare function computePhoneSigningSteps(dotnsPreflight: {
518
540
  needsPopUpgrade: boolean;
519
541
  } | null, publishNeeded: boolean): string[];
520
542
 
521
- 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, __waitForChainLivenessForTest, applyManifestFetchAttributes, assertSubdomainOwnerMatchesSigner, browserUrlFor, buildFilesMap, checkDeploySize, chooseSignerInput, chunk, computePhoneSigningSteps, computeStorageCid, createCID, deploy, deriveRootSigner, describeSlotFallbackReason, detectFramework, encodeContenthash, encryptContent, estimateUploadBytes, formatStorageSignerLine, formatTransferModeDotnsLine, formatTransferModeStorageSignerLine, friendlyChainError, hasIPFS, interpretBitswapResult, isBenignTeardownError, isConnectionError, isPhoneSignerActive, makeBulletinStatusHandler, merkleize, probeP2pRetrieval, reconcileTimedOutChunk, resolveDotnsConnectOptions, resolveReproducibleTimestamp, retryBudgetExhausted, setWsHaltCallback, shouldHandoverName, storeChunkedContent, storeDirectory, storeDirectoryV2, storeFile, unpublish };
543
+ 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, __waitForChainLivenessForTest, applyManifestFetchAttributes, assertSubdomainOwnerMatchesSigner, browserUrlFor, buildFilesMap, checkDeploySize, chooseSignerInput, chunk, computePhoneSigningSteps, computeStorageCid, createCID, deploy, deriveRootSigner, describeSlotFallbackReason, detectFramework, encodeContenthash, encryptContent, estimateUploadBytes, formatStorageSignerLine, formatTransferModeDotnsLine, formatTransferModeStorageSignerLine, friendlyChainError, hasIPFS, interpretBitswapResult, isBenignTeardownError, isConnectionError, isPhoneSignerActive, makeBulletinStatusHandler, merkleize, probeP2pRetrieval, reconcileTimedOutChunk, resolveDotnsConnectOptions, resolveEffectiveMnemonic, resolveReproducibleTimestamp, retryBudgetExhausted, setWsHaltCallback, shouldHandoverName, storeChunkedContent, storeDirectory, storeDirectoryV2, storeFile, unpublish };
package/dist/deploy.js CHANGED
@@ -46,6 +46,7 @@ import {
46
46
  probeP2pRetrieval,
47
47
  reconcileTimedOutChunk,
48
48
  resolveDotnsConnectOptions,
49
+ resolveEffectiveMnemonic,
49
50
  resolveReproducibleTimestamp,
50
51
  retryBudgetExhausted,
51
52
  setWsHaltCallback,
@@ -55,30 +56,30 @@ import {
55
56
  storeDirectoryV2,
56
57
  storeFile,
57
58
  unpublish
58
- } from "./chunk-IOBSHARJ.js";
59
- import "./chunk-KLRDACMI.js";
59
+ } from "./chunk-PEJQIIGR.js";
60
+ import "./chunk-G7Y7QZIE.js";
60
61
  import "./chunk-GRPLHUYC.js";
61
62
  import "./chunk-HOTQDYHD.js";
62
63
  import "./chunk-IW3X2MJF.js";
63
64
  import "./chunk-KOSF5FDO.js";
64
65
  import "./chunk-J3NIXHZZ.js";
65
66
  import "./chunk-S7EM5VMW.js";
66
- import "./chunk-VBGFBY5L.js";
67
- import "./chunk-H6RP4NTZ.js";
68
- import "./chunk-SYDD2DHJ.js";
67
+ import "./chunk-A33TZ7T6.js";
68
+ import "./chunk-XOVXFR6G.js";
69
+ import "./chunk-PMYMVWFT.js";
69
70
  import "./chunk-C2TS5MER.js";
70
- import "./chunk-CEHA7IPP.js";
71
+ import "./chunk-DPSGCV2F.js";
71
72
  import "./chunk-JQKKMUCT.js";
72
73
  import "./chunk-5FLTDWWP.js";
73
74
  import "./chunk-RIRDBSBG.js";
74
- import "./chunk-54KV6TLM.js";
75
+ import "./chunk-P7MXONT2.js";
75
76
  import "./chunk-TSPERKUS.js";
76
- import "./chunk-RGPNNEPX.js";
77
+ import "./chunk-46BS77ZZ.js";
77
78
  import "./chunk-SI2ZUOYD.js";
78
79
  import "./chunk-4AEFFDHP.js";
79
- import "./chunk-E6EQ27PD.js";
80
- import "./chunk-ZJFBWLNE.js";
81
- import "./chunk-PYCUFN2I.js";
80
+ import "./chunk-MYQO2UNZ.js";
81
+ import "./chunk-XIMLHQX5.js";
82
+ import "./chunk-3ZEMX4WD.js";
82
83
  import {
83
84
  EXIT_CODE_NO_RETRY,
84
85
  NonRetryableError
@@ -133,6 +134,7 @@ export {
133
134
  probeP2pRetrieval,
134
135
  reconcileTimedOutChunk,
135
136
  resolveDotnsConnectOptions,
137
+ resolveEffectiveMnemonic,
136
138
  resolveReproducibleTimestamp,
137
139
  retryBudgetExhausted,
138
140
  setWsHaltCallback,
package/dist/dotns.d.ts CHANGED
@@ -253,6 +253,46 @@ declare function verifyNonceAdvanced(endpoints: string[], ss58Address: string, o
253
253
  } | {
254
254
  advanced: false;
255
255
  }>;
256
+ declare function nonceContentionBackoffMs(attempt: number, rand?: () => number): number;
257
+ declare const DOTNS_NONCE_CONTENTION_MAX_ATTEMPTS: number;
258
+ declare function isNonceContentionAmbiguous(err: unknown): boolean;
259
+ /**
260
+ * #1158: bounded nonce re-acquisition for the ambiguous nonce-advance-fallback
261
+ * case on the zero-config write path, where concurrent deploys share ONE Asset
262
+ * Hub nonce space (the bare default signer, no derivation). When a sibling
263
+ * deploy's tx consumes the nonce slot our own tx was built against,
264
+ * `resubmit()` rejects with the ambiguous message (nonce advanced, but our
265
+ * effect isn't observable) instead of resolving. The old code fell through to
266
+ * signAndSubmitWithRetry's general retry loop, which reused the SAME stale
267
+ * nonceFallback.expectedNonce on every attempt — so the very next attempt's
268
+ * first poll tick saw "nonce already > (still-stale) N" and rejected again
269
+ * near-instantly, before its own freshly-submitted tx had any chance to land.
270
+ * That thrashing is the real #1158 repro.
271
+ *
272
+ * Fix: re-fetch the LIVE account nonce (never the stale expectedNonce a prior
273
+ * attempt was built against) so the next resubmit has a real chance to land,
274
+ * wait a short jittered backoff so concurrent siblings de-sync rather than
275
+ * lock-stepping onto the same slot again, and bound the whole thing to
276
+ * `maxAttempts` so a genuinely unlandable write fails FAST with a clear,
277
+ * actionable terminal error.
278
+ *
279
+ * `resubmit` is a full rebuild+sign+watch cycle — its own outcome already
280
+ * encodes the nonce-advance detection + verifyEffectWithGrace re-polls, so
281
+ * this function only decides whether/how to retry it; it never re-implements
282
+ * that detection. A resubmit failure that is NOT the ambiguous case (e.g. a
283
+ * websocket blip) is rethrown as-is — folding a genuinely different failure
284
+ * into the contention loop's own message would mask the real cause.
285
+ */
286
+ declare function reacquireNonceOnContention(resubmit: () => Promise<TxResolution>, nonceFallback: {
287
+ rpcs: string[];
288
+ senderSS58: string;
289
+ expectedNonce: number;
290
+ }, label: string, opts?: {
291
+ fetchNonce?: (rpcs: string[], ss58: string) => Promise<number>;
292
+ sleep?: (ms: number) => Promise<void>;
293
+ backoffMs?: (attempt: number) => number;
294
+ maxAttempts?: number;
295
+ }): Promise<TxResolution>;
256
296
  declare const ProofOfPersonhoodStatus: {
257
297
  readonly NoStatus: 0;
258
298
  readonly ProofOfPersonhoodLite: 1;
@@ -407,6 +447,9 @@ declare class ReviveClientWrapper {
407
447
  feeAsset?: "pgas";
408
448
  isPhoneSigner?: boolean;
409
449
  onResign?: (attempt: number) => Promise<void>;
450
+ fetchNonce?: (rpcs: string[], ss58: string) => Promise<number>;
451
+ sleep?: (ms: number) => Promise<void>;
452
+ nonceContentionBackoffMs?: (attempt: number) => number;
410
453
  }): Promise<TxResolution>;
411
454
  private dryRunReviveCall;
412
455
  submitTransaction(contractAddress: string, value: bigint, encodedData: string, signerSubstrateAddress: string, signer: PolkadotSigner, statusCallback: (status: string) => void, { rpcs, useNoncePolling, functionName, args, contracts, verifyEffect, feeAsset, isPhoneSigner, onResign }: {
@@ -735,4 +778,4 @@ declare class DotNS {
735
778
  }
736
779
  declare const dotns: DotNS;
737
780
 
738
- export { ATTR_TX_RESOLUTION_KIND, type AliasAccountClassification, type AliasAccountState, CONNECTION_TIMEOUT_MS, CONTENTHASH_VERIFY_ATTEMPTS, CONTRACTS, ContractDryRunRevertError, DECIMALS, DEFAULT_MNEMONIC, DOTNS_BEST_BLOCK_GRACE_MS, DOTNS_TX_MAX_ATTEMPTS, DOT_NODE, DotNS, type DotNSConnectOptions, type DotnsPreflightResult, type DotnsSuccessAction, MINIMUM_REGISTER_STORAGE_DEPOSIT, NATIVE_TO_ETH_RATIO, NONCE_ADVANCE_VERIFY_RETRIES, NONCE_ADVANCE_VERIFY_RETRY_INTERVAL_MS, OPERATION_TIMEOUT_MS, type OwnershipResult, PUBLISHER_ABI, type ParsedDomainName, type PhoneSignatureStep, type PriceValidationResult, ProofOfPersonhoodStatus, PublisherNotSupportedError, REVIVE_ADDRESS_ATTEMPTS, RPC_ENDPOINTS, ReviveClientWrapper, TX_CHAIN_TIME_BUDGET_MS, TX_KIND_BEST_BLOCK, 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, WatcherSilentNoEventError, __formatContractDryRunFailureForTest, bufferedWeiToNative, canRegister, classifyAliasAccountRow, classifyDotnsLabel, classifyTxRetryDecision, classifyWatcherSilentFastFail, computeDomainTokenId, convertToHexString, convertWeiToNative, countTrailingDigits, decodePublisherRevert, dotns, dotnsRetryBackoffMs, feeFloorFor, fetchNonce, fmtPas, formatDispatchError, formatPersonhoodRemediation, formatPopShortfallReason, isCommitmentMature, isCommitmentTimingBarerevert, makeRetryStatusFilter, parseDomainName, parseProofOfPersonhoodStatus, pickVerifyEndpoint, popStatusName, registerDepositWei, sanitizeDomainLabel, shouldRegateBeforeResign, shouldRetryTxAttempt, stripTrailingDigits, validateDomainLabel, verifyEffectWithGrace, verifyNonceAdvanced, weiToNative, withRetry };
781
+ export { ATTR_TX_RESOLUTION_KIND, type AliasAccountClassification, type AliasAccountState, CONNECTION_TIMEOUT_MS, CONTENTHASH_VERIFY_ATTEMPTS, CONTRACTS, ContractDryRunRevertError, DECIMALS, DEFAULT_MNEMONIC, DOTNS_BEST_BLOCK_GRACE_MS, DOTNS_NONCE_CONTENTION_MAX_ATTEMPTS, DOTNS_TX_MAX_ATTEMPTS, DOT_NODE, DotNS, type DotNSConnectOptions, type DotnsPreflightResult, type DotnsSuccessAction, MINIMUM_REGISTER_STORAGE_DEPOSIT, NATIVE_TO_ETH_RATIO, NONCE_ADVANCE_VERIFY_RETRIES, NONCE_ADVANCE_VERIFY_RETRY_INTERVAL_MS, OPERATION_TIMEOUT_MS, type OwnershipResult, PUBLISHER_ABI, type ParsedDomainName, type PhoneSignatureStep, type PriceValidationResult, ProofOfPersonhoodStatus, PublisherNotSupportedError, REVIVE_ADDRESS_ATTEMPTS, RPC_ENDPOINTS, ReviveClientWrapper, TX_CHAIN_TIME_BUDGET_MS, TX_KIND_BEST_BLOCK, 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, WatcherSilentNoEventError, __formatContractDryRunFailureForTest, bufferedWeiToNative, canRegister, classifyAliasAccountRow, classifyDotnsLabel, classifyTxRetryDecision, classifyWatcherSilentFastFail, computeDomainTokenId, convertToHexString, convertWeiToNative, countTrailingDigits, decodePublisherRevert, dotns, dotnsRetryBackoffMs, feeFloorFor, fetchNonce, fmtPas, formatDispatchError, formatPersonhoodRemediation, formatPopShortfallReason, isCommitmentMature, isCommitmentTimingBarerevert, isNonceContentionAmbiguous, makeRetryStatusFilter, nonceContentionBackoffMs, parseDomainName, parseProofOfPersonhoodStatus, pickVerifyEndpoint, popStatusName, reacquireNonceOnContention, registerDepositWei, sanitizeDomainLabel, shouldRegateBeforeResign, shouldRetryTxAttempt, stripTrailingDigits, validateDomainLabel, verifyEffectWithGrace, verifyNonceAdvanced, weiToNative, withRetry };
package/dist/dotns.js CHANGED
@@ -7,6 +7,7 @@ import {
7
7
  DECIMALS,
8
8
  DEFAULT_MNEMONIC,
9
9
  DOTNS_BEST_BLOCK_GRACE_MS,
10
+ DOTNS_NONCE_CONTENTION_MAX_ATTEMPTS,
10
11
  DOTNS_TX_MAX_ATTEMPTS,
11
12
  DOT_NODE,
12
13
  DotNS,
@@ -53,11 +54,14 @@ import {
53
54
  formatPopShortfallReason,
54
55
  isCommitmentMature,
55
56
  isCommitmentTimingBarerevert,
57
+ isNonceContentionAmbiguous,
56
58
  makeRetryStatusFilter,
59
+ nonceContentionBackoffMs,
57
60
  parseDomainName,
58
61
  parseProofOfPersonhoodStatus,
59
62
  pickVerifyEndpoint,
60
63
  popStatusName,
64
+ reacquireNonceOnContention,
61
65
  registerDepositWei,
62
66
  sanitizeDomainLabel,
63
67
  shouldRegateBeforeResign,
@@ -68,12 +72,12 @@ import {
68
72
  verifyNonceAdvanced,
69
73
  weiToNative,
70
74
  withRetry
71
- } from "./chunk-RGPNNEPX.js";
75
+ } from "./chunk-46BS77ZZ.js";
72
76
  import "./chunk-SI2ZUOYD.js";
73
77
  import "./chunk-4AEFFDHP.js";
74
- import "./chunk-E6EQ27PD.js";
75
- import "./chunk-ZJFBWLNE.js";
76
- import "./chunk-PYCUFN2I.js";
78
+ import "./chunk-MYQO2UNZ.js";
79
+ import "./chunk-XIMLHQX5.js";
80
+ import "./chunk-3ZEMX4WD.js";
77
81
  import "./chunk-ZOC4GITL.js";
78
82
  export {
79
83
  ATTR_TX_RESOLUTION_KIND,
@@ -84,6 +88,7 @@ export {
84
88
  DECIMALS,
85
89
  DEFAULT_MNEMONIC,
86
90
  DOTNS_BEST_BLOCK_GRACE_MS,
91
+ DOTNS_NONCE_CONTENTION_MAX_ATTEMPTS,
87
92
  DOTNS_TX_MAX_ATTEMPTS,
88
93
  DOT_NODE,
89
94
  DotNS,
@@ -130,11 +135,14 @@ export {
130
135
  formatPopShortfallReason,
131
136
  isCommitmentMature,
132
137
  isCommitmentTimingBarerevert,
138
+ isNonceContentionAmbiguous,
133
139
  makeRetryStatusFilter,
140
+ nonceContentionBackoffMs,
134
141
  parseDomainName,
135
142
  parseProofOfPersonhoodStatus,
136
143
  pickVerifyEndpoint,
137
144
  popStatusName,
145
+ reacquireNonceOnContention,
138
146
  registerDepositWei,
139
147
  sanitizeDomainLabel,
140
148
  shouldRegateBeforeResign,
@@ -23,6 +23,13 @@ interface Environment {
23
23
  badge?: string;
24
24
  backend?: string;
25
25
  ipfs?: string;
26
+ /**
27
+ * Host serving the browser SPA that resolves DotNS names for this env
28
+ * (issue #142). Defaults to "dot.li" when omitted — set this only when an
29
+ * env's names are NOT resolvable via the default gateway (e.g. devnet-family
30
+ * envs, which are served by "dev-dot.li").
31
+ */
32
+ webGateway?: string;
26
33
  uptimeUrl?: string;
27
34
  autoAccountMapping?: boolean;
28
35
  nativeToEthRatio?: number;
@@ -63,6 +70,7 @@ interface ResolvedEndpoints {
63
70
  network: "testnet" | "mainnet";
64
71
  envName: string;
65
72
  ipfs?: string;
73
+ webGateway?: string;
66
74
  autoAccountMapping: boolean;
67
75
  contracts: Record<string, string>;
68
76
  nativeToEthRatio: bigint;
@@ -9,7 +9,7 @@ import {
9
9
  loadEnvironments,
10
10
  resolveEndpoints,
11
11
  validateContractAddresses
12
- } from "./chunk-PYCUFN2I.js";
12
+ } from "./chunk-3ZEMX4WD.js";
13
13
  import "./chunk-ZOC4GITL.js";
14
14
  export {
15
15
  DEFAULT_ENV_ID,
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-362JEZKM.js";
5
5
  import {
6
6
  publishManifest
7
- } from "./chunk-QFXYMMGX.js";
7
+ } from "./chunk-IELQ4GO6.js";
8
8
  import {
9
9
  DEFAULT_TEXT_RECORD_BUDGET_BYTES,
10
10
  PLACEHOLDER_CID,
@@ -24,8 +24,8 @@ import {
24
24
  deploy,
25
25
  merkleizeJS,
26
26
  merkleizeWithStableOrder
27
- } from "./chunk-IOBSHARJ.js";
28
- import "./chunk-KLRDACMI.js";
27
+ } from "./chunk-PEJQIIGR.js";
28
+ import "./chunk-G7Y7QZIE.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-VBGFBY5L.js";
53
- import "./chunk-H6RP4NTZ.js";
52
+ import "./chunk-A33TZ7T6.js";
53
+ import "./chunk-XOVXFR6G.js";
54
54
  import {
55
55
  probeChunks
56
- } from "./chunk-SYDD2DHJ.js";
56
+ } from "./chunk-PMYMVWFT.js";
57
57
  import "./chunk-C2TS5MER.js";
58
- import "./chunk-CEHA7IPP.js";
58
+ import "./chunk-DPSGCV2F.js";
59
59
  import "./chunk-JQKKMUCT.js";
60
60
  import "./chunk-5FLTDWWP.js";
61
61
  import "./chunk-RIRDBSBG.js";
62
- import "./chunk-54KV6TLM.js";
62
+ import "./chunk-P7MXONT2.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-RGPNNEPX.js";
69
+ } from "./chunk-46BS77ZZ.js";
70
70
  import "./chunk-SI2ZUOYD.js";
71
71
  import {
72
72
  BULLETIN_BLOCKS_PER_DAY,
@@ -82,7 +82,7 @@ import {
82
82
  poolAccountDerivationPath,
83
83
  selectAccount
84
84
  } from "./chunk-4AEFFDHP.js";
85
- import "./chunk-E6EQ27PD.js";
85
+ import "./chunk-MYQO2UNZ.js";
86
86
  import {
87
87
  VERSION,
88
88
  loadRunState,
@@ -92,7 +92,7 @@ import {
92
92
  shouldSkipStaleWarning,
93
93
  stateFilePath,
94
94
  writeRunState
95
- } from "./chunk-ZJFBWLNE.js";
95
+ } from "./chunk-XIMLHQX5.js";
96
96
  import {
97
97
  DEFAULT_ENV_ID,
98
98
  deepMergeEnvironments,
@@ -103,7 +103,7 @@ import {
103
103
  loadEnvironments,
104
104
  resolveEndpoints,
105
105
  validateContractAddresses
106
- } from "./chunk-PYCUFN2I.js";
106
+ } from "./chunk-3ZEMX4WD.js";
107
107
  import {
108
108
  NonRetryableError
109
109
  } from "./chunk-ZOC4GITL.js";
@@ -1,31 +1,31 @@
1
1
  import {
2
2
  publishManifest
3
- } from "../chunk-QFXYMMGX.js";
3
+ } from "../chunk-IELQ4GO6.js";
4
4
  import "../chunk-WIMRJK32.js";
5
- import "../chunk-IOBSHARJ.js";
6
- import "../chunk-KLRDACMI.js";
5
+ import "../chunk-PEJQIIGR.js";
6
+ import "../chunk-G7Y7QZIE.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-VBGFBY5L.js";
14
- import "../chunk-H6RP4NTZ.js";
15
- import "../chunk-SYDD2DHJ.js";
13
+ import "../chunk-A33TZ7T6.js";
14
+ import "../chunk-XOVXFR6G.js";
15
+ import "../chunk-PMYMVWFT.js";
16
16
  import "../chunk-C2TS5MER.js";
17
- import "../chunk-CEHA7IPP.js";
17
+ import "../chunk-DPSGCV2F.js";
18
18
  import "../chunk-JQKKMUCT.js";
19
19
  import "../chunk-5FLTDWWP.js";
20
20
  import "../chunk-RIRDBSBG.js";
21
- import "../chunk-54KV6TLM.js";
21
+ import "../chunk-P7MXONT2.js";
22
22
  import "../chunk-TSPERKUS.js";
23
- import "../chunk-RGPNNEPX.js";
23
+ import "../chunk-46BS77ZZ.js";
24
24
  import "../chunk-SI2ZUOYD.js";
25
25
  import "../chunk-4AEFFDHP.js";
26
- import "../chunk-E6EQ27PD.js";
27
- import "../chunk-ZJFBWLNE.js";
28
- import "../chunk-PYCUFN2I.js";
26
+ import "../chunk-MYQO2UNZ.js";
27
+ import "../chunk-XIMLHQX5.js";
28
+ import "../chunk-3ZEMX4WD.js";
29
29
  import "../chunk-ZOC4GITL.js";
30
30
  export {
31
31
  publishManifest
@@ -5,8 +5,8 @@ import {
5
5
  maybeWriteMemoryReport,
6
6
  safeHeap,
7
7
  sampleFromBytes
8
- } from "./chunk-E6EQ27PD.js";
9
- import "./chunk-ZJFBWLNE.js";
8
+ } from "./chunk-MYQO2UNZ.js";
9
+ import "./chunk-XIMLHQX5.js";
10
10
  export {
11
11
  DEFAULT_THRESHOLD_MB,
12
12
  buildMemoryReport,
package/dist/merkle.js CHANGED
@@ -6,30 +6,30 @@ import {
6
6
  merkleizeKuboBackend,
7
7
  merkleizeWithStableOrder,
8
8
  rebuildOrderedCarFromBytes
9
- } from "./chunk-IOBSHARJ.js";
10
- import "./chunk-KLRDACMI.js";
9
+ } from "./chunk-PEJQIIGR.js";
10
+ import "./chunk-G7Y7QZIE.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-VBGFBY5L.js";
18
- import "./chunk-H6RP4NTZ.js";
19
- import "./chunk-SYDD2DHJ.js";
17
+ import "./chunk-A33TZ7T6.js";
18
+ import "./chunk-XOVXFR6G.js";
19
+ import "./chunk-PMYMVWFT.js";
20
20
  import "./chunk-C2TS5MER.js";
21
- import "./chunk-CEHA7IPP.js";
21
+ import "./chunk-DPSGCV2F.js";
22
22
  import "./chunk-JQKKMUCT.js";
23
23
  import "./chunk-5FLTDWWP.js";
24
24
  import "./chunk-RIRDBSBG.js";
25
- import "./chunk-54KV6TLM.js";
25
+ import "./chunk-P7MXONT2.js";
26
26
  import "./chunk-TSPERKUS.js";
27
- import "./chunk-RGPNNEPX.js";
27
+ import "./chunk-46BS77ZZ.js";
28
28
  import "./chunk-SI2ZUOYD.js";
29
29
  import "./chunk-4AEFFDHP.js";
30
- import "./chunk-E6EQ27PD.js";
31
- import "./chunk-ZJFBWLNE.js";
32
- import "./chunk-PYCUFN2I.js";
30
+ import "./chunk-MYQO2UNZ.js";
31
+ import "./chunk-XIMLHQX5.js";
32
+ import "./chunk-3ZEMX4WD.js";
33
33
  import "./chunk-ZOC4GITL.js";
34
34
  export {
35
35
  buildOrderedCar,
@@ -21,18 +21,18 @@ import {
21
21
  } from "../chunk-ZYVGHDMU.js";
22
22
  import {
23
23
  WS_HEARTBEAT_TIMEOUT_MS
24
- } from "../chunk-RGPNNEPX.js";
24
+ } from "../chunk-46BS77ZZ.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-4AEFFDHP.js";
31
- import "../chunk-E6EQ27PD.js";
32
- import "../chunk-ZJFBWLNE.js";
31
+ import "../chunk-MYQO2UNZ.js";
32
+ import "../chunk-XIMLHQX5.js";
33
33
  import {
34
34
  loadEnvironments
35
- } from "../chunk-PYCUFN2I.js";
35
+ } from "../chunk-3ZEMX4WD.js";
36
36
  import "../chunk-ZOC4GITL.js";
37
37
 
38
38
  // src/personhood/bootstrap.ts
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  WS_HEARTBEAT_TIMEOUT_MS
3
- } from "../chunk-RGPNNEPX.js";
3
+ } from "../chunk-46BS77ZZ.js";
4
4
  import "../chunk-SI2ZUOYD.js";
5
5
  import "../chunk-4AEFFDHP.js";
6
- import "../chunk-E6EQ27PD.js";
7
- import "../chunk-ZJFBWLNE.js";
6
+ import "../chunk-MYQO2UNZ.js";
7
+ import "../chunk-XIMLHQX5.js";
8
8
  import {
9
9
  loadEnvironments
10
- } from "../chunk-PYCUFN2I.js";
10
+ } from "../chunk-3ZEMX4WD.js";
11
11
  import "../chunk-ZOC4GITL.js";
12
12
 
13
13
  // src/personhood/people-client.ts
package/dist/run-state.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  shouldSkipStaleWarning,
8
8
  stateFilePath,
9
9
  writeRunState
10
- } from "./chunk-ZJFBWLNE.js";
10
+ } from "./chunk-XIMLHQX5.js";
11
11
  export {
12
12
  VERSION,
13
13
  loadRunState,
@@ -4,13 +4,13 @@ import {
4
4
  preflightSssAllowance,
5
5
  sssPeriodEndSec,
6
6
  writeSssAllowanceCache
7
- } from "./chunk-KLRDACMI.js";
7
+ } from "./chunk-G7Y7QZIE.js";
8
8
  import "./chunk-GRPLHUYC.js";
9
- import "./chunk-54KV6TLM.js";
9
+ import "./chunk-P7MXONT2.js";
10
10
  import "./chunk-TSPERKUS.js";
11
- import "./chunk-E6EQ27PD.js";
12
- import "./chunk-ZJFBWLNE.js";
13
- import "./chunk-PYCUFN2I.js";
11
+ import "./chunk-MYQO2UNZ.js";
12
+ import "./chunk-XIMLHQX5.js";
13
+ import "./chunk-3ZEMX4WD.js";
14
14
  import "./chunk-ZOC4GITL.js";
15
15
  export {
16
16
  clearSssAllowanceCache,
@@ -8,30 +8,30 @@ import {
8
8
  waitForBulletinAuthorization,
9
9
  withTransientRetry,
10
10
  writeBulletinSlotKey
11
- } from "./chunk-IOBSHARJ.js";
12
- import "./chunk-KLRDACMI.js";
11
+ } from "./chunk-PEJQIIGR.js";
12
+ import "./chunk-G7Y7QZIE.js";
13
13
  import "./chunk-GRPLHUYC.js";
14
14
  import "./chunk-HOTQDYHD.js";
15
15
  import "./chunk-IW3X2MJF.js";
16
16
  import "./chunk-KOSF5FDO.js";
17
17
  import "./chunk-J3NIXHZZ.js";
18
18
  import "./chunk-S7EM5VMW.js";
19
- import "./chunk-VBGFBY5L.js";
20
- import "./chunk-H6RP4NTZ.js";
21
- import "./chunk-SYDD2DHJ.js";
19
+ import "./chunk-A33TZ7T6.js";
20
+ import "./chunk-XOVXFR6G.js";
21
+ import "./chunk-PMYMVWFT.js";
22
22
  import "./chunk-C2TS5MER.js";
23
- import "./chunk-CEHA7IPP.js";
23
+ import "./chunk-DPSGCV2F.js";
24
24
  import "./chunk-JQKKMUCT.js";
25
25
  import "./chunk-5FLTDWWP.js";
26
26
  import "./chunk-RIRDBSBG.js";
27
- import "./chunk-54KV6TLM.js";
27
+ import "./chunk-P7MXONT2.js";
28
28
  import "./chunk-TSPERKUS.js";
29
- import "./chunk-RGPNNEPX.js";
29
+ import "./chunk-46BS77ZZ.js";
30
30
  import "./chunk-SI2ZUOYD.js";
31
31
  import "./chunk-4AEFFDHP.js";
32
- import "./chunk-E6EQ27PD.js";
33
- import "./chunk-ZJFBWLNE.js";
34
- import "./chunk-PYCUFN2I.js";
32
+ import "./chunk-MYQO2UNZ.js";
33
+ import "./chunk-XIMLHQX5.js";
34
+ import "./chunk-3ZEMX4WD.js";
35
35
  import "./chunk-ZOC4GITL.js";
36
36
  export {
37
37
  BulletinSlotAuthError,
package/dist/telemetry.js CHANGED
@@ -36,8 +36,8 @@ import {
36
36
  truncateAddress,
37
37
  withDeploySpan,
38
38
  withSpan
39
- } from "./chunk-E6EQ27PD.js";
40
- import "./chunk-ZJFBWLNE.js";
39
+ } from "./chunk-MYQO2UNZ.js";
40
+ import "./chunk-XIMLHQX5.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-H6RP4NTZ.js";
15
- import "./chunk-E6EQ27PD.js";
16
- import "./chunk-ZJFBWLNE.js";
14
+ } from "./chunk-XOVXFR6G.js";
15
+ import "./chunk-MYQO2UNZ.js";
16
+ import "./chunk-XIMLHQX5.js";
17
17
  export {
18
18
  assessVersion,
19
19
  checkNodeVersion,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bulletin-deploy",
3
- "version": "0.13.1",
3
+ "version": "0.13.2-rc.2",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",