jamdesk 1.1.204 → 1.1.206

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 (69) hide show
  1. package/dist/__tests__/unit/deploy.test.js +106 -0
  2. package/dist/__tests__/unit/deploy.test.js.map +1 -1
  3. package/dist/__tests__/unit/jwt-auth-config-drift.test.d.ts +22 -0
  4. package/dist/__tests__/unit/jwt-auth-config-drift.test.d.ts.map +1 -0
  5. package/dist/__tests__/unit/jwt-auth-config-drift.test.js +193 -0
  6. package/dist/__tests__/unit/jwt-auth-config-drift.test.js.map +1 -0
  7. package/dist/__tests__/unit/turbopack-loader-config-drift.test.d.ts +20 -0
  8. package/dist/__tests__/unit/turbopack-loader-config-drift.test.d.ts.map +1 -0
  9. package/dist/__tests__/unit/turbopack-loader-config-drift.test.js +79 -0
  10. package/dist/__tests__/unit/turbopack-loader-config-drift.test.js.map +1 -0
  11. package/dist/__tests__/unit/validate-jwt-auth.test.d.ts +2 -0
  12. package/dist/__tests__/unit/validate-jwt-auth.test.d.ts.map +1 -0
  13. package/dist/__tests__/unit/validate-jwt-auth.test.js +77 -0
  14. package/dist/__tests__/unit/validate-jwt-auth.test.js.map +1 -0
  15. package/dist/commands/deploy.js +16 -0
  16. package/dist/commands/deploy.js.map +1 -1
  17. package/dist/lib/deps.d.ts.map +1 -1
  18. package/dist/lib/deps.js +5 -0
  19. package/dist/lib/deps.js.map +1 -1
  20. package/dist/lib/docs-config.d.ts +1 -0
  21. package/dist/lib/docs-config.d.ts.map +1 -1
  22. package/dist/lib/docs-config.js +49 -0
  23. package/dist/lib/docs-config.js.map +1 -1
  24. package/package.json +1 -1
  25. package/vendored/app/(jd-system)/jd-inactive/BrandedInactive.tsx +1 -7
  26. package/vendored/app/(jd-system)/jd-inactive/page.tsx +2 -4
  27. package/vendored/app/(unlock)/jd/auth/callback/CallbackClient.tsx +33 -0
  28. package/vendored/app/(unlock)/jd/auth/callback/page.tsx +15 -0
  29. package/vendored/app/(unlock)/jd/unlock/page.tsx +29 -7
  30. package/vendored/app/[[...slug]]/page.tsx +1 -102
  31. package/vendored/app/api/jd/auth/callback/route.ts +103 -0
  32. package/vendored/app/api/jd/auth/logout/route.ts +70 -0
  33. package/vendored/app/api/jd/auth/me/route.ts +52 -0
  34. package/vendored/app/api/jd/unlock/route.ts +27 -6
  35. package/vendored/app/layout.tsx +7 -0
  36. package/vendored/components/mdx/OpenApiEndpoint.tsx +4 -0
  37. package/vendored/components/navigation/Header.tsx +5 -0
  38. package/vendored/components/navigation/LogoutButton.tsx +41 -0
  39. package/vendored/lib/auth-plane-write-warning.ts +84 -0
  40. package/vendored/lib/auth-resolver.ts +125 -50
  41. package/vendored/lib/cached-redis.ts +28 -3
  42. package/vendored/lib/docs-types.ts +17 -1
  43. package/vendored/lib/glob-match.ts +54 -0
  44. package/vendored/lib/jwt-auth-config.ts +37 -0
  45. package/vendored/lib/jwt-key-build-warning.ts +38 -0
  46. package/vendored/lib/jwt-session.ts +98 -0
  47. package/vendored/lib/mdx-import-scan.ts +110 -0
  48. package/vendored/lib/mdx-inline-components.ts +1 -1
  49. package/vendored/lib/middleware-helpers.ts +11 -6
  50. package/vendored/lib/nav-group-filter.ts +81 -0
  51. package/vendored/lib/public-paths-resolver.ts +164 -7
  52. package/vendored/lib/r2-public-storage-guard.ts +26 -4
  53. package/vendored/lib/redis.ts +20 -2
  54. package/vendored/lib/render-doc-page.tsx +74 -13
  55. package/vendored/lib/root-page-slug.ts +20 -1
  56. package/vendored/lib/same-origin.ts +38 -0
  57. package/vendored/lib/sanitize-from.ts +31 -1
  58. package/vendored/lib/session-hint.ts +11 -0
  59. package/vendored/lib/snippet-compiler-isr.ts +1 -1
  60. package/vendored/lib/snippet-loader-isr.ts +1 -1
  61. package/vendored/lib/unlock-audit.ts +10 -0
  62. package/vendored/lib/validate-config.ts +14 -0
  63. package/vendored/lib/viewer-navigation.ts +45 -0
  64. package/vendored/lib/visibility.ts +65 -0
  65. package/vendored/next.config.js +32 -0
  66. package/vendored/schema/docs-schema.json +25 -0
  67. package/vendored/scripts/turbopack-js-to-ts-loader.cjs +51 -0
  68. package/vendored/shared/auth-cookie.ts +98 -5
  69. package/vendored/workspace-package-lock.json +100 -90
@@ -253,6 +253,112 @@ describe('deploy', () => {
253
253
  expect(error.message).toBe('Build service temporarily unavailable');
254
254
  expect(error.hint).toBe('Please try again in a few minutes.');
255
255
  });
256
+ // handleApiError mapped EVERY 403 to "You don't have access to this project.",
257
+ // discarding the reason the server already sends. A customer whose card lapsed
258
+ // was told they had lost access to a project they still own.
259
+ describe('403 subscription_inactive', () => {
260
+ const SENTENCE = 'This project\u2019s owner has an inactive subscription. ' +
261
+ 'Resubscribe at https://dashboard.jamdesk.com/subscription.';
262
+ // Current server shape: machine value in `code`, human sentence in `error`
263
+ // (which dashboard lib/queue-build.ts renders) and in `message`.
264
+ const INACTIVE_BODY = { error: SENTENCE, code: 'subscription_inactive', message: SENTENCE };
265
+ it('surfaces the billing reason from the upload-URL step', async () => {
266
+ setupAuthenticatedSession({
267
+ name: 'Test Docs', navigation: { groups: [] }, projectId: 'proj-1',
268
+ });
269
+ mockApiCall
270
+ .mockResolvedValueOnce(makeJsonResponse({ projects: [ACME_PROJECT] }))
271
+ .mockResolvedValueOnce(makeJsonResponse(INACTIVE_BODY, 403));
272
+ const error = await deploy({ detach: true }).catch((e) => e);
273
+ expect(error.code).toBe('SUBSCRIPTION_INACTIVE');
274
+ expect(error.message).toMatch(/inactive subscription/i);
275
+ expect(error.message).not.toMatch(/don't have access/i);
276
+ });
277
+ // Same body, different endpoint — queueBuild returns it too, so one branch
278
+ // in handleApiError has to cover both.
279
+ it('surfaces the billing reason from the queueBuild step', async () => {
280
+ setupAuthenticatedSession({
281
+ name: 'Test Docs', navigation: { groups: [] }, projectId: 'proj-1',
282
+ });
283
+ mockApiCall
284
+ .mockResolvedValueOnce(makeJsonResponse({ projects: [ACME_PROJECT] }))
285
+ .mockResolvedValueOnce(makeJsonResponse({
286
+ uploadUrl: 'https://abc123.r2.cloudflarestorage.com/upload', tarballKey: 'key',
287
+ }))
288
+ .mockResolvedValueOnce(makeJsonResponse(INACTIVE_BODY, 403));
289
+ mockFetch.mockResolvedValueOnce({ ok: true, status: 200 });
290
+ const error = await deploy({ detach: true }).catch((e) => e);
291
+ expect(error.code).toBe('SUBSCRIPTION_INACTIVE');
292
+ expect(error.message).toMatch(/inactive subscription/i);
293
+ });
294
+ it('points the user at the place they can fix it, exactly once', async () => {
295
+ setupAuthenticatedSession({
296
+ name: 'Test Docs', navigation: { groups: [] }, projectId: 'proj-1',
297
+ });
298
+ mockApiCall
299
+ .mockResolvedValueOnce(makeJsonResponse({ projects: [ACME_PROJECT] }))
300
+ .mockResolvedValueOnce(makeJsonResponse(INACTIVE_BODY, 403));
301
+ const error = await deploy({ detach: true }).catch((e) => e);
302
+ // index.ts prints message then hint. The server sentence already ends with
303
+ // the URL, so a hint repeating it printed the link twice.
304
+ const printed = `${error.message} ${error.hint ?? ''}`;
305
+ expect(printed).toContain('dashboard.jamdesk.com/subscription');
306
+ expect(printed.match(/dashboard\.jamdesk\.com\/subscription/g)).toHaveLength(1);
307
+ });
308
+ // A CLI is released separately from the functions it talks to, so it has to
309
+ // keep understanding the older body that put the code in `error`.
310
+ it('still recognizes the older shape that put the code in error', async () => {
311
+ setupAuthenticatedSession({
312
+ name: 'Test Docs', navigation: { groups: [] }, projectId: 'proj-1',
313
+ });
314
+ mockApiCall
315
+ .mockResolvedValueOnce(makeJsonResponse({ projects: [ACME_PROJECT] }))
316
+ .mockResolvedValueOnce(makeJsonResponse({ error: 'subscription_inactive', message: SENTENCE }, 403));
317
+ const error = await deploy({ detach: true }).catch((e) => e);
318
+ expect(error.code).toBe('SUBSCRIPTION_INACTIVE');
319
+ expect(error.message).toMatch(/inactive subscription/i);
320
+ });
321
+ // An empty message must fall through to the fallback, not print a bare error.
322
+ it('falls back when the server sends an empty message', async () => {
323
+ setupAuthenticatedSession({
324
+ name: 'Test Docs', navigation: { groups: [] }, projectId: 'proj-1',
325
+ });
326
+ mockApiCall
327
+ .mockResolvedValueOnce(makeJsonResponse({ projects: [ACME_PROJECT] }))
328
+ .mockResolvedValueOnce(makeJsonResponse({ code: 'subscription_inactive', message: '' }, 403));
329
+ const error = await deploy({ detach: true }).catch((e) => e);
330
+ expect(error.code).toBe('SUBSCRIPTION_INACTIVE');
331
+ expect(error.message).toMatch(/inactive subscription/i);
332
+ });
333
+ // A plain permission failure must keep its existing wording.
334
+ it('still says access denied for an ordinary 403', async () => {
335
+ setupAuthenticatedSession({
336
+ name: 'Test Docs', navigation: { groups: [] }, projectId: 'proj-1',
337
+ });
338
+ mockApiCall
339
+ .mockResolvedValueOnce(makeJsonResponse({ projects: [ACME_PROJECT] }))
340
+ .mockResolvedValueOnce(makeJsonResponse({ error: 'forbidden' }, 403));
341
+ const error = await deploy({ detach: true }).catch((e) => e);
342
+ expect(error.code).toBe('FORBIDDEN');
343
+ expect(error.message).toMatch(/don't have access/i);
344
+ });
345
+ // A 403 whose body fails to parse must not print `undefined`.
346
+ it('still says access denied for a 403 with an unparseable body', async () => {
347
+ setupAuthenticatedSession({
348
+ name: 'Test Docs', navigation: { groups: [] }, projectId: 'proj-1',
349
+ });
350
+ mockApiCall
351
+ .mockResolvedValueOnce(makeJsonResponse({ projects: [ACME_PROJECT] }))
352
+ .mockResolvedValueOnce({
353
+ ok: false,
354
+ status: 403,
355
+ json: async () => { throw new Error('not json'); },
356
+ });
357
+ const error = await deploy({ detach: true }).catch((e) => e);
358
+ expect(error.code).toBe('FORBIDDEN');
359
+ expect(error.message).toMatch(/don't have access/i);
360
+ });
361
+ });
256
362
  it('uses spinners for local deploy steps', async () => {
257
363
  setupAuthenticatedSession({
258
364
  name: 'Test Docs',
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/deploy.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/deploy.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Drift guard for the CLI's hand-copy of validateJwtAuth.
3
+ *
4
+ * `cli/src/lib/docs-config.ts` hand-duplicates the canonical `validateJwtAuth`
5
+ * from `build-service/lib/jwt-auth-config.ts` (vendored, byte-identical, at
6
+ * `cli/vendored/lib/jwt-auth-config.ts`). The CLI's `src/` CANNOT statically
7
+ * import from `vendored/` (different tsconfig module resolution; `vendored/` is
8
+ * outside `rootDir` and excluded from the tsc compile — see docs-config.ts),
9
+ * so the copy is maintained by hand and can silently drift.
10
+ *
11
+ * This test pins the two together two ways:
12
+ * 1. BEHAVIORAL PARITY — a fixture table covering every validation branch is
13
+ * run through BOTH the canonical validator (loaded from vendored/ via a
14
+ * RUNTIME dynamic import, invisible to tsc) and the CLI's copy (exercised
15
+ * end-to-end through validateConfig()). A rule the CLI copy lacks makes at
16
+ * least one fixture disagree.
17
+ * 2. SOURCE PARITY — the two function bodies are extracted and compared with
18
+ * comments stripped (the house style of internal-hosts-sync.test.ts), so a
19
+ * new canonical rule fails the guard even if no fixture happens to cover it.
20
+ */
21
+ export {};
22
+ //# sourceMappingURL=jwt-auth-config-drift.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-auth-config-drift.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/jwt-auth-config-drift.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Drift guard for the CLI's hand-copy of validateJwtAuth.
3
+ *
4
+ * `cli/src/lib/docs-config.ts` hand-duplicates the canonical `validateJwtAuth`
5
+ * from `build-service/lib/jwt-auth-config.ts` (vendored, byte-identical, at
6
+ * `cli/vendored/lib/jwt-auth-config.ts`). The CLI's `src/` CANNOT statically
7
+ * import from `vendored/` (different tsconfig module resolution; `vendored/` is
8
+ * outside `rootDir` and excluded from the tsc compile — see docs-config.ts),
9
+ * so the copy is maintained by hand and can silently drift.
10
+ *
11
+ * This test pins the two together two ways:
12
+ * 1. BEHAVIORAL PARITY — a fixture table covering every validation branch is
13
+ * run through BOTH the canonical validator (loaded from vendored/ via a
14
+ * RUNTIME dynamic import, invisible to tsc) and the CLI's copy (exercised
15
+ * end-to-end through validateConfig()). A rule the CLI copy lacks makes at
16
+ * least one fixture disagree.
17
+ * 2. SOURCE PARITY — the two function bodies are extracted and compared with
18
+ * comments stripped (the house style of internal-hosts-sync.test.ts), so a
19
+ * new canonical rule fails the guard even if no fixture happens to cover it.
20
+ */
21
+ import { describe, it, expect } from 'vitest';
22
+ import fs from 'node:fs/promises';
23
+ import fsSync from 'node:fs';
24
+ import os from 'node:os';
25
+ import path from 'path';
26
+ import { fileURLToPath, pathToFileURL } from 'node:url';
27
+ import { validateConfig } from '../../lib/docs-config.js';
28
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
29
+ // builder/cli root, then the canonical (vendored) copy.
30
+ const CLI_ROOT = path.join(__dirname, '../../..');
31
+ const VENDORED_JWT_AUTH = path.join(CLI_ROOT, 'vendored/lib/jwt-auth-config.ts');
32
+ const CLI_DOCS_CONFIG = path.join(CLI_ROOT, 'src/lib/docs-config.ts');
33
+ /**
34
+ * Load the canonical validateJwtAuth from vendored/ at RUNTIME. A static import
35
+ * would drag a rootDir-external module into the tsc program and break
36
+ * `tsc --noEmit`; a dynamic import via a computed path is opaque to tsc but
37
+ * resolved+transformed by vitest. The vendored file's sole import is a
38
+ * type-only `import type { DocsConfig }`, erased at transform time, so the
39
+ * module has no runtime dependency of its own.
40
+ */
41
+ async function loadCanonical() {
42
+ const mod = await import(pathToFileURL(VENDORED_JWT_AUTH).href);
43
+ return mod.validateJwtAuth;
44
+ }
45
+ const validNav = {
46
+ theme: 'jam',
47
+ name: 'T',
48
+ navigation: { groups: [{ group: 'Get Started', pages: ['intro'] }] },
49
+ };
50
+ // Each fixture is an `auth` block (or omitted). Every branch of the canonical
51
+ // validateJwtAuth is represented: no-jwt, missing/empty/non-https/unparseable/
52
+ // relative loginUrl, password+jwt mutual exclusion, and the public[] checks
53
+ // (validated whether or not jwt is enabled).
54
+ const FIXTURES = [
55
+ { name: 'no auth block' },
56
+ { name: 'empty auth block', auth: {} },
57
+ { name: 'password only, no jwt', auth: { password: { enabled: true } } },
58
+ { name: 'jwt enabled, missing loginUrl', auth: { jwt: { enabled: true } } },
59
+ {
60
+ name: 'jwt enabled, empty loginUrl',
61
+ auth: { jwt: { enabled: true, loginUrl: '' } },
62
+ },
63
+ {
64
+ name: 'jwt enabled, http loginUrl',
65
+ auth: { jwt: { enabled: true, loginUrl: 'http://example.com/login' } },
66
+ },
67
+ {
68
+ name: 'jwt enabled, unparseable loginUrl',
69
+ auth: { jwt: { enabled: true, loginUrl: 'not a url' } },
70
+ },
71
+ {
72
+ name: 'jwt enabled, relative loginUrl',
73
+ auth: { jwt: { enabled: true, loginUrl: '/relative' } },
74
+ },
75
+ {
76
+ name: 'password + jwt both enabled',
77
+ auth: {
78
+ password: { enabled: true },
79
+ jwt: { enabled: true, loginUrl: 'https://example.com/login' },
80
+ },
81
+ },
82
+ {
83
+ name: 'jwt public has a non-string entry',
84
+ auth: {
85
+ jwt: { enabled: true, loginUrl: 'https://example.com/l', public: ['/ok', 5] },
86
+ },
87
+ },
88
+ {
89
+ name: 'jwt public is not an array',
90
+ auth: {
91
+ jwt: { enabled: true, loginUrl: 'https://example.com/l', public: '/ok' },
92
+ },
93
+ },
94
+ {
95
+ name: 'jwt public entry missing leading slash',
96
+ auth: {
97
+ jwt: { enabled: true, loginUrl: 'https://example.com/l', public: ['ok'] },
98
+ },
99
+ },
100
+ {
101
+ name: 'jwt disabled but public invalid (validated regardless of enabled)',
102
+ auth: { jwt: { enabled: false, public: [5] } },
103
+ },
104
+ {
105
+ name: 'valid jwt with public',
106
+ auth: {
107
+ jwt: { enabled: true, loginUrl: 'https://example.com/login', public: ['/changelog/*'] },
108
+ },
109
+ },
110
+ {
111
+ name: 'valid jwt without public',
112
+ auth: { jwt: { enabled: true, loginUrl: 'https://example.com/login' } },
113
+ },
114
+ { name: 'jwt disabled, no public', auth: { jwt: { enabled: false } } },
115
+ ];
116
+ async function runCli(config) {
117
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'jd-jwt-drift-'));
118
+ try {
119
+ const cfg = path.join(dir, 'docs.json');
120
+ await fs.writeFile(cfg, JSON.stringify(config));
121
+ return await validateConfig(cfg);
122
+ }
123
+ finally {
124
+ await fs.rm(dir, { recursive: true, force: true });
125
+ }
126
+ }
127
+ describe('validateJwtAuth CLI/canonical behavioral parity', () => {
128
+ it.each(FIXTURES)('$name — CLI matches the canonical outcome', async ({ auth }) => {
129
+ const canonical = await loadCanonical();
130
+ const config = auth ? { ...validNav, auth } : { ...validNav };
131
+ const canonicalErrors = canonical(config);
132
+ const cli = await runCli(config);
133
+ if (canonicalErrors.length === 0) {
134
+ // Canonical accepts → the CLI must validate cleanly too (validNav base
135
+ // ensures the only possible failure is the jwt check).
136
+ expect(cli.valid).toBe(true);
137
+ }
138
+ else {
139
+ // Canonical rejects → the CLI must reject with a config_error whose
140
+ // surfaced message is exactly the canonical's first error.
141
+ expect(cli.valid).toBe(false);
142
+ expect(cli.errorType).toBe('config_error');
143
+ expect(cli.error).toBe(`Invalid docs.json: ${canonicalErrors[0]}`);
144
+ }
145
+ });
146
+ });
147
+ // ── Source parity (catches an added canonical rule even if untested) ──────────
148
+ function extractFnBody(src, name) {
149
+ const sigIdx = src.indexOf(`function ${name}`);
150
+ if (sigIdx === -1)
151
+ throw new Error(`function ${name} not found`);
152
+ const braceStart = src.indexOf('{', sigIdx);
153
+ if (braceStart === -1)
154
+ throw new Error(`no opening brace for ${name}`);
155
+ let depth = 0;
156
+ for (let i = braceStart; i < src.length; i++) {
157
+ if (src[i] === '{')
158
+ depth++;
159
+ else if (src[i] === '}') {
160
+ depth--;
161
+ if (depth === 0)
162
+ return src.slice(braceStart, i + 1);
163
+ }
164
+ }
165
+ throw new Error(`unbalanced braces in ${name}`);
166
+ }
167
+ // Strip block comments only (the bodies use `/* … */`; there are no `//` line
168
+ // comments, and stripping those would also chew through the `https://` inside
169
+ // the error strings), then collapse whitespace — comparing logic, not prose.
170
+ function normalizeLogic(body) {
171
+ return body
172
+ .replace(/\/\*[\s\S]*?\*\//g, '')
173
+ .replace(/\s+/g, ' ')
174
+ .trim();
175
+ }
176
+ describe('validateJwtAuth source parity (no silent drift)', () => {
177
+ it('CLI hand-copy body is logic-identical to the canonical vendored copy', () => {
178
+ const canonicalSrc = fsSync.readFileSync(VENDORED_JWT_AUTH, 'utf-8');
179
+ const cliSrc = fsSync.readFileSync(CLI_DOCS_CONFIG, 'utf-8');
180
+ const canonicalBody = extractFnBody(canonicalSrc, 'validateJwtAuth');
181
+ const cliBody = extractFnBody(cliSrc, 'validateJwtAuth');
182
+ // Guard against a broken extraction silently comparing '' === ''.
183
+ expect(canonicalBody).toContain('errors.push');
184
+ expect(canonicalBody.length).toBeGreaterThan(200);
185
+ if (normalizeLogic(cliBody) !== normalizeLogic(canonicalBody)) {
186
+ throw new Error('validateJwtAuth drift: the CLI hand-copy in cli/src/lib/docs-config.ts ' +
187
+ 'differs from the canonical cli/vendored/lib/jwt-auth-config.ts ' +
188
+ '(mirror of build-service/lib/jwt-auth-config.ts).\n\n' +
189
+ 'Re-copy the function body so the two stay in lockstep.');
190
+ }
191
+ });
192
+ });
193
+ //# sourceMappingURL=jwt-auth-config-drift.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-auth-config-drift.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/jwt-auth-config-drift.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Drift guard for the Turbopack `.js`-specifier workaround.
3
+ *
4
+ * `build-service/next.config.mjs` applies `scripts/turbopack-js-to-ts-loader.cjs`
5
+ * to every `*.ts`/`*.tsx` because Turbopack has no equivalent of webpack's
6
+ * `resolve.extensionAlias` and throws a hard "Module not found" on some
7
+ * `./foo.js` imports whose real source is `./foo.ts` — the convention this
8
+ * repo uses everywhere (tsconfig `moduleResolution: "bundler"`).
9
+ *
10
+ * The CLI vendors the SAME source tree, including the jwt-session subtree that
11
+ * provoked the original failure, and compiles it with Turbopack in
12
+ * `jamdesk dev`. So the CLI config needs the same rule, and the loader has to
13
+ * be vendored or the rule points at a file that is not in the workspace.
14
+ *
15
+ * CLAUDE.md already requires that a build-service next.config change be
16
+ * mirrored into the CLI config by hand. This test is what makes that rule
17
+ * enforceable instead of aspirational.
18
+ */
19
+ export {};
20
+ //# sourceMappingURL=turbopack-loader-config-drift.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turbopack-loader-config-drift.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/turbopack-loader-config-drift.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Drift guard for the Turbopack `.js`-specifier workaround.
3
+ *
4
+ * `build-service/next.config.mjs` applies `scripts/turbopack-js-to-ts-loader.cjs`
5
+ * to every `*.ts`/`*.tsx` because Turbopack has no equivalent of webpack's
6
+ * `resolve.extensionAlias` and throws a hard "Module not found" on some
7
+ * `./foo.js` imports whose real source is `./foo.ts` — the convention this
8
+ * repo uses everywhere (tsconfig `moduleResolution: "bundler"`).
9
+ *
10
+ * The CLI vendors the SAME source tree, including the jwt-session subtree that
11
+ * provoked the original failure, and compiles it with Turbopack in
12
+ * `jamdesk dev`. So the CLI config needs the same rule, and the loader has to
13
+ * be vendored or the rule points at a file that is not in the workspace.
14
+ *
15
+ * CLAUDE.md already requires that a build-service next.config change be
16
+ * mirrored into the CLI config by hand. This test is what makes that rule
17
+ * enforceable instead of aspirational.
18
+ */
19
+ import { describe, it, expect } from 'vitest';
20
+ import fs from 'node:fs';
21
+ import path from 'node:path';
22
+ import { fileURLToPath } from 'node:url';
23
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
24
+ const CLI_ROOT = path.join(__dirname, '../../..');
25
+ const BUILD_SERVICE = path.join(CLI_ROOT, '../build-service');
26
+ const LOADER_BASENAME = 'turbopack-js-to-ts-loader.cjs';
27
+ const CONFIGS = {
28
+ 'build-service/next.config.mjs': path.join(BUILD_SERVICE, 'next.config.mjs'),
29
+ 'cli/config/next.config.js': path.join(CLI_ROOT, 'config/next.config.js'),
30
+ 'cli/vendored/next.config.js': path.join(CLI_ROOT, 'vendored/next.config.js'),
31
+ };
32
+ function read(p) {
33
+ return fs.readFileSync(p, 'utf8');
34
+ }
35
+ /** Comments stripped, so a prose edit never fails the guard. */
36
+ function code(src) {
37
+ return src.replace(/\/\*[\s\S]*?\*\//g, '').replace(/^\s*\/\/.*$/gm, '');
38
+ }
39
+ describe('Turbopack loader rule is mirrored across every Next config', () => {
40
+ for (const [label, file] of Object.entries(CONFIGS)) {
41
+ it(`${label} applies the loader to *.ts and *.tsx`, () => {
42
+ const src = code(read(file));
43
+ expect(src, `${label} is missing a turbopack.rules block`).toMatch(/rules\s*:\s*\{/);
44
+ for (const glob of ['*.ts', '*.tsx']) {
45
+ const re = new RegExp(`'\\${glob}'\\s*:\\s*\\{\\s*loaders\\s*:\\s*\\[\\s*'\\./scripts/${LOADER_BASENAME.replace(/\./g, '\\.')}'`);
46
+ expect(src, `${label} does not route ${glob} through ${LOADER_BASENAME}`).toMatch(re);
47
+ }
48
+ });
49
+ it(`${label} keeps the webpack extensionAlias fallback`, () => {
50
+ // `jamdesk dev --webpack` is an advertised escape hatch (src/index.ts),
51
+ // and webpack needs the alias for exactly the same imports.
52
+ const src = code(read(file));
53
+ expect(src, `${label} is missing resolve.extensionAlias`).toMatch(/extensionAlias/);
54
+ expect(src).toMatch(/'\.js'\s*:\s*\[\s*'\.ts'\s*,\s*'\.tsx'\s*,\s*'\.js'\s*\]/);
55
+ });
56
+ }
57
+ });
58
+ describe('the loader itself is present wherever a config points at it', () => {
59
+ const canonical = path.join(BUILD_SERVICE, 'scripts', LOADER_BASENAME);
60
+ const vendored = path.join(CLI_ROOT, 'vendored/scripts', LOADER_BASENAME);
61
+ it('exists in build-service/scripts', () => {
62
+ expect(fs.existsSync(canonical), `${canonical} is missing`).toBe(true);
63
+ });
64
+ it('is vendored into the CLI workspace tree', () => {
65
+ // dev.ts copies vendored/ wholesale into the workspace, so vendored/scripts
66
+ // becomes <workspace>/scripts — the path the rule resolves against.
67
+ expect(fs.existsSync(vendored), `${vendored} is missing; add it to safeScripts in cli/scripts/vendor.js`).toBe(true);
68
+ });
69
+ it('is byte-identical to the canonical copy', () => {
70
+ expect(read(vendored)).toBe(read(canonical));
71
+ });
72
+ it('is on the vendor allowlist, so re-vendoring keeps it', () => {
73
+ // The copy loop in vendor.js is existsSync-guarded, so an omission here is
74
+ // silent: vendoring succeeds and the CLI fails at compile time instead.
75
+ const vendorScript = read(path.join(CLI_ROOT, 'scripts/vendor.js'));
76
+ expect(vendorScript).toContain(LOADER_BASENAME);
77
+ });
78
+ });
79
+ //# sourceMappingURL=turbopack-loader-config-drift.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turbopack-loader-config-drift.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/turbopack-loader-config-drift.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validate-jwt-auth.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-jwt-auth.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/validate-jwt-auth.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,77 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import fs from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'path';
5
+ import { validateConfig } from '../../lib/docs-config.js';
6
+ // Mirrors build-service/lib/__tests__/jwt-auth-config.test.ts error-string
7
+ // assertions, but exercised end-to-end through validateConfig() (the CLI has
8
+ // no standalone validateJwtAuth export — it's a hand-written check that runs
9
+ // before the Ajv pass; see docs-config.ts for why).
10
+ describe('validateConfig - auth.jwt', () => {
11
+ async function withConfig(config) {
12
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'jd-jwt-auth-'));
13
+ try {
14
+ const cfg = path.join(dir, 'docs.json');
15
+ await fs.writeFile(cfg, JSON.stringify(config));
16
+ return await validateConfig(cfg);
17
+ }
18
+ finally {
19
+ await fs.rm(dir, { recursive: true, force: true });
20
+ }
21
+ }
22
+ const base = { theme: 'jam', name: 'T', navigation: { groups: [] } };
23
+ it('requires loginUrl when enabled', async () => {
24
+ const result = await withConfig({ ...base, auth: { jwt: { enabled: true } } });
25
+ expect(result.valid).toBe(false);
26
+ expect(result.errorType).toBe('config_error');
27
+ expect(result.error).toBe('Invalid docs.json: auth.jwt.enabled requires auth.jwt.loginUrl (an absolute https:// URL of your login flow)');
28
+ });
29
+ it('rejects non-https and unparseable loginUrl', async () => {
30
+ for (const bad of ['http://example.com/login', 'not a url', '/relative']) {
31
+ const result = await withConfig({ ...base, auth: { jwt: { enabled: true, loginUrl: bad } } });
32
+ expect(result.valid).toBe(false);
33
+ expect(result.error).toBe('Invalid docs.json: auth.jwt.loginUrl must be an absolute https:// URL');
34
+ }
35
+ });
36
+ it('rejects password + jwt both enabled', async () => {
37
+ const result = await withConfig({
38
+ ...base,
39
+ auth: {
40
+ password: { enabled: true },
41
+ jwt: { enabled: true, loginUrl: 'https://example.com/login' },
42
+ },
43
+ });
44
+ expect(result.valid).toBe(false);
45
+ expect(result.error).toBe('Invalid docs.json: auth.password and auth.jwt cannot both be enabled — choose one authentication method');
46
+ });
47
+ it('rejects non-string entries in auth.jwt.public', async () => {
48
+ const result = await withConfig({
49
+ ...base,
50
+ auth: { jwt: { enabled: true, loginUrl: 'https://example.com/l', public: ['/ok', 5] } },
51
+ });
52
+ expect(result.valid).toBe(false);
53
+ expect(result.error).toBe('Invalid docs.json: auth.jwt.public must be an array of path strings starting with /');
54
+ });
55
+ // Added post-Task-15 vendor refresh: the CLI's bundled Ajv schema
56
+ // (vendored/schema/docs-schema.json) now knows about `auth.jwt` — before
57
+ // `npm run vendor` picked up the marketing/public/docs.json master schema
58
+ // change, `additionalProperties: false` on `auth` would have made Ajv
59
+ // reject a valid jwt block as an unknown property, even though the
60
+ // hand-written validateJwtAuth check (asserted above) passed it.
61
+ // Ajv requires at least one nav group/page — unrelated to auth.jwt, but
62
+ // needed so these two cases reach the Ajv pass instead of failing earlier
63
+ // on `/navigation/groups` (must NOT have fewer than 1 items).
64
+ const validNav = { theme: 'jam', name: 'T', navigation: { groups: [{ group: 'Get Started', pages: ['intro'] }] } };
65
+ it('accepts a valid jwt block through the full pipeline, including Ajv', async () => {
66
+ const result = await withConfig({
67
+ ...validNav,
68
+ auth: { jwt: { enabled: true, loginUrl: 'https://example.com/login', public: ['/changelog/*'] } },
69
+ });
70
+ expect(result.valid).toBe(true);
71
+ });
72
+ it('accepts an absent auth block', async () => {
73
+ const result = await withConfig(validNav);
74
+ expect(result.valid).toBe(true);
75
+ });
76
+ });
77
+ //# sourceMappingURL=validate-jwt-auth.test.js.map