run402 1.55.0 → 1.56.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 +10 -0
- package/lib/deploy-v2.mjs +87 -8
- package/lib/deploy.mjs +49 -7
- package/lib/secrets.mjs +15 -7
- package/package.json +1 -1
- package/sdk/dist/index.d.ts +1 -1
- package/sdk/dist/index.d.ts.map +1 -1
- package/sdk/dist/namespaces/apps.d.ts +11 -4
- package/sdk/dist/namespaces/apps.d.ts.map +1 -1
- package/sdk/dist/namespaces/apps.js +73 -9
- package/sdk/dist/namespaces/apps.js.map +1 -1
- package/sdk/dist/namespaces/ci.d.ts.map +1 -1
- package/sdk/dist/namespaces/ci.js +3 -0
- package/sdk/dist/namespaces/ci.js.map +1 -1
- package/sdk/dist/namespaces/deploy.d.ts.map +1 -1
- package/sdk/dist/namespaces/deploy.js +101 -10
- package/sdk/dist/namespaces/deploy.js.map +1 -1
- package/sdk/dist/namespaces/deploy.types.d.ts +24 -9
- package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/secrets.d.ts +3 -2
- package/sdk/dist/namespaces/secrets.d.ts.map +1 -1
- package/sdk/dist/namespaces/secrets.js +45 -5
- package/sdk/dist/namespaces/secrets.js.map +1 -1
- package/sdk/dist/type-contract.d.ts +2 -0
- package/sdk/dist/type-contract.d.ts.map +1 -0
- package/sdk/dist/type-contract.js +2 -0
- package/sdk/dist/type-contract.js.map +1 -0
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
import type { Client } from "../kernel.js";
|
|
6
6
|
export interface SecretSummary {
|
|
7
7
|
key: string;
|
|
8
|
-
|
|
8
|
+
created_at?: string;
|
|
9
|
+
updated_at?: string;
|
|
9
10
|
}
|
|
10
11
|
export interface SecretListResult {
|
|
11
12
|
secrets: SecretSummary[];
|
|
@@ -19,7 +20,7 @@ export declare class Secrets {
|
|
|
19
20
|
constructor(client: Client);
|
|
20
21
|
/** Set or overwrite a project secret. Injected as `process.env.KEY` in deployed functions. */
|
|
21
22
|
set(projectId: string, key: string, value: string): Promise<void>;
|
|
22
|
-
/** List secret keys for a project. Values
|
|
23
|
+
/** List secret keys for a project. Values and value-derived hashes are never returned. */
|
|
23
24
|
list(projectId: string): Promise<SecretListResult>;
|
|
24
25
|
/** Delete a secret. */
|
|
25
26
|
delete(projectId: string, key: string): Promise<DeleteSecretResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/namespaces/secrets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/namespaces/secrets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C,8FAA8F;IACxF,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvE,0FAA0F;IACpF,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAcxD,uBAAuB;IACjB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAa1E"}
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
* `secrets` namespace — project-scoped environment variables for functions.
|
|
3
3
|
* All methods require the project's service key.
|
|
4
4
|
*/
|
|
5
|
-
import { ProjectNotFound } from "../errors.js";
|
|
5
|
+
import { LocalError, ProjectNotFound } from "../errors.js";
|
|
6
|
+
const SECRET_KEY_RE = /^[A-Z_][A-Z0-9_]{0,127}$/;
|
|
7
|
+
const SECRET_VALUE_LIMIT_BYTES = 4 * 1024;
|
|
6
8
|
export class Secrets {
|
|
7
9
|
client;
|
|
8
10
|
constructor(client) {
|
|
@@ -10,25 +12,28 @@ export class Secrets {
|
|
|
10
12
|
}
|
|
11
13
|
/** Set or overwrite a project secret. Injected as `process.env.KEY` in deployed functions. */
|
|
12
14
|
async set(projectId, key, value) {
|
|
15
|
+
validateSecretKey(key, "setting secret");
|
|
16
|
+
validateSecretValue(value);
|
|
13
17
|
const project = await this.client.getProject(projectId);
|
|
14
18
|
if (!project)
|
|
15
19
|
throw new ProjectNotFound(projectId, "setting secret");
|
|
16
|
-
await this.client.request(`/projects/v1/admin/${projectId}/secrets`, {
|
|
20
|
+
await this.client.request(`/projects/v1/admin/${projectId}/secrets/${encodeURIComponent(key)}`, {
|
|
17
21
|
method: "POST",
|
|
18
22
|
headers: { Authorization: `Bearer ${project.service_key}` },
|
|
19
|
-
body: {
|
|
23
|
+
body: { value },
|
|
20
24
|
context: "setting secret",
|
|
21
25
|
});
|
|
22
26
|
}
|
|
23
|
-
/** List secret keys for a project. Values
|
|
27
|
+
/** List secret keys for a project. Values and value-derived hashes are never returned. */
|
|
24
28
|
async list(projectId) {
|
|
25
29
|
const project = await this.client.getProject(projectId);
|
|
26
30
|
if (!project)
|
|
27
31
|
throw new ProjectNotFound(projectId, "listing secrets");
|
|
28
|
-
|
|
32
|
+
const body = await this.client.request(`/projects/v1/admin/${projectId}/secrets`, {
|
|
29
33
|
headers: { Authorization: `Bearer ${project.service_key}` },
|
|
30
34
|
context: "listing secrets",
|
|
31
35
|
});
|
|
36
|
+
return normalizeSecretList(body);
|
|
32
37
|
}
|
|
33
38
|
/** Delete a secret. */
|
|
34
39
|
async delete(projectId, key) {
|
|
@@ -42,4 +47,39 @@ export class Secrets {
|
|
|
42
47
|
});
|
|
43
48
|
}
|
|
44
49
|
}
|
|
50
|
+
function validateSecretKey(key, context) {
|
|
51
|
+
if (typeof key !== "string" || !SECRET_KEY_RE.test(key)) {
|
|
52
|
+
throw new LocalError(`Secret key must match ${SECRET_KEY_RE.source}`, context);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function validateSecretValue(value) {
|
|
56
|
+
if (typeof value !== "string") {
|
|
57
|
+
throw new LocalError("Secret value must be a string", "setting secret");
|
|
58
|
+
}
|
|
59
|
+
const bytes = new TextEncoder().encode(value).byteLength;
|
|
60
|
+
if (bytes > SECRET_VALUE_LIMIT_BYTES) {
|
|
61
|
+
throw new LocalError(`Secret value is ${bytes} bytes; maximum is ${SECRET_VALUE_LIMIT_BYTES} UTF-8 bytes`, "setting secret");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function normalizeSecretList(body) {
|
|
65
|
+
const raw = Array.isArray(body)
|
|
66
|
+
? body
|
|
67
|
+
: body && typeof body === "object" && Array.isArray(body.secrets)
|
|
68
|
+
? body.secrets
|
|
69
|
+
: [];
|
|
70
|
+
const secrets = raw.flatMap((item) => {
|
|
71
|
+
if (!item || typeof item !== "object")
|
|
72
|
+
return [];
|
|
73
|
+
const obj = item;
|
|
74
|
+
if (typeof obj.key !== "string")
|
|
75
|
+
return [];
|
|
76
|
+
const out = { key: obj.key };
|
|
77
|
+
if (typeof obj.created_at === "string")
|
|
78
|
+
out.created_at = obj.created_at;
|
|
79
|
+
if (typeof obj.updated_at === "string")
|
|
80
|
+
out.updated_at = obj.updated_at;
|
|
81
|
+
return [out];
|
|
82
|
+
});
|
|
83
|
+
return { secrets };
|
|
84
|
+
}
|
|
45
85
|
//# sourceMappingURL=secrets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/namespaces/secrets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/namespaces/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-contract.d.ts","sourceRoot":"","sources":["../src/type-contract.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-contract.js","sourceRoot":"","sources":["../src/type-contract.ts"],"names":[],"mappings":""}
|