@parlor/auth 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.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -2
  3. package/dist/account.d.ts +52 -0
  4. package/dist/account.d.ts.map +1 -0
  5. package/dist/account.js +114 -0
  6. package/dist/account.js.map +1 -0
  7. package/dist/audit.d.ts +10 -0
  8. package/dist/audit.d.ts.map +1 -0
  9. package/dist/audit.js +130 -0
  10. package/dist/audit.js.map +1 -0
  11. package/dist/better-auth.d.ts +41 -0
  12. package/dist/better-auth.d.ts.map +1 -0
  13. package/dist/better-auth.js +118 -0
  14. package/dist/better-auth.js.map +1 -0
  15. package/dist/client/index.d.ts +43 -0
  16. package/dist/client/index.d.ts.map +1 -0
  17. package/dist/client/index.js +465 -0
  18. package/dist/client/index.js.map +1 -0
  19. package/dist/database.d.ts +7 -0
  20. package/dist/database.d.ts.map +1 -0
  21. package/dist/database.js +11 -0
  22. package/dist/database.js.map +1 -0
  23. package/dist/devices.d.ts +157 -0
  24. package/dist/devices.d.ts.map +1 -0
  25. package/dist/devices.js +398 -0
  26. package/dist/devices.js.map +1 -0
  27. package/dist/es256.d.ts +4 -0
  28. package/dist/es256.d.ts.map +1 -0
  29. package/dist/es256.js +44 -0
  30. package/dist/es256.js.map +1 -0
  31. package/dist/grants.d.ts +4 -0
  32. package/dist/grants.d.ts.map +1 -0
  33. package/dist/grants.js +6 -0
  34. package/dist/grants.js.map +1 -0
  35. package/dist/hosts.d.ts +116 -0
  36. package/dist/hosts.d.ts.map +1 -0
  37. package/dist/hosts.js +530 -0
  38. package/dist/hosts.js.map +1 -0
  39. package/dist/index.d.ts +9 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +9 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/migrations.d.ts +3 -0
  44. package/dist/migrations.d.ts.map +1 -0
  45. package/dist/migrations.js +17 -0
  46. package/dist/migrations.js.map +1 -0
  47. package/dist/pages.d.ts +4 -0
  48. package/dist/pages.d.ts.map +1 -0
  49. package/dist/pages.js +53 -0
  50. package/dist/pages.js.map +1 -0
  51. package/dist/provider.d.ts +74 -0
  52. package/dist/provider.d.ts.map +1 -0
  53. package/dist/provider.js +286 -0
  54. package/dist/provider.js.map +1 -0
  55. package/dist/revocation.d.ts +51 -0
  56. package/dist/revocation.d.ts.map +1 -0
  57. package/dist/revocation.js +233 -0
  58. package/dist/revocation.js.map +1 -0
  59. package/dist/routes.d.ts +15 -0
  60. package/dist/routes.d.ts.map +1 -0
  61. package/dist/routes.js +116 -0
  62. package/dist/routes.js.map +1 -0
  63. package/dist/schema.d.ts +2970 -0
  64. package/dist/schema.d.ts.map +1 -0
  65. package/dist/schema.js +308 -0
  66. package/dist/schema.js.map +1 -0
  67. package/dist/statements.d.ts +92 -0
  68. package/dist/statements.d.ts.map +1 -0
  69. package/dist/statements.js +199 -0
  70. package/dist/statements.js.map +1 -0
  71. package/dist/tokens.d.ts +69 -0
  72. package/dist/tokens.d.ts.map +1 -0
  73. package/dist/tokens.js +134 -0
  74. package/dist/tokens.js.map +1 -0
  75. package/dist/turn-keys.d.ts +16 -0
  76. package/dist/turn-keys.d.ts.map +1 -0
  77. package/dist/turn-keys.js +108 -0
  78. package/dist/turn-keys.js.map +1 -0
  79. package/package.json +57 -3
@@ -0,0 +1,465 @@
1
+ import { oauthProviderClient } from "@better-auth/oauth-provider/client";
2
+ import { detectPlatform, deviceKey, resolveCapability, sessionStore, } from "@parlor/capabilities";
3
+ import { decodeBase64url } from "@parlor/capabilities/encoding";
4
+ import { appOrigin, createActionClient, LinkOnComputer, } from "@parlor/client";
5
+ import { ActionError } from "@parlor/core";
6
+ import { createAuthClient as createBetterAuthClient } from "better-auth/client";
7
+ import { answerStatement, deviceCommitment, HOST_PAIRING_FRAGMENT, linkCode, normalizeLinkCode, pairingProof, promptStatement, removeStatement, statementBytes, vouchStatement, } from "../statements.js";
8
+ const DEFAULT_BASE_PATH = "/_parlor";
9
+ const RETRY_BASE_MS = 1000;
10
+ const RETRY_MAX_MS = 30_000;
11
+ const TOKEN_HEADER = "set-auth-token";
12
+ const HOST_IPC_REDIRECT = "urn:parlor:ipc";
13
+ const DEBUG_KEY = "parlor:debug";
14
+ const HOST_PAIRING_KEY = "parlor:host-pairing";
15
+ function injectedServerUrl() {
16
+ const env = import.meta.env;
17
+ return env?.PARLOR_SERVER_URL ?? "";
18
+ }
19
+ export class AuthClientError extends Error {
20
+ status;
21
+ code;
22
+ name = "AuthClientError";
23
+ constructor(message, status, code) {
24
+ super(message);
25
+ this.status = status;
26
+ this.code = code;
27
+ }
28
+ }
29
+ function settle(result) {
30
+ if (!result.error)
31
+ return;
32
+ const { message, status, code } = result.error;
33
+ throw new AuthClientError(message || "Authentication failed.", status, code);
34
+ }
35
+ const ANONYMOUS_SESSION = { status: "anonymous" };
36
+ const BROWSERS = [
37
+ [/Edg\//, "Edge"],
38
+ [/OPR\//, "Opera"],
39
+ [/Firefox\//, "Firefox"],
40
+ [/Chrome\//, "Chrome"],
41
+ [/Safari\//, "Safari"],
42
+ ];
43
+ const SYSTEMS = [
44
+ [/iPhone|iPad/, "iOS"],
45
+ [/Android/, "Android"],
46
+ [/Mac OS X/, "macOS"],
47
+ [/Windows/, "Windows"],
48
+ [/Linux/, "Linux"],
49
+ ];
50
+ function deviceName() {
51
+ const agent = globalThis.navigator?.userAgent ?? "";
52
+ const browser = BROWSERS.find(([pattern]) => pattern.test(agent))?.[1];
53
+ const system = SYSTEMS.find(([pattern]) => pattern.test(agent))?.[1];
54
+ if (browser && system)
55
+ return `${browser} on ${system}`;
56
+ return browser ?? system ?? "This device";
57
+ }
58
+ function debugStatements() {
59
+ try {
60
+ return (globalThis.localStorage?.getItem(DEBUG_KEY)?.split(",").includes("statements") ??
61
+ false);
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ async function logSigned(statement) {
68
+ if (!debugStatements())
69
+ return;
70
+ const digest = await crypto.subtle.digest("SHA-256", new Uint8Array(statementBytes(statement)));
71
+ const hex = [...new Uint8Array(digest)]
72
+ .map((byte) => byte.toString(16).padStart(2, "0"))
73
+ .join("");
74
+ console.info(`[parlor] signed ${statement.kind} sha256=${hex}`);
75
+ }
76
+ /** Takes the host's pairing secret off this page's URL, where only that redirect puts it. */
77
+ function keepHostPairing() {
78
+ try {
79
+ const location = globalThis.location;
80
+ if (!location?.hash)
81
+ return;
82
+ const fragment = new URLSearchParams(location.hash.slice(1));
83
+ const secret = fragment.get(HOST_PAIRING_FRAGMENT);
84
+ if (!secret)
85
+ return;
86
+ globalThis.localStorage?.setItem(HOST_PAIRING_KEY, secret);
87
+ fragment.delete(HOST_PAIRING_FRAGMENT);
88
+ const rest = fragment.toString();
89
+ globalThis.history?.replaceState(globalThis.history.state, "", `${location.pathname}${location.search}${rest ? `#${rest}` : ""}`);
90
+ }
91
+ catch { }
92
+ }
93
+ function hostPairing() {
94
+ try {
95
+ return globalThis.localStorage?.getItem(HOST_PAIRING_KEY) ?? undefined;
96
+ }
97
+ catch {
98
+ return undefined;
99
+ }
100
+ }
101
+ const serverHasNoAuth = (error) => error.status === 404;
102
+ function enrollmentPresence(presence, rpId) {
103
+ if (!presence)
104
+ return undefined;
105
+ return presence.format === "webauthn"
106
+ ? {
107
+ format: "webauthn",
108
+ credentialId: presence.credentialId,
109
+ rpId,
110
+ publicKey: { ...presence.publicKey },
111
+ attestation: presence.attestation,
112
+ }
113
+ : {
114
+ format: "es256-raw",
115
+ keyId: presence.keyId,
116
+ publicKey: { ...presence.publicKey },
117
+ };
118
+ }
119
+ function registered(presence) {
120
+ if (presence?.format !== "webauthn")
121
+ return presence;
122
+ const { attestation: _attestation, ...key } = presence;
123
+ return key;
124
+ }
125
+ function hostnameOf(origin) {
126
+ try {
127
+ return new URL(origin).hostname;
128
+ }
129
+ catch {
130
+ return globalThis.location.hostname;
131
+ }
132
+ }
133
+ export function createAuthClient(options = {}) {
134
+ keepHostPairing();
135
+ const baseUrl = options.baseUrl ?? injectedServerUrl();
136
+ const basePath = options.basePath ?? DEFAULT_BASE_PATH;
137
+ const store = options.session
138
+ ? Promise.resolve(options.session)
139
+ : resolveCapability(sessionStore).then((handle) => handle.available ? handle.api : undefined);
140
+ const headers = async () => {
141
+ const token = await (await store)?.get();
142
+ return token ? { authorization: `Bearer ${token}` } : {};
143
+ };
144
+ // Built on first use: importing a module that creates the client must work outside a page.
145
+ let client;
146
+ const connect = () => createBetterAuthClient({
147
+ baseURL: `${baseUrl || globalThis.location.origin}${basePath}/auth`,
148
+ plugins: [oauthProviderClient()],
149
+ fetchOptions: {
150
+ ...(options.fetch ? { customFetchImpl: options.fetch } : {}),
151
+ onRequest: async (context) => {
152
+ for (const [name, value] of new Headers(await headers())) {
153
+ context.headers.set(name, value);
154
+ }
155
+ return context;
156
+ },
157
+ onSuccess: async (context) => {
158
+ const token = context.response.headers.get(TOKEN_HEADER);
159
+ if (token)
160
+ await (await store)?.set(token);
161
+ else if (context.request.url.toString().endsWith("/get-session") &&
162
+ !context.data) {
163
+ // A bearer token the server no longer knows would fail every later request.
164
+ await (await store)?.set(undefined);
165
+ }
166
+ },
167
+ },
168
+ });
169
+ const betterAuth = () => (client ??= connect());
170
+ let watchers = 0;
171
+ let retry;
172
+ let retryDelay = RETRY_BASE_MS;
173
+ const retryAfterError = () => {
174
+ const state = betterAuth().useSession.get();
175
+ if (!state.error || serverHasNoAuth(state.error)) {
176
+ retryDelay = RETRY_BASE_MS;
177
+ return;
178
+ }
179
+ if (retry !== undefined || state.isRefetching)
180
+ return;
181
+ retry = setTimeout(() => {
182
+ retry = undefined;
183
+ void state.refetch();
184
+ }, retryDelay);
185
+ retryDelay = Math.min(retryDelay * 2, RETRY_MAX_MS);
186
+ };
187
+ let last;
188
+ let snapshot = { status: "loading" };
189
+ const current = () => {
190
+ const state = betterAuth().useSession.get();
191
+ if (state === last)
192
+ return snapshot;
193
+ last = state;
194
+ if (state.error) {
195
+ if (serverHasNoAuth(state.error))
196
+ snapshot = ANONYMOUS_SESSION;
197
+ // Only the server saying there is no session signs the user out, never an unreachable one.
198
+ return snapshot;
199
+ }
200
+ const user = state.data?.user;
201
+ snapshot = user
202
+ ? { status: "signed-in", user: { id: user.id, name: user.name, email: user.email } }
203
+ : state.isPending
204
+ ? { status: "loading" }
205
+ : { status: "signed-out" };
206
+ return snapshot;
207
+ };
208
+ const account = createActionClient({
209
+ baseUrl,
210
+ fetch: options.fetch,
211
+ basePath: `${basePath}/auth`,
212
+ headers,
213
+ });
214
+ const keysOfThisPlatform = async () => {
215
+ const handle = await resolveCapability(deviceKey);
216
+ return handle.available ? handle.api : undefined;
217
+ };
218
+ const devices = new Map();
219
+ const enroll = async (user, wantsPresence) => {
220
+ const key = options.deviceKey ?? (await keysOfThisPlatform());
221
+ if (!key)
222
+ return undefined;
223
+ const app = appOrigin(baseUrl || undefined);
224
+ const rpId = hostnameOf(app);
225
+ const { challenge } = await account.call("deviceChallenge", {});
226
+ const keys = await key.publicKeys({
227
+ rpId,
228
+ userId: user.id,
229
+ userName: user.email,
230
+ challenge: decodeBase64url(challenge),
231
+ }, { presence: wantsPresence });
232
+ const presence = enrollmentPresence(keys.presence, rpId);
233
+ const name = deviceName();
234
+ const platform = detectPlatform();
235
+ const signingKey = { ...keys.signing.publicKey };
236
+ const { id } = await account.call("enrollDevice", {
237
+ name,
238
+ platform,
239
+ challenge,
240
+ signing: { keyId: keys.signing.keyId, publicKey: signingKey },
241
+ ...(presence ? { presence } : {}),
242
+ proof: keys.proof,
243
+ });
244
+ return {
245
+ id,
246
+ keys: {
247
+ deviceId: id,
248
+ name,
249
+ platform,
250
+ signingKey,
251
+ presenceKey: registered(presence),
252
+ },
253
+ signPrompt: async (prompt, wanted) => {
254
+ const at = Date.now();
255
+ const statement = await promptStatement(app, prompt, at);
256
+ const bytes = statementBytes(statement);
257
+ const signature = wanted?.presence
258
+ ? await key.sign(bytes, { presence: true })
259
+ : await key.sign(bytes, { presence: false });
260
+ await logSigned(statement);
261
+ const secret = hostPairing();
262
+ const pairing = secret && (await pairingProof(secret, id, signingKey));
263
+ return { deviceId: id, at, signature, ...(pairing ? { pairing } : {}) };
264
+ },
265
+ signAnswer: async (answer, { presence: wanted }) => {
266
+ const at = Date.now();
267
+ const statement = await answerStatement(app, answer, at);
268
+ const bytes = statementBytes(statement);
269
+ const signature = wanted
270
+ ? await key.sign(bytes, { presence: true })
271
+ : await key.sign(bytes, { presence: false });
272
+ await logSigned(statement);
273
+ return { deviceId: id, at, signature };
274
+ },
275
+ };
276
+ };
277
+ const device = async (wanted) => {
278
+ const session = current();
279
+ if (session.status !== "signed-in")
280
+ return undefined;
281
+ const known = devices.get(session.user.id);
282
+ if (known)
283
+ return known;
284
+ // The browser that approved `connect` is on the computer, which answers its permission questions.
285
+ const presence = wanted?.presence ?? hostPairing() === undefined;
286
+ const enrolling = enroll(session.user, presence).catch((error) => {
287
+ if (error instanceof ActionError && error.code === "not_found")
288
+ return undefined;
289
+ throw error;
290
+ });
291
+ devices.set(session.user.id, enrolling);
292
+ enrolling.then((enrolled) => {
293
+ if (!enrolled)
294
+ devices.delete(session.user.id);
295
+ }, () => devices.delete(session.user.id));
296
+ return enrolling;
297
+ };
298
+ return {
299
+ headers,
300
+ current,
301
+ subscribe: (listener) => {
302
+ watchers += 1;
303
+ const stop = betterAuth().useSession.listen(() => {
304
+ retryAfterError();
305
+ listener();
306
+ });
307
+ return () => {
308
+ stop();
309
+ watchers -= 1;
310
+ if (watchers === 0 && retry !== undefined) {
311
+ clearTimeout(retry);
312
+ retry = undefined;
313
+ }
314
+ };
315
+ },
316
+ signIn: async (input) => settle(await betterAuth().signIn.email(input)),
317
+ signUp: async (input) => settle(await betterAuth().signUp.email(input)),
318
+ signOut: async () => {
319
+ try {
320
+ settle(await betterAuth().signOut());
321
+ }
322
+ finally {
323
+ await (await store)?.set(undefined);
324
+ }
325
+ },
326
+ linkState: async () => {
327
+ const pairing = hostPairing() !== undefined;
328
+ const session = current();
329
+ if (session.status !== "signed-in")
330
+ return { vouched: false, pairing };
331
+ const known = devices.get(session.user.id);
332
+ const key = options.deviceKey ?? (await keysOfThisPlatform());
333
+ const silent = known !== undefined ||
334
+ (key !== undefined && (await key.presenceSetup?.()) !== "needed");
335
+ const own = silent ? await device() : undefined;
336
+ if (!own)
337
+ return { vouched: false, pairing };
338
+ const listed = await account.call("devices", {});
339
+ const listing = listed.find((entry) => entry.id === own.id);
340
+ if (!listing) {
341
+ devices.delete(session.user.id);
342
+ return { vouched: false, pairing };
343
+ }
344
+ return { deviceId: own.id, vouched: listing.vouched, pairing };
345
+ },
346
+ startLink: async (wanted) => {
347
+ const own = await device(wanted);
348
+ if (!own)
349
+ throw new Error("Sign in on this device first.");
350
+ const app = appOrigin(baseUrl || undefined);
351
+ const commitment = await deviceCommitment(app, own.id, own.keys.signingKey, own.keys.presenceKey?.publicKey);
352
+ const code = linkCode(commitment);
353
+ const { expiresAt } = await account.call("startDeviceLink", {
354
+ device: own.id,
355
+ code,
356
+ });
357
+ return { deviceId: own.id, code, commitment, expiresAt };
358
+ },
359
+ resolveLink: async (from) => {
360
+ const code = typeof from === "string" ? normalizeLinkCode(from) : undefined;
361
+ const found = await account.call("resolveDeviceLink", code ? { code } : { device: from.deviceId });
362
+ const commitment = await deviceCommitment(appOrigin(baseUrl || undefined), found.id, found.signingKey, found.presenceKey?.publicKey);
363
+ const matches = typeof from === "string"
364
+ ? linkCode(commitment) === code
365
+ : found.id === from.deviceId && commitment === from.commitment;
366
+ if (!matches) {
367
+ throw new Error("The app returned a device whose keys do not match this code, so it was not linked.");
368
+ }
369
+ return {
370
+ id: found.id,
371
+ name: found.name,
372
+ platform: found.platform,
373
+ commitment,
374
+ code: linkCode(commitment),
375
+ };
376
+ },
377
+ listDevices: async () => {
378
+ const session = current();
379
+ if (session.status !== "signed-in")
380
+ return [];
381
+ const own = devices.has(session.user.id) ? await device() : undefined;
382
+ const listed = await account.call("devices", {});
383
+ return listed.map((entry) => ({ ...entry, current: entry.id === own?.id }));
384
+ },
385
+ removeDevice: async (id) => {
386
+ const own = await device();
387
+ const key = options.deviceKey ?? (await keysOfThisPlatform());
388
+ if (!own?.keys.presenceKey || !key) {
389
+ throw new LinkOnComputer("This device cannot confirm it is you.");
390
+ }
391
+ const app = appOrigin(baseUrl || undefined);
392
+ const at = Date.now();
393
+ const signature = await key.sign(statementBytes(removeStatement(app, own.id, id, at)), {
394
+ presence: true,
395
+ });
396
+ await account.call("removeDevice", {
397
+ device: id,
398
+ actor: own.id,
399
+ app,
400
+ at,
401
+ signature,
402
+ });
403
+ const session = current();
404
+ if (id === own.id && session.status === "signed-in")
405
+ devices.delete(session.user.id);
406
+ },
407
+ canVouch: async () => {
408
+ const session = current();
409
+ if (session.status !== "signed-in")
410
+ return false;
411
+ const known = devices.get(session.user.id);
412
+ const key = options.deviceKey ?? (await keysOfThisPlatform());
413
+ if (!known && (await key?.presenceSetup?.()) === "needed")
414
+ return false;
415
+ return (await device())?.keys.presenceKey !== undefined;
416
+ },
417
+ vouch: async (link) => {
418
+ const own = await device();
419
+ const key = options.deviceKey ?? (await keysOfThisPlatform());
420
+ if (!own?.keys.presenceKey || !key) {
421
+ throw new LinkOnComputer("This device cannot confirm it is you.");
422
+ }
423
+ const app = appOrigin(baseUrl || undefined);
424
+ const at = Date.now();
425
+ const statement = vouchStatement(app, own.id, link.id, link.commitment, at);
426
+ const signature = await key.sign(statementBytes(statement), { presence: true });
427
+ await account.call("vouchDevice", {
428
+ device: link.id,
429
+ voucher: own.id,
430
+ app,
431
+ commitment: link.commitment,
432
+ at,
433
+ signature,
434
+ });
435
+ },
436
+ deviceSetup: async () => {
437
+ const session = current();
438
+ if (session.status !== "signed-in" || devices.has(session.user.id))
439
+ return "ready";
440
+ const key = options.deviceKey ?? (await keysOfThisPlatform());
441
+ return (await key?.presenceSetup?.()) === "needed" ? "needed" : "ready";
442
+ },
443
+ device,
444
+ authorizeHost: async (pairing) => {
445
+ const response = await (options.fetch ?? fetch)(`${baseUrl}${basePath}/auth/hosts/authorize`, {
446
+ method: "POST",
447
+ headers: { ...(await headers()), "content-type": "application/json" },
448
+ body: JSON.stringify({
449
+ ...pairing,
450
+ redirectUri: HOST_IPC_REDIRECT,
451
+ decision: "connect",
452
+ }),
453
+ });
454
+ const body = (await response.json().catch(() => undefined));
455
+ if (!response.ok ||
456
+ typeof body?.code !== "string" ||
457
+ body.state !== pairing.state) {
458
+ throw new AuthClientError(body?.error?.message ?? "The computer could not be connected.", response.status, body?.error?.code);
459
+ }
460
+ return body.code;
461
+ },
462
+ account,
463
+ };
464
+ }
465
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { PgDatabase, PgQueryResultHKT } from "drizzle-orm/pg-core";
2
+ export type Database = PgDatabase<PgQueryResultHKT>;
3
+ /** node-postgres and PGlite both answer `execute` with `{ rows }`; drizzle's proxy with an array. */
4
+ export declare function rowsOf<T>(result: unknown): T[];
5
+ /** A jsonb column arrives parsed from node-postgres and PGlite, as text from other drivers. */
6
+ export declare function jwkOf(value: JsonWebKey | string): JsonWebKey;
7
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAExE,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;AAEpD,qGAAqG;AACrG,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,CAG9C;AAED,+FAA+F;AAC/F,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,CAE5D"}
@@ -0,0 +1,11 @@
1
+ /** node-postgres and PGlite both answer `execute` with `{ rows }`; drizzle's proxy with an array. */
2
+ export function rowsOf(result) {
3
+ if (Array.isArray(result))
4
+ return result;
5
+ return (result.rows ?? []);
6
+ }
7
+ /** A jsonb column arrives parsed from node-postgres and PGlite, as text from other drivers. */
8
+ export function jwkOf(value) {
9
+ return typeof value === "string" ? JSON.parse(value) : value;
10
+ }
11
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAIA,qGAAqG;AACrG,MAAM,UAAU,MAAM,CAAI,MAAe;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAa,CAAC;IAChD,OAAO,CAAE,MAAyB,CAAC,IAAI,IAAI,EAAE,CAAQ,CAAC;AACxD,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,KAAK,CAAC,KAA0B;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/E,CAAC"}