1
1
#!/usr/bin/env -S npm run tsn -T
2
2
3
- /*
4
- * Generate an API token: https://developers.cloudflare.com/fundamentals/api/get-started/create-token/
5
- * (Not Global API Key!)
3
+ /**
4
+ * Generate an API token:
5
+ * https://developers.cloudflare.com/fundamentals/api/get-started/create-token/
6
+ * (Not Global API Key!)
6
7
*
7
- * Find your account id: https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/
8
+ * Find your account id:
9
+ * https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/
8
10
*
9
11
* 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, {"
12
+ * - CLOUDFLARE_API_TOKEN
13
+ * - CLOUDFLARE_ACCOUNT_ID
20
14
*/
21
15
22
16
import Cloudflare from 'cloudflare' ;
23
- import { toFile } from 'cloudflare/index' ;
24
17
25
18
const apiToken = process . env [ 'CLOUDFLARE_API_TOKEN' ] ?? '' ;
26
19
if ( ! apiToken ) {
27
- throw new Error ( 'Please set envar CLOUDFLARE_ACCOUNT_ID ' ) ;
20
+ throw new Error ( 'Please set envar CLOUDFLARE_API_TOKEN ' ) ;
28
21
}
29
22
30
23
const accountID = process . env [ 'CLOUDFLARE_ACCOUNT_ID' ] ?? '' ;
31
24
if ( ! accountID ) {
32
- throw new Error ( 'Please set envar CLOUDFLARE_API_TOKEN ' ) ;
25
+ throw new Error ( 'Please set envar CLOUDFLARE_ACCOUNT_ID ' ) ;
33
26
}
34
27
35
28
const client = new Cloudflare ( {
36
- apiToken : apiToken ,
29
+ apiToken,
37
30
} ) ;
38
31
39
32
async function main ( ) {
40
- const scriptName = 'my-hello-world-script ' ;
41
- const scriptFileName = `${ scriptName } .mjs` ;
33
+ const workerName = 'my-hello-world-worker ' ;
34
+ const scriptFileName = `${ workerName } .mjs` ;
42
35
43
- // Workers Scripts prefer Module Syntax
36
+ // Workers Scripts use ES Module Syntax
44
37
// https://blog.cloudflare.com/workers-javascript-modules/
45
38
const scriptContent = `
46
39
export default {
@@ -50,38 +43,42 @@ async function main() {
50
43
};
51
44
` ;
52
45
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
- ] ,
46
+ const worker = await client . workers . create ( workerName , {
47
+ account_id : accountID ,
48
+ } ) ;
49
+
50
+ const version = await client . workers . scripts . create ( worker . id , {
51
+ account_id : accountID ,
52
+ main_module : scriptFileName ,
53
+ compatibility_date : new Date ( ) . toISOString ( ) . split ( 'T' ) [ 0 ] ,
54
+ bindings : [
55
+ {
56
+ type : 'plain_text' ,
57
+ name : 'MESSAGE' ,
58
+ text : 'Hello World!' ,
67
59
} ,
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
- // }),
60
+ ] ,
61
+ modules : [
62
+ {
63
+ name : scriptFileName ,
64
+ content_type : 'application/javascript+module' ,
65
+ content_base64 : Buffer . from ( scriptContent ) . toString ( 'base64' ) ,
77
66
} ,
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
- }
67
+ ] ,
68
+ } ) ;
69
+
70
+ const deployment = await client . workers . scripts . deployments . create ( worker . name , {
71
+ account_id : accountID ,
72
+ strategy : 'percentage' ,
73
+ versions : [
74
+ {
75
+ percentage : 100 ,
76
+ version_id : version . id ,
77
+ } ,
78
+ ] ,
79
+ } ) ;
80
+
81
+ console . log ( JSON . stringify ( deployment , null , 2 ) ) ;
85
82
}
86
83
87
84
main ( ) ;
0 commit comments