@parity/product-deploy 0.10.0-rc.0 → 0.10.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/DEPLOYMENT.md +124 -0
  2. package/README.md +73 -6
  3. package/assets/environments.json +41 -0
  4. package/bin/bulletin-deploy +11 -16
  5. package/dist/allocations-CEPeZr6T.d.ts +111 -0
  6. package/dist/auth/index.d.ts +3 -2
  7. package/dist/auth/index.js +5 -1
  8. package/dist/auth/vendor/index.d.ts +3 -2
  9. package/dist/auth/vendor/index.js +5 -1
  10. package/dist/auth/vendor/ui/index.d.ts +2 -1
  11. package/dist/auth-CA_YKtM2.d.ts +128 -0
  12. package/dist/auth-config.d.ts +13 -8
  13. package/dist/auth-config.js +4 -4
  14. package/dist/bug-report.js +4 -4
  15. package/dist/{chunk-2BTYPNYW.js → chunk-4D6STP5G.js} +10 -2
  16. package/dist/{chunk-DHY2ZXVZ.js → chunk-5OKB3TEB.js} +8 -1
  17. package/dist/{chunk-DY7RVMM5.js → chunk-C74YSAWC.js} +64 -20
  18. package/dist/{chunk-MI5B3UCM.js → chunk-EHQPRWGC.js} +1 -1
  19. package/dist/{chunk-VR3LF62E.js → chunk-I7UEBFP5.js} +38 -12
  20. package/dist/{chunk-HUT626G6.js → chunk-LYWIW6WU.js} +1 -1
  21. package/dist/{chunk-GL3U7K2B.js → chunk-QRKI6MMK.js} +41 -0
  22. package/dist/{chunk-PKQOUCPD.js → chunk-SXWFDMFT.js} +5 -5
  23. package/dist/{chunk-GJTVPP7E.js → chunk-UJJQME5K.js} +1 -1
  24. package/dist/{chunk-G676QAN4.js → chunk-V5VD5CIC.js} +2 -2
  25. package/dist/{chunk-ZJCTG7HF.js → chunk-WM5R4O33.js} +4 -3
  26. package/dist/{chunk-Q3RIJ7PU.js → chunk-XX6LNB74.js} +3 -3
  27. package/dist/chunk-probe.js +3 -3
  28. package/dist/commands/login.d.ts +42 -6
  29. package/dist/commands/login.js +86 -34
  30. package/dist/commands/logout.d.ts +2 -1
  31. package/dist/commands/logout.js +6 -6
  32. package/dist/commands/transfer.js +5 -4
  33. package/dist/commands/whoami.d.ts +2 -1
  34. package/dist/commands/whoami.js +4 -4
  35. package/dist/deploy-actors.d.ts +3 -2
  36. package/dist/deploy-actors.js +6 -5
  37. package/dist/deploy.d.ts +13 -1
  38. package/dist/deploy.js +15 -10
  39. package/dist/dotns.d.ts +10 -4
  40. package/dist/dotns.js +5 -4
  41. package/dist/environments.js +1 -1
  42. package/dist/index.js +12 -11
  43. package/dist/manifest/publish.js +12 -11
  44. package/dist/memory-report.js +2 -2
  45. package/dist/merkle.js +11 -10
  46. package/dist/personhood/bootstrap.js +6 -6
  47. package/dist/personhood/people-client.js +5 -4
  48. package/dist/run-state.js +1 -1
  49. package/dist/{signer-vR6KKC7V.d.ts → signer-Duup0hgQ.d.ts} +1 -1
  50. package/dist/sss-allowance-cache.js +5 -5
  51. package/dist/storage-signer.js +11 -10
  52. package/dist/telemetry.d.ts +17 -1
  53. package/dist/telemetry.js +4 -2
  54. package/dist/version-check.js +3 -3
  55. package/docs/bootstrap.md +1 -1
  56. package/docs/e2e-bootstrap.md +34 -12
  57. package/docs/telemetry.md +10 -11
  58. package/docs/testing.md +2 -0
  59. package/package.json +4 -3
  60. package/dist/auth-C-Pel0AT.d.ts +0 -235
package/dist/deploy.js CHANGED
@@ -32,7 +32,9 @@ import {
32
32
  friendlyChainError,
33
33
  hasIPFS,
34
34
  interpretBitswapResult,
35
+ isBenignTeardownError,
35
36
  isConnectionError,
37
+ isPhoneSignerActive,
36
38
  makeBulletinStatusHandler,
37
39
  merkleize,
38
40
  probeP2pRetrieval,
@@ -45,24 +47,25 @@ import {
45
47
  storeDirectoryV2,
46
48
  storeFile,
47
49
  unpublish
48
- } from "./chunk-DY7RVMM5.js";
49
- import "./chunk-GJTVPP7E.js";
50
+ } from "./chunk-C74YSAWC.js";
51
+ import "./chunk-UJJQME5K.js";
50
52
  import "./chunk-GRPLHUYC.js";
51
53
  import "./chunk-HOTQDYHD.js";
52
54
  import "./chunk-IW3X2MJF.js";
53
55
  import "./chunk-KOSF5FDO.js";
54
56
  import "./chunk-J3NIXHZZ.js";
55
57
  import "./chunk-S7EM5VMW.js";
56
- import "./chunk-PKQOUCPD.js";
57
- import "./chunk-G676QAN4.js";
58
- import "./chunk-MI5B3UCM.js";
59
- import "./chunk-HUT626G6.js";
58
+ import "./chunk-SXWFDMFT.js";
59
+ import "./chunk-V5VD5CIC.js";
60
+ import "./chunk-EHQPRWGC.js";
61
+ import "./chunk-LYWIW6WU.js";
60
62
  import "./chunk-C2TS5MER.js";
61
- import "./chunk-VR3LF62E.js";
63
+ import "./chunk-I7UEBFP5.js";
64
+ import "./chunk-SI2ZUOYD.js";
62
65
  import "./chunk-4PVJ2JBZ.js";
63
- import "./chunk-2BTYPNYW.js";
64
- import "./chunk-ZJCTG7HF.js";
65
- import "./chunk-GL3U7K2B.js";
66
+ import "./chunk-4D6STP5G.js";
67
+ import "./chunk-WM5R4O33.js";
68
+ import "./chunk-QRKI6MMK.js";
66
69
  import {
67
70
  EXIT_CODE_NO_RETRY,
68
71
  NonRetryableError
@@ -103,7 +106,9 @@ export {
103
106
  friendlyChainError,
104
107
  hasIPFS,
105
108
  interpretBitswapResult,
109
+ isBenignTeardownError,
106
110
  isConnectionError,
111
+ isPhoneSignerActive,
107
112
  makeBulletinStatusHandler,
108
113
  merkleize,
109
114
  probeP2pRetrieval,
package/dist/dotns.d.ts CHANGED
@@ -84,7 +84,7 @@ interface DotnsPreflightResult {
84
84
  isTestnet: boolean;
85
85
  canProceed: boolean;
86
86
  reason?: string;
87
- plannedAction: "register" | "already-owned-by-us" | "abort";
87
+ plannedAction: "register" | "already-owned-by-us" | "already-owned-by-recipient" | "abort";
88
88
  needsPopUpgrade: boolean;
89
89
  targetPopStatus?: number;
90
90
  /** Free PAS balance of the DotNS signer at preflight time, in plancks (10 decimals). */
@@ -304,6 +304,7 @@ declare class ReviveClientWrapper {
304
304
  expectedNonce: number;
305
305
  };
306
306
  verifyEffect?: () => Promise<boolean>;
307
+ feeAsset?: "pgas";
307
308
  }): Promise<TxResolution>;
308
309
  signAndSubmitWithRetry(buildExtrinsic: () => any, signer: PolkadotSigner, statusCallback: (status: string) => void, label: string, opts?: {
309
310
  nonceFallback?: {
@@ -312,15 +313,17 @@ declare class ReviveClientWrapper {
312
313
  expectedNonce: number;
313
314
  };
314
315
  verifyEffect?: () => Promise<boolean>;
316
+ feeAsset?: "pgas";
315
317
  }): Promise<TxResolution>;
316
318
  private dryRunReviveCall;
317
- submitTransaction(contractAddress: string, value: bigint, encodedData: string, signerSubstrateAddress: string, signer: PolkadotSigner, statusCallback: (status: string) => void, { rpcs, useNoncePolling, functionName, args, contracts, verifyEffect }: {
319
+ submitTransaction(contractAddress: string, value: bigint, encodedData: string, signerSubstrateAddress: string, signer: PolkadotSigner, statusCallback: (status: string) => void, { rpcs, useNoncePolling, functionName, args, contracts, verifyEffect, feeAsset }: {
318
320
  rpcs: string[];
319
321
  useNoncePolling?: boolean;
320
322
  functionName?: string;
321
323
  args?: unknown[];
322
324
  contracts?: Record<string, string>;
323
325
  verifyEffect?: () => Promise<boolean>;
326
+ feeAsset?: "pgas";
324
327
  }): Promise<TxResolution>;
325
328
  submitBatchedTransactions(calls: {
326
329
  contractAddress: string;
@@ -465,9 +468,10 @@ declare class DotNS {
465
468
  * for read paths that must always return a value.
466
469
  */
467
470
  contractCallNullable(contractAddress: string, contractAbi: readonly any[], functionName: string, args?: any[]): Promise<any | null>;
468
- contractTransaction(contractAddress: string, value: bigint, contractAbi: readonly any[], functionName: string, args?: any[], statusCallback?: (status: string) => void, { useNoncePolling, verifyEffect }?: {
471
+ contractTransaction(contractAddress: string, value: bigint, contractAbi: readonly any[], functionName: string, args?: any[], statusCallback?: (status: string) => void, { useNoncePolling, verifyEffect, feeAsset }?: {
469
472
  useNoncePolling?: boolean;
470
473
  verifyEffect?: () => Promise<boolean>;
474
+ feeAsset?: "pgas";
471
475
  }): Promise<TxResolution>;
472
476
  checkOwnership(label: string, ownerAddress?: string | null): Promise<OwnershipResult>;
473
477
  /** Live transfer-fee quote. transferFloor is a pure PopRules view — it
@@ -504,7 +508,9 @@ declare class DotNS {
504
508
  * registry/resolver writes are similarly sized.
505
509
  */
506
510
  private submitBatchedContractCalls;
507
- setContenthash(domainName: string, contenthashHex: string): Promise<{
511
+ setContenthash(domainName: string, contenthashHex: string, opts?: {
512
+ feeAsset?: "pgas";
513
+ }): Promise<{
508
514
  node: string;
509
515
  }>;
510
516
  /**
package/dist/dotns.js CHANGED
@@ -54,11 +54,12 @@ import {
54
54
  validateDomainLabel,
55
55
  verifyNonceAdvanced,
56
56
  weiToNative
57
- } from "./chunk-VR3LF62E.js";
57
+ } from "./chunk-I7UEBFP5.js";
58
+ import "./chunk-SI2ZUOYD.js";
58
59
  import "./chunk-4PVJ2JBZ.js";
59
- import "./chunk-2BTYPNYW.js";
60
- import "./chunk-ZJCTG7HF.js";
61
- import "./chunk-GL3U7K2B.js";
60
+ import "./chunk-4D6STP5G.js";
61
+ import "./chunk-WM5R4O33.js";
62
+ import "./chunk-QRKI6MMK.js";
62
63
  import "./chunk-ZOC4GITL.js";
63
64
  export {
64
65
  ATTR_TX_RESOLUTION_KIND,
@@ -9,7 +9,7 @@ import {
9
9
  loadEnvironments,
10
10
  resolveEndpoints,
11
11
  validateContractAddresses
12
- } from "./chunk-GL3U7K2B.js";
12
+ } from "./chunk-QRKI6MMK.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-MMAZFJDG.js";
5
5
  import {
6
6
  publishManifest
7
- } from "./chunk-Q3RIJ7PU.js";
7
+ } from "./chunk-XX6LNB74.js";
8
8
  import {
9
9
  validateExecutableManifest,
10
10
  validateProductConfig,
@@ -24,8 +24,8 @@ import {
24
24
  deploy,
25
25
  merkleizeJS,
26
26
  merkleizeWithStableOrder
27
- } from "./chunk-DY7RVMM5.js";
28
- import "./chunk-GJTVPP7E.js";
27
+ } from "./chunk-C74YSAWC.js";
28
+ import "./chunk-UJJQME5K.js";
29
29
  import "./chunk-GRPLHUYC.js";
30
30
  import "./chunk-HOTQDYHD.js";
31
31
  import {
@@ -49,19 +49,20 @@ import {
49
49
  isVolatilePath,
50
50
  parseManifest
51
51
  } from "./chunk-S7EM5VMW.js";
52
- import "./chunk-PKQOUCPD.js";
53
- import "./chunk-G676QAN4.js";
54
- import "./chunk-MI5B3UCM.js";
52
+ import "./chunk-SXWFDMFT.js";
53
+ import "./chunk-V5VD5CIC.js";
54
+ import "./chunk-EHQPRWGC.js";
55
55
  import {
56
56
  probeChunks
57
- } from "./chunk-HUT626G6.js";
57
+ } from "./chunk-LYWIW6WU.js";
58
58
  import "./chunk-C2TS5MER.js";
59
59
  import {
60
60
  DEFAULT_MNEMONIC,
61
61
  DotNS,
62
62
  parseDomainName,
63
63
  sanitizeDomainLabel
64
- } from "./chunk-VR3LF62E.js";
64
+ } from "./chunk-I7UEBFP5.js";
65
+ import "./chunk-SI2ZUOYD.js";
65
66
  import {
66
67
  bootstrapPool,
67
68
  derivePoolAccounts,
@@ -69,7 +70,7 @@ import {
69
70
  fetchPoolAuthorizations,
70
71
  selectAccount
71
72
  } from "./chunk-4PVJ2JBZ.js";
72
- import "./chunk-2BTYPNYW.js";
73
+ import "./chunk-4D6STP5G.js";
73
74
  import {
74
75
  VERSION,
75
76
  loadRunState,
@@ -79,7 +80,7 @@ import {
79
80
  shouldSkipStaleWarning,
80
81
  stateFilePath,
81
82
  writeRunState
82
- } from "./chunk-ZJCTG7HF.js";
83
+ } from "./chunk-WM5R4O33.js";
83
84
  import {
84
85
  DEFAULT_ENV_ID,
85
86
  deepMergeEnvironments,
@@ -90,7 +91,7 @@ import {
90
91
  loadEnvironments,
91
92
  resolveEndpoints,
92
93
  validateContractAddresses
93
- } from "./chunk-GL3U7K2B.js";
94
+ } from "./chunk-QRKI6MMK.js";
94
95
  import "./chunk-ZOC4GITL.js";
95
96
  export {
96
97
  DEFAULT_ENV_ID,
@@ -1,25 +1,26 @@
1
1
  import {
2
2
  publishManifest
3
- } from "../chunk-Q3RIJ7PU.js";
3
+ } from "../chunk-XX6LNB74.js";
4
4
  import "../chunk-RI3ZLNPN.js";
5
- import "../chunk-DY7RVMM5.js";
6
- import "../chunk-GJTVPP7E.js";
5
+ import "../chunk-C74YSAWC.js";
6
+ import "../chunk-UJJQME5K.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-PKQOUCPD.js";
14
- import "../chunk-G676QAN4.js";
15
- import "../chunk-MI5B3UCM.js";
16
- import "../chunk-HUT626G6.js";
13
+ import "../chunk-SXWFDMFT.js";
14
+ import "../chunk-V5VD5CIC.js";
15
+ import "../chunk-EHQPRWGC.js";
16
+ import "../chunk-LYWIW6WU.js";
17
17
  import "../chunk-C2TS5MER.js";
18
- import "../chunk-VR3LF62E.js";
18
+ import "../chunk-I7UEBFP5.js";
19
+ import "../chunk-SI2ZUOYD.js";
19
20
  import "../chunk-4PVJ2JBZ.js";
20
- import "../chunk-2BTYPNYW.js";
21
- import "../chunk-ZJCTG7HF.js";
22
- import "../chunk-GL3U7K2B.js";
21
+ import "../chunk-4D6STP5G.js";
22
+ import "../chunk-WM5R4O33.js";
23
+ import "../chunk-QRKI6MMK.js";
23
24
  import "../chunk-ZOC4GITL.js";
24
25
  export {
25
26
  publishManifest
@@ -5,8 +5,8 @@ import {
5
5
  maybeWriteMemoryReport,
6
6
  safeHeap,
7
7
  sampleFromBytes
8
- } from "./chunk-2BTYPNYW.js";
9
- import "./chunk-ZJCTG7HF.js";
8
+ } from "./chunk-4D6STP5G.js";
9
+ import "./chunk-WM5R4O33.js";
10
10
  export {
11
11
  DEFAULT_THRESHOLD_MB,
12
12
  buildMemoryReport,
package/dist/merkle.js CHANGED
@@ -6,24 +6,25 @@ import {
6
6
  merkleizeKuboBackend,
7
7
  merkleizeWithStableOrder,
8
8
  rebuildOrderedCarFromBytes
9
- } from "./chunk-DY7RVMM5.js";
10
- import "./chunk-GJTVPP7E.js";
9
+ } from "./chunk-C74YSAWC.js";
10
+ import "./chunk-UJJQME5K.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-PKQOUCPD.js";
18
- import "./chunk-G676QAN4.js";
19
- import "./chunk-MI5B3UCM.js";
20
- import "./chunk-HUT626G6.js";
17
+ import "./chunk-SXWFDMFT.js";
18
+ import "./chunk-V5VD5CIC.js";
19
+ import "./chunk-EHQPRWGC.js";
20
+ import "./chunk-LYWIW6WU.js";
21
21
  import "./chunk-C2TS5MER.js";
22
- import "./chunk-VR3LF62E.js";
22
+ import "./chunk-I7UEBFP5.js";
23
+ import "./chunk-SI2ZUOYD.js";
23
24
  import "./chunk-4PVJ2JBZ.js";
24
- import "./chunk-2BTYPNYW.js";
25
- import "./chunk-ZJCTG7HF.js";
26
- import "./chunk-GL3U7K2B.js";
25
+ import "./chunk-4D6STP5G.js";
26
+ import "./chunk-WM5R4O33.js";
27
+ import "./chunk-QRKI6MMK.js";
27
28
  import "./chunk-ZOC4GITL.js";
28
29
  export {
29
30
  buildOrderedCar,
@@ -19,20 +19,20 @@ import {
19
19
  import {
20
20
  runChainPrereqProbes
21
21
  } from "../chunk-XAB7WM3S.js";
22
+ import {
23
+ WS_HEARTBEAT_TIMEOUT_MS
24
+ } from "../chunk-I7UEBFP5.js";
22
25
  import {
23
26
  DOTNS_CONTEXT_BYTES,
24
27
  PEOPLE_MEMBER_IDENTIFIER_HEX,
25
28
  PGAS_ASSET_ID
26
29
  } from "../chunk-SI2ZUOYD.js";
27
- import {
28
- WS_HEARTBEAT_TIMEOUT_MS
29
- } from "../chunk-VR3LF62E.js";
30
30
  import "../chunk-4PVJ2JBZ.js";
31
- import "../chunk-2BTYPNYW.js";
32
- import "../chunk-ZJCTG7HF.js";
31
+ import "../chunk-4D6STP5G.js";
32
+ import "../chunk-WM5R4O33.js";
33
33
  import {
34
34
  loadEnvironments
35
- } from "../chunk-GL3U7K2B.js";
35
+ } from "../chunk-QRKI6MMK.js";
36
36
  import "../chunk-ZOC4GITL.js";
37
37
 
38
38
  // src/personhood/bootstrap.ts
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  WS_HEARTBEAT_TIMEOUT_MS
3
- } from "../chunk-VR3LF62E.js";
3
+ } from "../chunk-I7UEBFP5.js";
4
+ import "../chunk-SI2ZUOYD.js";
4
5
  import "../chunk-4PVJ2JBZ.js";
5
- import "../chunk-2BTYPNYW.js";
6
- import "../chunk-ZJCTG7HF.js";
6
+ import "../chunk-4D6STP5G.js";
7
+ import "../chunk-WM5R4O33.js";
7
8
  import {
8
9
  loadEnvironments
9
- } from "../chunk-GL3U7K2B.js";
10
+ } from "../chunk-QRKI6MMK.js";
10
11
  import "../chunk-ZOC4GITL.js";
11
12
 
12
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-ZJCTG7HF.js";
10
+ } from "./chunk-WM5R4O33.js";
11
11
  export {
12
12
  VERSION,
13
13
  loadRunState,
@@ -1,6 +1,6 @@
1
1
  import { DevAccountName } from '@parity/product-sdk-tx';
2
2
  import { PolkadotSigner } from 'polkadot-api';
3
- import { h as SessionHandle, S as SessionAddresses, c as AuthClient } from './auth-C-Pel0AT.js';
3
+ import { e as SessionHandle, S as SessionAddresses, A as AuthClient } from './auth-CA_YKtM2.js';
4
4
 
5
5
  type SignerSource = "dev" | "session";
6
6
  interface ResolvedSigner {
@@ -4,12 +4,12 @@ import {
4
4
  preflightSssAllowance,
5
5
  sssPeriodEndSec,
6
6
  writeSssAllowanceCache
7
- } from "./chunk-GJTVPP7E.js";
7
+ } from "./chunk-UJJQME5K.js";
8
8
  import "./chunk-GRPLHUYC.js";
9
- import "./chunk-PKQOUCPD.js";
10
- import "./chunk-2BTYPNYW.js";
11
- import "./chunk-ZJCTG7HF.js";
12
- import "./chunk-GL3U7K2B.js";
9
+ import "./chunk-SXWFDMFT.js";
10
+ import "./chunk-4D6STP5G.js";
11
+ import "./chunk-WM5R4O33.js";
12
+ import "./chunk-QRKI6MMK.js";
13
13
  import "./chunk-ZOC4GITL.js";
14
14
  export {
15
15
  clearSssAllowanceCache,
@@ -7,24 +7,25 @@ import {
7
7
  readBulletinSlotSigner,
8
8
  waitForBulletinAuthorization,
9
9
  writeBulletinSlotKey
10
- } from "./chunk-DY7RVMM5.js";
11
- import "./chunk-GJTVPP7E.js";
10
+ } from "./chunk-C74YSAWC.js";
11
+ import "./chunk-UJJQME5K.js";
12
12
  import "./chunk-GRPLHUYC.js";
13
13
  import "./chunk-HOTQDYHD.js";
14
14
  import "./chunk-IW3X2MJF.js";
15
15
  import "./chunk-KOSF5FDO.js";
16
16
  import "./chunk-J3NIXHZZ.js";
17
17
  import "./chunk-S7EM5VMW.js";
18
- import "./chunk-PKQOUCPD.js";
19
- import "./chunk-G676QAN4.js";
20
- import "./chunk-MI5B3UCM.js";
21
- import "./chunk-HUT626G6.js";
18
+ import "./chunk-SXWFDMFT.js";
19
+ import "./chunk-V5VD5CIC.js";
20
+ import "./chunk-EHQPRWGC.js";
21
+ import "./chunk-LYWIW6WU.js";
22
22
  import "./chunk-C2TS5MER.js";
23
- import "./chunk-VR3LF62E.js";
23
+ import "./chunk-I7UEBFP5.js";
24
+ import "./chunk-SI2ZUOYD.js";
24
25
  import "./chunk-4PVJ2JBZ.js";
25
- import "./chunk-2BTYPNYW.js";
26
- import "./chunk-ZJCTG7HF.js";
27
- import "./chunk-GL3U7K2B.js";
26
+ import "./chunk-4D6STP5G.js";
27
+ import "./chunk-WM5R4O33.js";
28
+ import "./chunk-QRKI6MMK.js";
28
29
  import "./chunk-ZOC4GITL.js";
29
30
  export {
30
31
  BulletinSlotAuthError,
@@ -35,6 +35,22 @@ interface InternalContextSignals {
35
35
  }
36
36
  declare function isInternalContextFromSignals(signals: InternalContextSignals): boolean;
37
37
  declare function isInternalContext(): boolean;
38
+ /**
39
+ * Pure decision function for whether telemetry is disabled.
40
+ *
41
+ * Precedence (highest to lowest):
42
+ * 1. optOut (BULLETIN_DEPLOY_TELEMETRY=0/off) → always disabled
43
+ * 2. optIn (BULLETIN_DEPLOY_TELEMETRY=1) → enabled, overrides DO_NOT_TRACK
44
+ * 3. doNotTrack (DO_NOT_TRACK=1) → disabled
45
+ * 4. internalContext (Parity CI / internal org) → enabled
46
+ * 5. default → disabled (telemetry is off for external users)
47
+ */
48
+ declare function isTelemetryDisabled(s: {
49
+ optIn: boolean;
50
+ optOut: boolean;
51
+ doNotTrack: boolean;
52
+ internalContext: boolean;
53
+ }): boolean;
38
54
  declare function scrubPaths(msg: string): string;
39
55
  declare function truncateAddress(ss58: string | undefined): string | undefined;
40
56
  declare function sanitizeBranch(name: string | undefined): string | undefined;
@@ -95,4 +111,4 @@ declare function markCodePath(id: CodePath): void;
95
111
  declare function captureWarning(message: string, context?: Record<string, unknown>): void;
96
112
  declare function flush(): Promise<void>;
97
113
 
98
- export { type DeployErrorCategory, type DeployErrorKind, type InternalContextSignals, VERSION, __setDeployRootSpanForTest, __setSentryForTest, analyseErrorPattern, captureWarning, classifyDeployError, classifyErrorKind, classifySadReason, closeTelemetry, computeDeployOutcome, flush, getCurrentSentryTraceId, getDeployAttributes, initTelemetry, isExpectedError, isInternalContext, isInternalContextFromSignals, markCodePath, markRelaunchOomHintShown, resolveRepo, resolveRunner, resolveRunnerType, sampleMemory, sanitizeBranch, sanitizeErrorMessage, sanitizeRepo, scrubPaths, setDeployAttribute, setDeployReportContext, setDeploySentryTag, setRunStateActive, truncateAddress, withDeploySpan, withSpan };
114
+ export { type DeployErrorCategory, type DeployErrorKind, type InternalContextSignals, VERSION, __setDeployRootSpanForTest, __setSentryForTest, analyseErrorPattern, captureWarning, classifyDeployError, classifyErrorKind, classifySadReason, closeTelemetry, computeDeployOutcome, flush, getCurrentSentryTraceId, getDeployAttributes, initTelemetry, isExpectedError, isInternalContext, isInternalContextFromSignals, isTelemetryDisabled, markCodePath, markRelaunchOomHintShown, resolveRepo, resolveRunner, resolveRunnerType, sampleMemory, sanitizeBranch, sanitizeErrorMessage, sanitizeRepo, scrubPaths, setDeployAttribute, setDeployReportContext, setDeploySentryTag, setRunStateActive, truncateAddress, withDeploySpan, withSpan };
package/dist/telemetry.js CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  isExpectedError,
17
17
  isInternalContext,
18
18
  isInternalContextFromSignals,
19
+ isTelemetryDisabled,
19
20
  markCodePath,
20
21
  markRelaunchOomHintShown,
21
22
  resolveRepo,
@@ -33,8 +34,8 @@ import {
33
34
  truncateAddress,
34
35
  withDeploySpan,
35
36
  withSpan
36
- } from "./chunk-2BTYPNYW.js";
37
- import "./chunk-ZJCTG7HF.js";
37
+ } from "./chunk-4D6STP5G.js";
38
+ import "./chunk-WM5R4O33.js";
38
39
  export {
39
40
  VERSION,
40
41
  __setDeployRootSpanForTest,
@@ -53,6 +54,7 @@ export {
53
54
  isExpectedError,
54
55
  isInternalContext,
55
56
  isInternalContextFromSignals,
57
+ isTelemetryDisabled,
56
58
  markCodePath,
57
59
  markRelaunchOomHintShown,
58
60
  resolveRepo,
@@ -11,9 +11,9 @@ import {
11
11
  isPreReleaseVersion,
12
12
  preReleaseWarning,
13
13
  promptYesNo
14
- } from "./chunk-MI5B3UCM.js";
15
- import "./chunk-2BTYPNYW.js";
16
- import "./chunk-ZJCTG7HF.js";
14
+ } from "./chunk-EHQPRWGC.js";
15
+ import "./chunk-4D6STP5G.js";
16
+ import "./chunk-WM5R4O33.js";
17
17
  export {
18
18
  assessVersion,
19
19
  checkNodeVersion,
package/docs/bootstrap.md CHANGED
@@ -45,5 +45,5 @@ bulletin-bootstrap --mnemonic "..."
45
45
 
46
46
  ## Related Docs
47
47
 
48
- - [Main README](../docs-internal/README.dev.md)
48
+ - [Main README](../README.md)
49
49
  - [E2E test setup](./e2e-bootstrap.md)
@@ -1,11 +1,33 @@
1
1
  # E2E test setup
2
2
 
3
+ > This is a **contributor** guide for running the live-testnet E2E suite. If you only want to deploy your own app, see [DEPLOYMENT.md](../DEPLOYMENT.md) instead.
4
+
3
5
  The E2E suite (`test/e2e.test.js`, driven by `.github/workflows/e2e.yml`) deploys real content to Paseo Bulletin testnet via `bulletin-deploy` and verifies the on-chain round-trip. It consumes the **shared default pool** (derived from `DEV_PHRASE` — the same pool real users hit in production) for Bulletin chunk upload, so no pool bootstrapping is required.
4
6
 
5
7
  Three one-time setup items are needed before the workflow can pass. Do them once per testnet lifetime (redo if testnet is wiped).
6
8
 
7
9
  ---
8
10
 
11
+ ## Chain-admin prerequisites
12
+
13
+ Some of this setup needs authority a normal contributor doesn't have — the Bulletin chain's storage **authorizer** key, the DotNS `POP_RULES` contract **owner**, and (on faucet-less testnets) a funding source. A network operator ensures the following before the suite can pass. The check commands are read-only and safe to run anytime; the grant tools are idempotent — they report current status and do only what is missing.
14
+
15
+ 1. **Personhood (PoP) status.** Registering a PoP-Full base label (e.g. `e2epool.dot`) requires Full Personhood on the DotNS Personhood precompile — Alice for the happy-path scenarios, and Bob once for the `e2eowned.dot` S3 fixture. NoStatus fallback labels (e.g. `e2epoolns01.dot`) need no grant; they auto-register on first deploy.
16
+ - Check: `node tools/check-pop-status.mjs --env <id>`
17
+ - Grant: by the `POP_RULES` contract owner — request via an issue on [paritytech/dotns](https://github.com/paritytech/dotns/issues). `bulletin-deploy` cannot self-upgrade a signer.
18
+
19
+ 2. **Asset Hub funding (DotNS fees).** The accounts that register or transfer names need a balance on the target Asset Hub.
20
+ - Check: `node tools/check-balances.mjs --env <id>` (shows balances and Bulletin authorization quota for every E2E signer in one pass)
21
+ - Grant: on Paseo, use the public faucet at [https://faucet.polkadot.io/](https://faucet.polkadot.io/). `paseo-next-v2` has no public faucet — the operator funds the accounts out of band.
22
+
23
+ 3. **Bulletin storage authorization (upload allowance).** Every account that uploads chunks must carry a `TransactionStorage` authorization; `bulletin-deploy` never self-authorizes. On testnet the authorizer is `//Alice`.
24
+ - Check: `node tools/check-bulletin-auth.mjs --env <id>`
25
+ - Grant: **pool accounts** via `bulletin-bootstrap --env <id>` (authorizes and funds them); **direct-mode signers** (the per-shard `//e2e-*` derivation paths) via `node tools/setup-e2e-derivation-signers.mjs --env <id>`. Alice is the authorizer itself, and Bob only owns the S3 fixture name (never uploads), so neither needs its own storage grant.
26
+
27
+ The per-environment sections below are the step-by-step procedures that satisfy these.
28
+
29
+ ---
30
+
9
31
  ## Paseo (stable testnet)
10
32
 
11
33
  ### Prerequisites
@@ -22,7 +44,7 @@ Both happy-path scenarios (S1, S2) deploy as Alice via DotNS. Registering a new
22
44
  node tools/check-pop-status.mjs
23
45
  ```
24
46
 
25
- Re-run if the check cannot read Alice's status. Self-attestation is no longer available; ask the DotNS team to whitelist the signer if Alice needs a higher status for a label class.
47
+ Re-run if the check cannot read Alice's status. Self-attestation is no longer available; a signer's Personhood status is granted by the `POP_RULES` contract owner. To request a status grant (whitelisting) for a signer, open an issue on [paritytech/dotns](https://github.com/paritytech/dotns/issues).
26
48
 
27
49
  ### 2. Fund and map Bob on Asset Hub Paseo
28
50
 
@@ -42,7 +64,7 @@ Expected output: Bob's SS58, his H160 (`0x41dccbd49b26c50d34355ed86ff0fa9e489d1e
42
64
  The S3 negative scenario asserts that `bulletin-deploy` refuses to deploy to a domain owned by a different account (exit 78 with transfer guidance). Have Bob register the label with a DotNS registration tool outside `bulletin-deploy` — no Alice intermediary, no Bulletin content needed (S3 never reads content).
43
65
 
44
66
  ```bash
45
- node tools/register-test-fixture-paseo-next-v2.mjs e2eowned
67
+ node tools/register-test-fixture.mjs e2eowned
46
68
  ```
47
69
 
48
70
  Expected: `e2eowned.dot` is owned by Bob's H160 `0x41dccbd49b26c50d34355ed86ff0fa9e489d1e01`. The `e2eowned.dot` label requires PoP Full status and a mature commitment (the tool waits 30s after the minimum commitment age). The tool is idempotent: it exits 0 immediately if Bob already owns it, and transfers the label from Alice back to Bob if fixture drift is detected.
@@ -55,14 +77,14 @@ If S3 ever fails because `e2eowned.dot` was transferred back to Alice by mistake
55
77
 
56
78
  Paseo Next v2 uses a separate Asset Hub (`wss://paseo-asset-hub-next-rpc.polkadot.io`) and Bulletin chain (`wss://paseo-bulletin-next-rpc.polkadot.io`) with different contract addresses. The `map_account` extrinsic does not exist on this chain — account mapping is triggered automatically when an account submits its first on-chain transaction.
57
79
 
58
- > **Note on PoP grants:** The paseo-next-v2 `POP_RULES` contract (`0x2002C1c15b88632Ad01c7770f6EbE1Ca05c8472E`) is **not permissionless** — `setUserPopStatus` can only be called by the contract owner (`0x4a519c30da0ec16aa9a73c26ea6ca6f701cce099`). `bulletin-deploy` itself cannot upgrade a signer; the chain team flips the Personhood precompile out of band. CI scenarios pick labels via `pickStableLabel`/`pickDirectLabel`/`pickIncLabel`/`pickRotLabel`, which auto-select between a PoP-Full base name (e.g. `e2epool.dot`) and a NoStatus fallback (e.g. `e2epoolns01.dot`) based on what `Personhood.personhoodStatus(<signer>)` returns at test start. The setup below covers both modes.
80
+ > **Note on PoP grants:** The paseo-next-v2 `POP_RULES` contract (`0x2002C1c15b88632Ad01c7770f6EbE1Ca05c8472E`) is **not permissionless** — `setUserPopStatus` can only be called by its owner. `bulletin-deploy` cannot upgrade a signer itself; a status grant (whitelisting) is performed out of band by the contract owner. To request one for a signer, open an issue on [paritytech/dotns](https://github.com/paritytech/dotns/issues). CI scenarios pick labels via `pickStableLabel`/`pickDirectLabel`/`pickIncLabel`/`pickRotLabel`, which auto-select between a PoP-Full base name (e.g. `e2epool.dot`) and a NoStatus fallback (e.g. `e2epoolns01.dot`) based on what `Personhood.personhoodStatus(<signer>)` returns at test start. The setup below covers both modes.
59
81
 
60
- > **⚠ Testnet wipes reset everything.** When paseo-next-v2 is reset (which happens periodically), Alice's Personhood precompile status drops to NoStatus *and* every `e2e*.dot` registration is gone. Re-run the relevant steps below after each wipe — there is no on-chain self-recovery. Issue #381 traces back to exactly this: Alice's status came back as Full but `e2epool.dot` was unregistered, so `setContenthash` reverted with `ERC721NonexistentToken`. As long as ownership stays in lockstep with Alice's PoP grade (Full ↔ PoP-Full labels registered; NoStatus ↔ NoStatus labels auto-register on first deploy), the nightly stays green.
82
+ > **⚠ Testnet wipes reset everything.** When paseo-next-v2 is reset (which happens periodically), Alice's Personhood precompile status drops to NoStatus *and* every `e2e*.dot` registration is gone. Re-run the relevant steps below after each wipe — there is no on-chain self-recovery. A subtle failure mode to watch for: Alice's status can come back as Full while `e2epool.dot` is unregistered, so `setContenthash` reverts with `ERC721NonexistentToken`. As long as ownership stays in lockstep with Alice's PoP grade (Full ↔ PoP-Full labels registered; NoStatus ↔ NoStatus labels auto-register on first deploy), the nightly stays green.
61
83
 
62
84
  ### Prerequisites
63
85
 
64
86
  - `bulletin-deploy` built locally (`npm run build`).
65
- - Alice (`5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV`) funded on paseo-next-v2 Asset Hub. The chain team must send funds manuallythere is no public faucet for this chain.
87
+ - Alice (`5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV`) funded on paseo-next-v2 Asset Hub. This is a restricted testnet with no public faucet the account must be funded out of band by the network operator.
66
88
 
67
89
  ### 1. Authorize pool accounts on Bulletin Next
68
90
 
@@ -81,7 +103,7 @@ node tools/check-pop-status.mjs --env paseo-next-v2
81
103
  What you see decides which labels need pre-registration:
82
104
 
83
105
  - **`NoStatus (0)`** → no extra work. The tests pick the NoStatus fallback labels (`e2epoolns01`, `e2edirect01`, `e2eincpool01`, `e2erotpool01`) which auto-register on first deploy because their shape (base length ≥ 9 with two trailing digits) bypasses the `Requires Full personhood verification` gate.
84
- - **`ProofOfPersonhoodFull (2)`** → the chain team has flipped Alice on the Personhood precompile. The tests will now pick the PoP-Full stable labels (`e2epool`, `e2edirect`, `e2einc`, `e2erot`), and those **must already be registered to Alice** before the matrix runs. Register them once:
106
+ - **`ProofOfPersonhoodFull (2)`** → Alice has been flipped to Full on the Personhood precompile. The tests will now pick the PoP-Full stable labels (`e2epool`, `e2edirect`, `e2einc`, `e2erot`), and those **must already be registered to Alice** before the matrix runs. Register them once:
85
107
 
86
108
  ```bash
87
109
  # Pre-built fixture is fine — it's the contenthash, not the content, that the tests overwrite.
@@ -90,11 +112,11 @@ What you see decides which labels need pre-registration:
90
112
  done
91
113
  ```
92
114
 
93
- Skipping this leaves `setContenthash` reverting with `ERC721NonexistentToken` on whichever PoP-Full label the scenario picks (issue #381).
115
+ Skipping this leaves `setContenthash` reverting with `ERC721NonexistentToken` on whichever PoP-Full label the scenario picks.
94
116
 
95
117
  ### 3. Fund Bob and trigger his account mapping
96
118
 
97
- Bob (`5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty`) needs PAS on paseo-next-v2 Asset Hub so he can pay fees for the `e2eowned.dot` registration. Have the chain team send ~1 PAS to his SS58 address. His H160 mapping (`0x41dccbd49b26c50d34355ed86ff0fa9e489d1e01`) is triggered automatically when he submits his first on-chain tx.
119
+ Bob (`5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty`) needs PAS on paseo-next-v2 Asset Hub so he can pay fees for the `e2eowned.dot` registration. As above, this testnet has no public faucet — fund his SS58 address (~1 PAS) out of band. His H160 mapping (`0x41dccbd49b26c50d34355ed86ff0fa9e489d1e01`) is triggered automatically when he submits his first on-chain tx.
98
120
 
99
121
  Verify his mapping:
100
122
 
@@ -107,14 +129,14 @@ Expected output: Bob's SS58, his H160 (`0x41dccbd49b26c50d34355ed86ff0fa9e489d1e
107
129
 
108
130
  ### 4. Verify Bob PoP status
109
131
 
110
- Bob owns both `e2eownedns02.dot` (NoStatus, used by S3 when Alice is NoStatus) and `e2eowned.dot` (PoP-Full, used by S3 when the Personhood precompile has flipped Alice to Full). The NoStatus branch needs no admin help; the PoP-Full branch needed Bob to register it back when the chain team granted him Full status once. After that one-shot registration the label persists until expiry, so Bob can stay NoStatus going forward — ownership and PoP-grade are decoupled after registration.
132
+ Bob owns both `e2eownedns02.dot` (NoStatus, used by S3 when Alice is NoStatus) and `e2eowned.dot` (PoP-Full, used by S3 when the Personhood precompile has flipped Alice to Full). The NoStatus branch needs no admin help; the PoP-Full branch needed Bob to register it back when he was granted Full status once. After that one-shot registration the label persists until expiry, so Bob can stay NoStatus going forward — ownership and PoP-grade are decoupled after registration.
111
133
 
112
134
  ### 5. Register `e2eownedns02.dot` directly as Bob
113
135
 
114
136
  Register the domain using the dedicated tool:
115
137
 
116
138
  ```bash
117
- node tools/register-test-fixture-paseo-next-v2.mjs e2eownedns02
139
+ node tools/register-test-fixture.mjs e2eownedns02
118
140
  ```
119
141
 
120
142
  Expected: `e2eownedns02.dot` is owned by Bob (`0x41dccbd49b26c50d34355ed86ff0fa9e489d1e01`).
@@ -126,8 +148,8 @@ S3 picks `e2eowned.dot` when Alice is PoP-Full at test start. If the label is un
126
148
 
127
149
  If Bob already owns it (`ownerOf` on `DOTNS_REGISTRAR` returns `0x41dccbd…`), skip. Otherwise:
128
150
 
129
- - **If nobody owns it yet:** registration needs Bob to hold Full PoP. Coordinate with the chain team to flip Bob's Personhood precompile to Full, then run `node tools/register-e2eowned-paseo-next-v2.mjs` (the script targets Bob via `//Bob`). After registration Bob can drop back to NoStatus.
130
- - **If Alice (or anyone other than Bob) is squatting:** the owner can call `transferFrom(<current>, Bob, tokenId)` on `DOTNS_REGISTRAR`. ERC721 transfer is unconditional on the recipient (no PoP check) and doesn't need Bob's signer. `tools/transfer-e2eowned-to-bob.mjs` does this for Alice → Bob in one shot (was added to recover from a botched PR-CI run on 2026-05-17, see issue #381 thread).
151
+ - **If nobody owns it yet:** registration needs Bob to hold Full PoP. Request Full PoP for Bob by opening an issue on [paritytech/dotns](https://github.com/paritytech/dotns/issues), then run `node tools/register-test-fixture.mjs e2eowned` (registers the label as Bob via `//Bob`). After registration Bob can drop back to NoStatus.
152
+ - **If Alice (or anyone other than Bob) is squatting:** the owner can call `transferFrom(<current>, Bob, tokenId)` on `DOTNS_REGISTRAR`. ERC721 transfer is unconditional on the recipient (no PoP check) and doesn't need Bob's signer. Run `node tools/transfer-dotns-name.mjs --label e2eowned --to 0x41dccbd49b26c50d34355ed86ff0fa9e489d1e01 --env paseo-next-v2` to do this for Alice → Bob in one shot.
131
153
 
132
154
  ---
133
155