bulletin-deploy 0.7.9 → 0.7.11-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.
@@ -9,10 +9,10 @@ import {
9
9
  offerBugReport,
10
10
  scrubSecrets,
11
11
  setDeployContext
12
- } from "./chunk-HZFMRELN.js";
13
- import "./chunk-DPJ5FIEF.js";
14
- import "./chunk-5M7GB7TR.js";
15
- import "./chunk-2IXVWQZ4.js";
12
+ } from "./chunk-NEVV3FCX.js";
13
+ import "./chunk-O56TCT3R.js";
14
+ import "./chunk-X7VEHFJA.js";
15
+ import "./chunk-JS54GLCG.js";
16
16
  import "./chunk-QGM4M3NI.js";
17
17
  export {
18
18
  buildCliFlagsSummary,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  setDeployContext
3
- } from "./chunk-HZFMRELN.js";
3
+ } from "./chunk-NEVV3FCX.js";
4
4
  import {
5
5
  DotNS,
6
6
  TX_TIMEOUT_MS,
@@ -8,7 +8,7 @@ import {
8
8
  parseDomainName,
9
9
  popStatusName,
10
10
  verifyNonceAdvanced
11
- } from "./chunk-74RQZMEW.js";
11
+ } from "./chunk-P7IBAWMN.js";
12
12
  import {
13
13
  MirrorSkipped,
14
14
  mirrorToGitHubPages,
@@ -27,7 +27,7 @@ import {
27
27
  truncateAddress,
28
28
  withDeploySpan,
29
29
  withSpan
30
- } from "./chunk-5M7GB7TR.js";
30
+ } from "./chunk-X7VEHFJA.js";
31
31
  import {
32
32
  merkleizeJS
33
33
  } from "./chunk-B7GUYYAN.js";
@@ -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.9",
9
+ version: "0.7.11-rc.2",
10
10
  private: false,
11
11
  repository: {
12
12
  type: "git",
@@ -2,11 +2,11 @@ import {
2
2
  classifyErrorArea,
3
3
  isInteractive,
4
4
  promptYesNo
5
- } from "./chunk-DPJ5FIEF.js";
5
+ } from "./chunk-O56TCT3R.js";
6
6
  import {
7
7
  VERSION,
8
8
  getCurrentSentryTraceId
9
- } from "./chunk-5M7GB7TR.js";
9
+ } from "./chunk-X7VEHFJA.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-5M7GB7TR.js";
3
+ } from "./chunk-X7VEHFJA.js";
4
4
 
5
5
  // src/version-check.ts
6
6
  import { execSync, execFileSync } from "child_process";
@@ -2,7 +2,7 @@ import {
2
2
  captureWarning,
3
3
  setDeployAttribute,
4
4
  withSpan
5
- } from "./chunk-5M7GB7TR.js";
5
+ } from "./chunk-X7VEHFJA.js";
6
6
  import {
7
7
  isTestnetSpecName
8
8
  } from "./chunk-RP4YJYNB.js";
@@ -158,6 +158,8 @@ var DOTNS_REGISTRAR_ABI = [
158
158
  var POP_RULES_ABI = [
159
159
  { inputs: [{ name: "name", type: "string" }], name: "classifyName", outputs: [{ name: "requirement", type: "uint8" }, { name: "message", type: "string" }], stateMutability: "pure", type: "function" },
160
160
  { inputs: [{ name: "name", type: "string" }], name: "price", outputs: [{ name: "", type: "uint256" }], stateMutability: "view", type: "function" },
161
+ { inputs: [{ name: "name", type: "string" }, { name: "userAddress", type: "address" }], name: "priceWithCheck", outputs: [{ name: "metadata", type: "tuple", components: [{ name: "price", type: "uint256" }, { name: "status", type: "uint8" }, { name: "userStatus", type: "uint8" }, { name: "message", type: "string" }] }], stateMutability: "view", type: "function" },
162
+ { inputs: [{ name: "name", type: "string" }, { name: "userAddress", type: "address" }], name: "priceWithoutCheck", outputs: [{ name: "metadata", type: "tuple", components: [{ name: "price", type: "uint256" }, { name: "status", type: "uint8" }, { name: "userStatus", type: "uint8" }, { name: "message", type: "string" }] }], stateMutability: "view", type: "function" },
161
163
  { inputs: [{ name: "", type: "address" }], name: "userPopStatus", outputs: [{ name: "", type: "uint8" }], stateMutability: "view", type: "function" },
162
164
  { inputs: [{ name: "status", type: "uint8" }], name: "setUserPopStatus", outputs: [], stateMutability: "nonpayable", type: "function" },
163
165
  { inputs: [{ name: "name", type: "string" }], name: "isBaseNameReserved", outputs: [{ name: "isReserved", type: "bool" }, { name: "reservationOwner", type: "address" }, { name: "expiryTimestamp", type: "uint64" }], stateMutability: "view", type: "function" }
@@ -214,6 +216,42 @@ function extractStorageDepositCharge(rawStorageDeposit) {
214
216
  if (rawStorageDeposit.value != null) return convertToBigInt(rawStorageDeposit.value, 0n);
215
217
  return 0n;
216
218
  }
219
+ function dotnsContractName(address) {
220
+ const normalized = address.toLowerCase();
221
+ for (const [name, contractAddress] of Object.entries(CONTRACTS)) {
222
+ if (contractAddress.toLowerCase() === normalized) return name;
223
+ }
224
+ return "unknown";
225
+ }
226
+ function stringifyDebugValue(value) {
227
+ return JSON.stringify(value, (_key, nested) => typeof nested === "bigint" ? nested.toString() : nested);
228
+ }
229
+ function dotnsTxDebugEnabled() {
230
+ return process.env.BULLETIN_DEPLOY_DOTNS_DEBUG === "1" || process.env.DOTNS_DEBUG === "1";
231
+ }
232
+ function formatWeight(weight) {
233
+ if (!weight) return "unknown";
234
+ return `ref_time=${weight.referenceTime.toString()} proof_size=${weight.proofSize.toString()}`;
235
+ }
236
+ function formatContractDryRunFailure(gasEstimate, context) {
237
+ const functionName = context.functionName ?? "unknown";
238
+ const contractName = dotnsContractName(context.contractAddress);
239
+ const lines = [
240
+ `Contract execution would revert during ${functionName} on ${contractName}`,
241
+ ` contract: ${context.contractAddress}`,
242
+ ` signer: ${context.signerSubstrateAddress}${context.signerEvmAddress ? ` (${context.signerEvmAddress})` : ""}`,
243
+ ` value: ${context.value.toString()}`,
244
+ ` revert: flags=${gasEstimate.revertFlags?.toString() ?? "unknown"} data=${gasEstimate.revertData ?? "0x"}`,
245
+ ` gasRequired: ${formatWeight(gasEstimate.gasRequired)}`,
246
+ ` gasConsumed: ${formatWeight(gasEstimate.gasConsumed)}`,
247
+ ` storageDeposit: ${gasEstimate.storageDeposit?.toString() ?? "unknown"}`
248
+ ];
249
+ if (dotnsTxDebugEnabled()) {
250
+ lines.push(` calldata: ${context.encodedData}`);
251
+ if (context.args) lines.push(` args: ${stringifyDebugValue(context.args)}`);
252
+ }
253
+ return lines.join("\n");
254
+ }
217
255
  function unwrapExecutionResult(rawResult) {
218
256
  if (!rawResult) return { ok: null, err: null, successFlag: null };
219
257
  if (typeof rawResult.success === "boolean") {
@@ -526,10 +564,21 @@ var ReviveClientWrapper = class _ReviveClientWrapper {
526
564
  }
527
565
  throw lastError instanceof Error ? lastError : new Error(String(lastError));
528
566
  }
529
- async submitTransaction(contractAddress, value, encodedData, signerSubstrateAddress, signer, statusCallback, { rpcs, useNoncePolling }) {
567
+ async submitTransaction(contractAddress, value, encodedData, signerSubstrateAddress, signer, statusCallback, { rpcs, useNoncePolling, functionName, args }) {
530
568
  await this.ensureAccountMapped(signerSubstrateAddress, signer);
569
+ const signerEvmAddress = await this.getEvmAddress(signerSubstrateAddress);
531
570
  const gasEstimate = await this.estimateGasForCall(signerSubstrateAddress, contractAddress, value, encodedData);
532
- if (!gasEstimate.success) throw new Error(`Contract execution would revert: ${gasEstimate.revertData ?? "0x"}`);
571
+ if (!gasEstimate.success) {
572
+ throw new Error(formatContractDryRunFailure(gasEstimate, {
573
+ contractAddress,
574
+ functionName,
575
+ signerSubstrateAddress,
576
+ signerEvmAddress,
577
+ value,
578
+ encodedData,
579
+ args
580
+ }));
581
+ }
533
582
  const weightLimit = { proof_size: gasEstimate.gasRequired.proofSize, ref_time: gasEstimate.gasRequired.referenceTime };
534
583
  const minimumStorageDeposit = 2000000000000n;
535
584
  let storageDepositLimit = gasEstimate.storageDeposit === 0n ? minimumStorageDeposit : gasEstimate.storageDeposit * 120n / 100n;
@@ -867,7 +916,7 @@ var DotNS = class {
867
916
  const encodedCallData = encodeFunctionData({ abi: contractAbi, functionName, args });
868
917
  const rpcs = this.rpc ? [this.rpc, ...RPC_ENDPOINTS.filter((ep) => ep !== this.rpc)] : RPC_ENDPOINTS;
869
918
  return await withTimeout(
870
- this.clientWrapper.submitTransaction(contractAddress, value, encodedCallData, this.substrateAddress, this.signer, statusCallback, { rpcs, useNoncePolling }),
919
+ this.clientWrapper.submitTransaction(contractAddress, value, encodedCallData, this.substrateAddress, this.signer, statusCallback, { rpcs, useNoncePolling, functionName, args }),
871
920
  OPERATION_TIMEOUT_MS,
872
921
  functionName
873
922
  );
@@ -1203,7 +1252,8 @@ var DotNS = class {
1203
1252
  throw new Error("Personhood Lite cannot register base names \u2014 this name class requires a Full or NoStatus signer");
1204
1253
  }
1205
1254
  }
1206
- const priceRaw = await withTimeout(this.contractCall(CONTRACTS.POP_RULES, POP_RULES_ABI, "price", [label]), 3e4, "price");
1255
+ const priceMeta = await withTimeout(this.contractCall(CONTRACTS.POP_RULES, POP_RULES_ABI, "priceWithCheck", [label, this.evmAddress]), 3e4, "priceWithCheck");
1256
+ const priceRaw = priceMeta.price ?? (Array.isArray(priceMeta) ? priceMeta[0] : 0n);
1207
1257
  const priceWei = typeof priceRaw === "bigint" ? priceRaw : BigInt(priceRaw);
1208
1258
  console.log(` Required status: ${popStatusName(requiredStatus)}`);
1209
1259
  console.log(` User status: ${popStatusName(userStatus)}`);
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  package_default,
3
3
  writeRunState
4
- } from "./chunk-2IXVWQZ4.js";
4
+ } from "./chunk-JS54GLCG.js";
5
5
 
6
6
  // src/memory-report.ts
7
7
  import * as fs2 from "fs";
@@ -214,7 +214,29 @@ function getDeployAttributes(domain) {
214
214
  return attrs;
215
215
  }
216
216
  function isExpectedError(msg) {
217
- return /personhood|owned by|owner mismatch|reserved for original|invalid domain label|not authorized for bulletin|insufficient balance|quota exhausted|insufficient .* authorization/i.test(msg);
217
+ return /personhood|owned by|owner mismatch|reserved for original|invalid domain label|not authorized for bulletin|insufficient balance|insufficient funds|quota exhausted|insufficient .* authorization|bip39 mnemonic|ipfs cli not installed|base name is \d+ chars|NameNotAvailable|name must be lowercase/i.test(msg);
218
+ }
219
+ function classifyDeployError(msg) {
220
+ if (isExpectedError(msg)) return "user";
221
+ if (/chunk.*failed after.*retr|tx dropped from best chain|timed out after \d+s waiting for block|Contract reverted|Contract execution would revert|dotns register failed|All promises were rejected|"type"\s*:\s*"Invalid"|Commitment still too new/i.test(msg)) return "environment";
222
+ if (/javascript heap out of memory|allocation failed.*heap|External signer mode is not supported with dotns-cli/i.test(msg)) return "internal";
223
+ return "unknown";
224
+ }
225
+ function classifySadReason(message) {
226
+ if (/process terminated: SIG/i.test(message)) return "killed";
227
+ if (/memory threshold/i.test(message)) return "memory";
228
+ if (/spektr injection|account map failed/i.test(message)) return "signer";
229
+ if (/chunk upload failed|chunk retry failed/i.test(message)) return "chain_storage";
230
+ if (/websocket connection lost|rpc.*endpoint failed|rpc failover/i.test(message)) return "rpc";
231
+ return "other";
232
+ }
233
+ function computeDeployOutcome(errorCategory, isSad, sadReason) {
234
+ if (errorCategory === "user") return "user_error";
235
+ if (errorCategory === "environment") return "env_error";
236
+ if (errorCategory === "internal") return "internal_error";
237
+ if (errorCategory === "unknown") return "unknown_error";
238
+ if (isSad) return `sad_${sadReason}`;
239
+ return "clean";
218
240
  }
219
241
  async function withSpan(op, description, attributes, fn) {
220
242
  if (!Sentry) return fn();
@@ -232,6 +254,18 @@ var memoryPeak = null;
232
254
  var deployRootSpan = null;
233
255
  var stageSamples = {};
234
256
  var reportContext = {};
257
+ var currentErrorCategory = null;
258
+ var currentDeploySad = false;
259
+ var currentSadReason = "other";
260
+ var currentSadReasonPriority = 0;
261
+ var SAD_REASON_PRIORITY = {
262
+ killed: 5,
263
+ memory: 4,
264
+ signer: 3,
265
+ chain_storage: 2,
266
+ rpc: 1,
267
+ other: 0
268
+ };
235
269
  function toMb(bytes) {
236
270
  return Math.round(bytes / 1024 / 1024 * 100) / 100;
237
271
  }
@@ -275,6 +309,10 @@ async function withDeploySpan(domain, fn) {
275
309
  memoryPeak = { rss: m0.rss, heapUsed: m0.heapUsed, external: m0.external, arrayBuffers: m0.arrayBuffers };
276
310
  stageSamples = {};
277
311
  reportContext = {};
312
+ currentErrorCategory = null;
313
+ currentDeploySad = false;
314
+ currentSadReason = "other";
315
+ currentSadReasonPriority = 0;
278
316
  const deployStartMs = Date.now();
279
317
  try {
280
318
  return await Sentry.startSpan({ op: "deploy", name: `deploy ${domain}`, attributes: attrs }, async (span) => {
@@ -299,7 +337,10 @@ async function withDeploySpan(domain, fn) {
299
337
  } catch (error) {
300
338
  const msg = error.message;
301
339
  span.setAttribute("deploy.status", "error");
302
- span.setAttribute("deploy.error", msg.slice(0, 200));
340
+ span.setAttribute("deploy.error", msg.slice(0, 500));
341
+ const errorCategory = classifyDeployError(msg);
342
+ span.setAttribute("deploy.error_category", errorCategory);
343
+ currentErrorCategory = errorCategory;
303
344
  const isExpected = isExpectedError(msg);
304
345
  span.setAttribute("deploy.expected", isExpected ? "true" : "false");
305
346
  span.setAttribute("deploy.sad", isExpected ? "false" : "true");
@@ -309,6 +350,10 @@ async function withDeploySpan(domain, fn) {
309
350
  throw error;
310
351
  } finally {
311
352
  sampleMemory("end");
353
+ span.setAttribute(
354
+ "deploy.outcome",
355
+ computeDeployOutcome(currentErrorCategory, currentDeploySad, currentSadReason)
356
+ );
312
357
  if (memoryPeak) {
313
358
  try {
314
359
  const report = maybeWriteMemoryReport({
@@ -354,6 +399,10 @@ async function withDeploySpan(domain, fn) {
354
399
  deployRootSpan = null;
355
400
  stageSamples = {};
356
401
  reportContext = {};
402
+ currentErrorCategory = null;
403
+ currentDeploySad = false;
404
+ currentSadReason = "other";
405
+ currentSadReasonPriority = 0;
357
406
  await Sentry.flush(5e3);
358
407
  }
359
408
  }
@@ -382,6 +431,13 @@ function captureWarning(message, context) {
382
431
  Sentry.captureMessage(message, { level: "warning", extra: context });
383
432
  const root = Sentry.getRootSpan(Sentry.getActiveSpan());
384
433
  if (root) root.setAttribute("deploy.sad", "true");
434
+ const reason = classifySadReason(message);
435
+ const priority = SAD_REASON_PRIORITY[reason] ?? 0;
436
+ if (priority >= currentSadReasonPriority) {
437
+ currentSadReason = reason;
438
+ currentSadReasonPriority = priority;
439
+ }
440
+ currentDeploySad = true;
385
441
  } catch {
386
442
  }
387
443
  }
@@ -527,6 +583,9 @@ export {
527
583
  resolveRunnerType,
528
584
  getDeployAttributes,
529
585
  isExpectedError,
586
+ classifyDeployError,
587
+ classifySadReason,
588
+ computeDeployOutcome,
530
589
  withSpan,
531
590
  sampleMemory,
532
591
  withDeploySpan,
package/dist/deploy.js CHANGED
@@ -26,13 +26,13 @@ import {
26
26
  storeChunkedContent,
27
27
  storeDirectory,
28
28
  storeFile
29
- } from "./chunk-N465LQXW.js";
30
- import "./chunk-HZFMRELN.js";
31
- import "./chunk-DPJ5FIEF.js";
32
- import "./chunk-74RQZMEW.js";
29
+ } from "./chunk-5CLZQA7J.js";
30
+ import "./chunk-NEVV3FCX.js";
31
+ import "./chunk-O56TCT3R.js";
32
+ import "./chunk-P7IBAWMN.js";
33
33
  import "./chunk-HOTQDYHD.js";
34
- import "./chunk-5M7GB7TR.js";
35
- import "./chunk-2IXVWQZ4.js";
34
+ import "./chunk-X7VEHFJA.js";
35
+ import "./chunk-JS54GLCG.js";
36
36
  import "./chunk-B7GUYYAN.js";
37
37
  import "./chunk-RP4YJYNB.js";
38
38
  import "./chunk-QGM4M3NI.js";
package/dist/dotns.d.ts CHANGED
@@ -141,9 +141,11 @@ declare class ReviveClientWrapper {
141
141
  expectedNonce: number;
142
142
  };
143
143
  }): Promise<string>;
144
- submitTransaction(contractAddress: string, value: bigint, encodedData: string, signerSubstrateAddress: string, signer: PolkadotSigner, statusCallback: (status: string) => void, { rpcs, useNoncePolling }: {
144
+ submitTransaction(contractAddress: string, value: bigint, encodedData: string, signerSubstrateAddress: string, signer: PolkadotSigner, statusCallback: (status: string) => void, { rpcs, useNoncePolling, functionName, args }: {
145
145
  rpcs: string[];
146
146
  useNoncePolling?: boolean;
147
+ functionName?: string;
148
+ args?: unknown[];
147
149
  }): Promise<string>;
148
150
  }
149
151
  declare function runDotnsCli(argv: string[], env?: Record<string, string>): Promise<unknown>;
package/dist/dotns.js CHANGED
@@ -35,9 +35,9 @@ import {
35
35
  stripTrailingDigits,
36
36
  validateDomainLabel,
37
37
  verifyNonceAdvanced
38
- } from "./chunk-74RQZMEW.js";
39
- import "./chunk-5M7GB7TR.js";
40
- import "./chunk-2IXVWQZ4.js";
38
+ } from "./chunk-P7IBAWMN.js";
39
+ import "./chunk-X7VEHFJA.js";
40
+ import "./chunk-JS54GLCG.js";
41
41
  import "./chunk-RP4YJYNB.js";
42
42
  import "./chunk-QGM4M3NI.js";
43
43
  export {
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  deploy
3
- } from "./chunk-N465LQXW.js";
4
- import "./chunk-HZFMRELN.js";
5
- import "./chunk-DPJ5FIEF.js";
3
+ } from "./chunk-5CLZQA7J.js";
4
+ import "./chunk-NEVV3FCX.js";
5
+ import "./chunk-O56TCT3R.js";
6
6
  import {
7
7
  DotNS,
8
8
  parseDomainName
9
- } from "./chunk-74RQZMEW.js";
9
+ } from "./chunk-P7IBAWMN.js";
10
10
  import "./chunk-HOTQDYHD.js";
11
- import "./chunk-5M7GB7TR.js";
11
+ import "./chunk-X7VEHFJA.js";
12
12
  import {
13
13
  VERSION,
14
14
  loadRunState,
@@ -18,7 +18,7 @@ import {
18
18
  shouldSkipStaleWarning,
19
19
  stateFilePath,
20
20
  writeRunState
21
- } from "./chunk-2IXVWQZ4.js";
21
+ } from "./chunk-JS54GLCG.js";
22
22
  import {
23
23
  merkleizeJS
24
24
  } from "./chunk-B7GUYYAN.js";
@@ -5,8 +5,8 @@ import {
5
5
  maybeWriteMemoryReport,
6
6
  safeHeap,
7
7
  sampleFromBytes
8
- } from "./chunk-5M7GB7TR.js";
9
- import "./chunk-2IXVWQZ4.js";
8
+ } from "./chunk-X7VEHFJA.js";
9
+ import "./chunk-JS54GLCG.js";
10
10
  import "./chunk-QGM4M3NI.js";
11
11
  export {
12
12
  DEFAULT_THRESHOLD_MB,
package/dist/run-state.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  shouldSkipStaleWarning,
8
8
  stateFilePath,
9
9
  writeRunState
10
- } from "./chunk-2IXVWQZ4.js";
10
+ } from "./chunk-JS54GLCG.js";
11
11
  import "./chunk-QGM4M3NI.js";
12
12
  export {
13
13
  VERSION,
@@ -23,6 +23,10 @@ declare function resolveRunner(): string;
23
23
  declare function resolveRunnerType(): string;
24
24
  declare function getDeployAttributes(domain: string): Record<string, string | number | boolean | undefined>;
25
25
  declare function isExpectedError(msg: string): boolean;
26
+ type DeployErrorCategory = 'user' | 'environment' | 'internal' | 'unknown';
27
+ declare function classifyDeployError(msg: string): DeployErrorCategory;
28
+ declare function classifySadReason(message: string): string;
29
+ declare function computeDeployOutcome(errorCategory: DeployErrorCategory | null, isSad: boolean, sadReason: string): string;
26
30
  declare function withSpan<T>(op: string, description: string, attributes: Record<string, string | number | boolean | undefined>, fn: () => T | Promise<T>): Promise<T>;
27
31
  declare function sampleMemory(stage: string): void;
28
32
  declare function withDeploySpan<T>(domain: string, fn: () => T | Promise<T>): Promise<T>;
@@ -35,4 +39,4 @@ declare function setDeploySentryTag(key: string, value: string): void;
35
39
  declare function captureWarning(message: string, context?: Record<string, unknown>): void;
36
40
  declare function flush(): Promise<void>;
37
41
 
38
- export { type InternalContextSignals, VERSION, captureWarning, closeTelemetry, flush, getCurrentSentryTraceId, getDeployAttributes, initTelemetry, isExpectedError, isInternalContext, isInternalContextFromSignals, markRelaunchOomHintShown, resolveRepo, resolveRunner, resolveRunnerType, sampleMemory, sanitizeBranch, sanitizeRepo, scrubPaths, setDeployAttribute, setDeployReportContext, setDeploySentryTag, setRunStateActive, truncateAddress, withDeploySpan, withSpan };
42
+ export { type DeployErrorCategory, type InternalContextSignals, VERSION, captureWarning, classifyDeployError, classifySadReason, closeTelemetry, computeDeployOutcome, flush, getCurrentSentryTraceId, getDeployAttributes, initTelemetry, isExpectedError, isInternalContext, isInternalContextFromSignals, markRelaunchOomHintShown, resolveRepo, resolveRunner, resolveRunnerType, sampleMemory, sanitizeBranch, sanitizeRepo, scrubPaths, setDeployAttribute, setDeployReportContext, setDeploySentryTag, setRunStateActive, truncateAddress, withDeploySpan, withSpan };
package/dist/telemetry.js CHANGED
@@ -1,7 +1,10 @@
1
1
  import {
2
2
  VERSION,
3
3
  captureWarning,
4
+ classifyDeployError,
5
+ classifySadReason,
4
6
  closeTelemetry,
7
+ computeDeployOutcome,
5
8
  flush,
6
9
  getCurrentSentryTraceId,
7
10
  getDeployAttributes,
@@ -24,13 +27,16 @@ import {
24
27
  truncateAddress,
25
28
  withDeploySpan,
26
29
  withSpan
27
- } from "./chunk-5M7GB7TR.js";
28
- import "./chunk-2IXVWQZ4.js";
30
+ } from "./chunk-X7VEHFJA.js";
31
+ import "./chunk-JS54GLCG.js";
29
32
  import "./chunk-QGM4M3NI.js";
30
33
  export {
31
34
  VERSION,
32
35
  captureWarning,
36
+ classifyDeployError,
37
+ classifySadReason,
33
38
  closeTelemetry,
39
+ computeDeployOutcome,
34
40
  flush,
35
41
  getCurrentSentryTraceId,
36
42
  getDeployAttributes,
@@ -8,9 +8,9 @@ import {
8
8
  isPreReleaseVersion,
9
9
  preReleaseWarning,
10
10
  promptYesNo
11
- } from "./chunk-DPJ5FIEF.js";
12
- import "./chunk-5M7GB7TR.js";
13
- import "./chunk-2IXVWQZ4.js";
11
+ } from "./chunk-O56TCT3R.js";
12
+ import "./chunk-X7VEHFJA.js";
13
+ import "./chunk-JS54GLCG.js";
14
14
  import "./chunk-QGM4M3NI.js";
15
15
  export {
16
16
  assessVersion,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bulletin-deploy",
3
- "version": "0.7.9",
3
+ "version": "0.7.11-rc.2",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",