@inquir/compute 0.1.1
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 +97 -0
- package/dist/codegen.d.ts +6 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +209 -0
- package/dist/codegen.js.map +1 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +50 -0
- package/dist/config.js.map +1 -0
- package/dist/define-function.d.ts +22 -0
- package/dist/define-function.d.ts.map +1 -0
- package/dist/define-function.js +30 -0
- package/dist/define-function.js.map +1 -0
- package/dist/define-pipeline.d.ts +8 -0
- package/dist/define-pipeline.d.ts.map +1 -0
- package/dist/define-pipeline.js +56 -0
- package/dist/define-pipeline.js.map +1 -0
- package/dist/discovery-harness.d.ts +2 -0
- package/dist/discovery-harness.d.ts.map +1 -0
- package/dist/discovery-harness.js +67 -0
- package/dist/discovery-harness.js.map +1 -0
- package/dist/discovery.d.ts +4 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +136 -0
- package/dist/discovery.js.map +1 -0
- package/dist/hashing.d.ts +2 -0
- package/dist/hashing.d.ts.map +1 -0
- package/dist/hashing.js +51 -0
- package/dist/hashing.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/json-schema.d.ts +4 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +162 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/local-runner-harness.d.ts +2 -0
- package/dist/local-runner-harness.d.ts.map +1 -0
- package/dist/local-runner-harness.js +87 -0
- package/dist/local-runner-harness.js.map +1 -0
- package/dist/local-runner.d.ts +4 -0
- package/dist/local-runner.d.ts.map +1 -0
- package/dist/local-runner.js +92 -0
- package/dist/local-runner.js.map +1 -0
- package/dist/transport.d.ts +257 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +257 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +198 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/zip.d.ts +6 -0
- package/dist/zip.d.ts.map +1 -0
- package/dist/zip.js +145 -0
- package/dist/zip.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import type { RemoteFunctionRecord, RemoteInvocationRecord, RemoteInvocationResult } from './types.js';
|
|
2
|
+
export interface TransportClientOptions {
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
/**
|
|
6
|
+
* Target workspace id for user-scoped credentials (sessions / Personal Access
|
|
7
|
+
* Tokens). Sent as the `X-Inquir-Workspace` header so a single credential can
|
|
8
|
+
* deploy into any workspace the user belongs to. Ignored by tenant-scoped API
|
|
9
|
+
* keys (which are pinned to their own tenant).
|
|
10
|
+
*/
|
|
11
|
+
workspaceId?: string;
|
|
12
|
+
fetchImpl?: typeof fetch;
|
|
13
|
+
}
|
|
14
|
+
export interface InvokeRemoteOptions {
|
|
15
|
+
context?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface CreateRemoteFunctionInput {
|
|
18
|
+
name: string;
|
|
19
|
+
handler: string;
|
|
20
|
+
runtime?: string;
|
|
21
|
+
runtimeVariant?: string;
|
|
22
|
+
timeoutMs?: number;
|
|
23
|
+
memoryMb?: number;
|
|
24
|
+
cpuShares?: number;
|
|
25
|
+
allowNetwork?: boolean;
|
|
26
|
+
envVars?: Record<string, string>;
|
|
27
|
+
layerIds?: string[];
|
|
28
|
+
codeZipBase64?: string;
|
|
29
|
+
sourceHash?: string;
|
|
30
|
+
linkedLocalName?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface UpdateRemoteFunctionInput extends Partial<CreateRemoteFunctionInput> {
|
|
33
|
+
}
|
|
34
|
+
export interface DeployRemoteFunctionOptions {
|
|
35
|
+
count?: number;
|
|
36
|
+
force?: boolean;
|
|
37
|
+
skipBundle?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface DeployGitContext {
|
|
40
|
+
sha?: string;
|
|
41
|
+
ref?: string;
|
|
42
|
+
repo?: string;
|
|
43
|
+
actor?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface QueueDeployInput {
|
|
46
|
+
functionId?: string;
|
|
47
|
+
name?: string;
|
|
48
|
+
environment?: string;
|
|
49
|
+
source?: string;
|
|
50
|
+
git?: DeployGitContext;
|
|
51
|
+
handler?: string;
|
|
52
|
+
runtime?: string;
|
|
53
|
+
runtimeVariant?: string;
|
|
54
|
+
timeoutMs?: number;
|
|
55
|
+
memoryMb?: number;
|
|
56
|
+
cpuShares?: number;
|
|
57
|
+
allowNetwork?: boolean;
|
|
58
|
+
envVars?: Record<string, string>;
|
|
59
|
+
layerIds?: string[];
|
|
60
|
+
moduleType?: 'esm' | 'commonjs' | 'auto';
|
|
61
|
+
entryFile?: string;
|
|
62
|
+
codeZipBase64?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface QueuedDeployResponse {
|
|
65
|
+
deployId: string;
|
|
66
|
+
functionId: string;
|
|
67
|
+
functionName?: string;
|
|
68
|
+
version: number;
|
|
69
|
+
status: string;
|
|
70
|
+
environment?: string;
|
|
71
|
+
rolledBackFrom?: string;
|
|
72
|
+
statusUrl: string;
|
|
73
|
+
logsUrl: string;
|
|
74
|
+
}
|
|
75
|
+
export interface DeployRecord {
|
|
76
|
+
deployId: string;
|
|
77
|
+
functionId: string;
|
|
78
|
+
version: number;
|
|
79
|
+
status: string;
|
|
80
|
+
environment: string;
|
|
81
|
+
source: string;
|
|
82
|
+
isActive: boolean;
|
|
83
|
+
git?: DeployGitContext;
|
|
84
|
+
url?: string;
|
|
85
|
+
error?: string;
|
|
86
|
+
rolledBackFrom?: string;
|
|
87
|
+
durationMs?: number;
|
|
88
|
+
createdAt: string;
|
|
89
|
+
startedAt?: string;
|
|
90
|
+
completedAt?: string;
|
|
91
|
+
}
|
|
92
|
+
export interface DeployListResponse {
|
|
93
|
+
items: DeployRecord[];
|
|
94
|
+
total: number;
|
|
95
|
+
limit: number;
|
|
96
|
+
offset: number;
|
|
97
|
+
}
|
|
98
|
+
export interface RollbackDeployOptions {
|
|
99
|
+
environment?: string;
|
|
100
|
+
source?: string;
|
|
101
|
+
git?: DeployGitContext;
|
|
102
|
+
}
|
|
103
|
+
export type DeployLogEvent = {
|
|
104
|
+
type: 'log';
|
|
105
|
+
line: string;
|
|
106
|
+
ts?: string;
|
|
107
|
+
} | {
|
|
108
|
+
type: 'status';
|
|
109
|
+
status: string;
|
|
110
|
+
ts?: string;
|
|
111
|
+
} | {
|
|
112
|
+
type: 'complete';
|
|
113
|
+
status: string;
|
|
114
|
+
ts?: string;
|
|
115
|
+
};
|
|
116
|
+
export declare function isTerminalDeployStatus(status: string): boolean;
|
|
117
|
+
export interface RemoteFunctionsListResponse {
|
|
118
|
+
items: RemoteFunctionRecord[];
|
|
119
|
+
total: number;
|
|
120
|
+
limit: number;
|
|
121
|
+
offset: number;
|
|
122
|
+
}
|
|
123
|
+
export interface RemoteInvocationsListResponse {
|
|
124
|
+
items: RemoteInvocationRecord[];
|
|
125
|
+
total: number;
|
|
126
|
+
limit: number;
|
|
127
|
+
offset: number;
|
|
128
|
+
}
|
|
129
|
+
export interface TransportClient {
|
|
130
|
+
readonly baseUrl: string;
|
|
131
|
+
readonly apiKey?: string;
|
|
132
|
+
readonly workspaceId?: string;
|
|
133
|
+
readonly fetchImpl: typeof fetch;
|
|
134
|
+
readonly functionCache: Map<string, RemoteFunctionRecord>;
|
|
135
|
+
}
|
|
136
|
+
export declare function createClient(options: TransportClientOptions): TransportClient;
|
|
137
|
+
export declare function listRemoteFunctions(client: TransportClient): Promise<RemoteFunctionRecord[]>;
|
|
138
|
+
export declare function resolveRemoteFunction(client: TransportClient, functionName: string): Promise<RemoteFunctionRecord>;
|
|
139
|
+
export declare function invokeRemote<TPayload = unknown, TResult = unknown>(client: TransportClient, functionName: string, payload: TPayload, options?: InvokeRemoteOptions): Promise<RemoteInvocationResult<TResult>>;
|
|
140
|
+
export declare function createRemoteFunction(client: TransportClient, input: CreateRemoteFunctionInput): Promise<RemoteFunctionRecord>;
|
|
141
|
+
export declare function updateRemoteFunction(client: TransportClient, functionId: string, input: UpdateRemoteFunctionInput): Promise<RemoteFunctionRecord>;
|
|
142
|
+
export declare function deployRemoteFunction(client: TransportClient, functionId: string, options?: DeployRemoteFunctionOptions): Promise<Record<string, unknown>>;
|
|
143
|
+
/** Queue an async deploy. Resolves by `functionId` or `name`. */
|
|
144
|
+
export declare function queueDeploy(client: TransportClient, input: QueueDeployInput): Promise<QueuedDeployResponse>;
|
|
145
|
+
export interface OidcExchangeInput {
|
|
146
|
+
/** The GitHub Actions OIDC token (from `core.getIDToken(audience)`). */
|
|
147
|
+
token: string;
|
|
148
|
+
/** Optional explicit target tenant/workspace id. */
|
|
149
|
+
tenantId?: string;
|
|
150
|
+
/** Optional requested deploy environment. */
|
|
151
|
+
environment?: string;
|
|
152
|
+
}
|
|
153
|
+
export interface OidcExchangeResponse {
|
|
154
|
+
apiKey: string;
|
|
155
|
+
tenantId: string;
|
|
156
|
+
scope?: string;
|
|
157
|
+
expiresAt: string;
|
|
158
|
+
repo: string;
|
|
159
|
+
ref?: string;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Exchange a GitHub OIDC token for a short-lived Inquir deploy token (Phase 2,
|
|
163
|
+
* keyless auth). Public endpoint — no API key required. Throws on rejection.
|
|
164
|
+
*/
|
|
165
|
+
export declare function exchangeGitHubOidc(baseUrl: string, input: OidcExchangeInput, fetchImpl?: typeof fetch): Promise<OidcExchangeResponse>;
|
|
166
|
+
export declare function getDeployStatus(client: TransportClient, deployId: string): Promise<DeployRecord>;
|
|
167
|
+
export declare function listFunctionDeploys(client: TransportClient, functionId: string, options?: {
|
|
168
|
+
limit?: number;
|
|
169
|
+
offset?: number;
|
|
170
|
+
}): Promise<DeployListResponse>;
|
|
171
|
+
export declare function rollbackDeploy(client: TransportClient, functionId: string, deployId: string, options?: RollbackDeployOptions): Promise<QueuedDeployResponse>;
|
|
172
|
+
/** Stream a deploy's logs over SSE. Yields log/status/complete events until the deploy is terminal. */
|
|
173
|
+
export declare function streamDeployLogs(client: TransportClient, deployId: string, signal?: AbortSignal): AsyncGenerator<DeployLogEvent, void, unknown>;
|
|
174
|
+
export declare function listRemoteInvocations(client: TransportClient, functionId: string, options?: {
|
|
175
|
+
limit?: number;
|
|
176
|
+
offset?: number;
|
|
177
|
+
}): Promise<RemoteInvocationsListResponse>;
|
|
178
|
+
export interface CliPairingStartResponse {
|
|
179
|
+
pairingId: string;
|
|
180
|
+
deviceSecret: string;
|
|
181
|
+
userCode: string;
|
|
182
|
+
verificationUrl: string;
|
|
183
|
+
/** Suggested poll interval, in seconds. */
|
|
184
|
+
interval: number;
|
|
185
|
+
expiresAt: string;
|
|
186
|
+
}
|
|
187
|
+
export type CliPairingPollResponse = {
|
|
188
|
+
status: 'pending';
|
|
189
|
+
} | {
|
|
190
|
+
status: 'denied';
|
|
191
|
+
} | {
|
|
192
|
+
status: 'expired';
|
|
193
|
+
} | {
|
|
194
|
+
status: 'approved';
|
|
195
|
+
token: string;
|
|
196
|
+
user: {
|
|
197
|
+
id: string;
|
|
198
|
+
email: string;
|
|
199
|
+
name?: string;
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* Begin a CLI device pairing. Public endpoint — no credentials required. The
|
|
204
|
+
* returned `verificationUrl` is opened in the user's browser; the CLI then polls
|
|
205
|
+
* `pollCliAuth` with the `deviceSecret` until the user approves.
|
|
206
|
+
*/
|
|
207
|
+
export declare function startCliAuth(baseUrl: string, input?: {
|
|
208
|
+
name?: string;
|
|
209
|
+
port?: number;
|
|
210
|
+
}, fetchImpl?: typeof fetch): Promise<CliPairingStartResponse>;
|
|
211
|
+
/** Poll a pending pairing for its minted token. Public endpoint. */
|
|
212
|
+
export declare function pollCliAuth(baseUrl: string, input: {
|
|
213
|
+
pairingId: string;
|
|
214
|
+
deviceSecret: string;
|
|
215
|
+
}, fetchImpl?: typeof fetch): Promise<CliPairingPollResponse>;
|
|
216
|
+
export interface WorkspaceSummary {
|
|
217
|
+
id: string;
|
|
218
|
+
name: string;
|
|
219
|
+
slug: string;
|
|
220
|
+
role: string;
|
|
221
|
+
memberCount: number;
|
|
222
|
+
}
|
|
223
|
+
export interface MeResponse {
|
|
224
|
+
user: {
|
|
225
|
+
id: string;
|
|
226
|
+
email?: string;
|
|
227
|
+
name?: string;
|
|
228
|
+
} | null;
|
|
229
|
+
activeWorkspace: WorkspaceSummary;
|
|
230
|
+
workspaces: WorkspaceSummary[];
|
|
231
|
+
}
|
|
232
|
+
/** Current identity and the workspaces the credential can act on. */
|
|
233
|
+
export declare function getMe(client: TransportClient): Promise<MeResponse>;
|
|
234
|
+
/** Convenience wrapper returning just the workspace list from `/v1/me`. */
|
|
235
|
+
export declare function listWorkspaces(client: TransportClient): Promise<WorkspaceSummary[]>;
|
|
236
|
+
export interface PersonalAccessTokenSummary {
|
|
237
|
+
id: string;
|
|
238
|
+
name?: string;
|
|
239
|
+
createdAt: string;
|
|
240
|
+
lastUsedAt?: string;
|
|
241
|
+
expiresAt?: string;
|
|
242
|
+
revokedAt?: string;
|
|
243
|
+
}
|
|
244
|
+
export interface PersonalAccessTokenCreateResponse {
|
|
245
|
+
id: string;
|
|
246
|
+
token: string;
|
|
247
|
+
name?: string;
|
|
248
|
+
createdAt: string;
|
|
249
|
+
expiresAt?: string;
|
|
250
|
+
}
|
|
251
|
+
export declare function listPersonalAccessTokens(client: TransportClient): Promise<PersonalAccessTokenSummary[]>;
|
|
252
|
+
export declare function createPersonalAccessToken(client: TransportClient, input?: {
|
|
253
|
+
name?: string;
|
|
254
|
+
ttlMs?: number;
|
|
255
|
+
}): Promise<PersonalAccessTokenCreateResponse>;
|
|
256
|
+
export declare function revokePersonalAccessToken(client: TransportClient, tokenId: string): Promise<void>;
|
|
257
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
const TERMINAL_DEPLOY_STATUSES = new Set(['success', 'failure', 'cancelled']);
|
|
2
|
+
export function isTerminalDeployStatus(status) {
|
|
3
|
+
return TERMINAL_DEPLOY_STATUSES.has(status);
|
|
4
|
+
}
|
|
5
|
+
export function createClient(options) {
|
|
6
|
+
return {
|
|
7
|
+
baseUrl: options.baseUrl.replace(/\/+$/, ''),
|
|
8
|
+
apiKey: options.apiKey,
|
|
9
|
+
workspaceId: options.workspaceId,
|
|
10
|
+
fetchImpl: options.fetchImpl ?? fetch,
|
|
11
|
+
functionCache: new Map(),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** Auth + workspace-targeting headers shared by every request the client makes. */
|
|
15
|
+
function authHeaders(client) {
|
|
16
|
+
return {
|
|
17
|
+
...(client.apiKey ? { 'X-Api-Key': client.apiKey } : {}),
|
|
18
|
+
...(client.workspaceId ? { 'X-Inquir-Workspace': client.workspaceId } : {}),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async function request(client, method, pathname, body) {
|
|
22
|
+
const response = await client.fetchImpl(`${client.baseUrl}${pathname}`, {
|
|
23
|
+
method,
|
|
24
|
+
headers: {
|
|
25
|
+
'Content-Type': 'application/json',
|
|
26
|
+
...authHeaders(client),
|
|
27
|
+
},
|
|
28
|
+
body: body === undefined ? undefined : JSON.stringify(body),
|
|
29
|
+
});
|
|
30
|
+
const text = await response.text();
|
|
31
|
+
const payload = text ? JSON.parse(text) : undefined;
|
|
32
|
+
if (!response.ok) {
|
|
33
|
+
const message = typeof payload === 'object' && payload !== null
|
|
34
|
+
? payload.message
|
|
35
|
+
?? payload.error?.message
|
|
36
|
+
: undefined;
|
|
37
|
+
throw new Error(message ?? `HTTP ${response.status}`);
|
|
38
|
+
}
|
|
39
|
+
return payload;
|
|
40
|
+
}
|
|
41
|
+
export async function listRemoteFunctions(client) {
|
|
42
|
+
const response = await request(client, 'GET', '/functions');
|
|
43
|
+
for (const item of response.items) {
|
|
44
|
+
client.functionCache.set(item.name, item);
|
|
45
|
+
}
|
|
46
|
+
return response.items;
|
|
47
|
+
}
|
|
48
|
+
export async function resolveRemoteFunction(client, functionName) {
|
|
49
|
+
const cached = client.functionCache.get(functionName);
|
|
50
|
+
if (cached) {
|
|
51
|
+
return cached;
|
|
52
|
+
}
|
|
53
|
+
const functions = await listRemoteFunctions(client);
|
|
54
|
+
const match = functions.find((item) => item.name === functionName || item.linkedLocalName === functionName);
|
|
55
|
+
if (!match) {
|
|
56
|
+
throw new Error(`Remote function "${functionName}" not found`);
|
|
57
|
+
}
|
|
58
|
+
client.functionCache.set(match.name, match);
|
|
59
|
+
client.functionCache.set(functionName, match);
|
|
60
|
+
return match;
|
|
61
|
+
}
|
|
62
|
+
export async function invokeRemote(client, functionName, payload, options = {}) {
|
|
63
|
+
const remoteFunction = await resolveRemoteFunction(client, functionName);
|
|
64
|
+
return request(client, 'POST', `/functions/${remoteFunction.id}/invoke`, {
|
|
65
|
+
event: payload,
|
|
66
|
+
context: options.context ?? {},
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
export async function createRemoteFunction(client, input) {
|
|
70
|
+
const created = await request(client, 'POST', '/functions', input);
|
|
71
|
+
client.functionCache.set(created.name, created);
|
|
72
|
+
return created;
|
|
73
|
+
}
|
|
74
|
+
export async function updateRemoteFunction(client, functionId, input) {
|
|
75
|
+
const updated = await request(client, 'PUT', `/functions/${functionId}`, input);
|
|
76
|
+
client.functionCache.set(updated.name, updated);
|
|
77
|
+
return updated;
|
|
78
|
+
}
|
|
79
|
+
export async function deployRemoteFunction(client, functionId, options = {}) {
|
|
80
|
+
return request(client, 'POST', `/functions/${functionId}/deploy`, options);
|
|
81
|
+
}
|
|
82
|
+
/** Queue an async deploy. Resolves by `functionId` or `name`. */
|
|
83
|
+
export async function queueDeploy(client, input) {
|
|
84
|
+
return request(client, 'POST', '/v1/deploy', input);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Exchange a GitHub OIDC token for a short-lived Inquir deploy token (Phase 2,
|
|
88
|
+
* keyless auth). Public endpoint — no API key required. Throws on rejection.
|
|
89
|
+
*/
|
|
90
|
+
export async function exchangeGitHubOidc(baseUrl, input, fetchImpl = fetch) {
|
|
91
|
+
const url = `${baseUrl.replace(/\/+$/, '')}/v1/auth/oidc/github`;
|
|
92
|
+
const response = await fetchImpl(url, {
|
|
93
|
+
method: 'POST',
|
|
94
|
+
headers: { 'Content-Type': 'application/json' },
|
|
95
|
+
body: JSON.stringify(input),
|
|
96
|
+
});
|
|
97
|
+
const text = await response.text();
|
|
98
|
+
const payload = text ? JSON.parse(text) : undefined;
|
|
99
|
+
if (!response.ok) {
|
|
100
|
+
const message = typeof payload === 'object' && payload !== null
|
|
101
|
+
? payload.error?.message
|
|
102
|
+
: undefined;
|
|
103
|
+
throw new Error(message ?? `OIDC exchange failed: HTTP ${response.status}`);
|
|
104
|
+
}
|
|
105
|
+
return payload;
|
|
106
|
+
}
|
|
107
|
+
export async function getDeployStatus(client, deployId) {
|
|
108
|
+
return request(client, 'GET', `/v1/deploy/${deployId}/status`);
|
|
109
|
+
}
|
|
110
|
+
export async function listFunctionDeploys(client, functionId, options = {}) {
|
|
111
|
+
const params = new URLSearchParams();
|
|
112
|
+
if (options.limit !== undefined)
|
|
113
|
+
params.set('limit', String(options.limit));
|
|
114
|
+
if (options.offset !== undefined)
|
|
115
|
+
params.set('offset', String(options.offset));
|
|
116
|
+
const query = params.size > 0 ? `?${params.toString()}` : '';
|
|
117
|
+
return request(client, 'GET', `/functions/${functionId}/deploys${query}`);
|
|
118
|
+
}
|
|
119
|
+
export async function rollbackDeploy(client, functionId, deployId, options = {}) {
|
|
120
|
+
return request(client, 'POST', `/functions/${functionId}/deploys/${deployId}/rollback`, options);
|
|
121
|
+
}
|
|
122
|
+
function parseSSEChunk(chunk) {
|
|
123
|
+
let eventName = 'message';
|
|
124
|
+
const dataLines = [];
|
|
125
|
+
for (const rawLine of chunk.split('\n')) {
|
|
126
|
+
const line = rawLine.replace(/\r$/, '');
|
|
127
|
+
if (line.length === 0 || line.startsWith(':'))
|
|
128
|
+
continue;
|
|
129
|
+
if (line.startsWith('event:'))
|
|
130
|
+
eventName = line.slice(6).trim();
|
|
131
|
+
else if (line.startsWith('data:'))
|
|
132
|
+
dataLines.push(line.slice(5).replace(/^ /, ''));
|
|
133
|
+
}
|
|
134
|
+
if (dataLines.length === 0)
|
|
135
|
+
return undefined;
|
|
136
|
+
let data = {};
|
|
137
|
+
try {
|
|
138
|
+
data = JSON.parse(dataLines.join('\n'));
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
data = { line: dataLines.join('\n') };
|
|
142
|
+
}
|
|
143
|
+
if (eventName === 'log')
|
|
144
|
+
return { type: 'log', line: String(data.line ?? ''), ts: data.ts };
|
|
145
|
+
if (eventName === 'status')
|
|
146
|
+
return { type: 'status', status: String(data.status ?? ''), ts: data.ts };
|
|
147
|
+
if (eventName === 'complete')
|
|
148
|
+
return { type: 'complete', status: String(data.status ?? ''), ts: data.ts };
|
|
149
|
+
if (eventName === 'error')
|
|
150
|
+
return { type: 'log', line: `error: ${String(data.error ?? 'unknown error')}` };
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
/** Stream a deploy's logs over SSE. Yields log/status/complete events until the deploy is terminal. */
|
|
154
|
+
export async function* streamDeployLogs(client, deployId, signal) {
|
|
155
|
+
const response = await client.fetchImpl(`${client.baseUrl}/v1/deploy/${deployId}/logs`, {
|
|
156
|
+
method: 'GET',
|
|
157
|
+
headers: {
|
|
158
|
+
Accept: 'text/event-stream',
|
|
159
|
+
...authHeaders(client),
|
|
160
|
+
},
|
|
161
|
+
signal,
|
|
162
|
+
});
|
|
163
|
+
if (!response.ok || !response.body) {
|
|
164
|
+
const text = await response.text().catch(() => '');
|
|
165
|
+
throw new Error(`Failed to stream deploy logs: HTTP ${response.status}${text ? ` ${text}` : ''}`);
|
|
166
|
+
}
|
|
167
|
+
const reader = response.body.getReader();
|
|
168
|
+
const decoder = new TextDecoder();
|
|
169
|
+
let buffer = '';
|
|
170
|
+
try {
|
|
171
|
+
for (;;) {
|
|
172
|
+
const { done, value } = await reader.read();
|
|
173
|
+
if (done)
|
|
174
|
+
break;
|
|
175
|
+
buffer += decoder.decode(value, { stream: true });
|
|
176
|
+
let boundary = buffer.indexOf('\n\n');
|
|
177
|
+
while (boundary >= 0) {
|
|
178
|
+
const chunk = buffer.slice(0, boundary);
|
|
179
|
+
buffer = buffer.slice(boundary + 2);
|
|
180
|
+
const event = parseSSEChunk(chunk);
|
|
181
|
+
if (event)
|
|
182
|
+
yield event;
|
|
183
|
+
boundary = buffer.indexOf('\n\n');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
try {
|
|
189
|
+
reader.releaseLock();
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
/* ignore */
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
export async function listRemoteInvocations(client, functionId, options = {}) {
|
|
197
|
+
const params = new URLSearchParams();
|
|
198
|
+
if (options.limit !== undefined) {
|
|
199
|
+
params.set('limit', String(options.limit));
|
|
200
|
+
}
|
|
201
|
+
if (options.offset !== undefined) {
|
|
202
|
+
params.set('offset', String(options.offset));
|
|
203
|
+
}
|
|
204
|
+
const query = params.size > 0 ? `?${params.toString()}` : '';
|
|
205
|
+
return request(client, 'GET', `/functions/${functionId}/invocations${query}`);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Begin a CLI device pairing. Public endpoint — no credentials required. The
|
|
209
|
+
* returned `verificationUrl` is opened in the user's browser; the CLI then polls
|
|
210
|
+
* `pollCliAuth` with the `deviceSecret` until the user approves.
|
|
211
|
+
*/
|
|
212
|
+
export async function startCliAuth(baseUrl, input = {}, fetchImpl = fetch) {
|
|
213
|
+
return publicRequest(baseUrl, 'POST', '/v1/cli/auth/start', input, fetchImpl);
|
|
214
|
+
}
|
|
215
|
+
/** Poll a pending pairing for its minted token. Public endpoint. */
|
|
216
|
+
export async function pollCliAuth(baseUrl, input, fetchImpl = fetch) {
|
|
217
|
+
return publicRequest(baseUrl, 'POST', '/v1/cli/auth/poll', input, fetchImpl);
|
|
218
|
+
}
|
|
219
|
+
/** Current identity and the workspaces the credential can act on. */
|
|
220
|
+
export async function getMe(client) {
|
|
221
|
+
return request(client, 'GET', '/v1/me');
|
|
222
|
+
}
|
|
223
|
+
/** Convenience wrapper returning just the workspace list from `/v1/me`. */
|
|
224
|
+
export async function listWorkspaces(client) {
|
|
225
|
+
const me = await getMe(client);
|
|
226
|
+
return me.workspaces;
|
|
227
|
+
}
|
|
228
|
+
export async function listPersonalAccessTokens(client) {
|
|
229
|
+
const res = await request(client, 'GET', '/v1/tokens');
|
|
230
|
+
return res.tokens;
|
|
231
|
+
}
|
|
232
|
+
export async function createPersonalAccessToken(client, input = {}) {
|
|
233
|
+
return request(client, 'POST', '/v1/tokens', input);
|
|
234
|
+
}
|
|
235
|
+
export async function revokePersonalAccessToken(client, tokenId) {
|
|
236
|
+
await request(client, 'DELETE', `/v1/tokens/${tokenId}`);
|
|
237
|
+
}
|
|
238
|
+
/** Make a request to a public (unauthenticated) endpoint, parsing JSON + errors. */
|
|
239
|
+
async function publicRequest(baseUrl, method, pathname, body, fetchImpl) {
|
|
240
|
+
const url = `${baseUrl.replace(/\/+$/, '')}${pathname}`;
|
|
241
|
+
const response = await fetchImpl(url, {
|
|
242
|
+
method,
|
|
243
|
+
headers: { 'Content-Type': 'application/json' },
|
|
244
|
+
body: body === undefined ? undefined : JSON.stringify(body),
|
|
245
|
+
});
|
|
246
|
+
const text = await response.text();
|
|
247
|
+
const payload = text ? JSON.parse(text) : undefined;
|
|
248
|
+
if (!response.ok) {
|
|
249
|
+
const message = typeof payload === 'object' && payload !== null
|
|
250
|
+
? payload.message ??
|
|
251
|
+
payload.error?.message
|
|
252
|
+
: undefined;
|
|
253
|
+
throw new Error(message ?? `HTTP ${response.status}`);
|
|
254
|
+
}
|
|
255
|
+
return payload;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|