@superblocksteam/sdk 2.0.123-next.0 → 2.0.124-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/cli-replacement/automatic-upgrades.d.ts +37 -1
  3. package/dist/cli-replacement/automatic-upgrades.d.ts.map +1 -1
  4. package/dist/cli-replacement/automatic-upgrades.js +162 -10
  5. package/dist/cli-replacement/automatic-upgrades.js.map +1 -1
  6. package/dist/cli-replacement/automatic-upgrades.test.js +377 -8
  7. package/dist/cli-replacement/automatic-upgrades.test.js.map +1 -1
  8. package/dist/cli-replacement/dependency-install-classifier.d.mts +21 -0
  9. package/dist/cli-replacement/dependency-install-classifier.d.mts.map +1 -0
  10. package/dist/cli-replacement/dependency-install-classifier.mjs +83 -0
  11. package/dist/cli-replacement/dependency-install-classifier.mjs.map +1 -0
  12. package/dist/cli-replacement/dependency-install-classifier.test.d.mts +2 -0
  13. package/dist/cli-replacement/dependency-install-classifier.test.d.mts.map +1 -0
  14. package/dist/cli-replacement/dependency-install-classifier.test.mjs +51 -0
  15. package/dist/cli-replacement/dependency-install-classifier.test.mjs.map +1 -0
  16. package/dist/cli-replacement/dev-s3-restore.test.mjs +170 -14
  17. package/dist/cli-replacement/dev-s3-restore.test.mjs.map +1 -1
  18. package/dist/cli-replacement/dev-startup-git-before-dbfs-order.test.mjs +33 -2
  19. package/dist/cli-replacement/dev-startup-git-before-dbfs-order.test.mjs.map +1 -1
  20. package/dist/cli-replacement/dev-token-priming.test.d.mts +31 -0
  21. package/dist/cli-replacement/dev-token-priming.test.d.mts.map +1 -0
  22. package/dist/cli-replacement/dev-token-priming.test.mjs +87 -0
  23. package/dist/cli-replacement/dev-token-priming.test.mjs.map +1 -0
  24. package/dist/cli-replacement/dev.d.mts +36 -0
  25. package/dist/cli-replacement/dev.d.mts.map +1 -1
  26. package/dist/cli-replacement/dev.interception.test.d.mts +2 -0
  27. package/dist/cli-replacement/dev.interception.test.d.mts.map +1 -0
  28. package/dist/cli-replacement/dev.interception.test.mjs +68 -0
  29. package/dist/cli-replacement/dev.interception.test.mjs.map +1 -0
  30. package/dist/cli-replacement/dev.mjs +396 -62
  31. package/dist/cli-replacement/dev.mjs.map +1 -1
  32. package/dist/cli-replacement/home-npmrc.d.mts +180 -0
  33. package/dist/cli-replacement/home-npmrc.d.mts.map +1 -0
  34. package/dist/cli-replacement/home-npmrc.mjs +283 -0
  35. package/dist/cli-replacement/home-npmrc.mjs.map +1 -0
  36. package/dist/cli-replacement/home-npmrc.test.d.mts +10 -0
  37. package/dist/cli-replacement/home-npmrc.test.d.mts.map +1 -0
  38. package/dist/cli-replacement/home-npmrc.test.mjs +582 -0
  39. package/dist/cli-replacement/home-npmrc.test.mjs.map +1 -0
  40. package/dist/cli-replacement/install-packages.classify.test.d.mts +2 -0
  41. package/dist/cli-replacement/install-packages.classify.test.d.mts.map +1 -0
  42. package/dist/cli-replacement/install-packages.classify.test.mjs +125 -0
  43. package/dist/cli-replacement/install-packages.classify.test.mjs.map +1 -0
  44. package/dist/cli-replacement/install-packages.npm-registry.test.d.mts +2 -0
  45. package/dist/cli-replacement/install-packages.npm-registry.test.d.mts.map +1 -0
  46. package/dist/cli-replacement/install-packages.npm-registry.test.mjs +260 -0
  47. package/dist/cli-replacement/install-packages.npm-registry.test.mjs.map +1 -0
  48. package/dist/cli-replacement/post-upgrade-lockfile-strip.d.mts +58 -0
  49. package/dist/cli-replacement/post-upgrade-lockfile-strip.d.mts.map +1 -0
  50. package/dist/cli-replacement/post-upgrade-lockfile-strip.mjs +224 -0
  51. package/dist/cli-replacement/post-upgrade-lockfile-strip.mjs.map +1 -0
  52. package/dist/cli-replacement/post-upgrade-lockfile-strip.test.d.mts +11 -0
  53. package/dist/cli-replacement/post-upgrade-lockfile-strip.test.d.mts.map +1 -0
  54. package/dist/cli-replacement/post-upgrade-lockfile-strip.test.mjs +317 -0
  55. package/dist/cli-replacement/post-upgrade-lockfile-strip.test.mjs.map +1 -0
  56. package/dist/cli-replacement/userconfig-env.integration.test.d.mts +26 -0
  57. package/dist/cli-replacement/userconfig-env.integration.test.d.mts.map +1 -0
  58. package/dist/cli-replacement/userconfig-env.integration.test.mjs +148 -0
  59. package/dist/cli-replacement/userconfig-env.integration.test.mjs.map +1 -0
  60. package/dist/dev-utils/dev-server-metrics.d.mts +25 -0
  61. package/dist/dev-utils/dev-server-metrics.d.mts.map +1 -1
  62. package/dist/dev-utils/dev-server-metrics.mjs +84 -0
  63. package/dist/dev-utils/dev-server-metrics.mjs.map +1 -1
  64. package/dist/dev-utils/dev-server-metrics.test.d.mts +2 -0
  65. package/dist/dev-utils/dev-server-metrics.test.d.mts.map +1 -0
  66. package/dist/dev-utils/dev-server-metrics.test.mjs +26 -0
  67. package/dist/dev-utils/dev-server-metrics.test.mjs.map +1 -0
  68. package/dist/dev-utils/dev-server.d.mts +23 -1
  69. package/dist/dev-utils/dev-server.d.mts.map +1 -1
  70. package/dist/dev-utils/dev-server.mjs +21 -9
  71. package/dist/dev-utils/dev-server.mjs.map +1 -1
  72. package/dist/dev-utils/dev-server.status.test.d.mts +2 -0
  73. package/dist/dev-utils/dev-server.status.test.d.mts.map +1 -0
  74. package/dist/dev-utils/dev-server.status.test.mjs +41 -0
  75. package/dist/dev-utils/dev-server.status.test.mjs.map +1 -0
  76. package/dist/dev-utils/token-manager.d.ts +31 -0
  77. package/dist/dev-utils/token-manager.d.ts.map +1 -1
  78. package/dist/dev-utils/token-manager.js +34 -0
  79. package/dist/dev-utils/token-manager.js.map +1 -1
  80. package/dist/telemetry/local-obs.js +1 -1
  81. package/dist/telemetry/local-obs.js.map +1 -1
  82. package/dist/telemetry/util.js +1 -1
  83. package/dist/types/scoped-jwt-token-payload.d.ts +1 -0
  84. package/dist/types/scoped-jwt-token-payload.d.ts.map +1 -1
  85. package/dist/version-control.d.mts.map +1 -1
  86. package/dist/version-control.mjs +6 -7
  87. package/dist/version-control.mjs.map +1 -1
  88. package/package.json +12 -12
  89. package/src/cli-replacement/automatic-upgrades.test.ts +530 -8
  90. package/src/cli-replacement/automatic-upgrades.ts +179 -7
  91. package/src/cli-replacement/dependency-install-classifier.mts +118 -0
  92. package/src/cli-replacement/dependency-install-classifier.test.mts +72 -0
  93. package/src/cli-replacement/dev-s3-restore.test.mts +210 -14
  94. package/src/cli-replacement/dev-startup-git-before-dbfs-order.test.mts +35 -2
  95. package/src/cli-replacement/dev-token-priming.test.mts +103 -0
  96. package/src/cli-replacement/dev.interception.test.mts +80 -0
  97. package/src/cli-replacement/dev.mts +495 -92
  98. package/src/cli-replacement/home-npmrc.mts +409 -0
  99. package/src/cli-replacement/home-npmrc.test.mts +757 -0
  100. package/src/cli-replacement/install-packages.classify.test.mts +168 -0
  101. package/src/cli-replacement/install-packages.npm-registry.test.mts +345 -0
  102. package/src/cli-replacement/post-upgrade-lockfile-strip.mts +296 -0
  103. package/src/cli-replacement/post-upgrade-lockfile-strip.test.mts +482 -0
  104. package/src/cli-replacement/userconfig-env.integration.test.mts +189 -0
  105. package/src/dev-utils/dev-server-metrics.mts +96 -0
  106. package/src/dev-utils/dev-server-metrics.test.mts +38 -0
  107. package/src/dev-utils/dev-server.mts +48 -8
  108. package/src/dev-utils/dev-server.status.test.mts +58 -0
  109. package/src/dev-utils/token-manager.ts +36 -0
  110. package/src/telemetry/local-obs.ts +1 -1
  111. package/src/telemetry/util.ts +1 -1
  112. package/src/types/scoped-jwt-token-payload.ts +1 -0
  113. package/src/version-control.mts +8 -6
  114. package/tsconfig.tsbuildinfo +1 -1
  115. package/.turbo/turbo-publish-package.log +0 -0
@@ -7,9 +7,12 @@
7
7
  * package.json version sync when resuming an existing app so the user's
8
8
  * @superblocksteam/library pin matches the target version.
9
9
  */
10
+ import { EventEmitter } from "node:events";
10
11
  import fs from "node:fs/promises";
12
+ import * as os from "node:os";
13
+ import * as path from "node:path";
11
14
  import { describe, it, expect, beforeEach, vi } from "vitest";
12
- import { checkVersionsAndWritePackageJson } from "./automatic-upgrades.js";
15
+ import { buildGlobalInstallArgs, buildInstallEnv, checkVersionsAndWritePackageJson, } from "./automatic-upgrades.js";
13
16
  // ---------------------------------------------------------------------------
14
17
  // Mocks
15
18
  // ---------------------------------------------------------------------------
@@ -21,6 +24,10 @@ vi.mock("node:fs/promises", () => ({
21
24
  }));
22
25
  vi.mock("node:child_process", () => ({
23
26
  exec: vi.fn(),
27
+ // `execFile` is exported so `promisify(execFile)` in npm-registry.ts (loaded
28
+ // transitively via `@superblocksteam/vite-plugin-file-sync/npm-error-parser`)
29
+ // doesn't crash at module load. This test never invokes it.
30
+ execFile: vi.fn(),
24
31
  }));
25
32
  const upgradeWithPackageManagerCalls = [];
26
33
  vi.mock("package-manager-detector/detect", () => ({
@@ -40,13 +47,26 @@ vi.mock("./version-detection.js", () => ({
40
47
  })),
41
48
  clearCliVersionCache: vi.fn(),
42
49
  }));
50
+ // `vi.mock` calls are hoisted to the top of the module, so any factory must
51
+ // either declare its mocks inline OR use `vi.hoisted()` to hoist the mock
52
+ // fns alongside the mock registration. The latter lets us reuse the mocks
53
+ // inside test bodies (e.g. `.mockReturnValue(...)`).
54
+ const { stripUpgradedCliLockfilesMock, loggerMock } = vi.hoisted(() => {
55
+ return {
56
+ stripUpgradedCliLockfilesMock: vi.fn(async () => ({})),
57
+ loggerMock: {
58
+ info: vi.fn(),
59
+ warn: vi.fn(),
60
+ error: vi.fn(),
61
+ debug: vi.fn(),
62
+ },
63
+ };
64
+ });
65
+ vi.mock("./post-upgrade-lockfile-strip.mjs", () => ({
66
+ stripUpgradedCliLockfiles: stripUpgradedCliLockfilesMock,
67
+ }));
43
68
  vi.mock("../telemetry/logging.js", () => ({
44
- getLogger: () => ({
45
- info: vi.fn(),
46
- warn: vi.fn(),
47
- error: vi.fn(),
48
- debug: vi.fn(),
49
- }),
69
+ getLogger: () => loggerMock,
50
70
  getErrorMeta: vi.fn(() => ({})),
51
71
  }));
52
72
  vi.mock("../telemetry/index.js", () => ({
@@ -54,8 +74,18 @@ vi.mock("../telemetry/index.js", () => ({
54
74
  startActiveSpan: vi.fn((_name, fn) => fn({ end: vi.fn() })),
55
75
  }),
56
76
  }));
57
- vi.mock("@superblocksteam/shared", async () => {
77
+ // Use `importOriginal` so transitive consumers of `@superblocksteam/shared`
78
+ // (e.g. `@superblocksteam/telemetry`'s policy module pulled in by the
79
+ // `bucketNpmRegistryHost` import added in this file's source under test for
80
+ // APPS-4381) see every real export (`DeploymentTypeEnum`, etc.), while still
81
+ // letting the test override the two symbols `automatic-upgrades.ts` itself
82
+ // consumes. The factory return type is `any` because `NON_SB_ORG_UPDATE_ERROR`
83
+ // is a string-literal type in the real module that our test override can't
84
+ // satisfy structurally; `vi.mock`'s value-level behaviour is unaffected.
85
+ vi.mock("@superblocksteam/shared", async (importOriginal) => {
86
+ const actual = (await importOriginal());
58
87
  return {
88
+ ...actual,
59
89
  NON_SB_ORG_UPDATE_ERROR: "non_sb_org_update_error",
60
90
  // traceFunction in tests is a passthrough — we just want the fn to run.
61
91
  traceFunction: async ({ fn }) => {
@@ -85,6 +115,8 @@ const mockConfig = {
85
115
  beforeEach(() => {
86
116
  vi.clearAllMocks();
87
117
  upgradeWithPackageManagerCalls.length = 0;
118
+ // Restore default mock return values after `clearAllMocks` resets them.
119
+ stripUpgradedCliLockfilesMock.mockImplementation(async () => ({}));
88
120
  // Mock global fetch used by getRemoteVersions
89
121
  global.fetch = vi.fn(async () => ({
90
122
  ok: true,
@@ -224,6 +256,268 @@ describe("checkVersionsAndWritePackageJson", () => {
224
256
  expect(parsed.dependencies["@superblocksteam/sdk-api"]).toBeUndefined();
225
257
  expect(parsed.dependencies["@superblocksteam/library"]).toBe(TARGET_LIBRARY_VERSION);
226
258
  });
259
+ // -----------------------------------------------------------------
260
+ // APPS-4324: classifyNpmExecStderr wiring for `upgradeCliWithPackageManager`
261
+ //
262
+ // The CLI auto-upgrade pod's npm fallback exec used to surface a
263
+ // perimeter-block (air-gapped customer with public-npm egress denied)
264
+ // as a generic `"Failed to upgrade packages"` log, leaving the operator
265
+ // no signal as to whether the cause was a transient registry blip, a
266
+ // bad auth token, or a missing package. These tests pin the structured
267
+ // log emitted just before the upgrade promise rejects.
268
+ //
269
+ // Note on flow: `checkVersionsAndWritePackageJson` returns the upgrade
270
+ // promise to its caller (`dev.mts` joins it via `Promise.all` against
271
+ // the local install). The rejection is therefore observed by awaiting
272
+ // `result.upgradePromises[0]`, not by the outer try/catch inside this
273
+ // function (which only catches sync errors during the package.json
274
+ // read/write block).
275
+ // -----------------------------------------------------------------
276
+ /** Build a fake ChildProcess that emits the supplied stderr (once,
277
+ * asynchronously so the caller has time to register `.on("data")`),
278
+ * then fires the exec callback with `cbError`. Passing an array emits
279
+ * one `data` event per element — exercise the stderr-buffer accumulation
280
+ * path against split chunks (real npm output arrives multi-chunk).
281
+ *
282
+ * Pass `{ skipEmit: true, errorStderr: "..." }` to model the fast-fail
283
+ * race the Bugbot finding flagged: the subprocess exits before our
284
+ * `cp.stderr.on('data', …)` listener attaches, so `stderrBuffer` is
285
+ * empty and only `error.stderr` (which the exec wrapper aggregates
286
+ * internally) carries the npm output. The classifier must fall back to
287
+ * that — otherwise the structured `[npm-install-blocked]` line goes
288
+ * missing on exactly the failure mode this PR exists to diagnose. */
289
+ async function mockNpmFallbackExec(stderr, cbError, opts = {}) {
290
+ const stdout = new EventEmitter();
291
+ const stderrEmitter = new EventEmitter();
292
+ const chunks = Array.isArray(stderr) ? stderr : [stderr];
293
+ // The exec call we care about is the third positional invocation
294
+ // (after `which superblocks` for upgradeCliWithOclif and the oclif
295
+ // `update` subprocess). Make `which` succeed (returns a path) and
296
+ // `superblocks update` return "not updatable" so the package-manager
297
+ // fallback path runs.
298
+ const { exec } = await import("node:child_process");
299
+ const execMock = vi.mocked(exec);
300
+ execMock.mockImplementation(((cmd, ...rest) => {
301
+ const cb = (typeof rest[rest.length - 1] === "function"
302
+ ? rest[rest.length - 1]
303
+ : undefined);
304
+ // Promisified consumers (upgradeCliWithOclif) destructure `{stdout,
305
+ // stderr}` from the awaited result. Real Node has a
306
+ // `util.promisify.custom` symbol that produces that shape; our vi.fn
307
+ // mock doesn't, so we pass the destructured object as the callback's
308
+ // single value-arg (default promisify behaviour resolves to that).
309
+ if (cmd === "which superblocks" || cmd === "where superblocks") {
310
+ cb?.(null, { stdout: "/usr/local/bin/superblocks\n", stderr: "" });
311
+ return {};
312
+ }
313
+ if (cmd.includes("superblocks update")) {
314
+ // Make oclif report "not updatable" so the fallback fires.
315
+ cb?.(null, { stdout: "this version is not updatable\n", stderr: "" });
316
+ return {};
317
+ }
318
+ // The npm install fallback uses the callback-style API directly (not
319
+ // promisified), so the callback signature is just (error). Schedule
320
+ // the stderr emit + callback so the caller has time to register
321
+ // listeners on cp.stdout/cp.stderr.
322
+ const errArg = cbError;
323
+ if (opts.errorStderr !== undefined)
324
+ errArg.stderr = opts.errorStderr;
325
+ queueMicrotask(() => {
326
+ if (!opts.skipEmit) {
327
+ for (const chunk of chunks) {
328
+ if (chunk)
329
+ stderrEmitter.emit("data", chunk);
330
+ }
331
+ }
332
+ cb?.(errArg);
333
+ });
334
+ return { stdout, stderr: stderrEmitter };
335
+ }));
336
+ }
337
+ async function runAndAwaitUpgrade() {
338
+ const result = await checkVersionsAndWritePackageJson(mockLockService, mockConfig, false, false);
339
+ // The CLI upgrade promise was pushed to upgradePromises and is the
340
+ // promise that rejects when the npm fallback fails. The caller in
341
+ // dev.mts joins it via Promise.all; here we await it directly so the
342
+ // test can assert on rejection + log shape.
343
+ await Promise.all(result.upgradePromises);
344
+ }
345
+ it("APPS-4324: logs NpmInstallBlocked with reason=registry_unreachable on ECONNREFUSED stderr", async () => {
346
+ await mockNpmFallbackExec([
347
+ "npm error code ECONNREFUSED",
348
+ "npm error errno ECONNREFUSED",
349
+ "npm error network request to https://registry.npmjs.org/@superblocksteam%2fcli failed, reason: connect ECONNREFUSED 127.0.0.1:443",
350
+ ].join("\n"), new Error("Command failed: pnpm install ..."));
351
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
352
+ // The structured log line fires before the rejection so the operator
353
+ // sees the reason code in the crash-loop output. Reason is encoded
354
+ // into the message body — no meta arg is passed, because the
355
+ // `NpmInstallBlocked` instance's `Error.message` carries the raw
356
+ // registry host (APPS-4381 round-2 review).
357
+ expect(loggerMock.error).toHaveBeenCalledWith(expect.stringMatching(/\[npm-install-blocked\] reason=registry_unreachable/));
358
+ // Pin the relative ordering: the structured `[npm-install-blocked]`
359
+ // line MUST precede the legacy `Failed to upgrade packages` line so a
360
+ // downstream sink that truncates after the first error still surfaces
361
+ // the reason code (see the comment in automatic-upgrades.ts beside the
362
+ // blocked-log emit).
363
+ const blockedIdx = loggerMock.error.mock.calls.findIndex((c) => typeof c[0] === "string" && c[0].includes("[npm-install-blocked]"));
364
+ const failedIdx = loggerMock.error.mock.calls.findIndex((c) => typeof c[0] === "string" && c[0].includes("Failed to upgrade"));
365
+ expect(blockedIdx).toBeGreaterThanOrEqual(0);
366
+ expect(failedIdx).toBeGreaterThan(blockedIdx);
367
+ });
368
+ it("APPS-4324: logs reason=registry_auth_failed on E401 stderr", async () => {
369
+ await mockNpmFallbackExec([
370
+ "npm error code E401",
371
+ "npm error 401 Unauthorized - GET https://npm.private.example.com/@superblocksteam%2fcli",
372
+ ].join("\n"), new Error("Command failed: pnpm install ..."));
373
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
374
+ expect(loggerMock.error).toHaveBeenCalledWith(expect.stringMatching(/\[npm-install-blocked\] reason=registry_auth_failed/));
375
+ });
376
+ it("APPS-4381: buckets a private registry host so the structured registryHost facet is `private`, not the raw hostname", async () => {
377
+ // Regression for review feedback on PR #19634: the structured
378
+ // auto-upgrade log used to emit `registryHost=${blocked.registryHost ?? "unknown"}`
379
+ // verbatim. That made the customer's private registry hostname a
380
+ // structured log facet — unbounded cardinality in shared operational
381
+ // log indexes and a leak of customer infra identifiers across the
382
+ // `registryHost` dimension. The fix passes the value through
383
+ // `bucketNpmRegistryHost` (the same helper PR #19622 wired for llmobs
384
+ // tags) so this field emits a bounded enum (`public_npm` | `private`
385
+ // | `unknown`).
386
+ //
387
+ // Scope note: the `summary=...` free-text field is also redacted of
388
+ // URLs / bare hostnames before logging (round-2 review feedback on
389
+ // PR #19634) — see the `does not appear anywhere` regression test
390
+ // below. The structured-facet bucketing pinned here is the
391
+ // `registryHost=` field only.
392
+ const privateHost = "customer.jfrog.io";
393
+ await mockNpmFallbackExec([
394
+ "npm error code E401",
395
+ `npm error 401 Unauthorized - GET https://${privateHost}/@superblocksteam%2fcli`,
396
+ ].join("\n"), new Error("Command failed: pnpm install ..."));
397
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
398
+ const blockedCall = loggerMock.error.mock.calls.find((c) => typeof c[0] === "string" && c[0].includes("[npm-install-blocked]"));
399
+ expect(blockedCall).toBeDefined();
400
+ const message = blockedCall[0];
401
+ // The structured `registryHost=` facet is bucketed to `private`...
402
+ expect(message).toMatch(/registryHost=private(\s|$)/);
403
+ // ...and the raw hostname does NOT appear as the facet value (would
404
+ // regress if a future refactor reverted the bucketing call).
405
+ expect(message).not.toMatch(new RegExp(`registryHost=${privateHost.replace(/\./g, "\\.")}`));
406
+ });
407
+ it("APPS-4381: buckets registry.npmjs.org as public_npm", async () => {
408
+ // Pin the other side of the bucket so a future refactor that breaks
409
+ // the public-vs-private split also breaks this test.
410
+ await mockNpmFallbackExec([
411
+ "npm error code ECONNREFUSED",
412
+ "npm error network request to https://registry.npmjs.org/@superblocksteam%2fcli failed",
413
+ ].join("\n"), new Error("Command failed: pnpm install ..."));
414
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
415
+ const blockedCall = loggerMock.error.mock.calls.find((c) => typeof c[0] === "string" && c[0].includes("[npm-install-blocked]"));
416
+ expect(blockedCall).toBeDefined();
417
+ expect(blockedCall[0]).toMatch(/registryHost=public_npm(\s|$)/);
418
+ });
419
+ it("APPS-4381: a private registry host does not appear anywhere in the emitted [npm-install-blocked] log call (round-2 review feedback)", async () => {
420
+ // George's round-2 feedback on PR #19634: the `registryHost=` facet is
421
+ // bucketed, but `summary=${JSON.stringify(blocked.summary)}` still
422
+ // echoed the raw URL/host from the npm stderr line. The meta arg
423
+ // (`getErrorMeta(blocked)`) was a second leak channel because
424
+ // `NpmInstallBlocked.message` is `"... against ${host} [code]"` —
425
+ // `getErrorMeta` synthesizes meta from that message + the stack that
426
+ // embeds it.
427
+ //
428
+ // This test uses a unique sentinel host that no other fixture in this
429
+ // file references, then asserts the host substring does not appear in
430
+ // ANY argument of the structured logger call — message body, any meta
431
+ // arg, any stack — anywhere. This is the "private host does not
432
+ // appear anywhere in the emitted auto-upgrade log line" regression
433
+ // George asked for.
434
+ //
435
+ // Mock-faithfulness note: this test does NOT rely on the
436
+ // `getErrorMeta` mock returning a realistic shape; the fix omits the
437
+ // meta arg entirely at the `[npm-install-blocked]` call site, so a
438
+ // `() => ({})` stub would no longer mask a regression of the meta
439
+ // path. To guard a future refactor that re-adds a meta arg with the
440
+ // raw `NpmInstallBlocked`, we assert the call has exactly one arg
441
+ // below.
442
+ const privateHost = "registry-leak-sentinel.acme-corp.internal";
443
+ await mockNpmFallbackExec([
444
+ "npm error code E401",
445
+ `npm error 401 Unauthorized - GET https://${privateHost}:4873/@superblocksteam%2fcli`,
446
+ `npm error request to https://${privateHost}/foo failed, reason: getaddrinfo ENOTFOUND ${privateHost}`,
447
+ ].join("\n"), new Error("Command failed: pnpm install ..."));
448
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
449
+ const blockedCall = loggerMock.error.mock.calls.find((c) => typeof c[0] === "string" && c[0].includes("[npm-install-blocked]"));
450
+ expect(blockedCall).toBeDefined();
451
+ // Stringify the entire call tuple so we catch the host whether it
452
+ // leaks through the message body, a (future) meta arg's
453
+ // `error.message`, a stack, or any other field a future refactor
454
+ // might add. `acme-corp.internal` is checked separately so a
455
+ // host-only redaction (one token) that left the suffix would also
456
+ // trip the test.
457
+ const serialized = JSON.stringify(blockedCall);
458
+ expect(serialized).not.toContain(privateHost);
459
+ expect(serialized).not.toContain("acme-corp.internal");
460
+ // No meta arg today; pin that so any future code that re-introduces
461
+ // `getErrorMeta(blocked)` (or any other host-bearing payload) is
462
+ // forced through this regression test.
463
+ expect(blockedCall.length).toBe(1);
464
+ // Spot-check that the bucket tokens replaced the host (the diagnostic
465
+ // shape of the npm phrasing is preserved even after redaction).
466
+ const message = blockedCall[0];
467
+ expect(message).toMatch(/summary=/);
468
+ expect(message).toContain("<private>");
469
+ });
470
+ it("APPS-4324: logs reason=not_in_registry on E404 stderr", async () => {
471
+ await mockNpmFallbackExec([
472
+ "npm error code E404",
473
+ "npm error 404 Not Found - GET https://npm.private.example.com/@superblocksteam%2fcli - Not found",
474
+ ].join("\n"), new Error("Command failed: pnpm install ..."));
475
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
476
+ expect(loggerMock.error).toHaveBeenCalledWith(expect.stringMatching(/\[npm-install-blocked\] reason=not_in_registry/));
477
+ });
478
+ it("APPS-4324: falls through to the existing generic error path for ERESOLVE (no false-positive)", async () => {
479
+ await mockNpmFallbackExec([
480
+ "npm error code ERESOLVE",
481
+ "npm error ERESOLVE unable to resolve dependency tree",
482
+ ].join("\n"), new Error("Command failed: pnpm install ..."));
483
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
484
+ // The classifier returns null for ERESOLVE — no structured log fires.
485
+ expect(loggerMock.error).not.toHaveBeenCalledWith(expect.stringContaining("[npm-install-blocked]"));
486
+ // The existing generic per-failure log still fires so the operator
487
+ // still sees something in the crash-loop output.
488
+ expect(loggerMock.error).toHaveBeenCalledWith(expect.stringContaining("Failed to upgrade packages"));
489
+ });
490
+ it("APPS-4324: falls back to error.stderr when stderrBuffer is empty (fast-fail race)", async () => {
491
+ // Bugbot finding on the APPS-4324 branch: a subprocess that fails fast
492
+ // can emit and exit before our `cp.stderr.on('data', …)` listener
493
+ // attaches, leaving `stderrBuffer` empty. The exec wrapper still
494
+ // aggregates the output onto `error.stderr`, so the classifier must
495
+ // read that as the fallback or the structured diagnostic this PR
496
+ // exists to guarantee goes missing exactly when it's needed most.
497
+ const errWithStderr = new Error("Command failed: pnpm install ...");
498
+ await mockNpmFallbackExec("", errWithStderr, {
499
+ skipEmit: true,
500
+ errorStderr: [
501
+ "npm error code ECONNREFUSED",
502
+ "npm error network request to https://registry.npmjs.org/foo failed",
503
+ ].join("\n"),
504
+ });
505
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
506
+ expect(loggerMock.error).toHaveBeenCalledWith(expect.stringMatching(/\[npm-install-blocked\] reason=registry_unreachable/));
507
+ });
508
+ it("APPS-4324: accumulates stderr across multiple chunks before classifying", async () => {
509
+ // Real `cp.stderr` emits multiple `data` events; the OS pipe buffer
510
+ // can split the npm output mid-line. Emit two chunks that bisect the
511
+ // `npm error code ECONNREFUSED` line so the classifier only succeeds
512
+ // if `automatic-upgrades.ts` concatenates the buffer instead of
513
+ // matching per-chunk.
514
+ await mockNpmFallbackExec([
515
+ "npm error code ECONNR",
516
+ "EFUSED\nnpm error network request to https://registry.npmjs.org/foo failed",
517
+ ], new Error("Command failed: pnpm install ..."));
518
+ await expect(runAndAwaitUpgrade()).rejects.toThrow(/Command failed: pnpm install/);
519
+ expect(loggerMock.error).toHaveBeenCalledWith(expect.stringMatching(/\[npm-install-blocked\] reason=registry_unreachable/));
520
+ });
227
521
  it("leaves sdk-api alone when the server response omits sdkApi (older deployment)", async () => {
228
522
  global.fetch = vi.fn(async () => ({
229
523
  ok: true,
@@ -249,5 +543,80 @@ describe("checkVersionsAndWritePackageJson", () => {
249
543
  expect(parsed.dependencies["@superblocksteam/sdk-api"]).toBe("workspace:*");
250
544
  });
251
545
  });
546
+ // -----------------------------------------------------------------------
547
+ // Argv + env plumbing for the CLI auto-upgrade.
548
+ //
549
+ // Userconfig pinning lives in the spawned subprocess env
550
+ // (`NPM_CONFIG_USERCONFIG`) rather than a CLI flag. `--userconfig=…`
551
+ // is npm-only — pnpm rejects it (pnpm/pnpm#6036). The env var route
552
+ // works for both via @pnpm/npm-conf's userconfig recognition.
553
+ //
554
+ // Build path is exercised against the pure-function helpers so the
555
+ // assertions don't have to drive the exec subprocess machinery.
556
+ // -----------------------------------------------------------------------
557
+ describe("buildGlobalInstallArgs", () => {
558
+ const PACKAGE_NAME = "@superblocksteam/cli@2.1.0";
559
+ it("returns the npm baseline argv (no --userconfig)", () => {
560
+ const args = buildGlobalInstallArgs({ agent: "npm" }, PACKAGE_NAME);
561
+ expect(args).toContain("--fund=false");
562
+ expect(args).toContain("--save-exact");
563
+ expect(args).toContain("--audit=false");
564
+ expect(args).toContain("--force");
565
+ expect(args).toContain(PACKAGE_NAME);
566
+ // Userconfig is plumbed via env, not flag (pnpm/pnpm#6036).
567
+ expect(args.some((a) => a.startsWith("--userconfig="))).toBe(false);
568
+ });
569
+ it("returns the pnpm baseline argv (drops npm-only --audit=false, no --userconfig)", () => {
570
+ const args = buildGlobalInstallArgs({ agent: "pnpm" }, PACKAGE_NAME);
571
+ expect(args).toContain("--fund=false");
572
+ expect(args).toContain("--save-exact");
573
+ expect(args).not.toContain("--audit=false");
574
+ expect(args).toContain("--force");
575
+ expect(args).toContain(PACKAGE_NAME);
576
+ // Same: pnpm rejects --userconfig (pnpm/pnpm#6036), so the env
577
+ // var route is the only mechanism.
578
+ expect(args.some((a) => a.startsWith("--userconfig="))).toBe(false);
579
+ });
580
+ });
581
+ describe("buildInstallEnv", () => {
582
+ const USERCONFIG_PATH = path.join(os.homedir(), ".superblocks", "npmrc");
583
+ it("sets NPM_CONFIG_USERCONFIG (npm + pnpm <= 10)", () => {
584
+ const env = buildInstallEnv(USERCONFIG_PATH);
585
+ expect(env.NPM_CONFIG_USERCONFIG).toBe(USERCONFIG_PATH);
586
+ });
587
+ it("sets PNPM_CONFIG_USERCONFIG (pnpm 11+)", () => {
588
+ // pnpm 11 stopped honouring `NPM_CONFIG_USERCONFIG`. Both env
589
+ // vars must be set so a single overlay works across npm, pnpm
590
+ // <= 10, and pnpm 11+. See `userconfig-env.integration.test.mts`
591
+ // for the regression guard against the pnpm 11 contract change.
592
+ const env = buildInstallEnv(USERCONFIG_PATH);
593
+ expect(env.PNPM_CONFIG_USERCONFIG).toBe(USERCONFIG_PATH);
594
+ });
595
+ it("accepts a custom base env (for callers scrubbing inherited config)", () => {
596
+ // The base-env override lets callers pre-scrub `npm_config_*`
597
+ // inherited from a parent pnpm/npm process, then layer the
598
+ // userconfig pin on top. `logsDir` (2nd arg) is omitted here.
599
+ const env = buildInstallEnv(USERCONFIG_PATH, undefined, {
600
+ PATH: "/custom/path",
601
+ HOME: "/custom/home",
602
+ });
603
+ expect(env.PATH).toBe("/custom/path");
604
+ expect(env.HOME).toBe("/custom/home");
605
+ expect(env.NPM_CONFIG_USERCONFIG).toBe(USERCONFIG_PATH);
606
+ expect(env.PNPM_CONFIG_USERCONFIG).toBe(USERCONFIG_PATH);
607
+ });
608
+ it("routes npm's debug log via NPM_CONFIG_LOGS_DIR when a logs dir is given", () => {
609
+ // The live-edit pod points npm's `logs-dir` at
610
+ // `<app>/.superblocks/logs` so a failed install leaves a collectable
611
+ // debug log in a predictable place.
612
+ const logsDir = path.join("/srv/app", ".superblocks", "logs");
613
+ const env = buildInstallEnv(USERCONFIG_PATH, logsDir, {});
614
+ expect(env.NPM_CONFIG_LOGS_DIR).toBe(logsDir);
615
+ });
616
+ it("omits NPM_CONFIG_LOGS_DIR when no logs dir is given (keeps npm's default _logs)", () => {
617
+ const env = buildInstallEnv(USERCONFIG_PATH, undefined, {});
618
+ expect(env.NPM_CONFIG_LOGS_DIR).toBeUndefined();
619
+ });
620
+ });
252
621
  });
253
622
  //# sourceMappingURL=automatic-upgrades.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"automatic-upgrades.test.js","sourceRoot":"","sources":["../../src/cli-replacement/automatic-upgrades.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automatic-upgrades.test.js","sourceRoot":"","sources":["../../src/cli-replacement/automatic-upgrades.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { DependencyInstallError } from "@superblocksteam/library-shared/types";
2
+ import { type ParseContext } from "@superblocksteam/vite-plugin-file-sync/npm-registry";
3
+ /** Marker thrown by the INITIAL verification install so the dev.mts catch can
4
+ * degrade by ORIGIN (never on classifiability). Carries the classified error. */
5
+ export declare class InitialInstallFailed extends Error {
6
+ readonly serverError: DependencyInstallError;
7
+ constructor(serverError: DependencyInstallError);
8
+ }
9
+ export interface ExecFailure {
10
+ stdout?: string;
11
+ stderr?: string;
12
+ message?: string;
13
+ }
14
+ /** Best-effort: pull package specs out of an ERESOLVE/ETARGET `--json` detail. */
15
+ export declare function parseDependencyConflict(text: string): {
16
+ name: string;
17
+ version?: string;
18
+ }[];
19
+ /** Always returns a DependencyInstallError (never null). */
20
+ export declare function classifyInitialInstallError(failure: ExecFailure, ctx: ParseContext): DependencyInstallError;
21
+ //# sourceMappingURL=dependency-install-classifier.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-install-classifier.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/dependency-install-classifier.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAOL,KAAK,YAAY,EAClB,MAAM,qDAAqD,CAAC;AAE7D;kFACkF;AAClF,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;gBACjC,WAAW,EAAE,sBAAsB;CAMhD;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD,kFAAkF;AAClF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAWtC;AAmBD,4DAA4D;AAC5D,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,YAAY,GAChB,sBAAsB,CAuCxB"}
@@ -0,0 +1,83 @@
1
+ import { classifyNpmExecStderr, parseNpmJsonDiagnostic, parseNpmJsonError, scrubSecrets, } from "@superblocksteam/vite-plugin-file-sync/npm-registry";
2
+ /** Marker thrown by the INITIAL verification install so the dev.mts catch can
3
+ * degrade by ORIGIN (never on classifiability). Carries the classified error. */
4
+ export class InitialInstallFailed extends Error {
5
+ serverError;
6
+ constructor(serverError) {
7
+ super(`initial dependency install failed (${serverError.category})`);
8
+ this.name = "InitialInstallFailed";
9
+ this.serverError = serverError;
10
+ Object.setPrototypeOf(this, new.target.prototype);
11
+ }
12
+ }
13
+ const REASON_TO_CATEGORY = {
14
+ not_in_registry: "not_in_registry",
15
+ registry_auth_failed: "registry_auth_failed",
16
+ registry_unreachable: "registry_unreachable",
17
+ tls_failed: "tls_failed",
18
+ };
19
+ const DEP_CONFLICT_CODES = /\b(ERESOLVE|ETARGET|EPEERINVALID)\b/;
20
+ /** Best-effort: pull package specs out of an ERESOLVE/ETARGET `--json` detail. */
21
+ export function parseDependencyConflict(text) {
22
+ const out = [];
23
+ const re = /(?:Found:|peer|resolve)\s+(@?[\w./-]+)@("?[^",\s]+"?|undefined)/gi;
24
+ let m;
25
+ while ((m = re.exec(text)) !== null) {
26
+ const name = m[1];
27
+ const version = m[2] === "undefined" ? undefined : m[2].replace(/"/g, "");
28
+ if (!out.some((p) => p.name === name))
29
+ out.push({ name, version });
30
+ }
31
+ return out;
32
+ }
33
+ function fromBlocked(b, rawError) {
34
+ return {
35
+ type: "dev-server/dependency-install",
36
+ timestamp: new Date().toISOString(),
37
+ category: REASON_TO_CATEGORY[b.reason],
38
+ subreason: b.subreason,
39
+ packages: b.packages.map((name) => ({ name })),
40
+ registryHost: b.registryHost,
41
+ npmErrorCode: b.npmErrorCode,
42
+ hasAnyRegistryConfigured: b.hasAnyRegistryConfigured,
43
+ rawError,
44
+ };
45
+ }
46
+ /** Always returns a DependencyInstallError (never null). */
47
+ export function classifyInitialInstallError(failure, ctx) {
48
+ const stdout = failure.stdout ?? "";
49
+ const stderr = failure.stderr ?? "";
50
+ // Use `||` (not `??`) so an empty `stderr` ("" — the default on L:stderr, and
51
+ // common under `--json`) falls through to the exec rejection's `.message`
52
+ // ("Command failed: …") instead of yielding a blank rawError / Details panel.
53
+ const rawError = scrubSecrets(parseNpmJsonDiagnostic(stdout) || stderr || failure.message || "");
54
+ const blockedFromJson = parseNpmJsonError(stdout, ctx);
55
+ if (blockedFromJson)
56
+ return fromBlocked(blockedFromJson, rawError);
57
+ const combined = `${stdout}\n${stderr}`;
58
+ const codeMatch = combined.match(DEP_CONFLICT_CODES);
59
+ if (codeMatch) {
60
+ return {
61
+ type: "dev-server/dependency-install",
62
+ timestamp: new Date().toISOString(),
63
+ category: "dependency_conflict",
64
+ packages: parseDependencyConflict(combined),
65
+ npmErrorCode: codeMatch[1],
66
+ hasAnyRegistryConfigured: ctx.hasAnyRegistryConfigured,
67
+ rawError,
68
+ };
69
+ }
70
+ const blockedFromStderr = classifyNpmExecStderr(stderr, ctx);
71
+ if (blockedFromStderr)
72
+ return fromBlocked(blockedFromStderr, rawError);
73
+ const unknownCode = combined.match(/npm (?:error|ERR!) code (\S+)/)?.[1];
74
+ return {
75
+ type: "dev-server/dependency-install",
76
+ timestamp: new Date().toISOString(),
77
+ category: "unknown",
78
+ npmErrorCode: unknownCode,
79
+ hasAnyRegistryConfigured: ctx.hasAnyRegistryConfigured,
80
+ rawError,
81
+ };
82
+ }
83
+ //# sourceMappingURL=dependency-install-classifier.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-install-classifier.mjs","sourceRoot":"","sources":["../../src/cli-replacement/dependency-install-classifier.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dependency-install-classifier.test.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-install-classifier.test.d.mts","sourceRoot":"","sources":["../../src/cli-replacement/dependency-install-classifier.test.mts"],"names":[],"mappings":""}