@ericminassian/plat 0.0.0-stage → 0.1.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/dist/api-types.d.ts +7 -0
- package/dist/api-types.js +3 -0
- package/dist/api-types.js.map +1 -0
- package/dist/api.d.ts +123 -0
- package/dist/api.js +271 -0
- package/dist/api.js.map +1 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +4 -0
- package/dist/bin.js.map +1 -0
- package/dist/build.d.ts +45 -0
- package/dist/build.js +188 -0
- package/dist/build.js.map +1 -0
- package/dist/commands/account.d.ts +2 -0
- package/dist/commands/account.js +45 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/apps.d.ts +2 -0
- package/dist/commands/apps.js +75 -0
- package/dist/commands/apps.js.map +1 -0
- package/dist/commands/common.d.ts +19 -0
- package/dist/commands/common.js +43 -0
- package/dist/commands/common.js.map +1 -0
- package/dist/commands/lifecycle.d.ts +3 -0
- package/dist/commands/lifecycle.js +105 -0
- package/dist/commands/lifecycle.js.map +1 -0
- package/dist/commands/manage.d.ts +2 -0
- package/dist/commands/manage.js +103 -0
- package/dist/commands/manage.js.map +1 -0
- package/dist/commands/observe.d.ts +8 -0
- package/dist/commands/observe.js +195 -0
- package/dist/commands/observe.js.map +1 -0
- package/dist/credentials.d.ts +13 -0
- package/dist/credentials.js +42 -0
- package/dist/credentials.js.map +1 -0
- package/dist/deploy.d.ts +23 -0
- package/dist/deploy.js +100 -0
- package/dist/deploy.js.map +1 -0
- package/dist/dev/crons.d.ts +16 -0
- package/dist/dev/crons.js +47 -0
- package/dist/dev/crons.js.map +1 -0
- package/dist/dev/entries.d.ts +6 -0
- package/dist/dev/entries.js +21 -0
- package/dist/dev/entries.js.map +1 -0
- package/dist/dev/index.d.ts +33 -0
- package/dist/dev/index.js +262 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/local-stage.d.ts +46 -0
- package/dist/dev/local-stage.js +116 -0
- package/dist/dev/local-stage.js.map +1 -0
- package/dist/dev/pretty.d.ts +16 -0
- package/dist/dev/pretty.js +91 -0
- package/dist/dev/pretty.js.map +1 -0
- package/dist/dev/proc.d.ts +7 -0
- package/dist/dev/proc.js +16 -0
- package/dist/dev/proc.js.map +1 -0
- package/dist/dev/router.d.ts +67 -0
- package/dist/dev/router.js +184 -0
- package/dist/dev/router.js.map +1 -0
- package/dist/dev/server-entry.d.ts +1 -0
- package/dist/dev/server-entry.js +28 -0
- package/dist/dev/server-entry.js.map +1 -0
- package/dist/dev/test.d.ts +10 -0
- package/dist/dev/test.js +62 -0
- package/dist/dev/test.js.map +1 -0
- package/dist/dev/worker-host.d.ts +1 -0
- package/dist/dev/worker-host.js +67 -0
- package/dist/dev/worker-host.js.map +1 -0
- package/dist/dev/worker.d.ts +57 -0
- package/dist/dev/worker.js +216 -0
- package/dist/dev/worker.js.map +1 -0
- package/dist/github.d.ts +39 -0
- package/dist/github.js +108 -0
- package/dist/github.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +23 -0
- package/dist/init.js +102 -0
- package/dist/init.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.js +24 -0
- package/dist/main.js.map +1 -0
- package/dist/project.d.ts +22 -0
- package/dist/project.js +81 -0
- package/dist/project.js.map +1 -0
- package/dist/util/net.d.ts +4 -0
- package/dist/util/net.js +33 -0
- package/dist/util/net.js.map +1 -0
- package/dist/util/output.d.ts +42 -0
- package/dist/util/output.js +105 -0
- package/dist/util/output.js.map +1 -0
- package/dist/util/prompt.d.ts +3 -0
- package/dist/util/prompt.js +22 -0
- package/dist/util/prompt.js.map +1 -0
- package/dist/util/time.d.ts +11 -0
- package/dist/util/time.js +29 -0
- package/dist/util/time.js.map +1 -0
- package/dist/util/zip.d.ts +10 -0
- package/dist/util/zip.js +45 -0
- package/dist/util/zip.js.map +1 -0
- package/package.json +50 -3
- package/src/api-types.ts +8 -0
- package/src/api.ts +341 -0
- package/src/bin.ts +4 -0
- package/src/build.ts +255 -0
- package/src/commands/account.ts +62 -0
- package/src/commands/apps.ts +102 -0
- package/src/commands/common.ts +51 -0
- package/src/commands/lifecycle.ts +139 -0
- package/src/commands/manage.ts +169 -0
- package/src/commands/observe.ts +276 -0
- package/src/credentials.ts +50 -0
- package/src/deploy.ts +138 -0
- package/src/dev/crons.ts +70 -0
- package/src/dev/entries.ts +23 -0
- package/src/dev/index.ts +281 -0
- package/src/dev/local-stage.ts +176 -0
- package/src/dev/pretty.ts +90 -0
- package/src/dev/proc.ts +15 -0
- package/src/dev/router.ts +246 -0
- package/src/dev/server-entry.ts +21 -0
- package/src/dev/test.ts +68 -0
- package/src/dev/worker-host.ts +62 -0
- package/src/dev/worker.ts +332 -0
- package/src/github.ts +121 -0
- package/src/index.ts +20 -0
- package/src/init.ts +123 -0
- package/src/main.ts +28 -0
- package/src/project.ts +89 -0
- package/src/util/net.ts +33 -0
- package/src/util/output.ts +117 -0
- package/src/util/prompt.ts +20 -0
- package/src/util/time.ts +32 -0
- package/src/util/zip.ts +46 -0
- package/template/.github/workflows/platform.yml +24 -0
- package/template/AGENTS.md +134 -0
- package/template/CLAUDE.md +1 -0
- package/template/README.md +13 -0
- package/template/_gitignore +8 -0
- package/template/package.json +31 -0
- package/template/platform.json +18 -0
- package/template/src/server.ts +100 -0
- package/template/src/types.ts +21 -0
- package/template/src/worker.ts +32 -0
- package/template/test/server.test.ts +120 -0
- package/template/test/todos.integration.test.ts +30 -0
- package/template/tsconfig.json +18 -0
- package/template/vitest.config.ts +9 -0
- package/template/vitest.integration.config.ts +10 -0
- package/template/web/index.html +12 -0
- package/template/web/src/App.tsx +102 -0
- package/template/web/src/api.ts +11 -0
- package/template/web/src/main.tsx +10 -0
- package/template/web/src/styles.css +102 -0
- package/template/web/tsconfig.json +18 -0
- package/template/web/vite.config.ts +19 -0
- package/README.md +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-types.js","sourceRoot":"","sources":["../src/api-types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,cAAc,8BAA8B,CAAC"}
|
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed client for the control plane API (`/v1`). Route shapes follow the
|
|
3
|
+
* design in docs/DESIGN.md; list endpoints return `{ <plural>: [...] }`.
|
|
4
|
+
*
|
|
5
|
+
* Auth, in order: an explicit token, GitHub Actions OIDC (CI), the token
|
|
6
|
+
* stored by `plat login`.
|
|
7
|
+
*/
|
|
8
|
+
import { type AppRecord, type AppSummary, type CliLoginRequest, type CliLoginResponse, type CreateAppRequest, type CreateDeploymentRequest, type CreateDeploymentResponse, type DataPage, type DeploymentRecord, type ErrorGroup, type JobStats, type LogLine, type LogsResponse, type MeResponse, type MetricsResponse, type QueueStats, type Resolution, type RouteStats, type SecretInfo, type StageRecord, type StoredObjectInfo, type TraceResponse } from './api-types.ts';
|
|
9
|
+
import { CliError } from './util/output.ts';
|
|
10
|
+
export declare function apiBaseUrl(env?: NodeJS.ProcessEnv): string;
|
|
11
|
+
export declare class ApiError extends CliError {
|
|
12
|
+
readonly status: number;
|
|
13
|
+
readonly code: string;
|
|
14
|
+
constructor(status: number, code: string, message: string);
|
|
15
|
+
}
|
|
16
|
+
export type AuthMode = 'auto' | 'token' | 'oidc' | 'none';
|
|
17
|
+
export interface ApiClientOptions {
|
|
18
|
+
baseUrl?: string;
|
|
19
|
+
token?: string;
|
|
20
|
+
auth?: AuthMode;
|
|
21
|
+
fetch?: typeof fetch;
|
|
22
|
+
}
|
|
23
|
+
type Query = Record<string, string | number | boolean | undefined>;
|
|
24
|
+
export declare class ApiClient {
|
|
25
|
+
readonly baseUrl: string;
|
|
26
|
+
private readonly fetchImpl;
|
|
27
|
+
private readonly authMode;
|
|
28
|
+
private token?;
|
|
29
|
+
constructor(opts?: ApiClientOptions);
|
|
30
|
+
/** The bearer token this client will send (resolved lazily). */
|
|
31
|
+
authorization(): Promise<string | undefined>;
|
|
32
|
+
url(path: string, query?: Query): string;
|
|
33
|
+
request<T>(method: string, path: string, opts?: {
|
|
34
|
+
query?: Query;
|
|
35
|
+
body?: unknown;
|
|
36
|
+
}): Promise<T>;
|
|
37
|
+
/** Server-sent events stream; yields parsed `data:` payloads. */
|
|
38
|
+
stream<T>(path: string, query?: Query, signal?: AbortSignal): AsyncGenerator<T>;
|
|
39
|
+
login(req: CliLoginRequest): Promise<CliLoginResponse>;
|
|
40
|
+
me(): Promise<MeResponse>;
|
|
41
|
+
listApps(): Promise<AppSummary[]>;
|
|
42
|
+
getApp(app: string): Promise<AppSummary>;
|
|
43
|
+
createApp(req: CreateAppRequest): Promise<AppRecord>;
|
|
44
|
+
/** Unregister an app. The API refuses while any stage is still live. */
|
|
45
|
+
deleteApp(app: string): Promise<unknown>;
|
|
46
|
+
listStages(app: string): Promise<StageRecord[]>;
|
|
47
|
+
destroyStage(app: string, stage: string): Promise<unknown>;
|
|
48
|
+
rollback(app: string, stage: string, toDeployment?: string): Promise<DeploymentRecord | StageRecord>;
|
|
49
|
+
createDeployment(app: string, req: CreateDeploymentRequest): Promise<CreateDeploymentResponse>;
|
|
50
|
+
startDeployment(id: string): Promise<DeploymentRecord>;
|
|
51
|
+
getDeployment(id: string): Promise<DeploymentRecord>;
|
|
52
|
+
listDeployments(app: string, stage?: string): Promise<DeploymentRecord[]>;
|
|
53
|
+
metrics(app: string, q: {
|
|
54
|
+
stage: string;
|
|
55
|
+
from: number;
|
|
56
|
+
to: number;
|
|
57
|
+
res: Resolution;
|
|
58
|
+
}): Promise<MetricsResponse>;
|
|
59
|
+
routes(app: string, q: {
|
|
60
|
+
stage: string;
|
|
61
|
+
from: number;
|
|
62
|
+
to: number;
|
|
63
|
+
}): Promise<RouteStats[]>;
|
|
64
|
+
jobs(app: string, q: {
|
|
65
|
+
stage: string;
|
|
66
|
+
from: number;
|
|
67
|
+
to: number;
|
|
68
|
+
}): Promise<{
|
|
69
|
+
jobs: JobStats[];
|
|
70
|
+
queues: QueueStats[];
|
|
71
|
+
}>;
|
|
72
|
+
errors(app: string, q: {
|
|
73
|
+
stage: string;
|
|
74
|
+
}): Promise<ErrorGroup[]>;
|
|
75
|
+
logs(app: string, q: {
|
|
76
|
+
stage: string;
|
|
77
|
+
from: number;
|
|
78
|
+
to?: number;
|
|
79
|
+
filter?: string;
|
|
80
|
+
nextToken?: string;
|
|
81
|
+
limit?: number;
|
|
82
|
+
}): Promise<LogsResponse>;
|
|
83
|
+
tailLogs(app: string, q: {
|
|
84
|
+
stage: string;
|
|
85
|
+
filter?: string;
|
|
86
|
+
}, signal?: AbortSignal): AsyncGenerator<LogLine, any, any>;
|
|
87
|
+
trace(app: string, trace: string, q: {
|
|
88
|
+
stage: string;
|
|
89
|
+
}): Promise<TraceResponse>;
|
|
90
|
+
collections(app: string, q: {
|
|
91
|
+
stage: string;
|
|
92
|
+
}): Promise<string[]>;
|
|
93
|
+
items(app: string, q: {
|
|
94
|
+
stage: string;
|
|
95
|
+
collection: string;
|
|
96
|
+
partition?: string;
|
|
97
|
+
cursor?: string;
|
|
98
|
+
limit?: number;
|
|
99
|
+
}): Promise<DataPage>;
|
|
100
|
+
files(app: string, q: {
|
|
101
|
+
stage: string;
|
|
102
|
+
store: string;
|
|
103
|
+
prefix?: string;
|
|
104
|
+
cursor?: string;
|
|
105
|
+
}): Promise<{
|
|
106
|
+
objects: StoredObjectInfo[];
|
|
107
|
+
cursor?: string;
|
|
108
|
+
}>;
|
|
109
|
+
listSecrets(app: string, q: {
|
|
110
|
+
stage: string;
|
|
111
|
+
}): Promise<SecretInfo[]>;
|
|
112
|
+
setSecret(app: string, name: string, body: {
|
|
113
|
+
value: string;
|
|
114
|
+
stage?: string;
|
|
115
|
+
shared?: boolean;
|
|
116
|
+
}): Promise<SecretInfo>;
|
|
117
|
+
deleteSecret(app: string, name: string, q: {
|
|
118
|
+
stage?: string;
|
|
119
|
+
shared?: boolean;
|
|
120
|
+
}): Promise<unknown>;
|
|
121
|
+
runCron(app: string, name: string, stage: string): Promise<unknown>;
|
|
122
|
+
}
|
|
123
|
+
export {};
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed client for the control plane API (`/v1`). Route shapes follow the
|
|
3
|
+
* design in docs/DESIGN.md; list endpoints return `{ <plural>: [...] }`.
|
|
4
|
+
*
|
|
5
|
+
* Auth, in order: an explicit token, GitHub Actions OIDC (CI), the token
|
|
6
|
+
* stored by `plat login`.
|
|
7
|
+
*/
|
|
8
|
+
import { PLATFORM_DEFAULTS, } from './api-types.js';
|
|
9
|
+
import { isExpired, loadCredentials } from './credentials.js';
|
|
10
|
+
import { canUseOidc, fetchOidcToken } from './github.js';
|
|
11
|
+
import { CliError, EXIT } from './util/output.js';
|
|
12
|
+
export function apiBaseUrl(env = process.env) {
|
|
13
|
+
return (env.PLATFORM_API_URL || PLATFORM_DEFAULTS.apiUrl).replace(/\/$/, '');
|
|
14
|
+
}
|
|
15
|
+
export class ApiError extends CliError {
|
|
16
|
+
status;
|
|
17
|
+
code;
|
|
18
|
+
constructor(status, code, message) {
|
|
19
|
+
super(message, {
|
|
20
|
+
hint: hintFor(status),
|
|
21
|
+
exitCode: status === 401 || status === 403 ? EXIT.auth : status === 404 ? EXIT.notFound : EXIT.error,
|
|
22
|
+
});
|
|
23
|
+
this.status = status;
|
|
24
|
+
this.code = code;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function hintFor(status) {
|
|
28
|
+
if (status === 401)
|
|
29
|
+
return 'run `plat login` (or check the CI workflow has `id-token: write`)';
|
|
30
|
+
if (status === 403)
|
|
31
|
+
return 'you are not allowed to do this; ask a platform admin';
|
|
32
|
+
if (status === 404)
|
|
33
|
+
return 'check the app/stage name with `plat apps list` / `plat stages`';
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
export class ApiClient {
|
|
37
|
+
baseUrl;
|
|
38
|
+
fetchImpl;
|
|
39
|
+
authMode;
|
|
40
|
+
token;
|
|
41
|
+
constructor(opts = {}) {
|
|
42
|
+
this.baseUrl = (opts.baseUrl ?? apiBaseUrl()).replace(/\/$/, '');
|
|
43
|
+
this.fetchImpl = opts.fetch ?? fetch;
|
|
44
|
+
this.authMode = opts.auth ?? 'auto';
|
|
45
|
+
this.token = opts.token;
|
|
46
|
+
}
|
|
47
|
+
/** The bearer token this client will send (resolved lazily). */
|
|
48
|
+
async authorization() {
|
|
49
|
+
if (this.token)
|
|
50
|
+
return this.token;
|
|
51
|
+
if (this.authMode === 'none')
|
|
52
|
+
return undefined;
|
|
53
|
+
if (this.authMode !== 'token' && canUseOidc()) {
|
|
54
|
+
this.token = await fetchOidcToken(PLATFORM_DEFAULTS.oidcAudience);
|
|
55
|
+
return this.token;
|
|
56
|
+
}
|
|
57
|
+
if (this.authMode === 'oidc') {
|
|
58
|
+
throw new CliError('GitHub Actions OIDC is not available here', { exitCode: EXIT.auth });
|
|
59
|
+
}
|
|
60
|
+
const creds = loadCredentials();
|
|
61
|
+
if (!creds)
|
|
62
|
+
throw new CliError('not logged in', { hint: 'run `plat login`', exitCode: EXIT.auth });
|
|
63
|
+
if (isExpired(creds))
|
|
64
|
+
throw new CliError('your platform login has expired', {
|
|
65
|
+
hint: 'run `plat login`',
|
|
66
|
+
exitCode: EXIT.auth,
|
|
67
|
+
});
|
|
68
|
+
if (creds.apiUrl.replace(/\/$/, '') !== this.baseUrl) {
|
|
69
|
+
throw new CliError(`stored login is for ${creds.apiUrl}, not ${this.baseUrl}`, {
|
|
70
|
+
hint: 'run `plat login` again',
|
|
71
|
+
exitCode: EXIT.auth,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
this.token = creds.token;
|
|
75
|
+
return this.token;
|
|
76
|
+
}
|
|
77
|
+
url(path, query) {
|
|
78
|
+
const u = new URL(this.baseUrl + path);
|
|
79
|
+
for (const [k, v] of Object.entries(query ?? {}))
|
|
80
|
+
if (v !== undefined && v !== '')
|
|
81
|
+
u.searchParams.set(k, String(v));
|
|
82
|
+
return u.toString();
|
|
83
|
+
}
|
|
84
|
+
async request(method, path, opts = {}) {
|
|
85
|
+
const headers = { accept: 'application/json' };
|
|
86
|
+
const auth = await this.authorization();
|
|
87
|
+
if (auth)
|
|
88
|
+
headers.authorization = `Bearer ${auth}`;
|
|
89
|
+
if (opts.body !== undefined)
|
|
90
|
+
headers['content-type'] = 'application/json';
|
|
91
|
+
let res;
|
|
92
|
+
try {
|
|
93
|
+
res = await this.fetchImpl(this.url(path, opts.query), {
|
|
94
|
+
method,
|
|
95
|
+
headers,
|
|
96
|
+
body: opts.body === undefined ? undefined : JSON.stringify(opts.body),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
throw new CliError(`can't reach the platform API at ${this.baseUrl}: ${err.message}`, {
|
|
101
|
+
hint: 'set PLATFORM_API_URL if the API lives elsewhere',
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
const text = await res.text();
|
|
105
|
+
const body = text ? safeJson(text) : undefined;
|
|
106
|
+
if (!res.ok) {
|
|
107
|
+
const e = body?.error;
|
|
108
|
+
throw new ApiError(res.status, e?.code ?? `http_${res.status}`, e?.message ?? `${method} ${path} failed (HTTP ${res.status})`);
|
|
109
|
+
}
|
|
110
|
+
return body;
|
|
111
|
+
}
|
|
112
|
+
/** Server-sent events stream; yields parsed `data:` payloads. */
|
|
113
|
+
async *stream(path, query, signal) {
|
|
114
|
+
const headers = { accept: 'text/event-stream' };
|
|
115
|
+
const auth = await this.authorization();
|
|
116
|
+
if (auth)
|
|
117
|
+
headers.authorization = `Bearer ${auth}`;
|
|
118
|
+
const res = await this.fetchImpl(this.url(path, query), { headers, signal });
|
|
119
|
+
if (!res.ok || !res.body)
|
|
120
|
+
throw new ApiError(res.status, `http_${res.status}`, `stream ${path} failed (HTTP ${res.status})`);
|
|
121
|
+
const decoder = new TextDecoder();
|
|
122
|
+
let buf = '';
|
|
123
|
+
for await (const chunk of res.body) {
|
|
124
|
+
buf += decoder.decode(chunk, { stream: true });
|
|
125
|
+
let idx = buf.indexOf('\n\n');
|
|
126
|
+
while (idx !== -1) {
|
|
127
|
+
const frame = buf.slice(0, idx);
|
|
128
|
+
buf = buf.slice(idx + 2);
|
|
129
|
+
const data = frame
|
|
130
|
+
.split('\n')
|
|
131
|
+
.filter((l) => l.startsWith('data:'))
|
|
132
|
+
.map((l) => l.slice(5).trimStart())
|
|
133
|
+
.join('\n');
|
|
134
|
+
if (data)
|
|
135
|
+
yield safeJson(data);
|
|
136
|
+
idx = buf.indexOf('\n\n');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// ------------------------------------------------------------- auth
|
|
141
|
+
login(req) {
|
|
142
|
+
return this.request('POST', '/v1/auth/cli', { body: req });
|
|
143
|
+
}
|
|
144
|
+
me() {
|
|
145
|
+
return this.request('GET', '/v1/me');
|
|
146
|
+
}
|
|
147
|
+
// ------------------------------------------------------------- apps
|
|
148
|
+
async listApps() {
|
|
149
|
+
return list(await this.request('GET', '/v1/apps'), 'apps');
|
|
150
|
+
}
|
|
151
|
+
getApp(app) {
|
|
152
|
+
return this.request('GET', `/v1/apps/${enc(app)}`);
|
|
153
|
+
}
|
|
154
|
+
createApp(req) {
|
|
155
|
+
return this.request('POST', '/v1/apps', { body: req });
|
|
156
|
+
}
|
|
157
|
+
/** Unregister an app. The API refuses while any stage is still live. */
|
|
158
|
+
deleteApp(app) {
|
|
159
|
+
return this.request('DELETE', `/v1/apps/${enc(app)}`);
|
|
160
|
+
}
|
|
161
|
+
// ------------------------------------------------------------- stages & deployments
|
|
162
|
+
async listStages(app) {
|
|
163
|
+
return list(await this.request('GET', `/v1/apps/${enc(app)}/stages`), 'stages');
|
|
164
|
+
}
|
|
165
|
+
destroyStage(app, stage) {
|
|
166
|
+
// The API requires an explicit confirmation to destroy prod.
|
|
167
|
+
return this.request('DELETE', `/v1/apps/${enc(app)}/stages/${enc(stage)}`, {
|
|
168
|
+
query: stage === 'prod' ? { confirm: app } : {},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
rollback(app, stage, toDeployment) {
|
|
172
|
+
return this.request('POST', `/v1/apps/${enc(app)}/stages/${enc(stage)}/rollback`, {
|
|
173
|
+
body: toDeployment ? { deploymentId: toDeployment } : {},
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
createDeployment(app, req) {
|
|
177
|
+
return this.request('POST', `/v1/apps/${enc(app)}/deployments`, { body: req });
|
|
178
|
+
}
|
|
179
|
+
startDeployment(id) {
|
|
180
|
+
return this.request('POST', `/v1/deployments/${enc(id)}/start`, { body: {} });
|
|
181
|
+
}
|
|
182
|
+
getDeployment(id) {
|
|
183
|
+
return this.request('GET', `/v1/deployments/${enc(id)}`);
|
|
184
|
+
}
|
|
185
|
+
async listDeployments(app, stage) {
|
|
186
|
+
return list(await this.request('GET', `/v1/apps/${enc(app)}/deployments`, { query: { stage } }), 'deployments');
|
|
187
|
+
}
|
|
188
|
+
// ------------------------------------------------------------- observability
|
|
189
|
+
metrics(app, q) {
|
|
190
|
+
return this.request('GET', `/v1/apps/${enc(app)}/metrics`, { query: q });
|
|
191
|
+
}
|
|
192
|
+
async routes(app, q) {
|
|
193
|
+
return list(await this.request('GET', `/v1/apps/${enc(app)}/routes`, { query: q }), 'routes');
|
|
194
|
+
}
|
|
195
|
+
async jobs(app, q) {
|
|
196
|
+
const [body, queues] = await Promise.all([
|
|
197
|
+
this.request('GET', `/v1/apps/${enc(app)}/jobs`, { query: q }),
|
|
198
|
+
this.request('GET', `/v1/apps/${enc(app)}/queues`, { query: { stage: q.stage } }),
|
|
199
|
+
]);
|
|
200
|
+
return { jobs: body?.jobs ?? [], queues: Array.isArray(queues) ? queues : [] };
|
|
201
|
+
}
|
|
202
|
+
async errors(app, q) {
|
|
203
|
+
return list(await this.request('GET', `/v1/apps/${enc(app)}/errors`, { query: q }), 'errors');
|
|
204
|
+
}
|
|
205
|
+
logs(app, q) {
|
|
206
|
+
const { filter, nextToken, ...rest } = q;
|
|
207
|
+
return this.request('GET', `/v1/apps/${enc(app)}/logs`, {
|
|
208
|
+
query: { ...rest, ...(filter ? { q: filter } : {}), ...(nextToken ? { next: nextToken } : {}) },
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
tailLogs(app, q, signal) {
|
|
212
|
+
return this.stream(`/v1/apps/${enc(app)}/logs/tail`, { stage: q.stage, ...(q.filter ? { q: q.filter } : {}) }, signal);
|
|
213
|
+
}
|
|
214
|
+
trace(app, trace, q) {
|
|
215
|
+
return this.request('GET', `/v1/apps/${enc(app)}/traces/${enc(trace)}`, { query: q });
|
|
216
|
+
}
|
|
217
|
+
// ------------------------------------------------------------- data
|
|
218
|
+
async collections(app, q) {
|
|
219
|
+
const rows = list(await this.request('GET', `/v1/apps/${enc(app)}/data/collections`, { query: q }), 'collections');
|
|
220
|
+
return rows.map((r) => (typeof r === 'string' ? r : r.name));
|
|
221
|
+
}
|
|
222
|
+
items(app, q) {
|
|
223
|
+
return this.request('GET', `/v1/apps/${enc(app)}/data/items`, { query: q });
|
|
224
|
+
}
|
|
225
|
+
async files(app, q) {
|
|
226
|
+
return this.request('GET', `/v1/apps/${enc(app)}/storage`, { query: q });
|
|
227
|
+
}
|
|
228
|
+
// ------------------------------------------------------------- secrets & jobs
|
|
229
|
+
async listSecrets(app, q) {
|
|
230
|
+
return list(await this.request('GET', `/v1/apps/${enc(app)}/secrets`, { query: q }), 'secrets');
|
|
231
|
+
}
|
|
232
|
+
setSecret(app, name, body) {
|
|
233
|
+
return this.request('PUT', `/v1/apps/${enc(app)}/secrets/${enc(name)}`, {
|
|
234
|
+
body: { value: body.value },
|
|
235
|
+
query: secretScope(body),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
deleteSecret(app, name, q) {
|
|
239
|
+
return this.request('DELETE', `/v1/apps/${enc(app)}/secrets/${enc(name)}`, {
|
|
240
|
+
query: secretScope(q),
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
runCron(app, name, stage) {
|
|
244
|
+
return this.request('POST', `/v1/apps/${enc(app)}/crons/${enc(name)}/run`, {
|
|
245
|
+
body: {},
|
|
246
|
+
query: { stage },
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
const enc = encodeURIComponent;
|
|
251
|
+
/** The API scopes secrets with `?scope=shared` (app-wide) or `?stage=`. */
|
|
252
|
+
function secretScope(o) {
|
|
253
|
+
return o.shared ? { scope: 'shared' } : o.stage ? { stage: o.stage } : {};
|
|
254
|
+
}
|
|
255
|
+
function safeJson(text) {
|
|
256
|
+
try {
|
|
257
|
+
return JSON.parse(text);
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
return text;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/** Accept `[...]` or `{ key: [...] }` / `{ items: [...] }`. */
|
|
264
|
+
function list(body, key) {
|
|
265
|
+
if (Array.isArray(body))
|
|
266
|
+
return body;
|
|
267
|
+
const obj = (body ?? {});
|
|
268
|
+
const v = obj[key] ?? obj.items;
|
|
269
|
+
return Array.isArray(v) ? v : [];
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/bin.d.ts
ADDED
package/dist/bin.js
ADDED
package/dist/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/build.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ArtifactFile, ResolvedManifest } from '@ericminassian/platform-core';
|
|
2
|
+
import { type Plugin } from 'esbuild';
|
|
3
|
+
export declare const SDK_SERVER = "@ericminassian/platform/server";
|
|
4
|
+
export declare const SDK_WORKER = "@ericminassian/platform/worker";
|
|
5
|
+
export interface BuildOptions {
|
|
6
|
+
cwd: string;
|
|
7
|
+
/** Default `<app>/.plat/build`. */
|
|
8
|
+
outDir?: string;
|
|
9
|
+
/** Skip `web.build` (e.g. `plat dev`, which runs the dev server instead). */
|
|
10
|
+
skipWebBuild?: boolean;
|
|
11
|
+
/** Only build these parts. Default: everything the manifest declares. */
|
|
12
|
+
only?: Array<'server' | 'worker' | 'static'>;
|
|
13
|
+
/**
|
|
14
|
+
* Replace module specifiers during bundling (absolute paths). Tests use it to
|
|
15
|
+
* stand in for the SDK; nothing else should need it.
|
|
16
|
+
*/
|
|
17
|
+
resolveOverrides?: Record<string, string>;
|
|
18
|
+
minify?: boolean;
|
|
19
|
+
quiet?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface BuildResult {
|
|
22
|
+
manifest: ResolvedManifest;
|
|
23
|
+
/** Absolute paths of the produced artifacts. */
|
|
24
|
+
files: Partial<Record<ArtifactFile, string>>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Builds an app into deployable artifacts:
|
|
28
|
+
* - `server.zip` → `index.mjs` (+ map): the app's fetch handler wrapped by the SDK server
|
|
29
|
+
* - `worker.zip` → `index.mjs` (+ map): `export const handler` for the worker Lambda
|
|
30
|
+
* - `static.zip` → the built frontend
|
|
31
|
+
* - `manifest.json` → `{ manifest, resolved, build }`
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildApp(opts: BuildOptions): Promise<BuildResult>;
|
|
34
|
+
/** Bundle just the worker into `outDir/index.mjs` (used by build and `plat dev`). */
|
|
35
|
+
export declare function bundleWorker(root: string, manifest: ResolvedManifest, outDir: string, opts?: {
|
|
36
|
+
plugins?: Plugin[];
|
|
37
|
+
minify?: boolean;
|
|
38
|
+
}): Promise<string>;
|
|
39
|
+
/** Zip of a bundled directory, for UpdateFunctionCode. */
|
|
40
|
+
export declare function zipBundle(dir: string): Uint8Array;
|
|
41
|
+
export declare function validateForBuild(root: string, manifest: ResolvedManifest): void;
|
|
42
|
+
/** Run a manifest shell command with the app's `node_modules/.bin` on PATH. */
|
|
43
|
+
export declare function runCommand(command: string, cwd: string, env?: NodeJS.ProcessEnv): Promise<void>;
|
|
44
|
+
export declare function withLocalBin(cwd: string, env?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
45
|
+
export declare function readBuildManifest(outDir: string): unknown;
|