@sanoma-ai/connector-cloudflare 0.1.4 → 0.1.6
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 +24 -20
- package/dist/connector.d.ts +2 -1
- package/dist/connector.js +2 -1
- package/dist/connector.js.map +1 -1
- package/dist/driver.js +31 -34
- package/dist/driver.js.map +1 -1
- package/dist/fake.d.ts +8 -5
- package/dist/fake.js +47 -22
- package/dist/fake.js.map +1 -1
- package/dist/ops.d.ts +34 -11
- package/dist/ops.js +66 -26
- package/dist/ops.js.map +1 -1
- package/dist/registry.d.ts +15 -5
- package/dist/registry.js +44 -12
- package/dist/registry.js.map +1 -1
- package/dist/steps.js +2 -2
- package/dist/steps.js.map +1 -1
- package/dist/worker.d.ts +1 -1
- package/dist/worker.js +1 -1
- package/dist/worker.js.map +1 -1
- package/features/cloudflare.feature +5 -5
- package/package.json +4 -4
- package/worker/instance.d.ts +14 -2
- package/worker/instance.js +68 -13
package/dist/ops.d.ts
CHANGED
|
@@ -35,18 +35,32 @@ export interface Upload {
|
|
|
35
35
|
main_module: string;
|
|
36
36
|
compatibility_date: string;
|
|
37
37
|
bindings: Binding[];
|
|
38
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* The object classes that run a container (the namespace is container-enabled), each with its
|
|
40
|
+
* application's name and the images its object may start, by name, pinned by digest.
|
|
41
|
+
*/
|
|
39
42
|
containers: {
|
|
43
|
+
name: string;
|
|
40
44
|
class_name: string;
|
|
45
|
+
images: Record<string, string>;
|
|
41
46
|
}[];
|
|
42
47
|
/** On the first upload only. */
|
|
43
48
|
migrations?: typeof MIGRATION;
|
|
49
|
+
/** The Worker's own logs (what its object saw of a start), kept by Cloudflare for seven days. */
|
|
50
|
+
observability: {
|
|
51
|
+
enabled: boolean;
|
|
52
|
+
};
|
|
44
53
|
modules: WorkerModule[];
|
|
45
54
|
}
|
|
46
55
|
/** A container application, as the fields read here. */
|
|
47
56
|
export interface Application {
|
|
48
57
|
id: string;
|
|
49
|
-
|
|
58
|
+
}
|
|
59
|
+
/** An image's preparation (`POST …/containers/image-preparations`): `pending` until it is `ready`, or an `error`. */
|
|
60
|
+
export interface Preparation {
|
|
61
|
+
status: "pending" | "ready" | "error";
|
|
62
|
+
/** Why it is still pending, or failed. */
|
|
63
|
+
reason?: string;
|
|
50
64
|
}
|
|
51
65
|
/** Cloudflare, as the operations use it. Each call fails with a `DriverError`, except `send`. */
|
|
52
66
|
export interface CloudflareApi {
|
|
@@ -60,16 +74,23 @@ export interface CloudflareApi {
|
|
|
60
74
|
enableSubdomain(script: string): Promise<void>;
|
|
61
75
|
/** The account's id, which its registry's references name (`accountImage`). */
|
|
62
76
|
account: string;
|
|
63
|
-
/**
|
|
64
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Copies an image of another registry into the account's, as `accountImage(image, account)`,
|
|
79
|
+
* and returns the copy pinned by digest: what the object starts (one in the account's registry
|
|
80
|
+
* by a tag is only pinned).
|
|
81
|
+
*/
|
|
82
|
+
copyImage(image: string): Promise<string>;
|
|
83
|
+
/** Asks the account to prepare a pinned image to run, once more (idempotent): where it is. */
|
|
84
|
+
prepareImage(image: string): Promise<Preparation>;
|
|
65
85
|
/** Deletes the Worker, its object's storage with it; nothing when there is none. */
|
|
66
86
|
deleteScript(script: string): Promise<void>;
|
|
67
87
|
/** The container application of that name, if any (`GET …/containers/applications?name=`). */
|
|
68
88
|
application(name: string): Promise<Application | undefined>;
|
|
69
|
-
/**
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
89
|
+
/**
|
|
90
|
+
* Makes the application behind the Worker's object, of the `durable_object` scheduling policy:
|
|
91
|
+
* the object starts its container, at the image the upload names, so it holds no image itself.
|
|
92
|
+
*/
|
|
93
|
+
createApplication(name: string, namespaceId: string): Promise<Application>;
|
|
73
94
|
/** Deletes the application; nothing when there is none. */
|
|
74
95
|
deleteApplication(id: string): Promise<void>;
|
|
75
96
|
/** A request to a Worker: its answer, or a throw when there is none. */
|
|
@@ -106,9 +127,11 @@ export interface ContainerOptions {
|
|
|
106
127
|
}
|
|
107
128
|
/**
|
|
108
129
|
* `cloudflare.container`'s operations over `api()`, made on each call. A create and an update
|
|
109
|
-
* are one upsert: the
|
|
110
|
-
*
|
|
111
|
-
*
|
|
130
|
+
* are one upsert, in Wrangler's order: the image copied and pinned, then prepared, the Worker
|
|
131
|
+
* uploaded with the declared bindings and that image (the migration on its first upload), its
|
|
132
|
+
* workers.dev URL turned on, the application made when there is none, and then a wait until the
|
|
133
|
+
* Worker answers at the new revision, which starts the container. A new image is a new upload:
|
|
134
|
+
* the object destroys a container started at another and starts it again.
|
|
112
135
|
*/
|
|
113
136
|
export declare function containerOps(api: () => CloudflareApi, { startTimeoutMs, pollMs }: ContainerOptions): {
|
|
114
137
|
import: ({ id }: {
|
package/dist/ops.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
1
2
|
import { DriverError, errorMessage, resolveSecrets, retryableStatus, } from "@sanoma-ai/workflows";
|
|
2
3
|
import { domainsOf, domainsText } from "@sanoma-ai/workflows/shared";
|
|
3
4
|
import { instanceUrl, mintInstanceToken, WAKEUP_TOKEN } from "@sanoma-ai/workflows/wakeup-service";
|
|
4
5
|
import { alarm, container } from "./connector.js";
|
|
5
|
-
import {
|
|
6
|
-
import { HEALTH_PATH, MAIN_MODULE, NAMESPACE, OBJECT_CLASS, WAKE_PATH, workerModules, } from "./worker.js";
|
|
6
|
+
import { accountPinned } from "./registry.js";
|
|
7
|
+
import { HEALTH_PATH, IMAGE, MAIN_MODULE, NAMESPACE, OBJECT_CLASS, WAKE_PATH, workerModules, } from "./worker.js";
|
|
7
8
|
// Both types' operations over Cloudflare (`CloudflareApi`): the driver's calls its API with the
|
|
8
9
|
// SDK and the Worker over HTTP, the fake's answers from its state and its Worker in this process.
|
|
9
10
|
// Both go through `containerOps` and `alarmOps`, so they upload, plan and refuse alike.
|
|
@@ -16,6 +17,8 @@ export const MIGRATION = { new_tag: "v1", new_sqlite_classes: [OBJECT_CLASS] };
|
|
|
16
17
|
* `alarm.register` sends the wake, as the registration names no host.
|
|
17
18
|
*/
|
|
18
19
|
export const HOST_URL = "SANOMA_HOST_URL";
|
|
20
|
+
/** How long the account may take to prepare an image to run, as Wrangler waits for it. */
|
|
21
|
+
const PREPARE_TIMEOUT_MS = 15 * 60_000;
|
|
19
22
|
/** The plain-text bindings that say what the Worker runs: a read reads them back. */
|
|
20
23
|
const TEXT = {
|
|
21
24
|
source: "SANOMA_SOURCE",
|
|
@@ -43,7 +46,9 @@ const same = (field, a, b) => field === "domains"
|
|
|
43
46
|
: a === b;
|
|
44
47
|
/**
|
|
45
48
|
* `{ revision }` when the Worker answers, else why not; with `start`, once its container answers
|
|
46
|
-
* too, which starts it. A read asks without: a stopped host is healthy, and stays stopped.
|
|
49
|
+
* too, which starts it. A read asks without: a stopped host is healthy, and stays stopped. A
|
|
50
|
+
* container that ended is `exit`: the Worker would start it again on the next ask, so a deploy
|
|
51
|
+
* stops asking.
|
|
47
52
|
*/
|
|
48
53
|
const health = async (cf, url, start) => {
|
|
49
54
|
let res;
|
|
@@ -51,18 +56,21 @@ const health = async (cf, url, start) => {
|
|
|
51
56
|
res = await cf.send(`${url}${HEALTH_PATH}${start ? "?start=1" : ""}`, { method: "GET" });
|
|
52
57
|
}
|
|
53
58
|
catch (error) {
|
|
54
|
-
return errorMessage(error);
|
|
59
|
+
return { error: errorMessage(error), exit: false };
|
|
55
60
|
}
|
|
56
61
|
const body = (await res.json().catch(() => undefined));
|
|
57
62
|
if (res.ok && typeof body?.revision === "string")
|
|
58
63
|
return { revision: body.revision };
|
|
59
|
-
|
|
64
|
+
const error = typeof body?.error === "string" ? body.error : `${HEALTH_PATH} answered ${res.status}`;
|
|
65
|
+
return { error, exit: typeof body?.exit === "string" };
|
|
60
66
|
};
|
|
61
67
|
/**
|
|
62
68
|
* `cloudflare.container`'s operations over `api()`, made on each call. A create and an update
|
|
63
|
-
* are one upsert: the
|
|
64
|
-
*
|
|
65
|
-
*
|
|
69
|
+
* are one upsert, in Wrangler's order: the image copied and pinned, then prepared, the Worker
|
|
70
|
+
* uploaded with the declared bindings and that image (the migration on its first upload), its
|
|
71
|
+
* workers.dev URL turned on, the application made when there is none, and then a wait until the
|
|
72
|
+
* Worker answers at the new revision, which starts the container. A new image is a new upload:
|
|
73
|
+
* the object destroys a container started at another and starts it again.
|
|
66
74
|
*/
|
|
67
75
|
export function containerOps(api, { startTimeoutMs, pollMs }) {
|
|
68
76
|
/** The Worker `name` runs, from its bindings and its application; `checkHealth` asks it too. None for a Worker that is not Sanoma's. */
|
|
@@ -79,15 +87,15 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
|
|
|
79
87
|
const state = {
|
|
80
88
|
id: app?.id ?? null,
|
|
81
89
|
name,
|
|
82
|
-
// The declared image is the Worker's binding; the
|
|
83
|
-
image: text.get(TEXT.image) ??
|
|
90
|
+
// The declared image is the Worker's binding; the object starts its copy (`accountImage`).
|
|
91
|
+
image: text.get(TEXT.image) ?? "",
|
|
84
92
|
source: text.get(TEXT.source) ?? "",
|
|
85
93
|
ref: text.get(TEXT.ref) ?? "",
|
|
86
94
|
revision: text.get(TEXT.revision) ?? null,
|
|
87
95
|
port: Number(text.get(TEXT.port) ?? 0),
|
|
88
96
|
...(served && { domains: domainsOf(served) }),
|
|
89
97
|
url,
|
|
90
|
-
healthy: checkHealth && app !== undefined &&
|
|
98
|
+
healthy: checkHealth && app !== undefined && "revision" in (await health(cf, url, false)),
|
|
91
99
|
};
|
|
92
100
|
const secrets = bindings.filter((b) => b.type === "secret_text").map((b) => b.name);
|
|
93
101
|
return { state, secrets };
|
|
@@ -121,13 +129,41 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
|
|
|
121
129
|
const until = Date.now() + startTimeoutMs;
|
|
122
130
|
for (;;) {
|
|
123
131
|
const seen = await health(cf, url, true);
|
|
124
|
-
if (
|
|
132
|
+
if ("revision" in seen && seen.revision === revision)
|
|
125
133
|
return;
|
|
134
|
+
// Not a wait: the container started and ended, and asking again would only start it again.
|
|
135
|
+
if ("exit" in seen && seen.exit)
|
|
136
|
+
throw refused(`${script} did not start at ${revision}: ${seen.error}`);
|
|
126
137
|
if (Date.now() >= until) {
|
|
127
|
-
const why =
|
|
138
|
+
const why = "revision" in seen ? `it runs ${seen.revision}` : seen.error;
|
|
128
139
|
throw refused(`${script} did not answer at ${revision} in ${Math.round(startTimeoutMs / 1000)} s: ${why}`);
|
|
129
140
|
}
|
|
130
|
-
await
|
|
141
|
+
await delay(pollMs);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
/** Waits until the account prepared `image` to run, as Wrangler does before an upload. */
|
|
145
|
+
const prepared = async (cf, image) => {
|
|
146
|
+
const until = Date.now() + PREPARE_TIMEOUT_MS;
|
|
147
|
+
for (;;) {
|
|
148
|
+
let status;
|
|
149
|
+
let reason;
|
|
150
|
+
try {
|
|
151
|
+
({ status, reason } = await cf.prepareImage(image));
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
// One failed look (a timeout, a 5xx) is not the preparation failing: the wait asks again.
|
|
155
|
+
if (!(error instanceof DriverError && error.retryable))
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
if (status === "ready")
|
|
159
|
+
return;
|
|
160
|
+
if (status === "error") {
|
|
161
|
+
throw refused(`preparing ${image}: ${reason ?? "it failed"}`);
|
|
162
|
+
}
|
|
163
|
+
if (Date.now() >= until) {
|
|
164
|
+
throw new DriverError(`cloudflare: preparing ${image}: not ready in ${PREPARE_TIMEOUT_MS / 60_000} min${reason ? ` (${reason})` : ""}`, { retryable: true });
|
|
165
|
+
}
|
|
166
|
+
await delay(pollMs);
|
|
131
167
|
}
|
|
132
168
|
};
|
|
133
169
|
/** Makes the Worker and its application match `desired`, and waits for it: a create and an update alike. */
|
|
@@ -148,11 +184,11 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
|
|
|
148
184
|
if (current && !isOurs(current)) {
|
|
149
185
|
throw refused(`a Worker named ${script} that is not Sanoma's exists: delete it, or name the host otherwise`, "exists");
|
|
150
186
|
}
|
|
151
|
-
// Copied before anything changes, so a copy that fails leaves
|
|
152
|
-
// asks again, which costs a manifest's HEAD once the copy is
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
187
|
+
// Copied and prepared before anything changes, so a copy or a preparation that fails leaves
|
|
188
|
+
// the Worker as it was. Each apply asks again, which costs a manifest's HEAD once the copy is
|
|
189
|
+
// there, and puts back one gone; the object starts only a pinned image of the account's.
|
|
190
|
+
const runs = accountPinned(image, cf.account) ? image : await cf.copyImage(image);
|
|
191
|
+
await prepared(cf, runs);
|
|
156
192
|
const served = domains ? domainsText(domains) : undefined;
|
|
157
193
|
const text = {
|
|
158
194
|
[TEXT.source]: source,
|
|
@@ -172,14 +208,15 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
|
|
|
172
208
|
text: value,
|
|
173
209
|
})),
|
|
174
210
|
];
|
|
175
|
-
|
|
211
|
+
const metadata = {
|
|
176
212
|
main_module: MAIN_MODULE,
|
|
177
213
|
compatibility_date: COMPATIBILITY_DATE,
|
|
178
214
|
bindings,
|
|
179
|
-
containers: [{ class_name: OBJECT_CLASS }],
|
|
180
|
-
|
|
215
|
+
containers: [{ name: script, class_name: OBJECT_CLASS, images: { [IMAGE]: runs } }],
|
|
216
|
+
observability: { enabled: true },
|
|
181
217
|
modules: await workerModules(),
|
|
182
|
-
}
|
|
218
|
+
};
|
|
219
|
+
await cf.upload(script, { ...metadata, ...(current === undefined && { migrations: MIGRATION }) });
|
|
183
220
|
await cf.enableSubdomain(script);
|
|
184
221
|
let app = await cf.application(script);
|
|
185
222
|
if (!app) {
|
|
@@ -187,10 +224,13 @@ export function containerOps(api, { startTimeoutMs, pollMs }) {
|
|
|
187
224
|
const namespace = (await cf.bindings(script))?.find((b) => b.name === NAMESPACE)?.namespace_id;
|
|
188
225
|
if (!namespace)
|
|
189
226
|
throw refused(`${script}: Cloudflare names no namespace for its ${NAMESPACE} binding`);
|
|
190
|
-
app = await cf.createApplication(script,
|
|
227
|
+
app = await cf.createApplication(script, namespace);
|
|
228
|
+
// The object learns which application backs its namespace from a deployment made after
|
|
229
|
+
// the application exists: without this second upload every start answers "There is no
|
|
230
|
+
// container application assigned to this Durable Object namespace", for good (found live
|
|
231
|
+
// 2026-10-29; a Worker deployed again after the application started at once).
|
|
232
|
+
await cf.upload(script, metadata);
|
|
191
233
|
}
|
|
192
|
-
else if (app.image !== runs)
|
|
193
|
-
await cf.rollout(app.id, runs);
|
|
194
234
|
await started(cf, script, url, revision);
|
|
195
235
|
const state = {
|
|
196
236
|
id: app.id,
|
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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"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -6,6 +6,13 @@ export declare const CLOUDFLARE_REGISTRY = "registry.cloudflare.com";
|
|
|
6
6
|
* (`ghcr.io/sanoma-ai/runtime:0.8.1` → `registry.cloudflare.com/<account>/sanoma-ai-runtime:0.8.1`).
|
|
7
7
|
*/
|
|
8
8
|
export declare function accountImage(image: string, account: string, registry?: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* True when `image` is in the account's registry and pinned by digest: what the application runs
|
|
11
|
+
* as it is, with nothing to copy or ask.
|
|
12
|
+
*/
|
|
13
|
+
export declare function accountPinned(image: string, account: string, registry?: string): boolean;
|
|
14
|
+
/** `image`'s repository at `digest`: `<registry>/<path>@sha256:…`, the one reference the application takes. */
|
|
15
|
+
export declare function pinImage(image: string, digest: string): string;
|
|
9
16
|
/** Where a copy goes: the account's registry, and the temporary credentials that push to it. */
|
|
10
17
|
export interface CopyTarget {
|
|
11
18
|
account: string;
|
|
@@ -16,9 +23,12 @@ export interface CopyTarget {
|
|
|
16
23
|
}
|
|
17
24
|
/**
|
|
18
25
|
* Copies `image` into the account's registry as `accountImage(image)`, unless the target's
|
|
19
|
-
* manifest by that tag has the source's digest already
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
26
|
+
* manifest by that tag has the source's digest already, and returns the copy pinned by that
|
|
27
|
+
* digest (`pinImage`). Each blob the target lacks is streamed from the source; the manifest goes
|
|
28
|
+
* last, its bytes and media type unchanged, so its digest is the source's. An image in the
|
|
29
|
+
* account's registry already is not copied: pinned by digest it is returned as it is, by a tag
|
|
30
|
+
* its manifest's digest is asked for. Each request may take `timeoutMs` (default ten minutes: a
|
|
31
|
+
* layer streams through). A failure is a `DriverError`, retryable as its status is; the
|
|
32
|
+
* credentials are in no message.
|
|
23
33
|
*/
|
|
24
|
-
export declare function copyImage(image: string, target: CopyTarget, timeoutMs?: number): Promise<
|
|
34
|
+
export declare function copyImage(image: string, target: CopyTarget, timeoutMs?: number): Promise<string>;
|
package/dist/registry.js
CHANGED
|
@@ -2,10 +2,11 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import { DriverError, errorMessage, retryableStatus } from "@sanoma-ai/workflows";
|
|
3
3
|
/*
|
|
4
4
|
* The runtime image copied into the account's registry, registry to registry over the OCI
|
|
5
|
-
* distribution API with `fetch`, no Docker: a container application
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* distribution API with `fetch`, no Docker: a container application of the `durable_object`
|
|
6
|
+
* scheduling policy runs only an image of its own account's registry, pinned by digest, which
|
|
7
|
+
* Cloudflare pulls without a limit and caches. The source is pulled anonymously
|
|
8
|
+
* (`ghcr.io/sanoma-ai/runtime`, public), the target pushed to with the temporary credentials the
|
|
9
|
+
* driver gets from Cloudflare.
|
|
9
10
|
*/
|
|
10
11
|
/** Cloudflare's registry. An image already in the account's runs as declared; any other is copied in. */
|
|
11
12
|
export const CLOUDFLARE_REGISTRY = "registry.cloudflare.com";
|
|
@@ -44,20 +45,38 @@ export function accountImage(image, account, registry = CLOUDFLARE_REGISTRY) {
|
|
|
44
45
|
const { name, sep, reference } = parse(image);
|
|
45
46
|
return `${registry}/${account}/${name.replaceAll("/", "-")}${sep}${reference}`;
|
|
46
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* True when `image` is in the account's registry and pinned by digest: what the application runs
|
|
50
|
+
* as it is, with nothing to copy or ask.
|
|
51
|
+
*/
|
|
52
|
+
export function accountPinned(image, account, registry = CLOUDFLARE_REGISTRY) {
|
|
53
|
+
return image.startsWith(`${registry}/${account}/`) && parse(image).sep === "@";
|
|
54
|
+
}
|
|
55
|
+
/** `image`'s repository at `digest`: `<registry>/<path>@sha256:…`, the one reference the application takes. */
|
|
56
|
+
export function pinImage(image, digest) {
|
|
57
|
+
const { host, name } = parse(image);
|
|
58
|
+
return `${host}/${name}@${digest}`;
|
|
59
|
+
}
|
|
47
60
|
/** A registry on this machine is spoken to over HTTP, as Docker does; any other over HTTPS. */
|
|
48
61
|
const origin = (host) => `${/^(localhost|127\.0\.0\.1)(:\d+)?$/.test(host) ? "http" : "https"}://${host}`;
|
|
49
62
|
/**
|
|
50
63
|
* Copies `image` into the account's registry as `accountImage(image)`, unless the target's
|
|
51
|
-
* manifest by that tag has the source's digest already
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
64
|
+
* manifest by that tag has the source's digest already, and returns the copy pinned by that
|
|
65
|
+
* digest (`pinImage`). Each blob the target lacks is streamed from the source; the manifest goes
|
|
66
|
+
* last, its bytes and media type unchanged, so its digest is the source's. An image in the
|
|
67
|
+
* account's registry already is not copied: pinned by digest it is returned as it is, by a tag
|
|
68
|
+
* its manifest's digest is asked for. Each request may take `timeoutMs` (default ten minutes: a
|
|
69
|
+
* layer streams through). A failure is a `DriverError`, retryable as its status is; the
|
|
70
|
+
* credentials are in no message.
|
|
55
71
|
*/
|
|
56
72
|
export async function copyImage(image, target, timeoutMs = 10 * 60_000) {
|
|
57
73
|
const source = parse(image);
|
|
58
|
-
const
|
|
74
|
+
const copy = accountImage(image, target.account, target.registry);
|
|
75
|
+
const to = parse(copy);
|
|
59
76
|
const ref = source.reference;
|
|
60
77
|
const refuse = (why) => new DriverError(`cloudflare: copying ${image}: ${why}`, { retryable: false });
|
|
78
|
+
if (accountPinned(image, target.account, target.registry))
|
|
79
|
+
return image;
|
|
61
80
|
// Docker Hub is not copied from: its API is on another host, and its pulls are limited.
|
|
62
81
|
if (!/[.:]/.test(source.host) || source.host === "docker.io") {
|
|
63
82
|
throw refuse("name the registry it is in, not Docker Hub: ghcr.io/sanoma-ai/runtime:<version>");
|
|
@@ -115,6 +134,20 @@ export async function copyImage(image, target, timeoutMs = 10 * 60_000) {
|
|
|
115
134
|
throw refuse(`${url.origin}${url.pathname} gave no token`);
|
|
116
135
|
return { authorization: `Bearer ${token ?? access_token}` };
|
|
117
136
|
};
|
|
137
|
+
const basic = `Basic ${Buffer.from(`${target.username}:${target.password}`).toString("base64")}`;
|
|
138
|
+
const into = `${origin(to.host)}/v2/${to.name}`;
|
|
139
|
+
if (copy === image) {
|
|
140
|
+
// In the account by a tag (pushed by hand): only its digest is asked for.
|
|
141
|
+
const auth = await authorize(to.host, `repository:${to.name}:pull`, basic);
|
|
142
|
+
const there = await ask(`${into}/manifests/${ref}`, {
|
|
143
|
+
method: "HEAD",
|
|
144
|
+
headers: { ...auth, accept: MANIFESTS.join(", ") },
|
|
145
|
+
});
|
|
146
|
+
const digest = there.headers.get("docker-content-digest");
|
|
147
|
+
if (!digest?.startsWith("sha256:"))
|
|
148
|
+
throw refuse("the account's registry named no digest for it");
|
|
149
|
+
return pinImage(image, digest);
|
|
150
|
+
}
|
|
118
151
|
const pull = await authorize(source.host, `repository:${source.name}:pull`);
|
|
119
152
|
const from = `${origin(source.host)}/v2/${source.name}`;
|
|
120
153
|
const got = await send(`${from}/manifests/${ref}`, { headers: { ...pull, accept: MANIFESTS.join(", ") } });
|
|
@@ -125,12 +158,10 @@ export async function copyImage(image, target, timeoutMs = 10 * 60_000) {
|
|
|
125
158
|
const digest = `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
|
|
126
159
|
if (source.sep === "@" && digest !== ref)
|
|
127
160
|
throw refuse(`its registry answered a manifest of digest ${digest}`);
|
|
128
|
-
const basic = `Basic ${Buffer.from(`${target.username}:${target.password}`).toString("base64")}`;
|
|
129
161
|
const push = await authorize(to.host, `repository:${to.name}:pull,push`, basic);
|
|
130
|
-
const into = `${origin(to.host)}/v2/${to.name}`;
|
|
131
162
|
const there = await ask(`${into}/manifests/${ref}`, { method: "HEAD", headers: { ...push, accept: mediaType } }, [404]);
|
|
132
163
|
if (there.ok && there.headers.get("docker-content-digest") === digest)
|
|
133
|
-
return;
|
|
164
|
+
return pinImage(copy, digest);
|
|
134
165
|
const manifest = JSON.parse(new TextDecoder().decode(bytes));
|
|
135
166
|
for (const { digest: blob, size } of [manifest.config, ...manifest.layers]) {
|
|
136
167
|
const head = await ask(`${into}/blobs/${blob}`, { method: "HEAD", headers: push }, [404]);
|
|
@@ -156,5 +187,6 @@ export async function copyImage(image, target, timeoutMs = 10 * 60_000) {
|
|
|
156
187
|
headers: { ...push, "content-type": mediaType },
|
|
157
188
|
body: bytes,
|
|
158
189
|
});
|
|
190
|
+
return pinImage(copy, digest);
|
|
159
191
|
}
|
|
160
192
|
//# sourceMappingURL=registry.js.map
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAElF
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/steps.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { defineSteps } from "@sanoma-ai/workflows";
|
|
2
2
|
import { cloudflareOps } from "./connector.js";
|
|
3
3
|
const { create } = cloudflareOps.container;
|
|
4
|
-
/** The runtime image the steps' containers name: one already in
|
|
5
|
-
const IMAGE = "registry.cloudflare.com/0123456789abcdef0123456789abcdef/sanoma-ai-runtime:
|
|
4
|
+
/** The runtime image the steps' containers name: one already in the account's registry, pinned by digest, so nothing copies or asks for it. */
|
|
5
|
+
const IMAGE = "registry.cloudflare.com/0123456789abcdef0123456789abcdef/sanoma-ai-runtime@sha256:7777777777777777777777777777777777777777777777777777777777777777";
|
|
6
6
|
/**
|
|
7
7
|
* Cloudflare's steps for Gherkin tests: a company's container before the run (named `host`, so
|
|
8
8
|
* an operation's own test can use `$host.state.url`), its secrets carrying the wakeup token.
|
package/dist/steps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../src/steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../src/steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC;AAE3C,+IAA+I;AAC/I,MAAM,KAAK,GACT,oJAAoJ,CAAC;AAEvJ;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACrE,KAAK,CAAC,0DAA0D,EAAE,CAAC,IAAY,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC;QACrG,EAAE,EAAE,MAAM;QACV,KAAK,EAAE;YACL,OAAO,EAAE;gBACP,IAAI;gBACJ,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,2BAA2B,IAAI,MAAM;gBAC7C,GAAG,EAAE,MAAM;gBACX,QAAQ;gBACR,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;aACrF;SACF;QACD,EAAE,EAAE,MAAM;KACX,CAAC,CAAC,CAAC;AACN,CAAC,CAAC,CAAC"}
|
package/dist/worker.d.ts
CHANGED
|
@@ -9,4 +9,4 @@ export interface WorkerModule {
|
|
|
9
9
|
}
|
|
10
10
|
/** The Worker's modules, read from the package once. */
|
|
11
11
|
export declare function workerModules(): Promise<WorkerModule[]>;
|
|
12
|
-
export { HEALTH_PATH, INACTIVITY_MS, Instance, NAMESPACE, type ObjectState, WAKE_PATH, worker, } from "../worker/instance.js";
|
|
12
|
+
export { HEALTH_PATH, IMAGE, INACTIVITY_MS, Instance, NAMESPACE, type ObjectState, WAKE_PATH, worker, } from "../worker/instance.js";
|
package/dist/worker.js
CHANGED
|
@@ -17,5 +17,5 @@ export function workerModules() {
|
|
|
17
17
|
});
|
|
18
18
|
return modules;
|
|
19
19
|
}
|
|
20
|
-
export { HEALTH_PATH, INACTIVITY_MS, Instance, NAMESPACE, WAKE_PATH, worker, } from "../worker/instance.js";
|
|
20
|
+
export { HEALTH_PATH, IMAGE, INACTIVITY_MS, Instance, NAMESPACE, WAKE_PATH, worker, } from "../worker/instance.js";
|
|
21
21
|
//# sourceMappingURL=worker.js.map
|
package/dist/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,+FAA+F;AAC/F,uEAAuE;AAEvE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAEtD,uFAAuF;AACvF,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,6CAA6C;AAC7C,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,aAAa,CAAU,CAAC;AAEtD,gGAAgG;AAChG,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAQ7C,IAAI,OAA4C,CAAC;AAEjD,wDAAwD;AACxD,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,OAAO,CAAC,GAAG,CACrB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAChG,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACvB,OAAO,GAAG,SAAS,CAAC;QACpB,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EACL,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAS,EAET,SAAS,EACT,MAAM,GACP,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,+FAA+F;AAC/F,uEAAuE;AAEvE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAEtD,uFAAuF;AACvF,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,6CAA6C;AAC7C,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,aAAa,CAAU,CAAC;AAEtD,gGAAgG;AAChG,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAQ7C,IAAI,OAA4C,CAAC;AAEjD,wDAAwD;AACxD,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,OAAO,CAAC,GAAG,CACrB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAChG,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACvB,OAAO,GAAG,SAAS,CAAC;QACpB,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EACL,WAAW,EACX,KAAK,EACL,aAAa,EACb,QAAQ,EACR,SAAS,EAET,SAAS,EACT,MAAM,GACP,MAAM,uBAAuB,CAAC"}
|
|
@@ -4,13 +4,13 @@ Feature: Cloudflare containers and alarms
|
|
|
4
4
|
replies written from Cloudflare's API reference (test/fixtures/, named after the scenario),
|
|
5
5
|
unless tagged @fake-only.
|
|
6
6
|
|
|
7
|
-
Scenario: Create
|
|
7
|
+
Scenario: Create a container
|
|
8
8
|
When cloudflare.container.create is called with
|
|
9
9
|
"""
|
|
10
10
|
{
|
|
11
11
|
"desired": {
|
|
12
12
|
"name": "company",
|
|
13
|
-
"image": "registry.cloudflare.com/0123456789abcdef0123456789abcdef/sanoma-ai-runtime:
|
|
13
|
+
"image": "registry.cloudflare.com/0123456789abcdef0123456789abcdef/sanoma-ai-runtime@sha256:7777777777777777777777777777777777777777777777777777777777777777",
|
|
14
14
|
"source": "https://github.com/acme/company.git",
|
|
15
15
|
"ref": "main",
|
|
16
16
|
"revision": "abc123",
|
|
@@ -33,7 +33,7 @@ Feature: Cloudflare containers and alarms
|
|
|
33
33
|
"gone": false,
|
|
34
34
|
"state": {
|
|
35
35
|
"name": "company",
|
|
36
|
-
"image": "registry.cloudflare.com/0123456789abcdef0123456789abcdef/sanoma-ai-runtime:
|
|
36
|
+
"image": "registry.cloudflare.com/0123456789abcdef0123456789abcdef/sanoma-ai-runtime@sha256:7777777777777777777777777777777777777777777777777777777777777777",
|
|
37
37
|
"source": "https://github.com/acme/company.git",
|
|
38
38
|
"ref": "main",
|
|
39
39
|
"revision": "abc123",
|
|
@@ -51,7 +51,7 @@ Feature: Cloudflare containers and alarms
|
|
|
51
51
|
"id": "company",
|
|
52
52
|
"desired": {
|
|
53
53
|
"name": "company",
|
|
54
|
-
"image": "registry.cloudflare.com/0123456789abcdef0123456789abcdef/sanoma-ai-runtime:
|
|
54
|
+
"image": "registry.cloudflare.com/0123456789abcdef0123456789abcdef/sanoma-ai-runtime@sha256:8888888888888888888888888888888888888888888888888888888888888888",
|
|
55
55
|
"source": "https://github.com/acme/company.git",
|
|
56
56
|
"ref": "main",
|
|
57
57
|
"revision": "abc123",
|
|
@@ -62,7 +62,7 @@ Feature: Cloudflare containers and alarms
|
|
|
62
62
|
"""
|
|
63
63
|
Then it returns
|
|
64
64
|
"""
|
|
65
|
-
{ "action": "update", "replace": [], "planned": { "image": "registry.cloudflare.com/0123456789abcdef0123456789abcdef/sanoma-ai-runtime:
|
|
65
|
+
{ "action": "update", "replace": [], "planned": { "image": "registry.cloudflare.com/0123456789abcdef0123456789abcdef/sanoma-ai-runtime@sha256:8888888888888888888888888888888888888888888888888888888888888888" } }
|
|
66
66
|
"""
|
|
67
67
|
|
|
68
68
|
Scenario: Delete
|