@assemblyline-agents/postgres 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/LICENSE +21 -0
- package/README.md +19 -0
- package/dist/adapter-checkpoints.d.ts +6 -0
- package/dist/adapter-checkpoints.d.ts.map +1 -0
- package/dist/adapter-checkpoints.js +110 -0
- package/dist/adapter-checkpoints.js.map +1 -0
- package/dist/adapter-conversation-turns.d.ts +20 -0
- package/dist/adapter-conversation-turns.d.ts.map +1 -0
- package/dist/adapter-conversation-turns.js +216 -0
- package/dist/adapter-conversation-turns.js.map +1 -0
- package/dist/adapter-conversations.d.ts +46 -0
- package/dist/adapter-conversations.d.ts.map +1 -0
- package/dist/adapter-conversations.js +129 -0
- package/dist/adapter-conversations.js.map +1 -0
- package/dist/adapter-delivery.d.ts +13 -0
- package/dist/adapter-delivery.d.ts.map +1 -0
- package/dist/adapter-delivery.js +157 -0
- package/dist/adapter-delivery.js.map +1 -0
- package/dist/adapter-grants.d.ts +11 -0
- package/dist/adapter-grants.d.ts.map +1 -0
- package/dist/adapter-grants.js +125 -0
- package/dist/adapter-grants.js.map +1 -0
- package/dist/adapter-memory.d.ts +21 -0
- package/dist/adapter-memory.d.ts.map +1 -0
- package/dist/adapter-memory.js +181 -0
- package/dist/adapter-memory.js.map +1 -0
- package/dist/adapter-misc.d.ts +61 -0
- package/dist/adapter-misc.d.ts.map +1 -0
- package/dist/adapter-misc.js +127 -0
- package/dist/adapter-misc.js.map +1 -0
- package/dist/adapter-runs.d.ts +20 -0
- package/dist/adapter-runs.d.ts.map +1 -0
- package/dist/adapter-runs.js +193 -0
- package/dist/adapter-runs.js.map +1 -0
- package/dist/adapter-sandbox.d.ts +27 -0
- package/dist/adapter-sandbox.d.ts.map +1 -0
- package/dist/adapter-sandbox.js +267 -0
- package/dist/adapter-sandbox.js.map +1 -0
- package/dist/adapter-settings.d.ts +8 -0
- package/dist/adapter-settings.d.ts.map +1 -0
- package/dist/adapter-settings.js +38 -0
- package/dist/adapter-settings.js.map +1 -0
- package/dist/adapter-usage.d.ts +7 -0
- package/dist/adapter-usage.d.ts.map +1 -0
- package/dist/adapter-usage.js +243 -0
- package/dist/adapter-usage.js.map +1 -0
- package/dist/client-types.d.ts +6 -0
- package/dist/client-types.d.ts.map +1 -0
- package/dist/client-types.js +2 -0
- package/dist/client-types.js.map +1 -0
- package/dist/index.d.ts +208 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +424 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations.d.ts +35 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +694 -0
- package/dist/migrations.js.map +1 -0
- package/dist/presets.d.ts +19 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +31 -0
- package/dist/presets.js.map +1 -0
- package/dist/provider.d.ts +12 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +86 -0
- package/dist/provider.js.map +1 -0
- package/dist/row-mappers.d.ts +24 -0
- package/dist/row-mappers.d.ts.map +1 -0
- package/dist/row-mappers.js +450 -0
- package/dist/row-mappers.js.map +1 -0
- package/dist/sql-helpers.d.ts +46 -0
- package/dist/sql-helpers.d.ts.map +1 -0
- package/dist/sql-helpers.js +244 -0
- package/dist/sql-helpers.js.map +1 -0
- package/dist/stores.d.ts +40 -0
- package/dist/stores.d.ts.map +1 -0
- package/dist/stores.js +210 -0
- package/dist/stores.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { mapSandboxSession, mapSandboxSyncJob } from "./row-mappers.js";
|
|
3
|
+
import { applySandboxSyncJobPatchForPostgres, createPostgresSandboxSyncJobRecord, positiveLimit, postgresSandboxSyncRetryDelayMs, sessionRootFromManifest, timestamp } from "./sql-helpers.js";
|
|
4
|
+
export async function recordSandboxSnapshot(client, input) {
|
|
5
|
+
const record = {
|
|
6
|
+
id: randomUUID(),
|
|
7
|
+
runId: input.runId,
|
|
8
|
+
sandboxId: input.sandboxId,
|
|
9
|
+
snapshotId: input.snapshotId,
|
|
10
|
+
metadata: input.metadata ?? {},
|
|
11
|
+
createdAt: timestamp()
|
|
12
|
+
};
|
|
13
|
+
await client.query(`insert into openeve_sandbox_snapshots
|
|
14
|
+
(id, run_id, sandbox_id, snapshot_id, metadata, created_at)
|
|
15
|
+
values ($1,$2,$3,$4,$5::jsonb,$6)`, [
|
|
16
|
+
record.id,
|
|
17
|
+
record.runId,
|
|
18
|
+
record.sandboxId,
|
|
19
|
+
record.snapshotId,
|
|
20
|
+
JSON.stringify(record.metadata),
|
|
21
|
+
record.createdAt
|
|
22
|
+
]);
|
|
23
|
+
return record;
|
|
24
|
+
}
|
|
25
|
+
export async function upsertSandboxSession(client, input) {
|
|
26
|
+
const now = timestamp();
|
|
27
|
+
const createdAt = input.createdAt ?? now;
|
|
28
|
+
const updatedAt = input.updatedAt ?? now;
|
|
29
|
+
const result = await client.query(`insert into openeve_sandbox_sessions
|
|
30
|
+
(id, session_key, provider, sandbox_id, run_id, root, state, dirty, last_seen_at, last_synced_at, snapshot_id, sync_job_id, manifest, metadata, created_at, updated_at)
|
|
31
|
+
values ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13::jsonb,$14::jsonb,$15,$16)
|
|
32
|
+
on conflict (session_key) do update set
|
|
33
|
+
provider=$3,
|
|
34
|
+
sandbox_id=$4,
|
|
35
|
+
run_id=$5,
|
|
36
|
+
root=$6,
|
|
37
|
+
state=$7,
|
|
38
|
+
dirty=$8,
|
|
39
|
+
last_seen_at=$9,
|
|
40
|
+
last_synced_at=$10,
|
|
41
|
+
snapshot_id=$11,
|
|
42
|
+
sync_job_id=$12,
|
|
43
|
+
manifest=$13::jsonb,
|
|
44
|
+
metadata=$14::jsonb,
|
|
45
|
+
updated_at=$16
|
|
46
|
+
returning *`, [
|
|
47
|
+
input.id ?? randomUUID(),
|
|
48
|
+
input.sessionKey,
|
|
49
|
+
input.provider,
|
|
50
|
+
input.sandboxId,
|
|
51
|
+
input.runId ?? null,
|
|
52
|
+
sessionRootFromManifest(input.manifest),
|
|
53
|
+
input.state,
|
|
54
|
+
input.dirty,
|
|
55
|
+
input.lastSeenAt,
|
|
56
|
+
input.lastSyncedAt ?? null,
|
|
57
|
+
input.snapshotId ?? null,
|
|
58
|
+
input.syncJobId ?? null,
|
|
59
|
+
JSON.stringify(input.manifest),
|
|
60
|
+
JSON.stringify({}),
|
|
61
|
+
createdAt,
|
|
62
|
+
updatedAt
|
|
63
|
+
]);
|
|
64
|
+
const row = result.rows[0];
|
|
65
|
+
if (!row)
|
|
66
|
+
throw new Error(`Sandbox session not upserted: ${input.sessionKey}`);
|
|
67
|
+
return mapSandboxSession(row);
|
|
68
|
+
}
|
|
69
|
+
export async function getSandboxSession(client, sessionKey) {
|
|
70
|
+
const result = await client.query("select * from openeve_sandbox_sessions where session_key=$1", [sessionKey]);
|
|
71
|
+
const row = result.rows[0];
|
|
72
|
+
return row ? mapSandboxSession(row) : undefined;
|
|
73
|
+
}
|
|
74
|
+
export async function listSandboxSessions(client, options = {}) {
|
|
75
|
+
const result = options.dirty === undefined
|
|
76
|
+
? await client.query("select * from openeve_sandbox_sessions order by updated_at asc")
|
|
77
|
+
: await client.query("select * from openeve_sandbox_sessions where dirty=$1 order by updated_at asc", [options.dirty]);
|
|
78
|
+
return result.rows.map(mapSandboxSession);
|
|
79
|
+
}
|
|
80
|
+
export async function updateSandboxSession(client, sessionKey, patch) {
|
|
81
|
+
const current = await getSandboxSession(client, sessionKey);
|
|
82
|
+
if (!current)
|
|
83
|
+
throw new Error(`Sandbox session not found: ${sessionKey}`);
|
|
84
|
+
const updated = { ...current };
|
|
85
|
+
for (const [key, value] of Object.entries(patch)) {
|
|
86
|
+
if (value === undefined)
|
|
87
|
+
delete updated[key];
|
|
88
|
+
else
|
|
89
|
+
updated[key] = value;
|
|
90
|
+
}
|
|
91
|
+
return upsertSandboxSession(client, {
|
|
92
|
+
...updated,
|
|
93
|
+
sessionKey,
|
|
94
|
+
id: current.id,
|
|
95
|
+
createdAt: current.createdAt,
|
|
96
|
+
updatedAt: timestamp()
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
export async function createSandboxSyncJob(client, input) {
|
|
100
|
+
return enqueueSandboxSyncJob(client, input);
|
|
101
|
+
}
|
|
102
|
+
export async function enqueueSandboxSyncJob(client, input) {
|
|
103
|
+
const record = createPostgresSandboxSyncJobRecord(input);
|
|
104
|
+
const result = await client.query(`insert into openeve_sandbox_sync_jobs
|
|
105
|
+
(id, run_id, sandbox_id, status, idempotency_key, reason, manifest, error, attempt_count, max_attempts, next_attempt_at, lease_token, lease_expires_at, completed_at, failed_at, last_error, metadata, created_at, updated_at)
|
|
106
|
+
values ($1,$2,$3,$4,$5,$6,$7::jsonb,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17::jsonb,$18,$19)
|
|
107
|
+
on conflict (idempotency_key) do update set updated_at=openeve_sandbox_sync_jobs.updated_at
|
|
108
|
+
returning *`, [
|
|
109
|
+
record.id,
|
|
110
|
+
record.runId,
|
|
111
|
+
record.sandboxId,
|
|
112
|
+
record.status,
|
|
113
|
+
record.idempotencyKey,
|
|
114
|
+
record.reason,
|
|
115
|
+
JSON.stringify(record.manifest),
|
|
116
|
+
record.error ?? null,
|
|
117
|
+
record.attemptCount,
|
|
118
|
+
record.maxAttempts,
|
|
119
|
+
record.nextAttemptAt,
|
|
120
|
+
record.leaseToken ?? null,
|
|
121
|
+
record.leaseExpiresAt ?? null,
|
|
122
|
+
record.completedAt ?? null,
|
|
123
|
+
record.failedAt ?? null,
|
|
124
|
+
record.lastError ?? null,
|
|
125
|
+
JSON.stringify(record.metadata),
|
|
126
|
+
record.createdAt,
|
|
127
|
+
record.updatedAt
|
|
128
|
+
]);
|
|
129
|
+
return mapSandboxSyncJob(result.rows[0] ?? {
|
|
130
|
+
id: record.id,
|
|
131
|
+
run_id: record.runId,
|
|
132
|
+
sandbox_id: record.sandboxId,
|
|
133
|
+
status: record.status,
|
|
134
|
+
idempotency_key: record.idempotencyKey,
|
|
135
|
+
reason: record.reason,
|
|
136
|
+
manifest: record.manifest,
|
|
137
|
+
error: record.error ?? null,
|
|
138
|
+
attempt_count: record.attemptCount,
|
|
139
|
+
max_attempts: record.maxAttempts,
|
|
140
|
+
next_attempt_at: record.nextAttemptAt,
|
|
141
|
+
lease_token: record.leaseToken ?? null,
|
|
142
|
+
lease_expires_at: record.leaseExpiresAt ?? null,
|
|
143
|
+
completed_at: record.completedAt ?? null,
|
|
144
|
+
failed_at: record.failedAt ?? null,
|
|
145
|
+
last_error: record.lastError ?? null,
|
|
146
|
+
metadata: record.metadata,
|
|
147
|
+
created_at: record.createdAt,
|
|
148
|
+
updated_at: record.updatedAt
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
export async function updateSandboxSyncJob(client, id, patch) {
|
|
152
|
+
const current = (await client.query("select * from openeve_sandbox_sync_jobs where id=$1", [id])).rows[0];
|
|
153
|
+
if (!current)
|
|
154
|
+
throw new Error(`Sandbox sync job not found: ${id}`);
|
|
155
|
+
const updated = applySandboxSyncJobPatchForPostgres(mapSandboxSyncJob(current), patch);
|
|
156
|
+
await client.query(`update openeve_sandbox_sync_jobs
|
|
157
|
+
set status=$2, manifest=$3::jsonb, error=$4, attempt_count=$5, max_attempts=$6,
|
|
158
|
+
next_attempt_at=$7, lease_token=$8, lease_expires_at=$9, completed_at=$10,
|
|
159
|
+
failed_at=$11, last_error=$12, metadata=$13::jsonb, updated_at=$14
|
|
160
|
+
where id=$1`, [
|
|
161
|
+
updated.id,
|
|
162
|
+
updated.status,
|
|
163
|
+
JSON.stringify(updated.manifest),
|
|
164
|
+
updated.error ?? null,
|
|
165
|
+
updated.attemptCount,
|
|
166
|
+
updated.maxAttempts,
|
|
167
|
+
updated.nextAttemptAt,
|
|
168
|
+
updated.leaseToken ?? null,
|
|
169
|
+
updated.leaseExpiresAt ?? null,
|
|
170
|
+
updated.completedAt ?? null,
|
|
171
|
+
updated.failedAt ?? null,
|
|
172
|
+
updated.lastError ?? null,
|
|
173
|
+
JSON.stringify(updated.metadata),
|
|
174
|
+
updated.updatedAt
|
|
175
|
+
]);
|
|
176
|
+
return updated;
|
|
177
|
+
}
|
|
178
|
+
export async function listSandboxSyncJobs(client, runId) {
|
|
179
|
+
const result = runId
|
|
180
|
+
? await client.query("select * from openeve_sandbox_sync_jobs where run_id=$1 order by created_at asc", [runId])
|
|
181
|
+
: await client.query("select * from openeve_sandbox_sync_jobs order by created_at asc");
|
|
182
|
+
return result.rows.map(mapSandboxSyncJob);
|
|
183
|
+
}
|
|
184
|
+
export async function leaseSandboxSyncJobs(client, options = {}) {
|
|
185
|
+
const now = options.now ?? new Date();
|
|
186
|
+
const leaseToken = randomUUID();
|
|
187
|
+
const leaseForMs = positiveLimit(options.leaseForMs, 5 * 60_000);
|
|
188
|
+
const leaseExpiresAt = new Date(now.getTime() + leaseForMs).toISOString();
|
|
189
|
+
const result = await client.query(`update openeve_sandbox_sync_jobs
|
|
190
|
+
set status='running',
|
|
191
|
+
lease_token=$1,
|
|
192
|
+
lease_expires_at=$2,
|
|
193
|
+
attempt_count=attempt_count + 1,
|
|
194
|
+
error=null,
|
|
195
|
+
updated_at=$3
|
|
196
|
+
where id in (
|
|
197
|
+
select id from openeve_sandbox_sync_jobs
|
|
198
|
+
where status in ('pending', 'failed')
|
|
199
|
+
and next_attempt_at <= $3
|
|
200
|
+
and attempt_count < max_attempts
|
|
201
|
+
order by next_attempt_at asc, created_at asc
|
|
202
|
+
limit $4
|
|
203
|
+
for update skip locked
|
|
204
|
+
)
|
|
205
|
+
returning *`, [leaseToken, leaseExpiresAt, now.toISOString(), positiveLimit(options.limit, 10)]);
|
|
206
|
+
return result.rows.map(mapSandboxSyncJob);
|
|
207
|
+
}
|
|
208
|
+
export async function completeSandboxSyncJob(client, id, leaseToken, patch = {}) {
|
|
209
|
+
const current = (await client.query("select * from openeve_sandbox_sync_jobs where id=$1", [id])).rows[0];
|
|
210
|
+
if (!current)
|
|
211
|
+
throw new Error(`Sandbox sync job not found: ${id}`);
|
|
212
|
+
const job = mapSandboxSyncJob(current);
|
|
213
|
+
if (job.status === "completed")
|
|
214
|
+
return job;
|
|
215
|
+
if (job.leaseToken !== leaseToken)
|
|
216
|
+
throw new Error(`Sandbox sync job lease mismatch: ${id}`);
|
|
217
|
+
const completedAt = timestamp();
|
|
218
|
+
const result = await client.query(`update openeve_sandbox_sync_jobs
|
|
219
|
+
set status='completed', manifest=$2::jsonb, metadata=$3::jsonb, lease_token=null,
|
|
220
|
+
lease_expires_at=null, completed_at=$4, error=null, updated_at=$4
|
|
221
|
+
where id=$1 and lease_token=$5
|
|
222
|
+
returning *`, [id, JSON.stringify(patch.manifest ?? job.manifest), JSON.stringify(patch.metadata ?? job.metadata), completedAt, leaseToken]);
|
|
223
|
+
const row = result.rows[0];
|
|
224
|
+
if (!row)
|
|
225
|
+
throw new Error(`Sandbox sync job lease mismatch: ${id}`);
|
|
226
|
+
return mapSandboxSyncJob(row);
|
|
227
|
+
}
|
|
228
|
+
export async function failSandboxSyncJob(client, id, leaseToken, failure) {
|
|
229
|
+
const current = (await client.query("select * from openeve_sandbox_sync_jobs where id=$1", [id])).rows[0];
|
|
230
|
+
if (!current)
|
|
231
|
+
throw new Error(`Sandbox sync job not found: ${id}`);
|
|
232
|
+
const job = mapSandboxSyncJob(current);
|
|
233
|
+
if (job.leaseToken !== leaseToken)
|
|
234
|
+
throw new Error(`Sandbox sync job lease mismatch: ${id}`);
|
|
235
|
+
const now = failure.now ?? new Date();
|
|
236
|
+
const permanent = job.attemptCount >= job.maxAttempts;
|
|
237
|
+
const nextAttemptAt = permanent
|
|
238
|
+
? job.nextAttemptAt
|
|
239
|
+
: new Date(now.getTime() + positiveLimit(failure.retryDelayMs, postgresSandboxSyncRetryDelayMs(job.attemptCount))).toISOString();
|
|
240
|
+
const result = await client.query(`update openeve_sandbox_sync_jobs
|
|
241
|
+
set status=$2, next_attempt_at=$3, lease_token=null, lease_expires_at=null,
|
|
242
|
+
failed_at=$4, last_error=$5, error=$5, updated_at=$6
|
|
243
|
+
where id=$1 and lease_token=$7
|
|
244
|
+
returning *`, [
|
|
245
|
+
id,
|
|
246
|
+
permanent ? "blocked_requires_operator" : "pending",
|
|
247
|
+
nextAttemptAt,
|
|
248
|
+
permanent ? now.toISOString() : job.failedAt ?? null,
|
|
249
|
+
failure.error,
|
|
250
|
+
timestamp(),
|
|
251
|
+
leaseToken
|
|
252
|
+
]);
|
|
253
|
+
const row = result.rows[0];
|
|
254
|
+
if (!row)
|
|
255
|
+
throw new Error(`Sandbox sync job lease mismatch: ${id}`);
|
|
256
|
+
return mapSandboxSyncJob(row);
|
|
257
|
+
}
|
|
258
|
+
export async function recoverExpiredSandboxSyncJobs(client, now = new Date()) {
|
|
259
|
+
const result = await client.query(`update openeve_sandbox_sync_jobs
|
|
260
|
+
set status='pending', next_attempt_at=$1, lease_token=null, lease_expires_at=null, updated_at=$1
|
|
261
|
+
where status='running'
|
|
262
|
+
and lease_expires_at is not null
|
|
263
|
+
and lease_expires_at <= $1
|
|
264
|
+
returning *`, [now.toISOString()]);
|
|
265
|
+
return result.rows.map(mapSandboxSyncJob);
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=adapter-sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-sandbox.js","sourceRoot":"","sources":["../src/adapter-sandbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { JsonObject, JsonValue } from "@assemblyline-agents/core";
|
|
2
|
+
import type { RuntimeControlEvent, RuntimeSettingRecord } from "@assemblyline-agents/runtime";
|
|
3
|
+
import type { QueryClient } from "./client-types.js";
|
|
4
|
+
export declare function getSetting(client: QueryClient, scope: string, key: string): Promise<RuntimeSettingRecord | undefined>;
|
|
5
|
+
export declare function setSetting(client: QueryClient, scope: string, key: string, value: JsonValue): Promise<RuntimeSettingRecord>;
|
|
6
|
+
export declare function appendRuntimeControlEvent(client: QueryClient, scope: string, type: string, data?: JsonObject): Promise<RuntimeControlEvent>;
|
|
7
|
+
export declare function listRuntimeControlEvents(client: QueryClient, scope: string): Promise<RuntimeControlEvent[]>;
|
|
8
|
+
//# sourceMappingURL=adapter-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-settings.d.ts","sourceRoot":"","sources":["../src/adapter-settings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAG3H;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAUjI;AAED,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAOrJ;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CASjH"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { normalizeJsonObject, normalizeJsonValue, timestamp, toIso } from "./sql-helpers.js";
|
|
3
|
+
export async function getSetting(client, scope, key) {
|
|
4
|
+
const result = await client.query("select * from openeve_runtime_settings where scope=$1 and key=$2", [scope, key]);
|
|
5
|
+
return result.rows[0] ? mapSetting(result.rows[0]) : undefined;
|
|
6
|
+
}
|
|
7
|
+
export async function setSetting(client, scope, key, value) {
|
|
8
|
+
const updatedAt = timestamp();
|
|
9
|
+
const result = await client.query(`insert into openeve_runtime_settings (scope, key, value, updated_at)
|
|
10
|
+
values ($1,$2,$3::jsonb,$4)
|
|
11
|
+
on conflict (scope, key) do update set value=excluded.value, updated_at=excluded.updated_at
|
|
12
|
+
returning *`, [scope, key, JSON.stringify(value), updatedAt]);
|
|
13
|
+
return mapSetting(result.rows[0]);
|
|
14
|
+
}
|
|
15
|
+
export async function appendRuntimeControlEvent(client, scope, type, data = {}) {
|
|
16
|
+
const event = { id: randomUUID(), scope, type, data, timestamp: timestamp() };
|
|
17
|
+
await client.query("insert into openeve_runtime_control_events (id, scope, type, data, created_at) values ($1,$2,$3,$4::jsonb,$5)", [event.id, scope, type, JSON.stringify(data), event.timestamp]);
|
|
18
|
+
return event;
|
|
19
|
+
}
|
|
20
|
+
export async function listRuntimeControlEvents(client, scope) {
|
|
21
|
+
const result = await client.query("select * from openeve_runtime_control_events where scope=$1 order by created_at asc", [scope]);
|
|
22
|
+
return result.rows.map((row) => ({
|
|
23
|
+
id: String(row.id),
|
|
24
|
+
scope: String(row.scope),
|
|
25
|
+
type: String(row.type),
|
|
26
|
+
data: normalizeJsonObject(row.data),
|
|
27
|
+
timestamp: toIso(row.created_at)
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
function mapSetting(row) {
|
|
31
|
+
return {
|
|
32
|
+
scope: String(row.scope),
|
|
33
|
+
key: String(row.key),
|
|
34
|
+
value: normalizeJsonValue(row.value),
|
|
35
|
+
updatedAt: toIso(row.updated_at)
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=adapter-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-settings.js","sourceRoot":"","sources":["../src/adapter-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE7F,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,KAAa,EAAE,GAAW;IAC9E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAM,kEAAkE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACzH,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,KAAa,EAAE,GAAW,EAAE,KAAgB;IAChG,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B;;;iBAGa,EACb,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAC/C,CAAC;IACF,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,MAAmB,EAAE,KAAa,EAAE,IAAY,EAAE,OAAmB,EAAE;IACrH,MAAM,KAAK,GAAwB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC;IACnG,MAAM,MAAM,CAAC,KAAK,CAChB,+GAA+G,EAC/G,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAC/D,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAmB,EAAE,KAAa;IAC/E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAM,qFAAqF,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACvI,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/B,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;QACnC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;KACjC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAC,GAAQ;IAC1B,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QACpB,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;QACpC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type UsageAggregate, type UsageQuery, type UsageRecord, type UsageRecordInput, type UsageSummaryQuery } from "@assemblyline-agents/runtime";
|
|
2
|
+
import type { QueryClient } from "./client-types.js";
|
|
3
|
+
export declare function recordUsage(client: QueryClient, input: UsageRecordInput): Promise<UsageRecord>;
|
|
4
|
+
export declare function listUsage(client: QueryClient, runId?: string): Promise<UsageRecord[]>;
|
|
5
|
+
export declare function queryUsage(client: QueryClient, query: UsageQuery): Promise<UsageRecord[]>;
|
|
6
|
+
export declare function summarizeUsage(client: QueryClient, query: UsageSummaryQuery): Promise<UsageAggregate[]>;
|
|
7
|
+
//# sourceMappingURL=adapter-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-usage.d.ts","sourceRoot":"","sources":["../src/adapter-usage.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,cAAc,EAEnB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAEpG;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAK3F;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAY/F;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAgD7G"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { UsageAccountingError, createUsageRecord, reconcileUsageRecord, usageRecordInput } from "@assemblyline-agents/runtime";
|
|
2
|
+
import { mapUsage } from "./row-mappers.js";
|
|
3
|
+
import { toIso } from "./sql-helpers.js";
|
|
4
|
+
export async function recordUsage(client, input) {
|
|
5
|
+
return withTransaction(client, (tx) => insertUsage(tx, createUsageRecord(input)));
|
|
6
|
+
}
|
|
7
|
+
export async function listUsage(client, runId) {
|
|
8
|
+
const result = runId
|
|
9
|
+
? await client.query("select * from openeve_usage_records where run_id=$1 order by occurred_at asc, id asc", [runId])
|
|
10
|
+
: await client.query("select * from openeve_usage_records order by occurred_at asc, id asc");
|
|
11
|
+
return result.rows.map(mapUsage);
|
|
12
|
+
}
|
|
13
|
+
export async function queryUsage(client, query) {
|
|
14
|
+
const built = usageWhere(query);
|
|
15
|
+
const limit = boundedLimit(query.limit);
|
|
16
|
+
built.params.push(limit);
|
|
17
|
+
const result = await client.query(`select * from openeve_usage_records
|
|
18
|
+
${built.sql}
|
|
19
|
+
order by occurred_at desc, id desc
|
|
20
|
+
limit $${built.params.length}`, built.params);
|
|
21
|
+
return result.rows.map(mapUsage);
|
|
22
|
+
}
|
|
23
|
+
export async function summarizeUsage(client, query) {
|
|
24
|
+
const built = usageWhere(query);
|
|
25
|
+
const groups = [...new Set([...(query.groupBy ?? []), "currency"])];
|
|
26
|
+
const selections = groups.map(groupSelection);
|
|
27
|
+
const selectPrefix = selections.length > 0
|
|
28
|
+
? `${selections.map((selection) => `${selection.expression} as "${selection.alias}"`).join(", ")},`
|
|
29
|
+
: "";
|
|
30
|
+
const groupSql = selections.length > 0
|
|
31
|
+
? `group by ${selections.map((selection) => selection.expression).join(", ")}`
|
|
32
|
+
: "";
|
|
33
|
+
const result = await client.query(`select ${selectPrefix}
|
|
34
|
+
count(*)::text as record_count,
|
|
35
|
+
coalesce(sum(input_tokens), 0)::text as input_tokens,
|
|
36
|
+
coalesce(sum(output_tokens), 0)::text as output_tokens,
|
|
37
|
+
coalesce(sum(cached_tokens), 0)::text as cached_tokens,
|
|
38
|
+
coalesce(sum(cache_write_tokens), 0)::text as cache_write_tokens,
|
|
39
|
+
coalesce(sum(reasoning_tokens), 0)::text as reasoning_tokens,
|
|
40
|
+
coalesce(sum(cost_micros), 0)::text as actual_cost_micros,
|
|
41
|
+
coalesce(sum(upstream_cost_micros), 0)::text as upstream_cost_micros,
|
|
42
|
+
coalesce(min(currency), 'USD') as currency,
|
|
43
|
+
count(*) filter (where cost_source='unavailable')::text as unavailable_cost_records,
|
|
44
|
+
count(*) filter (where token_source='unavailable')::text as unreconciled_token_records,
|
|
45
|
+
count(*) filter (where cost_source='unavailable')::text as unreconciled_records
|
|
46
|
+
from openeve_usage_records
|
|
47
|
+
${built.sql}
|
|
48
|
+
${groupSql}
|
|
49
|
+
order by ${selections.length > 0 ? selections.map((selection) => `"${selection.alias}"`).join(", ") : "record_count desc"}`, built.params);
|
|
50
|
+
return result.rows.map((row) => ({
|
|
51
|
+
dimensions: Object.fromEntries(selections.map((selection) => [
|
|
52
|
+
selection.group,
|
|
53
|
+
row[selection.alias] === null || row[selection.alias] === undefined ? "unknown" : String(row[selection.alias])
|
|
54
|
+
])),
|
|
55
|
+
recordCount: String(row.record_count ?? "0"),
|
|
56
|
+
inputTokens: String(row.input_tokens ?? "0"),
|
|
57
|
+
outputTokens: String(row.output_tokens ?? "0"),
|
|
58
|
+
cachedTokens: String(row.cached_tokens ?? "0"),
|
|
59
|
+
cacheWriteTokens: String(row.cache_write_tokens ?? "0"),
|
|
60
|
+
reasoningTokens: String(row.reasoning_tokens ?? "0"),
|
|
61
|
+
actualCostMicros: String(row.actual_cost_micros ?? "0"),
|
|
62
|
+
upstreamCostMicros: String(row.upstream_cost_micros ?? "0"),
|
|
63
|
+
currency: String(row.currency ?? "USD"),
|
|
64
|
+
unavailableCostRecords: String(row.unavailable_cost_records ?? "0"),
|
|
65
|
+
unreconciledTokenRecords: String(row.unreconciled_token_records ?? "0"),
|
|
66
|
+
unreconciledRecords: String(row.unreconciled_records ?? "0")
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
async function insertUsage(client, record) {
|
|
70
|
+
const result = await client.query(`insert into openeve_usage_records
|
|
71
|
+
(id,idempotency_key,run_id,parent_run_id,agent_id,agent_revision,subagent,turn_id,iteration,
|
|
72
|
+
provider,provider_request_id,model,response_model,billing_mode,record_kind,
|
|
73
|
+
input_tokens,output_tokens,cached_tokens,cache_write_tokens,reasoning_tokens,
|
|
74
|
+
cost_usd,cost_micros,upstream_cost_micros,currency,
|
|
75
|
+
token_source,cost_source,provider_receipt,receipt_sha256,metadata,occurred_at,created_at)
|
|
76
|
+
values
|
|
77
|
+
($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,
|
|
78
|
+
$21,$22,$23,$24,$25,$26,$27::jsonb,$28,$29::jsonb,$30,$31)
|
|
79
|
+
on conflict (idempotency_key) do nothing
|
|
80
|
+
returning *`, [
|
|
81
|
+
record.id,
|
|
82
|
+
record.idempotencyKey,
|
|
83
|
+
record.runId ?? null,
|
|
84
|
+
record.parentRunId ?? null,
|
|
85
|
+
record.agentId ?? null,
|
|
86
|
+
record.agentRevision ?? null,
|
|
87
|
+
record.subagent ?? null,
|
|
88
|
+
record.turnId ?? null,
|
|
89
|
+
record.iteration ?? null,
|
|
90
|
+
record.provider ?? null,
|
|
91
|
+
record.providerRequestId ?? null,
|
|
92
|
+
record.model ?? null,
|
|
93
|
+
record.responseModel ?? null,
|
|
94
|
+
record.billingMode,
|
|
95
|
+
record.recordKind,
|
|
96
|
+
record.inputTokens,
|
|
97
|
+
record.outputTokens,
|
|
98
|
+
record.cachedTokens,
|
|
99
|
+
record.cacheWriteTokens,
|
|
100
|
+
record.reasoningTokens,
|
|
101
|
+
record.costUsd ?? 0,
|
|
102
|
+
record.costMicros,
|
|
103
|
+
record.upstreamCostMicros,
|
|
104
|
+
record.currency,
|
|
105
|
+
record.tokenSource,
|
|
106
|
+
record.costSource,
|
|
107
|
+
JSON.stringify(record.providerReceipt),
|
|
108
|
+
record.receiptSha256 ?? null,
|
|
109
|
+
JSON.stringify(record.metadata),
|
|
110
|
+
record.occurredAt,
|
|
111
|
+
record.createdAt
|
|
112
|
+
]);
|
|
113
|
+
const inserted = result.rows[0];
|
|
114
|
+
if (inserted)
|
|
115
|
+
return mapUsage(inserted);
|
|
116
|
+
const existing = await client.query("select * from openeve_usage_records where idempotency_key=$1 for update", [record.idempotencyKey]);
|
|
117
|
+
const row = existing.rows[0];
|
|
118
|
+
if (!row)
|
|
119
|
+
throw new UsageAccountingError(`Usage idempotency conflict did not return ${record.idempotencyKey}.`);
|
|
120
|
+
const current = mapUsage(row);
|
|
121
|
+
const reconciled = reconcileUsageRecord(current, usageRecordInput(record));
|
|
122
|
+
if (reconciled === current)
|
|
123
|
+
return current;
|
|
124
|
+
const updated = await client.query(`update openeve_usage_records
|
|
125
|
+
set input_tokens=$2,output_tokens=$3,cached_tokens=$4,cache_write_tokens=$5,reasoning_tokens=$6,
|
|
126
|
+
cost_usd=$7,cost_micros=$8,upstream_cost_micros=$9,
|
|
127
|
+
currency=$10,token_source=$11,cost_source=$12,provider_receipt=$13::jsonb,
|
|
128
|
+
receipt_sha256=$14,metadata=$15::jsonb
|
|
129
|
+
where id=$1
|
|
130
|
+
returning *`, [
|
|
131
|
+
reconciled.id,
|
|
132
|
+
reconciled.inputTokens,
|
|
133
|
+
reconciled.outputTokens,
|
|
134
|
+
reconciled.cachedTokens,
|
|
135
|
+
reconciled.cacheWriteTokens,
|
|
136
|
+
reconciled.reasoningTokens,
|
|
137
|
+
reconciled.costUsd ?? 0,
|
|
138
|
+
reconciled.costMicros,
|
|
139
|
+
reconciled.upstreamCostMicros,
|
|
140
|
+
reconciled.currency,
|
|
141
|
+
reconciled.tokenSource,
|
|
142
|
+
reconciled.costSource,
|
|
143
|
+
JSON.stringify(reconciled.providerReceipt),
|
|
144
|
+
reconciled.receiptSha256 ?? null,
|
|
145
|
+
JSON.stringify(reconciled.metadata)
|
|
146
|
+
]);
|
|
147
|
+
const updatedRow = updated.rows[0];
|
|
148
|
+
if (!updatedRow)
|
|
149
|
+
throw new UsageAccountingError(`Usage reconciliation update failed for ${record.idempotencyKey}.`);
|
|
150
|
+
return mapUsage(updatedRow);
|
|
151
|
+
}
|
|
152
|
+
function usageWhere(query) {
|
|
153
|
+
const clauses = [];
|
|
154
|
+
const params = [];
|
|
155
|
+
const add = (column, value) => {
|
|
156
|
+
if (value === undefined)
|
|
157
|
+
return;
|
|
158
|
+
params.push(value);
|
|
159
|
+
clauses.push(`${column}=$${params.length}`);
|
|
160
|
+
};
|
|
161
|
+
add("run_id", query.runId);
|
|
162
|
+
add("parent_run_id", query.parentRunId);
|
|
163
|
+
add("agent_id", query.agentId);
|
|
164
|
+
add("agent_revision", query.agentRevision);
|
|
165
|
+
add("subagent", query.subagent);
|
|
166
|
+
add("provider", query.provider);
|
|
167
|
+
add("model", query.model);
|
|
168
|
+
add("response_model", query.responseModel);
|
|
169
|
+
add("billing_mode", query.billingMode);
|
|
170
|
+
add("currency", query.currency?.trim().toUpperCase());
|
|
171
|
+
add("token_source", query.tokenSource);
|
|
172
|
+
add("cost_source", query.costSource);
|
|
173
|
+
add("record_kind", query.recordKind);
|
|
174
|
+
if (query.from !== undefined) {
|
|
175
|
+
params.push(toIso(query.from));
|
|
176
|
+
clauses.push(`occurred_at >= $${params.length}`);
|
|
177
|
+
}
|
|
178
|
+
if (query.to !== undefined) {
|
|
179
|
+
params.push(toIso(query.to));
|
|
180
|
+
clauses.push(`occurred_at < $${params.length}`);
|
|
181
|
+
}
|
|
182
|
+
if ("before" in query && query.before) {
|
|
183
|
+
params.push(query.before.occurredAt, query.before.id);
|
|
184
|
+
clauses.push(`(occurred_at, id) < ($${params.length - 1}, $${params.length})`);
|
|
185
|
+
}
|
|
186
|
+
return { sql: clauses.length > 0 ? `where ${clauses.join(" and ")}` : "", params };
|
|
187
|
+
}
|
|
188
|
+
function groupSelection(group) {
|
|
189
|
+
const columns = {
|
|
190
|
+
agentId: "coalesce(agent_id,'unknown')",
|
|
191
|
+
agentRevision: "coalesce(agent_revision,'unknown')",
|
|
192
|
+
runId: "coalesce(run_id,'unknown')",
|
|
193
|
+
parentRunId: "coalesce(parent_run_id,'unknown')",
|
|
194
|
+
subagent: "coalesce(subagent,'unknown')",
|
|
195
|
+
provider: "coalesce(provider,'unknown')",
|
|
196
|
+
model: "coalesce(model,'unknown')",
|
|
197
|
+
responseModel: "coalesce(response_model,'unknown')",
|
|
198
|
+
billingMode: "billing_mode",
|
|
199
|
+
currency: "currency",
|
|
200
|
+
tokenSource: "token_source",
|
|
201
|
+
costSource: "cost_source",
|
|
202
|
+
recordKind: "record_kind"
|
|
203
|
+
};
|
|
204
|
+
if (group === "day")
|
|
205
|
+
return { group, alias: "day", expression: "to_char(occurred_at at time zone 'UTC','YYYY-MM-DD')" };
|
|
206
|
+
if (group === "month")
|
|
207
|
+
return { group, alias: "month", expression: "to_char(occurred_at at time zone 'UTC','YYYY-MM')" };
|
|
208
|
+
return { group, alias: snakeCase(group), expression: columns[group] };
|
|
209
|
+
}
|
|
210
|
+
async function withTransaction(client, operation) {
|
|
211
|
+
const pool = client;
|
|
212
|
+
const pinned = await pool.connect?.();
|
|
213
|
+
const tx = pinned ?? client;
|
|
214
|
+
try {
|
|
215
|
+
await tx.query("begin");
|
|
216
|
+
const result = await operation(tx);
|
|
217
|
+
await tx.query("commit");
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
try {
|
|
222
|
+
await tx.query("rollback");
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// Preserve the original accounting error.
|
|
226
|
+
}
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
229
|
+
finally {
|
|
230
|
+
pinned?.release();
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function boundedLimit(value) {
|
|
234
|
+
if (value === undefined)
|
|
235
|
+
return 200;
|
|
236
|
+
if (!Number.isInteger(value) || value < 1)
|
|
237
|
+
throw new UsageAccountingError("limit must be a positive integer.");
|
|
238
|
+
return Math.min(value, 10_000);
|
|
239
|
+
}
|
|
240
|
+
function snakeCase(value) {
|
|
241
|
+
return value.replace(/[A-Z]/gu, (letter) => `_${letter.toLowerCase()}`);
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=adapter-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-usage.js","sourceRoot":"","sources":["../src/adapter-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-types.d.ts","sourceRoot":"","sources":["../src/client-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;CACjG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-types.js","sourceRoot":"","sources":["../src/client-types.ts"],"names":[],"mappings":""}
|