bulletin-deploy 0.15.2-rc.2 → 0.15.2-rc.3
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.
- package/bin/bulletin-deploy +1 -5
- package/dist/auth-config.js +3 -3
- package/dist/bug-report.js +4 -4
- package/dist/chain-health.js +3 -3
- package/dist/{chunk-TULAHSR4.js → chunk-3PW5FJCP.js} +35 -97
- package/dist/{chunk-WIMRJK32.js → chunk-3THUTBHU.js} +8 -0
- package/dist/{chunk-KIYZBXVI.js → chunk-6CIU6CDU.js} +2 -2
- package/dist/{chunk-2CMBVGCM.js → chunk-6FYNBBXT.js} +3 -3
- package/dist/{chunk-6AEIZMWM.js → chunk-AEDFJNS4.js} +43 -4
- package/dist/{chunk-TUWXEZ2F.js → chunk-AMN43EQT.js} +7 -4
- package/dist/{chunk-7DQUTF5K.js → chunk-AQKF7XQI.js} +3 -4
- package/dist/{chunk-NHYYNQSN.js → chunk-DN4FDSVM.js} +1 -1
- package/dist/{chunk-VH4MENPE.js → chunk-JTCPDG3Q.js} +1 -1
- package/dist/{chunk-IJUKTHEP.js → chunk-KJVRJOKC.js} +48 -13
- package/dist/{chunk-QDK4KW7S.js → chunk-MPTNVUWH.js} +2 -2
- package/dist/{chunk-ETL5WOOU.js → chunk-PJKUBDE7.js} +1 -1
- package/dist/{chunk-WDPZHQ47.js → chunk-R5NAMIRF.js} +1 -1
- package/dist/{chunk-WB6P374L.js → chunk-YEWTKVXV.js} +1 -1
- package/dist/{chunk-5V6DL5OB.js → chunk-YXMWCUXP.js} +13 -1
- package/dist/{chunk-3HKQCN5Y.js → chunk-ZFTY2OMP.js} +1 -1
- package/dist/chunk-probe.js +3 -3
- package/dist/commands/login.js +12 -13
- package/dist/commands/logout.js +4 -4
- package/dist/commands/transfer.js +5 -5
- package/dist/commands/whoami.js +3 -3
- package/dist/deploy-actors.js +7 -7
- package/dist/deploy.d.ts +4 -17
- package/dist/deploy.js +12 -13
- package/dist/dotns.js +5 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.js +16 -17
- package/dist/manifest/byte-budget.js +1 -1
- package/dist/manifest/config-load.js +2 -2
- package/dist/manifest/publish.d.ts +1 -1
- package/dist/manifest/publish.js +14 -15
- package/dist/manifest/schema.d.ts +1 -1
- package/dist/manifest/schema.js +1 -1
- package/dist/manifest/types.d.ts +15 -4
- package/dist/memory-report.js +2 -2
- package/dist/merkle.js +12 -13
- package/dist/personhood/bootstrap.js +5 -5
- package/dist/personhood/people-client.js +5 -5
- package/dist/pool.d.ts +31 -3
- package/dist/pool.js +9 -1
- package/dist/run-state.js +1 -1
- package/dist/sss-allowance-cache.js +4 -4
- package/dist/storage-signer.d.ts +10 -7
- package/dist/storage-signer.js +12 -13
- package/dist/telemetry.d.ts +1 -1
- package/dist/telemetry.js +2 -2
- package/dist/version-check.js +3 -3
- package/package.json +2 -2
- package/dist/chunk-CGDOG7ZW.js +0 -224
- package/dist/gh-pages-mirror.d.ts +0 -78
- package/dist/gh-pages-mirror.js +0 -38
package/bin/bulletin-deploy
CHANGED
|
@@ -57,7 +57,6 @@ for (let i = 0; i < args.length; i++) {
|
|
|
57
57
|
else if (args[i] === "--tag") { flags.tag = args[++i]; }
|
|
58
58
|
else if (args[i] === "--config") { flags.config = args[++i]; }
|
|
59
59
|
else if (args[i] === "--no-manifest" || args[i] === "--content-only") { flags.noManifest = true; }
|
|
60
|
-
else if (args[i] === "--gh-pages-mirror") { flags.ghPagesMirror = true; }
|
|
61
60
|
else if (args[i] === "--allow-large-deploy") { flags.allowLargeDeploy = true; }
|
|
62
61
|
else if (args[i] === "--reproducible") { flags.reproducibleSource = "commit"; }
|
|
63
62
|
else if (args[i].startsWith("--reproducible=")) { flags.reproducibleSource = args[i].slice("--reproducible=".length); }
|
|
@@ -305,14 +304,12 @@ Options:
|
|
|
305
304
|
--config <path> Explicit path to a bulletin-deploy.config.ts (default: walk up from
|
|
306
305
|
<build-dir> looking for bulletin-deploy.config.{ts,js,mjs}). When a
|
|
307
306
|
config is found, deploy ALSO writes the manifest + executable text
|
|
308
|
-
records on <domain> and its app/widget/worker subnames.
|
|
307
|
+
records on <domain> and its app/widget/funding/worker subnames.
|
|
309
308
|
--no-manifest, --content-only
|
|
310
309
|
Skip manifest publishing entirely, even when a
|
|
311
310
|
bulletin-deploy.config.* is discoverable — plain content
|
|
312
311
|
deploy (storage + root contenthash), same as having no
|
|
313
312
|
config at all. Mutually exclusive with --publish.
|
|
314
|
-
--gh-pages-mirror After deploy, push the CAR to the current repo's gh-pages branch
|
|
315
|
-
at bulletin/<domain>.dot.car (opt-in; also set GH_PAGES_MIRROR=1)
|
|
316
313
|
--publish After deploy, list <domain> in the on-chain Publisher
|
|
317
314
|
registry (Publisher.publish). Only takes effect on envs
|
|
318
315
|
with a deployed Publisher (currently: paseo-next-v2).
|
|
@@ -527,7 +524,6 @@ try {
|
|
|
527
524
|
jsMerkle: flags.jsMerkle,
|
|
528
525
|
inputCar: flags.inputCar,
|
|
529
526
|
tag: flags.tag,
|
|
530
|
-
ghPagesMirror: flags.ghPagesMirror,
|
|
531
527
|
allowLargeDeploy: flags.allowLargeDeploy,
|
|
532
528
|
reproducibleSource: flags.reproducibleSource,
|
|
533
529
|
dumpCar: flags.dumpCar,
|
package/dist/auth-config.js
CHANGED
|
@@ -9,12 +9,12 @@ import {
|
|
|
9
9
|
getPeopleChainEndpoints,
|
|
10
10
|
hasPersistedSession,
|
|
11
11
|
resolveBulletinEndpoints
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-JTCPDG3Q.js";
|
|
13
13
|
import "./chunk-TSPERKUS.js";
|
|
14
14
|
import "./chunk-CL7GQYYK.js";
|
|
15
15
|
import "./chunk-ZOC4GITL.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-AEDFJNS4.js";
|
|
17
|
+
import "./chunk-MPTNVUWH.js";
|
|
18
18
|
export {
|
|
19
19
|
DOT_DAPP_ID,
|
|
20
20
|
DOT_DERIVATION_INDEX,
|
package/dist/bug-report.js
CHANGED
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
offerBugReport,
|
|
11
11
|
scrubSecrets,
|
|
12
12
|
setDeployContext
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-AQKF7XQI.js";
|
|
14
|
+
import "./chunk-R5NAMIRF.js";
|
|
15
|
+
import "./chunk-AEDFJNS4.js";
|
|
16
|
+
import "./chunk-MPTNVUWH.js";
|
|
17
17
|
export {
|
|
18
18
|
buildCliFlagsSummary,
|
|
19
19
|
buildLabels,
|
package/dist/chain-health.js
CHANGED
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
DEFAULT_WINDOW_BLOCKS,
|
|
4
4
|
MAX_SPANS_PER_SAMPLER,
|
|
5
5
|
endpointHost
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-YEWTKVXV.js";
|
|
7
|
+
import "./chunk-AEDFJNS4.js";
|
|
8
|
+
import "./chunk-MPTNVUWH.js";
|
|
9
9
|
export {
|
|
10
10
|
ChainHealthSampler,
|
|
11
11
|
DEFAULT_WINDOW_BLOCKS,
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
preflightSssAllowance
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PJKUBDE7.js";
|
|
4
4
|
import {
|
|
5
5
|
statementSigningAccount
|
|
6
6
|
} from "./chunk-GRPLHUYC.js";
|
|
7
|
-
import {
|
|
8
|
-
MirrorSkipped,
|
|
9
|
-
mirrorToGitHubPages,
|
|
10
|
-
pollMirrorFreshness
|
|
11
|
-
} from "./chunk-CGDOG7ZW.js";
|
|
12
7
|
import {
|
|
13
8
|
computeStats,
|
|
14
9
|
renderSummary,
|
|
@@ -31,18 +26,18 @@ import {
|
|
|
31
26
|
} from "./chunk-S7EM5VMW.js";
|
|
32
27
|
import {
|
|
33
28
|
setDeployContext
|
|
34
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-AQKF7XQI.js";
|
|
35
30
|
import {
|
|
36
31
|
getBestBlockNumber,
|
|
37
32
|
probeChunks,
|
|
38
33
|
probeFinalityGap
|
|
39
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-ZFTY2OMP.js";
|
|
40
35
|
import {
|
|
41
36
|
packSection
|
|
42
37
|
} from "./chunk-C2TS5MER.js";
|
|
43
38
|
import {
|
|
44
39
|
resolveStorageSigner
|
|
45
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-6CIU6CDU.js";
|
|
46
41
|
import {
|
|
47
42
|
createSlotAccountSigner,
|
|
48
43
|
requestResourceAllocation
|
|
@@ -51,7 +46,7 @@ import {
|
|
|
51
46
|
STALE_SESSION_MESSAGE,
|
|
52
47
|
getPeopleChainEndpoints,
|
|
53
48
|
hasPersistedSession
|
|
54
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-JTCPDG3Q.js";
|
|
55
50
|
import {
|
|
56
51
|
CLI_NAME
|
|
57
52
|
} from "./chunk-TSPERKUS.js";
|
|
@@ -67,15 +62,16 @@ import {
|
|
|
67
62
|
parseDomainName,
|
|
68
63
|
popStatusName,
|
|
69
64
|
verifyNonceAdvanced
|
|
70
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-6FYNBBXT.js";
|
|
71
66
|
import {
|
|
72
67
|
derivePoolAccounts,
|
|
73
68
|
detectTestnet,
|
|
74
69
|
ensureAuthorized,
|
|
75
70
|
fetchPoolAuthorizations,
|
|
76
71
|
isAuthorizationSufficient,
|
|
72
|
+
readAccountAuthorization,
|
|
77
73
|
selectAccount
|
|
78
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-KJVRJOKC.js";
|
|
79
75
|
import {
|
|
80
76
|
DEFAULT_ENV_ID,
|
|
81
77
|
getPopSelfServeConfig,
|
|
@@ -87,7 +83,7 @@ import {
|
|
|
87
83
|
} from "./chunk-ZOC4GITL.js";
|
|
88
84
|
import {
|
|
89
85
|
ChainHealthSampler
|
|
90
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-YEWTKVXV.js";
|
|
91
87
|
import {
|
|
92
88
|
VERSION,
|
|
93
89
|
captureWarning,
|
|
@@ -101,7 +97,7 @@ import {
|
|
|
101
97
|
truncateAddress,
|
|
102
98
|
withDeploySpan,
|
|
103
99
|
withSpan
|
|
104
|
-
} from "./chunk-
|
|
100
|
+
} from "./chunk-AEDFJNS4.js";
|
|
105
101
|
|
|
106
102
|
// src/merkle.ts
|
|
107
103
|
import * as fs2 from "fs";
|
|
@@ -121,7 +117,7 @@ import * as path from "path";
|
|
|
121
117
|
import { execSync } from "child_process";
|
|
122
118
|
import { sha256 } from "@noble/hashes/sha256";
|
|
123
119
|
import { blake2b } from "@noble/hashes/blake2b";
|
|
124
|
-
import { createClient as createPolkadotClient2
|
|
120
|
+
import { createClient as createPolkadotClient2 } from "polkadot-api";
|
|
125
121
|
import { getWsProvider as getWsProvider2, WsEvent } from "polkadot-api/ws";
|
|
126
122
|
import { CID } from "multiformats/cid";
|
|
127
123
|
import { create as createMultihash } from "multiformats/hashes/digest";
|
|
@@ -194,7 +190,7 @@ function fromHex(hexString) {
|
|
|
194
190
|
// src/storage-signer.ts
|
|
195
191
|
import { sr25519CreateDerive } from "@polkadot-labs/hdkd";
|
|
196
192
|
import { sr25519, ss58Address } from "@polkadot-labs/hdkd-helpers";
|
|
197
|
-
import { createClient as createPolkadotClient
|
|
193
|
+
import { createClient as createPolkadotClient } from "polkadot-api";
|
|
198
194
|
import { getPolkadotSigner } from "polkadot-api/signer";
|
|
199
195
|
import { getWsProvider } from "polkadot-api/ws";
|
|
200
196
|
function sanitize(appId) {
|
|
@@ -336,7 +332,7 @@ async function waitForBulletinAuthorization(ss58, opts = {}) {
|
|
|
336
332
|
return await pollUntilBulletinAuthorized(
|
|
337
333
|
async () => {
|
|
338
334
|
const [auth, block] = await Promise.all([
|
|
339
|
-
unsafeApi
|
|
335
|
+
readAccountAuthorization(unsafeApi, ss58),
|
|
340
336
|
client.getFinalizedBlock()
|
|
341
337
|
]);
|
|
342
338
|
return { auth, blockNumber: block.number };
|
|
@@ -378,18 +374,20 @@ async function getSlotSignerProvider(signer, ss58) {
|
|
|
378
374
|
{ heartbeatTimeout: WS_HEARTBEAT_TIMEOUT_MS, onStatusChanged: makeBulletinStatusHandler(primary) }
|
|
379
375
|
));
|
|
380
376
|
const unsafeApi = client.getUnsafeApi();
|
|
381
|
-
let auth;
|
|
382
|
-
let
|
|
377
|
+
let auth = null;
|
|
378
|
+
let blockNumber = 0;
|
|
383
379
|
try {
|
|
384
|
-
[
|
|
385
|
-
unsafeApi
|
|
380
|
+
const [readAuth, finalized] = await Promise.all([
|
|
381
|
+
readAccountAuthorization(unsafeApi, ss58),
|
|
386
382
|
client.getFinalizedBlock()
|
|
387
383
|
]);
|
|
384
|
+
auth = readAuth;
|
|
385
|
+
blockNumber = finalized.number;
|
|
388
386
|
} catch (e) {
|
|
389
387
|
client.destroy();
|
|
390
388
|
throw e;
|
|
391
389
|
}
|
|
392
|
-
const result = isBulletinAuthActive(auth,
|
|
390
|
+
const result = isBulletinAuthActive(auth, blockNumber);
|
|
393
391
|
if (!result.active) {
|
|
394
392
|
client.destroy();
|
|
395
393
|
throw new BulletinSlotAuthError(result.reason, ss58, result.expiration);
|
|
@@ -599,15 +597,15 @@ async function getDirectProvider(mnemonic, derivationPath = "") {
|
|
|
599
597
|
const { signer, ss58 } = deriveRootSigner(mnemonic, derivationPath);
|
|
600
598
|
console.log(` Using direct signer: ${ss58}${derivationPath ? ` (path: ${derivationPath})` : ""}`);
|
|
601
599
|
let [auth, currentBlock] = await Promise.all([
|
|
602
|
-
unsafeApi
|
|
600
|
+
readAccountAuthorization(unsafeApi, ss58),
|
|
603
601
|
client.getFinalizedBlock()
|
|
604
602
|
]);
|
|
605
603
|
let now = currentBlock.number;
|
|
606
|
-
if (!
|
|
604
|
+
if (!isAuthorizationSufficient(auth, now)) {
|
|
607
605
|
try {
|
|
608
606
|
await ensureAuthorized(unsafeApi, ss58, "direct signer", { autoAuthorize: bulletinAutoAuthorize, authorizer: bulletinAuthorizer });
|
|
609
607
|
[auth, currentBlock] = await Promise.all([
|
|
610
|
-
unsafeApi
|
|
608
|
+
readAccountAuthorization(unsafeApi, ss58),
|
|
611
609
|
client.getFinalizedBlock()
|
|
612
610
|
]);
|
|
613
611
|
now = currentBlock.number;
|
|
@@ -616,7 +614,7 @@ async function getDirectProvider(mnemonic, derivationPath = "") {
|
|
|
616
614
|
throw new NonRetryableError(`Account ${ss58} is not authorized for Bulletin storage and auto-authorization failed: ${e.message}`);
|
|
617
615
|
}
|
|
618
616
|
}
|
|
619
|
-
console.log(` Authorization: expires at block ${
|
|
617
|
+
console.log(` Authorization: expires at block ${auth?.expiration ?? 0} (current: ${now})`);
|
|
620
618
|
setDeployAttribute("deploy.signer.mode", "direct");
|
|
621
619
|
setDeployAttribute("deploy.signer.address", truncateAddress(ss58));
|
|
622
620
|
return { client, unsafeApi, signer, ss58 };
|
|
@@ -625,15 +623,15 @@ async function getSignerProvider(signer, ss58) {
|
|
|
625
623
|
const { client, unsafeApi } = createBulletinClient();
|
|
626
624
|
console.log(` Using external signer: ${ss58}`);
|
|
627
625
|
let [auth, currentBlock] = await Promise.all([
|
|
628
|
-
unsafeApi
|
|
626
|
+
readAccountAuthorization(unsafeApi, ss58),
|
|
629
627
|
client.getFinalizedBlock()
|
|
630
628
|
]);
|
|
631
629
|
let now = currentBlock.number;
|
|
632
|
-
if (!
|
|
630
|
+
if (!isAuthorizationSufficient(auth, now)) {
|
|
633
631
|
try {
|
|
634
632
|
await ensureAuthorized(unsafeApi, ss58, "external signer", { autoAuthorize: bulletinAutoAuthorize, authorizer: bulletinAuthorizer });
|
|
635
633
|
[auth, currentBlock] = await Promise.all([
|
|
636
|
-
unsafeApi
|
|
634
|
+
readAccountAuthorization(unsafeApi, ss58),
|
|
637
635
|
client.getFinalizedBlock()
|
|
638
636
|
]);
|
|
639
637
|
now = currentBlock.number;
|
|
@@ -642,7 +640,7 @@ async function getSignerProvider(signer, ss58) {
|
|
|
642
640
|
throw new NonRetryableError(`Account ${ss58} is not authorized for Bulletin storage and auto-authorization failed: ${e.message}`);
|
|
643
641
|
}
|
|
644
642
|
}
|
|
645
|
-
console.log(` Authorization: expires at block ${
|
|
643
|
+
console.log(` Authorization: expires at block ${auth?.expiration ?? 0} (current: ${now})`);
|
|
646
644
|
setDeployAttribute("deploy.signer.mode", "external");
|
|
647
645
|
setDeployAttribute("deploy.signer.address", truncateAddress(ss58));
|
|
648
646
|
return { client, unsafeApi, signer, ss58 };
|
|
@@ -920,17 +918,17 @@ async function storeChunkedContent(chunks, { client: existingClient, unsafeApi:
|
|
|
920
918
|
}
|
|
921
919
|
}
|
|
922
920
|
const readUploadAuthorization = () => Promise.all([
|
|
923
|
-
unsafeApi.query.
|
|
924
|
-
unsafeApi
|
|
921
|
+
unsafeApi.query.System.Number.getValue(),
|
|
922
|
+
readAccountAuthorization(unsafeApi, ss58)
|
|
925
923
|
]);
|
|
926
|
-
let uploadAuth;
|
|
927
|
-
let currentBlockNum;
|
|
924
|
+
let uploadAuth = null;
|
|
925
|
+
let currentBlockNum = 0;
|
|
928
926
|
try {
|
|
929
|
-
[
|
|
927
|
+
[currentBlockNum, uploadAuth] = await readUploadAuthorization();
|
|
930
928
|
} catch (e) {
|
|
931
929
|
if (existingClient && reconnect && isConnectionError(e)) {
|
|
932
930
|
await refreshExistingClient("authorization preflight hit a stale chainHead");
|
|
933
|
-
[
|
|
931
|
+
[currentBlockNum, uploadAuth] = await readUploadAuthorization();
|
|
934
932
|
} else {
|
|
935
933
|
throw e;
|
|
936
934
|
}
|
|
@@ -2286,7 +2284,6 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2286
2284
|
setDeployAttribute("deploy.transfer.enabled", options.transferTo ? "true" : "false");
|
|
2287
2285
|
let cid;
|
|
2288
2286
|
let ipfsCid;
|
|
2289
|
-
let mirrorPromise = Promise.resolve(null);
|
|
2290
2287
|
console.log("\n" + "=".repeat(60));
|
|
2291
2288
|
console.log(`DEPLOYING TO TESTNET v${VERSION}`);
|
|
2292
2289
|
console.log("=".repeat(60));
|
|
@@ -2443,18 +2440,6 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2443
2440
|
carChunks = chunk(carContent, CHUNK_SIZE);
|
|
2444
2441
|
}
|
|
2445
2442
|
}
|
|
2446
|
-
const predictedStorageCid = computeStorageCid(carChunks);
|
|
2447
|
-
if (options.ghPagesMirror) {
|
|
2448
|
-
mirrorPromise = mirrorToGitHubPages({
|
|
2449
|
-
domain: name,
|
|
2450
|
-
carBytes: carContent,
|
|
2451
|
-
cid: predictedStorageCid,
|
|
2452
|
-
toolVersion: VERSION,
|
|
2453
|
-
bulletinRpc: BULLETIN_ENDPOINTS[0],
|
|
2454
|
-
encrypted: Boolean(options.password),
|
|
2455
|
-
tld: envTld
|
|
2456
|
-
}).catch((err) => err instanceof Error ? err : new Error(String(err)));
|
|
2457
|
-
}
|
|
2458
2443
|
cid = (await storeChunkedContent(carChunks, providerWithReconnect)).storageCid;
|
|
2459
2444
|
} else if (process.env.IPFS_CID) {
|
|
2460
2445
|
setDeployAttribute("deploy.content_type", "ipfsCid");
|
|
@@ -2503,20 +2488,7 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2503
2488
|
reproducibleSource: options.reproducibleSource,
|
|
2504
2489
|
domain: name,
|
|
2505
2490
|
gateway: envIpfs,
|
|
2506
|
-
dumpCar: options.dumpCar
|
|
2507
|
-
onCarReady: (carBytes, predictedCid) => {
|
|
2508
|
-
if (options.ghPagesMirror) {
|
|
2509
|
-
mirrorPromise = mirrorToGitHubPages({
|
|
2510
|
-
domain: name,
|
|
2511
|
-
carBytes,
|
|
2512
|
-
cid: predictedCid,
|
|
2513
|
-
toolVersion: VERSION,
|
|
2514
|
-
bulletinRpc: BULLETIN_ENDPOINTS[0],
|
|
2515
|
-
encrypted: Boolean(options.password),
|
|
2516
|
-
tld: envTld
|
|
2517
|
-
}).catch((err) => err instanceof Error ? err : new Error(String(err)));
|
|
2518
|
-
}
|
|
2519
|
-
}
|
|
2491
|
+
dumpCar: options.dumpCar
|
|
2520
2492
|
});
|
|
2521
2493
|
cid = sCid;
|
|
2522
2494
|
ipfsCid = iCid;
|
|
@@ -2690,40 +2662,6 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2690
2662
|
console.log(` P2P retrieval: \u26A0 not yet retrievable (${probe.errorVariant}, ${probe.durationMs}ms)`);
|
|
2691
2663
|
}
|
|
2692
2664
|
});
|
|
2693
|
-
if (options.ghPagesMirror) {
|
|
2694
|
-
console.log("\n" + "=".repeat(60));
|
|
2695
|
-
console.log("Final checks");
|
|
2696
|
-
console.log("=".repeat(60));
|
|
2697
|
-
await withSpan("deploy.gh-pages-mirror", "4. gh-pages-mirror", { "deploy.domain": name }, async () => {
|
|
2698
|
-
const mirror = await mirrorPromise;
|
|
2699
|
-
if (mirror === null) {
|
|
2700
|
-
console.log(" GitHub Pages mirror: skipped (only directory deploys produce a CAR suitable for mirroring).");
|
|
2701
|
-
return;
|
|
2702
|
-
}
|
|
2703
|
-
if (mirror instanceof MirrorSkipped) {
|
|
2704
|
-
console.log(` GitHub Pages mirror: skipped \u2014 ${mirror.message}`);
|
|
2705
|
-
return;
|
|
2706
|
-
}
|
|
2707
|
-
if (mirror instanceof Error) {
|
|
2708
|
-
console.log(` GitHub Pages mirror: failed (non-fatal) \u2014 ${mirror.message}`);
|
|
2709
|
-
captureWarning("gh-pages mirror failed", { error: mirror.message.slice(0, 200) });
|
|
2710
|
-
return;
|
|
2711
|
-
}
|
|
2712
|
-
console.log(` Mirror: ${mirror.url}`);
|
|
2713
|
-
console.log(` Manifest: https://${mirror.owner}.github.io/${mirror.repo}/${mirror.manifestPath}`);
|
|
2714
|
-
setDeployAttribute("deploy.gh_pages_url", mirror.url);
|
|
2715
|
-
process.stdout.write(" Verifying Pages serves this deploy's CAR... ");
|
|
2716
|
-
const freshness = await pollMirrorFreshness(mirror.url, cid, { timeoutMs: 3 * 60 * 1e3, intervalMs: 1e4 });
|
|
2717
|
-
if (freshness.verified) {
|
|
2718
|
-
console.log(`ok (${freshness.attempts} attempt${freshness.attempts === 1 ? "" : "s"}, ${(freshness.durationMs / 1e3).toFixed(0)}s).`);
|
|
2719
|
-
setDeployAttribute("deploy.gh_pages_freshness_verified", "true");
|
|
2720
|
-
} else {
|
|
2721
|
-
console.log(`timed out.`);
|
|
2722
|
-
console.log(` GitHub Pages last served cid=${freshness.lastCid ?? "n/a"} (expected ${cid}); it should catch up shortly. Non-fatal.`);
|
|
2723
|
-
setDeployAttribute("deploy.gh_pages_freshness_verified", "false");
|
|
2724
|
-
}
|
|
2725
|
-
});
|
|
2726
|
-
}
|
|
2727
2665
|
console.log("\n" + "=".repeat(60));
|
|
2728
2666
|
console.log("DEPLOYMENT COMPLETE!");
|
|
2729
2667
|
console.log("=".repeat(60));
|
|
@@ -53,6 +53,14 @@ function composePlaceholderExecutable(exec) {
|
|
|
53
53
|
...exec.description !== void 0 ? { description: exec.description } : {}
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
|
+
if (exec.kind === "funding") {
|
|
57
|
+
return {
|
|
58
|
+
$v: 1,
|
|
59
|
+
kind: "funding",
|
|
60
|
+
appVersion: exec.appVersion,
|
|
61
|
+
modes: exec.modes
|
|
62
|
+
};
|
|
63
|
+
}
|
|
56
64
|
return {
|
|
57
65
|
$v: 1,
|
|
58
66
|
kind: "worker",
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
} from "./chunk-5FLTDWWP.js";
|
|
5
5
|
import {
|
|
6
6
|
DOT_PRODUCT_ID
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JTCPDG3Q.js";
|
|
8
8
|
import {
|
|
9
9
|
DEFAULT_MNEMONIC
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-6FYNBBXT.js";
|
|
11
11
|
|
|
12
12
|
// src/deploy-actors.ts
|
|
13
13
|
var DEFAULT_WORKER_SURI = DEFAULT_MNEMONIC;
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-SI2ZUOYD.js";
|
|
4
4
|
import {
|
|
5
5
|
isTestnetSpecName
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-KJVRJOKC.js";
|
|
7
7
|
import {
|
|
8
8
|
validateContractAddresses
|
|
9
9
|
} from "./chunk-CL7GQYYK.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "./chunk-ZOC4GITL.js";
|
|
13
13
|
import {
|
|
14
14
|
ChainHealthSampler
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-YEWTKVXV.js";
|
|
16
16
|
import {
|
|
17
17
|
captureWarning,
|
|
18
18
|
markCodePath,
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
setDeploySentryTag,
|
|
21
21
|
truncateAddress,
|
|
22
22
|
withSpan
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-AEDFJNS4.js";
|
|
24
24
|
|
|
25
25
|
// src/dotns.ts
|
|
26
26
|
import crypto from "crypto";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
package_default,
|
|
3
3
|
writeRunState
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MPTNVUWH.js";
|
|
5
5
|
|
|
6
6
|
// src/memory-report.ts
|
|
7
7
|
import * as fs2 from "fs";
|
|
@@ -335,9 +335,40 @@ function computeDeployOutcome(errorCategory, isSad, sadReason) {
|
|
|
335
335
|
}
|
|
336
336
|
var TLD_FRAGMENT = "[a-z]{2,}";
|
|
337
337
|
var ERROR_KIND_RULES = [
|
|
338
|
-
|
|
339
|
-
|
|
338
|
+
// Wrapper messages that interpolate a nested cause must precede the generic
|
|
339
|
+
// infra patterns below: the interpolated inner error frequently contains
|
|
340
|
+
// "Contract reverted" or a timeout phrase and would otherwise steal the
|
|
341
|
+
// classification from the more specific, more actionable outer message.
|
|
342
|
+
// (2026-08-06 telemetry sweep: this was the largest live `unknown` bucket —
|
|
343
|
+
// 31 spans, 30 of them env=preview, from the per-env authorizer gap #1209.)
|
|
344
|
+
[/is not authorized for Bulletin storage/i, "storage.rejected"],
|
|
345
|
+
// Revive surfaces the personhood gate as a bare revert reason rather than the
|
|
346
|
+
// "requires ProofOfPersonhoodX, but this signer is NoStatus" prose matched
|
|
347
|
+
// further down — same user-actionable cause, so it shares that kind. Ordered
|
|
348
|
+
// ahead of contract-revert, which would otherwise claim it: both the
|
|
349
|
+
// "(flags=N)" shape and (since #1255) the decoded `Publisher.publish reverted:`
|
|
350
|
+
// shape are contract-revert alternatives, and NoPersonhood arrives as the
|
|
351
|
+
// latter. The specific kind names the remedy, so it wins.
|
|
352
|
+
[/reverted:\s*NoPersonhood\b/i, "naming.pop_required"],
|
|
353
|
+
// Operator interrupt (Ctrl-C). Its own kind so dashboards can exclude it from
|
|
354
|
+
// the deploy failure rate rather than counting it as an unexplained failure.
|
|
355
|
+
// Deliberately anchored: because this kind *removes* a span from the failure
|
|
356
|
+
// rate, a false positive silently deletes a real failure. The phrase does not
|
|
357
|
+
// originate anywhere in src/ — it arrives verbatim as the whole message — so
|
|
358
|
+
// matching it as a sub-clause would only ever be a guess. If a wrapped variant
|
|
359
|
+
// shows up in the data later, widening this is a one-line change with evidence
|
|
360
|
+
// behind it; over-matching now would be invisible.
|
|
361
|
+
[/^aborted by user\b/i, "user.aborted"],
|
|
362
|
+
// `Publisher\.(?:un)?publish reverted:` — decoded ABI custom-error reverts
|
|
363
|
+
// from src/dotns.ts's publishLabel/unpublishLabel Publisher call paths.
|
|
364
|
+
[/Contract reverted|Contract execution would revert|revert(?:ed|ing)?\s*\(flags=[0-9]+\)|"type"\s*:\s*"ContractReverted"|Publisher\.(?:un)?publish reverted:/i, "contract-revert"],
|
|
365
|
+
[/timed out after \d+s waiting for block|Transaction not included after \d+s|Transaction did not settle within|Commitment still too new after \d+s/i, "chain-timeout"],
|
|
340
366
|
[/\bstale\b.*nonce|nonce.*\bstale\b|"type"\s*:\s*"(?:Future|Stale)"|Invalid::Future|tx rejected by pool/i, "nonce-stale"],
|
|
367
|
+
// Invalid::BadProof: the extrinsic's signature didn't verify (wrong genesis
|
|
368
|
+
// hash / mortality window / spec version, or a re-signed payload mismatch).
|
|
369
|
+
// Bare variant name, not the JSON envelope — both producer sites in
|
|
370
|
+
// src/deploy.ts truncate the inner chain error at 100 chars.
|
|
371
|
+
[/BadProof/i, "chain.bad_proof"],
|
|
341
372
|
[/heartbeat timeout|WS halt|Unable to connect|ChainHead disjointed|websocket.*closed|socket closed|disconnect/i, "connection"],
|
|
342
373
|
[/requires ProofOfPersonhood(?:Full|Lite|Light),\s*but this signer is NoStatus/i, "naming.pop_required"],
|
|
343
374
|
[/requires NoStatus,\s*but this signer is ProofOfPersonhood/i, "naming.nostatus_required"],
|
|
@@ -348,6 +379,10 @@ var ERROR_KIND_RULES = [
|
|
|
348
379
|
// it the same way instead of letting it fall into 'unknown'.
|
|
349
380
|
[/No contract deployed at .+ returned empty success data/i, "naming.contract_unavailable"],
|
|
350
381
|
[/Contract call returned empty data — contract=/i, "naming.contract_unavailable"],
|
|
382
|
+
// Same failure family caught one step earlier: the environment config carries
|
|
383
|
+
// a zero/absent address, so the call is refused before it is made rather than
|
|
384
|
+
// coming back with empty data.
|
|
385
|
+
[/Invalid contract address for \w+ in environment/i, "naming.contract_unavailable"],
|
|
351
386
|
[new RegExp(`Domain\\s+\\S+\\.${TLD_FRAGMENT}\\s+is already owned by\\s+0x[a-fA-F0-9]+`, "i"), "naming.already_owned"],
|
|
352
387
|
// #1185: formatUnregistrableReason's distinctive phrase — present in both
|
|
353
388
|
// the unregistered ("...is not registered, and bulletin-deploy cannot
|
|
@@ -367,7 +402,11 @@ var ERROR_KIND_RULES = [
|
|
|
367
402
|
[/ReviveApi\.\w+ returned empty result/i, "chain.api_timeout"],
|
|
368
403
|
[/transaction watcher silent for \d+s/i, "chain.tx_silent"],
|
|
369
404
|
[/(?:commit|register|setSubnodeOwner|setResolver|setContenthash|setText|publish|unpublish|Revive\.call|Utility\.batch_all) timed out after \d+ms/i, "chain.tx_timeout"],
|
|
370
|
-
|
|
405
|
+
// Prefix, not the full `AncientBirthBlock` variant name: at 17 chars it is
|
|
406
|
+
// long enough to be cut in half by the 100-char truncation both src/deploy.ts
|
|
407
|
+
// producer sites apply to the inner chain error, which sent a live span to
|
|
408
|
+
// `unknown` with the message ending `"type": "AncientBirth`.
|
|
409
|
+
[/AncientBirth/i, "chain.extrinsic_expired"],
|
|
371
410
|
[/Bulletin quota exhausted/i, "chain.quota_exhausted"],
|
|
372
411
|
[/Mobile signing (?:failed|rejected).*message too big/i, "signer.message_too_large"],
|
|
373
412
|
[/^INVARIANT FAILED:/i, "tool.invariant"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
pessimisticSizePreflight
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3THUTBHU.js";
|
|
4
4
|
import {
|
|
5
5
|
BLAKE2B_256_MULTIHASH_CODE,
|
|
6
6
|
encodeContenthash,
|
|
@@ -9,13 +9,13 @@ import {
|
|
|
9
9
|
setBulletinEndpoints,
|
|
10
10
|
storeDirectory,
|
|
11
11
|
storeFile
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-3PW5FJCP.js";
|
|
13
13
|
import {
|
|
14
14
|
DEFAULT_TLD,
|
|
15
15
|
DotNS,
|
|
16
16
|
TX_KIND_SKIPPED,
|
|
17
17
|
stripTldSuffix
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-6FYNBBXT.js";
|
|
19
19
|
import {
|
|
20
20
|
DEFAULT_ENV_ID,
|
|
21
21
|
getPopSelfServeConfig,
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
setDeployAttribute,
|
|
30
30
|
withManifestSpan,
|
|
31
31
|
withSpan
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-AEDFJNS4.js";
|
|
33
33
|
|
|
34
34
|
// src/manifest/publish.ts
|
|
35
35
|
import * as fs from "fs/promises";
|
|
@@ -195,6 +195,9 @@ function composeExecutable(exec) {
|
|
|
195
195
|
...exec.description !== void 0 ? { description: exec.description } : {}
|
|
196
196
|
};
|
|
197
197
|
}
|
|
198
|
+
if (exec.kind === "funding") {
|
|
199
|
+
return { $v: 1, kind: "funding", appVersion: exec.appVersion, modes: exec.modes };
|
|
200
|
+
}
|
|
198
201
|
return {
|
|
199
202
|
$v: 1,
|
|
200
203
|
kind: "worker",
|
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
classifyErrorArea,
|
|
3
3
|
isInteractive,
|
|
4
4
|
promptYesNo
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-R5NAMIRF.js";
|
|
6
6
|
import {
|
|
7
7
|
VERSION,
|
|
8
8
|
getCurrentSentryTraceId,
|
|
9
9
|
resolveIssueRepoSlug
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-AEDFJNS4.js";
|
|
11
11
|
import {
|
|
12
12
|
package_default
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-MPTNVUWH.js";
|
|
14
14
|
|
|
15
15
|
// src/bug-report.ts
|
|
16
16
|
import { execSync, execFileSync } from "child_process";
|
|
@@ -80,7 +80,6 @@ function scrubSecrets(text) {
|
|
|
80
80
|
function buildCliFlagsSummary(flags) {
|
|
81
81
|
const parts = [];
|
|
82
82
|
if (flags.jsMerkle) parts.push("--js-merkle");
|
|
83
|
-
if (flags.ghPagesMirror) parts.push("--gh-pages-mirror");
|
|
84
83
|
if (flags.publish) parts.push("--publish");
|
|
85
84
|
if (flags.unpublish) parts.push("--unpublish");
|
|
86
85
|
if (flags.failOnPublishError) parts.push("--fail-on-publish-error");
|