@graphlit/durable-agents 1.0.20260614002
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 +21 -0
- package/README.md +33 -0
- package/dist/api.d.ts +173 -0
- package/dist/api.js +478 -0
- package/dist/api.js.map +1 -0
- package/dist/auth-flow.d.ts +32 -0
- package/dist/auth-flow.js +135 -0
- package/dist/auth-flow.js.map +1 -0
- package/dist/branding.d.ts +9 -0
- package/dist/branding.js +13 -0
- package/dist/branding.js.map +1 -0
- package/dist/browser.d.ts +1 -0
- package/dist/browser.js +41 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +5587 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.js +9 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -0
- package/dist/credentials.d.ts +18 -0
- package/dist/credentials.js +101 -0
- package/dist/credentials.js.map +1 -0
- package/dist/format.d.ts +6 -0
- package/dist/format.js +28 -0
- package/dist/format.js.map +1 -0
- package/dist/generated/openapi-client.d.ts +30 -0
- package/dist/generated/openapi-client.js +122 -0
- package/dist/generated/openapi-client.js.map +1 -0
- package/dist/generated/openapi-types.d.ts +519 -0
- package/dist/generated/openapi-types.js +92 -0
- package/dist/generated/openapi-types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +24 -0
- package/dist/output.js +18 -0
- package/dist/output.js.map +1 -0
- package/dist/sse.d.ts +16 -0
- package/dist/sse.js +132 -0
- package/dist/sse.js.map +1 -0
- package/dist/types.d.ts +524 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { CREDENTIALS_NAME } from './branding.js';
|
|
5
|
+
export const DURABLE_API_KEY_ENV = 'DURABLE_API_KEY';
|
|
6
|
+
export function getCredentialsPath(env = process.env) {
|
|
7
|
+
const configRoot = env.XDG_CONFIG_HOME && env.XDG_CONFIG_HOME.length > 0
|
|
8
|
+
? env.XDG_CONFIG_HOME
|
|
9
|
+
: path.join(os.homedir(), '.config');
|
|
10
|
+
return path.join(configRoot, 'graphlit', 'durable-agents', 'credentials.json');
|
|
11
|
+
}
|
|
12
|
+
export async function loadCredentials(env = process.env) {
|
|
13
|
+
const envApiKey = env[DURABLE_API_KEY_ENV]?.trim();
|
|
14
|
+
if (envApiKey) {
|
|
15
|
+
return {
|
|
16
|
+
source: 'env',
|
|
17
|
+
apiKey: envApiKey,
|
|
18
|
+
key: null,
|
|
19
|
+
path: null,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const credentialsPath = getCredentialsPath(env);
|
|
23
|
+
const raw = await fs.readFile(credentialsPath, 'utf8').catch((error) => {
|
|
24
|
+
if (isNodeError(error) && error.code === 'ENOENT') {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
throw error;
|
|
28
|
+
});
|
|
29
|
+
if (!raw) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const parsed = JSON.parse(raw);
|
|
33
|
+
if (!isStoredCredentials(parsed)) {
|
|
34
|
+
throw new Error(`Invalid ${CREDENTIALS_NAME} file: ${credentialsPath}`);
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
source: 'file',
|
|
38
|
+
apiKey: parsed.api_key,
|
|
39
|
+
key: parsed.key,
|
|
40
|
+
path: credentialsPath,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export async function saveCredentials(credentials) {
|
|
44
|
+
const credentialsPath = getCredentialsPath();
|
|
45
|
+
const credentialsDir = path.dirname(credentialsPath);
|
|
46
|
+
await fs.mkdir(credentialsDir, { recursive: true, mode: 0o700 });
|
|
47
|
+
await fs.writeFile(credentialsPath, `${JSON.stringify(credentials, null, 2)}\n`, {
|
|
48
|
+
mode: 0o600,
|
|
49
|
+
});
|
|
50
|
+
await fs.chmod(credentialsPath, 0o600);
|
|
51
|
+
return credentialsPath;
|
|
52
|
+
}
|
|
53
|
+
export async function deleteStoredCredentials() {
|
|
54
|
+
const credentialsPath = getCredentialsPath();
|
|
55
|
+
try {
|
|
56
|
+
await fs.unlink(credentialsPath);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
if (isNodeError(error) && error.code === 'ENOENT') {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function isStoredCredentials(value) {
|
|
67
|
+
if (!isRecord(value)) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
return (typeof value.api_key === 'string' &&
|
|
71
|
+
value.api_key.length > 0 &&
|
|
72
|
+
typeof value.saved_at === 'string' &&
|
|
73
|
+
(value.key === null || isDurableApiKey(value.key)));
|
|
74
|
+
}
|
|
75
|
+
function isDurableApiKey(value) {
|
|
76
|
+
if (!isRecord(value)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return (typeof value.id === 'string' &&
|
|
80
|
+
typeof value.name === 'string' &&
|
|
81
|
+
Array.isArray(value.scopes) &&
|
|
82
|
+
isRecord(value.tenant) &&
|
|
83
|
+
typeof value.tenant.id === 'string' &&
|
|
84
|
+
(value.workspace === undefined ||
|
|
85
|
+
value.workspace === null ||
|
|
86
|
+
(isRecord(value.workspace) &&
|
|
87
|
+
(typeof value.workspace.name === 'string' ||
|
|
88
|
+
value.workspace.name === null) &&
|
|
89
|
+
(typeof value.workspace.slug === 'string' ||
|
|
90
|
+
value.workspace.slug === null))) &&
|
|
91
|
+
typeof value.created_at === 'string' &&
|
|
92
|
+
(typeof value.last_seen_at === 'string' || value.last_seen_at === null) &&
|
|
93
|
+
(typeof value.revoked_at === 'string' || value.revoked_at === null));
|
|
94
|
+
}
|
|
95
|
+
function isRecord(value) {
|
|
96
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
97
|
+
}
|
|
98
|
+
function isNodeError(error) {
|
|
99
|
+
return error instanceof Error && 'code' in error;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
|
package/dist/format.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DurableApiKey, DurableBillingFundingRequest, DurableBillingUsage } from './types.js';
|
|
2
|
+
export declare function formatApiKey(key: DurableApiKey): string;
|
|
3
|
+
export declare function formatUsage(usage: DurableBillingUsage): string;
|
|
4
|
+
export declare function formatFundingRequest(request: DurableBillingFundingRequest): string;
|
|
5
|
+
export declare function formatFundingStatus(request: DurableBillingFundingRequest): string;
|
|
6
|
+
export declare function shellQuote(value: string): string;
|
package/dist/format.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function formatApiKey(key) {
|
|
2
|
+
const status = key.revoked_at ? 'revoked' : 'active';
|
|
3
|
+
const lastSeen = key.last_seen_at ?? 'never';
|
|
4
|
+
const workspace = key.workspace?.name ?? key.workspace?.slug ?? 'current-workspace';
|
|
5
|
+
return `${key.id}\t${status}\t${key.name}\tworkspace=${workspace}\tlast_seen=${lastSeen}`;
|
|
6
|
+
}
|
|
7
|
+
export function formatUsage(usage) {
|
|
8
|
+
const available = `${usage.available_credits} credits ($${usage.available_balance_usd.toFixed(2)})`;
|
|
9
|
+
const purchased = usage.purchased_credits > 0 ? `, purchased ${usage.purchased_credits}` : '';
|
|
10
|
+
return `wallet ${available}, used ${usage.used_credits}${purchased} (${usage.status})`;
|
|
11
|
+
}
|
|
12
|
+
export function formatFundingRequest(request) {
|
|
13
|
+
const usd = (request.amount_cents / 100).toFixed(2);
|
|
14
|
+
return [
|
|
15
|
+
`funding request ${request.id}`,
|
|
16
|
+
`${request.credits} credits ($${usd})`,
|
|
17
|
+
'Pay with Link using the emitted link_cli or link_mcp fields.',
|
|
18
|
+
].join('\n');
|
|
19
|
+
}
|
|
20
|
+
export function formatFundingStatus(request) {
|
|
21
|
+
const usd = (request.amount_cents / 100).toFixed(2);
|
|
22
|
+
const failure = request.failure_message ? `, ${request.failure_message}` : '';
|
|
23
|
+
return `funding request ${request.id}\t${request.status}\t${request.credits} credits ($${usd})${failure}`;
|
|
24
|
+
}
|
|
25
|
+
export function shellQuote(value) {
|
|
26
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC;IAC7C,MAAM,SAAS,GACb,GAAG,CAAC,SAAS,EAAE,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,IAAI,mBAAmB,CAAC;IAEpE,OAAO,GAAG,GAAG,CAAC,EAAE,KAAK,MAAM,KAAK,GAAG,CAAC,IAAI,eAAe,SAAS,eAAe,QAAQ,EAAE,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAA0B;IACpD,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,iBAAiB,cAAc,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpG,MAAM,SAAS,GACb,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,OAAO,UAAU,SAAS,UAAU,KAAK,CAAC,YAAY,GAAG,SAAS,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAqC;IAErC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEpD,OAAO;QACL,mBAAmB,OAAO,CAAC,EAAE,EAAE;QAC/B,GAAG,OAAO,CAAC,OAAO,cAAc,GAAG,GAAG;QACtC,8DAA8D;KAC/D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAqC;IAErC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,OAAO,mBAAmB,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,OAAO,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type DurableOperationId } from './openapi-types.js';
|
|
2
|
+
export type DurableQueryValue = string | number | boolean | null | undefined;
|
|
3
|
+
export interface DurableOpenApiClientOptions {
|
|
4
|
+
apiBaseUrl: string;
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
fetchImpl?: typeof fetch;
|
|
7
|
+
headers?: Record<string, string>;
|
|
8
|
+
}
|
|
9
|
+
export interface DurableRequestOptions<TBody = unknown> {
|
|
10
|
+
pathParams?: Record<string, string>;
|
|
11
|
+
query?: Record<string, DurableQueryValue | DurableQueryValue[]>;
|
|
12
|
+
body?: TBody;
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
}
|
|
16
|
+
export declare class DurableApiError extends Error {
|
|
17
|
+
readonly status: number;
|
|
18
|
+
readonly details: unknown;
|
|
19
|
+
readonly headers: Record<string, string>;
|
|
20
|
+
constructor(status: number, message: string, details: unknown, headers?: Record<string, string>);
|
|
21
|
+
}
|
|
22
|
+
export declare class DurableOpenApiClient {
|
|
23
|
+
private readonly apiBaseUrl;
|
|
24
|
+
private readonly apiKey?;
|
|
25
|
+
private readonly fetchImpl;
|
|
26
|
+
private readonly headers;
|
|
27
|
+
constructor(options: DurableOpenApiClientOptions);
|
|
28
|
+
request<TResponse = unknown, TBody = unknown>(operationId: DurableOperationId, options?: DurableRequestOptions<TBody>): Promise<TResponse>;
|
|
29
|
+
}
|
|
30
|
+
export declare function createDurableClient(options: DurableOpenApiClientOptions): DurableOpenApiClient;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// Generated by scripts/generate-openapi-client.mjs. Do not edit by hand.
|
|
2
|
+
import { DURABLE_OPENAPI_OPERATION_BY_ID } from './openapi-types.js';
|
|
3
|
+
export class DurableApiError extends Error {
|
|
4
|
+
status;
|
|
5
|
+
details;
|
|
6
|
+
headers;
|
|
7
|
+
constructor(status, message, details, headers = {}) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = 'DurableApiError';
|
|
10
|
+
this.status = status;
|
|
11
|
+
this.details = details;
|
|
12
|
+
this.headers = headers;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class DurableOpenApiClient {
|
|
16
|
+
apiBaseUrl;
|
|
17
|
+
apiKey;
|
|
18
|
+
fetchImpl;
|
|
19
|
+
headers;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.apiBaseUrl = options.apiBaseUrl.replace(/\/+$/, '');
|
|
22
|
+
this.apiKey = options.apiKey;
|
|
23
|
+
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
24
|
+
this.headers = options.headers ?? {};
|
|
25
|
+
}
|
|
26
|
+
async request(operationId, options = {}) {
|
|
27
|
+
const operation = DURABLE_OPENAPI_OPERATION_BY_ID[operationId];
|
|
28
|
+
const url = new URL(applyPathParams(operation.path, options.pathParams), this.apiBaseUrl);
|
|
29
|
+
appendQuery(url, options.query);
|
|
30
|
+
const headers = {
|
|
31
|
+
...this.headers,
|
|
32
|
+
...options.headers,
|
|
33
|
+
};
|
|
34
|
+
if (this.apiKey) {
|
|
35
|
+
headers.Authorization = `Bearer ${this.apiKey}`;
|
|
36
|
+
}
|
|
37
|
+
const init = {
|
|
38
|
+
method: operation.method,
|
|
39
|
+
headers,
|
|
40
|
+
signal: options.signal,
|
|
41
|
+
};
|
|
42
|
+
if (options.body !== undefined) {
|
|
43
|
+
headers['Content-Type'] = headers['Content-Type'] ?? 'application/json';
|
|
44
|
+
init.body = JSON.stringify(options.body);
|
|
45
|
+
}
|
|
46
|
+
const response = await this.fetchImpl(url, init);
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
const details = await readResponseBody(response);
|
|
49
|
+
throw new DurableApiError(response.status, getResponseErrorMessage(details, response.statusText), details, responseHeadersToRecord(response));
|
|
50
|
+
}
|
|
51
|
+
if (response.status === 204) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
const body = await readResponseBody(response);
|
|
55
|
+
return body;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function createDurableClient(options) {
|
|
59
|
+
return new DurableOpenApiClient(options);
|
|
60
|
+
}
|
|
61
|
+
function applyPathParams(pathTemplate, pathParams) {
|
|
62
|
+
return pathTemplate.replace(/\{([^}]+)\}/g, (_match, key) => {
|
|
63
|
+
const value = pathParams?.[key];
|
|
64
|
+
if (!value) {
|
|
65
|
+
throw new Error(`Missing path parameter: ${key}`);
|
|
66
|
+
}
|
|
67
|
+
return encodeURIComponent(value);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function appendQuery(url, query) {
|
|
71
|
+
if (!query) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
for (const [key, value] of Object.entries(query)) {
|
|
75
|
+
const values = Array.isArray(value) ? value : [value];
|
|
76
|
+
for (const item of values) {
|
|
77
|
+
if (item === null || item === undefined) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
url.searchParams.append(key, String(item));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async function readResponseBody(response) {
|
|
85
|
+
const text = await response.text();
|
|
86
|
+
if (!text) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
90
|
+
if (contentType.includes('application/json')) {
|
|
91
|
+
return JSON.parse(text);
|
|
92
|
+
}
|
|
93
|
+
return text;
|
|
94
|
+
}
|
|
95
|
+
function getResponseErrorMessage(details, fallback) {
|
|
96
|
+
if (isRecord(details)) {
|
|
97
|
+
const error = details.error;
|
|
98
|
+
if (isRecord(error) &&
|
|
99
|
+
typeof error.message === 'string' &&
|
|
100
|
+
error.message.length > 0) {
|
|
101
|
+
return error.message;
|
|
102
|
+
}
|
|
103
|
+
if (typeof details.message === 'string' && details.message.length > 0) {
|
|
104
|
+
return details.message;
|
|
105
|
+
}
|
|
106
|
+
if (typeof details.error === 'string' && details.error.length > 0) {
|
|
107
|
+
return details.error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return fallback || 'Request failed';
|
|
111
|
+
}
|
|
112
|
+
function responseHeadersToRecord(response) {
|
|
113
|
+
const headers = {};
|
|
114
|
+
response.headers.forEach((value, key) => {
|
|
115
|
+
headers[key] = value;
|
|
116
|
+
});
|
|
117
|
+
return headers;
|
|
118
|
+
}
|
|
119
|
+
function isRecord(value) {
|
|
120
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=openapi-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-client.js","sourceRoot":"","sources":["../../src/generated/openapi-client.ts"],"names":[],"mappings":"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"}
|