jamdesk 1.1.180 → 1.1.182
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/__tests__/unit/ai-fix-client.test.js +16 -1
- package/dist/__tests__/unit/ai-fix-client.test.js.map +1 -1
- package/dist/__tests__/unit/deploy-proxy-safety.test.d.ts +2 -0
- package/dist/__tests__/unit/deploy-proxy-safety.test.d.ts.map +1 -0
- package/dist/__tests__/unit/deploy-proxy-safety.test.js +107 -0
- package/dist/__tests__/unit/deploy-proxy-safety.test.js.map +1 -0
- package/dist/__tests__/unit/deploy-templates.test.js +129 -3
- package/dist/__tests__/unit/deploy-templates.test.js.map +1 -1
- package/dist/commands/deploy/cloudflare-worker-template.d.ts +2 -0
- package/dist/commands/deploy/cloudflare-worker-template.d.ts.map +1 -0
- package/dist/commands/deploy/cloudflare-worker-template.js +155 -0
- package/dist/commands/deploy/cloudflare-worker-template.js.map +1 -0
- package/dist/commands/deploy/cloudflare.d.ts +22 -0
- package/dist/commands/deploy/cloudflare.d.ts.map +1 -1
- package/dist/commands/deploy/cloudflare.js +93 -16
- package/dist/commands/deploy/cloudflare.js.map +1 -1
- package/dist/commands/deploy/templates.d.ts +23 -0
- package/dist/commands/deploy/templates.d.ts.map +1 -1
- package/dist/commands/deploy/templates.js +38 -86
- package/dist/commands/deploy/templates.js.map +1 -1
- package/dist/commands/deploy/types.d.ts +7 -0
- package/dist/commands/deploy/types.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/ai-fix-client.d.ts +8 -0
- package/dist/lib/ai-fix-client.d.ts.map +1 -1
- package/dist/lib/ai-fix-client.js +13 -1
- package/dist/lib/ai-fix-client.js.map +1 -1
- package/dist/lib/fix-engine.d.ts +15 -1
- package/dist/lib/fix-engine.d.ts.map +1 -1
- package/dist/lib/fix-engine.js +21 -2
- package/dist/lib/fix-engine.js.map +1 -1
- package/package.json +1 -1
- package/vendored/app/[[...slug]]/page.tsx +2 -0
- package/vendored/app/api/markdown-export/[project]/[...slug]/route.ts +26 -8
- package/vendored/app/layout.tsx +4 -1
- package/vendored/components/layout/LayoutWrapper.tsx +8 -1
- package/vendored/components/mdx/MDXComponents.tsx +3 -2
- package/vendored/components/mdx/NativeSubscribeForm.tsx +5 -2
- package/vendored/hooks/useChat.ts +8 -10
- package/vendored/lib/agent-directive.tsx +11 -11
- package/vendored/lib/cached-redis.ts +3 -3
- package/vendored/lib/content-loader.ts +1 -1
- package/vendored/lib/docs-types.ts +4 -0
- package/vendored/lib/fix-engine.ts +20 -2
- package/vendored/lib/indexnow.ts +10 -3
- package/vendored/lib/layout-helpers.tsx +2 -2
- package/vendored/lib/link-prefix-helpers.ts +38 -0
- package/vendored/lib/middleware-helpers.ts +154 -3
- package/vendored/lib/page-isr-helpers.ts +78 -21
- package/vendored/lib/project-resolver.ts +36 -3
- package/vendored/lib/r2-manifest.ts +10 -0
- package/vendored/lib/regenerate-screenshot-handler.ts +3 -1
- package/vendored/lib/render-doc-page.tsx +29 -19
- package/vendored/lib/revalidation-helpers.ts +24 -3
- package/vendored/lib/revalidation-trigger.ts +64 -2
- package/vendored/lib/route-helpers.ts +5 -3
- package/vendored/lib/scanner-blocklist.ts +14 -5
- package/vendored/lib/screenshot-capture.ts +14 -3
- package/vendored/lib/seo.ts +43 -9
- package/vendored/lib/static-artifacts.ts +58 -21
- package/vendored/lib/static-file-route.ts +29 -0
- package/vendored/shared/docs-subpath.ts +101 -0
- package/vendored/shared/types.ts +4 -0
- package/vendored/workspace-package-lock.json +117 -116
- package/dist/__tests__/unit/dev-workspace-symlinks.test.d.ts +0 -2
- package/dist/__tests__/unit/dev-workspace-symlinks.test.d.ts.map +0 -1
- package/dist/__tests__/unit/dev-workspace-symlinks.test.js +0 -112
- package/dist/__tests__/unit/dev-workspace-symlinks.test.js.map +0 -1
- package/dist/__tests__/unit/language-filter.test.d.ts +0 -2
- package/dist/__tests__/unit/language-filter.test.d.ts.map +0 -1
- package/dist/__tests__/unit/language-filter.test.js +0 -166
- package/dist/__tests__/unit/language-filter.test.js.map +0 -1
- package/dist/lib/language-filter.d.ts +0 -31
- package/dist/lib/language-filter.d.ts.map +0 -1
- package/dist/lib/language-filter.js +0 -14
- package/dist/lib/language-filter.js.map +0 -1
package/README.md
CHANGED
|
@@ -427,9 +427,9 @@ The wizard handles wrangler setup, Cloudflare auth, zone selection, and worker g
|
|
|
427
427
|
| `--domain <domain>` | Target domain (e.g., yoursite.com) |
|
|
428
428
|
| `--path <path>` | Path prefix (default: /docs) |
|
|
429
429
|
| `--output-dir <dir>` | Output directory (default: cloudflare-worker/) |
|
|
430
|
-
| `--skip-deploy` |
|
|
431
|
-
| `--force` | Overwrite
|
|
432
|
-
| `--yes` |
|
|
430
|
+
| `--skip-deploy` | Skip the "deploy now?" prompt in an interactive run |
|
|
431
|
+
| `--force` | Overwrite the output directory if it already exists |
|
|
432
|
+
| `--yes` | Answer every prompt with its default (CI mode). Never deploys, and never overwrites an existing directory — add `--force` for that |
|
|
433
433
|
|
|
434
434
|
```bash
|
|
435
435
|
jamdesk deploy-proxy cloudflare --slug acme --domain example.com --path /docs --yes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
2
|
const apiCall = vi.fn();
|
|
3
3
|
vi.mock('../../lib/auth.js', () => ({ apiCall: (...a) => apiCall(...a) }));
|
|
4
|
-
import { requestAiFixes } from '../../lib/ai-fix-client.js';
|
|
4
|
+
import { requestAiFixes, AI_PAGE_TEXT_MAX } from '../../lib/ai-fix-client.js';
|
|
5
5
|
// apiCall resolves a fetch Response — the mock must be Response-shaped.
|
|
6
6
|
const resp = (body, ok = true) => ({ ok, status: ok ? 200 : 500, json: async () => body });
|
|
7
7
|
// A single anchor so the request is non-empty and a call actually happens.
|
|
@@ -105,5 +105,20 @@ describe('requestAiFixes', () => {
|
|
|
105
105
|
expect(out.descriptions).toHaveLength(5); // batch-1's empty desc chunk added nothing
|
|
106
106
|
expect(out.descriptions.map((d) => d.index)).toEqual([0, 1, 2, 3, 4]);
|
|
107
107
|
});
|
|
108
|
+
it('truncates pageText to AI_PAGE_TEXT_MAX before sending (server prompt reads no further)', async () => {
|
|
109
|
+
apiCall.mockResolvedValue(resp({ anchors: [], descriptions: [{ index: 0, text: 'd' }] }));
|
|
110
|
+
const huge = 'x'.repeat(AI_PAGE_TEXT_MAX * 3);
|
|
111
|
+
const input = [
|
|
112
|
+
{ title: 'T', pageText: huge },
|
|
113
|
+
{ title: 'S', pageText: 'short body' }, // under the cap → untouched
|
|
114
|
+
];
|
|
115
|
+
await requestAiFixes({ projectId: 'p', anchors: [], descriptions: input });
|
|
116
|
+
const body = apiCall.mock.calls[0][1].body;
|
|
117
|
+
expect(body.descriptions[0].pageText).toHaveLength(AI_PAGE_TEXT_MAX);
|
|
118
|
+
expect(body.descriptions[0].title).toBe('T');
|
|
119
|
+
expect(body.descriptions[1].pageText).toBe('short body'); // no over-truncation
|
|
120
|
+
// The caller's array must not be mutated — fix.ts re-reads it by index.
|
|
121
|
+
expect(input[0].pageText).toHaveLength(AI_PAGE_TEXT_MAX * 3);
|
|
122
|
+
});
|
|
108
123
|
});
|
|
109
124
|
//# sourceMappingURL=ai-fix-client.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-fix-client.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/ai-fix-client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACxB,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-fix-client.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/ai-fix-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-proxy-safety.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/deploy-proxy-safety.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { confirm } from '@inquirer/prompts';
|
|
6
|
+
import { confirmOutputDir, detectCloudflareApiTokenSource, } from '../../commands/deploy/cloudflare.js';
|
|
7
|
+
vi.mock('@inquirer/prompts', () => ({
|
|
8
|
+
input: vi.fn(),
|
|
9
|
+
confirm: vi.fn(),
|
|
10
|
+
select: vi.fn(),
|
|
11
|
+
}));
|
|
12
|
+
const mockConfirm = vi.mocked(confirm);
|
|
13
|
+
let dir;
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
vi.resetAllMocks();
|
|
16
|
+
dir = fs.mkdtempSync(path.join(os.tmpdir(), 'jd-proxy-'));
|
|
17
|
+
});
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
20
|
+
});
|
|
21
|
+
describe('confirmOutputDir', () => {
|
|
22
|
+
it('proceeds without prompting when the directory does not exist', async () => {
|
|
23
|
+
const target = path.join(dir, 'cloudflare-worker');
|
|
24
|
+
await expect(confirmOutputDir(target, {})).resolves.toBe(true);
|
|
25
|
+
expect(mockConfirm).not.toHaveBeenCalled();
|
|
26
|
+
});
|
|
27
|
+
// The regression that overwrote a customized worker: --yes was treated as
|
|
28
|
+
// permission to destroy the existing directory. It answers prompts only.
|
|
29
|
+
it('refuses to overwrite an existing directory under --yes', async () => {
|
|
30
|
+
const target = path.join(dir, 'cloudflare-worker');
|
|
31
|
+
fs.mkdirSync(target);
|
|
32
|
+
fs.writeFileSync(path.join(target, 'index.js'), '// hand-customized');
|
|
33
|
+
await expect(confirmOutputDir(target, { yes: true })).rejects.toThrow(/already exists/);
|
|
34
|
+
expect(mockConfirm).not.toHaveBeenCalled();
|
|
35
|
+
expect(fs.readFileSync(path.join(target, 'index.js'), 'utf-8')).toContain('hand-customized');
|
|
36
|
+
});
|
|
37
|
+
it('names the escape hatches when it refuses', async () => {
|
|
38
|
+
const target = path.join(dir, 'cloudflare-worker');
|
|
39
|
+
fs.mkdirSync(target);
|
|
40
|
+
await expect(confirmOutputDir(target, { yes: true })).rejects.toMatchObject({
|
|
41
|
+
code: 'OUTPUT_DIR_EXISTS',
|
|
42
|
+
hint: expect.stringContaining('--force'),
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
it('overwrites an existing directory with --force, no prompt', async () => {
|
|
46
|
+
const target = path.join(dir, 'cloudflare-worker');
|
|
47
|
+
fs.mkdirSync(target);
|
|
48
|
+
await expect(confirmOutputDir(target, { force: true })).resolves.toBe(true);
|
|
49
|
+
expect(mockConfirm).not.toHaveBeenCalled();
|
|
50
|
+
});
|
|
51
|
+
it('--force still wins when combined with --yes', async () => {
|
|
52
|
+
const target = path.join(dir, 'cloudflare-worker');
|
|
53
|
+
fs.mkdirSync(target);
|
|
54
|
+
await expect(confirmOutputDir(target, { force: true, yes: true })).resolves.toBe(true);
|
|
55
|
+
});
|
|
56
|
+
it('asks before overwriting in an interactive run', async () => {
|
|
57
|
+
const target = path.join(dir, 'cloudflare-worker');
|
|
58
|
+
fs.mkdirSync(target);
|
|
59
|
+
mockConfirm.mockResolvedValueOnce(true);
|
|
60
|
+
await expect(confirmOutputDir(target, {})).resolves.toBe(true);
|
|
61
|
+
expect(mockConfirm).toHaveBeenCalledTimes(1);
|
|
62
|
+
// Declining must not be the easy-to-miss default.
|
|
63
|
+
expect(mockConfirm.mock.calls[0][0]).toMatchObject({ default: false });
|
|
64
|
+
});
|
|
65
|
+
it('aborts when the user declines the overwrite prompt', async () => {
|
|
66
|
+
const target = path.join(dir, 'cloudflare-worker');
|
|
67
|
+
fs.mkdirSync(target);
|
|
68
|
+
mockConfirm.mockResolvedValueOnce(false);
|
|
69
|
+
await expect(confirmOutputDir(target, {})).resolves.toBe(false);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('detectCloudflareApiTokenSource', () => {
|
|
73
|
+
const origToken = process.env.CLOUDFLARE_API_TOKEN;
|
|
74
|
+
afterEach(() => {
|
|
75
|
+
if (origToken === undefined)
|
|
76
|
+
delete process.env.CLOUDFLARE_API_TOKEN;
|
|
77
|
+
else
|
|
78
|
+
process.env.CLOUDFLARE_API_TOKEN = origToken;
|
|
79
|
+
});
|
|
80
|
+
it('returns null when no token is anywhere in sight', () => {
|
|
81
|
+
delete process.env.CLOUDFLARE_API_TOKEN;
|
|
82
|
+
expect(detectCloudflareApiTokenSource(dir)).toBeNull();
|
|
83
|
+
});
|
|
84
|
+
it('reports an exported environment variable', () => {
|
|
85
|
+
process.env.CLOUDFLARE_API_TOKEN = 'cf-token';
|
|
86
|
+
expect(detectCloudflareApiTokenSource(dir)).toContain('environment');
|
|
87
|
+
});
|
|
88
|
+
// The case that produced the original "Unset the CLOUDFLARE_API_TOKEN"
|
|
89
|
+
// failure: the token is invisible to this process but wrangler loads .env
|
|
90
|
+
// from the working directory and authenticates with it anyway.
|
|
91
|
+
it('reports a .env in the working directory', () => {
|
|
92
|
+
delete process.env.CLOUDFLARE_API_TOKEN;
|
|
93
|
+
fs.writeFileSync(path.join(dir, '.env'), 'CLOUDFLARE_ACCOUNT_ID=abc\nCLOUDFLARE_API_TOKEN=secret\n');
|
|
94
|
+
expect(detectCloudflareApiTokenSource(dir)).toContain('.env');
|
|
95
|
+
});
|
|
96
|
+
it('recognizes an export-prefixed assignment', () => {
|
|
97
|
+
delete process.env.CLOUDFLARE_API_TOKEN;
|
|
98
|
+
fs.writeFileSync(path.join(dir, '.env'), 'export CLOUDFLARE_API_TOKEN=x\n');
|
|
99
|
+
expect(detectCloudflareApiTokenSource(dir)).toContain('.env');
|
|
100
|
+
});
|
|
101
|
+
it('ignores a merely similar variable name', () => {
|
|
102
|
+
delete process.env.CLOUDFLARE_API_TOKEN;
|
|
103
|
+
fs.writeFileSync(path.join(dir, '.env'), 'CLOUDFLARE_API_TOKEN_BACKUP=x\nMY_CLOUDFLARE_API_TOKEN=y\n');
|
|
104
|
+
expect(detectCloudflareApiTokenSource(dir)).toBeNull();
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=deploy-proxy-safety.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-proxy-safety.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/deploy-proxy-safety.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import {
|
|
2
|
+
import { writeFileSync, rmSync, mkdtempSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join, dirname } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { execFileSync } from 'node:child_process';
|
|
7
|
+
import { KEEP_ORIGIN_RESPONSE_JS, shouldFallBackToJamdesk, generateWorkerCode, generateWranglerConfig, generatePackageJson, generateGitignore, extractRootDomain, } from '../../commands/deploy/templates.js';
|
|
3
8
|
const testConfig = {
|
|
4
9
|
slug: 'acme',
|
|
5
10
|
domain: 'example.com',
|
|
@@ -58,20 +63,117 @@ describe('generateWorkerCode', () => {
|
|
|
58
63
|
expect(code).toContain('"400-499": 0');
|
|
59
64
|
expect(code).toContain('"500-599": 0');
|
|
60
65
|
});
|
|
61
|
-
it('tries the origin first for /_next/
|
|
66
|
+
it('tries the origin first for /_next/ but falls back on 404 or any origin error', () => {
|
|
62
67
|
const code = generateWorkerCode(testConfig);
|
|
63
68
|
// The customer's root site may itself be a Next.js app serving /_next/ assets
|
|
64
69
|
// (e.g. mailfully.com). Blanket-proxying /_next/ to Jamdesk breaks that site's
|
|
65
70
|
// CSS/JS, so /_next/ must NOT be in the unconditional proxy list.
|
|
66
71
|
expect(code).not.toContain('"/_next/",');
|
|
67
72
|
expect(code).toContain('pathname.startsWith("/_next/")');
|
|
68
|
-
|
|
73
|
+
// Both halves of the fallback: origin lacks it, or origin can't answer.
|
|
74
|
+
// The old assertion was just `!== 404`, which is a PREFIX of this — it kept
|
|
75
|
+
// passing after the fix, so it never would have gone red.
|
|
76
|
+
expect(code).toContain('originResponse.status !== 404 && originResponse.status < 500');
|
|
77
|
+
// A throwing fetch (origin unreachable) must fall back rather than 500...
|
|
78
|
+
expect(code).toContain('} catch (err) {');
|
|
79
|
+
// ...but not silently: without a log, a real platform incident and a
|
|
80
|
+
// docs-only domain look identical in `wrangler tail`.
|
|
81
|
+
expect(code).toContain('console.warn');
|
|
82
|
+
});
|
|
83
|
+
it('always proxies over https, with no port carried over', () => {
|
|
84
|
+
const code = generateWorkerCode(testConfig);
|
|
85
|
+
// The worker rewrites only the hostname; without also pinning the scheme a
|
|
86
|
+
// plain-http request is proxied to http://<slug>.jamdesk.app, and Vercel's
|
|
87
|
+
// edge answers with a 308 to its OWN https URL. redirect:"manual" hands
|
|
88
|
+
// that back to the browser, so the visitor lands off the customer domain.
|
|
89
|
+
expect(code).toContain('proxyUrl.protocol = "https:"');
|
|
90
|
+
// Setting .protocol does NOT clear a non-default .port, so
|
|
91
|
+
// http://host:8787 would become https://<slug>.jamdesk.app:8787 — breaking
|
|
92
|
+
// `wrangler dev` and Cloudflare's alternate HTTP ports (8080, 8880, 2052…).
|
|
93
|
+
expect(code).toContain('proxyUrl.port = ""');
|
|
69
94
|
});
|
|
70
95
|
it('passes redirects through to browser', () => {
|
|
71
96
|
const code = generateWorkerCode(testConfig);
|
|
72
97
|
expect(code).toContain('redirect: "manual"');
|
|
73
98
|
});
|
|
74
99
|
});
|
|
100
|
+
describe('the generated worker is valid JavaScript', () => {
|
|
101
|
+
// Every other assertion here is a substring match, which cannot tell a
|
|
102
|
+
// working worker from one with an unbalanced brace. The worker is ESM
|
|
103
|
+
// (`export default`), so parse it as a module.
|
|
104
|
+
it.each(['/docs', '/fun', '/help'])('parses as an ES module for %s', (prefix) => {
|
|
105
|
+
const code = generateWorkerCode({ ...testConfig, pathPrefix: prefix });
|
|
106
|
+
// mkdtemp, not a fixed name in tmpdir: two concurrent runs of this suite
|
|
107
|
+
// would otherwise race on the same path.
|
|
108
|
+
const dir = mkdtempSync(join(tmpdir(), 'jd-worker-'));
|
|
109
|
+
const file = join(dir, 'worker.mjs');
|
|
110
|
+
writeFileSync(file, code);
|
|
111
|
+
try {
|
|
112
|
+
expect(() => execFileSync(process.execPath, ['--check', file])).not.toThrow();
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
rmSync(dir, { recursive: true, force: true });
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe('the synced copy matches shared/', () => {
|
|
120
|
+
it('is byte-identical to the canonical source under the sync header', () => {
|
|
121
|
+
// Nothing else in either test suite imports shared/ — both sides import
|
|
122
|
+
// their own synced copy. Without this, editing shared/ and forgetting
|
|
123
|
+
// ./scripts/sync-shared.sh leaves every suite green, and the pre-commit
|
|
124
|
+
// drift check is bypassable with --no-verify.
|
|
125
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
126
|
+
const root = join(here, '..', '..', '..', '..', '..');
|
|
127
|
+
const canonical = readFileSync(join(root, 'shared/cloudflare-worker-template.ts'), 'utf8');
|
|
128
|
+
const synced = readFileSync(join(root, 'builder/cli/src/commands/deploy/cloudflare-worker-template.ts'), 'utf8');
|
|
129
|
+
// sync-shared.sh prepends a 2-line DO-NOT-EDIT header.
|
|
130
|
+
expect(synced.split('\n').slice(2).join('\n')).toBe(canonical);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
describe('shouldFallBackToJamdesk', () => {
|
|
134
|
+
it('falls back on 404 — the origin genuinely does not have this asset', () => {
|
|
135
|
+
expect(shouldFallBackToJamdesk(404)).toBe(true);
|
|
136
|
+
});
|
|
137
|
+
it('falls back on every 5xx, including Cloudflare 522/530 placeholder-origin errors', () => {
|
|
138
|
+
// A docs-only domain has no real origin — its DNS record is a placeholder,
|
|
139
|
+
// so Cloudflare returns 522, not 404. Treating that as "the origin owns
|
|
140
|
+
// this asset" is what left gogauss.com unstyled.
|
|
141
|
+
for (const s of [500, 502, 503, 504, 520, 522, 523, 530]) {
|
|
142
|
+
expect(shouldFallBackToJamdesk(s)).toBe(true);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
it('does NOT fall back when the origin actually served the asset', () => {
|
|
146
|
+
// The mailfully.com protection: a customer whose apex is itself a Next.js
|
|
147
|
+
// app must keep serving its own /_next/ chunks. 403 is deliberately here —
|
|
148
|
+
// a 403 from a real origin is an access decision, not an outage.
|
|
149
|
+
for (const s of [200, 204, 301, 302, 304, 403]) {
|
|
150
|
+
expect(shouldFallBackToJamdesk(s)).toBe(false);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
it('falls back when the status is missing or not a real number', () => {
|
|
154
|
+
expect(shouldFallBackToJamdesk(undefined)).toBe(true);
|
|
155
|
+
// typeof NaN === 'number', so a naive typeof guard returns false here.
|
|
156
|
+
expect(shouldFallBackToJamdesk(NaN)).toBe(true);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('the emitted worker condition matches the predicate', () => {
|
|
160
|
+
// The worker embeds a string, so a toContain() assertion can drift from the
|
|
161
|
+
// predicate silently. Evaluate the emitted expression instead.
|
|
162
|
+
//
|
|
163
|
+
// new Function() here is deliberate and safe: the interpolated value is
|
|
164
|
+
// KEEP_ORIGIN_RESPONSE_JS, a string literal in our own source, in a test that
|
|
165
|
+
// never runs in production. Evaluating it is the entire point — it's what
|
|
166
|
+
// makes this a real behavioral check rather than another substring match.
|
|
167
|
+
const keepOrigin = new Function('originResponse', `return ${KEEP_ORIGIN_RESPONSE_JS};`);
|
|
168
|
+
it('agrees with shouldFallBackToJamdesk across the status space', () => {
|
|
169
|
+
for (const s of [200, 204, 301, 302, 304, 403, 404, 500, 502, 504, 522, 530]) {
|
|
170
|
+
expect(keepOrigin({ status: s })).toBe(!shouldFallBackToJamdesk(s));
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
it('is the condition the generated worker actually contains', () => {
|
|
174
|
+
expect(generateWorkerCode(testConfig)).toContain(KEEP_ORIGIN_RESPONSE_JS);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
75
177
|
describe('generateWranglerConfig', () => {
|
|
76
178
|
it('generates valid TOML with catch-all route', () => {
|
|
77
179
|
const config = generateWranglerConfig(testConfig);
|
|
@@ -82,6 +184,26 @@ describe('generateWranglerConfig', () => {
|
|
|
82
184
|
const config = generateWranglerConfig(testConfig);
|
|
83
185
|
expect(config).toContain('name = "docs-proxy-example-com"');
|
|
84
186
|
});
|
|
187
|
+
// The *.workers.dev URL is a second, unauthenticated route into the same
|
|
188
|
+
// proxy. Cloudflare Security Insights flagged ours; customers inherit the
|
|
189
|
+
// same exposure unless the generated config closes it.
|
|
190
|
+
it('disables the public workers.dev URL', () => {
|
|
191
|
+
const config = generateWranglerConfig(testConfig);
|
|
192
|
+
expect(config).toContain('workers_dev = false');
|
|
193
|
+
});
|
|
194
|
+
it('pins the account when one was detected', () => {
|
|
195
|
+
const config = generateWranglerConfig({
|
|
196
|
+
...testConfig,
|
|
197
|
+
accountId: '7c6ad73529220c475bfde8af79ac4659',
|
|
198
|
+
});
|
|
199
|
+
expect(config).toContain('account_id = "7c6ad73529220c475bfde8af79ac4659"');
|
|
200
|
+
});
|
|
201
|
+
// Wrangler resolves the account itself when the login owns exactly one;
|
|
202
|
+
// emitting an empty account_id would break that.
|
|
203
|
+
it('omits account_id entirely when no account was detected', () => {
|
|
204
|
+
const config = generateWranglerConfig(testConfig);
|
|
205
|
+
expect(config).not.toContain('account_id');
|
|
206
|
+
});
|
|
85
207
|
it('uses catch-all host routes, not per-asset routes', () => {
|
|
86
208
|
const config = generateWranglerConfig(testConfig);
|
|
87
209
|
expect(config).toContain('pattern = "example.com/*"');
|
|
@@ -145,6 +267,10 @@ describe('generatePackageJson', () => {
|
|
|
145
267
|
expect(parsed.name).toBe('docs-proxy-example-com');
|
|
146
268
|
expect(parsed.scripts.deploy).toBe('wrangler deploy');
|
|
147
269
|
});
|
|
270
|
+
it('scaffolds a currently-supported wrangler major', () => {
|
|
271
|
+
const parsed = JSON.parse(generatePackageJson(testConfig));
|
|
272
|
+
expect(parsed.devDependencies.wrangler).toBe('^4.0.0');
|
|
273
|
+
});
|
|
148
274
|
});
|
|
149
275
|
describe('extractRootDomain', () => {
|
|
150
276
|
it('returns domain unchanged if already root', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-templates.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/deploy-templates.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deploy-templates.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/deploy-templates.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-worker-template.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy/cloudflare-worker-template.ts"],"names":[],"mappings":"AAsDA,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,MAAM,CA4GR"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
// DO NOT EDIT — this file is auto-synced from shared/. Edit the source in shared/ and run ./scripts/sync-shared.sh
|
|
2
|
+
/**
|
|
3
|
+
* Cloudflare proxy Worker source.
|
|
4
|
+
*
|
|
5
|
+
* Canonical copy. Synced by ./scripts/sync-shared.sh to:
|
|
6
|
+
* - builder/cli/src/commands/deploy/ (the `jamdesk deploy-proxy cloudflare` output)
|
|
7
|
+
* - dashboard/hosting/app/lib/ (the Custom Domain card's copy-paste snippet)
|
|
8
|
+
*
|
|
9
|
+
* These two used to be independent template strings and drifted badly: the CLI's
|
|
10
|
+
* origin-first /_next/ check returned Cloudflare's 522 to docs-only domains
|
|
11
|
+
* (unstyled docs), while the dashboard's blanket /_next/ proxy hijacked the
|
|
12
|
+
* chunks of customers whose own apex is a Next.js app. One source now, with the
|
|
13
|
+
* pre-commit drift check as the guard.
|
|
14
|
+
*
|
|
15
|
+
* No imports, deliberately: this file is compiled by the CLI under NodeNext
|
|
16
|
+
* (which wants .js extensions on relative imports) and by hosting under
|
|
17
|
+
* bundler resolution (which doesn't). Adding an import would break one of them.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Both inputs go straight into generated JavaScript string literals, so a
|
|
21
|
+
* quote, backtick, or ${ would break out of them. The callable boundary already
|
|
22
|
+
* validates the prefix (shared/docs-subpath.ts), but this module is exported on
|
|
23
|
+
* its own, so it re-checks rather than trusting its caller.
|
|
24
|
+
*/
|
|
25
|
+
function assertSafeDocsPrefix(docsPrefix) {
|
|
26
|
+
// No underscore, deliberately. Its absence is what stops a tenant prefix from
|
|
27
|
+
// colliding with the /_next/ and /_jd/ branches of shouldProxy below — a
|
|
28
|
+
// "/_next" prefix would land back in PROXY_PATHS and blanket-proxy the very
|
|
29
|
+
// asset path this template goes out of its way to check origin-first.
|
|
30
|
+
if (!/^\/[A-Za-z0-9.-]+$/.test(docsPrefix)) {
|
|
31
|
+
throw new Error(`Unsafe docs prefix for worker generation: ${JSON.stringify(docsPrefix)}. ` +
|
|
32
|
+
'Expected a single slash-prefixed segment, e.g. "/docs".');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Square brackets are deliberately allowed: the dashboard renders this snippet
|
|
37
|
+
* before a repo is connected and passes the literal "[your-subdomain]" as the
|
|
38
|
+
* slug, so a strict DNS-label check here would blank the card in exactly the
|
|
39
|
+
* case the placeholder exists for.
|
|
40
|
+
*/
|
|
41
|
+
function assertSafeSlug(slug) {
|
|
42
|
+
if (!/^[A-Za-z0-9._[\]-]+$/.test(slug)) {
|
|
43
|
+
throw new Error(`Unsafe slug for worker generation: ${JSON.stringify(slug)}. ` +
|
|
44
|
+
'Expected a hostname label, e.g. "acme".');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function buildCloudflareWorkerSource(slug, docsPrefix) {
|
|
48
|
+
assertSafeSlug(slug);
|
|
49
|
+
assertSafeDocsPrefix(docsPrefix);
|
|
50
|
+
const jamdeskHost = `${slug}.jamdesk.app`;
|
|
51
|
+
return `/**
|
|
52
|
+
* Jamdesk Documentation Proxy Worker
|
|
53
|
+
*
|
|
54
|
+
* Generated by: jamdesk deploy-proxy cloudflare
|
|
55
|
+
* Proxies ${docsPrefix}/* requests AND their assets to ${jamdeskHost}
|
|
56
|
+
*
|
|
57
|
+
* Assets under /_jd/* (images, fonts, branding, analytics) must also be proxied
|
|
58
|
+
* since they use absolute paths in the HTML.
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
const JAMDESK_HOST = "${jamdeskHost}";
|
|
62
|
+
|
|
63
|
+
// Paths that are always proxied to Jamdesk
|
|
64
|
+
const PROXY_PATHS = [
|
|
65
|
+
"${docsPrefix}", // Documentation pages
|
|
66
|
+
"/_jd/", // All Jamdesk assets (images, fonts, branding, analytics)
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
function shouldProxy(pathname) {
|
|
70
|
+
return PROXY_PATHS.some(prefix => {
|
|
71
|
+
// For the docs path, require exact match or prefix with slash (not /docs.json)
|
|
72
|
+
if (prefix === "${docsPrefix}") {
|
|
73
|
+
return pathname === "${docsPrefix}" || pathname.startsWith("${docsPrefix}/");
|
|
74
|
+
}
|
|
75
|
+
return pathname.startsWith(prefix);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function proxyToJamdesk(request, url) {
|
|
80
|
+
// Rewrite the request to Jamdesk
|
|
81
|
+
const proxyUrl = new URL(request.url);
|
|
82
|
+
proxyUrl.hostname = JAMDESK_HOST;
|
|
83
|
+
// Pin the scheme: an http:// visitor proxied as http:// gets a 308 from
|
|
84
|
+
// Vercel's edge pointing at JAMDESK_HOST, and redirect:"manual" hands that
|
|
85
|
+
// redirect straight to the browser — bouncing the visitor off this domain.
|
|
86
|
+
proxyUrl.protocol = "https:";
|
|
87
|
+
// Setting .protocol leaves a non-default .port in place, so :8787 (wrangler
|
|
88
|
+
// dev) or Cloudflare's alternate http ports (8080, 8880, 2052…) would follow
|
|
89
|
+
// us to the https upstream and fail there.
|
|
90
|
+
proxyUrl.port = "";
|
|
91
|
+
|
|
92
|
+
// Clone headers and add proxy headers
|
|
93
|
+
const headers = new Headers(request.headers);
|
|
94
|
+
headers.set("Host", JAMDESK_HOST);
|
|
95
|
+
headers.set("X-Forwarded-Host", url.hostname);
|
|
96
|
+
headers.set("X-Forwarded-Proto", "https");
|
|
97
|
+
// Custom header for domain verification (Vercel strips standard forwarding headers)
|
|
98
|
+
headers.set("X-Jamdesk-Forwarded-Host", url.hostname);
|
|
99
|
+
|
|
100
|
+
// Don't follow redirects — let the browser handle them so the URL updates.
|
|
101
|
+
// Without this, redirects happen internally and the browser URL doesn't change,
|
|
102
|
+
// which causes the sidebar to mis-highlight the active page.
|
|
103
|
+
const proxyRequest = new Request(proxyUrl, {
|
|
104
|
+
method: request.method,
|
|
105
|
+
headers,
|
|
106
|
+
body: request.body,
|
|
107
|
+
redirect: "manual",
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// Cache all content types at Cloudflare edge (CF doesn't cache HTML by default).
|
|
111
|
+
// Cache duration is controlled by upstream Cache-Control headers.
|
|
112
|
+
// Never cache redirects or errors — they must always hit origin.
|
|
113
|
+
return fetch(proxyRequest, {
|
|
114
|
+
cf: {
|
|
115
|
+
cacheEverything: true,
|
|
116
|
+
cacheTtlByStatus: { "300-399": 0, "400-499": 0, "500-599": 0 },
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export default {
|
|
122
|
+
async fetch(request) {
|
|
123
|
+
const url = new URL(request.url);
|
|
124
|
+
|
|
125
|
+
if (shouldProxy(url.pathname)) {
|
|
126
|
+
return proxyToJamdesk(request, url);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// /_next/ is ambiguous: the customer's root site may itself be a Next.js app
|
|
130
|
+
// serving its own /_next/ assets. Try the origin first and fall back to
|
|
131
|
+
// Jamdesk when the origin doesn't have it (404) or can't answer at all
|
|
132
|
+
// (5xx — a docs-only domain has no real origin, so Cloudflare returns 522).
|
|
133
|
+
// Hashed asset filenames never collide between the two apps.
|
|
134
|
+
if (url.pathname.startsWith("/_next/")) {
|
|
135
|
+
let originResponse;
|
|
136
|
+
try {
|
|
137
|
+
originResponse = await fetch(request);
|
|
138
|
+
} catch (err) {
|
|
139
|
+
// Log rather than swallow: a genuine platform fault and a domain with
|
|
140
|
+
// no origin at all are indistinguishable in \`wrangler tail\` otherwise.
|
|
141
|
+
console.warn("origin fetch threw, serving from Jamdesk:", err);
|
|
142
|
+
return proxyToJamdesk(request, url);
|
|
143
|
+
}
|
|
144
|
+
if (originResponse.status !== 404 && originResponse.status < 500) {
|
|
145
|
+
return originResponse;
|
|
146
|
+
}
|
|
147
|
+
return proxyToJamdesk(request, url);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return fetch(request);
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
`;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=cloudflare-worker-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-worker-template.js","sourceRoot":"","sources":["../../../src/commands/deploy/cloudflare-worker-template.ts"],"names":[],"mappings":"AAAA,mHAAmH;AAEnH;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,8EAA8E;IAC9E,yEAAyE;IACzE,4EAA4E;IAC5E,sEAAsE;IACtE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI;YACzE,yDAAyD,CAC5D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,sCAAsC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;YAC5D,yCAAyC,CAC5C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,IAAY,EACZ,UAAkB;IAElB,cAAc,CAAC,IAAI,CAAC,CAAC;IACrB,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,GAAG,IAAI,cAAc,CAAC;IAE1C,OAAO;;;;aAII,UAAU,mCAAmC,WAAW;;;;;;wBAM7C,WAAW;;;;KAI9B,UAAU;;;;;;;sBAOO,UAAU;6BACH,UAAU,6BAA6B,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgF7E,CAAC;AACF,CAAC"}
|
|
@@ -8,7 +8,29 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { DeployCloudflareOptions } from './types.js';
|
|
10
10
|
export declare function deployCloudflare(options: DeployCloudflareOptions): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Decide whether we may write into `outputDir`, returning false to abort.
|
|
13
|
+
*
|
|
14
|
+
* Overwriting takes `--force` and nothing else. `--yes` used to imply it, which
|
|
15
|
+
* meant the documented CI one-liner silently replaced whatever already lived in
|
|
16
|
+
* the default `cloudflare-worker/` — including a hand-customized worker. `--yes`
|
|
17
|
+
* answers prompts; it does not grant permission to destroy files, so a
|
|
18
|
+
* non-interactive run against an existing directory now stops and says so.
|
|
19
|
+
*/
|
|
20
|
+
export declare function confirmOutputDir(outputDir: string, options: Pick<DeployCloudflareOptions, 'force' | 'yes'>): Promise<boolean>;
|
|
11
21
|
export declare function checkWranglerInstalled(): string;
|
|
22
|
+
/**
|
|
23
|
+
* Report where an API token is coming from, or null if there isn't one.
|
|
24
|
+
*
|
|
25
|
+
* Wrangler prefers CLOUDFLARE_API_TOKEN over its OAuth login, and it loads
|
|
26
|
+
* `.env` from the working directory — so the token can be authenticating
|
|
27
|
+
* wrangler while never appearing in this process's own environment. When such a
|
|
28
|
+
* token lacks account:read, `wrangler whoami` prints an error instead of a
|
|
29
|
+
* "logged in" line, we conclude nobody is logged in, and `wrangler login` then
|
|
30
|
+
* refuses to run OAuth *because* a token is set. Name the source instead of
|
|
31
|
+
* shelling into that dead end.
|
|
32
|
+
*/
|
|
33
|
+
export declare function detectCloudflareApiTokenSource(cwd?: string): string | null;
|
|
12
34
|
interface ResolvedSlug {
|
|
13
35
|
slug: string;
|
|
14
36
|
name?: string;
|