Cloudflare/rulesets
Cloudflare Rulesets — WAF custom rules, transform rules, managed rulesets
2026.11.05.2
Fixed: The four ruleset/rule CREATE methods now write the created entity
again: createaccountruleset, createaccountrulesetrule, createzoneruleset,
and createzonerulesetrule. The previous version wrongly treated them as
no-content writes and returned { dataHandles: [] }, silently dropping the
created ruleset/rule ID. Cloudflare POST creates return HTTP 200 with the created
entity in result; a create always persists it, naming the instance by the
response id (else a scoping path param, else a request hash). The update
methods (updateaccountentrypointruleset, updateaccountruleset,
updateaccountrulesetrule, updatezoneentrypointruleset, updatezoneruleset,
updatezonerulesetrule) genuinely return no body and correctly remain no-write.
Upgrade note: The four create resources are declared again. If you ran the previous version, re-run the create to capture the created entity; no stored data needs migration.
2026.11.05.1
Fixed: The ruleset and rule create/update methods are writes whose success
response carries no body (HTTP 204). Earlier versions declared a resource with an
empty schema for each and wrote an empty {} (or a dead instance name) on every
call. Each method now issues the API call for its side effect and returns no data
handles — it stores nothing. Their empty resource specs are gone. Affected:
createaccountruleset, updateaccountentrypointruleset, updateaccountruleset,
createaccountrulesetrule, updateaccountrulesetrule, createzoneruleset,
updatezoneentrypointruleset, updatezoneruleset, createzonerulesetrule and
updatezonerulesetrule.
Upgrade note: The matching resources are no longer declared. Any data earlier
versions wrote under them is stale; delete it with swamp data delete.
2026.11.03.1
Changed: Bump zod 4.6.5 → 4.6.7
2026.10.21.1
Changed: The README and the apiToken description now lead with a vault.
Store the token with swamp vault put cloudflare API_TOKEN and set apiToken
to ${{ vault.get("cloudflare", "API_TOKEN") }}. The CLOUDFLARE_API_TOKEN
environment variable still works as a fallback, but swamp does not redact it, so
it is no longer recommended. The missing-token error now says the same.
Fixed: Create methods whose response carries no id wrote every result to
one instance named created, so each call overwrote the previous one. They now
name the instance by the response's id when present, else by the path
parameter that scopes the call, else by a hash of the request arguments (secret
arguments left out). Affected: createaccountruleset,
createaccountrulesetrule, createzoneruleset and createzonerulesetrule.
Upgrade note: Results earlier versions wrote to the created instance stay
there; new runs write under the new names.
Global Arguments
| Argument | Type | Description |
|---|---|---|
| apiToken? | string | Cloudflare API token. Wire it with ${{ vault.get("cloudflare", "API_TOKEN") }}; never pass the literal token. The CLOUDFLARE_API_TOKEN environment variable is read as a fallback, but it is not redacted and is not recommended. |
| accountId | string | Cloudflare account ID |
| Argument | Type | Description |
|---|---|---|
| cursor? | string | |
| per_page? | string |
| Argument | Type | Description |
|---|---|---|
| description? | string | An informative description of the ruleset. |
| last_updated | string | The timestamp of when the ruleset was last modified. |
| name | string | The human-readable name of the ruleset. |
| version | unknown | |
| kind | unknown | |
| phase | unknown | |
| rules? | unknown |
| Argument | Type | Description |
|---|---|---|
| ruleset_phase | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_phase | string | |
| description? | string | An informative description of the ruleset. |
| last_updated | string | The timestamp of when the ruleset was last modified. |
| name? | string | The human-readable name of the ruleset. |
| version | unknown | |
| rules? | unknown |
| Argument | Type | Description |
|---|---|---|
| ruleset_phase | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_version | string | |
| ruleset_phase | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_id | string | |
| description? | string | An informative description of the ruleset. |
| last_updated | string | The timestamp of when the ruleset was last modified. |
| name? | string | The human-readable name of the ruleset. |
| version | unknown | |
| kind? | unknown | |
| phase? | unknown | |
| rules? | unknown |
| Argument | Type | Description |
|---|---|---|
| ruleset_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_id | string | |
| position? | union |
| Argument | Type | Description |
|---|---|---|
| rule_id | string | |
| ruleset_id | string | |
| position? | union |
| Argument | Type | Description |
|---|---|---|
| rule_id | string | |
| ruleset_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_version | string | |
| ruleset_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_version | string | |
| ruleset_id | string |
| Argument | Type | Description |
|---|---|---|
| rule_tag | string | |
| ruleset_version | string | |
| ruleset_id | string |
| Argument | Type | Description |
|---|---|---|
| zone_id | string | |
| cursor? | string | |
| per_page? | string |
| Argument | Type | Description |
|---|---|---|
| zone_id | string | |
| description? | string | An informative description of the ruleset. |
| last_updated | string | The timestamp of when the ruleset was last modified. |
| name | string | The human-readable name of the ruleset. |
| version | unknown | |
| kind | unknown | |
| phase | unknown | |
| rules? | unknown |
| Argument | Type | Description |
|---|---|---|
| ruleset_phase | string | |
| zone_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_phase | string | |
| zone_id | string | |
| description? | string | An informative description of the ruleset. |
| last_updated | string | The timestamp of when the ruleset was last modified. |
| name? | string | The human-readable name of the ruleset. |
| version | unknown | |
| rules? | unknown |
| Argument | Type | Description |
|---|---|---|
| ruleset_phase | string | |
| zone_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_version | string | |
| ruleset_phase | string | |
| zone_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_id | string | |
| zone_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_id | string | |
| zone_id | string | |
| description? | string | An informative description of the ruleset. |
| last_updated | string | The timestamp of when the ruleset was last modified. |
| name? | string | The human-readable name of the ruleset. |
| version | unknown | |
| kind? | unknown | |
| phase? | unknown | |
| rules? | unknown |
| Argument | Type | Description |
|---|---|---|
| ruleset_id | string | |
| zone_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_id | string | |
| zone_id | string | |
| position? | union |
| Argument | Type | Description |
|---|---|---|
| rule_id | string | |
| ruleset_id | string | |
| zone_id | string | |
| position? | union |
| Argument | Type | Description |
|---|---|---|
| rule_id | string | |
| ruleset_id | string | |
| zone_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_id | string | |
| zone_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_version | string | |
| ruleset_id | string | |
| zone_id | string |
| Argument | Type | Description |
|---|---|---|
| ruleset_version | string | |
| ruleset_id | string | |
| zone_id | string |
| Argument | Type | Description |
|---|---|---|
| rule_tag | string | |
| ruleset_version | string | |
| ruleset_id | string | |
| zone_id | string |
Resources
2026.11.03.1
Changed: Bump zod 4.6.5 → 4.6.7
2026.10.21.1
Changed: The README and the apiToken description now lead with a vault.
Store the token with swamp vault put cloudflare API_TOKEN and set apiToken
to ${{ vault.get("cloudflare", "API_TOKEN") }}. The CLOUDFLARE_API_TOKEN
environment variable still works as a fallback, but swamp does not redact it, so
it is no longer recommended. The missing-token error now says the same.
Fixed: Create methods whose response carries no id wrote every result to
one instance named created, so each call overwrote the previous one. They now
name the instance by the response's id when present, else by the path
parameter that scopes the call, else by a hash of the request arguments (secret
arguments left out). Affected: createaccountruleset,
createaccountrulesetrule, createzoneruleset and createzonerulesetrule.
Upgrade note: Results earlier versions wrote to the created instance stay
there; new runs write under the new names.
2026.10.21.1
Changed: The README and the apiToken description now lead with a vault.
Store the token with swamp vault put cloudflare API_TOKEN and set apiToken
to ${{ vault.get("cloudflare", "API_TOKEN") }}. The CLOUDFLARE_API_TOKEN
environment variable still works as a fallback, but swamp does not redact it, so
it is no longer recommended. The missing-token error now says the same.
Fixed: Create methods whose response carries no id wrote every result to
one instance named created, so each call overwrote the previous one. They now
name the instance by the response's id when present, else by the path
parameter that scopes the call, else by a hash of the request arguments (secret
arguments left out). Affected: createaccountruleset,
createaccountrulesetrule, createzoneruleset and createzonerulesetrule.
Upgrade note: Results earlier versions wrote to the created instance stay
there; new runs write under the new names.
2026.10.14.1
Fixed: Methods that write a singleton resource failed on current swamp with
Data name 'latest' is reserved for internal use.
Changed: Singleton get and action methods now write their data under
listaccountrulesets-current instead of latest. Anything that read
data.latest("<model>", "latest") or queried name == "latest" must use the
new name.
Upgrade note: Data previously stored under latest is not migrated; re-run
the method to populate the new name. No attribute schemas changed.
Added: The manifest now declares license: Apache-2.0 (SPDX). The registry quality rubric scores a declared license separately from the bundled LICENSE.md.
2026.09.18.1
Upgrade note: Normalized npm:zod dependency version to 4.6.5 across the
repo. No behavioral changes in this extension.
2026.09.17.2
No changes to this extension's methods. Regenerated to refresh the shared _lib/api.ts helper library after PR #427 review fixes to cfApiPaginatedCursor (used by r2, kv, durable-objects, and workers-ai, but emitted into every extension's api.ts since it's part of the shared template).
2026.09.15.1
Changed: Bump zod 4.4.3 → 4.6.5
2026.08.28.2
Hardened codegen: instance names sanitized against path traversal; 429 rate-limit retry with Retry-After; string schema patterns emit regex validation; output schemas passthrough unknown fields; apiToken now optional and vault-wireable with CLOUDFLARE_API_TOKEN env fallback.
2026.08.28.2
Hardened codegen: instance names sanitized against path traversal; 429 rate-limit retry with Retry-After; string schema patterns emit regex validation; output schemas passthrough unknown fields; apiToken now optional and vault-wireable with CLOUDFLARE_API_TOKEN env fallback.
2026.08.28.1
Changed: Normalized the extension license to Apache-2.0 and corrected the copyright holder to "Sean Escriva". Extensions that previously shipped an MIT LICENSE.md are now Apache-2.0, consistent with the repository root and every other extension. No code or behavioral changes.
Upgrade note: License text only. No API, schema, or runtime behavior changed.
2026.08.26.2
Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry
quality scorer can resolve dependencies and score the extension. An earlier
release used a bare "zod" import-map specifier, which published but scored as
unscored.
Changed: Retained explicit compilerOptions.strict in deno.json. No
behavioral or schema changes.
2026.08.26.2
Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry
quality scorer can resolve dependencies and score the extension. An earlier
release used a bare "zod" import-map specifier, which published but scored as
unscored.
Changed: Retained explicit compilerOptions.strict in deno.json. No
behavioral or schema changes.
2026.08.24.1
Added: Output metadata attributes for observability.
durationMs: Method execution duration in milliseconds.collectedBy: Extension name that produced the data.fetchedAt: ISO 8601 timestamp when data was fetched (added to resources that previously lacked it).
2026.08.21.2
Changed:
- Errors raised when a Cloudflare API call fails now name the HTTP method
and path that was attempted (e.g.
Cloudflare API GET /accounts/.../rulesets/xxx failed with HTTP 400 ...) instead of a bareCloudflare API error: .... Network-level failures (DNS, connection reset, timeout) are now also caught and wrapped with the same operation context instead of surfacing a rawfetcherror.
No breaking changes.
2026.08.21.1
Changed: Added .describe() and .min(1) to the identifier arguments
used across most methods — zone_id, ruleset_id, ruleset_version,
ruleset_phase, rule_id, and rule_tag — plus .describe() on the
cursor/per_page pagination arguments. No behavioral changes.
2026.07.27.1
Fixed: Regenerated from scripts/cloudflare-codegen after two generator
bugs were repaired (webframp/swamp-extensions#284).
Methods referencing an undeclared path parameter did not compile. The generator derived a method's arguments schema and execute signature from the OpenAPI
parameterslist, but built the request URL from the path template. Where the Cloudflare spec omits a declaration for a{placeholder}— which it does in several places — the result was a method witharguments: z.object({})and an unused_argsparameter whose body still interpolatedargs.<name>. Those methods failed type checking and were uncallable even if they had compiled, because the argument was never declared. Path-template placeholders are now unioned into the declared parameters, so the schema, the signature, and the body agree.Generated tests could request a URL the mock server did not serve. Test arguments merged the request-body fixture over the path-parameter values, so a body property sharing a name with a path parameter (commonly
id) substituted its own example value into the URL. The request then missed the mock and failed withCloudflare API error: Not found. Path parameters now take precedence, matching what the generated model already does by excluding path-parameter names from the request body.
Upgrade note: No API surface change and no method was added or removed. If
this extension type-checked and tested cleanly before, its behavior is unchanged
and only the version moved. Extensions that previously failed deno check or
deno task test now pass.
2026.07.27.1
Fixed: Regenerated from scripts/cloudflare-codegen after two generator
bugs were repaired (webframp/swamp-extensions#284).
Methods referencing an undeclared path parameter did not compile. The generator derived a method's arguments schema and execute signature from the OpenAPI
parameterslist, but built the request URL from the path template. Where the Cloudflare spec omits a declaration for a{placeholder}— which it does in several places — the result was a method witharguments: z.object({})and an unused_argsparameter whose body still interpolatedargs.<name>. Those methods failed type checking and were uncallable even if they had compiled, because the argument was never declared. Path-template placeholders are now unioned into the declared parameters, so the schema, the signature, and the body agree.Generated tests could request a URL the mock server did not serve. Test arguments merged the request-body fixture over the path-parameter values, so a body property sharing a name with a path parameter (commonly
id) substituted its own example value into the URL. The request then missed the mock and failed withCloudflare API error: Not found. Path parameters now take precedence, matching what the generated model already does by excluding path-parameter names from the request body.
Upgrade note: No API surface change and no method was added or removed. If
this extension type-checked and tested cleanly before, its behavior is unchanged
and only the version moved. Extensions that previously failed deno check or
deno task test now pass.
2026.07.19.1
Added: Initial code-generated release of @webframp/cloudflare/rulesets with 32 methods covering the Cloudflare rulesets API surface.
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types (deprecated)1/1earned
- Dependencies pass trust audit2/2earned
- Docs keep secrets in a vault1/1earned
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License2/2earned
- Verified public repository2/2earned