@sponson/adapters 0.4.0 → 0.5.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 +1 -1
- package/dist/algolia.d.ts +6 -0
- package/dist/algolia.js +151 -0
- package/dist/algolia.js.map +1 -0
- package/dist/clerk.js +1 -1
- package/dist/clerk.js.map +1 -1
- package/dist/cloudflare.d.ts +25 -0
- package/dist/cloudflare.js +310 -0
- package/dist/cloudflare.js.map +1 -0
- package/dist/common.d.ts +2 -6
- package/dist/common.js.map +1 -1
- package/dist/digest.d.ts +46 -0
- package/dist/digest.js +129 -0
- package/dist/digest.js.map +1 -0
- package/dist/digitalocean.d.ts +5 -0
- package/dist/digitalocean.js +243 -0
- package/dist/digitalocean.js.map +1 -0
- package/dist/http-adapter-action.d.ts +63 -0
- package/dist/http-adapter-action.js +369 -0
- package/dist/http-adapter-action.js.map +1 -0
- package/dist/http-adapter-auth.d.ts +88 -0
- package/dist/http-adapter-auth.js +437 -0
- package/dist/http-adapter-auth.js.map +1 -0
- package/dist/http-adapter-client.d.ts +51 -0
- package/dist/http-adapter-client.js +156 -0
- package/dist/http-adapter-client.js.map +1 -0
- package/dist/http-adapter-graphql.d.ts +39 -0
- package/dist/http-adapter-graphql.js +157 -0
- package/dist/http-adapter-graphql.js.map +1 -0
- package/dist/http-adapter-list.d.ts +33 -0
- package/dist/http-adapter-list.js +421 -0
- package/dist/http-adapter-list.js.map +1 -0
- package/dist/http-adapter-resource.d.ts +29 -0
- package/dist/http-adapter-resource.js +462 -0
- package/dist/http-adapter-resource.js.map +1 -0
- package/dist/http-adapter-spec.d.ts +216 -0
- package/dist/http-adapter-spec.js +660 -0
- package/dist/http-adapter-spec.js.map +1 -0
- package/dist/http-adapter.d.ts +16 -0
- package/dist/http-adapter.js +28 -0
- package/dist/http-adapter.js.map +1 -0
- package/dist/http.d.ts +61 -2
- package/dist/http.js +79 -18
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.js +24 -2
- package/dist/index.js.map +1 -1
- package/dist/launchdarkly.d.ts +15 -0
- package/dist/launchdarkly.js +337 -0
- package/dist/launchdarkly.js.map +1 -0
- package/dist/manual.d.ts +13 -0
- package/dist/manual.js +201 -0
- package/dist/manual.js.map +1 -0
- package/dist/neon.js +1 -1
- package/dist/neon.js.map +1 -1
- package/dist/netlify.d.ts +18 -0
- package/dist/netlify.js +436 -0
- package/dist/netlify.js.map +1 -0
- package/dist/planetscale.d.ts +10 -0
- package/dist/planetscale.js +311 -0
- package/dist/planetscale.js.map +1 -0
- package/dist/providers.d.ts +26 -0
- package/dist/providers.js +36 -0
- package/dist/providers.js.map +1 -0
- package/dist/recipes.d.ts +167 -0
- package/dist/recipes.js +246 -0
- package/dist/recipes.js.map +1 -0
- package/dist/secrets.d.ts +44 -0
- package/dist/secrets.js +279 -0
- package/dist/secrets.js.map +1 -1
- package/dist/sigv4.d.ts +56 -0
- package/dist/sigv4.js +118 -0
- package/dist/sigv4.js.map +1 -0
- package/dist/supabase.d.ts +9 -0
- package/dist/supabase.js +385 -0
- package/dist/supabase.js.map +1 -0
- package/dist/vercel.js +1 -1
- package/dist/vercel.js.map +1 -1
- package/dist/xata.d.ts +8 -0
- package/dist/xata.js +142 -0
- package/dist/xata.js.map +1 -0
- package/dist/xml.d.ts +25 -0
- package/dist/xml.js +211 -0
- package/dist/xml.js.map +1 -0
- package/package.json +11 -4
- package/recipes/amplify.yaml +147 -0
- package/recipes/auth0.yaml +178 -0
- package/recipes/azure_swa.yaml +116 -0
- package/recipes/cloud_run.yaml +97 -0
- package/recipes/cloudflare.yaml +108 -0
- package/recipes/cockroachdb.yaml +132 -0
- package/recipes/configcat.yaml +123 -0
- package/recipes/datadog.yaml +136 -0
- package/recipes/firebase.yaml +84 -0
- package/recipes/flagsmith.yaml +98 -0
- package/recipes/fly.yaml +97 -0
- package/recipes/fly_machines.yaml +67 -0
- package/recipes/gcs.yaml +102 -0
- package/recipes/github.yaml +123 -0
- package/recipes/growthbook.yaml +124 -0
- package/recipes/heroku.yaml +98 -0
- package/recipes/honeycomb.yaml +89 -0
- package/recipes/inngest.yaml +97 -0
- package/recipes/kinde.yaml +120 -0
- package/recipes/mongodb_atlas.yaml +119 -0
- package/recipes/okta.yaml +177 -0
- package/recipes/posthog.yaml +127 -0
- package/recipes/postmark.yaml +105 -0
- package/recipes/postmark_server.yaml +93 -0
- package/recipes/prisma.yaml +150 -0
- package/recipes/qstash.yaml +134 -0
- package/recipes/railway.yaml +130 -0
- package/recipes/render.yaml +103 -0
- package/recipes/resend.yaml +130 -0
- package/recipes/s3.yaml +108 -0
- package/recipes/sendgrid.yaml +165 -0
- package/recipes/sentry.yaml +158 -0
- package/recipes/split.yaml +121 -0
- package/recipes/statsig.yaml +124 -0
- package/recipes/stripe.yaml +310 -0
- package/recipes/stytch.yaml +113 -0
- package/recipes/svix.yaml +109 -0
- package/recipes/turso.yaml +98 -0
- package/recipes/unleash.yaml +149 -0
- package/recipes/upstash.yaml +130 -0
- package/recipes/vercel.yaml +116 -0
- package/recipes/workos.yaml +70 -0
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# @sponson/adapters
|
|
2
2
|
|
|
3
|
-
The resource adapters and secret sources that ship with [Sponson](https://github.com/MishaBear94/Sponson#readme). `createRegistry()` returns all of them; the [built-in ops](https://github.com/MishaBear94/Sponson/blob/main/docs/plan-format.md#built-in-ops) and [secret schemes](https://github.com/MishaBear94/Sponson/blob/main/docs/plan-format.md#secret-schemes) are listed in the plan format reference.
|
|
3
|
+
The resource adapters and secret sources that ship with [Sponson](https://github.com/MishaBear94/Sponson#readme). `createRegistry()` returns all of them; the [built-in ops](https://github.com/MishaBear94/Sponson/blob/main/docs/plan-format.md#built-in-ops) and [secret schemes](https://github.com/MishaBear94/Sponson/blob/main/docs/plan-format.md#secret-schemes) are listed in the plan format reference. The package also ships the http adapter's [recipes](https://github.com/MishaBear94/Sponson/blob/main/docs/recipes.md) in `recipes/`.
|
|
4
4
|
|
|
5
5
|
Most users want the `sponson` CLI instead. Documentation: <https://sponson.mintlify.site>. Source and issues: [GitHub](https://github.com/MishaBear94/Sponson).
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ResourceAdapter } from "@sponson/core";
|
|
2
|
+
/**
|
|
3
|
+
* The Algolia adapter (`adapter: algolia` in a plan). Registered in `createRegistry()`; needs `ALGOLIA_API_KEY`
|
|
4
|
+
* (with the addObject, deleteIndex and settings ACLs) and `providers.algolia.application_id`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const algoliaAdapter: ResourceAdapter;
|
package/dist/algolia.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Algolia adapter: an index per scope, copied from a template index. The copy is an asynchronous task, so `apply`
|
|
3
|
+
* waits for it to be published before the line counts as applied: that wait is why this is an adapter and not an
|
|
4
|
+
* `http` recipe (ADR 0017, "No polling"). The API assumptions it relies on are numbered AL1… at the top of
|
|
5
|
+
* packages/sim/src/routes/algolia.ts.
|
|
6
|
+
*
|
|
7
|
+
* - Key: `index:<name>`. Id: the index name (Algolia's own identity, AL1). The application is the provider block.
|
|
8
|
+
* - Hash: the name only. What was copied (`copy_from`, `scope`) is not something an index records, so it cannot be
|
|
9
|
+
* compared: changing it later does not copy again, and a console edit of the copy's records or settings is not
|
|
10
|
+
* drift. A deleted index is `missing`, and the next apply copies it again.
|
|
11
|
+
*/
|
|
12
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
13
|
+
import { SponsonError, canonicalJson, markerKind, sha256 } from "@sponson/core";
|
|
14
|
+
// Only the stable authoring API exported from `@sponson/adapters` (listed in CONTRIBUTING.md).
|
|
15
|
+
import { assertNoPending, clientFor, deleteIgnoringNotFound, optionalEnv, paramError, requireEnv, requireProvider, stringParam } from "./common.js";
|
|
16
|
+
import { ShapeError, isObject, isProviderError } from "./http.js";
|
|
17
|
+
const ADAPTER = "algolia";
|
|
18
|
+
/** The environment Algolia reads; declared once, used by the code below and by the generated docs (`about`). */
|
|
19
|
+
const ABOUT = { credentialEnv: "ALGOLIA_API_KEY", baseUrlEnv: "ALGOLIA_API_URL", title: "Algolia", category: "search-payments", detect: { deps: ["algoliasearch", "@algolia/", "instantsearch.js", "react-instantsearch"], env: ["ALGOLIA_*"] } };
|
|
20
|
+
/** How often the copy task is polled, and for how long (milliseconds; overridable for tests). */
|
|
21
|
+
const POLL_MS = { env: "SPONSON_ALGOLIA_POLL_MS", fallback: 1000 };
|
|
22
|
+
const TASK_TIMEOUT_MS = { env: "SPONSON_ALGOLIA_TASK_TIMEOUT_MS", fallback: 5 * 60 * 1000 };
|
|
23
|
+
function msFromEnv(env, s) {
|
|
24
|
+
const raw = optionalEnv(env, s.env);
|
|
25
|
+
const n = Number(raw);
|
|
26
|
+
return raw !== undefined && Number.isFinite(n) && n >= 0 ? n : s.fallback;
|
|
27
|
+
}
|
|
28
|
+
/** The client for the application in `providers.algolia.application_id` (AL2: `https://<app id>.algolia.net`). */
|
|
29
|
+
function client(actx) {
|
|
30
|
+
const key = requireEnv(actx.env, ABOUT.credentialEnv, ADAPTER);
|
|
31
|
+
const appId = requireProvider(actx, "application_id", ADAPTER);
|
|
32
|
+
const baseUrl = optionalEnv(actx.env, ABOUT.baseUrlEnv) ?? `https://${appId}.algolia.net`;
|
|
33
|
+
return clientFor(actx, ADAPTER, { baseUrl, token: key, authHeader: "header:x-algolia-api-key", headers: { "X-Algolia-Application-Id": appId } });
|
|
34
|
+
}
|
|
35
|
+
function enc(s) {
|
|
36
|
+
return encodeURIComponent(s);
|
|
37
|
+
}
|
|
38
|
+
const PREFIX = "index:";
|
|
39
|
+
function indexRecord(name) {
|
|
40
|
+
return { key: `${PREFIX}${name}`, id: name, hash: sha256(canonicalJson({ name })), label: `Algolia index ${name}` };
|
|
41
|
+
}
|
|
42
|
+
function outputsOf(name) {
|
|
43
|
+
return { name };
|
|
44
|
+
}
|
|
45
|
+
/** Whether the index exists: its settings answer 200, or 404 (AL4). Reads only. */
|
|
46
|
+
async function exists(api, name) {
|
|
47
|
+
try {
|
|
48
|
+
await api.get(`/1/indexes/${enc(name)}/settings`);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
if (isProviderError(e, "PROVIDER_NOT_FOUND"))
|
|
53
|
+
return false;
|
|
54
|
+
throw e;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const SCOPES = ["settings", "synonyms", "rules"];
|
|
58
|
+
/** The copy's `scope`: absent (everything, records included), or a list of settings, synonyms and rules (AL3). */
|
|
59
|
+
function scopeParam(v) {
|
|
60
|
+
if (v === undefined || v === null)
|
|
61
|
+
return undefined;
|
|
62
|
+
if (!Array.isArray(v) || v.length === 0 || !v.every((s) => typeof s === "string" && SCOPES.includes(s))) {
|
|
63
|
+
throw paramError(ADAPTER, `param \`scope\` must be a non-empty list of ${SCOPES.join(", ")} (left out: records too)`, "scope");
|
|
64
|
+
}
|
|
65
|
+
return v;
|
|
66
|
+
}
|
|
67
|
+
/** The task id of a copy answer (AL3). */
|
|
68
|
+
function taskOf(body) {
|
|
69
|
+
if (!isObject(body) || typeof body.taskID !== "number")
|
|
70
|
+
throw new ShapeError("expected `{ taskID }`");
|
|
71
|
+
return body.taskID;
|
|
72
|
+
}
|
|
73
|
+
/** Poll the copy task until it is published (AL5); WAIT_TIMEOUT when it is not, which the next run resumes. */
|
|
74
|
+
async function waitPublished(actx, api, name, task) {
|
|
75
|
+
const deadline = Date.now() + msFromEnv(actx.env, TASK_TIMEOUT_MS);
|
|
76
|
+
for (;;) {
|
|
77
|
+
const status = await api.get(`/1/indexes/${enc(name)}/task/${task}`, (b) => {
|
|
78
|
+
if (!isObject(b) || typeof b.status !== "string")
|
|
79
|
+
throw new ShapeError("expected `{ status }`");
|
|
80
|
+
return b.status;
|
|
81
|
+
});
|
|
82
|
+
if (status === "published")
|
|
83
|
+
return;
|
|
84
|
+
if (Date.now() > deadline) {
|
|
85
|
+
throw new SponsonError("WAIT_TIMEOUT", `algolia: the copy into index ${name} (task ${task}) is not published after ${msFromEnv(actx.env, TASK_TIMEOUT_MS)}ms (${TASK_TIMEOUT_MS.env}); run again to keep waiting`, { adapter: ADAPTER, index: name });
|
|
86
|
+
}
|
|
87
|
+
actx.log(`copy into ${name} not published yet`);
|
|
88
|
+
await sleep(msFromEnv(actx.env, POLL_MS));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function names(params) {
|
|
92
|
+
const name = stringParam(params, "name", ADAPTER);
|
|
93
|
+
const source = stringParam(params, "copy_from", ADAPTER);
|
|
94
|
+
if (name === source)
|
|
95
|
+
throw paramError(ADAPTER, "`name` and `copy_from` are the same index: the copy would overwrite its own template", "name");
|
|
96
|
+
return { name, source };
|
|
97
|
+
}
|
|
98
|
+
const index = {
|
|
99
|
+
outputs: { name: { available: "immediate" } },
|
|
100
|
+
async read(actx, params) {
|
|
101
|
+
if (markerKind(params.name) !== null)
|
|
102
|
+
return null;
|
|
103
|
+
const name = stringParam(params, "name", ADAPTER);
|
|
104
|
+
if (!(await exists(client(actx), name)))
|
|
105
|
+
return null;
|
|
106
|
+
return { resources: [indexRecord(name)], outputs: outputsOf(name) };
|
|
107
|
+
},
|
|
108
|
+
diff(live, params) {
|
|
109
|
+
const name = params.name;
|
|
110
|
+
const key = markerKind(name) !== null ? `${PREFIX}(pending)` : `${PREFIX}${String(name)}`;
|
|
111
|
+
const label = `Algolia index ${String(name)}`;
|
|
112
|
+
if (live?.resources.some((r) => r.key === key))
|
|
113
|
+
return [{ key, kind: "unchanged", label }];
|
|
114
|
+
const source = params.copy_from;
|
|
115
|
+
const after = markerKind(source) !== null ? { state: "pending", ref: String(source) } : { state: "literal", value: `copy of ${String(source)}` };
|
|
116
|
+
return [{ key, kind: "create", label, before: { state: "absent" }, after }];
|
|
117
|
+
},
|
|
118
|
+
async apply(actx, params, live) {
|
|
119
|
+
assertNoPending(params, ADAPTER);
|
|
120
|
+
const { name, source } = names(params);
|
|
121
|
+
const scope = scopeParam(params.scope);
|
|
122
|
+
const key = `${PREFIX}${name}`;
|
|
123
|
+
if (live?.resources.some((r) => r.key === key))
|
|
124
|
+
return { resources: live.resources, outputs: live.outputs, created: [] };
|
|
125
|
+
const api = client(actx);
|
|
126
|
+
// Copying an index that does not exist makes an empty one (AL3): refuse instead of handing out an empty index.
|
|
127
|
+
if (!(await exists(api, source)))
|
|
128
|
+
throw paramError(ADAPTER, `\`copy_from\` index ${source} does not exist in the application`, "copy_from");
|
|
129
|
+
// Announce the copy before sending it. A copy whose answer was lost is sent again by the next run, which
|
|
130
|
+
// overwrites the destination with the template once more (AL3): harmless before anyone wrote to it.
|
|
131
|
+
await actx.intend([key]);
|
|
132
|
+
actx.log(`copy ${source} to ${name}`);
|
|
133
|
+
const task = await api.post(`/1/indexes/${enc(source)}/operation`, { operation: "copy", destination: name, ...(scope ? { scope } : {}) }, taskOf, { idempotent: true });
|
|
134
|
+
await waitPublished(actx, api, name, task);
|
|
135
|
+
return { resources: [indexRecord(name)], outputs: outputsOf(name), created: [key] };
|
|
136
|
+
},
|
|
137
|
+
async destroy(actx, resources) {
|
|
138
|
+
const api = client(actx);
|
|
139
|
+
// Deleting an index that does not exist is ignored (AL6); a 404 is gone all the same.
|
|
140
|
+
// An intent the engine could not locate has no id: nothing is known to exist under it (the engine reports it).
|
|
141
|
+
for (const r of resources)
|
|
142
|
+
if (r.id !== "")
|
|
143
|
+
await deleteIgnoringNotFound(api, `/1/indexes/${enc(r.id)}`);
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* The Algolia adapter (`adapter: algolia` in a plan). Registered in `createRegistry()`; needs `ALGOLIA_API_KEY`
|
|
148
|
+
* (with the addObject, deleteIndex and settings ACLs) and `providers.algolia.application_id`.
|
|
149
|
+
*/
|
|
150
|
+
export const algoliaAdapter = { name: ADAPTER, ops: { index }, about: ABOUT };
|
|
151
|
+
//# sourceMappingURL=algolia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"algolia.js","sourceRoot":"","sources":["../src/algolia.ts"],"names":[],"mappings":"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"}
|
package/dist/clerk.js
CHANGED
|
@@ -2,7 +2,7 @@ import { isPendingMarker, sha256 } from "@sponson/core";
|
|
|
2
2
|
import { assertNoPending, clientFor, deleteIgnoringNotFound, diffValue, optionalEnv, requireEnv, stringParam } from "./common.js";
|
|
3
3
|
import { ShapeError, isObject, isProviderError, listAll, records } from "./http.js";
|
|
4
4
|
/** The environment clerk reads; declared once, used by the code below and by the generated docs. */
|
|
5
|
-
const ABOUT = { credentialEnv: "CLERK_SECRET_KEY", baseUrlEnv: "CLERK_API_URL" };
|
|
5
|
+
const ABOUT = { credentialEnv: "CLERK_SECRET_KEY", baseUrlEnv: "CLERK_API_URL", title: "Clerk", category: "auth", detect: { deps: ["@clerk/"], env: ["CLERK_*"] } };
|
|
6
6
|
/** Clerk's API base URL; `CLERK_API_URL` overrides it (the sim and tests use that). */
|
|
7
7
|
export const CLERK_DEFAULT_API_URL = "https://api.clerk.com/v1";
|
|
8
8
|
/** Page size asked for (the spec's `limit` allows 1–500, default 10). */
|
package/dist/clerk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clerk.js","sourceRoot":"","sources":["../src/clerk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAA+E,MAAM,eAAe,CAAC;AACrI,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,sBAAsB,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClI,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAA6B,MAAM,WAAW,CAAC;AAE/G,oGAAoG;AACpG,MAAM,KAAK,GAAG,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,eAAe,EAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"clerk.js","sourceRoot":"","sources":["../src/clerk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare adapter. One op, `pages_env`: the variables of a Cloudflare Pages project's `preview` or `production`
|
|
3
|
+
* deployment config (`deployment_configs.<env>.env_vars`), plain text (`vars`) and secret (`secrets`).
|
|
4
|
+
*
|
|
5
|
+
* The variables are a map on the project, not objects of their own, so `apply` is read-modify-write: it PATCHes only
|
|
6
|
+
* the keys this line manages (Cloudflare merges the map; `null` deletes a key), as an idempotent PATCH, then re-reads
|
|
7
|
+
* the project to check that what it sent landed and that no other key went missing. API facts and their sources are
|
|
8
|
+
* the numbered assumptions (CF1…) at the top of packages/sim/src/routes/cloudflare.ts.
|
|
9
|
+
*
|
|
10
|
+
* Pages has one set of preview variables shared by every preview deployment (CF8): there are no per-branch values.
|
|
11
|
+
* A key is therefore one resource per environment, `env:<target>:<NAME>`, whatever scope wrote it; a second scope
|
|
12
|
+
* (another pull request) that declares the same key with another value is refused with OWNED_BY_OTHER_SCOPE.
|
|
13
|
+
*
|
|
14
|
+
* Secret values are write-only (CF3): a `secret_text` variable is compared by presence and type, never by value.
|
|
15
|
+
* See `secretHash` and docs/plan-format.md (`cloudflare.pages_env`).
|
|
16
|
+
*/
|
|
17
|
+
import { type ResourceAdapter } from "@sponson/core";
|
|
18
|
+
/** Cloudflare's API base URL (CF1). `CLOUDFLARE_API_URL` overrides it; tests and scenarios point that at the sim. */
|
|
19
|
+
export declare const CLOUDFLARE_DEFAULT_API_URL = "https://api.cloudflare.com/client/v4";
|
|
20
|
+
/**
|
|
21
|
+
* The Cloudflare adapter (`adapter: cloudflare` in a plan): op `pages_env` manages a Pages project's preview or
|
|
22
|
+
* production variables. Needs `CLOUDFLARE_API_TOKEN` (account permission "Cloudflare Pages Edit") and
|
|
23
|
+
* `providers.cloudflare.{account,project}`.
|
|
24
|
+
*/
|
|
25
|
+
export declare const cloudflareAdapter: ResourceAdapter;
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare adapter. One op, `pages_env`: the variables of a Cloudflare Pages project's `preview` or `production`
|
|
3
|
+
* deployment config (`deployment_configs.<env>.env_vars`), plain text (`vars`) and secret (`secrets`).
|
|
4
|
+
*
|
|
5
|
+
* The variables are a map on the project, not objects of their own, so `apply` is read-modify-write: it PATCHes only
|
|
6
|
+
* the keys this line manages (Cloudflare merges the map; `null` deletes a key), as an idempotent PATCH, then re-reads
|
|
7
|
+
* the project to check that what it sent landed and that no other key went missing. API facts and their sources are
|
|
8
|
+
* the numbered assumptions (CF1…) at the top of packages/sim/src/routes/cloudflare.ts.
|
|
9
|
+
*
|
|
10
|
+
* Pages has one set of preview variables shared by every preview deployment (CF8): there are no per-branch values.
|
|
11
|
+
* A key is therefore one resource per environment, `env:<target>:<NAME>`, whatever scope wrote it; a second scope
|
|
12
|
+
* (another pull request) that declares the same key with another value is refused with OWNED_BY_OTHER_SCOPE.
|
|
13
|
+
*
|
|
14
|
+
* Secret values are write-only (CF3): a `secret_text` variable is compared by presence and type, never by value.
|
|
15
|
+
* See `secretHash` and docs/plan-format.md (`cloudflare.pages_env`).
|
|
16
|
+
*/
|
|
17
|
+
import { SponsonError, canonicalJson, markerKind, sha256 } from "@sponson/core";
|
|
18
|
+
import { ABSENT, SENSITIVE, assertNoPending, clientFor, desiredSide, optionalEnv, paramError, requireEnv, requireProvider, stringParam } from "./common.js";
|
|
19
|
+
import { ShapeError, isObject, isProviderError, obj } from "./http.js";
|
|
20
|
+
const ADAPTER = "cloudflare";
|
|
21
|
+
/** The environment Cloudflare reads; declared once, used by the code below and by the generated docs (`about`). */
|
|
22
|
+
const ABOUT = { credentialEnv: "CLOUDFLARE_API_TOKEN", baseUrlEnv: "CLOUDFLARE_API_URL", title: "Cloudflare Pages", category: "deploy", detect: { deps: ["wrangler", "@cloudflare/next-on-pages"], env: ["CLOUDFLARE_*"], files: ["wrangler.json", "wrangler.jsonc", "wrangler.toml"] } };
|
|
23
|
+
/** Cloudflare's API base URL (CF1). `CLOUDFLARE_API_URL` overrides it; tests and scenarios point that at the sim. */
|
|
24
|
+
export const CLOUDFLARE_DEFAULT_API_URL = "https://api.cloudflare.com/client/v4";
|
|
25
|
+
const TARGETS = ["preview", "production"];
|
|
26
|
+
/** The HTTP client and the project's path, from `providers.cloudflare.{account,project}`. */
|
|
27
|
+
function client(actx) {
|
|
28
|
+
const token = requireEnv(actx.env, ABOUT.credentialEnv, ADAPTER);
|
|
29
|
+
const account = requireProvider(actx, "account", ADAPTER);
|
|
30
|
+
const project = requireProvider(actx, "project", ADAPTER);
|
|
31
|
+
return {
|
|
32
|
+
api: clientFor(actx, ADAPTER, { baseUrl: optionalEnv(actx.env, ABOUT.baseUrlEnv) ?? CLOUDFLARE_DEFAULT_API_URL, token }),
|
|
33
|
+
path: `/accounts/${encodeURIComponent(account)}/pages/projects/${encodeURIComponent(project)}`,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// Response shape (CF2): { success, errors, messages, result: project }
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
/** One environment's `env_vars` (nullable in the schema) as a map. A secret's value is dropped whatever it says. */
|
|
40
|
+
function parseVars(v, what) {
|
|
41
|
+
const out = new Map();
|
|
42
|
+
if (v === null || v === undefined)
|
|
43
|
+
return out;
|
|
44
|
+
for (const [name, e] of Object.entries(obj(v, what))) {
|
|
45
|
+
if (e === null)
|
|
46
|
+
continue;
|
|
47
|
+
const entry = obj(e, `${what}.${name}`);
|
|
48
|
+
if (typeof entry.type !== "string")
|
|
49
|
+
throw new ShapeError(`expected ${what}.${name}.type to be a string`);
|
|
50
|
+
const readable = entry.type === "plain_text" && typeof entry.value === "string";
|
|
51
|
+
out.set(name, readable ? { type: entry.type, value: entry.value } : { type: entry.type });
|
|
52
|
+
}
|
|
53
|
+
return out;
|
|
54
|
+
}
|
|
55
|
+
function parseProject(body) {
|
|
56
|
+
const env = obj(body, "the response");
|
|
57
|
+
if (env.success !== true)
|
|
58
|
+
throw new ShapeError("expected `success` to be true");
|
|
59
|
+
const configs = obj(obj(env.result, "`result`").deployment_configs, "`result.deployment_configs`");
|
|
60
|
+
const of = (t) => {
|
|
61
|
+
const c = configs[t];
|
|
62
|
+
return c === null || c === undefined ? new Map() : parseVars(obj(c, `\`deployment_configs.${t}\``).env_vars, `\`deployment_configs.${t}.env_vars\``);
|
|
63
|
+
};
|
|
64
|
+
return { preview: of("preview"), production: of("production") };
|
|
65
|
+
}
|
|
66
|
+
async function readVars(c, target) {
|
|
67
|
+
return (await c.api.get(c.path, parseProject))[target];
|
|
68
|
+
}
|
|
69
|
+
/** PATCH a partial `env_vars` map (CF4): a value sets a key, `null` deletes it, keys not named are left alone. */
|
|
70
|
+
async function patchVars(c, target, vars) {
|
|
71
|
+
// Sets state rather than adding to it, so a dropped connection or a 5xx may be retried.
|
|
72
|
+
await c.api.patch(c.path, { deployment_configs: { [target]: { env_vars: vars } } }, undefined, { idempotent: true });
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Hashes: one canonical form for read, diff and apply
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
/** A plain-text variable: its type and value. */
|
|
78
|
+
function plainHash(value) {
|
|
79
|
+
return sha256(canonicalJson({ type: "plain_text", value }));
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A secret: its type only. Cloudflare never returns a secret's value (CF3) and the adapter API offers no place to
|
|
83
|
+
* keep a fingerprint, so a secret is equal when it exists as `secret_text`. What that means: a value changed in the
|
|
84
|
+
* Cloudflare dashboard is not seen as drift; a changed value in the plan is not written unless the line sets
|
|
85
|
+
* `rewrite_secrets: true` (then every apply sends the secrets again). Deleting it, or turning it into plain text,
|
|
86
|
+
* is seen.
|
|
87
|
+
*/
|
|
88
|
+
function secretHash() {
|
|
89
|
+
return sha256(canonicalJson({ type: "secret_text" }));
|
|
90
|
+
}
|
|
91
|
+
function liveHash(v) {
|
|
92
|
+
if (v.type === "plain_text")
|
|
93
|
+
return plainHash(v.value ?? "");
|
|
94
|
+
if (v.type === "secret_text")
|
|
95
|
+
return secretHash();
|
|
96
|
+
return sha256(canonicalJson({ type: v.type }));
|
|
97
|
+
}
|
|
98
|
+
function mapParam(params, name) {
|
|
99
|
+
const v = params[name];
|
|
100
|
+
if (v === undefined || v === null)
|
|
101
|
+
return {};
|
|
102
|
+
if (!isObject(v))
|
|
103
|
+
throw paramError(ADAPTER, `param \`${name}\` must be an object of NAME → value`, name);
|
|
104
|
+
return v;
|
|
105
|
+
}
|
|
106
|
+
function envScope(params) {
|
|
107
|
+
const target = stringParam(params, "target", ADAPTER, "preview");
|
|
108
|
+
if (!TARGETS.includes(target))
|
|
109
|
+
throw paramError(ADAPTER, `param \`target\` must be one of ${TARGETS.join(", ")} (got ${JSON.stringify(target)})`, "target");
|
|
110
|
+
const rewrite = params.rewrite_secrets;
|
|
111
|
+
if (rewrite !== undefined && rewrite !== null && typeof rewrite !== "boolean")
|
|
112
|
+
throw paramError(ADAPTER, "param `rewrite_secrets` must be true or false", "rewrite_secrets");
|
|
113
|
+
const values = new Map();
|
|
114
|
+
for (const [name, value] of Object.entries(mapParam(params, "vars")))
|
|
115
|
+
values.set(name, { value, type: "plain_text" });
|
|
116
|
+
for (const [name, value] of Object.entries(mapParam(params, "secrets"))) {
|
|
117
|
+
if (values.has(name))
|
|
118
|
+
throw paramError(ADAPTER, `${name} is in both \`vars\` and \`secrets\`; a variable is either plain text or secret`, "secrets");
|
|
119
|
+
values.set(name, { value, type: "secret_text" });
|
|
120
|
+
}
|
|
121
|
+
for (const name of values.keys())
|
|
122
|
+
if (name === "")
|
|
123
|
+
throw paramError(ADAPTER, "a variable name must not be empty", "vars");
|
|
124
|
+
return { target: target, values, rewriteSecrets: rewrite === true };
|
|
125
|
+
}
|
|
126
|
+
/** The target a run writes by default: production under `--env production`, preview otherwise. */
|
|
127
|
+
function targetFor(ctx) {
|
|
128
|
+
return ctx.env === "production" ? "production" : "preview";
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Pages has exactly two variable sets, so the line must write the run's own environment. Ownership between scopes
|
|
132
|
+
* is decided among the scopes of one Sponson environment; a `target: production` line applied under `--env preview`
|
|
133
|
+
* would be invisible to the production scopes' ledgers (and a preview pull request's destroy would delete it).
|
|
134
|
+
*/
|
|
135
|
+
function assertRunEnvironment(scope, ctx) {
|
|
136
|
+
if (scope.target === ctx.env)
|
|
137
|
+
return;
|
|
138
|
+
throw paramError(ADAPTER, `this line writes the Pages \`${scope.target}\` variables but the run's environment is \`${ctx.env}\`. Pages variables are shared by every deployment of an environment, so Sponson only writes them from a run of that environment: run with \`--env ${scope.target}\`, or limit the line with \`environments: [${scope.target}]\`.`, "target");
|
|
139
|
+
}
|
|
140
|
+
/** Identity: the environment and the name. No branch or scope: every preview deployment shares the set (CF8). */
|
|
141
|
+
function varKey(target, name) {
|
|
142
|
+
return `env:${target}:${name}`;
|
|
143
|
+
}
|
|
144
|
+
/** Inverse of varKey. A target never contains `:`; a name may. */
|
|
145
|
+
function parseVarKey(key) {
|
|
146
|
+
const m = /^env:(preview|production):(.+)$/.exec(key);
|
|
147
|
+
if (!m)
|
|
148
|
+
throw new SponsonError("INTERNAL", `${ADAPTER}: \`${key}\` is not a pages_env key`, { adapter: ADAPTER, key });
|
|
149
|
+
return { target: m[1], name: m[2] };
|
|
150
|
+
}
|
|
151
|
+
const SECRET_LABEL = ", secret)";
|
|
152
|
+
function varLabel(target, name, type) {
|
|
153
|
+
return `${name} (Pages ${target}${type === "secret_text" ? SECRET_LABEL : ")"}`;
|
|
154
|
+
}
|
|
155
|
+
function varRecord(target, name, v) {
|
|
156
|
+
return { key: varKey(target, name), id: name, hash: liveHash(v), label: varLabel(target, name, v.type) };
|
|
157
|
+
}
|
|
158
|
+
/** One declared variable's diff against its live record. */
|
|
159
|
+
function diffVar(scope, name, desired, live) {
|
|
160
|
+
const key = varKey(scope.target, name);
|
|
161
|
+
const label = varLabel(scope.target, name, desired.type);
|
|
162
|
+
const secret = desired.type === "secret_text";
|
|
163
|
+
const marker = markerKind(desired.value);
|
|
164
|
+
if (marker === "keep") {
|
|
165
|
+
if (live)
|
|
166
|
+
return { key, kind: "unchanged", label };
|
|
167
|
+
throw paramError(ADAPTER, `${label} is declared \`{ keep: true }\` but does not exist, so there is no value to keep. Give it a value or remove it.`, secret ? "secrets" : "vars");
|
|
168
|
+
}
|
|
169
|
+
const after = desiredSide(desired.value, secret);
|
|
170
|
+
if (!live)
|
|
171
|
+
return { key, kind: "create", label, before: ABSENT, after };
|
|
172
|
+
if (marker === null && !(secret && scope.rewriteSecrets)) {
|
|
173
|
+
const want = secret ? secretHash() : plainHash(String(desired.value));
|
|
174
|
+
if (live.hash === want)
|
|
175
|
+
return { key, kind: "unchanged", label };
|
|
176
|
+
}
|
|
177
|
+
return { key, kind: "update", label, before: SENSITIVE, after };
|
|
178
|
+
}
|
|
179
|
+
/** After a write: every variable sent is there as sent, and every other variable that was there still is. */
|
|
180
|
+
function verifyWrite(c, target, sent, before, after) {
|
|
181
|
+
const wrong = [...sent].filter(([name, s]) => {
|
|
182
|
+
const v = after.get(name);
|
|
183
|
+
return !v || v.type !== s.type || (s.type === "plain_text" && v.value !== s.value);
|
|
184
|
+
});
|
|
185
|
+
const lost = [...before.keys()].filter((name) => !sent.has(name) && !after.has(name));
|
|
186
|
+
if (wrong.length === 0 && lost.length === 0)
|
|
187
|
+
return;
|
|
188
|
+
const parts = [
|
|
189
|
+
...(wrong.length ? [`does not show ${wrong.map(([n]) => n).join(", ")} as written`] : []),
|
|
190
|
+
...(lost.length ? [`no longer has ${lost.join(", ")}, which this write did not name (another writer removed them, or the PATCH replaced the map instead of merging it)`] : []),
|
|
191
|
+
];
|
|
192
|
+
throw new SponsonError("PROVIDER_RESPONSE", `${ADAPTER}: after PATCH ${c.path}, the ${target} env_vars ${parts.join("; ")}`, { adapter: ADAPTER, method: "PATCH", path: c.path, written: wrong.map(([n]) => n), lost });
|
|
193
|
+
}
|
|
194
|
+
const pagesEnv = {
|
|
195
|
+
outputs: {},
|
|
196
|
+
defaults(params, ctx) {
|
|
197
|
+
return { ...params, target: params.target ?? targetFor(ctx) };
|
|
198
|
+
},
|
|
199
|
+
writesEnvironment(params, ctx) {
|
|
200
|
+
return typeof params.target === "string" ? params.target : targetFor(ctx);
|
|
201
|
+
},
|
|
202
|
+
/**
|
|
203
|
+
* The environment's `env_vars` map is read-modify-write on one project object that every scope (and a run of the
|
|
204
|
+
* other environment, for the other map) writes, so the engine serialises writers with a parent lock (ADR 0019).
|
|
205
|
+
*/
|
|
206
|
+
lockOn(params, provider) {
|
|
207
|
+
const { account, project } = provider;
|
|
208
|
+
if (typeof account !== "string" || account === "" || typeof project !== "string" || project === "")
|
|
209
|
+
return null;
|
|
210
|
+
const target = typeof params.target === "string" && params.target !== "" ? params.target : "preview";
|
|
211
|
+
return `cloudflare:${account}:pages:${project}:${target}:env`;
|
|
212
|
+
},
|
|
213
|
+
async read(actx, params) {
|
|
214
|
+
const scope = envScope(params);
|
|
215
|
+
assertRunEnvironment(scope, actx.ctx);
|
|
216
|
+
const live = await readVars(client(actx), scope.target);
|
|
217
|
+
const resources = [];
|
|
218
|
+
for (const name of scope.values.keys()) {
|
|
219
|
+
const v = live.get(name);
|
|
220
|
+
if (v)
|
|
221
|
+
resources.push(varRecord(scope.target, name, v));
|
|
222
|
+
}
|
|
223
|
+
return resources.length ? { resources, outputs: {} } : null;
|
|
224
|
+
},
|
|
225
|
+
diff(live, params) {
|
|
226
|
+
const scope = envScope(params);
|
|
227
|
+
const byKey = new Map((live?.resources ?? []).map((r) => [r.key, r]));
|
|
228
|
+
return [...scope.values].map(([name, desired]) => diffVar(scope, name, desired, byKey.get(varKey(scope.target, name))));
|
|
229
|
+
},
|
|
230
|
+
async apply(actx, params, live) {
|
|
231
|
+
assertNoPending(params, ADAPTER);
|
|
232
|
+
const scope = envScope(params);
|
|
233
|
+
assertRunEnvironment(scope, actx.ctx);
|
|
234
|
+
const diffs = new Map(pagesEnv.diff(live, params).map((d) => [d.key, d.kind]));
|
|
235
|
+
const sent = new Map();
|
|
236
|
+
for (const [name, d] of scope.values)
|
|
237
|
+
if (diffs.get(varKey(scope.target, name)) !== "unchanged")
|
|
238
|
+
sent.set(name, { type: d.type, value: String(d.value) });
|
|
239
|
+
const created = [...sent.keys()].map((n) => varKey(scope.target, n)).filter((k) => diffs.get(k) === "create");
|
|
240
|
+
if (sent.size === 0)
|
|
241
|
+
return { resources: live?.resources ?? [], outputs: {}, created: [] };
|
|
242
|
+
const c = client(actx);
|
|
243
|
+
// Read-modify-write: the variables before the write, to check afterwards that no other key was lost.
|
|
244
|
+
const before = await readVars(c, scope.target);
|
|
245
|
+
if (created.length)
|
|
246
|
+
await actx.intend(created);
|
|
247
|
+
actx.log(`set ${sent.size} Pages ${scope.target} variable(s): ${[...sent.keys()].join(", ")}`);
|
|
248
|
+
await patchVars(c, scope.target, Object.fromEntries(sent));
|
|
249
|
+
const after = await readVars(c, scope.target);
|
|
250
|
+
verifyWrite(c, scope.target, sent, before, after);
|
|
251
|
+
// A declared variable missing now was not written by this call (verifyWrite checked those): it vanished meanwhile.
|
|
252
|
+
const resources = [...scope.values.keys()].flatMap((name) => {
|
|
253
|
+
const v = after.get(name);
|
|
254
|
+
return v ? [varRecord(scope.target, name, v)] : [];
|
|
255
|
+
});
|
|
256
|
+
return { resources, outputs: {}, created };
|
|
257
|
+
},
|
|
258
|
+
/** `null` for each key still present, per environment; a project or key already gone is success. */
|
|
259
|
+
async destroy(actx, resources) {
|
|
260
|
+
const c = client(actx);
|
|
261
|
+
const byTarget = new Map();
|
|
262
|
+
for (const r of resources) {
|
|
263
|
+
const { target, name } = parseVarKey(r.key);
|
|
264
|
+
byTarget.set(target, [...(byTarget.get(target) ?? []), name]);
|
|
265
|
+
}
|
|
266
|
+
for (const [target, names] of byTarget) {
|
|
267
|
+
let live;
|
|
268
|
+
try {
|
|
269
|
+
live = await readVars(c, target);
|
|
270
|
+
}
|
|
271
|
+
catch (e) {
|
|
272
|
+
if (isProviderError(e, "PROVIDER_NOT_FOUND"))
|
|
273
|
+
return;
|
|
274
|
+
throw e;
|
|
275
|
+
}
|
|
276
|
+
const present = names.filter((n) => live.has(n));
|
|
277
|
+
if (present.length)
|
|
278
|
+
await patchVars(c, target, Object.fromEntries(present.map((n) => [n, null])));
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
/** Every variable of the line's environment, for drift (`unmanaged`) and `sponson init`. */
|
|
282
|
+
async listScope(actx, params) {
|
|
283
|
+
const scope = envScope(params);
|
|
284
|
+
const live = await readVars(client(actx), scope.target);
|
|
285
|
+
return [...live].map(([name, v]) => varRecord(scope.target, name, v));
|
|
286
|
+
},
|
|
287
|
+
/** One line per environment; every variable `{ keep: true }` under `vars` or `secrets`, never its value. */
|
|
288
|
+
adopt(resources) {
|
|
289
|
+
const groups = new Map();
|
|
290
|
+
for (const r of resources) {
|
|
291
|
+
const { target, name } = parseVarKey(r.key);
|
|
292
|
+
const g = groups.get(target) ?? { vars: {}, secrets: {}, keys: [] };
|
|
293
|
+
(r.label?.endsWith(SECRET_LABEL) ? g.secrets : g.vars)[name] = { keep: true };
|
|
294
|
+
g.keys.push(r.key);
|
|
295
|
+
groups.set(target, g);
|
|
296
|
+
}
|
|
297
|
+
return [...groups].map(([target, g]) => ({
|
|
298
|
+
id: `pages-env-${target}`,
|
|
299
|
+
params: { target, ...(Object.keys(g.vars).length ? { vars: g.vars } : {}), ...(Object.keys(g.secrets).length ? { secrets: g.secrets } : {}) },
|
|
300
|
+
keys: g.keys,
|
|
301
|
+
}));
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
/**
|
|
305
|
+
* The Cloudflare adapter (`adapter: cloudflare` in a plan): op `pages_env` manages a Pages project's preview or
|
|
306
|
+
* production variables. Needs `CLOUDFLARE_API_TOKEN` (account permission "Cloudflare Pages Edit") and
|
|
307
|
+
* `providers.cloudflare.{account,project}`.
|
|
308
|
+
*/
|
|
309
|
+
export const cloudflareAdapter = { name: ADAPTER, ops: { pages_env: pagesEnv }, about: ABOUT };
|
|
310
|
+
//# sourceMappingURL=cloudflare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"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"}
|
package/dist/common.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SponsonError, type AdapterContext, type DiffSide, type ResolvedParams, type ResourceDiff, type ResourceRecord } from "@sponson/core";
|
|
2
|
-
import { type ApiClient } from "./http.js";
|
|
2
|
+
import { type ApiClient, type ApiClientOptions } from "./http.js";
|
|
3
3
|
/**
|
|
4
4
|
* The adapter authoring API. These helpers are stable and exported from `@sponson/adapters`; third-party
|
|
5
5
|
* adapters should use them rather than re-implementing the contracts they encode:
|
|
@@ -40,11 +40,7 @@ export declare function optionalProvider(actx: AdapterContext, key: string): str
|
|
|
40
40
|
* const site = await api.get(`/sites/${stringParam(params, "name", "acme")}`);
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
|
-
export declare function clientFor(actx: AdapterContext, adapter: string, opts:
|
|
44
|
-
baseUrl: string;
|
|
45
|
-
token: string;
|
|
46
|
-
authHeader?: "bearer" | `header:${string}`;
|
|
47
|
-
}): ApiClient;
|
|
43
|
+
export declare function clientFor(actx: AdapterContext, adapter: string, opts: Pick<ApiClientOptions, "baseUrl" | "token" | "authHeader" | "headers" | "encoding" | "contentType" | "accept" | "signer">): ApiClient;
|
|
48
44
|
/**
|
|
49
45
|
* The PARAM_INVALID error for a bad param, prefixed with the adapter name. Throw it from `diff`/`apply`
|
|
50
46
|
* validation.
|