@sponson/adapters 0.0.0-stage → 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/LICENSE +202 -0
- package/README.md +4 -2
- package/dist/algolia.d.ts +6 -0
- package/dist/algolia.js +151 -0
- package/dist/algolia.js.map +1 -0
- package/dist/clerk.d.ts +8 -0
- package/dist/clerk.js +107 -0
- package/dist/clerk.js.map +1 -0
- 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 +73 -0
- package/dist/common.js +140 -0
- package/dist/common.js.map +1 -0
- 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 +179 -0
- package/dist/http.js +352 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- 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.d.ts +8 -0
- package/dist/neon.js +167 -0
- package/dist/neon.js.map +1 -0
- 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 +72 -0
- package/dist/secrets.js +476 -0
- package/dist/secrets.js.map +1 -0
- 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.d.ts +8 -0
- package/dist/vercel.js +475 -0
- package/dist/vercel.js.map +1 -0
- 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 +58 -3
- 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/dist/vercel.js
ADDED
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
2
|
+
import { SponsonError, sha256 } from "@sponson/core";
|
|
3
|
+
import { ABSENT, assertNoPending, clientFor, deleteIgnoringNotFound, diffValue, optionalEnv, optionalProvider, paramError, requireEnv, requireProvider, stringParam } from "./common.js";
|
|
4
|
+
import { ShapeError, isTransient, listAll, obj, records } from "./http.js";
|
|
5
|
+
/** The environment vercel reads; declared once, used by the code below and by the generated docs. */
|
|
6
|
+
const ABOUT = { credentialEnv: "VERCEL_TOKEN", baseUrlEnv: "VERCEL_API_URL", title: "Vercel", category: "deploy", detect: { deps: ["vercel", "@vercel/"], env: ["VERCEL_*"], files: ["vercel.json", ".vercel/project.json"] } };
|
|
7
|
+
/** Vercel's API base URL; `VERCEL_API_URL` overrides it (the sim and tests use that). */
|
|
8
|
+
export const VERCEL_DEFAULT_API_URL = "https://api.vercel.com";
|
|
9
|
+
const TARGETS = ["preview", "production", "development"];
|
|
10
|
+
/** The `gitBranch` dimension of a project-wide variable, in keys and params. */
|
|
11
|
+
const ALL_BRANCHES = "*";
|
|
12
|
+
/**
|
|
13
|
+
* The deployments that carry a line's values: production builds for `production`, previews for `preview`, and
|
|
14
|
+
* none for `development` — development variables are pulled by `vercel env pull`, never built into a deployment.
|
|
15
|
+
*/
|
|
16
|
+
function deployTargetFor(target) {
|
|
17
|
+
return target === "production" ? "production" : target === "preview" ? "preview" : null;
|
|
18
|
+
}
|
|
19
|
+
function client(actx) {
|
|
20
|
+
const token = requireEnv(actx.env, ABOUT.credentialEnv, "vercel");
|
|
21
|
+
const project = requireProvider(actx, "project", "vercel");
|
|
22
|
+
return { api: clientFor(actx, "vercel", { baseUrl: optionalEnv(actx.env, ABOUT.baseUrlEnv) ?? VERCEL_DEFAULT_API_URL, token }), project, team: optionalProvider(actx, "team") };
|
|
23
|
+
}
|
|
24
|
+
function query(c, extra = {}) {
|
|
25
|
+
const q = new URLSearchParams();
|
|
26
|
+
if (c.team)
|
|
27
|
+
q.set("teamId", c.team);
|
|
28
|
+
for (const [k, v] of Object.entries(extra))
|
|
29
|
+
if (v !== undefined)
|
|
30
|
+
q.set(k, v);
|
|
31
|
+
const s = q.toString();
|
|
32
|
+
return s ? `?${s}` : "";
|
|
33
|
+
}
|
|
34
|
+
function targetFor(env) {
|
|
35
|
+
return env === "production" ? "production" : "preview";
|
|
36
|
+
}
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Response shapes
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
function parseEnvs(v, what) {
|
|
41
|
+
return records(v, what, ["id", "key"]).map((e, i) => {
|
|
42
|
+
const target = typeof e.target === "string" ? [e.target] : e.target;
|
|
43
|
+
if (!Array.isArray(target) || !target.every((t) => typeof t === "string"))
|
|
44
|
+
throw new ShapeError(`expected ${what}[${i}].target to be a list of targets`);
|
|
45
|
+
return {
|
|
46
|
+
id: e.id,
|
|
47
|
+
key: e.key,
|
|
48
|
+
target: target,
|
|
49
|
+
...(typeof e.value === "string" ? { value: e.value } : {}),
|
|
50
|
+
...(typeof e.gitBranch === "string" && e.gitBranch !== "" ? { gitBranch: e.gitBranch } : {}),
|
|
51
|
+
...(typeof e.type === "string" ? { type: e.type } : {}),
|
|
52
|
+
...(typeof e.decrypted === "boolean" ? { decrypted: e.decrypted } : {}),
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The plaintext of a listed variable when the list carries it: `plain` vars always, others only when the API says
|
|
58
|
+
* `decrypted: true`. Undefined means "ask GET /v1/projects/:id/env/:id" (or, for `sensitive`, unknowable).
|
|
59
|
+
*/
|
|
60
|
+
function plaintext(e) {
|
|
61
|
+
if (e.value === undefined)
|
|
62
|
+
return undefined;
|
|
63
|
+
return e.type === "plain" || e.decrypted === true ? e.value : undefined;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* `{ envs, pagination: { next } }`. The OpenAPI spec defines the `pagination` object for this endpoint but no
|
|
67
|
+
* page parameter; `?until=<next>` is the convention of Vercel's other lists. listEnvs drops repeats, so an API
|
|
68
|
+
* that ignores `until` costs one extra request, not duplicate records.
|
|
69
|
+
*/
|
|
70
|
+
function envPage(body) {
|
|
71
|
+
const o = obj(body, "the env list");
|
|
72
|
+
const items = parseEnvs(o.envs, "`envs`");
|
|
73
|
+
const p = o.pagination;
|
|
74
|
+
const next = p && typeof p === "object" ? p.next : undefined;
|
|
75
|
+
return { items, next: typeof next === "number" || (typeof next === "string" && next !== "") ? { until: String(next) } : null };
|
|
76
|
+
}
|
|
77
|
+
/** GET /v7/deployments: `readyState` is required by the spec, `state` optional; `url` is null until the upload completes. */
|
|
78
|
+
function parseDeployments(body) {
|
|
79
|
+
return records(obj(body, "the deployment list").deployments, "`deployments`", ["uid"]).map((d, i) => {
|
|
80
|
+
if (typeof d.createdAt !== "number")
|
|
81
|
+
throw new ShapeError(`expected deployments[${i}].createdAt to be a number`);
|
|
82
|
+
const state = typeof d.readyState === "string" ? d.readyState : d.state;
|
|
83
|
+
if (typeof state !== "string")
|
|
84
|
+
throw new ShapeError(`expected deployments[${i}].readyState to be a string`);
|
|
85
|
+
return { uid: d.uid, target: targetOf(d.target), ...(typeof d.url === "string" && d.url !== "" ? { url: d.url } : {}), state: state, createdAt: d.createdAt };
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/** POST /v13/deployments and GET /v13/deployments/:id answer `{ id, readyState, url? }` (POST's lean variant has no `url`). */
|
|
89
|
+
function parseDeploymentDetail(body) {
|
|
90
|
+
const [d] = records([body], "the deployment", ["id", "readyState"]);
|
|
91
|
+
return { uid: d.id, target: targetOf(d.target), ...(typeof d.url === "string" && d.url !== "" ? { url: d.url } : {}), state: d.readyState, createdAt: typeof d.createdAt === "number" ? d.createdAt : Date.now() };
|
|
92
|
+
}
|
|
93
|
+
function targetOf(v) {
|
|
94
|
+
return v === "production" ? "production" : v === null || v === undefined ? "preview" : "other";
|
|
95
|
+
}
|
|
96
|
+
/** `{ created: env | env[], failed: [{ error: { key, code, message } }] }`. Messages are dropped: they can echo values. */
|
|
97
|
+
function parseUpsert(body) {
|
|
98
|
+
const o = obj(body, "the upsert response");
|
|
99
|
+
const created = o.created === undefined ? [] : parseEnvs(Array.isArray(o.created) ? o.created : [o.created], "`created`");
|
|
100
|
+
const failed = o.failed === undefined ? [] : o.failed;
|
|
101
|
+
if (!Array.isArray(failed))
|
|
102
|
+
throw new ShapeError("expected `failed` to be a list");
|
|
103
|
+
const failedKeys = failed.map((f) => {
|
|
104
|
+
const err = f && typeof f === "object" ? f.error : undefined;
|
|
105
|
+
const e = err && typeof err === "object" ? err : {};
|
|
106
|
+
// The spec's failure object names the variable as `key` or `envVarKey`.
|
|
107
|
+
const key = typeof e.key === "string" ? e.key : e.envVarKey;
|
|
108
|
+
return typeof key === "string" ? key : "(unnamed)";
|
|
109
|
+
});
|
|
110
|
+
return { created, failedKeys };
|
|
111
|
+
}
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
113
|
+
// Lists
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
/** Every variable of the project, once each (by id). `decrypt=true` is deprecated in the spec but still listed. */
|
|
116
|
+
async function listEnvs(c) {
|
|
117
|
+
const all = await listAll(c.api, `/v10/projects/${c.project}/env${query(c, { decrypt: "true" })}`, envPage);
|
|
118
|
+
const seen = new Set();
|
|
119
|
+
return all.filter((e) => !seen.has(e.id) && seen.add(e.id));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The value to compare a declared variable by: the listed plaintext, else the decrypted value from
|
|
123
|
+
* GET /v1/projects/:id/env/:id ("Retrieve the decrypted value of an environment variable"). A `sensitive`
|
|
124
|
+
* variable's value is never readable, so it hashes as "" and always diffs as an update.
|
|
125
|
+
*/
|
|
126
|
+
async function comparableValue(c, e) {
|
|
127
|
+
const listed = plaintext(e);
|
|
128
|
+
if (listed !== undefined || e.type === "sensitive")
|
|
129
|
+
return listed ?? "";
|
|
130
|
+
const one = await c.api.get(`/v1/projects/${c.project}/env/${encodeURIComponent(e.id)}${query(c)}`, (body) => parseEnvs([body], "the env var")[0]);
|
|
131
|
+
return plaintext(one) ?? "";
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* GET /v7/deployments of one commit in one environment (`sha` and `target` are documented v7 filters). The result is
|
|
135
|
+
* filtered again by each item's `target`, so a preview build of a commit is never mistaken for its production build.
|
|
136
|
+
*/
|
|
137
|
+
async function deploymentsFor(c, sha, target) {
|
|
138
|
+
const list = await c.api.get(`/v7/deployments${query(c, { projectId: c.project, sha, target, limit: "20" })}`, parseDeployments);
|
|
139
|
+
return list.filter((d) => d.target === target);
|
|
140
|
+
}
|
|
141
|
+
function newest(list) {
|
|
142
|
+
return list.reduce((best, d) => (!best || d.createdAt > best.createdAt ? d : best), undefined);
|
|
143
|
+
}
|
|
144
|
+
/** States a deployment does not leave by itself. BLOCKED needs someone to act in Vercel; DELETED is gone. */
|
|
145
|
+
const FAILED_STATES = new Set(["ERROR", "CANCELED", "BLOCKED", "DELETED"]);
|
|
146
|
+
function deploymentFailed(d) {
|
|
147
|
+
return new SponsonError("PROVIDER_INVALID", `vercel: deployment ${d.uid} ended ${d.state}; it will not become ready`, { adapter: "vercel", deployment: d.uid, state: d.state });
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* The `gitSource` of POST /v13/deployments for this project's connected repository. The spec requires the
|
|
151
|
+
* repository's identity (`repoId`, GitLab `projectId`, Bitbucket `repoUuid`) next to `ref`; it comes from the
|
|
152
|
+
* project's `link` (GET /v9/projects/:id).
|
|
153
|
+
*/
|
|
154
|
+
async function gitSourceFor(c, ctx) {
|
|
155
|
+
const link = await c.api.get(`/v9/projects/${c.project}${query(c)}`, (body) => {
|
|
156
|
+
const l = obj(body, "the project").link;
|
|
157
|
+
return l && typeof l === "object" && !Array.isArray(l) ? l : undefined;
|
|
158
|
+
});
|
|
159
|
+
const at = { ref: ctx.git.branch, sha: ctx.git.sha };
|
|
160
|
+
const id = (v) => typeof v === "string" || typeof v === "number";
|
|
161
|
+
if ((link?.type === "github" || link?.type === "github-limited") && id(link.repoId))
|
|
162
|
+
return { type: link.type, repoId: link.repoId, ...at };
|
|
163
|
+
if (link?.type === "gitlab" && id(link.projectId))
|
|
164
|
+
return { type: "gitlab", projectId: link.projectId, ...at };
|
|
165
|
+
if (link?.type === "bitbucket" && typeof link.uuid === "string")
|
|
166
|
+
return { type: "bitbucket", repoUuid: link.uuid, ...(typeof link.workspaceUuid === "string" ? { workspaceUuid: link.workspaceUuid } : {}), ...at };
|
|
167
|
+
throw new SponsonError("PROVIDER_INVALID", `vercel: project ${c.project} is ${link ? `connected to a ${String(link.type)} repository, which Sponson cannot deploy from` : "not connected to a Git repository"}; Sponson deploys a commit through the project's GitHub, GitLab or Bitbucket connection`, { adapter: "vercel", project: c.project });
|
|
168
|
+
}
|
|
169
|
+
/** A new build of this commit. `forceNew=1`: Vercel may otherwise answer with an earlier deployment of the same commit. */
|
|
170
|
+
async function triggerDeploy(c, ctx, target) {
|
|
171
|
+
const body = {
|
|
172
|
+
name: c.project,
|
|
173
|
+
project: c.project,
|
|
174
|
+
gitSource: await gitSourceFor(c, ctx),
|
|
175
|
+
...(target === "production" ? { target: "production" } : {}),
|
|
176
|
+
};
|
|
177
|
+
return c.api.post(`/v13/deployments${query(c, { forceNew: "1" })}`, body, parseDeploymentDetail);
|
|
178
|
+
}
|
|
179
|
+
function envScope(params) {
|
|
180
|
+
const target = stringParam(params, "target", "vercel", "preview");
|
|
181
|
+
if (!TARGETS.includes(target))
|
|
182
|
+
throw paramError("vercel", `param \`target\` must be one of ${TARGETS.join(", ")} (got ${JSON.stringify(target)})`, "target");
|
|
183
|
+
const rawBranch = params.branch;
|
|
184
|
+
if (rawBranch !== undefined && rawBranch !== null && typeof rawBranch !== "string")
|
|
185
|
+
throw paramError("vercel", "param `branch` must be a string", "branch");
|
|
186
|
+
const branch = typeof rawBranch === "string" && rawBranch !== "" && rawBranch !== ALL_BRANCHES ? rawBranch : undefined;
|
|
187
|
+
if (branch !== undefined && target !== "preview")
|
|
188
|
+
throw paramError("vercel", `param \`branch\` only applies to target preview (got target ${target})`, "branch");
|
|
189
|
+
const values = params.values;
|
|
190
|
+
if (values !== undefined && (typeof values !== "object" || values === null || Array.isArray(values)))
|
|
191
|
+
throw paramError("vercel", "param `values` must be an object of NAME → value", "values");
|
|
192
|
+
return { target: target, branch, values: (values ?? {}) };
|
|
193
|
+
}
|
|
194
|
+
/** Identity: target, git branch (`*` = project-wide) and name. Two records differing in any of them are different resources. */
|
|
195
|
+
function envKey(target, branch, name) {
|
|
196
|
+
return `env:${target}:${branch ?? ALL_BRANCHES}:${name}`;
|
|
197
|
+
}
|
|
198
|
+
/** Inverse of envKey. A variable name never contains `:`; a git branch may. */
|
|
199
|
+
function parseEnvKey(key) {
|
|
200
|
+
const [kind, target] = key.split(":", 2);
|
|
201
|
+
const last = key.lastIndexOf(":");
|
|
202
|
+
const branchAt = (kind?.length ?? 0) + (target?.length ?? 0) + 2;
|
|
203
|
+
if (kind !== "env" || !target || last < branchAt)
|
|
204
|
+
throw new SponsonError("INTERNAL", `vercel: \`${key}\` is not an env key`, { adapter: "vercel", key });
|
|
205
|
+
return { target, branch: key.slice(branchAt, last), name: key.slice(last + 1) };
|
|
206
|
+
}
|
|
207
|
+
function envLabel(scope, name) {
|
|
208
|
+
return `${name} (${scope.target}${scope.branch ? `, ${scope.branch}` : ""})`;
|
|
209
|
+
}
|
|
210
|
+
function envRecord(target, e, hash) {
|
|
211
|
+
return { key: envKey(target, e.gitBranch, e.key), id: e.id, hash, label: `${e.key} (${target}${e.gitBranch ? `, ${e.gitBranch}` : ""})` };
|
|
212
|
+
}
|
|
213
|
+
/** Records this line's target+branch sees: the target is among the record's targets and the git branch is the same. */
|
|
214
|
+
function inScope(e, scope) {
|
|
215
|
+
return e.target.includes(scope.target) && e.gitBranch === scope.branch;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* One record shared by several targets cannot be managed by a line that owns one target: writing our target would
|
|
219
|
+
* either create a second record (two effective values) or patch the other targets behind the user's back.
|
|
220
|
+
*/
|
|
221
|
+
function refuseShared(e, scope) {
|
|
222
|
+
return new SponsonError("PROVIDER_CONFLICT", `vercel: ${e.key} is a single variable shared by targets ${e.target.join(", ")}; this line manages only ${scope.target}. ` +
|
|
223
|
+
`Split it in the Vercel dashboard into one variable per environment, then run again.`, { adapter: "vercel", key: envKey(scope.target, scope.branch, e.key), targets: e.target });
|
|
224
|
+
}
|
|
225
|
+
const env = {
|
|
226
|
+
outputs: {
|
|
227
|
+
preview_url: { available: "external", event: "deploy" },
|
|
228
|
+
deployment_id: { available: "external", event: "deploy" },
|
|
229
|
+
},
|
|
230
|
+
defaults(params, ctx) {
|
|
231
|
+
const target = params.target ?? targetFor(ctx.env);
|
|
232
|
+
const out = { ...params, target };
|
|
233
|
+
if (target === "preview" && out.branch === undefined)
|
|
234
|
+
out.branch = ctx.git.branch;
|
|
235
|
+
return out;
|
|
236
|
+
},
|
|
237
|
+
writesEnvironment(params, ctx) {
|
|
238
|
+
return typeof params.target === "string" ? params.target : targetFor(ctx.env);
|
|
239
|
+
},
|
|
240
|
+
async read(actx, params) {
|
|
241
|
+
const scope = envScope(params);
|
|
242
|
+
const c = client(actx);
|
|
243
|
+
const live = (await listEnvs(c)).filter((e) => inScope(e, scope));
|
|
244
|
+
const resources = [];
|
|
245
|
+
for (const name of Object.keys(scope.values)) {
|
|
246
|
+
const e = live.find((x) => x.key === name);
|
|
247
|
+
if (!e)
|
|
248
|
+
continue;
|
|
249
|
+
if (e.target.length !== 1)
|
|
250
|
+
throw refuseShared(e, scope);
|
|
251
|
+
resources.push(envRecord(scope.target, e, sha256(await comparableValue(c, e))));
|
|
252
|
+
}
|
|
253
|
+
if (resources.length === 0)
|
|
254
|
+
return null;
|
|
255
|
+
return { resources, outputs: {} };
|
|
256
|
+
},
|
|
257
|
+
diff(live, params) {
|
|
258
|
+
const scope = envScope(params);
|
|
259
|
+
const byKey = new Map((live?.resources ?? []).map((r) => [r.key, r]));
|
|
260
|
+
return Object.entries(scope.values).map(([name, desired]) => {
|
|
261
|
+
const key = envKey(scope.target, scope.branch, name);
|
|
262
|
+
return diffValue({ key, label: envLabel(scope, name), live: byKey.get(key), desired, sensitive: true });
|
|
263
|
+
});
|
|
264
|
+
},
|
|
265
|
+
async apply(actx, params, live) {
|
|
266
|
+
assertNoPending(params, "vercel");
|
|
267
|
+
const scope = envScope(params);
|
|
268
|
+
const c = client(actx);
|
|
269
|
+
const diffs = env.diff(live, params);
|
|
270
|
+
const keyOf = (name) => envKey(scope.target, scope.branch, name);
|
|
271
|
+
const kindOf = new Map(diffs.map((d) => [d.key, d.kind]));
|
|
272
|
+
const toWrite = Object.entries(scope.values).filter(([name]) => kindOf.get(keyOf(name)) !== "unchanged");
|
|
273
|
+
const creating = toWrite.map(([name]) => keyOf(name)).filter((k) => kindOf.get(k) === "create");
|
|
274
|
+
const byKey = new Map((live?.resources ?? []).map((r) => [r.key, r]));
|
|
275
|
+
let notes;
|
|
276
|
+
if (toWrite.length > 0) {
|
|
277
|
+
if (creating.length > 0)
|
|
278
|
+
await actx.intend(creating);
|
|
279
|
+
const startedAt = Date.now();
|
|
280
|
+
const body = toWrite.map(([key, value]) => ({ key, value: String(value), type: "encrypted", target: [scope.target], ...(scope.branch ? { gitBranch: scope.branch } : {}) }));
|
|
281
|
+
actx.log(`upsert ${body.length} env var(s) in ${scope.target}${scope.branch ? ` for ${scope.branch}` : ""}`);
|
|
282
|
+
const path = `/v10/projects/${c.project}/env${query(c, { upsert: "true" })}`;
|
|
283
|
+
const r = await c.api.post(path, body, parseUpsert);
|
|
284
|
+
// A bulk upsert answers 200 even when some entries were rejected.
|
|
285
|
+
if (r.failedKeys.length > 0) {
|
|
286
|
+
throw new SponsonError("PROVIDER_INVALID", `vercel: the bulk upsert rejected ${r.failedKeys.length} env var(s): ${r.failedKeys.join(", ")}`, {
|
|
287
|
+
adapter: "vercel",
|
|
288
|
+
method: "POST",
|
|
289
|
+
path,
|
|
290
|
+
keys: r.failedKeys,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
// Trust the write's answer for ids: a list right after a write may not show it yet.
|
|
294
|
+
for (const [name, value] of toWrite) {
|
|
295
|
+
const written = r.created.find((e) => e.key === name && inScope(e, scope));
|
|
296
|
+
if (!written)
|
|
297
|
+
throw new SponsonError("PROVIDER_RESPONSE", `vercel: POST ${path} → 200: the upsert response does not list ${name}`, { adapter: "vercel", method: "POST", path, key: name });
|
|
298
|
+
byKey.set(keyOf(name), envRecord(scope.target, written, sha256(String(value))));
|
|
299
|
+
}
|
|
300
|
+
// Vercel may have started building this sha before the vars landed; that build would miss them.
|
|
301
|
+
const target = deployTargetFor(scope.target);
|
|
302
|
+
const d = target ? newest(await deploymentsFor(c, actx.ctx.git.sha, target)) : undefined;
|
|
303
|
+
if (target && d && d.createdAt < startedAt && !FAILED_STATES.has(d.state)) {
|
|
304
|
+
actx.log(`deployment ${d.uid} predates env write; redeploying`);
|
|
305
|
+
await triggerDeploy(c, actx.ctx, target);
|
|
306
|
+
notes = { redeployed: true };
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
const resources = Object.keys(scope.values).map((name) => {
|
|
310
|
+
const rec = byKey.get(keyOf(name));
|
|
311
|
+
if (!rec)
|
|
312
|
+
throw new SponsonError("INTERNAL", `vercel: no record for ${name} after apply`, { adapter: "vercel", key: keyOf(name) });
|
|
313
|
+
return rec;
|
|
314
|
+
});
|
|
315
|
+
return { resources, outputs: {}, created: creating, ...(notes ? { notes } : {}) };
|
|
316
|
+
},
|
|
317
|
+
async destroy(actx, resources) {
|
|
318
|
+
const c = client(actx);
|
|
319
|
+
for (const r of resources)
|
|
320
|
+
await deleteIgnoringNotFound(c.api, `/v9/projects/${c.project}/env/${encodeURIComponent(r.id)}${query(c)}`);
|
|
321
|
+
},
|
|
322
|
+
/** Every var this line's deployments see in its target: those for its git branch and the project-wide ones. */
|
|
323
|
+
async listScope(actx, params) {
|
|
324
|
+
const scope = envScope(params);
|
|
325
|
+
const c = client(actx);
|
|
326
|
+
return (await listEnvs(c))
|
|
327
|
+
.filter((e) => e.target.includes(scope.target) && (e.gitBranch === undefined || e.gitBranch === scope.branch))
|
|
328
|
+
.map((e) => envRecord(scope.target, e, sha256(plaintext(e) ?? "")));
|
|
329
|
+
},
|
|
330
|
+
/**
|
|
331
|
+
* One line per (target, git branch), every variable `{ keep: true }`: Sponson takes over that they exist, never
|
|
332
|
+
* their values. A project-wide variable is adopted as project-wide (`branch: "*"`), never re-created as a
|
|
333
|
+
* branch-scoped copy; `branch` is omitted when it is the current git branch (the op's default).
|
|
334
|
+
*/
|
|
335
|
+
adopt(resources, ctx) {
|
|
336
|
+
const groups = new Map();
|
|
337
|
+
for (const r of resources) {
|
|
338
|
+
const { target, branch, name } = parseEnvKey(r.key);
|
|
339
|
+
const id = `${target}\u0000${branch}`;
|
|
340
|
+
const g = groups.get(id) ?? { target, branch, values: {}, keys: [] };
|
|
341
|
+
g.values[name] = { keep: true };
|
|
342
|
+
g.keys.push(r.key);
|
|
343
|
+
groups.set(id, g);
|
|
344
|
+
}
|
|
345
|
+
return [...groups.values()].map(({ target, branch, values, keys }) => {
|
|
346
|
+
const current = branch === ctx.git.branch;
|
|
347
|
+
const suffix = branch === ALL_BRANCHES ? "-shared" : current ? "" : `-${branch}`;
|
|
348
|
+
return { id: `env-${target}${suffix}`, params: { target, ...(current ? {} : { branch }), values }, keys };
|
|
349
|
+
});
|
|
350
|
+
},
|
|
351
|
+
async awaitExternal(actx, params) {
|
|
352
|
+
const c = client(actx);
|
|
353
|
+
let list;
|
|
354
|
+
try {
|
|
355
|
+
const target = deployTargetFor(envScope(params).target);
|
|
356
|
+
if (!target) {
|
|
357
|
+
throw new SponsonError("PARAM_INVALID", "vercel: `target: development` variables are not part of any deployment, so this line has no `preview_url` or `deployment_id`", { adapter: "vercel", target: "development" });
|
|
358
|
+
}
|
|
359
|
+
list = await deploymentsFor(c, actx.ctx.git.sha, target);
|
|
360
|
+
}
|
|
361
|
+
catch (e) {
|
|
362
|
+
// The HTTP layer already retried; a provider that is still unavailable means "not known yet", not "failed".
|
|
363
|
+
if (isTransient(e))
|
|
364
|
+
return null;
|
|
365
|
+
throw e;
|
|
366
|
+
}
|
|
367
|
+
const d = newest(list);
|
|
368
|
+
if (!d)
|
|
369
|
+
return null;
|
|
370
|
+
if (d.state === "READY" && d.url)
|
|
371
|
+
return deployOutputs(d);
|
|
372
|
+
if (FAILED_STATES.has(d.state))
|
|
373
|
+
throw deploymentFailed(d);
|
|
374
|
+
return null;
|
|
375
|
+
},
|
|
376
|
+
};
|
|
377
|
+
// ---------------------------------------------------------------------------
|
|
378
|
+
// op: deploy
|
|
379
|
+
// ---------------------------------------------------------------------------
|
|
380
|
+
/** The `deploy` op builds for the run's environment: production under `--env production`, a preview otherwise. */
|
|
381
|
+
function deployOpTarget(ctx) {
|
|
382
|
+
return ctx.env === "production" ? "production" : "preview";
|
|
383
|
+
}
|
|
384
|
+
/** Identity: environment and commit — a commit's production and preview deployments are different resources. */
|
|
385
|
+
function deployKey(sha, target) {
|
|
386
|
+
return `deployment:${target}:${sha}`;
|
|
387
|
+
}
|
|
388
|
+
function deployRecord(sha, target, d) {
|
|
389
|
+
return { key: deployKey(sha, target), id: d.uid, hash: sha256(d.uid), label: `${target} deployment ${d.uid}` };
|
|
390
|
+
}
|
|
391
|
+
function deployOutputs(d) {
|
|
392
|
+
if (!d.url)
|
|
393
|
+
throw new SponsonError("PROVIDER_RESPONSE", `vercel: deployment ${d.uid} is READY but has no \`url\``, { adapter: "vercel", deployment: d.uid });
|
|
394
|
+
return { preview_url: `https://${d.url}`, deployment_id: d.uid };
|
|
395
|
+
}
|
|
396
|
+
/** Watch one deployment until READY. Transient status errors are waited through; ERROR/CANCELED end it. */
|
|
397
|
+
async function untilReady(c, actx, first) {
|
|
398
|
+
const timeout = Number(actx.env.SPONSON_DEPLOY_TIMEOUT_MS ?? 120_000);
|
|
399
|
+
const deadline = Date.now() + timeout;
|
|
400
|
+
let d = first;
|
|
401
|
+
for (;;) {
|
|
402
|
+
if (d.state === "READY" && d.url)
|
|
403
|
+
return d;
|
|
404
|
+
if (FAILED_STATES.has(d.state))
|
|
405
|
+
throw deploymentFailed(d);
|
|
406
|
+
if (Date.now() > deadline)
|
|
407
|
+
throw new SponsonError("WAIT_TIMEOUT", `vercel: deployment ${d.uid} not ready after ${timeout}ms (still ${d.state}); run again to keep watching it`, { adapter: "vercel", deployment: d.uid, state: d.state });
|
|
408
|
+
await sleep(Math.min(200, Math.max(0, deadline - Date.now()) + 1));
|
|
409
|
+
try {
|
|
410
|
+
d = { ...(await c.api.get(`/v13/deployments/${encodeURIComponent(d.uid)}${query(c)}`, parseDeploymentDetail)), createdAt: d.createdAt };
|
|
411
|
+
}
|
|
412
|
+
catch (e) {
|
|
413
|
+
if (!isTransient(e))
|
|
414
|
+
throw e;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
const deploy = {
|
|
419
|
+
outputs: {
|
|
420
|
+
preview_url: { available: "immediate" },
|
|
421
|
+
deployment_id: { available: "immediate" },
|
|
422
|
+
},
|
|
423
|
+
writesEnvironment(_params, ctx) {
|
|
424
|
+
return deployOpTarget(ctx);
|
|
425
|
+
},
|
|
426
|
+
/** The newest deployment of this sha that has not failed, finished or not: a build in progress is not a reason for another. */
|
|
427
|
+
async read(actx) {
|
|
428
|
+
const c = client(actx);
|
|
429
|
+
const target = deployOpTarget(actx.ctx);
|
|
430
|
+
const d = newest((await deploymentsFor(c, actx.ctx.git.sha, target)).filter((x) => !FAILED_STATES.has(x.state)));
|
|
431
|
+
if (!d)
|
|
432
|
+
return null;
|
|
433
|
+
return { resources: [deployRecord(actx.ctx.git.sha, target, d)], outputs: d.state === "READY" && d.url ? deployOutputs(d) : {} };
|
|
434
|
+
},
|
|
435
|
+
diff(live) {
|
|
436
|
+
const r = live?.resources[0];
|
|
437
|
+
if (r && live.outputs.preview_url !== undefined)
|
|
438
|
+
return [{ key: r.key, kind: "unchanged", label: r.label ?? r.key }];
|
|
439
|
+
// In progress: apply watches it rather than starting another.
|
|
440
|
+
if (r)
|
|
441
|
+
return [{ key: r.key, kind: "update", label: r.label ?? r.key, before: { state: "literal", value: "building" }, after: { state: "literal", value: "ready" } }];
|
|
442
|
+
return [{ key: "deployment:(new)", kind: "create", label: "deployment", before: ABSENT, after: { state: "literal", value: "new deployment" } }];
|
|
443
|
+
},
|
|
444
|
+
async apply(actx, params, live) {
|
|
445
|
+
assertNoPending(params, "vercel");
|
|
446
|
+
const c = client(actx);
|
|
447
|
+
const sha = actx.ctx.git.sha;
|
|
448
|
+
const target = deployOpTarget(actx.ctx);
|
|
449
|
+
const existing = live?.resources[0];
|
|
450
|
+
if (existing && live.outputs.preview_url !== undefined)
|
|
451
|
+
return { resources: live.resources, outputs: live.outputs, created: [] };
|
|
452
|
+
let start;
|
|
453
|
+
const created = [];
|
|
454
|
+
if (existing) {
|
|
455
|
+
actx.log(`deployment ${existing.id} for ${sha} is in progress; watching it`);
|
|
456
|
+
start = { uid: existing.id, target, state: "BUILDING", createdAt: 0 };
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
await actx.intend([deployKey(sha, target)]);
|
|
460
|
+
actx.log(`deploy ${sha} (${target})`);
|
|
461
|
+
start = await triggerDeploy(c, actx.ctx, target);
|
|
462
|
+
created.push(deployKey(sha, target));
|
|
463
|
+
}
|
|
464
|
+
const d = await untilReady(c, actx, start);
|
|
465
|
+
return { resources: [deployRecord(sha, target, d)], outputs: deployOutputs(d), created };
|
|
466
|
+
},
|
|
467
|
+
// Deployments are history; Vercel keeps them and so do we.
|
|
468
|
+
async destroy() { },
|
|
469
|
+
};
|
|
470
|
+
/**
|
|
471
|
+
* Vercel: op `env` manages environment variables per target and git branch; op `deploy` triggers or watches a
|
|
472
|
+
* deployment and outputs its `preview_url`. Needs `VERCEL_TOKEN` and `providers.vercel.project`.
|
|
473
|
+
*/
|
|
474
|
+
export const vercelAdapter = { name: "vercel", ops: { env, deploy }, about: ABOUT };
|
|
475
|
+
//# sourceMappingURL=vercel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel.js","sourceRoot":"","sources":["../src/vercel.ts"],"names":[],"mappings":"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"}
|
package/dist/xata.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ResourceAdapter } from "@sponson/core";
|
|
2
|
+
/** Xata's API base URL (XA1). `XATA_API_URL` overrides it; tests and scenarios point that at the sim. */
|
|
3
|
+
export declare const XATA_DEFAULT_API_URL = "https://api.xata.tech";
|
|
4
|
+
/**
|
|
5
|
+
* The Xata adapter (`adapter: xata` in a plan). Registered in `createRegistry()`; needs `XATA_API_KEY` and
|
|
6
|
+
* `providers.xata.organization` and `.project`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const xataAdapter: ResourceAdapter;
|