wrangler 0.0.0-e98613f8 → 0.0.0-e9a45766c
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 +10 -4
- package/bin/wrangler.js +10 -2
- package/miniflare-dist/index.mjs +257 -132
- package/package.json +26 -19
- package/src/__tests__/api-dev.test.ts +65 -36
- package/src/__tests__/api-devregistry.test.ts +121 -0
- package/src/__tests__/api.test.ts +27 -5
- package/src/__tests__/configuration.test.ts +575 -39
- package/src/__tests__/constellation.test.ts +371 -0
- package/src/__tests__/d1/d1.test.ts +82 -0
- package/src/__tests__/d1/execute.test.ts +66 -0
- package/src/__tests__/d1/migrate.test.ts +257 -0
- package/src/__tests__/d1/splitter.test.ts +255 -0
- package/src/__tests__/delete.test.ts +11 -2
- package/src/__tests__/deployments.test.ts +330 -52
- package/src/__tests__/dev.test.tsx +146 -82
- package/src/__tests__/generate.test.ts +10 -8
- package/src/__tests__/guess-worker-format.test.ts +35 -0
- package/src/__tests__/helpers/end-event-loop.ts +6 -0
- package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
- package/src/__tests__/helpers/mock-console.ts +6 -0
- package/src/__tests__/helpers/mock-dialogs.ts +71 -85
- package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
- package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -5
- package/src/__tests__/helpers/mock-known-routes.ts +7 -2
- package/src/__tests__/helpers/mock-kv.ts +29 -16
- package/src/__tests__/helpers/mock-oauth-flow.ts +99 -92
- package/src/__tests__/helpers/mock-process.ts +8 -13
- package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
- package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
- package/src/__tests__/helpers/msw/handlers/deployments.ts +127 -26
- package/src/__tests__/helpers/msw/handlers/namespaces.ts +18 -41
- package/src/__tests__/helpers/msw/handlers/r2.ts +14 -34
- package/src/__tests__/helpers/msw/handlers/script.ts +9 -28
- package/src/__tests__/helpers/msw/handlers/user.ts +13 -24
- package/src/__tests__/helpers/msw/handlers/zones.ts +6 -8
- package/src/__tests__/helpers/msw/index.ts +32 -1
- package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
- package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
- package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
- package/src/__tests__/index.test.ts +92 -74
- package/src/__tests__/init.test.ts +909 -628
- package/src/__tests__/jest.setup.ts +19 -42
- package/src/__tests__/kv.test.ts +355 -231
- package/src/__tests__/logger.test.ts +68 -2
- package/src/__tests__/logout.test.ts +1 -1
- package/src/__tests__/metrics.test.ts +93 -50
- package/src/__tests__/middleware.scheduled.test.ts +42 -32
- package/src/__tests__/middleware.test.ts +212 -122
- package/src/__tests__/mtls-certificates.test.ts +589 -0
- package/src/__tests__/pages/deployment-list.test.ts +80 -0
- package/src/__tests__/pages/functions-build.test.ts +528 -0
- package/src/__tests__/pages/pages.test.ts +81 -0
- package/src/__tests__/pages/project-create.test.ts +63 -0
- package/src/__tests__/pages/project-list.test.ts +110 -0
- package/src/__tests__/pages/project-upload.test.ts +500 -0
- package/src/__tests__/pages/publish.test.ts +2864 -0
- package/src/__tests__/pages-deployment-tail.test.ts +239 -102
- package/src/__tests__/parse.test.ts +106 -0
- package/src/__tests__/publish.test.ts +2218 -1002
- package/src/__tests__/pubsub.test.ts +226 -100
- package/src/__tests__/queues.test.ts +42 -32
- package/src/__tests__/r2.test.ts +37 -56
- package/src/__tests__/secret.test.ts +179 -130
- package/src/__tests__/tail.test.ts +113 -23
- package/src/__tests__/test-old-node-version.js +3 -3
- package/src/__tests__/traverse-module-graph.test.ts +220 -0
- package/src/__tests__/tsconfig-sanity.ts +12 -0
- package/src/__tests__/tsconfig.json +8 -0
- package/src/__tests__/tsconfig.tsbuildinfo +1 -0
- package/src/__tests__/type-generation.test.ts +8 -0
- package/src/__tests__/user.test.ts +7 -18
- package/src/__tests__/whoami.test.tsx +8 -114
- package/src/__tests__/worker-namespace.test.ts +83 -69
- package/src/api/dev.ts +172 -61
- package/src/api/index.ts +10 -1
- package/src/api/mtls-certificate.ts +148 -0
- package/src/api/pages/create-worker-bundle-contents.ts +77 -0
- package/src/api/pages/index.ts +5 -0
- package/src/api/pages/publish.tsx +371 -0
- package/src/bundle.ts +139 -33
- package/src/cfetch/index.ts +0 -2
- package/src/cfetch/internal.ts +16 -21
- package/src/cli.ts +4 -4
- package/src/config/config.ts +14 -7
- package/src/config/environment.ts +80 -16
- package/src/config/index.ts +99 -30
- package/src/config/validation-helpers.ts +1 -1
- package/src/config/validation.ts +275 -9
- package/src/constellation/createProject.tsx +51 -0
- package/src/constellation/deleteProject.ts +51 -0
- package/src/constellation/deleteProjectModel.ts +68 -0
- package/src/constellation/index.ts +75 -0
- package/src/constellation/listCatalog.tsx +35 -0
- package/src/constellation/listModel.tsx +41 -0
- package/src/constellation/listProject.tsx +28 -0
- package/src/constellation/listRuntime.tsx +28 -0
- package/src/constellation/options.ts +17 -0
- package/src/constellation/types.ts +17 -0
- package/src/constellation/uploadModel.tsx +64 -0
- package/src/constellation/utils.ts +90 -0
- package/src/create-worker-preview.ts +19 -8
- package/src/create-worker-upload-form.ts +52 -5
- package/src/d1/backups.tsx +40 -44
- package/src/d1/create.tsx +50 -43
- package/src/d1/{delete.tsx → delete.ts} +8 -11
- package/src/d1/execute.tsx +171 -166
- package/src/d1/index.ts +5 -6
- package/src/d1/list.tsx +27 -13
- package/src/d1/migrations/apply.tsx +92 -64
- package/src/d1/migrations/create.tsx +31 -29
- package/src/d1/migrations/helpers.ts +66 -44
- package/src/d1/migrations/list.tsx +47 -31
- package/src/d1/migrations/options.ts +7 -2
- package/src/d1/options.ts +3 -3
- package/src/d1/splitter.ts +161 -0
- package/src/d1/{types.tsx → types.ts} +1 -0
- package/src/d1/utils.ts +2 -1
- package/src/delete.ts +8 -16
- package/src/deployments.ts +333 -42
- package/src/deprecated/index.ts +8 -302
- package/src/dev/dev.tsx +13 -22
- package/src/dev/local.tsx +131 -69
- package/src/dev/remote.tsx +35 -3
- package/src/dev/start-server.ts +83 -77
- package/src/dev/use-esbuild.ts +63 -52
- package/src/dev/validate-dev-props.ts +9 -0
- package/src/{dev-registry.tsx → dev-registry.ts} +9 -8
- package/src/dev.tsx +131 -110
- package/src/dialogs.ts +136 -0
- package/src/dispatch-namespace.ts +21 -17
- package/src/docs/helpers.ts +50 -0
- package/src/docs/index.ts +54 -0
- package/src/entry.ts +26 -11
- package/src/environment-variables/factory.ts +89 -0
- package/src/environment-variables/misc-variables.ts +30 -0
- package/src/generate/index.ts +298 -0
- package/src/{index.tsx → index.ts} +137 -56
- package/src/init.ts +254 -187
- package/src/inspect.ts +170 -9
- package/src/jest.d.ts +4 -0
- package/src/kv/helpers.ts +7 -4
- package/src/kv/index.ts +15 -17
- package/src/logger.ts +36 -5
- package/src/metrics/metrics-config.ts +1 -1
- package/src/metrics/send-event.ts +4 -1
- package/src/miniflare-cli/assets.ts +66 -31
- package/src/miniflare-cli/index.ts +5 -8
- package/src/miniflare-cli/tsconfig.json +9 -0
- package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
- package/src/miniflare-cli/types.ts +11 -0
- package/src/module-collection.ts +92 -26
- package/src/mtls-certificate/cli.ts +155 -0
- package/src/pages/build.ts +423 -0
- package/src/pages/buildFunctions.ts +140 -0
- package/src/pages/{deployment-tails.tsx → deployment-tails.ts} +7 -10
- package/src/pages/deployments.tsx +9 -9
- package/src/pages/{dev.tsx → dev.ts} +167 -139
- package/src/pages/errors.ts +1 -0
- package/src/pages/functions/buildPlugin.ts +61 -54
- package/src/pages/functions/buildWorker.ts +217 -33
- package/src/pages/functions/tsconfig.json +8 -0
- package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
- package/src/pages/{functions.tsx → functions.ts} +8 -4
- package/src/pages/{index.tsx → index.ts} +3 -3
- package/src/pages/projects.tsx +12 -22
- package/src/pages/publish.tsx +43 -227
- package/src/pages/types.ts +5 -0
- package/src/pages/upload.tsx +57 -14
- package/src/pages/utils.ts +1 -1
- package/src/parse.ts +23 -1
- package/src/paths.ts +1 -1
- package/src/publish/index.ts +20 -16
- package/src/publish/publish.ts +76 -46
- package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +19 -20
- package/src/queues/cli/commands/consumer/add.ts +24 -24
- package/src/queues/cli/commands/consumer/index.ts +3 -6
- package/src/queues/cli/commands/consumer/remove.ts +11 -18
- package/src/queues/cli/commands/create.ts +8 -8
- package/src/queues/cli/commands/delete.ts +8 -8
- package/src/queues/cli/commands/index.ts +3 -4
- package/src/queues/cli/commands/list.ts +8 -8
- package/src/queues/client.ts +1 -0
- package/src/r2/helpers.ts +1 -0
- package/src/r2/index.ts +28 -28
- package/src/secret/index.ts +15 -16
- package/src/{sites.tsx → sites.ts} +165 -53
- package/src/tail/createTail.ts +37 -1
- package/src/tail/filters.ts +1 -1
- package/src/tail/index.ts +8 -11
- package/src/tail/printing.ts +25 -0
- package/src/traverse-module-graph.ts +54 -0
- package/src/tsconfig-sanity.ts +16 -0
- package/src/type-generation.ts +11 -3
- package/src/user/access.ts +0 -1
- package/src/user/auth-variables.ts +113 -0
- package/src/user/choose-account.tsx +1 -31
- package/src/user/index.ts +0 -1
- package/src/user/{user.tsx → user.ts} +114 -77
- package/src/utils/render.ts +93 -0
- package/src/{whoami.tsx → whoami.ts} +37 -71
- package/src/worker.ts +35 -1
- package/src/yargs-types.ts +18 -5
- package/templates/__tests__/tsconfig-sanity.ts +12 -0
- package/templates/__tests__/tsconfig.json +8 -0
- package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
- package/templates/checked-fetch.js +9 -3
- package/templates/d1-beta-facade.js +42 -3
- package/templates/facade.d.ts +14 -0
- package/templates/first-party-worker-module-facade.ts +4 -3
- package/templates/format-dev-errors.ts +8 -6
- package/templates/gitignore +1 -0
- package/templates/init-tests/test-jest-new-worker.js +3 -5
- package/templates/init-tests/test-vitest-new-worker.js +3 -5
- package/templates/init-tests/test-vitest-new-worker.ts +25 -0
- package/templates/middleware/loader-modules.ts +2 -2
- package/templates/middleware/loader-sw.ts +6 -0
- package/templates/middleware/middleware-miniflare3-json-error.ts +17 -5
- package/templates/new-worker.ts +3 -0
- package/templates/pages-dev-pipeline.ts +4 -1
- package/templates/pages-shim.ts +4 -1
- package/templates/pages-template-plugin.ts +19 -10
- package/templates/serve-static-assets.ts +17 -14
- package/templates/service-bindings-module-facade.js +1 -0
- package/templates/tsconfig-sanity.ts +11 -0
- package/templates/tsconfig.init.json +105 -0
- package/templates/tsconfig.json +5 -103
- package/templates/tsconfig.tsbuildinfo +1 -0
- package/wrangler-dist/cli.d.ts +871 -73
- package/wrangler-dist/cli.js +80512 -90686
- package/wrangler-dist/wasm-sync.wasm +0 -0
- package/src/__tests__/api-devregistry.test.js +0 -56
- package/src/__tests__/d1.test.ts +0 -80
- package/src/__tests__/dialogs.test.tsx +0 -40
- package/src/__tests__/helpers/mock-cfetch.ts +0 -333
- package/src/__tests__/pages.test.ts +0 -2442
- package/src/dialogs.tsx +0 -168
- package/src/environment-variables.ts +0 -50
- package/src/pages/build.tsx +0 -270
- package/src/user/env-vars.ts +0 -46
- /package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
- /package/src/d1/migrations/{index.tsx → index.ts} +0 -0
- /package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
- /package/src/pages/{hash.tsx → hash.ts} +0 -0
package/src/tail/index.ts
CHANGED
|
@@ -3,7 +3,7 @@ import onExit from "signal-exit";
|
|
|
3
3
|
|
|
4
4
|
import { fetchResult, fetchScriptContent } from "../cfetch";
|
|
5
5
|
import { readConfig } from "../config";
|
|
6
|
-
import {
|
|
6
|
+
import { confirm } from "../dialogs";
|
|
7
7
|
import {
|
|
8
8
|
isLegacyEnv,
|
|
9
9
|
printWranglerBanner,
|
|
@@ -20,16 +20,14 @@ import {
|
|
|
20
20
|
translateCLICommandToFilterMessage,
|
|
21
21
|
} from "./createTail";
|
|
22
22
|
import type { WorkerMetadata } from "../create-worker-upload-form";
|
|
23
|
-
import type { ConfigPath } from "../index";
|
|
24
23
|
import type {
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
CommonYargsArgv,
|
|
25
|
+
StrictYargsOptionsToInterface,
|
|
27
26
|
} from "../yargs-types";
|
|
28
27
|
import type { TailCLIFilters } from "./createTail";
|
|
29
28
|
import type { RawData } from "ws";
|
|
30
|
-
import type { Argv } from "yargs";
|
|
31
29
|
|
|
32
|
-
export function tailOptions(yargs:
|
|
30
|
+
export function tailOptions(yargs: CommonYargsArgv) {
|
|
33
31
|
return yargs
|
|
34
32
|
.positional("worker", {
|
|
35
33
|
describe: "Name or route of the worker to tail",
|
|
@@ -86,13 +84,13 @@ export function tailOptions(yargs: Argv<CommonYargsOptions>) {
|
|
|
86
84
|
});
|
|
87
85
|
}
|
|
88
86
|
|
|
89
|
-
type TailArgs =
|
|
87
|
+
type TailArgs = StrictYargsOptionsToInterface<typeof tailOptions>;
|
|
90
88
|
|
|
91
89
|
export async function tailHandler(args: TailArgs) {
|
|
92
90
|
if (args.format === "pretty") {
|
|
93
91
|
await printWranglerBanner();
|
|
94
92
|
}
|
|
95
|
-
const config = readConfig(args.config
|
|
93
|
+
const config = readConfig(args.config, args);
|
|
96
94
|
await metrics.sendMetricsEvent("begin log stream", {
|
|
97
95
|
sendMetrics: config.send_metrics,
|
|
98
96
|
});
|
|
@@ -121,7 +119,7 @@ export async function tailHandler(args: TailArgs) {
|
|
|
121
119
|
status: args.status as ("ok" | "error" | "canceled")[] | undefined,
|
|
122
120
|
header: args.header,
|
|
123
121
|
method: args.method,
|
|
124
|
-
samplingRate: args
|
|
122
|
+
samplingRate: args.samplingRate,
|
|
125
123
|
search: args.search,
|
|
126
124
|
clientIp: args.ip,
|
|
127
125
|
};
|
|
@@ -144,8 +142,7 @@ export async function tailHandler(args: TailArgs) {
|
|
|
144
142
|
`Beginning log collection requires restarting the Durable Objects associated with ${scriptName}. Any WebSocket connections or other non-persisted state will be lost as part of this restart.`
|
|
145
143
|
);
|
|
146
144
|
|
|
147
|
-
|
|
148
|
-
if (!shouldContinue) {
|
|
145
|
+
if (!(await confirm("Would you like to continue?"))) {
|
|
149
146
|
return;
|
|
150
147
|
}
|
|
151
148
|
}
|
package/src/tail/printing.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
1
2
|
import { logger } from "../logger";
|
|
2
3
|
import type {
|
|
3
4
|
AlarmEvent,
|
|
5
|
+
EmailEvent,
|
|
4
6
|
RequestEvent,
|
|
5
7
|
ScheduledEvent,
|
|
8
|
+
TailInfo,
|
|
6
9
|
TailEventMessage,
|
|
7
10
|
} from "./createTail";
|
|
8
11
|
import type { Outcome } from "./filters";
|
|
@@ -30,6 +33,16 @@ export function prettyPrintLogs(data: WebSocket.RawData): void {
|
|
|
30
33
|
? `${requestMethod} ${url} - ${outcome} @ ${datetime}`
|
|
31
34
|
: `[missing request] - ${outcome} @ ${datetime}`
|
|
32
35
|
);
|
|
36
|
+
} else if (isEmailEvent(eventMessage.event)) {
|
|
37
|
+
const outcome = prettifyOutcome(eventMessage.outcome);
|
|
38
|
+
const datetime = new Date(eventMessage.eventTimestamp).toLocaleString();
|
|
39
|
+
const mailFrom = eventMessage.event.mailFrom;
|
|
40
|
+
const rcptTo = eventMessage.event.rcptTo;
|
|
41
|
+
const rawSize = eventMessage.event.rawSize;
|
|
42
|
+
|
|
43
|
+
logger.log(
|
|
44
|
+
`Email from:${mailFrom} to:${rcptTo} size:${rawSize} @ ${datetime} - ${outcome}`
|
|
45
|
+
);
|
|
33
46
|
} else if (isAlarmEvent(eventMessage.event)) {
|
|
34
47
|
const outcome = prettifyOutcome(eventMessage.outcome);
|
|
35
48
|
const datetime = new Date(
|
|
@@ -37,6 +50,10 @@ export function prettyPrintLogs(data: WebSocket.RawData): void {
|
|
|
37
50
|
).toLocaleString();
|
|
38
51
|
|
|
39
52
|
logger.log(`Alarm @ ${datetime} - ${outcome}`);
|
|
53
|
+
} else if (isTailInfo(eventMessage.event)) {
|
|
54
|
+
if (eventMessage.event.type === "overload") {
|
|
55
|
+
logger.log(`${chalk.red.bold(eventMessage.event.message)}`);
|
|
56
|
+
}
|
|
40
57
|
} else {
|
|
41
58
|
// Unknown event type
|
|
42
59
|
const outcome = prettifyOutcome(eventMessage.outcome);
|
|
@@ -74,6 +91,10 @@ function isScheduledEvent(
|
|
|
74
91
|
return Boolean(event && "cron" in event);
|
|
75
92
|
}
|
|
76
93
|
|
|
94
|
+
function isEmailEvent(event: TailEventMessage["event"]): event is EmailEvent {
|
|
95
|
+
return Boolean(event && "mailFrom" in event);
|
|
96
|
+
}
|
|
97
|
+
|
|
77
98
|
/**
|
|
78
99
|
* Check to see if an event sent from a worker is an AlarmEvent.
|
|
79
100
|
*
|
|
@@ -88,6 +109,10 @@ function isAlarmEvent(event: TailEventMessage["event"]): event is AlarmEvent {
|
|
|
88
109
|
return Boolean(event && "scheduledTime" in event && !("cron" in event));
|
|
89
110
|
}
|
|
90
111
|
|
|
112
|
+
function isTailInfo(event: TailEventMessage["event"]): event is TailInfo {
|
|
113
|
+
return Boolean(event && "message" in event && "type" in event);
|
|
114
|
+
}
|
|
115
|
+
|
|
91
116
|
function prettifyOutcome(outcome: Outcome): string {
|
|
92
117
|
switch (outcome) {
|
|
93
118
|
case "ok":
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { readdir } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { logger } from "./logger";
|
|
5
|
+
import { matchFiles, parseRules } from "./module-collection";
|
|
6
|
+
import type { BundleResult } from "./bundle";
|
|
7
|
+
import type { Config } from "./config";
|
|
8
|
+
import type { Entry } from "./entry";
|
|
9
|
+
|
|
10
|
+
async function getFiles(root: string, relativeTo: string): Promise<string[]> {
|
|
11
|
+
const files = [];
|
|
12
|
+
for (const file of await readdir(root, { withFileTypes: true })) {
|
|
13
|
+
if (file.isDirectory()) {
|
|
14
|
+
files.push(...(await getFiles(path.join(root, file.name), relativeTo)));
|
|
15
|
+
} else {
|
|
16
|
+
files.push(path.relative(relativeTo, path.join(root, file.name)));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return files;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default async function traverseModuleGraph(
|
|
23
|
+
entry: Entry,
|
|
24
|
+
rules: Config["rules"]
|
|
25
|
+
): Promise<BundleResult> {
|
|
26
|
+
const files = await getFiles(entry.moduleRoot, entry.moduleRoot);
|
|
27
|
+
const relativeEntryPoint = path.relative(entry.moduleRoot, entry.file);
|
|
28
|
+
|
|
29
|
+
const modules = (await matchFiles(files, entry.moduleRoot, parseRules(rules)))
|
|
30
|
+
.filter((m) => m.name !== relativeEntryPoint)
|
|
31
|
+
.map((m) => ({
|
|
32
|
+
...m,
|
|
33
|
+
name: m.name,
|
|
34
|
+
}));
|
|
35
|
+
|
|
36
|
+
const bundleType = entry.format === "modules" ? "esm" : "commonjs";
|
|
37
|
+
|
|
38
|
+
if (modules.length > 0) {
|
|
39
|
+
logger.info(`Uploading additional modules:`);
|
|
40
|
+
modules.forEach(({ name, type }) => {
|
|
41
|
+
logger.info(`- ${chalk.blue(name)} (${chalk.green(type ?? "")})`);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
modules,
|
|
47
|
+
dependencies: {},
|
|
48
|
+
resolvedEntryPointPath: entry.file,
|
|
49
|
+
bundleType,
|
|
50
|
+
stop: undefined,
|
|
51
|
+
sourceMapPath: undefined,
|
|
52
|
+
sourceMapMetadata: undefined,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// `@types/node` should be included
|
|
2
|
+
Buffer.from("test");
|
|
3
|
+
|
|
4
|
+
// @ts-expect-error `@types/jest` should NOT be included
|
|
5
|
+
test("test");
|
|
6
|
+
|
|
7
|
+
// @ts-expect-error `@cloudflare/workers-types` should NOT be included
|
|
8
|
+
const _handler: ExportedHandler = {};
|
|
9
|
+
// @ts-expect-error `@cloudflare/workers-types` should NOT be included
|
|
10
|
+
new HTMLRewriter();
|
|
11
|
+
|
|
12
|
+
// @ts-expect-error `fetch` should NOT be included as our minimum supported
|
|
13
|
+
// Node version is 16.13.0 which does not include `fetch` on the global scope
|
|
14
|
+
void fetch("http://localhost/");
|
|
15
|
+
|
|
16
|
+
export {};
|
package/src/type-generation.ts
CHANGED
|
@@ -59,6 +59,14 @@ export async function generateTypes(
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
+
if (configToDTS.analytics_engine_datasets) {
|
|
63
|
+
for (const analyticsEngine of configToDTS.analytics_engine_datasets) {
|
|
64
|
+
envTypeStructure.push(
|
|
65
|
+
`${analyticsEngine.binding}: AnalyticsEngineDataset;`
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
62
70
|
if (configToDTS.dispatch_namespaces) {
|
|
63
71
|
for (const namespace of configToDTS.dispatch_namespaces) {
|
|
64
72
|
envTypeStructure.push(`${namespace.binding}: any;`);
|
|
@@ -81,7 +89,7 @@ export async function generateTypes(
|
|
|
81
89
|
}
|
|
82
90
|
}
|
|
83
91
|
|
|
84
|
-
if (configToDTS.unsafe) {
|
|
92
|
+
if (configToDTS.unsafe?.bindings) {
|
|
85
93
|
for (const unsafe of configToDTS.unsafe.bindings) {
|
|
86
94
|
envTypeStructure.push(`${unsafe.name}: any;`);
|
|
87
95
|
}
|
|
@@ -156,11 +164,11 @@ function writeDTSFile({
|
|
|
156
164
|
if (formatType === "modules") {
|
|
157
165
|
combinedTypeStrings += `interface Env {\n${envTypeStructure
|
|
158
166
|
.map((value) => `\t${value}`)
|
|
159
|
-
.join("\n")}
|
|
167
|
+
.join("\n")}\n}\n${modulesTypeStructure.join("\n")}`;
|
|
160
168
|
} else {
|
|
161
169
|
combinedTypeStrings += `export {};\ndeclare global {\n${envTypeStructure
|
|
162
170
|
.map((value) => `\tconst ${value}`)
|
|
163
|
-
.join("\n")}
|
|
171
|
+
.join("\n")}\n}\n${modulesTypeStructure.join("\n")}`;
|
|
164
172
|
}
|
|
165
173
|
|
|
166
174
|
if (envTypeStructure.length || modulesTypeStructure.length) {
|
package/src/user/access.ts
CHANGED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { getEnvironmentVariableFactory } from "../environment-variables/factory";
|
|
2
|
+
import { getCloudflareApiEnvironmentFromEnv } from "../environment-variables/misc-variables";
|
|
3
|
+
import { getAccessToken } from "./access";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `CLOUDFLARE_ACCOUNT_ID` overrides the account inferred from the current user.
|
|
7
|
+
*/
|
|
8
|
+
export const getCloudflareAccountIdFromEnv = getEnvironmentVariableFactory({
|
|
9
|
+
variableName: "CLOUDFLARE_ACCOUNT_ID",
|
|
10
|
+
deprecatedName: "CF_ACCOUNT_ID",
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export const getCloudflareAPITokenFromEnv = getEnvironmentVariableFactory({
|
|
14
|
+
variableName: "CLOUDFLARE_API_TOKEN",
|
|
15
|
+
deprecatedName: "CF_API_TOKEN",
|
|
16
|
+
});
|
|
17
|
+
export const getCloudflareGlobalAuthKeyFromEnv = getEnvironmentVariableFactory({
|
|
18
|
+
variableName: "CLOUDFLARE_API_KEY",
|
|
19
|
+
deprecatedName: "CF_API_KEY",
|
|
20
|
+
});
|
|
21
|
+
export const getCloudflareGlobalAuthEmailFromEnv =
|
|
22
|
+
getEnvironmentVariableFactory({
|
|
23
|
+
variableName: "CLOUDFLARE_EMAIL",
|
|
24
|
+
deprecatedName: "CF_EMAIL",
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* `WRANGLER_CLIENT_ID` is a UUID that is used to identify Wrangler
|
|
29
|
+
* to the Cloudflare APIs.
|
|
30
|
+
*
|
|
31
|
+
* Normally you should not need to set this explicitly.
|
|
32
|
+
* If you want to switch to the staging environment set the
|
|
33
|
+
* `WRANGLER_USE_STAGING` environment variable instead.
|
|
34
|
+
*/
|
|
35
|
+
export const getClientIdFromEnv = getEnvironmentVariableFactory({
|
|
36
|
+
variableName: "WRANGLER_CLIENT_ID",
|
|
37
|
+
defaultValue: () =>
|
|
38
|
+
getCloudflareApiEnvironmentFromEnv() === "staging"
|
|
39
|
+
? "4b2ea6cc-9421-4761-874b-ce550e0e3def"
|
|
40
|
+
: "54d11594-84e4-41aa-b438-e81b8fa78ee7",
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* `WRANGLER_AUTH_DOMAIN` is the URL base domain that is used
|
|
45
|
+
* to access OAuth URLs for the Cloudflare APIs.
|
|
46
|
+
*
|
|
47
|
+
* Normally you should not need to set this explicitly.
|
|
48
|
+
* If you want to switch to the staging environment set the
|
|
49
|
+
* `WRANGLER_USE_STAGING` environment variable instead.
|
|
50
|
+
*/
|
|
51
|
+
export const getAuthDomainFromEnv = getEnvironmentVariableFactory({
|
|
52
|
+
variableName: "WRANGLER_AUTH_DOMAIN",
|
|
53
|
+
defaultValue: () =>
|
|
54
|
+
getCloudflareApiEnvironmentFromEnv() === "staging"
|
|
55
|
+
? "dash.staging.cloudflare.com"
|
|
56
|
+
: "dash.cloudflare.com",
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* `WRANGLER_AUTH_URL` is the path that is used to access OAuth
|
|
61
|
+
* for the Cloudflare APIs.
|
|
62
|
+
*
|
|
63
|
+
* Normally you should not need to set this explicitly.
|
|
64
|
+
* If you want to switch to the staging environment set the
|
|
65
|
+
* `WRANGLER_USE_STAGING` environment variable instead.
|
|
66
|
+
*/
|
|
67
|
+
export const getAuthUrlFromEnv = getEnvironmentVariableFactory({
|
|
68
|
+
variableName: "WRANGLER_AUTH_URL",
|
|
69
|
+
defaultValue: () => `https://${getAuthDomainFromEnv()}/oauth2/auth`,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* `WRANGLER_TOKEN_URL` is the path that is used to exchange an OAuth
|
|
74
|
+
* token for an API token.
|
|
75
|
+
*
|
|
76
|
+
* Normally you should not need to set this explicitly.
|
|
77
|
+
* If you want to switch to the staging environment set the
|
|
78
|
+
* `WRANGLER_USE_STAGING` environment variable instead.
|
|
79
|
+
*/
|
|
80
|
+
export const getTokenUrlFromEnv = getEnvironmentVariableFactory({
|
|
81
|
+
variableName: "WRANGLER_TOKEN_URL",
|
|
82
|
+
defaultValue: () => `https://${getAuthDomainFromEnv()}/oauth2/token`,
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* `WRANGLER_REVOKE_URL` is the path that is used to exchange an OAuth
|
|
87
|
+
* refresh token for a new OAuth token.
|
|
88
|
+
*
|
|
89
|
+
* Normally you should not need to set this explicitly.
|
|
90
|
+
* If you want to switch to the staging environment set the
|
|
91
|
+
* `WRANGLER_USE_STAGING` environment variable instead.
|
|
92
|
+
*/
|
|
93
|
+
export const getRevokeUrlFromEnv = getEnvironmentVariableFactory({
|
|
94
|
+
variableName: "WRANGLER_REVOKE_URL",
|
|
95
|
+
defaultValue: () => `https://${getAuthDomainFromEnv()}/oauth2/revoke`,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Set the `WRANGLER_CF_AUTHORIZATION_TOKEN` to the CF_Authorization token found at https://dash.staging.cloudflare.com/bypass-limits
|
|
100
|
+
* if you want to access the staging environment, triggered by `WRANGLER_API_ENVIRONMENT=staging`.
|
|
101
|
+
*/
|
|
102
|
+
export const getCloudflareAccessToken = async () => {
|
|
103
|
+
const env = getEnvironmentVariableFactory({
|
|
104
|
+
variableName: "WRANGLER_CF_AUTHORIZATION_TOKEN",
|
|
105
|
+
})();
|
|
106
|
+
|
|
107
|
+
// If the environment variable is defined, go ahead and use it.
|
|
108
|
+
if (env !== undefined) {
|
|
109
|
+
return env;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return getAccessToken(getAuthDomainFromEnv());
|
|
113
|
+
};
|
|
@@ -1,41 +1,11 @@
|
|
|
1
|
-
import { Text } from "ink";
|
|
2
|
-
import SelectInput from "ink-select-input";
|
|
3
|
-
import React from "react";
|
|
4
1
|
import { fetchListResult } from "../cfetch";
|
|
5
|
-
import {
|
|
6
|
-
import { getCloudflareAccountIdFromEnv } from "./env-vars";
|
|
2
|
+
import { getCloudflareAccountIdFromEnv } from "./auth-variables";
|
|
7
3
|
|
|
8
4
|
export type ChooseAccountItem = {
|
|
9
5
|
id: string;
|
|
10
6
|
name: string;
|
|
11
7
|
};
|
|
12
8
|
|
|
13
|
-
/**
|
|
14
|
-
* A component that allows the user to select from a list of available accounts.
|
|
15
|
-
*/
|
|
16
|
-
export function ChooseAccount(props: {
|
|
17
|
-
accounts: ChooseAccountItem[];
|
|
18
|
-
onSelect: (account: { name: string; id: string }) => void;
|
|
19
|
-
onError: (error: Error) => void;
|
|
20
|
-
}) {
|
|
21
|
-
return (
|
|
22
|
-
<>
|
|
23
|
-
<Text bold>Select an account from below:</Text>
|
|
24
|
-
<SelectInput
|
|
25
|
-
items={props.accounts.map((item) => ({
|
|
26
|
-
key: item.id,
|
|
27
|
-
label: item.name,
|
|
28
|
-
value: item,
|
|
29
|
-
}))}
|
|
30
|
-
onSelect={(item) => {
|
|
31
|
-
logger.log(`Using account: "${item.value.name} - ${item.value.id}"`);
|
|
32
|
-
props.onSelect({ id: item.value.id, name: item.value.name });
|
|
33
|
-
}}
|
|
34
|
-
/>
|
|
35
|
-
</>
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
9
|
/**
|
|
40
10
|
* Infer a list of available accounts for the current user.
|
|
41
11
|
*/
|
package/src/user/index.ts
CHANGED