@sanoma-ai/connector-cloudflare 0.3.1 → 0.4.0

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 CHANGED
@@ -29,6 +29,7 @@ export const host = cloudflare.container({
29
29
  source: repo, // a declared github.repository, or a clone URL
30
30
  ref: "main",
31
31
  port: 3000,
32
+ hostname: "app.acme.example", // optional: the app at its own domain, instead of workers.dev
32
33
  secrets: {
33
34
  SANOMA_DATABASE_URL: secret("DATABASE_URL"),
34
35
  SANOMA_SECRETS_KEY: secret("SECRETS_KEY"),
@@ -38,18 +39,22 @@ export const host = cloudflare.container({
38
39
  export const wakeup = cloudflare.alarm({ host });
39
40
  ```
40
41
 
41
- | Field | What it is |
42
- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
43
- | `name` | The company's name, its identity: lowercase letters, digits and dashes, up to 56; the Worker and its application are `sanoma-<name>` |
44
- | `image` | The Sanoma runtime image, pinned to a tag or digest, never `latest`: any registry's, which apply copies into the account's and pins by digest ([The image](#the-image)) |
45
- | `source` | The company repository: a clone URL, or a declared `github.repository` |
46
- | `ref` | The branch it runs, never a commit: apply resolves it and sets the hidden `revision`, so a merge is drift on the container |
47
- | `port` | The port the runtime listens on in the container (its `PORT`) |
48
- | `secrets` | Environment variables, each a `secret(...)`: the Worker's secret bindings, write-only, never in an output, the ledger or a checkpoint |
49
- | `domains` | Optional: a public site's domain, by site name, passed as `SANOMA_DOMAINS` and attached to the Worker by apply as a custom domain ([Custom domains](#custom-domains)) |
50
- | `id`, `url`, `healthy` | Cloudflare's: the application's id, the Worker's workers.dev URL, and whether it answers |
42
+ | Field | What it is |
43
+ | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
44
+ | `name` | The company's name, its identity: lowercase letters, digits and dashes, up to 56; the Worker and its application are `sanoma-<name>` |
45
+ | `image` | The Sanoma runtime image, pinned to a tag or digest, never `latest`: any registry's, which apply copies into the account's and pins by digest ([The image](#the-image)) |
46
+ | `source` | The company repository: a clone URL, or a declared `github.repository` |
47
+ | `ref` | The branch it runs, never a commit: apply resolves it and sets the hidden `revision`, so a merge is drift on the container |
48
+ | `configurationRevision` | Optional non-secret configuration version: 1–63 ASCII letters, digits, `.`, `_` or `-`; advance it to restart with rotated bootstrap or environment values at the same source revision and image |
49
+ | `port` | The port the runtime listens on in the container (its `PORT`) |
50
+ | `secrets` | Environment variables, each a `secret(...)`: the Worker's secret bindings, write-only, never in an output, the ledger or a checkpoint |
51
+ | `domains` | Optional: a public site's domain, by site name, passed as `SANOMA_DOMAINS` and attached to the Worker by apply as a custom domain ([Custom domains](#custom-domains)) |
52
+ | `hostname` | Optional: the hostname the app is served at (`internal.acme.example`), attached like a site's domain; the host's `url` is then `https://<hostname>` |
53
+ | `id`, `url`, `worker_url`, `healthy` | Cloudflare's: the application's id, where the app answers (`https://<hostname>` once attached, else the Worker's workers.dev URL), the workers.dev URL, and whether it answers |
51
54
 
52
- The host's outputs are `{ url, revision, healthy }`. Its capabilities: stops when quiet, a public URL, it runs an image rather than building one, no fixed egress. `healthy` is the application existing and the Worker answering `/__sanoma/health`, which does not start a stopped container: a stopped host is healthy, and a read or a drift check leaves it stopped.
55
+ The host's outputs are `{ url, wakeUrl, revision, healthy }` (`wakeUrl` its `worker_url`). Its capabilities: stops when quiet, a public URL, it runs an image rather than building one, no fixed egress. `healthy` is the application existing and the Worker answering `/__sanoma/health`, which does not start a stopped container: a stopped host is healthy, and a read or a drift check leaves it stopped.
56
+
57
+ `configurationRevision` participates in plans and reads. Change it when delivering new secret values without changing the source or image; for example, a managed lifecycle can derive it from its deployment and credential generation (`d1-g2`). The connector sends it as the reserved plain-text binding `SANOMA_CONFIG_REVISION`, and startup waits for that configuration revision as well as the source revision. It must contain no secret value. Secret values remain write-only: changing a stored value alone with the same configuration revision is not detected by a plan.
53
58
 
54
59
  The alarm's field is `host`, the container it wakes (its URL); its state is `{ host, at, rang, healthy }`, the wake it holds, when its alarm last rang the host's `/wake` for it, and whether the host's Worker took the company's token. Its optional `token`, a `secret("NAME")`, names the secret that holds the host's wakeup token, by default `SANOMA_WAKEUP_TOKEN`: a workflow that makes a host and its alarm for each of several companies, outside any data file, gives each its own (`token: secret("CLOUD_ACME_WAKEUP_TOKEN")`, the secret the host's `secrets` give as `SANOMA_WAKEUP_TOKEN`). `create` mints the token there when none is stored, and its state then carries the name as `token`, so a `read`, `update` or `delete` given that state sends the same token; one given only an id uses the default. A data file leaves `token` out: apply reads and deletes an alarm by its id alone, so `plan` refuses another name. `register` takes `{ at }`, an ISO 8601 time, which replaces the wake the Worker held: a wake is "resume if stopped", so one that rings late, twice or for a replaced registration starts a worker that finds nothing to do and stops again. It names no host: on the host, the worker reads the host's URL from `SANOMA_HOST_URL`, which the Worker gives the container; off it, from the credential `alarm.create` stored. A runtime whose data files declare no wakeup, but whose environment has both `SANOMA_HOST_URL` and `SANOMA_WAKEUP_TOKEN` (a host Sanoma Cloud made), registers at the same route itself, with no connector call (`envWakeup` in `@sanoma-ai/workflows`).
55
60
 
@@ -59,13 +64,13 @@ The logo is Cloudflare's cloud from [Simple Icons](https://simpleicons.org/?q=cl
59
64
 
60
65
  The package ships the Worker it uploads, `worker/`: `index.js`, which exports the Durable Object class `SanomaInstance` over `DurableObject` from `cloudflare:workers`, and `instance.js`, the object's code with no imports (typed by `instance.d.ts`), which the fake runs in Node so both kits check the code Cloudflare runs. Every request to the Worker goes to its one object, which:
61
66
 
62
- - starts the container on a request at the Worker's `SANOMA_REVISION` and the image its upload names (`ctx.container.images.runtime`: the copy, pinned by digest), as a `standard-1` instance (½ vCPU, 4 GiB: the policy refuses `basic`), with the Worker's text bindings (plain and secret) as its environment and both as labels (the image's as a hash, since a label holds 64 bytes); a running container that does not carry both is destroyed and started again (a deploy);
67
+ - starts the container on a request at the Worker's source revision, configuration revision and uploaded image (`ctx.container.images.runtime`: the copy, pinned by digest), as a `standard-1` instance (½ vCPU, 4 GiB: the policy refuses `basic`), with the Worker's text bindings (plain and secret) as its environment. Container labels hold the two non-secret revisions and an image hash; a running container with different labels is destroyed and started again. Secret values never enter these labels;
63
68
  - waits for the container's `/healthz` (up to ten minutes, the clone and install included), sets its inactivity timeout to ten minutes, and proxies the request to its `port` with the Host it was asked for and `x-forwarded-proto` (the port's fetch reaches the container whatever the URL's host, which becomes the request's Host header: so the company serves the public site declared on a domain);
64
- - answers `GET /__sanoma/health` with `{ revision, running }` without starting the container, and with `?start=1` once the container answers, which is what a create or update waits for;
69
+ - answers `GET /__sanoma/health` with the source revision, configuration revision when set, and running/readiness state without starting the container. With `?start=1`, it waits until the container answers; a create or update checks both revisions before completing;
65
70
  - holds the company's one wake at `/__sanoma/wake`, with `Authorization: Bearer <SANOMA_WAKEUP_TOKEN>`: `GET` shows `{ at, rang? }`, `PUT { at }` replaces it and sets the object's alarm, `DELETE` clears it. Without the token among the host's secrets it answers 404, with another one 401;
66
71
  - at the alarm, starts the container and calls its `/wake`, then notes when (`rang`); a failure throws, so Cloudflare rings the alarm again.
67
72
 
68
- Cloudflare stops the container after ten quiet minutes; the object, its storage and its alarm stay, and the next request or alarm starts the container again. The application is of the `durable_object` scheduling policy (public beta, the one Cloudflare documents for new applications; it refused `default` on the account the connector was first run on): the object starts its container, with the image and the instance type it names, so the application is only a name and the object's namespace, and has no image, versions or rollouts. A create, in Wrangler's order, copies and pins the image and waits until Cloudflare prepared it ([The image](#the-image)), uploads the Worker with the object's migration (`new_sqlite_classes`) and its class as a container's with that image (`containers: [{ name, class_name, images: { runtime } }]`, as Wrangler sends it), turns its workers.dev URL on, makes the application for the object's namespace (`{ name, scheduling_policy: "durable_object", durable_objects: { namespace_id } }`, the `namespace_id` the Worker's settings then show), and uploads the Worker once more: the object learns which application backs its namespace only from a deployment made after the application exists, and without that upload every start answers "There is no container application assigned to this Durable Object namespace", for good (found on the first real deploy, 2026-10-29); an update does the same, except that it leaves the application as it is: a new image is a new upload naming it, and the object destroys a container started at another and starts it again at the next request. Either waits for the Worker to answer at the new revision. The policy is fixed once an application is made, and the object cannot start a container under another: one of the `default` policy under that name (none can be made any more) is deleted by hand before the apply. A secret's new value goes up with the next update for another reason (a plan compares secret names, never values: the Worker's settings never show them), and a running container keeps the old one until it starts again. A delete detaches the custom domains the Worker was declared to serve, deletes the application, then the Worker with its object's storage. A Worker of that name that is not Sanoma's (no `SANOMA_INSTANCE` binding) reads as gone, and a create or a delete refuses to touch it.
73
+ Cloudflare stops the container after ten quiet minutes; the object, its storage and its alarm stay, and the next request or alarm starts the container again. The application is of the `durable_object` scheduling policy (public beta, the one Cloudflare documents for new applications; it refused `default` on the account the connector was first run on): the object starts its container, with the image and the instance type it names, so the application is only a name and the object's namespace, and has no image, versions or rollouts. A create, in Wrangler's order, copies and pins the image and waits until Cloudflare prepared it ([The image](#the-image)), uploads the Worker with the object's migration (`new_sqlite_classes`) and its class as a container's with that image (`containers: [{ name, class_name, images: { runtime } }]`, as Wrangler sends it), turns its workers.dev URL on, makes the application for the object's namespace (`{ name, scheduling_policy: "durable_object", durable_objects: { namespace_id } }`, the `namespace_id` the Worker's settings then show), and uploads the Worker once more: the object learns which application backs its namespace only from a deployment made after the application exists, and without that upload every start answers "There is no container application assigned to this Durable Object namespace", for good (found on the first real deploy, 2026-10-29); an update does the same, except that it leaves the application as it is: a new image is a new upload naming it, and the object destroys a container started at another and starts it again at the next request. Either waits for the Worker to answer at the requested source and configuration revisions. The policy is fixed once an application is made, and the object cannot start a container under another: one of the `default` policy under that name (none can be made any more) is deleted by hand before the apply. A plan compares secret binding names, never values: the Worker's settings never show them. Advance `configurationRevision` to upload rotated values and restart a running container with them; a value change alone does not trigger an update. A delete detaches the custom domains the Worker was declared to serve (its `hostname` too), deletes the application, then the Worker with its object's storage. A Worker of that name that is not Sanoma's (no `SANOMA_INSTANCE` binding) reads as gone, and a create or a delete refuses to touch it.
69
74
 
70
75
  ## The image
71
76
 
@@ -84,7 +89,9 @@ To stop scaling to zero, delete the `wakeup` line and `SANOMA_WAKEUP_TOKEN` from
84
89
 
85
90
  ## Custom domains
86
91
 
87
- Each hostname in `domains` is attached to the Worker as a [Workers custom domain](https://developers.cloudflare.com/workers/configuration/routing/custom-domains/) by a create or an update: Cloudflare then makes its DNS record and certificate and routes it to the Worker. The zone is the hostname's last two labels (`www.acme.example` is in `acme.example`), looked up in the account once per apex when a domain is to be attached (`GET /zones?name=&account.id=`); a hostname whose zone the account does not hold, or the token cannot read, is refused, naming the hostname and the zone, before anything changes. An update lists the Worker's attached domains first (`GET …/workers/domains?service=`), and only a missing one's zone is looked up; after the upload, each missing one is attached (`PUT …/workers/domains { zone_id, hostname, service }`), then the ones declared before and no longer are detached (`DELETE …/workers/domains/{id}`). A domain attached by hand and never declared is left alone. A read lists the Worker's attached domains too and shows only the declared ones attached, so a domain whose attach failed, or one detached by hand, is drift that the next apply attaches again. A delete detaches every declared one before the Worker goes. A container without `domains` makes none of these requests, unless it served some before, which are then detached. A zone such as `acme.co.uk`, whose apex is three labels, is not found yet.
92
+ Each hostname in `domains` is attached to the Worker as a [Workers custom domain](https://developers.cloudflare.com/workers/configuration/routing/custom-domains/) by a create or an update: Cloudflare then makes its DNS record and certificate and routes it to the Worker. The zone is the hostname's last two labels (`www.acme.example` is in `acme.example`), looked up in the account once per apex when a domain is to be attached (`GET /zones?name=&account.id=`); a hostname whose zone the account does not hold, or the token cannot read, is refused, naming the hostname and the zone, before anything changes. An update lists the Worker's attached domains first (`GET …/workers/domains?service=`), and only a missing one's zone is looked up; before the upload, the ones declared before and no longer are detached (`DELETE …/workers/domains/{id}`), while the Worker's bindings still record them, and after it each missing one is attached (`PUT …/workers/domains { zone_id, hostname, service }`), once they record it. Whatever fails in between, no domain is left attached that the bindings do not record, and the next apply attaches what is still missing; a site's domain never reaches a Worker that would serve the app there, and a renamed one is down from the detach to the attach. A domain attached by hand and never declared is left alone. A read lists the Worker's attached domains too and shows only the declared ones attached, so a domain whose attach failed, or one detached by hand, is drift that the next apply attaches again. A delete detaches every declared one before the Worker goes. A container without `domains` makes none of these requests, unless it served some before, which are then detached. A zone such as `acme.co.uk`, whose apex is three labels, is not found yet.
93
+
94
+ `hostname`, the app's own domain, is attached, detached and read the same way, in the same zone lookup, and the Worker's `SANOMA_HOSTNAME` binding records it (as `SANOMA_DOMAINS` records the sites'), so one no longer declared is detached and one detached by hand is drift. With it attached, the host's `url` is `https://<hostname>` (a read of one not attached gives the workers.dev URL, so a failed attach or one detached by hand never points at a name that does not route). The wake path stays on workers.dev, which stays on: the Worker's `SANOMA_HOST_URL` binding, the host's `wakeUrl` (its `worker_url`, which apply gives the alarm as its `host`) and the health checks, so a wake never waits on the hostname's DNS or certificate, and declaring or dropping a hostname leaves the alarm as it is. A `hostname` that is also one of `domains`' values is refused, `invalid`, at a plan and a create, before any request: the app answers at every hostname that is not a site's. A renamed `hostname` is detached before the upload and the new one attached after it, as a site's domain is: in between, a short window, no hostname is attached and the app answers on workers.dev alone (the host's `url` reads as it), and a failure there leaves the bindings naming the old one, detached, or the new one, not yet attached, which the next apply attaches.
88
95
 
89
96
  ## DNS records
90
97
 
@@ -120,7 +127,7 @@ export const mailDns = cloudflare.records({ zone: "sanoma.work", name: "resend",
120
127
 
121
128
  `./driver` (`cloudflareDriver`; `cloudflareDriver({ timeoutMs, startTimeoutMs, pollMs })`: 30 s a request, ten minutes for the Worker to answer at a new revision, two seconds between tries; each request of the image's copy may take ten minutes) and `./fake` (`fakeCloudflare`) are internal entries, for tests.
122
129
 
123
- A read is the Worker's settings (its bindings: what it runs is its plain-text bindings, never a secret's value), the application of its name (whether it exists, its id) and the account's subdomain (its URL); a plan compares the declared image, source, ref, revision, port, domains (left out too) and secret names with them. The requests are made one after another, in the order the fixtures hold.
130
+ A read is the Worker's settings (its bindings: what it runs is its plain-text bindings, never a secret's value), the application of its name (whether it exists, its id) and the account's subdomain (its URL); a plan compares the declared image, source, ref, revision, port, domains and hostname (each left out too) and secret names with them. The requests are made one after another, in the order the fixtures hold.
124
131
 
125
132
  ### Environment
126
133
 
@@ -135,7 +142,7 @@ When either is unset, a call fails, not retryable, naming it. The driver declare
135
142
 
136
143
  ### Errors and retries
137
144
 
138
- A 429, a 5xx, a timeout or no reply is retryable, the image's copy's requests too; any other 4xx is not. `status` and `vendorCode` (Cloudflare's first error `code`) are kept. The driver's own refusals are not retryable: `exists` (a Worker of that name that is not Sanoma's, which is neither overwritten nor deleted), `plan_changed` (an update whose plan changed since it was approved, or is not an update: a new name is a delete and a create), `no_token` and `token` (a host without the company's `SANOMA_WAKEUP_TOKEN`, or with another one), `no_zone` (a domain or a record set whose zone the account does not hold), `conflict` (a record in the way of a declared one), `no_dns_permission` (a token without Zone → DNS → Edit), `not_known` (records given as `null`), `invalid` (a record the shared shape refuses, an MX one without a priority, one outside the zone, a CNAME or a second SPF policy beside another declared record, or a set's mark longer than 100 characters), and a Worker that did not answer at its revision in time, which says what it answered.
145
+ A 429, a 5xx, a timeout or no reply is retryable, the image's copy's requests too; any other 4xx is not. `status` and `vendorCode` (Cloudflare's first error `code`) are kept. The driver's own refusals are not retryable: `exists` (a Worker of that name that is not Sanoma's, which is neither overwritten nor deleted), `plan_changed` (an update whose plan changed since it was approved, or is not an update: a new name is a delete and a create), `no_token` and `token` (a host without the company's `SANOMA_WAKEUP_TOKEN`, or with another one), `no_zone` (a domain or a record set whose zone the account does not hold), `conflict` (a record in the way of a declared one), `no_dns_permission` (a token without Zone → DNS → Edit), `not_known` (records given as `null`), `invalid` (a container's `hostname` that is one of its `domains`, a record the shared shape refuses, an MX one without a priority, one outside the zone, a CNAME or a second SPF policy beside another declared record, or a set's mark longer than 100 characters), and a Worker that did not answer at its revision in time, which says what it answered.
139
146
 
140
147
  ### Plan
141
148
 
@@ -16,10 +16,13 @@ export declare const container: import("@sanoma-ai/workflows").Resource<z.ZodObj
16
16
  source: z.ZodString;
17
17
  ref: z.ZodString;
18
18
  revision: z.ZodOptional<z.ZodNullable<z.ZodString>>;
19
+ configurationRevision: z.ZodOptional<z.ZodNullable<z.ZodString>>;
19
20
  secrets: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
20
21
  port: z.ZodNumber;
21
22
  domains: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
23
+ hostname: z.ZodOptional<z.ZodNullable<z.ZodString>>;
22
24
  url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
25
+ worker_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
23
26
  healthy: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
24
27
  }, z.core.$strip>, "cloudflare.container", {
25
28
  readonly source: {
@@ -45,7 +48,7 @@ export declare const alarm: import("@sanoma-ai/workflows").Resource<z.ZodObject<
45
48
  }, z.core.$strip>, "cloudflare.alarm", {
46
49
  readonly host: {
47
50
  readonly type: readonly ["cloudflare.container"];
48
- readonly by: readonly ["url"];
51
+ readonly by: readonly ["worker_url", "url"];
49
52
  };
50
53
  }, true>;
51
54
  /** A CAA record's content, `0 issue "letsencrypt.org"`, as the fields Cloudflare takes; undefined when it is not one. */
package/dist/connector.js CHANGED
@@ -23,6 +23,11 @@ const containerSchema = z.object({
23
23
  source: z.string().min(1).describe("The company repository's clone URL, or a declared GitHub repository"),
24
24
  ref: z.string().min(1).describe("The branch it runs, such as `main`, never a commit"),
25
25
  revision: z.string().nullish().describe("The commit it runs, which apply sets from `ref`"),
26
+ configurationRevision: z
27
+ .string()
28
+ .regex(/^[A-Za-z0-9._-]{1,63}$/)
29
+ .nullish()
30
+ .describe("Non-secret deployment configuration revision: advance it to roll out rotated bootstrap values at the same source revision"),
26
31
  secrets: z
27
32
  .record(z.string().regex(/^[A-Z_][A-Z0-9_]*$/), z.string())
28
33
  .nullish()
@@ -34,7 +39,19 @@ const containerSchema = z.object({
34
39
  .refine((domains) => Object.keys(domains).length > 0, "leave `domains` out rather than empty")
35
40
  .nullish()
36
41
  .describe("A public site's domain, by site name"),
37
- url: z.string().nullish().describe("The Worker's URL on workers.dev, which Cloudflare sets"),
42
+ hostname: z
43
+ .string()
44
+ .regex(DOMAIN_NAME)
45
+ .nullish()
46
+ .describe("The hostname the app is served at, such as `internal.acme.example`: attached to the Worker as a custom domain, and its `url`"),
47
+ url: z
48
+ .string()
49
+ .nullish()
50
+ .describe("Where the app answers: `https://<hostname>` once attached, or the Worker's URL on workers.dev"),
51
+ worker_url: z
52
+ .string()
53
+ .nullish()
54
+ .describe("The Worker's URL on workers.dev, which Cloudflare sets: where its alarm and health checks reach it"),
38
55
  healthy: z
39
56
  .boolean()
40
57
  .nullish()
@@ -57,7 +74,7 @@ export const container = defineResource({
57
74
  schema: containerSchema,
58
75
  fields: {
59
76
  immutable: ["name"],
60
- vendorOwned: ["id", "url", "healthy"],
77
+ vendorOwned: ["id", "url", "worker_url", "healthy"],
61
78
  writeOnly: ["secrets"],
62
79
  references: { source: { type: "github.repository", by: ["http_clone_url"] } },
63
80
  },
@@ -66,10 +83,19 @@ export const container = defineResource({
66
83
  writable: true,
67
84
  host: {
68
85
  capabilities: { lifetime: "stops-when-quiet", publicUrl: true, buildsFromGit: false, staticEgress: false },
69
- inputs: { source: "source", ref: "ref", secrets: "secrets", port: "port", domains: "domains" },
86
+ inputs: {
87
+ source: "source",
88
+ ref: "ref",
89
+ secrets: "secrets",
90
+ port: "port",
91
+ domains: "domains",
92
+ hostname: "hostname",
93
+ },
70
94
  revision: "revision",
71
95
  outputs: (state) => ({
72
96
  url: String(state.url ?? ""),
97
+ // The alarm reaches the Worker on workers.dev, whatever hostname the app is served at.
98
+ ...(typeof state.worker_url === "string" && { wakeUrl: state.worker_url }),
73
99
  ...(typeof state.revision === "string" && { revision: state.revision }),
74
100
  healthy: state.healthy === true,
75
101
  }),
@@ -109,7 +135,8 @@ export const alarm = defineResource({
109
135
  immutable: ["host"],
110
136
  vendorOwned: ["at", "rang", "healthy"],
111
137
  writeOnly: ["token"],
112
- references: { host: { type: ["cloudflare.container"], by: ["url"] } },
138
+ // The host's wake URL (`worker_url`, its outputs' `wakeUrl`), as apply gives it: its `url` is its hostname once attached.
139
+ references: { host: { type: ["cloudflare.container"], by: ["worker_url", "url"] } },
113
140
  },
114
141
  bindingId: (state) => String(state.host),
115
142
  writable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"connector.js","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connector.js","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,eAAe,EACf,cAAc,EAEd,SAAS,EAGT,UAAU,GACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AAEH,8GAA8G;AAC9G,MAAM,IAAI,GAAG,wCAAwC,CAAC;AAEtD,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IAC1F,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,KAAK,CAAC,IAAI,EAAE,mDAAmD,CAAC;SAChE,QAAQ,CACP,0GAA0G,CAC3G;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,KAAK,CAAC,oDAAoD,EAAE,oCAAoC,CAAC;SACjG,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,0CAA0C,CAAC;SACzF,QAAQ,CACP,8IAA8I,CAC/I;IACH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qEAAqE,CAAC;IACzG,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACrF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAC1F,qBAAqB,EAAE,CAAC;SACrB,MAAM,EAAE;SACR,KAAK,CAAC,wBAAwB,CAAC;SAC/B,OAAO,EAAE;SACT,QAAQ,CACP,2HAA2H,CAC5H;IACH,OAAO,EAAE,CAAC;SACP,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;SAC1D,OAAO,EAAE;SACT,QAAQ,CACP,2HAA2H,CAC5H;IACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+DAA+D,CAAC;IACnH,OAAO,EAAE,CAAC;SACP,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAClE,6DAA6D;SAC5D,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,uCAAuC,CAAC;SAC7F,OAAO,EAAE;SACT,QAAQ,CAAC,sCAAsC,CAAC;IACnD,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,KAAK,CAAC,WAAW,CAAC;SAClB,OAAO,EAAE;SACT,QAAQ,CACP,8HAA8H,CAC/H;IACH,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,OAAO,EAAE;SACT,QAAQ,CAAC,+FAA+F,CAAC;IAC5G,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,OAAO,EAAE;SACT,QAAQ,CAAC,oGAAoG,CAAC;IACjH,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,OAAO,EAAE;SACT,QAAQ,CAAC,oGAAoG,CAAC;CAClH,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,cAAc,CAAC;IACtC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE;QACN,SAAS,EAAE,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC;QACnD,SAAS,EAAE,CAAC,SAAS,CAAC;QACtB,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE;KAC9E;IACD,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI;IACxB,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IACxC,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE;QACJ,YAAY,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;QAC1G,MAAM,EAAE;YACN,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,KAAK;YACV,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,UAAU;SACrB;QACD,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;YAC5B,uFAAuF;YACvF,GAAG,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YAC1E,GAAG,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;YACvE,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI;SAChC,CAAC;KACH;CACF,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,wFAAwF,CAAC;IACrG,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IAChG,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,OAAO,EAAE;SACT,QAAQ,CAAC,oFAAoF,CAAC;IACjG,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;IACrH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,OAAO,EAAE;SACT,QAAQ,CACP,+MAA+M,CAChN;CACJ,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,cAAc,CAAC;IAClC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE;QACN,SAAS,EAAE,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC;QACtC,SAAS,EAAE,CAAC,OAAO,CAAC;QACpB,0HAA0H;QAC1H,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,EAAE;KACpF;IACD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IACxC,QAAQ,EAAE,IAAI;IACd,iGAAiG;IACjG,MAAM,EAAE;QACN,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACxB,QAAQ,EAAE,2BAA2B;QACrC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;KAC1D;CACF,CAAC,CAAC;AAEH,8DAA8D;AAC9D,MAAM,KAAK,GAAG,yCAAyC,CAAC;AAExD,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,KAAK,CAAC,WAAW,EAAE,kDAAkD,CAAC;SACtE,QAAQ,CAAC,yDAAyD,CAAC;IACtE,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,KAAK,CAAC,KAAK,EAAE,yCAAyC,CAAC;SACvD,QAAQ,CACP,0IAA0I,CAC3I;IACH,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,SAAS,CAAC;QACjB,8DAA8D;SAC7D,GAAG,CAAC,CAAC,EAAE,iEAAiE,CAAC;SACzE,QAAQ,CACP,0GAA0G,CAC3G;IACH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC9E,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,OAAO,EAAE;SACT,QAAQ,CAAC,yFAAyF,CAAC;CACvG,CAAC,CAAC;AAEH,yHAAyH;AACzH,SAAS,QAAQ,CAAC,OAAe;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,+CAA+C,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAChF,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpH,CAAC;AAED,yHAAyH;AACzH,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAoD,CAAC;IACnF,mFAAmF;IACnF,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;AACnG,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAiD,EAAE,EAAE,CACjG,GAAG,KAAK,IAAI,GAAG,KAAK,KAAK,GAAG,CAAC;AAE/B,0GAA0G;AAC1G,SAAS,SAAS,CAAC,IAAY,EAAE,OAAe;IAC9C,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACzC,CAAC;AAWD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAa,EAAE,EAAE,CACzE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAa,EAAa,EAAE,CAAC,CAAC;IAChG,IAAI,EAAE,IAAyB;IAC/B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAC3C,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;IACjC,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;IAClE,GAAG,EAAE,GAAG,IAAI,CAAC;CACd,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG;IACpB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;IACtC,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,CAAC,SAAS,CAAC;IACtB,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;CACxC,CAAC;AAEpC,2HAA2H;AAC3H,MAAM,YAAY,GAAG,CAAC,KAA8B,EAAE,EAAE;IACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,OAAO,GAAI,KAAK,CAAC,OAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACxF,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;AACzF,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;IACpC,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,aAAa;IACpB,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,aAAa;IACrB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;IACnE,gGAAgG;IAChG,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACzG,QAAQ,EAAE,IAAI;IACd,+EAA+E;IAC/E,SAAS,EAAE,IAAI;CAChB,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAExG,uFAAuF;AACvF,MAAM,YAAY,GAAG;IACnB,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO;QACf,qEAAqE;QACrE,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,+EAA+E;QAC5F,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,CAAC;QACrG,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;KACrB;CAC+B,CAAC;AAEnC,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;AASxE;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,GAAG,KAAK;IACR,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE;CACU,CAAC"}
package/dist/ops.d.ts CHANGED
@@ -169,9 +169,12 @@ type ContainerState = {
169
169
  source: string;
170
170
  ref: string;
171
171
  revision: string | null;
172
+ configurationRevision?: string;
172
173
  port: number;
173
174
  domains?: Record<string, string>;
175
+ hostname?: string;
174
176
  url: string;
177
+ worker_url: string;
175
178
  healthy: boolean;
176
179
  };
177
180
  /** What a plan of a change finds, and the state it planned from. */
package/dist/ops.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { setTimeout as delay } from "node:timers/promises";
2
2
  import { DriverError, errorMessage, HOST_URL, isSecret, resolveSecrets, retryableStatus, WAKE_PATH, } from "@sanoma-ai/workflows";
3
- import { domainsOf, domainsText } from "@sanoma-ai/workflows/shared";
3
+ import { domainsOf, domainsText, hostnameUrl, siteAtHostname } from "@sanoma-ai/workflows/shared";
4
4
  import { instanceUrl, mintInstanceToken, WAKEUP_TOKEN } from "@sanoma-ai/workflows/wakeup-service";
5
5
  import { alarm, container } from "./connector.js";
6
6
  import { accountPinned } from "./registry.js";
@@ -20,9 +20,12 @@ const TEXT = {
20
20
  source: "SANOMA_SOURCE",
21
21
  ref: "SANOMA_REF",
22
22
  revision: "SANOMA_REVISION",
23
+ configurationRevision: "SANOMA_CONFIG_REVISION",
23
24
  image: "SANOMA_IMAGE",
24
25
  port: "PORT",
25
26
  domains: "SANOMA_DOMAINS",
27
+ /** The app's own custom domain, when declared: the state's `url` is then `https://<hostname>`. */
28
+ hostname: "SANOMA_HOSTNAME",
26
29
  url: HOST_URL,
27
30
  };
28
31
  /** Names a secret may not take: the Worker's own bindings. */
@@ -35,13 +38,33 @@ export const refused = (message, vendorCode) => new DriverError(`cloudflare: ${m
35
38
  export const scriptOf = (name) => `sanoma-${name}`;
36
39
  /** The zone a hostname is looked up in: its last two labels (`www.acme.example` → `acme.example`). */
37
40
  export const apexOf = (hostname) => hostname.split(".").slice(-2).join(".");
41
+ /** The Worker's plain-text bindings, by name. */
42
+ const textOf = (bindings) => new Map((bindings ?? []).filter((b) => b.type === "plain_text").map((b) => [b.name, b.text ?? ""]));
38
43
  /**
39
- * The hostnames the Worker's bindings say it was declared to serve (`SANOMA_DOMAINS`): the custom
40
- * domains that are Sanoma's to detach. One attached by hand and never declared is left alone.
44
+ * The hostnames the Worker's bindings say it was declared to serve (`SANOMA_DOMAINS` and
45
+ * `SANOMA_HOSTNAME`): the custom domains that are Sanoma's to detach. One attached by hand and
46
+ * never declared is left alone.
41
47
  */
42
48
  const declaredBefore = (bindings) => {
43
- const text = bindings?.find((b) => b.type === "plain_text" && b.name === TEXT.domains)?.text;
44
- return new Set(text ? Object.values(domainsOf(text)) : []);
49
+ const text = textOf(bindings);
50
+ const domains = text.get(TEXT.domains);
51
+ const hostname = text.get(TEXT.hostname);
52
+ return new Set([...(domains ? Object.values(domainsOf(domains)) : []), ...(hostname ? [hostname] : [])]);
53
+ };
54
+ /** Where the app answers: its declared hostname, else the Worker's workers.dev URL. */
55
+ const servedAt = (hostname, workerUrl) => hostname ? hostnameUrl(hostname) : workerUrl;
56
+ /**
57
+ * Refuses a hostname that is also a site's domain, before any request: the app and the site would
58
+ * share it. `describeConfig` reports it at a data file's declaration; this guards a workflow's own
59
+ * call, which no data file declares.
60
+ */
61
+ const checkHostname = (name, hostname, domains) => {
62
+ if (typeof hostname !== "string")
63
+ return;
64
+ const site = siteAtHostname(hostname, (domains ?? {}));
65
+ if (site) {
66
+ throw refused(`container ${String(name)}: hostname ${hostname} is also the domain of the site ${site}: the app and a site need a hostname each`, "invalid");
67
+ }
45
68
  };
46
69
  export const NONE = { unknown: [], replace: [] };
47
70
  /**
@@ -58,10 +81,21 @@ export function replanned(what, fresh, expect) {
58
81
  }
59
82
  const sorted = (names) => [...names].toSorted().join(",");
60
83
  /** The declared fields a change of which is an update: everything the Worker runs, and the image. */
61
- const COMPARED = ["image", "source", "ref", "revision", "port", "domains"];
84
+ const COMPARED = [
85
+ "image",
86
+ "source",
87
+ "ref",
88
+ "revision",
89
+ "configurationRevision",
90
+ "port",
91
+ "domains",
92
+ "hostname",
93
+ ];
94
+ /** The compared fields a declaration may leave out: leaving one out is a change when the Worker has it. */
95
+ const OPTIONAL = new Set(["configurationRevision", "domains", "hostname"]);
62
96
  const same = (field, a, b) => field === "domains"
63
97
  ? domainsText((a ?? {})) === domainsText((b ?? {}))
64
- : a === b;
98
+ : (a ?? null) === (b ?? null);
65
99
  /**
66
100
  * `{ revision }` when the Worker answers, else why not; with `start`, once its container answers
67
101
  * too, which starts it. A read asks without: a stopped host is healthy, and stays stopped. A
@@ -78,7 +112,10 @@ const health = async (cf, url, start) => {
78
112
  }
79
113
  const body = (await res.json().catch(() => undefined));
80
114
  if (res.ok && typeof body?.revision === "string")
81
- return { revision: body.revision };
115
+ return {
116
+ revision: body.revision,
117
+ ...(typeof body.configurationRevision === "string" && { configurationRevision: body.configurationRevision }),
118
+ };
82
119
  const error = typeof body?.error === "string" ? body.error : `${HEALTH_PATH} answered ${res.status}`;
83
120
  return { error, exit: typeof body?.exit === "string" };
84
121
  };
@@ -120,15 +157,16 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
120
157
  return undefined;
121
158
  const app = await cf.application(script);
122
159
  const url = await cf.workerUrl(script);
123
- const text = new Map(bindings.filter((b) => b.type === "plain_text").map((b) => [b.name, b.text ?? ""]));
160
+ const text = textOf(bindings);
124
161
  const served = text.get(TEXT.domains);
125
- // The domains it serves that are attached: one whose attach failed, or detached by hand, is
126
- // drift, so the next apply attaches it again.
127
- let domains;
128
- if (served) {
129
- const attached = new Set((await cf.domains(script)).map((d) => d.hostname));
130
- domains = Object.fromEntries(Object.entries(domainsOf(served)).filter(([, hostname]) => attached.has(hostname)));
131
- }
162
+ const declaredHostname = text.get(TEXT.hostname) || undefined;
163
+ // The domains and the hostname it serves that are attached: one whose attach failed, or
164
+ // detached by hand, is drift, so the next apply attaches it again.
165
+ const attached = new Set(served || declaredHostname ? (await cf.domains(script)).map((d) => d.hostname) : []);
166
+ const domains = served
167
+ ? Object.fromEntries(Object.entries(domainsOf(served)).filter(([, hostname]) => attached.has(hostname)))
168
+ : undefined;
169
+ const hostname = declaredHostname && attached.has(declaredHostname) ? declaredHostname : undefined;
132
170
  const state = {
133
171
  id: app?.id ?? null,
134
172
  name,
@@ -137,9 +175,13 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
137
175
  source: text.get(TEXT.source) ?? "",
138
176
  ref: text.get(TEXT.ref) ?? "",
139
177
  revision: text.get(TEXT.revision) ?? null,
178
+ ...(text.has(TEXT.configurationRevision) && { configurationRevision: text.get(TEXT.configurationRevision) }),
140
179
  port: Number(text.get(TEXT.port) ?? 0),
141
180
  ...(domains && Object.keys(domains).length > 0 && { domains }),
142
- url,
181
+ ...(hostname && { hostname }),
182
+ // Where the app answers now: at its hostname once attached; its health is asked on workers.dev.
183
+ url: servedAt(hostname, url),
184
+ worker_url: url,
143
185
  healthy: checkHealth && app !== undefined && "revision" in (await health(cf, url, false)),
144
186
  };
145
187
  const secrets = bindings.filter((b) => b.type === "secret_text").map((b) => b.name);
@@ -150,6 +192,8 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
150
192
  return found ? { id, gone: false, state: found.state } : { id, gone: true };
151
193
  };
152
194
  const plan = async ({ id, desired }) => {
195
+ if (desired)
196
+ checkHostname(desired.name, desired.hostname, desired.domains);
153
197
  const found = id === undefined ? undefined : await inspect(id, false);
154
198
  if (!desired)
155
199
  return { action: found ? "delete" : "none", ...NONE };
@@ -163,24 +207,42 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
163
207
  if (planned.name !== state.name)
164
208
  return { action: "replace", planned, unknown, replace: ["name"] };
165
209
  const changed =
166
- // `domains` left out is compared too: removing them is a change.
167
- COMPARED.some((field) => (field in planned || field === "domains") && !same(field, planned[field], state[field])) || sorted(Object.keys(secrets ?? {})) !== sorted(found.secrets);
210
+ // `domains` and `hostname` left out are compared too: removing one is a change.
211
+ COMPARED.some((field) => (field in planned || OPTIONAL.has(field)) && !same(field, planned[field], state[field])) || sorted(Object.keys(secrets ?? {})) !== sorted(found.secrets);
168
212
  if (!changed)
169
213
  return { action: "none", planned: state, ...NONE };
170
- return { action: "update", planned: { ...state, ...planned }, ...NONE };
214
+ // What the Worker will serve: the declared domains and hostname, none of the found ones left
215
+ // out; the app at the declared hostname, or on workers.dev without one.
216
+ const { domains: _domains, hostname: _hostname, ...was } = state;
217
+ const url = servedAt(planned.hostname, state.worker_url);
218
+ return {
219
+ action: "update",
220
+ planned: {
221
+ ...was,
222
+ ...planned,
223
+ ...(state.configurationRevision !== undefined &&
224
+ planned.configurationRevision == null && { configurationRevision: null }),
225
+ url,
226
+ },
227
+ ...NONE,
228
+ };
171
229
  };
172
230
  /** Waits until the Worker at `url` answers at `revision`, which starts its container. */
173
- const started = async (cf, script, url, revision) => {
231
+ const started = async (cf, script, url, revision, configurationRevision) => {
174
232
  const until = Date.now() + startTimeoutMs;
175
233
  for (;;) {
176
234
  const seen = await health(cf, url, true);
177
- if ("revision" in seen && seen.revision === revision)
235
+ if ("revision" in seen &&
236
+ seen.revision === revision &&
237
+ (seen.configurationRevision ?? "") === (configurationRevision ?? ""))
178
238
  return;
179
239
  // Not a wait: the container started and ended, and asking again would only start it again.
180
240
  if ("exit" in seen && seen.exit)
181
241
  throw refused(`${script} did not start at ${revision}: ${seen.error}`);
182
242
  if (Date.now() >= until) {
183
- const why = "revision" in seen ? `it runs ${seen.revision}` : seen.error;
243
+ const why = "revision" in seen
244
+ ? `it runs ${seen.revision} with configuration ${seen.configurationRevision ?? "unset"}`
245
+ : seen.error;
184
246
  throw refused(`${script} did not answer at ${revision} in ${Math.round(startTimeoutMs / 1000)} s: ${why}`);
185
247
  }
186
248
  await delay(pollMs);
@@ -214,7 +276,9 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
214
276
  /** Makes the Worker and its application match `desired`, and waits for it: a create and an update alike. */
215
277
  const put = async (desired, { secrets: store }) => {
216
278
  const declared = container.schema.parse(await resolveSecrets(desired, store));
217
- const { name, image, source, ref, revision, port, domains } = declared;
279
+ const { name, image, source, ref, revision, configurationRevision, port, domains } = declared;
280
+ const hostname = declared.hostname ?? undefined;
281
+ checkHostname(name, hostname, domains);
218
282
  const secrets = declared.secrets ?? {};
219
283
  if (!revision) {
220
284
  throw refused(`container ${name}: no revision: apply sets it from ${ref} once its source exists (apply again after a repository it creates)`);
@@ -233,11 +297,13 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
233
297
  // the Worker as it was. Each apply asks again, which costs a manifest's HEAD once the copy is
234
298
  // there, and puts back one gone; the object starts only a pinned image of the account's.
235
299
  // The custom domains are read first too: the ones an update's Worker has, and each declared
236
- // one missing, with its zone, so a domain whose zone the account lacks is refused here.
300
+ // one missing (a site's domain or the app's hostname), with its zone, so a domain whose zone
301
+ // the account lacks is refused here.
302
+ const hostnames = new Set([...Object.values(domains ?? {}), ...(hostname ? [hostname] : [])]);
237
303
  const before = declaredBefore(current);
238
- const attached = current && (domains || before.size > 0) ? await cf.domains(script) : [];
304
+ const attached = current && (hostnames.size > 0 || before.size > 0) ? await cf.domains(script) : [];
239
305
  const held = new Set(attached.map((d) => d.hostname));
240
- const missing = await zonesOf(cf, name, Object.values(domains ?? {}).filter((hostname) => !held.has(hostname)));
306
+ const missing = await zonesOf(cf, name, [...hostnames].filter((h) => !held.has(h)));
241
307
  const runs = accountPinned(image, cf.account) ? image : await cf.copyImage(image);
242
308
  await prepared(cf, runs);
243
309
  const served = domains ? domainsText(domains) : undefined;
@@ -245,10 +311,13 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
245
311
  [TEXT.source]: source,
246
312
  [TEXT.ref]: ref,
247
313
  [TEXT.revision]: revision,
314
+ ...(configurationRevision && { [TEXT.configurationRevision]: configurationRevision }),
248
315
  [TEXT.image]: image,
249
316
  [TEXT.port]: String(port),
317
+ // Where the wakeup reaches the Worker: its workers.dev URL, whatever hostname it serves.
250
318
  [TEXT.url]: url,
251
319
  ...(served && { [TEXT.domains]: served }),
320
+ ...(hostname && { [TEXT.hostname]: hostname }),
252
321
  };
253
322
  const bindings = [
254
323
  { type: "durable_object_namespace", name: NAMESPACE, class_name: OBJECT_CLASS },
@@ -267,6 +336,14 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
267
336
  observability: { enabled: true },
268
337
  modules: await workerModules(),
269
338
  };
339
+ // A domain declared before and no longer is detached while the bindings still record it, and
340
+ // a missing one attached once the upload records it: whatever fails in between, none is left
341
+ // attached and unrecorded, and the next apply attaches what is still missing. A site's domain
342
+ // so never reaches a Worker that would serve the app there (README, Custom domains).
343
+ for (const domain of attached) {
344
+ if (before.has(domain.hostname) && !hostnames.has(domain.hostname))
345
+ await cf.detachDomain(domain.id);
346
+ }
270
347
  await cf.upload(script, { ...metadata, ...(current === undefined && { migrations: MIGRATION }) });
271
348
  await cf.enableSubdomain(script);
272
349
  let app = await cf.application(script);
@@ -282,16 +359,9 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
282
359
  // 2026-10-29; a Worker deployed again after the application started at once).
283
360
  await cf.upload(script, metadata);
284
361
  }
285
- // The declared domains routed to the Worker, attached first so a failed attach leaves the old
286
- // route up; then the ones declared before and no longer, detached.
287
- for (const [hostname, zoneId] of missing)
288
- await cf.attachDomain(script, hostname, zoneId);
289
- const hostnames = new Set(Object.values(domains ?? {}));
290
- for (const domain of attached) {
291
- if (before.has(domain.hostname) && !hostnames.has(domain.hostname))
292
- await cf.detachDomain(domain.id);
293
- }
294
- await started(cf, script, url, revision);
362
+ for (const [domain, zone] of missing)
363
+ await cf.attachDomain(script, domain, zone);
364
+ await started(cf, script, url, revision, configurationRevision);
295
365
  const state = {
296
366
  id: app.id,
297
367
  name,
@@ -299,9 +369,12 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
299
369
  source,
300
370
  ref,
301
371
  revision,
372
+ ...(configurationRevision && { configurationRevision }),
302
373
  port,
303
374
  ...(domains && { domains }),
304
- url,
375
+ ...(hostname && { hostname }),
376
+ url: servedAt(hostname, url),
377
+ worker_url: url,
305
378
  healthy: true,
306
379
  };
307
380
  return { id: name, state };
package/dist/ops.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ops.js","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"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"}
@@ -12,10 +12,13 @@ export declare const cloudflare: {
12
12
  source: import("zod").ZodString;
13
13
  ref: import("zod").ZodString;
14
14
  revision: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
15
+ configurationRevision: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
15
16
  secrets: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>>;
16
17
  port: import("zod").ZodNumber;
17
18
  domains: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>>;
19
+ hostname: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
18
20
  url: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
21
+ worker_url: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
19
22
  healthy: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
20
23
  }, import("zod/v4/core").$strip>, "cloudflare.container", {
21
24
  readonly source: {
@@ -32,7 +35,7 @@ export declare const cloudflare: {
32
35
  }, import("zod/v4/core").$strip>, "cloudflare.alarm", {
33
36
  readonly host: {
34
37
  readonly type: readonly ["cloudflare.container"];
35
- readonly by: readonly ["url"];
38
+ readonly by: readonly ["worker_url", "url"];
36
39
  };
37
40
  }, true>;
38
41
  records: import("@sanoma-ai/workflows").Resource<import("zod").ZodObject<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanoma-ai/connector-cloudflare",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Cloudflare for Sanoma: a Container host that stops when quiet, a Durable Object alarm that wakes it, from one Worker, and a zone's DNS records",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -62,12 +62,12 @@
62
62
  },
63
63
  "devDependencies": {
64
64
  "@sanoma-ai/testing": "0.1.0",
65
- "@sanoma-ai/workflows": "0.11.0",
65
+ "@sanoma-ai/workflows": "0.11.2",
66
66
  "msw": "^3.0.3",
67
67
  "zod": "^4.6.5"
68
68
  },
69
69
  "peerDependencies": {
70
- "@sanoma-ai/workflows": "^0.11.0",
70
+ "@sanoma-ai/workflows": "^0.11.2",
71
71
  "zod": "^4"
72
72
  },
73
73
  "engines": {
@@ -126,6 +126,7 @@ export class Instance {
126
126
  health() {
127
127
  return json(200, {
128
128
  revision: this.env.SANOMA_REVISION ?? "",
129
+ ...(this.env.SANOMA_CONFIG_REVISION && { configurationRevision: this.env.SANOMA_CONFIG_REVISION }),
129
130
  running: this.ctx.container.running,
130
131
  ready: this.#ready,
131
132
  ...(this.#last !== undefined && !this.#ready && { last: this.#last }),
@@ -147,7 +148,11 @@ export class Instance {
147
148
  const image = container.images?.[IMAGE];
148
149
  // Not one to retry: the Worker was uploaded without its image.
149
150
  if (!image) throw new Error(`the Worker names no "${IMAGE}" image among its containers' images`);
150
- const labels = { revision: this.env.SANOMA_REVISION ?? "", image: await imageLabel(image) };
151
+ const labels = {
152
+ revision: this.env.SANOMA_REVISION ?? "",
153
+ image: await imageLabel(image),
154
+ ...(this.env.SANOMA_CONFIG_REVISION && { configuration: this.env.SANOMA_CONFIG_REVISION }),
155
+ };
151
156
  const until = Date.now() + START_TIMEOUT_MS;
152
157
  let last;
153
158
  const saw = (what) => (last = this.#last = what);
@@ -169,8 +174,12 @@ export class Instance {
169
174
  if (!checked && container.running) {
170
175
  // One running from before: kept only if it says it started at these (a deploy otherwise).
171
176
  const info = await container.inspect();
172
- const same = info && info.labels?.revision === labels.revision && (info.labels?.image ?? "") === labels.image;
173
- if (!same) await container.destroy("a new revision or image");
177
+ const same =
178
+ info &&
179
+ info.labels?.revision === labels.revision &&
180
+ (info.labels?.image ?? "") === labels.image &&
181
+ (info.labels?.configuration ?? "") === (labels.configuration ?? "");
182
+ if (!same) await container.destroy("a new revision, image or configuration");
174
183
  }
175
184
  checked = true;
176
185
  if (!container.running) {