bulletin-deploy 0.14.1 → 0.14.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 (47) hide show
  1. package/assets/environments.json +3 -0
  2. package/bin/bulletin-bootstrap +7 -0
  3. package/dist/auth-config.js +4 -4
  4. package/dist/bug-report.js +4 -4
  5. package/dist/chain-health.d.ts +139 -0
  6. package/dist/chain-health.js +14 -0
  7. package/dist/{chunk-DAFCH55Q.js → chunk-37AN2MHU.js} +2 -2
  8. package/dist/{chunk-42BNXFWF.js → chunk-6LD3Z2HM.js} +39 -36
  9. package/dist/{chunk-YDV7M3V2.js → chunk-7V4B775S.js} +3 -3
  10. package/dist/{chunk-ALTGYSBJ.js → chunk-CRZSDUWV.js} +1 -1
  11. package/dist/{chunk-AB62NERW.js → chunk-FMQLBYOR.js} +15 -8
  12. package/dist/{chunk-L7DCLCCK.js → chunk-GEHOB4PE.js} +1 -1
  13. package/dist/{chunk-4AEFFDHP.js → chunk-IJUKTHEP.js} +8 -2
  14. package/dist/{chunk-5ZR5L37D.js → chunk-REB37WWY.js} +4 -4
  15. package/dist/{chunk-PQK6XT6Z.js → chunk-RIQWW2BT.js} +8 -8
  16. package/dist/{chunk-5NQHQFMH.js → chunk-T2S5M6OH.js} +1 -1
  17. package/dist/chunk-UDJAYGYU.js +226 -0
  18. package/dist/{chunk-NLRGFZMQ.js → chunk-VH2HNQG2.js} +17 -1
  19. package/dist/{chunk-E6J46GNK.js → chunk-XQHRKK7M.js} +5 -1
  20. package/dist/{chunk-O5TJWVGZ.js → chunk-ZPWTXUA6.js} +7 -6
  21. package/dist/chunk-probe.js +3 -3
  22. package/dist/commands/login.js +13 -12
  23. package/dist/commands/logout.js +5 -5
  24. package/dist/commands/transfer.js +6 -5
  25. package/dist/commands/whoami.js +4 -4
  26. package/dist/deploy-actors.js +8 -7
  27. package/dist/deploy.js +13 -12
  28. package/dist/dotns.d.ts +2 -0
  29. package/dist/dotns.js +6 -5
  30. package/dist/environments.d.ts +2 -0
  31. package/dist/environments.js +1 -1
  32. package/dist/index.js +23 -22
  33. package/dist/manifest/publish.js +14 -13
  34. package/dist/memory-report.js +2 -2
  35. package/dist/merkle.js +13 -12
  36. package/dist/personhood/bootstrap.js +6 -5
  37. package/dist/personhood/people-client.js +6 -5
  38. package/dist/pool.d.ts +2 -0
  39. package/dist/pool.js +1 -1
  40. package/dist/run-state.js +1 -1
  41. package/dist/sss-allowance-cache.js +5 -5
  42. package/dist/storage-signer.js +13 -12
  43. package/dist/telemetry.d.ts +23 -1
  44. package/dist/telemetry.js +4 -2
  45. package/dist/version-check.js +3 -3
  46. package/package.json +7 -6
  47. package/tools/release-retry-wrapper.mjs +7 -0
@@ -0,0 +1,226 @@
1
+ import {
2
+ emitIntervalSpan,
3
+ setDeployAttribute
4
+ } from "./chunk-VH2HNQG2.js";
5
+
6
+ // src/chain-health.ts
7
+ var DEFAULT_WINDOW_BLOCKS = 10;
8
+ var MAX_SPANS_PER_SAMPLER = 60;
9
+ var MAX_TRACKED_BLOCKS = 200;
10
+ function endpointHost(endpoint) {
11
+ try {
12
+ return new URL(endpoint).host;
13
+ } catch {
14
+ return "unknown";
15
+ }
16
+ }
17
+ var ChainHealthSampler = class {
18
+ chainId;
19
+ windowBlocks;
20
+ host = "";
21
+ blocksSub = null;
22
+ finalizedSub = null;
23
+ /** Wall-clock of the block that opened the current window. */
24
+ windowStartMs = null;
25
+ windowStartBlock = null;
26
+ /** blockNumber -> first-seen wall clock, FIFO-evicted at MAX_TRACKED_BLOCKS. */
27
+ firstSeen = /* @__PURE__ */ new Map();
28
+ spansEmitted = 0;
29
+ capReported = false;
30
+ /** Set once a window closes, so exactly one ping is issued per window. */
31
+ pingInFlight = false;
32
+ /**
33
+ * True while `blocks$.subscribe()` is replaying history.
34
+ *
35
+ * papi documents that on subscribe it synchronously emits the latest
36
+ * finalized block and every known descendant. Those arrive microseconds
37
+ * apart, so letting them close a window would report a near-zero elapsed
38
+ * time and mark the chain as impossibly fast — corrupting the exact metric
39
+ * this module exists to produce. Replayed blocks still record first-seen
40
+ * times (finality lag needs them) and still move the window anchor forward,
41
+ * so timing starts from the moment we caught up rather than in stale history.
42
+ */
43
+ inReplay = false;
44
+ constructor(chainId, windowBlocks = DEFAULT_WINDOW_BLOCKS) {
45
+ this.chainId = chainId;
46
+ this.windowBlocks = windowBlocks;
47
+ }
48
+ /**
49
+ * Subscribe to a (re)created client. Safe to call repeatedly — an existing
50
+ * subscription is torn down first. Never throws: a sampler failure must not
51
+ * be able to fail a deploy.
52
+ */
53
+ attach(client, endpoint) {
54
+ try {
55
+ this.detach();
56
+ this.host = endpointHost(endpoint);
57
+ this.inReplay = true;
58
+ try {
59
+ this.blocksSub = client.blocks$.subscribe({
60
+ next: (block) => this.onBlock(client, block),
61
+ // A completed/errored block stream just means no more samples. The
62
+ // deploy itself surfaces connection loss through its own paths.
63
+ error: () => {
64
+ }
65
+ });
66
+ } finally {
67
+ this.inReplay = false;
68
+ }
69
+ this.finalizedSub = client.finalizedBlock$.subscribe({
70
+ next: (block) => this.onFinalized(block),
71
+ error: () => {
72
+ }
73
+ });
74
+ } catch {
75
+ this.blocksSub = null;
76
+ this.finalizedSub = null;
77
+ }
78
+ }
79
+ /** Unsubscribe and drop the partial window. Idempotent. */
80
+ detach() {
81
+ try {
82
+ this.blocksSub?.unsubscribe();
83
+ } catch {
84
+ }
85
+ try {
86
+ this.finalizedSub?.unsubscribe();
87
+ } catch {
88
+ }
89
+ this.blocksSub = null;
90
+ this.finalizedSub = null;
91
+ this.resetWindow();
92
+ }
93
+ /**
94
+ * Detach and reset per-deploy state. Call from the deploy's teardown.
95
+ *
96
+ * Resetting the span budget here (rather than in attach()) is deliberate.
97
+ * attach() also runs on mid-deploy reconnects, where clearing the counter
98
+ * would defeat the cap; stop() runs exactly once per deploy. deploy.ts holds
99
+ * its Bulletin sampler at module scope, so without this a second deploy() in
100
+ * the same process — playground-cli consumes deploy() as a library — would
101
+ * inherit the first deploy's exhausted budget and emit nothing.
102
+ */
103
+ stop() {
104
+ this.detach();
105
+ this.firstSeen.clear();
106
+ this.spansEmitted = 0;
107
+ this.capReported = false;
108
+ }
109
+ /** True while subscribed — used by tests and by re-attach guards. */
110
+ get attached() {
111
+ return this.blocksSub !== null;
112
+ }
113
+ resetWindow() {
114
+ this.windowStartMs = null;
115
+ this.windowStartBlock = null;
116
+ }
117
+ atCap() {
118
+ if (this.spansEmitted < MAX_SPANS_PER_SAMPLER) return false;
119
+ if (!this.capReported) {
120
+ this.capReported = true;
121
+ setDeployAttribute(`chain.health.${this.chainId}.capped`, "true");
122
+ this.detach();
123
+ }
124
+ return true;
125
+ }
126
+ onBlock(client, block) {
127
+ try {
128
+ if (this.atCap()) return;
129
+ const now = Date.now();
130
+ if (!this.firstSeen.has(block.number)) {
131
+ this.firstSeen.set(block.number, now);
132
+ if (this.firstSeen.size > MAX_TRACKED_BLOCKS) {
133
+ const oldest = this.firstSeen.keys().next();
134
+ if (!oldest.done) this.firstSeen.delete(oldest.value);
135
+ }
136
+ }
137
+ if (this.inReplay || this.windowStartMs === null) {
138
+ this.windowStartMs = now;
139
+ this.windowStartBlock = block.number;
140
+ return;
141
+ }
142
+ const advanced = block.number - this.windowStartBlock;
143
+ if (advanced < this.windowBlocks) return;
144
+ emitIntervalSpan(
145
+ "chain.health.block_window",
146
+ `${this.chainId} ${this.windowBlocks}-block window`,
147
+ this.windowStartMs,
148
+ now,
149
+ {
150
+ "chain.health.chain_id": this.chainId,
151
+ "chain.health.endpoint": this.host,
152
+ "chain.health.from_block": this.windowStartBlock,
153
+ "chain.health.to_block": block.number,
154
+ "chain.health.window_blocks": this.windowBlocks
155
+ }
156
+ );
157
+ this.spansEmitted += 1;
158
+ this.windowStartMs = now;
159
+ this.windowStartBlock = block.number;
160
+ void this.ping(client, block.hash);
161
+ } catch {
162
+ }
163
+ }
164
+ onFinalized(block) {
165
+ try {
166
+ if (this.atCap()) return;
167
+ const seenAt = this.firstSeen.get(block.number);
168
+ if (seenAt === void 0) return;
169
+ this.firstSeen.delete(block.number);
170
+ if (block.number % this.windowBlocks !== 0) return;
171
+ emitIntervalSpan(
172
+ "chain.health.finality_lag",
173
+ `${this.chainId} finality lag`,
174
+ seenAt,
175
+ Date.now(),
176
+ {
177
+ "chain.health.chain_id": this.chainId,
178
+ "chain.health.endpoint": this.host,
179
+ "chain.health.block": block.number
180
+ }
181
+ );
182
+ this.spansEmitted += 1;
183
+ } catch {
184
+ }
185
+ }
186
+ /**
187
+ * Time one `getBlockHeader` round-trip. Separates "the chain is producing
188
+ * blocks slowly" from "our link to this endpoint is slow" — the endpoints are
189
+ * load-balanced, so those are genuinely different failures.
190
+ */
191
+ async ping(client, blockHash) {
192
+ if (this.pingInFlight) return;
193
+ this.pingInFlight = true;
194
+ const started = Date.now();
195
+ let ok = true;
196
+ try {
197
+ await client.getBlockHeader(blockHash);
198
+ } catch {
199
+ ok = false;
200
+ } finally {
201
+ this.pingInFlight = false;
202
+ }
203
+ try {
204
+ emitIntervalSpan(
205
+ "chain.health.rpc_ping",
206
+ `${this.chainId} rpc ping`,
207
+ started,
208
+ Date.now(),
209
+ {
210
+ "chain.health.chain_id": this.chainId,
211
+ "chain.health.endpoint": this.host,
212
+ "chain.health.ok": ok
213
+ }
214
+ );
215
+ this.spansEmitted += 1;
216
+ } catch {
217
+ }
218
+ }
219
+ };
220
+
221
+ export {
222
+ DEFAULT_WINDOW_BLOCKS,
223
+ MAX_SPANS_PER_SAMPLER,
224
+ endpointHost,
225
+ ChainHealthSampler
226
+ };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  package_default,
3
3
  writeRunState
4
- } from "./chunk-O5TJWVGZ.js";
4
+ } from "./chunk-ZPWTXUA6.js";
5
5
 
6
6
  // src/memory-report.ts
7
7
  import * as fs2 from "fs";
@@ -660,6 +660,21 @@ function setDeploySentryTag(key, value) {
660
660
  function markCodePath(id) {
661
661
  setDeployAttribute(`code.path.${id}`, "true");
662
662
  }
663
+ function emitIntervalSpan(op, name, startMs, endMs, attributes) {
664
+ if (!Sentry || !deployRootSpan) return;
665
+ try {
666
+ const span = Sentry.startInactiveSpan({
667
+ op,
668
+ name,
669
+ startTime: startMs,
670
+ parentSpan: deployRootSpan,
671
+ attributes,
672
+ onlyIfParent: false
673
+ });
674
+ span.end(endMs >= startMs ? endMs : startMs);
675
+ } catch {
676
+ }
677
+ }
663
678
  function captureWarning(message, context) {
664
679
  if (!Sentry) return;
665
680
  try {
@@ -842,6 +857,7 @@ export {
842
857
  getCurrentSentryTraceId,
843
858
  setDeploySentryTag,
844
859
  markCodePath,
860
+ emitIntervalSpan,
845
861
  captureWarning,
846
862
  flush
847
863
  };
@@ -15,6 +15,7 @@ var environments_default = {
15
15
  network: "testnet",
16
16
  description: "Product Preview net, used by Product Teams",
17
17
  bulletinAutoAuthorize: true,
18
+ bulletinAuthorizer: "//Eve",
18
19
  e2eEligible: true,
19
20
  backend: "https://polkadot-app-stg.parity.io/",
20
21
  ipfs: "https://previewnet.substrate.dev",
@@ -52,6 +53,7 @@ var environments_default = {
52
53
  description: "Previewnet bare-Rust PolkaVM DotNS deployment",
53
54
  ipfs: "https://previewnet.substrate.dev",
54
55
  webGateway: "testnet.li",
56
+ bulletinAuthorizer: "//Eve",
55
57
  autoAccountMapping: true,
56
58
  nativeToEthRatio: 1e8,
57
59
  registerStorageDeposit: 2e12,
@@ -108,6 +110,7 @@ var environments_default = {
108
110
  network: "testnet",
109
111
  description: "Next iteration of the Paseo Next testnet",
110
112
  bulletinAutoAuthorize: true,
113
+ bulletinAuthorizer: "//Alice",
111
114
  e2eEligible: true,
112
115
  backend: "https://identity-backend-next.parity-testnet.parity.io",
113
116
  ipfs: "https://paseo-bulletin-next-ipfs.polkadot.io",
@@ -677,7 +680,8 @@ function resolveEndpoints(doc, envId) {
677
680
  contracts: env.contracts ?? {},
678
681
  nativeToEthRatio: BigInt(env.nativeToEthRatio ?? 1e6),
679
682
  ...env.registerStorageDeposit !== void 0 ? { registerStorageDeposit: BigInt(env.registerStorageDeposit) } : {},
680
- bulletinAutoAuthorize: env.bulletinAutoAuthorize ?? false
683
+ bulletinAutoAuthorize: env.bulletinAutoAuthorize ?? false,
684
+ ...env.bulletinAuthorizer !== void 0 ? { bulletinAuthorizer: env.bulletinAuthorizer } : {}
681
685
  };
682
686
  }
683
687
  function getPopSelfServeConfig(doc, envId) {
@@ -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.14.1",
9
+ version: "0.14.2",
10
10
  private: false,
11
11
  repository: {
12
12
  type: "git",
@@ -52,11 +52,11 @@ var package_default = {
52
52
  "tools/verify-baked-dsn.mjs"
53
53
  ],
54
54
  scripts: {
55
- 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
+ build: "tsup src/suppress-localstorage-warning.ts src/index.ts src/deploy.ts src/dotns.ts src/pool.ts src/telemetry.ts src/chain-health.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",
56
56
  "refresh-environments": "node scripts/refresh-environments.mjs",
57
57
  postinstall: "patch-package || true",
58
58
  prepare: "npm run build",
59
- test: "npm run build && node --test test/test.js test/cli-help.test.js test/helpers/e2e-helpers.test.js test/environments.test.js test/refresh-environments.test.js test/chunk-sharing-report.test.js test/product-manifest.test.js test/cache-savings-totals.test.js test/error-pattern-signature.test.js test/exit-codes.test.js test/probe-env-health.test.js test/e2e-chain-calls.test.js test/auth-config.test.js test/whoami.test.js test/login.test.js test/logout.test.js test/auth-resolve.test.js test/storage-signer.test.js test/spinner.test.js test/sss-allowance.test.js test/sss-allowance-cache.test.js test/dotns-transfer.test.js test/deploy-actors.test.js test/transfer-command.test.js test/dotns-register-fee.test.js test/deploy-label-ordering.test.js test/benign-teardown.test.js test/verify-baked-dsn.test.js && npm run test:vendor",
59
+ test: "npm run build && node --test test/test.js test/cli-help.test.js test/helpers/e2e-helpers.test.js test/environments.test.js test/refresh-environments.test.js test/chunk-sharing-report.test.js test/product-manifest.test.js test/cache-savings-totals.test.js test/error-pattern-signature.test.js test/exit-codes.test.js test/probe-env-health.test.js test/e2e-chain-calls.test.js test/auth-config.test.js test/whoami.test.js test/login.test.js test/logout.test.js test/auth-resolve.test.js test/storage-signer.test.js test/spinner.test.js test/sss-allowance.test.js test/sss-allowance-cache.test.js test/dotns-transfer.test.js test/deploy-actors.test.js test/transfer-command.test.js test/dotns-register-fee.test.js test/deploy-label-ordering.test.js test/benign-teardown.test.js test/verify-baked-dsn.test.js test/test-release-retry-wrapper.js && npm run test:vendor",
60
60
  "test:e2e": "npm run build && node --test test/e2e.test.js",
61
61
  "test:e2e:smoke": "bash scripts/e2e-pass.sh smoke",
62
62
  "test:e2e:pr": "bash scripts/e2e-pass.sh pr",
@@ -78,7 +78,7 @@ var package_default = {
78
78
  "@polkadot-labs/hdkd-helpers": "^0.0.30",
79
79
  "@polkadot/keyring": "^14.0.3",
80
80
  "@polkadot/util-crypto": "^14.0.3",
81
- "@sentry/node": "^9.14.0",
81
+ "@sentry/node": "^10.69.0",
82
82
  "ipfs-unixfs": "^11.2.0",
83
83
  "ipfs-unixfs-importer": "^16.1.4",
84
84
  jiti: "^2.4.2",
@@ -86,8 +86,8 @@ var package_default = {
86
86
  "patch-package": "^8.0.1",
87
87
  "polkadot-api": "^2.1.3",
88
88
  verifiablejs: "1.3.0-beta.4",
89
- viem: "^2.30.5",
90
- ws: "^8.20.1"
89
+ viem: "^2.55.10",
90
+ ws: "^8.21.0"
91
91
  },
92
92
  devDependencies: {
93
93
  "@types/node": "^22.0.0",
@@ -103,6 +103,7 @@ var package_default = {
103
103
  engines: {
104
104
  node: ">=22"
105
105
  },
106
+ packageManager: "npm@11.17.0",
106
107
  license: "GPL-3.0-or-later"
107
108
  };
108
109
 
@@ -8,9 +8,9 @@ import {
8
8
  getBestBlockNumber,
9
9
  probeChunks,
10
10
  probeFinalityGap
11
- } from "./chunk-ALTGYSBJ.js";
12
- import "./chunk-NLRGFZMQ.js";
13
- import "./chunk-O5TJWVGZ.js";
11
+ } from "./chunk-CRZSDUWV.js";
12
+ import "./chunk-VH2HNQG2.js";
13
+ import "./chunk-ZPWTXUA6.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-42BNXFWF.js";
6
+ } from "../chunk-6LD3Z2HM.js";
7
7
  import {
8
8
  preflightSssAllowance
9
- } from "../chunk-5NQHQFMH.js";
9
+ } from "../chunk-T2S5M6OH.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-YDV7M3V2.js";
19
- import "../chunk-L7DCLCCK.js";
20
- import "../chunk-ALTGYSBJ.js";
18
+ import "../chunk-7V4B775S.js";
19
+ import "../chunk-GEHOB4PE.js";
20
+ import "../chunk-CRZSDUWV.js";
21
21
  import "../chunk-C2TS5MER.js";
22
- import "../chunk-DAFCH55Q.js";
22
+ import "../chunk-37AN2MHU.js";
23
23
  import "../chunk-JQKKMUCT.js";
24
24
  import {
25
25
  BULLETIN_RESOURCE,
@@ -36,19 +36,20 @@ import {
36
36
  getAuthClient,
37
37
  getPeopleChainEndpoints,
38
38
  resolveBulletinEndpoints
39
- } from "../chunk-5ZR5L37D.js";
39
+ } from "../chunk-REB37WWY.js";
40
40
  import {
41
41
  CLI_NAME
42
42
  } from "../chunk-TSPERKUS.js";
43
- import "../chunk-AB62NERW.js";
43
+ import "../chunk-FMQLBYOR.js";
44
44
  import "../chunk-SI2ZUOYD.js";
45
- import "../chunk-4AEFFDHP.js";
46
- import "../chunk-NLRGFZMQ.js";
47
- import "../chunk-O5TJWVGZ.js";
45
+ import "../chunk-IJUKTHEP.js";
48
46
  import {
49
47
  loadEnvironments
50
- } from "../chunk-E6J46GNK.js";
48
+ } from "../chunk-XQHRKK7M.js";
51
49
  import "../chunk-ZOC4GITL.js";
50
+ import "../chunk-UDJAYGYU.js";
51
+ import "../chunk-VH2HNQG2.js";
52
+ import "../chunk-ZPWTXUA6.js";
52
53
 
53
54
  // src/commands/login.ts
54
55
  import { ss58Encode } from "@parity/product-sdk-address";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clearSssAllowanceCache
3
- } from "../chunk-5NQHQFMH.js";
3
+ } from "../chunk-T2S5M6OH.js";
4
4
  import "../chunk-GRPLHUYC.js";
5
5
  import "../chunk-JQKKMUCT.js";
6
6
  import "../chunk-5FLTDWWP.js";
@@ -9,12 +9,12 @@ import {
9
9
  } from "../chunk-RIRDBSBG.js";
10
10
  import {
11
11
  getAuthClient
12
- } from "../chunk-5ZR5L37D.js";
12
+ } from "../chunk-REB37WWY.js";
13
13
  import "../chunk-TSPERKUS.js";
14
- import "../chunk-NLRGFZMQ.js";
15
- import "../chunk-O5TJWVGZ.js";
16
- import "../chunk-E6J46GNK.js";
14
+ import "../chunk-XQHRKK7M.js";
17
15
  import "../chunk-ZOC4GITL.js";
16
+ import "../chunk-VH2HNQG2.js";
17
+ import "../chunk-ZPWTXUA6.js";
18
18
 
19
19
  // src/commands/logout.ts
20
20
  function formatLogout(status) {
@@ -4,17 +4,18 @@ import {
4
4
  import {
5
5
  DEFAULT_MNEMONIC,
6
6
  DotNS
7
- } from "../chunk-AB62NERW.js";
7
+ } from "../chunk-FMQLBYOR.js";
8
8
  import "../chunk-SI2ZUOYD.js";
9
- import "../chunk-4AEFFDHP.js";
10
- import "../chunk-NLRGFZMQ.js";
11
- import "../chunk-O5TJWVGZ.js";
9
+ import "../chunk-IJUKTHEP.js";
12
10
  import {
13
11
  getPopSelfServeConfig,
14
12
  loadEnvironments,
15
13
  resolveEndpoints
16
- } from "../chunk-E6J46GNK.js";
14
+ } from "../chunk-XQHRKK7M.js";
17
15
  import "../chunk-ZOC4GITL.js";
16
+ import "../chunk-UDJAYGYU.js";
17
+ import "../chunk-VH2HNQG2.js";
18
+ import "../chunk-ZPWTXUA6.js";
18
19
 
19
20
  // src/commands/transfer.ts
20
21
  async function resolveTransferRecipient(to, ctx) {
@@ -2,14 +2,14 @@ import {
2
2
  STALE_SESSION_MESSAGE,
3
3
  getAuthClient,
4
4
  hasPersistedSession
5
- } from "../chunk-5ZR5L37D.js";
5
+ } from "../chunk-REB37WWY.js";
6
6
  import {
7
7
  CLI_NAME
8
8
  } from "../chunk-TSPERKUS.js";
9
- import "../chunk-NLRGFZMQ.js";
10
- import "../chunk-O5TJWVGZ.js";
11
- import "../chunk-E6J46GNK.js";
9
+ import "../chunk-XQHRKK7M.js";
12
10
  import "../chunk-ZOC4GITL.js";
11
+ import "../chunk-VH2HNQG2.js";
12
+ import "../chunk-ZPWTXUA6.js";
13
13
 
14
14
  // src/commands/whoami.ts
15
15
  function formatWhoami(addresses) {
@@ -2,19 +2,20 @@ import {
2
2
  MainnetDefaultWorkerError,
3
3
  resolveDeployActors,
4
4
  resolveStorageSigner
5
- } from "./chunk-DAFCH55Q.js";
5
+ } from "./chunk-37AN2MHU.js";
6
6
  import "./chunk-JQKKMUCT.js";
7
7
  import "./chunk-5FLTDWWP.js";
8
8
  import "./chunk-RIRDBSBG.js";
9
- import "./chunk-5ZR5L37D.js";
9
+ import "./chunk-REB37WWY.js";
10
10
  import "./chunk-TSPERKUS.js";
11
- import "./chunk-AB62NERW.js";
11
+ import "./chunk-FMQLBYOR.js";
12
12
  import "./chunk-SI2ZUOYD.js";
13
- import "./chunk-4AEFFDHP.js";
14
- import "./chunk-NLRGFZMQ.js";
15
- import "./chunk-O5TJWVGZ.js";
16
- import "./chunk-E6J46GNK.js";
13
+ import "./chunk-IJUKTHEP.js";
14
+ import "./chunk-XQHRKK7M.js";
17
15
  import "./chunk-ZOC4GITL.js";
16
+ import "./chunk-UDJAYGYU.js";
17
+ import "./chunk-VH2HNQG2.js";
18
+ import "./chunk-ZPWTXUA6.js";
18
19
  export {
19
20
  MainnetDefaultWorkerError,
20
21
  resolveDeployActors,
package/dist/deploy.js CHANGED
@@ -62,34 +62,35 @@ import {
62
62
  storeFile,
63
63
  unpublish,
64
64
  validateNoManifestFlags
65
- } from "./chunk-42BNXFWF.js";
66
- import "./chunk-5NQHQFMH.js";
65
+ } from "./chunk-6LD3Z2HM.js";
66
+ import "./chunk-T2S5M6OH.js";
67
67
  import "./chunk-GRPLHUYC.js";
68
68
  import "./chunk-HOTQDYHD.js";
69
69
  import "./chunk-IW3X2MJF.js";
70
70
  import "./chunk-KOSF5FDO.js";
71
71
  import "./chunk-J3NIXHZZ.js";
72
72
  import "./chunk-S7EM5VMW.js";
73
- import "./chunk-YDV7M3V2.js";
74
- import "./chunk-L7DCLCCK.js";
75
- import "./chunk-ALTGYSBJ.js";
73
+ import "./chunk-7V4B775S.js";
74
+ import "./chunk-GEHOB4PE.js";
75
+ import "./chunk-CRZSDUWV.js";
76
76
  import "./chunk-C2TS5MER.js";
77
- import "./chunk-DAFCH55Q.js";
77
+ import "./chunk-37AN2MHU.js";
78
78
  import "./chunk-JQKKMUCT.js";
79
79
  import "./chunk-5FLTDWWP.js";
80
80
  import "./chunk-RIRDBSBG.js";
81
- import "./chunk-5ZR5L37D.js";
81
+ import "./chunk-REB37WWY.js";
82
82
  import "./chunk-TSPERKUS.js";
83
- import "./chunk-AB62NERW.js";
83
+ import "./chunk-FMQLBYOR.js";
84
84
  import "./chunk-SI2ZUOYD.js";
85
- import "./chunk-4AEFFDHP.js";
86
- import "./chunk-NLRGFZMQ.js";
87
- import "./chunk-O5TJWVGZ.js";
88
- import "./chunk-E6J46GNK.js";
85
+ import "./chunk-IJUKTHEP.js";
86
+ import "./chunk-XQHRKK7M.js";
89
87
  import {
90
88
  EXIT_CODE_NO_RETRY,
91
89
  NonRetryableError
92
90
  } from "./chunk-ZOC4GITL.js";
91
+ import "./chunk-UDJAYGYU.js";
92
+ import "./chunk-VH2HNQG2.js";
93
+ import "./chunk-ZPWTXUA6.js";
93
94
  export {
94
95
  BLAKE2B_256_MULTIHASH_CODE,
95
96
  BULLETIN_ENDPOINTS,
package/dist/dotns.d.ts CHANGED
@@ -599,6 +599,8 @@ declare class DotNS {
599
599
  private _phoneSignatureTotal;
600
600
  /** Running attempt counter per label for re-sign detection. Reset at connect/disconnect. */
601
601
  private _phoneSignatureAttempts;
602
+ /** Samples Asset Hub block rate / finality lag / RPC latency for the life of this connection. */
603
+ private readonly chainHealth;
602
604
  private _classifyOverrideForTest;
603
605
  /** Test-only: inject a fixed classifyAliasAccountState return value for the next call. Consumed once. */
604
606
  __setClassifyOverrideForTest(state: AliasAccountState): void;
package/dist/dotns.js CHANGED
@@ -78,13 +78,14 @@ import {
78
78
  verifyNonceAdvanced,
79
79
  weiToNative,
80
80
  withRetry
81
- } from "./chunk-AB62NERW.js";
81
+ } from "./chunk-FMQLBYOR.js";
82
82
  import "./chunk-SI2ZUOYD.js";
83
- import "./chunk-4AEFFDHP.js";
84
- import "./chunk-NLRGFZMQ.js";
85
- import "./chunk-O5TJWVGZ.js";
86
- import "./chunk-E6J46GNK.js";
83
+ import "./chunk-IJUKTHEP.js";
84
+ import "./chunk-XQHRKK7M.js";
87
85
  import "./chunk-ZOC4GITL.js";
86
+ import "./chunk-UDJAYGYU.js";
87
+ import "./chunk-VH2HNQG2.js";
88
+ import "./chunk-ZPWTXUA6.js";
88
89
  export {
89
90
  ATTR_TX_RESOLUTION_KIND,
90
91
  CONNECTION_TIMEOUT_MS,
@@ -37,6 +37,7 @@ interface Environment {
37
37
  contracts?: Record<string, string>;
38
38
  popSelfServe?: PopSelfServeConfig;
39
39
  bulletinAutoAuthorize?: boolean;
40
+ bulletinAuthorizer?: string;
40
41
  }
41
42
  interface ChainEndpoint {
42
43
  wss: string | string[];
@@ -76,6 +77,7 @@ interface ResolvedEndpoints {
76
77
  nativeToEthRatio: bigint;
77
78
  registerStorageDeposit?: bigint;
78
79
  bulletinAutoAuthorize: boolean;
80
+ bulletinAuthorizer?: string;
79
81
  }
80
82
  declare function defaultBundledPath(): string;
81
83
  /**
@@ -9,7 +9,7 @@ import {
9
9
  loadEnvironments,
10
10
  resolveEndpoints,
11
11
  validateContractAddresses
12
- } from "./chunk-E6J46GNK.js";
12
+ } from "./chunk-XQHRKK7M.js";
13
13
  import "./chunk-ZOC4GITL.js";
14
14
  export {
15
15
  DEFAULT_ENV_ID,