bulletin-deploy 0.7.26-rc.2 → 0.7.26-rc.4

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.
@@ -9,10 +9,10 @@ import {
9
9
  offerBugReport,
10
10
  scrubSecrets,
11
11
  setDeployContext
12
- } from "./chunk-7NRU7N5A.js";
13
- import "./chunk-3Z6VK7XP.js";
14
- import "./chunk-IJOPI6JC.js";
15
- import "./chunk-77OAX2MH.js";
12
+ } from "./chunk-AWULVGHI.js";
13
+ import "./chunk-DLSRMJGO.js";
14
+ import "./chunk-TQOWUM4X.js";
15
+ import "./chunk-JHCSIZFE.js";
16
16
  export {
17
17
  buildCliFlagsSummary,
18
18
  buildLabels,
@@ -2,11 +2,11 @@ import {
2
2
  classifyErrorArea,
3
3
  isInteractive,
4
4
  promptYesNo
5
- } from "./chunk-3Z6VK7XP.js";
5
+ } from "./chunk-DLSRMJGO.js";
6
6
  import {
7
7
  VERSION,
8
8
  getCurrentSentryTraceId
9
- } from "./chunk-IJOPI6JC.js";
9
+ } from "./chunk-TQOWUM4X.js";
10
10
 
11
11
  // src/bug-report.ts
12
12
  import { execSync, execFileSync } from "child_process";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-IJOPI6JC.js";
3
+ } from "./chunk-TQOWUM4X.js";
4
4
 
5
5
  // src/version-check.ts
6
6
  import { execSync, execFileSync } from "child_process";
@@ -20,10 +20,10 @@ import {
20
20
  } from "./chunk-S7EM5VMW.js";
21
21
  import {
22
22
  setDeployContext
23
- } from "./chunk-7NRU7N5A.js";
23
+ } from "./chunk-AWULVGHI.js";
24
24
  import {
25
25
  probeChunks
26
- } from "./chunk-SEMZRS7Q.js";
26
+ } from "./chunk-WOKJ47IC.js";
27
27
  import {
28
28
  packSection
29
29
  } from "./chunk-C2TS5MER.js";
@@ -34,7 +34,7 @@ import {
34
34
  parseDomainName,
35
35
  popStatusName,
36
36
  verifyNonceAdvanced
37
- } from "./chunk-4LB5PXBL.js";
37
+ } from "./chunk-WQ7FBUNK.js";
38
38
  import {
39
39
  derivePoolAccounts,
40
40
  detectTestnet,
@@ -56,7 +56,7 @@ import {
56
56
  truncateAddress,
57
57
  withDeploySpan,
58
58
  withSpan
59
- } from "./chunk-IJOPI6JC.js";
59
+ } from "./chunk-TQOWUM4X.js";
60
60
  import {
61
61
  DEFAULT_ENV_ID,
62
62
  getPopSelfServeConfig,
@@ -143,7 +143,8 @@ var RETRY_MAX_DELAY_MS = 15e3;
143
143
  var WS_HEARTBEAT_TIMEOUT_MS = 3e5;
144
144
  var GRANDPA_NATURAL_WAIT_MS = parseInt(process.env.BULLETIN_GRANDPA_NATURAL_WAIT_MS ?? "90000", 10);
145
145
  var GRANDPA_REUPLOAD_POLL_MS = 5e3;
146
- var GRANDPA_REUPLOAD_TIMEOUT_MS = 6e4;
146
+ var GRANDPA_REUPLOAD_TIMEOUT_MS = 12e4;
147
+ var GRANDPA_REUPLOAD_MAX_ROUNDS = 3;
147
148
  var RETRY_BUDGET_MAX_EVENTS = parseInt(process.env.BULLETIN_RETRY_BUDGET_MAX ?? "5", 10);
148
149
  var RETRY_BUDGET_WINDOW_MS = parseInt(process.env.BULLETIN_RETRY_BUDGET_WINDOW_MS ?? "30000", 10);
149
150
  function retryBudgetExhausted(history, maxEvents, windowMs, now = Date.now()) {
@@ -1279,53 +1280,56 @@ async function storeDirectoryV2(directoryPath, opts = {}) {
1279
1280
  const rootFileData = new UnixFS({ type: "file", blockSizes: rootChunkLinks.map((c) => BigInt(c.len)) });
1280
1281
  const rootDagNode = dagPB.prepare({ Data: rootFileData.marshal(), Links: rootChunkLinks.map((c) => ({ Name: "", Tsize: c.len, Hash: c.cid })) });
1281
1282
  const rootDagBytes = dagPB.encode(rootDagNode);
1282
- console.log(` ${missingCids.size} chunks still missing after wait \u2014 re-uploading`);
1283
1283
  const phaseBChunkByCid = /* @__PURE__ */ new Map();
1284
1284
  for (let i = 0; i < phaseB.chunkCids.length; i++) {
1285
1285
  phaseBChunkByCid.set(phaseB.chunkCids[i], phaseB.chunks[i]);
1286
1286
  }
1287
1287
  const fetchNonceFn = phaseALiveProvider.fetchNonce ?? fetchNonce;
1288
- const reuploadList = [...missingCids];
1289
- for (let i = 0; i < reuploadList.length; i++) {
1290
- const cid = reuploadList[i];
1291
- const freshNonce = await fetchNonceFn(BULLETIN_ENDPOINTS, phaseALiveProvider.ss58);
1292
- if (cid === storageCid) {
1293
- const rootTx = phaseALiveProvider.unsafeApi.tx.TransactionStorage.store_with_cid_config({
1294
- cid: { codec: BigInt(112), hashing: toHashingEnum(rootHashCode) },
1295
- data: rootDagBytes
1296
- });
1297
- await watchTransaction(rootTx, phaseALiveProvider.signer, { mortality: { mortal: true, period: 256 }, nonce: freshNonce }, () => storageCid, {
1298
- label: "root-reupload",
1299
- rpc: BULLETIN_ENDPOINTS,
1300
- senderSS58: phaseALiveProvider.ss58,
1301
- expectedNonce: freshNonce,
1302
- timeoutMs: CHUNK_TIMEOUT_MS,
1303
- fetchNonce: phaseALiveProvider.fetchNonce
1304
- });
1305
- } else {
1306
- const chunkBytes = phaseBChunkByCid.get(cid);
1307
- if (!chunkBytes) {
1308
- throw new Error(
1309
- `Deploy verification failed: chunk ${cid.slice(0, 20)}\u2026 missing at finalised head and its bytes are not in phaseB.chunks (cannot re-upload). This indicates an internal state issue.`
1310
- );
1288
+ for (let round = 1; round <= GRANDPA_REUPLOAD_MAX_ROUNDS && missingCids.size > 0; round++) {
1289
+ const roundSuffix = round > 1 ? ` (round ${round}/${GRANDPA_REUPLOAD_MAX_ROUNDS}, retry after fork)` : "";
1290
+ console.log(` ${missingCids.size} chunks still missing after wait \u2014 re-uploading${roundSuffix}`);
1291
+ const reuploadList = [...missingCids];
1292
+ for (let i = 0; i < reuploadList.length; i++) {
1293
+ const cid = reuploadList[i];
1294
+ const freshNonce = await fetchNonceFn(BULLETIN_ENDPOINTS, phaseALiveProvider.ss58);
1295
+ if (cid === storageCid) {
1296
+ const rootTx = phaseALiveProvider.unsafeApi.tx.TransactionStorage.store_with_cid_config({
1297
+ cid: { codec: BigInt(112), hashing: toHashingEnum(rootHashCode) },
1298
+ data: rootDagBytes
1299
+ });
1300
+ await watchTransaction(rootTx, phaseALiveProvider.signer, { mortality: { mortal: true, period: 256 }, nonce: freshNonce }, () => storageCid, {
1301
+ label: "root-reupload",
1302
+ rpc: BULLETIN_ENDPOINTS,
1303
+ senderSS58: phaseALiveProvider.ss58,
1304
+ expectedNonce: freshNonce,
1305
+ timeoutMs: CHUNK_TIMEOUT_MS,
1306
+ fetchNonce: phaseALiveProvider.fetchNonce
1307
+ });
1308
+ } else {
1309
+ const chunkBytes = phaseBChunkByCid.get(cid);
1310
+ if (!chunkBytes) {
1311
+ throw new Error(
1312
+ `Deploy verification failed: chunk ${cid.slice(0, 20)}\u2026 missing at finalised head and its bytes are not in phaseB.chunks (cannot re-upload). This indicates an internal state issue.`
1313
+ );
1314
+ }
1315
+ await storeChunk(phaseALiveProvider.unsafeApi, phaseALiveProvider.signer, chunkBytes, freshNonce, phaseALiveProvider.ss58, { fetchNonce: phaseALiveProvider.fetchNonce });
1311
1316
  }
1312
- await storeChunk(phaseALiveProvider.unsafeApi, phaseALiveProvider.signer, chunkBytes, freshNonce, phaseALiveProvider.ss58, { fetchNonce: phaseALiveProvider.fetchNonce });
1317
+ reuploadCount++;
1318
+ console.log(` [${i + 1}/${reuploadList.length}] re-uploaded ${cid.slice(0, 20)}\u2026 (nonce ${freshNonce})`);
1313
1319
  }
1314
- reuploadCount++;
1315
- console.log(` [${i + 1}/${reuploadList.length}] re-uploaded ${cid.slice(0, 20)}\u2026 (nonce ${freshNonce})`);
1316
- }
1317
- const reuploadStart = Date.now();
1318
- while (Date.now() - reuploadStart < GRANDPA_REUPLOAD_TIMEOUT_MS && missingCids.size > 0) {
1319
- await new Promise((r) => setTimeout(r, GRANDPA_REUPLOAD_POLL_MS));
1320
- const poll = await probeChunks([...missingCids], { client: phaseALiveProvider.client, atFinalized: true });
1321
- for (const r of poll) {
1322
- if (r.present === true) missingCids.delete(r.cid);
1320
+ const reuploadStart = Date.now();
1321
+ while (Date.now() - reuploadStart < GRANDPA_REUPLOAD_TIMEOUT_MS && missingCids.size > 0) {
1322
+ await new Promise((r) => setTimeout(r, GRANDPA_REUPLOAD_POLL_MS));
1323
+ const poll = await probeChunks([...missingCids], { client: phaseALiveProvider.client, atFinalized: true });
1324
+ for (const r of poll) {
1325
+ if (r.present === true) missingCids.delete(r.cid);
1326
+ }
1323
1327
  }
1324
1328
  }
1325
1329
  if (missingCids.size > 0) {
1326
1330
  const stuck = [...missingCids][0];
1327
1331
  throw new Error(
1328
- `Deploy verification failed: ${missingCids.size} chunk(s) not finalised after re-upload within ${GRANDPA_REUPLOAD_TIMEOUT_MS / 1e3}s (first: ${stuck.slice(0, 20)}\u2026). The chain may have dropped chunks due to a fork. Re-run deploy.`
1332
+ `Deploy verification failed: ${missingCids.size} chunk(s) not finalised after ${GRANDPA_REUPLOAD_MAX_ROUNDS} re-upload round(s) (first: ${stuck.slice(0, 20)}\u2026). The chain may have dropped chunks due to a persistent fork. Re-run deploy.`
1329
1333
  );
1330
1334
  }
1331
1335
  console.log(` \u2713 All ${grandpaCids.length} chunks finalised after re-upload`);
@@ -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.7.26-rc.2",
9
+ version: "0.7.26-rc.4",
10
10
  private: false,
11
11
  repository: {
12
12
  type: "git",
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  package_default,
3
3
  writeRunState
4
- } from "./chunk-77OAX2MH.js";
4
+ } from "./chunk-JHCSIZFE.js";
5
5
 
6
6
  // src/memory-report.ts
7
7
  import * as fs2 from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  captureWarning
3
- } from "./chunk-IJOPI6JC.js";
3
+ } from "./chunk-TQOWUM4X.js";
4
4
 
5
5
  // src/chunk-probe.ts
6
6
  import { Twox128, Blake2128Concat, decAnyMetadata, unifyMetadata } from "@polkadot-api/substrate-bindings";
@@ -7,7 +7,7 @@ import {
7
7
  setDeploySentryTag,
8
8
  truncateAddress,
9
9
  withSpan
10
- } from "./chunk-IJOPI6JC.js";
10
+ } from "./chunk-TQOWUM4X.js";
11
11
  import {
12
12
  validateContractAddresses
13
13
  } from "./chunk-MGU5I7H5.js";
@@ -5,9 +5,9 @@ import {
5
5
  _decodeStorageValue,
6
6
  _resetProbeSession,
7
7
  probeChunks
8
- } from "./chunk-SEMZRS7Q.js";
9
- import "./chunk-IJOPI6JC.js";
10
- import "./chunk-77OAX2MH.js";
8
+ } from "./chunk-WOKJ47IC.js";
9
+ import "./chunk-TQOWUM4X.js";
10
+ import "./chunk-JHCSIZFE.js";
11
11
  export {
12
12
  ChainProbeCrossValidationError,
13
13
  ChainProbeMetadataError,
package/dist/deploy.js CHANGED
@@ -32,19 +32,19 @@ import {
32
32
  storeDirectory,
33
33
  storeDirectoryV2,
34
34
  storeFile
35
- } from "./chunk-OHAO2BPD.js";
35
+ } from "./chunk-GY4T5MYF.js";
36
36
  import "./chunk-KHVTYIIX.js";
37
37
  import "./chunk-KOSF5FDO.js";
38
38
  import "./chunk-FZWJV5AD.js";
39
39
  import "./chunk-S7EM5VMW.js";
40
- import "./chunk-7NRU7N5A.js";
41
- import "./chunk-3Z6VK7XP.js";
42
- import "./chunk-SEMZRS7Q.js";
40
+ import "./chunk-AWULVGHI.js";
41
+ import "./chunk-DLSRMJGO.js";
42
+ import "./chunk-WOKJ47IC.js";
43
43
  import "./chunk-C2TS5MER.js";
44
- import "./chunk-4LB5PXBL.js";
44
+ import "./chunk-WQ7FBUNK.js";
45
45
  import "./chunk-QMYW3D6E.js";
46
- import "./chunk-IJOPI6JC.js";
47
- import "./chunk-77OAX2MH.js";
46
+ import "./chunk-TQOWUM4X.js";
47
+ import "./chunk-JHCSIZFE.js";
48
48
  import "./chunk-MGU5I7H5.js";
49
49
  import {
50
50
  EXIT_CODE_NO_RETRY,
package/dist/dotns.js CHANGED
@@ -41,10 +41,10 @@ import {
41
41
  stripTrailingDigits,
42
42
  validateDomainLabel,
43
43
  verifyNonceAdvanced
44
- } from "./chunk-4LB5PXBL.js";
44
+ } from "./chunk-WQ7FBUNK.js";
45
45
  import "./chunk-QMYW3D6E.js";
46
- import "./chunk-IJOPI6JC.js";
47
- import "./chunk-77OAX2MH.js";
46
+ import "./chunk-TQOWUM4X.js";
47
+ import "./chunk-JHCSIZFE.js";
48
48
  import "./chunk-MGU5I7H5.js";
49
49
  import "./chunk-ZOC4GITL.js";
50
50
  export {
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  deploy,
3
3
  merkleizeJS,
4
4
  merkleizeWithStableOrder
5
- } from "./chunk-OHAO2BPD.js";
5
+ } from "./chunk-GY4T5MYF.js";
6
6
  import {
7
7
  computeStats,
8
8
  renderSummary,
@@ -24,18 +24,18 @@ import {
24
24
  isVolatilePath,
25
25
  parseManifest
26
26
  } from "./chunk-S7EM5VMW.js";
27
- import "./chunk-7NRU7N5A.js";
28
- import "./chunk-3Z6VK7XP.js";
27
+ import "./chunk-AWULVGHI.js";
28
+ import "./chunk-DLSRMJGO.js";
29
29
  import {
30
30
  probeChunks
31
- } from "./chunk-SEMZRS7Q.js";
31
+ } from "./chunk-WOKJ47IC.js";
32
32
  import "./chunk-C2TS5MER.js";
33
33
  import {
34
34
  DEFAULT_MNEMONIC,
35
35
  DotNS,
36
36
  parseDomainName,
37
37
  sanitizeDomainLabel
38
- } from "./chunk-4LB5PXBL.js";
38
+ } from "./chunk-WQ7FBUNK.js";
39
39
  import {
40
40
  bootstrapPool,
41
41
  derivePoolAccounts,
@@ -43,7 +43,7 @@ import {
43
43
  fetchPoolAuthorizations,
44
44
  selectAccount
45
45
  } from "./chunk-QMYW3D6E.js";
46
- import "./chunk-IJOPI6JC.js";
46
+ import "./chunk-TQOWUM4X.js";
47
47
  import {
48
48
  VERSION,
49
49
  loadRunState,
@@ -53,7 +53,7 @@ import {
53
53
  shouldSkipStaleWarning,
54
54
  stateFilePath,
55
55
  writeRunState
56
- } from "./chunk-77OAX2MH.js";
56
+ } from "./chunk-JHCSIZFE.js";
57
57
  import {
58
58
  DEFAULT_ENV_ID,
59
59
  defaultBundledPath,
@@ -5,8 +5,8 @@ import {
5
5
  maybeWriteMemoryReport,
6
6
  safeHeap,
7
7
  sampleFromBytes
8
- } from "./chunk-IJOPI6JC.js";
9
- import "./chunk-77OAX2MH.js";
8
+ } from "./chunk-TQOWUM4X.js";
9
+ import "./chunk-JHCSIZFE.js";
10
10
  export {
11
11
  DEFAULT_THRESHOLD_MB,
12
12
  buildMemoryReport,
package/dist/merkle.js CHANGED
@@ -6,19 +6,19 @@ import {
6
6
  merkleizeKuboBackend,
7
7
  merkleizeWithStableOrder,
8
8
  rebuildOrderedCarFromBytes
9
- } from "./chunk-OHAO2BPD.js";
9
+ } from "./chunk-GY4T5MYF.js";
10
10
  import "./chunk-KHVTYIIX.js";
11
11
  import "./chunk-KOSF5FDO.js";
12
12
  import "./chunk-FZWJV5AD.js";
13
13
  import "./chunk-S7EM5VMW.js";
14
- import "./chunk-7NRU7N5A.js";
15
- import "./chunk-3Z6VK7XP.js";
16
- import "./chunk-SEMZRS7Q.js";
14
+ import "./chunk-AWULVGHI.js";
15
+ import "./chunk-DLSRMJGO.js";
16
+ import "./chunk-WOKJ47IC.js";
17
17
  import "./chunk-C2TS5MER.js";
18
- import "./chunk-4LB5PXBL.js";
18
+ import "./chunk-WQ7FBUNK.js";
19
19
  import "./chunk-QMYW3D6E.js";
20
- import "./chunk-IJOPI6JC.js";
21
- import "./chunk-77OAX2MH.js";
20
+ import "./chunk-TQOWUM4X.js";
21
+ import "./chunk-JHCSIZFE.js";
22
22
  import "./chunk-MGU5I7H5.js";
23
23
  import "./chunk-ZOC4GITL.js";
24
24
  import "./chunk-HOTQDYHD.js";
@@ -21,10 +21,10 @@ import {
21
21
  } from "../chunk-T7EEVWNU.js";
22
22
  import {
23
23
  WS_HEARTBEAT_TIMEOUT_MS
24
- } from "../chunk-4LB5PXBL.js";
24
+ } from "../chunk-WQ7FBUNK.js";
25
25
  import "../chunk-QMYW3D6E.js";
26
- import "../chunk-IJOPI6JC.js";
27
- import "../chunk-77OAX2MH.js";
26
+ import "../chunk-TQOWUM4X.js";
27
+ import "../chunk-JHCSIZFE.js";
28
28
  import {
29
29
  loadEnvironments
30
30
  } from "../chunk-MGU5I7H5.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  WS_HEARTBEAT_TIMEOUT_MS
3
- } from "../chunk-4LB5PXBL.js";
3
+ } from "../chunk-WQ7FBUNK.js";
4
4
  import "../chunk-QMYW3D6E.js";
5
- import "../chunk-IJOPI6JC.js";
6
- import "../chunk-77OAX2MH.js";
5
+ import "../chunk-TQOWUM4X.js";
6
+ import "../chunk-JHCSIZFE.js";
7
7
  import {
8
8
  loadEnvironments
9
9
  } from "../chunk-MGU5I7H5.js";
package/dist/run-state.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  shouldSkipStaleWarning,
8
8
  stateFilePath,
9
9
  writeRunState
10
- } from "./chunk-77OAX2MH.js";
10
+ } from "./chunk-JHCSIZFE.js";
11
11
  export {
12
12
  VERSION,
13
13
  loadRunState,
package/dist/telemetry.js CHANGED
@@ -31,8 +31,8 @@ import {
31
31
  truncateAddress,
32
32
  withDeploySpan,
33
33
  withSpan
34
- } from "./chunk-IJOPI6JC.js";
35
- import "./chunk-77OAX2MH.js";
34
+ } from "./chunk-TQOWUM4X.js";
35
+ import "./chunk-JHCSIZFE.js";
36
36
  export {
37
37
  VERSION,
38
38
  __setDeployRootSpanForTest,
@@ -11,9 +11,9 @@ import {
11
11
  isPreReleaseVersion,
12
12
  preReleaseWarning,
13
13
  promptYesNo
14
- } from "./chunk-3Z6VK7XP.js";
15
- import "./chunk-IJOPI6JC.js";
16
- import "./chunk-77OAX2MH.js";
14
+ } from "./chunk-DLSRMJGO.js";
15
+ import "./chunk-TQOWUM4X.js";
16
+ import "./chunk-JHCSIZFE.js";
17
17
  export {
18
18
  assessVersion,
19
19
  checkNodeVersion,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bulletin-deploy",
3
- "version": "0.7.26-rc.2",
3
+ "version": "0.7.26-rc.4",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",