cloudflare/cloudflare-typescript

Public

mirrored fromhttps://github.com/cloudflare/cloudflare-typescriptAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
24464e52cbb692b99ffacfd8000c1d6b0bc549da

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

examples/workers/script-upload.ts

87lines · modecode

1#!/usr/bin/env -S npm run tsn -T
2
3/*
4 * Generate an API token: https://developers.cloudflare.com/fundamentals/api/get-started/create-token/
5 * (Not Global API Key!)
6 *
7 * Find your account id: https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/
8 *
9 * Set these environment variables:
10 * - CLOUDFLARE_API_TOKEN
11 * - CLOUDFLARE_ACCOUNT_ID
12 *
13 * ### Workers for Platforms ###
14 *
15 * For uploading a User Worker to a dispatch namespace:
16 * https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/
17 *
18 * Define a "dispatchNamespaceName" variable and change the entire "const script = " line to the following:
19 * "const script = await client.workersForPlatforms.dispatch.namespaces.scripts.update(dispatchNamespaceName, scriptName, {"
20 */
21
22import Cloudflare from 'cloudflare';
23import { toFile } from 'cloudflare/index';
24
25const apiToken = process.env['CLOUDFLARE_API_TOKEN'] ?? '';
26if (!apiToken) {
27 throw new Error('Please set envar CLOUDFLARE_ACCOUNT_ID');
28}
29
30const accountID = process.env['CLOUDFLARE_ACCOUNT_ID'] ?? '';
31if (!accountID) {
32 throw new Error('Please set envar CLOUDFLARE_API_TOKEN');
33}
34
35const client = new Cloudflare({
36 apiToken: apiToken,
37});
38
39async function main() {
40 const scriptName = 'my-hello-world-script';
41 const scriptFileName = `${scriptName}.mjs`;
42
43 // Workers Scripts prefer Module Syntax
44 // https://blog.cloudflare.com/workers-javascript-modules/
45 const scriptContent = `
46 export default {
47 async fetch(request, env, ctx) {
48 return new Response(env.MESSAGE, { status: 200 });
49 }
50 };
51 `;
52
53 try {
54 // https://developers.cloudflare.com/api/resources/workers/subresources/scripts/methods/update/
55 const script = await client.workers.scripts.update(scriptName, {
56 account_id: accountID,
57 // https://developers.cloudflare.com/workers/configuration/multipart-upload-metadata/
58 metadata: {
59 main_module: scriptFileName,
60 bindings: [
61 {
62 type: 'plain_text',
63 name: 'MESSAGE',
64 text: 'Hello World!',
65 },
66 ],
67 },
68 files: {
69 // Add main_module file
70 [scriptFileName]: await toFile(Buffer.from(scriptContent), scriptFileName, {
71 type: 'application/javascript+module',
72 }),
73 // Can add other files, such as more modules or source maps
74 // [sourceMapFileName]: await toFile(Buffer.from(sourceMapContent), sourceMapFileName, {
75 // type: 'application/source-map',
76 // }),
77 },
78 });
79 console.log('Script Upload success!');
80 console.log(JSON.stringify(script, null, 2));
81 } catch (error) {
82 console.error('Script Upload failure!');
83 console.error(error);
84 }
85}
86
87main();