@parity/product-deploy 0.11.0-rc.2 → 0.11.0-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.
- package/assets/environments.json +2 -0
- package/dist/auth-config.js +4 -4
- package/dist/bug-report.d.ts +10 -1
- package/dist/bug-report.js +6 -4
- package/dist/{chunk-422RAWSV.js → chunk-23AKFLS3.js} +3 -3
- package/dist/{chunk-HXN2HJMZ.js → chunk-4CQ75L4W.js} +1 -1
- package/dist/{chunk-6YUT276Z.js → chunk-CYKONVA7.js} +1 -1
- package/dist/{chunk-AR5IUHCM.js → chunk-GQNCLVZM.js} +1 -1
- package/dist/{chunk-QRKI6MMK.js → chunk-JSYQ3JQS.js} +4 -1
- package/dist/{chunk-4IUTMHVB.js → chunk-MRQPJLPS.js} +24 -3
- package/dist/{chunk-MU75RB7Z.js → chunk-ORJM2DGE.js} +2 -2
- package/dist/{chunk-YVLDMADS.js → chunk-ORS77MUP.js} +41 -20
- package/dist/{chunk-2MRHO7I5.js → chunk-OVF6SN7P.js} +1 -1
- package/dist/{chunk-6ZF7V4PG.js → chunk-PRBEYWUY.js} +2 -2
- package/dist/{chunk-WCEPEDZA.js → chunk-Q6UOOXXS.js} +9 -3
- package/dist/{chunk-OXENTCOF.js → chunk-RC3CVUOG.js} +46 -12
- package/dist/{chunk-33T5FHX2.js → chunk-ZDJW2Q4R.js} +1 -1
- package/dist/chunk-probe.js +3 -3
- package/dist/commands/login.js +12 -12
- package/dist/commands/logout.js +5 -5
- package/dist/commands/transfer.js +5 -5
- package/dist/commands/whoami.js +4 -4
- package/dist/deploy-actors.js +7 -7
- package/dist/deploy.d.ts +10 -1
- package/dist/deploy.js +14 -12
- package/dist/dotns.d.ts +33 -2
- package/dist/dotns.js +9 -5
- package/dist/environments.d.ts +2 -0
- package/dist/environments.js +1 -1
- package/dist/index.js +13 -13
- package/dist/manifest/publish.js +13 -13
- package/dist/memory-report.js +2 -2
- package/dist/merkle.js +12 -12
- package/dist/personhood/bootstrap.js +5 -5
- package/dist/personhood/people-client.js +5 -5
- package/dist/pool.d.ts +3 -1
- package/dist/pool.js +1 -1
- package/dist/run-state.js +1 -1
- package/dist/sss-allowance-cache.js +5 -5
- package/dist/storage-signer.js +12 -12
- package/dist/telemetry.js +2 -2
- package/dist/version-check.js +3 -3
- package/package.json +1 -1
package/assets/environments.json
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"name": "Preview",
|
|
6
6
|
"network": "testnet",
|
|
7
7
|
"description": "Product Preview net, used by Product Teams",
|
|
8
|
+
"bulletinAutoAuthorize": true,
|
|
8
9
|
"e2eEligible": true,
|
|
9
10
|
"backend": "https://polkadot-app-stg.parity.io/",
|
|
10
11
|
"ipfs": "https://previewnet.substrate.dev",
|
|
@@ -96,6 +97,7 @@
|
|
|
96
97
|
"name": "Paseo Next v2",
|
|
97
98
|
"network": "testnet",
|
|
98
99
|
"description": "Next iteration of the Paseo Next testnet",
|
|
100
|
+
"bulletinAutoAuthorize": true,
|
|
99
101
|
"e2eEligible": true,
|
|
100
102
|
"backend": "https://identity-backend-next.parity-testnet.parity.io",
|
|
101
103
|
"ipfs": "https://paseo-bulletin-next-ipfs.polkadot.io",
|
package/dist/auth-config.js
CHANGED
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
getPeopleChainEndpoints,
|
|
10
10
|
hasPersistedSession,
|
|
11
11
|
resolveBulletinEndpoints
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ORJM2DGE.js";
|
|
13
13
|
import "./chunk-TSPERKUS.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-4CQ75L4W.js";
|
|
15
|
+
import "./chunk-GQNCLVZM.js";
|
|
16
|
+
import "./chunk-JSYQ3JQS.js";
|
|
17
17
|
import "./chunk-ZOC4GITL.js";
|
|
18
18
|
export {
|
|
19
19
|
DOT_DAPP_ID,
|
package/dist/bug-report.d.ts
CHANGED
|
@@ -24,6 +24,15 @@ declare function buildReportBody(error: Error): string;
|
|
|
24
24
|
declare function buildTitle(error: Error): string;
|
|
25
25
|
declare function buildLabels(error: Error): string[];
|
|
26
26
|
declare function createGhIssue(title: string, body: string, labels: string[]): string;
|
|
27
|
+
/**
|
|
28
|
+
* True for deploy failures caused by user input rather than a code defect, so
|
|
29
|
+
* the bug-report prompt is NOT offered for them (#869). Scoped to DotNS name
|
|
30
|
+
* validation: a malformed or reserved label ("Invalid domain label …",
|
|
31
|
+
* "… reserves base names of N chars …") is something the user fixes by choosing
|
|
32
|
+
* a different name — filing it as a bug just creates noise. The actionable error
|
|
33
|
+
* message has already been printed to the user. Exported for unit testing.
|
|
34
|
+
*/
|
|
35
|
+
declare function isUserInputError(error: Error): boolean;
|
|
27
36
|
declare function offerBugReport(error: Error): Promise<void>;
|
|
28
37
|
|
|
29
|
-
export { buildCliFlagsSummary, buildLabels, buildReportBody, buildTitle, createGhIssue, getCapturedTail, installLogCapture, offerBugReport, scrubSecrets, setDeployContext };
|
|
38
|
+
export { buildCliFlagsSummary, buildLabels, buildReportBody, buildTitle, createGhIssue, getCapturedTail, installLogCapture, isUserInputError, offerBugReport, scrubSecrets, setDeployContext };
|
package/dist/bug-report.js
CHANGED
|
@@ -6,13 +6,14 @@ import {
|
|
|
6
6
|
createGhIssue,
|
|
7
7
|
getCapturedTail,
|
|
8
8
|
installLogCapture,
|
|
9
|
+
isUserInputError,
|
|
9
10
|
offerBugReport,
|
|
10
11
|
scrubSecrets,
|
|
11
12
|
setDeployContext
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-Q6UOOXXS.js";
|
|
14
|
+
import "./chunk-OVF6SN7P.js";
|
|
15
|
+
import "./chunk-4CQ75L4W.js";
|
|
16
|
+
import "./chunk-GQNCLVZM.js";
|
|
16
17
|
export {
|
|
17
18
|
buildCliFlagsSummary,
|
|
18
19
|
buildLabels,
|
|
@@ -21,6 +22,7 @@ export {
|
|
|
21
22
|
createGhIssue,
|
|
22
23
|
getCapturedTail,
|
|
23
24
|
installLogCapture,
|
|
25
|
+
isUserInputError,
|
|
24
26
|
offerBugReport,
|
|
25
27
|
scrubSecrets,
|
|
26
28
|
setDeployContext
|
|
@@ -7,15 +7,15 @@ import {
|
|
|
7
7
|
resolveDotnsConnectOptions,
|
|
8
8
|
storeDirectory,
|
|
9
9
|
storeFile
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-ORS77MUP.js";
|
|
11
11
|
import {
|
|
12
12
|
DotNS
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-RC3CVUOG.js";
|
|
14
14
|
import {
|
|
15
15
|
getPopSelfServeConfig,
|
|
16
16
|
loadEnvironments,
|
|
17
17
|
resolveEndpoints
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-JSYQ3JQS.js";
|
|
19
19
|
import {
|
|
20
20
|
NonRetryableError
|
|
21
21
|
} from "./chunk-ZOC4GITL.js";
|
|
@@ -14,6 +14,7 @@ var environments_default = {
|
|
|
14
14
|
name: "Preview",
|
|
15
15
|
network: "testnet",
|
|
16
16
|
description: "Product Preview net, used by Product Teams",
|
|
17
|
+
bulletinAutoAuthorize: true,
|
|
17
18
|
e2eEligible: true,
|
|
18
19
|
backend: "https://polkadot-app-stg.parity.io/",
|
|
19
20
|
ipfs: "https://previewnet.substrate.dev",
|
|
@@ -105,6 +106,7 @@ var environments_default = {
|
|
|
105
106
|
name: "Paseo Next v2",
|
|
106
107
|
network: "testnet",
|
|
107
108
|
description: "Next iteration of the Paseo Next testnet",
|
|
109
|
+
bulletinAutoAuthorize: true,
|
|
108
110
|
e2eEligible: true,
|
|
109
111
|
backend: "https://identity-backend-next.parity-testnet.parity.io",
|
|
110
112
|
ipfs: "https://paseo-bulletin-next-ipfs.polkadot.io",
|
|
@@ -652,7 +654,8 @@ function resolveEndpoints(doc, envId) {
|
|
|
652
654
|
autoAccountMapping: env.autoAccountMapping ?? false,
|
|
653
655
|
contracts: env.contracts ?? {},
|
|
654
656
|
nativeToEthRatio: BigInt(env.nativeToEthRatio ?? 1e6),
|
|
655
|
-
...env.registerStorageDeposit !== void 0 ? { registerStorageDeposit: BigInt(env.registerStorageDeposit) } : {}
|
|
657
|
+
...env.registerStorageDeposit !== void 0 ? { registerStorageDeposit: BigInt(env.registerStorageDeposit) } : {},
|
|
658
|
+
bulletinAutoAuthorize: env.bulletinAutoAuthorize ?? false
|
|
656
659
|
};
|
|
657
660
|
}
|
|
658
661
|
function getPopSelfServeConfig(doc, envId) {
|
|
@@ -100,17 +100,38 @@ function clampU32(n, name) {
|
|
|
100
100
|
if (n > U32_MAX) throw new Error(`${name} (${n}) exceeds u32 max \u2014 split the deploy into smaller batches`);
|
|
101
101
|
return Number(n);
|
|
102
102
|
}
|
|
103
|
-
async function ensureAuthorized(api, address, label) {
|
|
103
|
+
async function ensureAuthorized(api, address, label, opts = {}) {
|
|
104
104
|
const [auth, currentBlock] = await Promise.all([
|
|
105
105
|
api.query.TransactionStorage.Authorizations.getValue(Enum("Account", address)),
|
|
106
106
|
api.query.System.Number.getValue()
|
|
107
107
|
]);
|
|
108
108
|
if (isAuthorizationSufficient(auth, currentBlock)) return;
|
|
109
|
-
const isTestnet = await detectTestnet(api);
|
|
110
109
|
const who = `${label ?? "account"} (${address.slice(0, 8)}...)`;
|
|
110
|
+
if (opts.autoAuthorize) {
|
|
111
|
+
await cryptoWaitReady();
|
|
112
|
+
const keyring = new Keyring({ type: "sr25519" });
|
|
113
|
+
const alice = keyring.addFromUri("//Alice");
|
|
114
|
+
const signer = getPolkadotSigner(alice.publicKey, "Sr25519", (data) => alice.sign(data));
|
|
115
|
+
const grant = `${TOPUP_TRANSACTIONS} txs / ${Number(TOPUP_BYTES) / 1e6}MB`;
|
|
116
|
+
console.log(` Auto-authorizing ${who} on Bulletin (${grant})...`);
|
|
117
|
+
const tx = api.tx.TransactionStorage.authorize_account({
|
|
118
|
+
who: address,
|
|
119
|
+
transactions: clampU32(BigInt(TOPUP_TRANSACTIONS), "transactions"),
|
|
120
|
+
bytes: TOPUP_BYTES
|
|
121
|
+
});
|
|
122
|
+
const result = await tx.signAndSubmit(signer);
|
|
123
|
+
if (!result?.ok) {
|
|
124
|
+
throw new Error(
|
|
125
|
+
`Auto-authorization of Bulletin storage account ${who} failed: authorize_account was rejected. This environment is flagged bulletinAutoAuthorize, but //Alice may not hold authorizer rights on this chain.`
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
console.log(` Authorized: ${grant}`);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const isTestnet = await detectTestnet(api);
|
|
111
132
|
if (isTestnet) {
|
|
112
133
|
throw new Error(
|
|
113
|
-
`Bulletin storage account ${who} is not authorized (or its authorization expired). bulletin-deploy
|
|
134
|
+
`Bulletin storage account ${who} is not authorized (or its authorization expired). bulletin-deploy self-authorizes only on allow-listed testnets (environments.json bulletinAutoAuthorize) \u2014 request authorization for this account from the chain's authorizer (testnet faucet / personhood / pool bootstrap), then retry.`
|
|
114
135
|
);
|
|
115
136
|
}
|
|
116
137
|
throw new Error(
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
} from "./chunk-TSPERKUS.js";
|
|
4
4
|
import {
|
|
5
5
|
VERSION
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-4CQ75L4W.js";
|
|
7
7
|
import {
|
|
8
8
|
loadEnvironments
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-JSYQ3JQS.js";
|
|
10
10
|
|
|
11
11
|
// src/auth-config.ts
|
|
12
12
|
import { existsSync, readdirSync } from "fs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
preflightSssAllowance
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CYKONVA7.js";
|
|
4
4
|
import {
|
|
5
5
|
statementSigningAccount
|
|
6
6
|
} from "./chunk-GRPLHUYC.js";
|
|
@@ -31,16 +31,16 @@ import {
|
|
|
31
31
|
} from "./chunk-S7EM5VMW.js";
|
|
32
32
|
import {
|
|
33
33
|
setDeployContext
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-Q6UOOXXS.js";
|
|
35
35
|
import {
|
|
36
36
|
probeChunks
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-ZDJW2Q4R.js";
|
|
38
38
|
import {
|
|
39
39
|
packSection
|
|
40
40
|
} from "./chunk-C2TS5MER.js";
|
|
41
41
|
import {
|
|
42
42
|
resolveStorageSigner
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-PRBEYWUY.js";
|
|
44
44
|
import {
|
|
45
45
|
createSlotAccountSigner,
|
|
46
46
|
requestResourceAllocation
|
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
STALE_SESSION_MESSAGE,
|
|
50
50
|
getPeopleChainEndpoints,
|
|
51
51
|
hasPersistedSession
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-ORJM2DGE.js";
|
|
53
53
|
import {
|
|
54
54
|
CLI_NAME
|
|
55
55
|
} from "./chunk-TSPERKUS.js";
|
|
@@ -62,7 +62,7 @@ import {
|
|
|
62
62
|
parseDomainName,
|
|
63
63
|
popStatusName,
|
|
64
64
|
verifyNonceAdvanced
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-RC3CVUOG.js";
|
|
66
66
|
import {
|
|
67
67
|
derivePoolAccounts,
|
|
68
68
|
detectTestnet,
|
|
@@ -70,7 +70,7 @@ import {
|
|
|
70
70
|
fetchPoolAuthorizations,
|
|
71
71
|
isAuthorizationSufficient,
|
|
72
72
|
selectAccount
|
|
73
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-MRQPJLPS.js";
|
|
74
74
|
import {
|
|
75
75
|
VERSION,
|
|
76
76
|
captureWarning,
|
|
@@ -84,13 +84,13 @@ import {
|
|
|
84
84
|
truncateAddress,
|
|
85
85
|
withDeploySpan,
|
|
86
86
|
withSpan
|
|
87
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-4CQ75L4W.js";
|
|
88
88
|
import {
|
|
89
89
|
DEFAULT_ENV_ID,
|
|
90
90
|
getPopSelfServeConfig,
|
|
91
91
|
loadEnvironments,
|
|
92
92
|
resolveEndpoints
|
|
93
|
-
} from "./chunk-
|
|
93
|
+
} from "./chunk-JSYQ3JQS.js";
|
|
94
94
|
import {
|
|
95
95
|
NonRetryableError
|
|
96
96
|
} from "./chunk-ZOC4GITL.js";
|
|
@@ -373,6 +373,7 @@ var DEFAULT_BULLETIN_RPC = "wss://paseo-bulletin-rpc.polkadot.io";
|
|
|
373
373
|
var DEFAULT_POOL_SIZE = 10;
|
|
374
374
|
var BULLETIN_ENDPOINTS = [DEFAULT_BULLETIN_RPC];
|
|
375
375
|
var POOL_SIZE = DEFAULT_POOL_SIZE;
|
|
376
|
+
var bulletinAutoAuthorize = false;
|
|
376
377
|
var _deployRpcFailedOver = false;
|
|
377
378
|
var _onWsHalt = null;
|
|
378
379
|
function setWsHaltCallback(cb) {
|
|
@@ -511,7 +512,7 @@ async function getProvider() {
|
|
|
511
512
|
const selectionResult = selectAccount(authorizations, Math.random, pinnedPoolIndex);
|
|
512
513
|
const selectedAccount = selectionResult.account;
|
|
513
514
|
const eligibleCount = selectionResult.eligibleCount;
|
|
514
|
-
await ensureAuthorized(unsafeApi, selectedAccount.address, `pool account ${selectedAccount.index}
|
|
515
|
+
await ensureAuthorized(unsafeApi, selectedAccount.address, `pool account ${selectedAccount.index}`, { autoAuthorize: bulletinAutoAuthorize });
|
|
515
516
|
console.log(` Using pool account ${selectedAccount.index}: ${selectedAccount.address}`);
|
|
516
517
|
setDeployAttribute("deploy.signer.mode", "pool");
|
|
517
518
|
setDeployAttribute("deploy.pool.account", truncateAddress(selectedAccount.address));
|
|
@@ -540,7 +541,7 @@ async function getDirectProvider(mnemonic, derivationPath = "") {
|
|
|
540
541
|
let now = currentBlock.number;
|
|
541
542
|
if (!auth || Number(auth.expiration ?? 0) <= now) {
|
|
542
543
|
try {
|
|
543
|
-
await ensureAuthorized(unsafeApi, ss58, "direct signer");
|
|
544
|
+
await ensureAuthorized(unsafeApi, ss58, "direct signer", { autoAuthorize: bulletinAutoAuthorize });
|
|
544
545
|
[auth, currentBlock] = await Promise.all([
|
|
545
546
|
unsafeApi.query.TransactionStorage.Authorizations.getValue(Enum2("Account", ss58)),
|
|
546
547
|
client.getFinalizedBlock()
|
|
@@ -572,7 +573,7 @@ async function getSignerProvider(signer, ss58) {
|
|
|
572
573
|
let now = currentBlock.number;
|
|
573
574
|
if (!auth || Number(auth.expiration ?? 0) <= now) {
|
|
574
575
|
try {
|
|
575
|
-
await ensureAuthorized(unsafeApi, ss58, "external signer");
|
|
576
|
+
await ensureAuthorized(unsafeApi, ss58, "external signer", { autoAuthorize: bulletinAutoAuthorize });
|
|
576
577
|
[auth, currentBlock] = await Promise.all([
|
|
577
578
|
unsafeApi.query.TransactionStorage.Authorizations.getValue(Enum2("Account", ss58)),
|
|
578
579
|
client.getFinalizedBlock()
|
|
@@ -614,6 +615,9 @@ function formatStorageSignerLine(slotAddress, failReason, owned) {
|
|
|
614
615
|
}
|
|
615
616
|
return ` Storage signer: pool fallback (${failReason ?? "no session"})`;
|
|
616
617
|
}
|
|
618
|
+
function formatTransferModeDotnsLine(alreadyOwned, dotName, recipient) {
|
|
619
|
+
return alreadyOwned ? ` DotNS: you already own ${dotName} \u2014 content update needs your phone signature (no transfer)` : ` DotNS: will register ${dotName} and transfer it to your account ${recipient}`;
|
|
620
|
+
}
|
|
617
621
|
function selectStorageReconnect(options) {
|
|
618
622
|
if (options.storageSigner && options.storageSignerAddress) {
|
|
619
623
|
let useSlot = true;
|
|
@@ -958,13 +962,14 @@ async function storeChunkedContent(chunks, { client: existingClient, unsafeApi:
|
|
|
958
962
|
return { changed, currentNonce };
|
|
959
963
|
};
|
|
960
964
|
const uploadTotal = stored.filter((s) => s === null).length;
|
|
965
|
+
const uploadEmittedIndices = /* @__PURE__ */ new Set();
|
|
961
966
|
let uploadEmitted = 0;
|
|
962
967
|
const nonceAdvanceIndices = /* @__PURE__ */ new Set();
|
|
963
968
|
let b = 0;
|
|
964
969
|
while (b < chunks.length) {
|
|
965
970
|
if (wsHaltDetected && reconnect && reconnectionsUsed < MAX_RECONNECTIONS) {
|
|
966
971
|
wsHaltDetected = false;
|
|
967
|
-
await
|
|
972
|
+
await doReconnectAndRebase();
|
|
968
973
|
}
|
|
969
974
|
const batchSize = reconnectionsUsed > 0 ? BATCH_SIZE_RECOVERY : BATCH_SIZE_INITIAL;
|
|
970
975
|
const batchIndices = [];
|
|
@@ -983,8 +988,12 @@ async function storeChunkedContent(chunks, { client: existingClient, unsafeApi:
|
|
|
983
988
|
const batchPromises = batchChunks.map((chunkData, j) => {
|
|
984
989
|
const i = batchIndices[j];
|
|
985
990
|
const nonce = assignedNonces.get(i);
|
|
986
|
-
|
|
987
|
-
|
|
991
|
+
const isRetry = uploadEmittedIndices.has(i);
|
|
992
|
+
if (!isRetry) {
|
|
993
|
+
uploadEmittedIndices.add(i);
|
|
994
|
+
uploadEmitted++;
|
|
995
|
+
}
|
|
996
|
+
console.log(` [${uploadEmitted}/${uploadTotal}] chunk ${i} \u2014 ${(chunkData.length / 1024 / 1024).toFixed(2)} MB (nonce: ${nonce})${isRetry ? " (retry)" : ""}`);
|
|
988
997
|
return storeChunk(unsafeApi, signer, chunkData, nonce, ss58, { fetchNonce: fetchNonceOverride });
|
|
989
998
|
});
|
|
990
999
|
const results = await Promise.allSettled(batchPromises);
|
|
@@ -1988,6 +1997,7 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
1988
1997
|
let envNativeToEthRatio;
|
|
1989
1998
|
let envRegisterStorageDeposit;
|
|
1990
1999
|
let envPopSelfServe = null;
|
|
2000
|
+
bulletinAutoAuthorize = false;
|
|
1991
2001
|
if (options.bulletinEndpoints && options.bulletinEndpoints.length > 0) {
|
|
1992
2002
|
envBulletin = options.bulletinEndpoints;
|
|
1993
2003
|
envAssetHub = options.assetHubEndpoints;
|
|
@@ -2006,6 +2016,7 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2006
2016
|
envNativeToEthRatio = resolved.nativeToEthRatio;
|
|
2007
2017
|
envRegisterStorageDeposit = resolved.registerStorageDeposit;
|
|
2008
2018
|
envPopSelfServe = getPopSelfServeConfig(doc, envId);
|
|
2019
|
+
bulletinAutoAuthorize = resolved.bulletinAutoAuthorize;
|
|
2009
2020
|
} catch (e) {
|
|
2010
2021
|
if (e instanceof NonRetryableError) throw e;
|
|
2011
2022
|
if (options.env !== void 0) throw e;
|
|
@@ -2051,7 +2062,7 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2051
2062
|
sessionCleanup = actors.worker.destroy.bind(actors.worker);
|
|
2052
2063
|
if (actors.worker.source === "session") resolvedUserSession = actors.worker;
|
|
2053
2064
|
if (actors.recipientH160) {
|
|
2054
|
-
console.log(` Worker: ${actors.worker.source} signer ${actors.worker.address}
|
|
2065
|
+
console.log(` Worker: ${actors.worker.source} signer ${actors.worker.address} (signs Bulletin storage)`);
|
|
2055
2066
|
} else {
|
|
2056
2067
|
console.log(` Using ${actors.worker.source} signer: ${actors.worker.address}`);
|
|
2057
2068
|
}
|
|
@@ -2103,7 +2114,8 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2103
2114
|
options = { ...options, storageSigner: slotResult.signer, storageSignerAddress: slotResult.slotAddress };
|
|
2104
2115
|
console.log(formatStorageSignerLine(slotResult.slotAddress, void 0, slotResult.owned));
|
|
2105
2116
|
} else {
|
|
2106
|
-
|
|
2117
|
+
const storageFailReason = resolvedUserSession ? "no allowance" : options.transferTo ? "transfer mode \u2014 worker signs storage" : void 0;
|
|
2118
|
+
console.log(formatStorageSignerLine(null, storageFailReason));
|
|
2107
2119
|
}
|
|
2108
2120
|
}
|
|
2109
2121
|
initTelemetry();
|
|
@@ -2208,6 +2220,9 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2208
2220
|
const fromName = popStatusName(dotnsPreflight.userStatus);
|
|
2209
2221
|
console.log(` Your PoP: ${fromName}`);
|
|
2210
2222
|
console.log(` Domain: ${alreadyOwned ? "owned by you" : "available"}`);
|
|
2223
|
+
if (options.transferTo) {
|
|
2224
|
+
console.log(formatTransferModeDotnsLine(alreadyOwned, `${name}.dot`, options.transferTo));
|
|
2225
|
+
}
|
|
2211
2226
|
}
|
|
2212
2227
|
if (!dotnsPreflight.canProceed) {
|
|
2213
2228
|
throw new NonRetryableError(
|
|
@@ -2426,7 +2441,9 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2426
2441
|
};
|
|
2427
2442
|
await ownerDotns.connect({
|
|
2428
2443
|
...resolveDotnsConnectOptions({ ...options, signer: owner.signer, signerAddress: owner.address }, envAssetHub, envAutoAccountMapping, envContracts, envNativeToEthRatio, envId, envPopSelfServe, envRegisterStorageDeposit),
|
|
2429
|
-
confirmPhoneReady: options.confirmPhoneReady
|
|
2444
|
+
confirmPhoneReady: options.confirmPhoneReady,
|
|
2445
|
+
phoneSigner: true
|
|
2446
|
+
// owner path is always a real phone/session signer
|
|
2430
2447
|
});
|
|
2431
2448
|
const willPublish = !!(options.publish && parsed && preflightPublishNeeded !== false);
|
|
2432
2449
|
ownerDotns.setPhoneSignatureTotal(willPublish ? 2 : 1);
|
|
@@ -2438,7 +2455,10 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2438
2455
|
const dotns = new DotNS();
|
|
2439
2456
|
await dotns.connect({
|
|
2440
2457
|
...resolveDotnsConnectOptions(options, envAssetHub, envAutoAccountMapping, envContracts, envNativeToEthRatio, envId, envPopSelfServe, envRegisterStorageDeposit),
|
|
2441
|
-
confirmPhoneReady: options.confirmPhoneReady
|
|
2458
|
+
confirmPhoneReady: options.confirmPhoneReady,
|
|
2459
|
+
// Transfer mode: phoneSigner=false (local worker signs in-process, no phone gate).
|
|
2460
|
+
// Genuine phone/session signer: phoneSigner=true (gate enabled). Fixes #980.
|
|
2461
|
+
phoneSigner: phoneSignerActive
|
|
2442
2462
|
});
|
|
2443
2463
|
if (phoneSignerActive) {
|
|
2444
2464
|
dotns.setPhoneSignatureTotal(computePhoneSigningSteps(dotnsPreflight, preflightPublishNeeded).length);
|
|
@@ -2556,7 +2576,7 @@ async function deploy(content, domainName = null, options = {}) {
|
|
|
2556
2576
|
console.log("=".repeat(60));
|
|
2557
2577
|
console.log("\nCheck it out here:");
|
|
2558
2578
|
console.log(` ${browserUrlFor(name, envId)}`);
|
|
2559
|
-
console.log(` ${name}.dot (in a Polkadot
|
|
2579
|
+
console.log(` ${name}.dot (in a Polkadot app: mobile or desktop)`);
|
|
2560
2580
|
console.log("\n" + "=".repeat(60) + "\n");
|
|
2561
2581
|
return { domainName: name, fullDomain: `${name}.dot`, cid, ipfsCid };
|
|
2562
2582
|
} finally {
|
|
@@ -3012,6 +3032,7 @@ export {
|
|
|
3012
3032
|
isPhoneSignerActive,
|
|
3013
3033
|
shouldHandoverName,
|
|
3014
3034
|
formatStorageSignerLine,
|
|
3035
|
+
formatTransferModeDotnsLine,
|
|
3015
3036
|
storeFile,
|
|
3016
3037
|
__assignDenseNoncesForTest,
|
|
3017
3038
|
storeChunkedContent,
|
|
@@ -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-ORJM2DGE.js";
|
|
8
8
|
import {
|
|
9
9
|
DEFAULT_MNEMONIC
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-RC3CVUOG.js";
|
|
11
11
|
|
|
12
12
|
// src/deploy-actors.ts
|
|
13
13
|
var DEFAULT_WORKER_SURI = DEFAULT_MNEMONIC;
|
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
classifyErrorArea,
|
|
3
3
|
isInteractive,
|
|
4
4
|
promptYesNo
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-OVF6SN7P.js";
|
|
6
6
|
import {
|
|
7
7
|
VERSION,
|
|
8
8
|
getCurrentSentryTraceId,
|
|
9
9
|
resolveIssueRepoSlug
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-4CQ75L4W.js";
|
|
11
11
|
import {
|
|
12
12
|
package_default
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-GQNCLVZM.js";
|
|
14
14
|
|
|
15
15
|
// src/bug-report.ts
|
|
16
16
|
import { execSync, execFileSync } from "child_process";
|
|
@@ -175,8 +175,13 @@ function applyCoreLabels(issueUrl) {
|
|
|
175
175
|
return false;
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
|
+
function isUserInputError(error) {
|
|
179
|
+
const msg = error?.message ?? "";
|
|
180
|
+
return /Invalid domain label|reserves base names of/i.test(msg);
|
|
181
|
+
}
|
|
178
182
|
async function offerBugReport(error) {
|
|
179
183
|
if (!isInteractive()) return;
|
|
184
|
+
if (isUserInputError(error)) return;
|
|
180
185
|
const yes = await promptYesNo("\n This looks like a bug. Open an issue with debug info? [Y/n] ");
|
|
181
186
|
if (!yes) return;
|
|
182
187
|
const title = buildTitle(error);
|
|
@@ -226,5 +231,6 @@ export {
|
|
|
226
231
|
buildTitle,
|
|
227
232
|
buildLabels,
|
|
228
233
|
createGhIssue,
|
|
234
|
+
isUserInputError,
|
|
229
235
|
offerBugReport
|
|
230
236
|
};
|