bulletin-deploy 0.14.1 → 0.14.2-rc.1

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-YDV7M3V2.js → chunk-5ZSV63VD.js} +3 -3
  8. package/dist/{chunk-L7DCLCCK.js → chunk-6FNSPCYP.js} +1 -1
  9. package/dist/{chunk-5NQHQFMH.js → chunk-D3QNCTHG.js} +1 -1
  10. package/dist/{chunk-NLRGFZMQ.js → chunk-EDA4LT7U.js} +17 -1
  11. package/dist/{chunk-5ZR5L37D.js → chunk-EUZGNOKE.js} +4 -4
  12. package/dist/{chunk-AB62NERW.js → chunk-GR3EXT5M.js} +15 -8
  13. package/dist/{chunk-DAFCH55Q.js → chunk-HWVSJAZ2.js} +2 -2
  14. package/dist/{chunk-4AEFFDHP.js → chunk-IJUKTHEP.js} +8 -2
  15. package/dist/{chunk-O5TJWVGZ.js → chunk-K2HOSXFH.js} +7 -6
  16. package/dist/{chunk-ALTGYSBJ.js → chunk-MMRXAITP.js} +1 -1
  17. package/dist/chunk-QONJLVCR.js +226 -0
  18. package/dist/{chunk-PQK6XT6Z.js → chunk-RVDPXR2B.js} +8 -8
  19. package/dist/{chunk-42BNXFWF.js → chunk-WTKBLLMU.js} +39 -36
  20. package/dist/{chunk-E6J46GNK.js → chunk-XQHRKK7M.js} +5 -1
  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
@@ -6,6 +6,7 @@
6
6
  "network": "testnet",
7
7
  "description": "Product Preview net, used by Product Teams",
8
8
  "bulletinAutoAuthorize": true,
9
+ "bulletinAuthorizer": "//Eve",
9
10
  "e2eEligible": true,
10
11
  "backend": "https://polkadot-app-stg.parity.io/",
11
12
  "ipfs": "https://previewnet.substrate.dev",
@@ -43,6 +44,7 @@
43
44
  "description": "Previewnet bare-Rust PolkaVM DotNS deployment",
44
45
  "ipfs": "https://previewnet.substrate.dev",
45
46
  "webGateway": "testnet.li",
47
+ "bulletinAuthorizer": "//Eve",
46
48
  "autoAccountMapping": true,
47
49
  "nativeToEthRatio": 100000000,
48
50
  "registerStorageDeposit": 2000000000000,
@@ -99,6 +101,7 @@
99
101
  "network": "testnet",
100
102
  "description": "Next iteration of the Paseo Next testnet",
101
103
  "bulletinAutoAuthorize": true,
104
+ "bulletinAuthorizer": "//Alice",
102
105
  "e2eEligible": true,
103
106
  "backend": "https://identity-backend-next.parity-testnet.parity.io",
104
107
  "ipfs": "https://paseo-bulletin-next-ipfs.polkadot.io",
@@ -117,6 +117,13 @@ if (flags.env) {
117
117
 
118
118
  bootstrapOpts.bulletinAuthorizeV2 = envEntry.bulletinAuthorizeV2 ?? false;
119
119
 
120
+ // #1209: which key holds TransactionStorage authorizer rights on this env's
121
+ // Bulletin chain. Not always //Alice — previewnet's sole AllowedAuthorizers
122
+ // entry is //Eve. An explicit --authorizer still wins (set above).
123
+ if (envEntry.bulletinAuthorizer) {
124
+ bootstrapOpts.envAuthorizer = envEntry.bulletinAuthorizer;
125
+ }
126
+
120
127
  if (flags.preCheck) {
121
128
  // #1059: widen the "needs authorization" threshold to 24h-before-expiry,
122
129
  // and hard-gate the actual write to environments cleared for it. This is
@@ -9,12 +9,12 @@ import {
9
9
  getPeopleChainEndpoints,
10
10
  hasPersistedSession,
11
11
  resolveBulletinEndpoints
12
- } from "./chunk-5ZR5L37D.js";
12
+ } from "./chunk-EUZGNOKE.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-EDA4LT7U.js";
17
+ import "./chunk-K2HOSXFH.js";
18
18
  export {
19
19
  DOT_DAPP_ID,
20
20
  DOT_DERIVATION_INDEX,
@@ -10,10 +10,10 @@ import {
10
10
  offerBugReport,
11
11
  scrubSecrets,
12
12
  setDeployContext
13
- } from "./chunk-YDV7M3V2.js";
14
- import "./chunk-L7DCLCCK.js";
15
- import "./chunk-NLRGFZMQ.js";
16
- import "./chunk-O5TJWVGZ.js";
13
+ } from "./chunk-5ZSV63VD.js";
14
+ import "./chunk-6FNSPCYP.js";
15
+ import "./chunk-EDA4LT7U.js";
16
+ import "./chunk-K2HOSXFH.js";
17
17
  export {
18
18
  buildCliFlagsSummary,
19
19
  buildLabels,
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Chain-health sampling — measures what the chain was doing underneath a deploy.
3
+ *
4
+ * Motivation: deploy latency drifted ~17% on paseo-next-v2 over the second half
5
+ * of July 2026 while the Bulletin storage phase stayed flat, pointing at Asset
6
+ * Hub extrinsic inclusion. That diagnosis had to be reconstructed by subtracting
7
+ * child-span durations after the fact, because we emit nothing about the chain
8
+ * itself. This module closes that gap.
9
+ *
10
+ * Design note — why interval spans rather than numeric attributes:
11
+ * `@sentry/node` user-defined attributes come back string-typed in EAP no matter
12
+ * how they're set, so `avg()`/`p95()` refuse to run on them (see the numeric
13
+ * attribute caveat in CLAUDE.md). `span.duration` is a built-in numeric column
14
+ * and does aggregate. All three signals here are genuinely elapsed wall-clock
15
+ * intervals, so encoding each as a span whose duration IS the measurement is
16
+ * honest — nothing synthetic — and it is the only shape that gives us
17
+ * `p50(span.duration)` charts.
18
+ */
19
+ /** Which chain a sampler is watching. Kept to the two that bound deploy time. */
20
+ type ChainHealthChainId = "bulletin" | "asset-hub";
21
+ /**
22
+ * Minimal slice of papi's PolkadotClient that the sampler needs. Declared
23
+ * structurally rather than importing PolkadotClient so tests can drive the
24
+ * sampler with a scripted block stream and no chain.
25
+ */
26
+ interface ChainHealthClient {
27
+ blocks$: {
28
+ subscribe(observer: {
29
+ next: (block: {
30
+ hash: string;
31
+ number: number;
32
+ }) => void;
33
+ error?: (e: unknown) => void;
34
+ }): {
35
+ unsubscribe(): void;
36
+ };
37
+ };
38
+ finalizedBlock$: {
39
+ subscribe(observer: {
40
+ next: (block: {
41
+ hash: string;
42
+ number: number;
43
+ }) => void;
44
+ error?: (e: unknown) => void;
45
+ }): {
46
+ unsubscribe(): void;
47
+ };
48
+ };
49
+ getBlockHeader(hash: string): Promise<unknown>;
50
+ }
51
+ /**
52
+ * Blocks per measurement window. 10 smooths per-block jitter without delaying
53
+ * the first sample past a median-length deploy.
54
+ */
55
+ declare const DEFAULT_WINDOW_BLOCKS = 10;
56
+ /**
57
+ * Hard cap on spans emitted per sampler, per deploy. A pathological multi-hour
58
+ * deploy must not emit thousands. Hitting it is reported, never silent.
59
+ */
60
+ declare const MAX_SPANS_PER_SAMPLER = 60;
61
+ /**
62
+ * Strip a wss:// endpoint down to its host. The endpoints in environments.json
63
+ * carry no credentials today; host-only keeps it that way by construction and
64
+ * keeps attribute cardinality at a handful of values.
65
+ */
66
+ declare function endpointHost(endpoint: string): string;
67
+ /**
68
+ * Watches one chain and emits `chain.health.*` interval spans.
69
+ *
70
+ * Lifecycle is attach/detach rather than a one-shot start/stop because the
71
+ * Bulletin client is destroyed and recreated mid-deploy during WS-halt
72
+ * recovery (deploy.ts) and the Asset Hub client is recreated by
73
+ * `recreateReviveClient` (dotns.ts, the #1131 retry path). Each recreation
74
+ * re-attaches; the in-flight window is discarded rather than emitted, because
75
+ * a window spanning a reconnect measures our outage, not the chain's block
76
+ * rate, and would silently poison the metric this exists to provide.
77
+ */
78
+ declare class ChainHealthSampler {
79
+ private readonly chainId;
80
+ private readonly windowBlocks;
81
+ private host;
82
+ private blocksSub;
83
+ private finalizedSub;
84
+ /** Wall-clock of the block that opened the current window. */
85
+ private windowStartMs;
86
+ private windowStartBlock;
87
+ /** blockNumber -> first-seen wall clock, FIFO-evicted at MAX_TRACKED_BLOCKS. */
88
+ private firstSeen;
89
+ private spansEmitted;
90
+ private capReported;
91
+ /** Set once a window closes, so exactly one ping is issued per window. */
92
+ private pingInFlight;
93
+ /**
94
+ * True while `blocks$.subscribe()` is replaying history.
95
+ *
96
+ * papi documents that on subscribe it synchronously emits the latest
97
+ * finalized block and every known descendant. Those arrive microseconds
98
+ * apart, so letting them close a window would report a near-zero elapsed
99
+ * time and mark the chain as impossibly fast — corrupting the exact metric
100
+ * this module exists to produce. Replayed blocks still record first-seen
101
+ * times (finality lag needs them) and still move the window anchor forward,
102
+ * so timing starts from the moment we caught up rather than in stale history.
103
+ */
104
+ private inReplay;
105
+ constructor(chainId: ChainHealthChainId, windowBlocks?: number);
106
+ /**
107
+ * Subscribe to a (re)created client. Safe to call repeatedly — an existing
108
+ * subscription is torn down first. Never throws: a sampler failure must not
109
+ * be able to fail a deploy.
110
+ */
111
+ attach(client: ChainHealthClient, endpoint: string): void;
112
+ /** Unsubscribe and drop the partial window. Idempotent. */
113
+ detach(): void;
114
+ /**
115
+ * Detach and reset per-deploy state. Call from the deploy's teardown.
116
+ *
117
+ * Resetting the span budget here (rather than in attach()) is deliberate.
118
+ * attach() also runs on mid-deploy reconnects, where clearing the counter
119
+ * would defeat the cap; stop() runs exactly once per deploy. deploy.ts holds
120
+ * its Bulletin sampler at module scope, so without this a second deploy() in
121
+ * the same process — playground-cli consumes deploy() as a library — would
122
+ * inherit the first deploy's exhausted budget and emit nothing.
123
+ */
124
+ stop(): void;
125
+ /** True while subscribed — used by tests and by re-attach guards. */
126
+ get attached(): boolean;
127
+ private resetWindow;
128
+ private atCap;
129
+ private onBlock;
130
+ private onFinalized;
131
+ /**
132
+ * Time one `getBlockHeader` round-trip. Separates "the chain is producing
133
+ * blocks slowly" from "our link to this endpoint is slow" — the endpoints are
134
+ * load-balanced, so those are genuinely different failures.
135
+ */
136
+ private ping;
137
+ }
138
+
139
+ export { type ChainHealthChainId, type ChainHealthClient, ChainHealthSampler, DEFAULT_WINDOW_BLOCKS, MAX_SPANS_PER_SAMPLER, endpointHost };
@@ -0,0 +1,14 @@
1
+ import {
2
+ ChainHealthSampler,
3
+ DEFAULT_WINDOW_BLOCKS,
4
+ MAX_SPANS_PER_SAMPLER,
5
+ endpointHost
6
+ } from "./chunk-QONJLVCR.js";
7
+ import "./chunk-EDA4LT7U.js";
8
+ import "./chunk-K2HOSXFH.js";
9
+ export {
10
+ ChainHealthSampler,
11
+ DEFAULT_WINDOW_BLOCKS,
12
+ MAX_SPANS_PER_SAMPLER,
13
+ endpointHost
14
+ };
@@ -2,15 +2,15 @@ import {
2
2
  classifyErrorArea,
3
3
  isInteractive,
4
4
  promptYesNo
5
- } from "./chunk-L7DCLCCK.js";
5
+ } from "./chunk-6FNSPCYP.js";
6
6
  import {
7
7
  VERSION,
8
8
  getCurrentSentryTraceId,
9
9
  resolveIssueRepoSlug
10
- } from "./chunk-NLRGFZMQ.js";
10
+ } from "./chunk-EDA4LT7U.js";
11
11
  import {
12
12
  package_default
13
- } from "./chunk-O5TJWVGZ.js";
13
+ } from "./chunk-K2HOSXFH.js";
14
14
 
15
15
  // src/bug-report.ts
16
16
  import { execSync, execFileSync } from "child_process";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-NLRGFZMQ.js";
3
+ } from "./chunk-EDA4LT7U.js";
4
4
 
5
5
  // src/version-check.ts
6
6
  import { execSync, execFileSync } from "child_process";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-GRPLHUYC.js";
4
4
  import {
5
5
  DOT_DAPP_ID
6
- } from "./chunk-5ZR5L37D.js";
6
+ } from "./chunk-EUZGNOKE.js";
7
7
 
8
8
  // src/sss-allowance-cache.ts
9
9
  import { mkdir, readFile, writeFile, unlink } from "fs/promises";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  package_default,
3
3
  writeRunState
4
- } from "./chunk-O5TJWVGZ.js";
4
+ } from "./chunk-K2HOSXFH.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
  };
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  CLI_NAME
3
3
  } from "./chunk-TSPERKUS.js";
4
- import {
5
- VERSION
6
- } from "./chunk-NLRGFZMQ.js";
7
4
  import {
8
5
  loadEnvironments
9
- } from "./chunk-E6J46GNK.js";
6
+ } from "./chunk-XQHRKK7M.js";
7
+ import {
8
+ VERSION
9
+ } from "./chunk-EDA4LT7U.js";
10
10
 
11
11
  // src/auth-config.ts
12
12
  import { existsSync, readdirSync } from "fs";
@@ -3,7 +3,16 @@ import {
3
3
  } from "./chunk-SI2ZUOYD.js";
4
4
  import {
5
5
  isTestnetSpecName
6
- } from "./chunk-4AEFFDHP.js";
6
+ } from "./chunk-IJUKTHEP.js";
7
+ import {
8
+ validateContractAddresses
9
+ } from "./chunk-XQHRKK7M.js";
10
+ import {
11
+ NonRetryableError
12
+ } from "./chunk-ZOC4GITL.js";
13
+ import {
14
+ ChainHealthSampler
15
+ } from "./chunk-QONJLVCR.js";
7
16
  import {
8
17
  captureWarning,
9
18
  markCodePath,
@@ -11,13 +20,7 @@ import {
11
20
  setDeploySentryTag,
12
21
  truncateAddress,
13
22
  withSpan
14
- } from "./chunk-NLRGFZMQ.js";
15
- import {
16
- validateContractAddresses
17
- } from "./chunk-E6J46GNK.js";
18
- import {
19
- NonRetryableError
20
- } from "./chunk-ZOC4GITL.js";
23
+ } from "./chunk-EDA4LT7U.js";
21
24
 
22
25
  // src/dotns.ts
23
26
  import crypto from "crypto";
@@ -1238,6 +1241,8 @@ var DotNS = class {
1238
1241
  _phoneSignatureTotal = 0;
1239
1242
  /** Running attempt counter per label for re-sign detection. Reset at connect/disconnect. */
1240
1243
  _phoneSignatureAttempts = /* @__PURE__ */ new Map();
1244
+ /** Samples Asset Hub block rate / finality lag / RPC latency for the life of this connection. */
1245
+ chainHealth = new ChainHealthSampler("asset-hub");
1241
1246
  // Test-only seam: consumed once by classifyAliasAccountState() then cleared.
1242
1247
  // Mirrors the __setDeployRootSpanForTest / __setSentryForTest pattern.
1243
1248
  _classifyOverrideForTest = null;
@@ -1285,6 +1290,7 @@ var DotNS = class {
1285
1290
  }
1286
1291
  this.client = createClient(getWsProvider(endpoint, { heartbeatTimeout: WS_HEARTBEAT_TIMEOUT_MS }));
1287
1292
  this.clientWrapper = new ReviveClientWrapper(this.client.getUnsafeApi());
1293
+ this.chainHealth.attach(this.client, endpoint);
1288
1294
  }
1289
1295
  async connect(options = {}) {
1290
1296
  if (options.assetHubEndpoints && options.assetHubEndpoints.length > 0) {
@@ -3067,6 +3073,7 @@ var DotNS = class {
3067
3073
  this._onPhoneSigningRequired?.(label);
3068
3074
  }
3069
3075
  disconnect() {
3076
+ this.chainHealth.stop();
3070
3077
  if (this.client) {
3071
3078
  this.client.destroy();
3072
3079
  this.client = null;
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-5FLTDWWP.js";
5
5
  import {
6
6
  DOT_PRODUCT_ID
7
- } from "./chunk-5ZR5L37D.js";
7
+ } from "./chunk-EUZGNOKE.js";
8
8
  import {
9
9
  DEFAULT_MNEMONIC
10
- } from "./chunk-AB62NERW.js";
10
+ } from "./chunk-GR3EXT5M.js";
11
11
 
12
12
  // src/deploy-actors.ts
13
13
  var DEFAULT_WORKER_SURI = DEFAULT_MNEMONIC;
@@ -127,7 +127,8 @@ async function ensureAuthorized(api, address, label, opts = {}) {
127
127
  if (opts.autoAuthorize) {
128
128
  await cryptoWaitReady();
129
129
  const keyring = new Keyring({ type: "sr25519" });
130
- const alice = keyring.addFromUri("//Alice");
130
+ const authorizerUri = opts.authorizer ?? "//Alice";
131
+ const alice = keyring.addFromUri(authorizerUri);
131
132
  const signer = getPolkadotSigner(alice.publicKey, "Sr25519", (data) => alice.sign(data));
132
133
  const grant = `${TOPUP_TRANSACTIONS} txs / ${Number(TOPUP_BYTES) / 1e6}MB`;
133
134
  console.log(` Auto-authorizing ${who} on Bulletin (${grant})...`);
@@ -139,7 +140,7 @@ async function ensureAuthorized(api, address, label, opts = {}) {
139
140
  const result = await tx.signAndSubmit(signer);
140
141
  if (!result?.ok) {
141
142
  throw new Error(
142
- `Auto-authorization of Bulletin storage account ${who} failed: authorize_account was rejected. This environment is flagged bulletinAutoAuthorize, but //Alice may not hold authorizer rights on this chain.`
143
+ `Auto-authorization of Bulletin storage account ${who} failed: authorize_account was rejected. This environment is flagged bulletinAutoAuthorize and signed as ${authorizerUri}, but that key may not hold authorizer rights on this chain \u2014 check TransactionStorage.AllowedAuthorizers and set the env's bulletinAuthorizer accordingly.`
143
144
  );
144
145
  }
145
146
  console.log(` Authorized: ${grant}`);
@@ -254,6 +255,11 @@ ${details}`
254
255
  const authKey = keyring.addFromUri(opts.authorizerMnemonic);
255
256
  authorizerSigner = getPolkadotSigner(authKey.publicKey, "Sr25519", (data) => authKey.sign(data));
256
257
  console.log(`Using provided authorizer: ${authKey.address}
258
+ `);
259
+ } else if (opts.envAuthorizer) {
260
+ const authKey = keyring.addFromUri(opts.envAuthorizer);
261
+ authorizerSigner = getPolkadotSigner(authKey.publicKey, "Sr25519", (data) => authKey.sign(data));
262
+ console.log(`Using environment authorizer ${opts.envAuthorizer} (${authKey.address})
257
263
  `);
258
264
  } else {
259
265
  const isTestnet = await detectTestnet(api);
@@ -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-rc.1",
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
 
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  captureWarning
3
- } from "./chunk-NLRGFZMQ.js";
3
+ } from "./chunk-EDA4LT7U.js";
4
4
 
5
5
  // src/chunk-probe.ts
6
6
  import { Twox128, Blake2128Concat, decAnyMetadata, unifyMetadata } from "@polkadot-api/substrate-bindings";