From 8d1e1be8510e6890a075b34daf4ed1991866fdf9 Mon Sep 17 00:00:00 2001 From: dmezhensky Date: Wed, 12 Nov 2025 14:11:59 +0100 Subject: [PATCH 1/2] Add rulesets --- cloudflare.js | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/cloudflare.js b/cloudflare.js index 2e950ce..8e0e551 100644 --- a/cloudflare.js +++ b/cloudflare.js @@ -210,7 +210,43 @@ class CloudFlare { response = await body.text() } - if (statusCode !== 200) { + if (statusCode === 404) { + console.log('Firewall ruleset was not found. Initializing firewall ruleset creation...') + const createRulesetUrl = CLOUDFLARE_API_URL + `zones/${this.zoneId}/rulesets` + const payload = { + name: 'Custom firewall ruleset', + kind: 'zone', + phase: 'http_request_firewall_custom', + rules: [] + } + + const { statusCode: createStatusCode, body: createBody } = await this.requestWithDelay(createRulesetUrl, { + method: 'POST', + headers: { + ...this.authorizationHeaders, + 'Content-Type': 'application/json' + }, + body: JSON.stringify(payload) + }) + + let createResponse + try { + createResponse = await createBody.json() + } catch (e) { + createResponse = await createBody.text() + } + + if (createStatusCode !== 200) { + throw new Error(`Could not create firewall ruleset: ${createStatusCode}, error: ${JSON.stringify(createResponse)}`) + } + + const { id, rules } = createResponse?.result ?? {} + if (!id) { + throw new Error(`Could not get firewall rules ruleset ID: got ${id}, received value: ${JSON.stringify(createResponse)}`) + } + + return { id, rules: rules ?? [] } + } else if (statusCode !== 200) { throw new Error(`Could not get firewall rules: ${statusCode}, error: ${JSON.stringify(response)}`) } From 620637c5139a23b48b5b62c21af899040683cd97 Mon Sep 17 00:00:00 2001 From: dmezhensky Date: Wed, 12 Nov 2025 14:44:29 +0100 Subject: [PATCH 2/2] Bump version to 1.0.14 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e9e32c2..0d48da0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodeart/cloudflare-provisioning", - "version": "1.0.13", + "version": "1.0.14", "description": "", "main": "index.js", "scripts": {