@parity/product-deploy 0.8.1 → 0.8.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 (39) hide show
  1. package/README.md +2 -230
  2. package/assets/environments.json +6 -0
  3. package/bin/bulletin-deploy +15 -1
  4. package/dist/bug-report.js +4 -4
  5. package/dist/{chunk-IRT4A7OO.js → chunk-2GBSYVK2.js} +139 -31
  6. package/dist/{chunk-CNPB4VAM.js → chunk-5K3RI5C2.js} +71 -0
  7. package/dist/{chunk-O2BFXY3Y.js → chunk-EJWZGSHD.js} +1 -1
  8. package/dist/{chunk-MXMVZU2Q.js → chunk-H64ZLWW2.js} +2 -2
  9. package/dist/{chunk-WPJADKC7.js → chunk-HPPLVGGC.js} +73 -42
  10. package/dist/{chunk-L2SKSKB6.js → chunk-J3NIXHZZ.js} +108 -0
  11. package/dist/{chunk-RW3GWDGI.js → chunk-JQ5X3VMP.js} +15 -102
  12. package/dist/{chunk-V5N5EYNV.js → chunk-NJPBXF5Z.js} +6 -3
  13. package/dist/{chunk-INVA3XGG.js → chunk-RIAMPAL2.js} +88 -77
  14. package/dist/{chunk-R2CJ5I5R.js → chunk-TQC3S6NP.js} +3 -3
  15. package/dist/{chunk-KB3EII7F.js → chunk-WSBDIHFZ.js} +1 -1
  16. package/dist/chunk-probe.js +3 -3
  17. package/dist/deploy.d.ts +38 -1
  18. package/dist/deploy.js +16 -10
  19. package/dist/dotns.d.ts +33 -2
  20. package/dist/dotns.js +9 -5
  21. package/dist/environments.d.ts +17 -4
  22. package/dist/environments.js +3 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +13 -11
  25. package/dist/manifest/publish.js +11 -11
  26. package/dist/manifest-fetch.d.ts +22 -1
  27. package/dist/manifest-fetch.js +7 -1
  28. package/dist/manifest-roundtrip.js +1 -1
  29. package/dist/memory-report.js +2 -2
  30. package/dist/merkle.js +10 -10
  31. package/dist/personhood/bootstrap.js +5 -5
  32. package/dist/personhood/people-client.js +5 -5
  33. package/dist/pool.d.ts +2 -12
  34. package/dist/pool.js +3 -11
  35. package/dist/run-state.js +1 -1
  36. package/dist/telemetry.js +2 -2
  37. package/dist/version-check.js +3 -3
  38. package/docs/bootstrap.md +1 -1
  39. package/package.json +6 -3
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-MMAZFJDG.js";
8
8
  import {
9
9
  publishManifest
10
- } from "./chunk-R2CJ5I5R.js";
10
+ } from "./chunk-TQC3S6NP.js";
11
11
  import {
12
12
  DEFAULT_TEXT_RECORD_BUDGET_BYTES,
13
13
  PLACEHOLDER_CID,
@@ -24,7 +24,7 @@ import {
24
24
  deploy,
25
25
  merkleizeJS,
26
26
  merkleizeWithStableOrder
27
- } from "./chunk-WPJADKC7.js";
27
+ } from "./chunk-HPPLVGGC.js";
28
28
  import {
29
29
  computeStats,
30
30
  renderSummary,
@@ -36,7 +36,7 @@ import {
36
36
  } from "./chunk-KOSF5FDO.js";
37
37
  import {
38
38
  fetchPreviousManifest
39
- } from "./chunk-L2SKSKB6.js";
39
+ } from "./chunk-J3NIXHZZ.js";
40
40
  import {
41
41
  MANIFEST_DIR,
42
42
  MANIFEST_FILENAME,
@@ -46,26 +46,26 @@ import {
46
46
  isVolatilePath,
47
47
  parseManifest
48
48
  } from "./chunk-S7EM5VMW.js";
49
- import "./chunk-MXMVZU2Q.js";
50
- import "./chunk-O2BFXY3Y.js";
49
+ import "./chunk-H64ZLWW2.js";
50
+ import "./chunk-EJWZGSHD.js";
51
51
  import {
52
52
  probeChunks
53
- } from "./chunk-KB3EII7F.js";
53
+ } from "./chunk-WSBDIHFZ.js";
54
54
  import "./chunk-C2TS5MER.js";
55
55
  import {
56
56
  DEFAULT_MNEMONIC,
57
57
  DotNS,
58
58
  parseDomainName,
59
59
  sanitizeDomainLabel
60
- } from "./chunk-IRT4A7OO.js";
60
+ } from "./chunk-2GBSYVK2.js";
61
61
  import {
62
62
  bootstrapPool,
63
63
  derivePoolAccounts,
64
64
  ensureAuthorized,
65
65
  fetchPoolAuthorizations,
66
66
  selectAccount
67
- } from "./chunk-RW3GWDGI.js";
68
- import "./chunk-INVA3XGG.js";
67
+ } from "./chunk-JQ5X3VMP.js";
68
+ import "./chunk-RIAMPAL2.js";
69
69
  import {
70
70
  VERSION,
71
71
  loadRunState,
@@ -75,9 +75,10 @@ import {
75
75
  shouldSkipStaleWarning,
76
76
  stateFilePath,
77
77
  writeRunState
78
- } from "./chunk-V5N5EYNV.js";
78
+ } from "./chunk-NJPBXF5Z.js";
79
79
  import {
80
80
  DEFAULT_ENV_ID,
81
+ deepMergeEnvironments,
81
82
  defaultBundledPath,
82
83
  formatEnvironmentTable,
83
84
  isValidContractAddress,
@@ -85,7 +86,7 @@ import {
85
86
  loadEnvironments,
86
87
  resolveEndpoints,
87
88
  validateContractAddresses
88
- } from "./chunk-CNPB4VAM.js";
89
+ } from "./chunk-5K3RI5C2.js";
89
90
  import "./chunk-ZOC4GITL.js";
90
91
  import "./chunk-HOTQDYHD.js";
91
92
  export {
@@ -103,6 +104,7 @@ export {
103
104
  bootstrapPool,
104
105
  classifyFile,
105
106
  computeStats,
107
+ deepMergeEnvironments,
106
108
  defaultBundledPath,
107
109
  defineConfig,
108
110
  deploy,
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  publishManifest
3
- } from "../chunk-R2CJ5I5R.js";
3
+ } from "../chunk-TQC3S6NP.js";
4
4
  import "../chunk-RI3ZLNPN.js";
5
- import "../chunk-WPJADKC7.js";
5
+ import "../chunk-HPPLVGGC.js";
6
6
  import "../chunk-IW3X2MJF.js";
7
7
  import "../chunk-KOSF5FDO.js";
8
- import "../chunk-L2SKSKB6.js";
8
+ import "../chunk-J3NIXHZZ.js";
9
9
  import "../chunk-S7EM5VMW.js";
10
- import "../chunk-MXMVZU2Q.js";
11
- import "../chunk-O2BFXY3Y.js";
12
- import "../chunk-KB3EII7F.js";
10
+ import "../chunk-H64ZLWW2.js";
11
+ import "../chunk-EJWZGSHD.js";
12
+ import "../chunk-WSBDIHFZ.js";
13
13
  import "../chunk-C2TS5MER.js";
14
- import "../chunk-IRT4A7OO.js";
15
- import "../chunk-RW3GWDGI.js";
16
- import "../chunk-INVA3XGG.js";
17
- import "../chunk-V5N5EYNV.js";
18
- import "../chunk-CNPB4VAM.js";
14
+ import "../chunk-2GBSYVK2.js";
15
+ import "../chunk-JQ5X3VMP.js";
16
+ import "../chunk-RIAMPAL2.js";
17
+ import "../chunk-NJPBXF5Z.js";
18
+ import "../chunk-5K3RI5C2.js";
19
19
  import "../chunk-ZOC4GITL.js";
20
20
  import "../chunk-HOTQDYHD.js";
21
21
  export {
@@ -21,13 +21,34 @@ interface FetchOptions {
21
21
  timeoutMs?: number;
22
22
  domain?: string;
23
23
  buildDir?: string;
24
+ /**
25
+ * Injectable chain client for the chain-storage tier. When provided,
26
+ * fetchPreviousManifest attempts to read the previous manifest directly
27
+ * from the bulletin chain via bitswap_v1_get, before falling through to
28
+ * the IPFS gateway. Accepts any object exposing `_request(method, params)`.
29
+ *
30
+ * The bitswap_v1_get request shape `(cid: string) => unknown` is confirmed
31
+ * present on the bulletin chain (per #456 live E2E). The **response payload
32
+ * shape** (hex string vs Uint8Array vs other) is NOT yet exercised in a
33
+ * round-trip test — normalizeBitswapBytes handles the known candidates
34
+ * defensively, but a live verification against a stored CID is still needed.
35
+ * The PR flags this explicitly.
36
+ */
37
+ chainClient?: {
38
+ _request: (method: string, params: unknown[]) => Promise<unknown>;
39
+ };
24
40
  }
25
41
  type TierOutcome = "timeout" | "network_error" | `http_${number}` | "body_read_error" | "car_truncated" | "manifest_not_in_slice" | "car_parse_error" | "manifest_missing" | "manifest_parse_error" | "success";
26
42
  declare function getCacheDir(): string | null;
27
43
  declare function readPersistentLocalManifest(domain: string | undefined, prevContenthash: string): FetchOutcome | null;
28
44
  declare function writePersistentLocalManifest(domain: string, storageCid: string, manifestJson: string): void;
45
+ declare const CHAIN_TIER_TIMEOUT_MS = 5000;
46
+ declare function normalizeBitswapBytes(response: unknown): Uint8Array;
47
+ declare function fetchManifestFromChain(client: {
48
+ _request: (method: string, params: unknown[]) => Promise<unknown>;
49
+ }, rootCid: string, timeoutMs: number): Promise<Uint8Array | null>;
29
50
  declare function fetchPreviousManifest(prevContenthash: string | null, options?: FetchOptions): Promise<FetchOutcome>;
30
51
  declare function extractManifestFromCar(carBytes: Uint8Array): Promise<Uint8Array | null>;
31
52
  declare function walkDagToManifest(blocks: Map<string, Uint8Array>, rootCid: string): Promise<Uint8Array | null>;
32
53
 
33
- export { DEFAULT_TIMEOUT_MS, type FetchOptions, type FetchOutcome, SIDECAR_FILENAME, type TierOutcome, extractManifestFromCar, fetchPreviousManifest, getCacheDir, readPersistentLocalManifest, walkDagToManifest, writePersistentLocalManifest };
54
+ export { CHAIN_TIER_TIMEOUT_MS, DEFAULT_TIMEOUT_MS, type FetchOptions, type FetchOutcome, SIDECAR_FILENAME, type TierOutcome, extractManifestFromCar, fetchManifestFromChain, fetchPreviousManifest, getCacheDir, normalizeBitswapBytes, readPersistentLocalManifest, walkDagToManifest, writePersistentLocalManifest };
@@ -1,20 +1,26 @@
1
1
  import {
2
+ CHAIN_TIER_TIMEOUT_MS,
2
3
  DEFAULT_TIMEOUT_MS,
3
4
  SIDECAR_FILENAME,
4
5
  extractManifestFromCar,
6
+ fetchManifestFromChain,
5
7
  fetchPreviousManifest,
6
8
  getCacheDir,
9
+ normalizeBitswapBytes,
7
10
  readPersistentLocalManifest,
8
11
  walkDagToManifest,
9
12
  writePersistentLocalManifest
10
- } from "./chunk-L2SKSKB6.js";
13
+ } from "./chunk-J3NIXHZZ.js";
11
14
  import "./chunk-S7EM5VMW.js";
12
15
  export {
16
+ CHAIN_TIER_TIMEOUT_MS,
13
17
  DEFAULT_TIMEOUT_MS,
14
18
  SIDECAR_FILENAME,
15
19
  extractManifestFromCar,
20
+ fetchManifestFromChain,
16
21
  fetchPreviousManifest,
17
22
  getCacheDir,
23
+ normalizeBitswapBytes,
18
24
  readPersistentLocalManifest,
19
25
  walkDagToManifest,
20
26
  writePersistentLocalManifest
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  extractManifestFromCar
3
- } from "./chunk-L2SKSKB6.js";
3
+ } from "./chunk-J3NIXHZZ.js";
4
4
  import "./chunk-S7EM5VMW.js";
5
5
 
6
6
  // src/manifest-roundtrip.ts
@@ -5,8 +5,8 @@ import {
5
5
  maybeWriteMemoryReport,
6
6
  safeHeap,
7
7
  sampleFromBytes
8
- } from "./chunk-INVA3XGG.js";
9
- import "./chunk-V5N5EYNV.js";
8
+ } from "./chunk-RIAMPAL2.js";
9
+ import "./chunk-NJPBXF5Z.js";
10
10
  export {
11
11
  DEFAULT_THRESHOLD_MB,
12
12
  buildMemoryReport,
package/dist/merkle.js CHANGED
@@ -6,20 +6,20 @@ import {
6
6
  merkleizeKuboBackend,
7
7
  merkleizeWithStableOrder,
8
8
  rebuildOrderedCarFromBytes
9
- } from "./chunk-WPJADKC7.js";
9
+ } from "./chunk-HPPLVGGC.js";
10
10
  import "./chunk-IW3X2MJF.js";
11
11
  import "./chunk-KOSF5FDO.js";
12
- import "./chunk-L2SKSKB6.js";
12
+ import "./chunk-J3NIXHZZ.js";
13
13
  import "./chunk-S7EM5VMW.js";
14
- import "./chunk-MXMVZU2Q.js";
15
- import "./chunk-O2BFXY3Y.js";
16
- import "./chunk-KB3EII7F.js";
14
+ import "./chunk-H64ZLWW2.js";
15
+ import "./chunk-EJWZGSHD.js";
16
+ import "./chunk-WSBDIHFZ.js";
17
17
  import "./chunk-C2TS5MER.js";
18
- import "./chunk-IRT4A7OO.js";
19
- import "./chunk-RW3GWDGI.js";
20
- import "./chunk-INVA3XGG.js";
21
- import "./chunk-V5N5EYNV.js";
22
- import "./chunk-CNPB4VAM.js";
18
+ import "./chunk-2GBSYVK2.js";
19
+ import "./chunk-JQ5X3VMP.js";
20
+ import "./chunk-RIAMPAL2.js";
21
+ import "./chunk-NJPBXF5Z.js";
22
+ import "./chunk-5K3RI5C2.js";
23
23
  import "./chunk-ZOC4GITL.js";
24
24
  import "./chunk-HOTQDYHD.js";
25
25
  export {
@@ -26,13 +26,13 @@ import {
26
26
  } from "../chunk-ZYVGHDMU.js";
27
27
  import {
28
28
  WS_HEARTBEAT_TIMEOUT_MS
29
- } from "../chunk-IRT4A7OO.js";
30
- import "../chunk-RW3GWDGI.js";
31
- import "../chunk-INVA3XGG.js";
32
- import "../chunk-V5N5EYNV.js";
29
+ } from "../chunk-2GBSYVK2.js";
30
+ import "../chunk-JQ5X3VMP.js";
31
+ import "../chunk-RIAMPAL2.js";
32
+ import "../chunk-NJPBXF5Z.js";
33
33
  import {
34
34
  loadEnvironments
35
- } from "../chunk-CNPB4VAM.js";
35
+ } from "../chunk-5K3RI5C2.js";
36
36
  import "../chunk-ZOC4GITL.js";
37
37
 
38
38
  // src/personhood/bootstrap.ts
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  WS_HEARTBEAT_TIMEOUT_MS
3
- } from "../chunk-IRT4A7OO.js";
4
- import "../chunk-RW3GWDGI.js";
5
- import "../chunk-INVA3XGG.js";
6
- import "../chunk-V5N5EYNV.js";
3
+ } from "../chunk-2GBSYVK2.js";
4
+ import "../chunk-JQ5X3VMP.js";
5
+ import "../chunk-RIAMPAL2.js";
6
+ import "../chunk-NJPBXF5Z.js";
7
7
  import {
8
8
  loadEnvironments
9
- } from "../chunk-CNPB4VAM.js";
9
+ } from "../chunk-5K3RI5C2.js";
10
10
  import "../chunk-ZOC4GITL.js";
11
11
 
12
12
  // src/personhood/people-client.ts
package/dist/pool.d.ts CHANGED
@@ -14,7 +14,7 @@ interface PoolAuthorization extends PoolAccount {
14
14
  expiration: number;
15
15
  }
16
16
  declare function derivePoolAccounts(poolSize?: number, mnemonic?: string): PoolAccount[];
17
- declare function isAuthorizationSufficient(auth: any, currentBlock: number, needs?: AuthorizationNeeds): boolean;
17
+ declare function isAuthorizationSufficient(api: any, address: string, auth: any, currentBlock: number, needs?: AuthorizationNeeds): Promise<boolean>;
18
18
  interface SelectionResult {
19
19
  account: PoolAuthorization;
20
20
  eligibleCount: number;
@@ -25,20 +25,10 @@ interface AuthorizationNeeds {
25
25
  txs: bigint;
26
26
  bytes: bigint;
27
27
  }
28
- declare function computeTopUpTarget(current: {
29
- transactions: bigint;
30
- bytes: bigint;
31
- }, needs: AuthorizationNeeds): {
32
- transactions: bigint;
33
- bytes: bigint;
34
- } | null;
35
- type TxRetryDecision = "retry" | "abort";
36
- declare function classifyAliceTxError(err: unknown): TxRetryDecision;
37
28
  declare function isTestnetSpecName(specName: string | undefined | null): boolean;
38
29
  declare function detectTestnet(api: any): Promise<boolean>;
39
30
  declare function _resetTestnetCacheForTests(): void;
40
31
  declare function ensureAuthorized(api: any, address: string, label?: string, needs?: AuthorizationNeeds): Promise<void>;
41
- declare function topUpBy(api: any, address: string, needs: AuthorizationNeeds, label?: string): Promise<void>;
42
32
  declare function bootstrapPool(bulletinRpc: string, poolSize?: number, mnemonic?: string): Promise<void>;
43
33
 
44
- export { type AuthorizationNeeds, type PoolAccount, type PoolAuthorization, type SelectionResult, type TxRetryDecision, _resetTestnetCacheForTests, bootstrapPool, classifyAliceTxError, computeTopUpTarget, derivePoolAccounts, detectTestnet, ensureAuthorized, fetchPoolAuthorizations, formatPasBalance, isAuthorizationSufficient, isTestnetSpecName, selectAccount, topUpBy };
34
+ export { type AuthorizationNeeds, type PoolAccount, type PoolAuthorization, type SelectionResult, _resetTestnetCacheForTests, bootstrapPool, derivePoolAccounts, detectTestnet, ensureAuthorized, fetchPoolAuthorizations, formatPasBalance, isAuthorizationSufficient, isTestnetSpecName, selectAccount };
package/dist/pool.js CHANGED
@@ -1,8 +1,6 @@
1
1
  import {
2
2
  _resetTestnetCacheForTests,
3
3
  bootstrapPool,
4
- classifyAliceTxError,
5
- computeTopUpTarget,
6
4
  derivePoolAccounts,
7
5
  detectTestnet,
8
6
  ensureAuthorized,
@@ -10,16 +8,11 @@ import {
10
8
  formatPasBalance,
11
9
  isAuthorizationSufficient,
12
10
  isTestnetSpecName,
13
- selectAccount,
14
- topUpBy
15
- } from "./chunk-RW3GWDGI.js";
16
- import "./chunk-INVA3XGG.js";
17
- import "./chunk-V5N5EYNV.js";
11
+ selectAccount
12
+ } from "./chunk-JQ5X3VMP.js";
18
13
  export {
19
14
  _resetTestnetCacheForTests,
20
15
  bootstrapPool,
21
- classifyAliceTxError,
22
- computeTopUpTarget,
23
16
  derivePoolAccounts,
24
17
  detectTestnet,
25
18
  ensureAuthorized,
@@ -27,6 +20,5 @@ export {
27
20
  formatPasBalance,
28
21
  isAuthorizationSufficient,
29
22
  isTestnetSpecName,
30
- selectAccount,
31
- topUpBy
23
+ selectAccount
32
24
  };
package/dist/run-state.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  shouldSkipStaleWarning,
8
8
  stateFilePath,
9
9
  writeRunState
10
- } from "./chunk-V5N5EYNV.js";
10
+ } from "./chunk-NJPBXF5Z.js";
11
11
  export {
12
12
  VERSION,
13
13
  loadRunState,
package/dist/telemetry.js CHANGED
@@ -33,8 +33,8 @@ import {
33
33
  truncateAddress,
34
34
  withDeploySpan,
35
35
  withSpan
36
- } from "./chunk-INVA3XGG.js";
37
- import "./chunk-V5N5EYNV.js";
36
+ } from "./chunk-RIAMPAL2.js";
37
+ import "./chunk-NJPBXF5Z.js";
38
38
  export {
39
39
  VERSION,
40
40
  __setDeployRootSpanForTest,
@@ -11,9 +11,9 @@ import {
11
11
  isPreReleaseVersion,
12
12
  preReleaseWarning,
13
13
  promptYesNo
14
- } from "./chunk-O2BFXY3Y.js";
15
- import "./chunk-INVA3XGG.js";
16
- import "./chunk-V5N5EYNV.js";
14
+ } from "./chunk-EJWZGSHD.js";
15
+ import "./chunk-RIAMPAL2.js";
16
+ import "./chunk-NJPBXF5Z.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](../README.md)
48
+ - [Main README](../docs-internal/README.dev.md)
49
49
  - [E2E test setup](./e2e-bootstrap.md)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parity/product-deploy",
3
- "version": "0.8.1",
3
+ "version": "0.8.2-rc.1",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -29,6 +29,10 @@
29
29
  "./manifest-roundtrip": {
30
30
  "types": "./dist/manifest-roundtrip.d.ts",
31
31
  "import": "./dist/manifest-roundtrip.js"
32
+ },
33
+ "./telemetry": {
34
+ "types": "./dist/telemetry.d.ts",
35
+ "import": "./dist/telemetry.js"
32
36
  }
33
37
  },
34
38
  "files": [
@@ -41,9 +45,8 @@
41
45
  "scripts": {
42
46
  "build": "tsup 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 --format esm --dts --clean --target node22",
43
47
  "refresh-environments": "node scripts/refresh-environments.mjs",
44
- "check:watched-dependencies": "node tools/check-watched-dependencies.mjs",
45
48
  "prepare": "npm run build",
46
- "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/watched-dependencies.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",
49
+ "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",
47
50
  "test:e2e": "npm run build && node --test test/e2e.test.js",
48
51
  "test:e2e:smoke": "bash scripts/e2e-pass.sh smoke",
49
52
  "test:e2e:pr": "bash scripts/e2e-pass.sh pr",