@xylex-group/athena 1.7.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -290,6 +290,76 @@ function resolvePostgresColumnType(column) {
290
290
  return wrapArrayType(baseType, column.arrayDimensions);
291
291
  }
292
292
 
293
+ // src/gateway/errors.ts
294
+ var AthenaGatewayError = class _AthenaGatewayError extends Error {
295
+ code;
296
+ status;
297
+ endpoint;
298
+ method;
299
+ requestId;
300
+ hint;
301
+ causeDetail;
302
+ constructor(input) {
303
+ super(input.message);
304
+ this.name = "AthenaGatewayError";
305
+ this.code = input.code;
306
+ this.status = input.status ?? 0;
307
+ this.endpoint = input.endpoint;
308
+ this.method = input.method;
309
+ this.requestId = input.requestId;
310
+ this.hint = input.hint;
311
+ this.causeDetail = input.cause;
312
+ }
313
+ toDetails() {
314
+ return {
315
+ code: this.code,
316
+ message: this.message,
317
+ status: this.status,
318
+ endpoint: this.endpoint,
319
+ method: this.method,
320
+ requestId: this.requestId,
321
+ hint: this.hint,
322
+ cause: this.causeDetail
323
+ };
324
+ }
325
+ static fromResponse(response, fallback) {
326
+ const details = response.errorDetails;
327
+ if (details) {
328
+ return new _AthenaGatewayError({
329
+ code: details.code,
330
+ message: details.message,
331
+ status: details.status,
332
+ endpoint: details.endpoint ?? fallback.endpoint,
333
+ method: details.method ?? fallback.method,
334
+ requestId: details.requestId ?? fallback.requestId,
335
+ hint: details.hint,
336
+ cause: details.cause
337
+ });
338
+ }
339
+ return new _AthenaGatewayError({
340
+ code: "HTTP_ERROR",
341
+ message: response.error ?? "Gateway request failed",
342
+ status: response.status,
343
+ endpoint: fallback.endpoint,
344
+ method: fallback.method,
345
+ requestId: fallback.requestId
346
+ });
347
+ }
348
+ };
349
+
350
+ // src/auxiliaries.ts
351
+ function parseBooleanFlag(rawValue, fallback) {
352
+ if (!rawValue) return fallback;
353
+ const normalized = rawValue.trim().toLowerCase();
354
+ if (normalized === "1" || normalized === "true" || normalized === "yes" || normalized === "on") {
355
+ return true;
356
+ }
357
+ if (normalized === "0" || normalized === "false" || normalized === "no" || normalized === "off") {
358
+ return false;
359
+ }
360
+ return fallback;
361
+ }
362
+
293
363
  // src/generator/schema-selection.ts
294
364
  var DEFAULT_POSTGRES_SCHEMAS = ["public"];
295
365
  function collectSchemaNames(input) {
@@ -349,6 +419,39 @@ var DEFAULT_EXPERIMENTAL_FLAGS = {
349
419
  postgresGatewayIntrospection: false,
350
420
  scyllaProviderContracts: true
351
421
  };
422
+ function normalizeBooleanFlag(rawValue, fallback) {
423
+ if (typeof rawValue === "boolean") {
424
+ return rawValue;
425
+ }
426
+ if (typeof rawValue === "string") {
427
+ return parseBooleanFlag(rawValue, fallback);
428
+ }
429
+ return fallback;
430
+ }
431
+ function normalizeFeatureFlags(input) {
432
+ return {
433
+ emitRelations: normalizeBooleanFlag(
434
+ input?.emitRelations,
435
+ DEFAULT_FEATURES.emitRelations
436
+ ),
437
+ emitRegistry: normalizeBooleanFlag(
438
+ input?.emitRegistry,
439
+ DEFAULT_FEATURES.emitRegistry
440
+ )
441
+ };
442
+ }
443
+ function normalizeExperimentalFlags(input) {
444
+ return {
445
+ postgresGatewayIntrospection: normalizeBooleanFlag(
446
+ input?.postgresGatewayIntrospection,
447
+ DEFAULT_EXPERIMENTAL_FLAGS.postgresGatewayIntrospection
448
+ ),
449
+ scyllaProviderContracts: normalizeBooleanFlag(
450
+ input?.scyllaProviderContracts,
451
+ DEFAULT_EXPERIMENTAL_FLAGS.scyllaProviderContracts
452
+ )
453
+ };
454
+ }
352
455
  function normalizeOutputConfig(output) {
353
456
  return {
354
457
  targets: {
@@ -384,14 +487,8 @@ function normalizeGeneratorConfig(input) {
384
487
  ...DEFAULT_NAMING,
385
488
  ...input.naming ?? {}
386
489
  },
387
- features: {
388
- ...DEFAULT_FEATURES,
389
- ...input.features ?? {}
390
- },
391
- experimental: {
392
- ...DEFAULT_EXPERIMENTAL_FLAGS,
393
- ...input.experimental ?? {}
394
- }
490
+ features: normalizeFeatureFlags(input.features),
491
+ experimental: normalizeExperimentalFlags(input.experimental)
395
492
  };
396
493
  }
397
494
  function findGeneratorConfigPath(cwd = process.cwd()) {
@@ -720,63 +817,6 @@ function generateArtifactsFromSnapshot(snapshot, config) {
720
817
  return new ArtifactComposer(snapshot, normalizedConfig).compose();
721
818
  }
722
819
 
723
- // src/gateway/errors.ts
724
- var AthenaGatewayError = class _AthenaGatewayError extends Error {
725
- code;
726
- status;
727
- endpoint;
728
- method;
729
- requestId;
730
- hint;
731
- causeDetail;
732
- constructor(input) {
733
- super(input.message);
734
- this.name = "AthenaGatewayError";
735
- this.code = input.code;
736
- this.status = input.status ?? 0;
737
- this.endpoint = input.endpoint;
738
- this.method = input.method;
739
- this.requestId = input.requestId;
740
- this.hint = input.hint;
741
- this.causeDetail = input.cause;
742
- }
743
- toDetails() {
744
- return {
745
- code: this.code,
746
- message: this.message,
747
- status: this.status,
748
- endpoint: this.endpoint,
749
- method: this.method,
750
- requestId: this.requestId,
751
- hint: this.hint,
752
- cause: this.causeDetail
753
- };
754
- }
755
- static fromResponse(response, fallback) {
756
- const details = response.errorDetails;
757
- if (details) {
758
- return new _AthenaGatewayError({
759
- code: details.code,
760
- message: details.message,
761
- status: details.status,
762
- endpoint: details.endpoint ?? fallback.endpoint,
763
- method: details.method ?? fallback.method,
764
- requestId: details.requestId ?? fallback.requestId,
765
- hint: details.hint,
766
- cause: details.cause
767
- });
768
- }
769
- return new _AthenaGatewayError({
770
- code: "HTTP_ERROR",
771
- message: response.error ?? "Gateway request failed",
772
- status: response.status,
773
- endpoint: fallback.endpoint,
774
- method: fallback.method,
775
- requestId: fallback.requestId
776
- });
777
- }
778
- };
779
-
780
820
  // src/gateway/client.ts
781
821
  var DEFAULT_BASE_URL = "https://athena-db.com";
782
822
  var DEFAULT_CLIENT = "railway_direct";
@@ -1198,6 +1238,1044 @@ function quoteSelectColumnsExpression(columns) {
1198
1238
  return tokens.map(quoteSelectToken).join(", ");
1199
1239
  }
1200
1240
 
1241
+ // src/auth/client.ts
1242
+ var DEFAULT_AUTH_BASE_URL = "http://localhost:3001/api/auth";
1243
+ var FALLBACK_SDK_VERSION2 = "1.0.0";
1244
+ var SDK_NAME2 = "xylex-group/athena-auth";
1245
+ var SDK_VERSION2 = typeof process !== "undefined" && process?.env?.npm_package_version ? process.env.npm_package_version : FALLBACK_SDK_VERSION2;
1246
+ var SDK_HEADER_VALUE2 = `${SDK_NAME2} ${SDK_VERSION2}`;
1247
+ function normalizeBaseUrl(baseUrl) {
1248
+ return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\/$/, "");
1249
+ }
1250
+ function isRecord2(value) {
1251
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
1252
+ }
1253
+ function normalizeHeaderValue2(value) {
1254
+ return value ? value : void 0;
1255
+ }
1256
+ function parseResponseBody2(rawText, contentType) {
1257
+ if (!rawText) {
1258
+ return { parsed: null, parseFailed: false };
1259
+ }
1260
+ const contentTypeSuggestsJson = contentType?.toLowerCase().includes("application/json") ?? false;
1261
+ const looksJson = contentTypeSuggestsJson || rawText.startsWith("{") || rawText.startsWith("[");
1262
+ if (!looksJson) {
1263
+ return { parsed: rawText, parseFailed: false };
1264
+ }
1265
+ try {
1266
+ return { parsed: JSON.parse(rawText), parseFailed: false };
1267
+ } catch {
1268
+ return { parsed: rawText, parseFailed: true };
1269
+ }
1270
+ }
1271
+ function resolveRequestId2(headers) {
1272
+ return headers.get("x-request-id") ?? headers.get("x-correlation-id") ?? headers.get("x-athena-request-id") ?? void 0;
1273
+ }
1274
+ function resolveErrorMessage2(payload, fallback) {
1275
+ if (isRecord2(payload)) {
1276
+ const messageCandidates = [payload.error, payload.message, payload.details];
1277
+ for (const candidate of messageCandidates) {
1278
+ if (typeof candidate === "string" && candidate.trim().length > 0) {
1279
+ return candidate.trim();
1280
+ }
1281
+ }
1282
+ }
1283
+ if (typeof payload === "string" && payload.trim().length > 0) {
1284
+ return payload.trim();
1285
+ }
1286
+ return fallback;
1287
+ }
1288
+ function toErrorDetails(input) {
1289
+ return {
1290
+ code: input.code,
1291
+ message: input.message,
1292
+ status: input.status,
1293
+ endpoint: input.endpoint,
1294
+ method: input.method,
1295
+ requestId: input.requestId,
1296
+ hint: input.hint,
1297
+ cause: input.cause
1298
+ };
1299
+ }
1300
+ function mergeCallOptions(base, override) {
1301
+ if (!base && !override) return void 0;
1302
+ return {
1303
+ ...base,
1304
+ ...override,
1305
+ headers: {
1306
+ ...base?.headers ?? {},
1307
+ ...override?.headers ?? {}
1308
+ }
1309
+ };
1310
+ }
1311
+ function extractFetchOptions(input) {
1312
+ if (!input) {
1313
+ return {
1314
+ payload: void 0,
1315
+ fetchOptions: void 0
1316
+ };
1317
+ }
1318
+ const { fetchOptions, ...rest } = input;
1319
+ const hasPayloadKeys = Object.keys(rest).length > 0;
1320
+ return {
1321
+ payload: hasPayloadKeys ? rest : void 0,
1322
+ fetchOptions
1323
+ };
1324
+ }
1325
+ function buildHeaders2(config, options) {
1326
+ const headers = {
1327
+ "Content-Type": "application/json",
1328
+ "X-Athena-Sdk": SDK_HEADER_VALUE2
1329
+ };
1330
+ const apiKey = options?.apiKey ?? config.apiKey;
1331
+ if (apiKey) {
1332
+ headers.apikey = apiKey;
1333
+ headers["x-api-key"] = apiKey;
1334
+ }
1335
+ const bearerToken = options?.bearerToken ?? config.bearerToken;
1336
+ if (bearerToken) {
1337
+ headers.Authorization = `Bearer ${bearerToken}`;
1338
+ }
1339
+ const mergedExtraHeaders = {
1340
+ ...config.headers ?? {},
1341
+ ...options?.headers ?? {}
1342
+ };
1343
+ Object.entries(mergedExtraHeaders).forEach(([key, value]) => {
1344
+ const normalized = normalizeHeaderValue2(value);
1345
+ if (normalized) {
1346
+ headers[key] = normalized;
1347
+ }
1348
+ });
1349
+ return headers;
1350
+ }
1351
+ function appendQueryParam(searchParams, key, value) {
1352
+ if (value === void 0 || value === null) return;
1353
+ if (Array.isArray(value)) {
1354
+ value.forEach((item) => {
1355
+ searchParams.append(key, String(item));
1356
+ });
1357
+ return;
1358
+ }
1359
+ searchParams.append(key, String(value));
1360
+ }
1361
+ function buildRequestUrl(baseUrl, endpoint, query) {
1362
+ const url = `${baseUrl}${endpoint}`;
1363
+ if (!query || Object.keys(query).length === 0) return url;
1364
+ const searchParams = new URLSearchParams();
1365
+ Object.entries(query).forEach(([key, value]) => appendQueryParam(searchParams, key, value));
1366
+ const queryText = searchParams.toString();
1367
+ return queryText ? `${url}?${queryText}` : url;
1368
+ }
1369
+ function inferDefaultMethod(endpoint) {
1370
+ if (endpoint.startsWith("/reset-password/")) {
1371
+ return "GET";
1372
+ }
1373
+ switch (endpoint) {
1374
+ case "/get-session":
1375
+ case "/list-sessions":
1376
+ case "/verify-email":
1377
+ case "/change-email/verify":
1378
+ case "/delete-user/verify":
1379
+ case "/email-list":
1380
+ case "/email/list":
1381
+ case "/delete-user/callback":
1382
+ case "/list-accounts":
1383
+ case "/passkey/generate-register-options":
1384
+ case "/passkey/list-user-passkeys":
1385
+ case "/.well-known/webauthn":
1386
+ case "/admin/list-users":
1387
+ case "/admin/athena-client/list":
1388
+ case "/admin/audit-log/list":
1389
+ case "/admin/email/get":
1390
+ case "/admin/email-failure/list":
1391
+ case "/admin/email-failure/get":
1392
+ case "/admin/email-template/get":
1393
+ case "/admin/email-template/list":
1394
+ case "/admin/email/list":
1395
+ case "/api-key/get":
1396
+ case "/api-key/list":
1397
+ case "/organization/get-full-organization":
1398
+ case "/organization/list":
1399
+ case "/organization/get-invitation":
1400
+ case "/organization/list-invitations":
1401
+ case "/organization/list-user-invitations":
1402
+ case "/organization/list-members":
1403
+ case "/organization/get-active-member":
1404
+ case "/health":
1405
+ case "/ok":
1406
+ case "/error":
1407
+ return "GET";
1408
+ default:
1409
+ return "POST";
1410
+ }
1411
+ }
1412
+ async function callAuthEndpoint(config, context, body, query, options) {
1413
+ const baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl);
1414
+ const url = buildRequestUrl(baseUrl, context.endpoint, query);
1415
+ const headers = buildHeaders2(config, options);
1416
+ const credentials = options?.credentials ?? config.credentials ?? "include";
1417
+ const requestInit = {
1418
+ method: context.method,
1419
+ headers,
1420
+ credentials,
1421
+ signal: options?.signal
1422
+ };
1423
+ if (context.method !== "GET") {
1424
+ requestInit.body = JSON.stringify(body ?? {});
1425
+ }
1426
+ const fetcher = config.fetch ?? globalThis.fetch;
1427
+ if (!fetcher) {
1428
+ const details = toErrorDetails({
1429
+ code: "UNKNOWN_ERROR",
1430
+ message: "No fetch implementation available for auth client",
1431
+ status: 0,
1432
+ endpoint: context.endpoint,
1433
+ method: context.method,
1434
+ hint: "Use Node 18+ or provide `fetch` via createClient(..., { auth: { fetch } }) or createAuthClient({ fetch })"
1435
+ });
1436
+ return {
1437
+ ok: false,
1438
+ status: 0,
1439
+ data: null,
1440
+ error: details.message,
1441
+ errorDetails: details,
1442
+ raw: null
1443
+ };
1444
+ }
1445
+ try {
1446
+ const response = await fetcher(url, requestInit);
1447
+ const rawText = await response.text();
1448
+ const requestId = resolveRequestId2(response.headers);
1449
+ const parsedBody = parseResponseBody2(rawText ?? "", response.headers.get("content-type"));
1450
+ if (parsedBody.parseFailed) {
1451
+ const details = toErrorDetails({
1452
+ code: "INVALID_JSON",
1453
+ message: "Auth server returned malformed JSON",
1454
+ status: response.status,
1455
+ endpoint: context.endpoint,
1456
+ method: context.method,
1457
+ requestId,
1458
+ hint: "Verify the auth endpoint response body is valid JSON.",
1459
+ cause: rawText.slice(0, 300)
1460
+ });
1461
+ return {
1462
+ ok: false,
1463
+ status: response.status,
1464
+ data: null,
1465
+ error: details.message,
1466
+ errorDetails: details,
1467
+ raw: parsedBody.parsed
1468
+ };
1469
+ }
1470
+ const parsed = parsedBody.parsed;
1471
+ if (!response.ok) {
1472
+ const details = toErrorDetails({
1473
+ code: "HTTP_ERROR",
1474
+ message: resolveErrorMessage2(
1475
+ parsed,
1476
+ `Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`
1477
+ ),
1478
+ status: response.status,
1479
+ endpoint: context.endpoint,
1480
+ method: context.method,
1481
+ requestId
1482
+ });
1483
+ return {
1484
+ ok: false,
1485
+ status: response.status,
1486
+ data: null,
1487
+ error: details.message,
1488
+ errorDetails: details,
1489
+ raw: parsed
1490
+ };
1491
+ }
1492
+ return {
1493
+ ok: true,
1494
+ status: response.status,
1495
+ data: parsed ?? null,
1496
+ error: null,
1497
+ errorDetails: null,
1498
+ raw: parsed
1499
+ };
1500
+ } catch (callError) {
1501
+ const message = callError instanceof Error ? callError.message : String(callError);
1502
+ const details = toErrorDetails({
1503
+ code: "NETWORK_ERROR",
1504
+ message: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,
1505
+ status: 0,
1506
+ endpoint: context.endpoint,
1507
+ method: context.method,
1508
+ cause: message,
1509
+ hint: "Check auth server URL, DNS, and network reachability."
1510
+ });
1511
+ return {
1512
+ ok: false,
1513
+ status: 0,
1514
+ data: null,
1515
+ error: details.message,
1516
+ errorDetails: details,
1517
+ raw: null
1518
+ };
1519
+ }
1520
+ }
1521
+ function executePostWithCompatibleInput(config, context, input, options) {
1522
+ const { payload, fetchOptions } = extractFetchOptions(input);
1523
+ const mergedOptions = mergeCallOptions(fetchOptions, options);
1524
+ return callAuthEndpoint(config, context, payload ?? {}, void 0, mergedOptions);
1525
+ }
1526
+ function executePostWithOptionalInput(config, context, input, options) {
1527
+ const { fetchOptions } = extractFetchOptions(input);
1528
+ const mergedOptions = mergeCallOptions(fetchOptions, options);
1529
+ return callAuthEndpoint(config, context, {}, void 0, mergedOptions);
1530
+ }
1531
+ function executeGetWithCompatibleInput(config, context, input, options) {
1532
+ const { fetchOptions } = extractFetchOptions(input);
1533
+ const mergedOptions = mergeCallOptions(fetchOptions, options);
1534
+ return callAuthEndpoint(config, context, void 0, void 0, mergedOptions);
1535
+ }
1536
+ function executeGetWithQueryCompatibleInput(config, context, input, options) {
1537
+ const { payload, fetchOptions } = extractFetchOptions(input);
1538
+ const mergedOptions = mergeCallOptions(fetchOptions, options);
1539
+ const query = payload?.query;
1540
+ return callAuthEndpoint(
1541
+ config,
1542
+ context,
1543
+ void 0,
1544
+ query,
1545
+ mergedOptions
1546
+ );
1547
+ }
1548
+ function createAuthClient(config = {}) {
1549
+ const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl);
1550
+ const resolvedConfig = {
1551
+ ...config,
1552
+ baseUrl: normalizedBaseUrl
1553
+ };
1554
+ const request = (input, options) => {
1555
+ const method = input.method ?? (input.body !== void 0 ? "POST" : inferDefaultMethod(input.endpoint));
1556
+ const mergedOptions = mergeCallOptions(input.fetchOptions, options);
1557
+ return callAuthEndpoint(
1558
+ resolvedConfig,
1559
+ { endpoint: input.endpoint, method },
1560
+ input.body,
1561
+ input.query,
1562
+ mergedOptions
1563
+ );
1564
+ };
1565
+ const postGeneric = (endpoint, input, options) => {
1566
+ const { payload, fetchOptions } = extractFetchOptions(input);
1567
+ return request(
1568
+ {
1569
+ endpoint,
1570
+ method: "POST",
1571
+ body: payload ?? {},
1572
+ fetchOptions
1573
+ },
1574
+ options
1575
+ );
1576
+ };
1577
+ const getGeneric = (endpoint, input, options) => {
1578
+ const { fetchOptions } = extractFetchOptions(input);
1579
+ return request(
1580
+ {
1581
+ endpoint,
1582
+ method: "GET",
1583
+ fetchOptions
1584
+ },
1585
+ options
1586
+ );
1587
+ };
1588
+ const getWithQuery = (endpoint, input, options) => {
1589
+ const { payload, fetchOptions } = extractFetchOptions(input);
1590
+ const query = payload?.query;
1591
+ return request(
1592
+ {
1593
+ endpoint,
1594
+ method: "GET",
1595
+ query,
1596
+ fetchOptions
1597
+ },
1598
+ options
1599
+ );
1600
+ };
1601
+ const listUserEmailsWithFallback = async (input, options) => {
1602
+ const primary = await getWithQuery(
1603
+ "/email/list",
1604
+ input,
1605
+ options
1606
+ );
1607
+ if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== "HTTP_ERROR") {
1608
+ return primary;
1609
+ }
1610
+ return getWithQuery(
1611
+ "/email-list",
1612
+ input,
1613
+ options
1614
+ );
1615
+ };
1616
+ const healthWithFallback = async (input, options) => {
1617
+ const primary = await getGeneric("/health", input, options);
1618
+ if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== "HTTP_ERROR") {
1619
+ return primary;
1620
+ }
1621
+ const fallback = await getGeneric("/ok", input, options);
1622
+ if (!fallback.ok) {
1623
+ return {
1624
+ ...fallback,
1625
+ data: null
1626
+ };
1627
+ }
1628
+ const fallbackStatus = isRecord2(fallback.data) && typeof fallback.data.ok === "boolean" ? fallback.data.ok ? "ok" : "error" : "ok";
1629
+ return {
1630
+ ...fallback,
1631
+ data: {
1632
+ status: fallbackStatus
1633
+ }
1634
+ };
1635
+ };
1636
+ const signOut = (input, options) => executePostWithOptionalInput(
1637
+ resolvedConfig,
1638
+ { endpoint: "/sign-out", method: "POST" },
1639
+ input,
1640
+ options
1641
+ );
1642
+ const revokeSessions = (input, options) => executePostWithOptionalInput(
1643
+ resolvedConfig,
1644
+ { endpoint: "/revoke-sessions", method: "POST" },
1645
+ input,
1646
+ options
1647
+ );
1648
+ const revokeOtherSessions = (input, options) => executePostWithOptionalInput(
1649
+ resolvedConfig,
1650
+ { endpoint: "/revoke-other-sessions", method: "POST" },
1651
+ input,
1652
+ options
1653
+ );
1654
+ const revokeSession = (input, options) => executePostWithCompatibleInput(
1655
+ resolvedConfig,
1656
+ { endpoint: "/revoke-session", method: "POST" },
1657
+ input,
1658
+ options
1659
+ );
1660
+ const deleteUser = (input, options) => {
1661
+ const { payload, fetchOptions } = extractFetchOptions(input);
1662
+ const mergedOptions = mergeCallOptions(fetchOptions, options);
1663
+ return callAuthEndpoint(
1664
+ resolvedConfig,
1665
+ { endpoint: "/delete-user", method: "POST" },
1666
+ payload ?? {},
1667
+ void 0,
1668
+ mergedOptions
1669
+ );
1670
+ };
1671
+ const deleteUserCallback = (input, options) => {
1672
+ const { payload, fetchOptions } = extractFetchOptions(input);
1673
+ const mergedOptions = mergeCallOptions(fetchOptions, options);
1674
+ const query = payload ?? {};
1675
+ return callAuthEndpoint(
1676
+ resolvedConfig,
1677
+ { endpoint: "/delete-user/callback", method: "GET" },
1678
+ void 0,
1679
+ {
1680
+ token: query.token,
1681
+ callbackURL: query.callbackURL
1682
+ },
1683
+ mergedOptions
1684
+ );
1685
+ };
1686
+ const resolveResetPasswordToken = (input, options) => {
1687
+ const { payload, fetchOptions } = extractFetchOptions(input);
1688
+ const mergedOptions = mergeCallOptions(fetchOptions, options);
1689
+ const query = payload;
1690
+ const token = query?.token?.trim();
1691
+ if (!token) {
1692
+ throw new Error("resolveResetPasswordToken requires a non-empty token");
1693
+ }
1694
+ const endpoint = `/reset-password/${encodeURIComponent(token)}`;
1695
+ return callAuthEndpoint(
1696
+ resolvedConfig,
1697
+ { endpoint, method: "GET" },
1698
+ void 0,
1699
+ query?.callbackURL ? { callbackURL: query.callbackURL } : void 0,
1700
+ mergedOptions
1701
+ );
1702
+ };
1703
+ const organization = {
1704
+ create: (input, options) => executePostWithCompatibleInput(
1705
+ resolvedConfig,
1706
+ { endpoint: "/organization/create", method: "POST" },
1707
+ input,
1708
+ options
1709
+ ),
1710
+ update: (input, options) => executePostWithCompatibleInput(
1711
+ resolvedConfig,
1712
+ { endpoint: "/organization/update", method: "POST" },
1713
+ input,
1714
+ options
1715
+ ),
1716
+ delete: (input, options) => executePostWithCompatibleInput(
1717
+ resolvedConfig,
1718
+ { endpoint: "/organization/delete", method: "POST" },
1719
+ input,
1720
+ options
1721
+ ),
1722
+ setActive: (input, options) => executePostWithCompatibleInput(
1723
+ resolvedConfig,
1724
+ { endpoint: "/organization/set-active", method: "POST" },
1725
+ input,
1726
+ options
1727
+ ),
1728
+ list: (input, options) => getGeneric(
1729
+ "/organization/list",
1730
+ input,
1731
+ options
1732
+ ),
1733
+ getFull: (input, options) => executeGetWithQueryCompatibleInput(
1734
+ resolvedConfig,
1735
+ { endpoint: "/organization/get-full-organization", method: "GET" },
1736
+ input,
1737
+ options
1738
+ ),
1739
+ checkSlug: (input, options) => executePostWithCompatibleInput(
1740
+ resolvedConfig,
1741
+ { endpoint: "/organization/check-slug", method: "POST" },
1742
+ input,
1743
+ options
1744
+ ),
1745
+ leave: (input, options) => executePostWithCompatibleInput(
1746
+ resolvedConfig,
1747
+ { endpoint: "/organization/leave", method: "POST" },
1748
+ input,
1749
+ options
1750
+ ),
1751
+ listUserInvitations: (input, options) => executeGetWithQueryCompatibleInput(
1752
+ resolvedConfig,
1753
+ { endpoint: "/organization/list-user-invitations", method: "GET" },
1754
+ input,
1755
+ options
1756
+ ),
1757
+ hasPermission: (input, options) => postGeneric(
1758
+ "/organization/has-permission",
1759
+ input,
1760
+ options
1761
+ ),
1762
+ invitation: {
1763
+ cancel: (input, options) => executePostWithCompatibleInput(
1764
+ resolvedConfig,
1765
+ { endpoint: "/organization/cancel-invitation", method: "POST" },
1766
+ input,
1767
+ options
1768
+ ),
1769
+ accept: (input, options) => executePostWithCompatibleInput(
1770
+ resolvedConfig,
1771
+ { endpoint: "/organization/accept-invitation", method: "POST" },
1772
+ input,
1773
+ options
1774
+ ),
1775
+ get: (input, options) => executeGetWithQueryCompatibleInput(
1776
+ resolvedConfig,
1777
+ { endpoint: "/organization/get-invitation", method: "GET" },
1778
+ input,
1779
+ options
1780
+ ),
1781
+ reject: (input, options) => executePostWithCompatibleInput(
1782
+ resolvedConfig,
1783
+ { endpoint: "/organization/reject-invitation", method: "POST" },
1784
+ input,
1785
+ options
1786
+ ),
1787
+ list: (input, options) => executeGetWithQueryCompatibleInput(
1788
+ resolvedConfig,
1789
+ { endpoint: "/organization/list-invitations", method: "GET" },
1790
+ input,
1791
+ options
1792
+ )
1793
+ },
1794
+ member: {
1795
+ remove: (input, options) => executePostWithCompatibleInput(
1796
+ resolvedConfig,
1797
+ { endpoint: "/organization/remove-member", method: "POST" },
1798
+ input,
1799
+ options
1800
+ ),
1801
+ updateRole: (input, options) => executePostWithCompatibleInput(
1802
+ resolvedConfig,
1803
+ { endpoint: "/organization/update-member-role", method: "POST" },
1804
+ input,
1805
+ options
1806
+ ),
1807
+ invite: (input, options) => executePostWithCompatibleInput(
1808
+ resolvedConfig,
1809
+ { endpoint: "/organization/invite-member", method: "POST" },
1810
+ input,
1811
+ options
1812
+ ),
1813
+ getActive: (input, options) => executeGetWithCompatibleInput(
1814
+ resolvedConfig,
1815
+ { endpoint: "/organization/get-active-member", method: "GET" },
1816
+ input,
1817
+ options
1818
+ ),
1819
+ list: (input, options) => executeGetWithQueryCompatibleInput(
1820
+ resolvedConfig,
1821
+ { endpoint: "/organization/list-members", method: "GET" },
1822
+ input,
1823
+ options
1824
+ )
1825
+ }
1826
+ };
1827
+ const authResetPassword = Object.assign(
1828
+ (input, options) => executePostWithCompatibleInput(
1829
+ resolvedConfig,
1830
+ { endpoint: "/reset-password", method: "POST" },
1831
+ input,
1832
+ options
1833
+ ),
1834
+ {
1835
+ token: resolveResetPasswordToken
1836
+ }
1837
+ );
1838
+ const sessionRevokeBinding = (input, options) => {
1839
+ if (Array.isArray(input)) {
1840
+ if (input.length === 0) {
1841
+ throw new Error("session.revoke requires at least one session token");
1842
+ }
1843
+ if (input.length === 1) {
1844
+ return revokeSession(input[0], options);
1845
+ }
1846
+ return revokeSessions(void 0, options);
1847
+ }
1848
+ const parsed = input;
1849
+ const tokens = Array.isArray(parsed.tokens) ? parsed.tokens.filter((token2) => token2.trim().length > 0) : void 0;
1850
+ if (tokens && tokens.length > 1) {
1851
+ return revokeSessions(
1852
+ parsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : void 0,
1853
+ options
1854
+ );
1855
+ }
1856
+ if (tokens && tokens.length === 1) {
1857
+ return revokeSession(
1858
+ { token: tokens[0], fetchOptions: parsed.fetchOptions },
1859
+ options
1860
+ );
1861
+ }
1862
+ const token = parsed.token?.trim();
1863
+ if (!token) {
1864
+ throw new Error("session.revoke requires a non-empty token or a non-empty token list");
1865
+ }
1866
+ return revokeSession(
1867
+ {
1868
+ token,
1869
+ fetchOptions: parsed.fetchOptions
1870
+ },
1871
+ options
1872
+ );
1873
+ };
1874
+ const adminUserSessionRevokeBinding = (input, options) => {
1875
+ const requireUserId = (userId) => {
1876
+ const trimmed = String(userId ?? "").trim();
1877
+ if (!trimmed) {
1878
+ throw new Error("admin.user.session.revoke requires a non-empty userId");
1879
+ }
1880
+ return trimmed;
1881
+ };
1882
+ const requireSinglePluralUserId = (sessions2) => {
1883
+ const uniqueUserIds = [...new Set(sessions2.map((session) => requireUserId(session.userId)))];
1884
+ if (uniqueUserIds.length !== 1) {
1885
+ throw new Error("admin.user.session.revoke requires the same userId across plural payloads");
1886
+ }
1887
+ return { userId: uniqueUserIds[0] };
1888
+ };
1889
+ if (Array.isArray(input)) {
1890
+ if (input.length === 0) {
1891
+ throw new Error("admin.user.session.revoke requires at least one payload item");
1892
+ }
1893
+ if (input.length === 1) {
1894
+ return postGeneric(
1895
+ "/admin/revoke-user-session",
1896
+ {
1897
+ ...input[0],
1898
+ userId: requireUserId(input[0].userId)
1899
+ },
1900
+ options
1901
+ );
1902
+ }
1903
+ return postGeneric(
1904
+ "/admin/revoke-user-sessions",
1905
+ requireSinglePluralUserId(input),
1906
+ options
1907
+ );
1908
+ }
1909
+ const parsed = input;
1910
+ const sessions = parsed.sessions;
1911
+ if (sessions && sessions.length === 0) {
1912
+ throw new Error("admin.user.session.revoke requires at least one payload item");
1913
+ }
1914
+ if (sessions && sessions.length === 1) {
1915
+ return postGeneric(
1916
+ "/admin/revoke-user-session",
1917
+ {
1918
+ ...sessions[0],
1919
+ userId: requireUserId(sessions[0].userId),
1920
+ fetchOptions: parsed.fetchOptions
1921
+ },
1922
+ options
1923
+ );
1924
+ }
1925
+ if (sessions && sessions.length > 1) {
1926
+ return postGeneric(
1927
+ "/admin/revoke-user-sessions",
1928
+ {
1929
+ ...requireSinglePluralUserId(sessions),
1930
+ fetchOptions: parsed.fetchOptions
1931
+ },
1932
+ options
1933
+ );
1934
+ }
1935
+ const normalizedUserId = requireUserId(parsed.userId);
1936
+ if (!parsed.sessionToken) {
1937
+ return postGeneric(
1938
+ "/admin/revoke-user-sessions",
1939
+ {
1940
+ userId: normalizedUserId,
1941
+ fetchOptions: parsed.fetchOptions
1942
+ },
1943
+ options
1944
+ );
1945
+ }
1946
+ return postGeneric(
1947
+ "/admin/revoke-user-session",
1948
+ {
1949
+ ...parsed,
1950
+ userId: normalizedUserId
1951
+ },
1952
+ options
1953
+ );
1954
+ };
1955
+ const auth = {
1956
+ getSession: (input, options) => getGeneric("/get-session", input, options),
1957
+ signOut,
1958
+ forgetPassword: (input, options) => postGeneric("/forget-password", input, options),
1959
+ resetPassword: authResetPassword,
1960
+ setPassword: (input, options) => postGeneric("/set-password", input, options),
1961
+ verifyEmail: (input, options) => {
1962
+ const queryInput = {
1963
+ query: {
1964
+ token: input.token,
1965
+ callbackURL: input.callbackURL
1966
+ },
1967
+ fetchOptions: input.fetchOptions
1968
+ };
1969
+ return getWithQuery(
1970
+ "/verify-email",
1971
+ queryInput,
1972
+ options
1973
+ );
1974
+ },
1975
+ sendVerificationEmail: (input, options) => postGeneric("/send-verification-email", input, options),
1976
+ changeEmail: (input, options) => postGeneric("/change-email", input, options),
1977
+ changeEmailVerify: (input, options) => getWithQuery("/change-email/verify", input, options),
1978
+ deleteUserVerify: (input, options) => getWithQuery("/delete-user/verify", input, options),
1979
+ changePassword: (input, options) => postGeneric("/change-password", input, options),
1980
+ user: {
1981
+ update: (input, options) => postGeneric("/update-user", input, options),
1982
+ delete: (input, options) => postGeneric("/delete-user", input, options),
1983
+ email: {
1984
+ list: listUserEmailsWithFallback
1985
+ }
1986
+ },
1987
+ session: {
1988
+ list: (input, options) => getGeneric("/list-sessions", input, options),
1989
+ revoke: sessionRevokeBinding,
1990
+ revokeOther: revokeOtherSessions
1991
+ },
1992
+ social: {
1993
+ link: (input, options) => postGeneric("/link-social", input, options)
1994
+ },
1995
+ account: {
1996
+ list: (input, options) => getGeneric("/list-accounts", input, options),
1997
+ unlink: (input, options) => postGeneric("/unlink-account", input, options)
1998
+ },
1999
+ deleteUser: {
2000
+ callback: deleteUserCallback
2001
+ },
2002
+ refreshToken: (input, options) => postGeneric("/refresh-token", input, options),
2003
+ getAccessToken: (input, options) => postGeneric("/get-access-token", input, options),
2004
+ health: healthWithFallback,
2005
+ ok: (input, options) => getGeneric("/ok", input, options),
2006
+ error: (input, options) => getGeneric("/error", input, options),
2007
+ twoFactor: {
2008
+ getTotpUri: (input, options) => postGeneric("/two-factor/get-totp-uri", input, options),
2009
+ verifyTotp: (input, options) => postGeneric("/two-factor/verify-totp", input, options),
2010
+ sendOtp: (input, options) => postGeneric("/two-factor/send-otp", input, options),
2011
+ verifyOtp: (input, options) => postGeneric("/two-factor/verify-otp", input, options),
2012
+ verifyBackupCode: (input, options) => postGeneric("/two-factor/verify-backup-code", input, options),
2013
+ generateBackupCodes: (input, options) => executePostWithCompatibleInput(
2014
+ resolvedConfig,
2015
+ { endpoint: "/two-factor/generate-backup-codes", method: "POST" },
2016
+ input,
2017
+ options
2018
+ ),
2019
+ enable: (input, options) => postGeneric("/two-factor/enable", input, options),
2020
+ disable: (input, options) => postGeneric("/two-factor/disable", input, options)
2021
+ },
2022
+ passkey: {
2023
+ generateRegisterOptions: (input, options) => getGeneric("/passkey/generate-register-options", input, options),
2024
+ generateAuthenticateOptions: (input, options) => postGeneric("/passkey/generate-authenticate-options", input, options),
2025
+ verifyRegistration: (input, options) => postGeneric("/passkey/verify-registration", input, options),
2026
+ verifyAuthentication: (input, options) => postGeneric("/passkey/verify-authentication", input, options),
2027
+ listUserPasskeys: (input, options) => getGeneric("/passkey/list-user-passkeys", input, options),
2028
+ deletePasskey: (input, options) => postGeneric("/passkey/delete-passkey", input, options),
2029
+ updatePasskey: (input, options) => postGeneric("/passkey/update-passkey", input, options),
2030
+ getRelatedOrigins: (input, options) => getGeneric("/.well-known/webauthn", input, options)
2031
+ },
2032
+ admin: {
2033
+ role: {
2034
+ set: (input, options) => postGeneric("/admin/set-role", input, options)
2035
+ },
2036
+ user: {
2037
+ list: (input, options) => getWithQuery("/admin/list-users", input, options),
2038
+ create: (input, options) => postGeneric("/admin/create-user", input, options),
2039
+ unban: (input, options) => postGeneric("/admin/unban-user", input, options),
2040
+ ban: (input, options) => postGeneric("/admin/ban-user", input, options),
2041
+ impersonate: (input, options) => postGeneric("/admin/impersonate-user", input, options),
2042
+ stopImpersonating: (input, options) => postGeneric("/admin/stop-impersonating", input, options),
2043
+ remove: (input, options) => postGeneric("/admin/remove-user", input, options),
2044
+ setPassword: (input, options) => postGeneric("/admin/set-user-password", input, options),
2045
+ session: {
2046
+ list: (input, options) => postGeneric("/admin/list-user-sessions", input, options),
2047
+ revoke: adminUserSessionRevokeBinding
2048
+ }
2049
+ },
2050
+ hasPermission: (input, options) => postGeneric("/admin/has-permission", input, options),
2051
+ apiKey: {
2052
+ create: (input, options) => postGeneric("/admin/api-key/create", input, options)
2053
+ },
2054
+ athenaClient: {
2055
+ create: (input, options) => postGeneric("/admin/athena-client/create", input, options),
2056
+ list: (input, options) => getWithQuery("/admin/athena-client/list", input, options)
2057
+ },
2058
+ auditLog: {
2059
+ list: (input, options) => getWithQuery("/admin/audit-log/list", input, options)
2060
+ },
2061
+ email: {
2062
+ list: (input, options) => getWithQuery("/admin/email/list", input, options),
2063
+ get: (input, options) => getWithQuery("/admin/email/get", input, options),
2064
+ create: (input, options) => postGeneric("/admin/email/create", input, options),
2065
+ update: (input, options) => postGeneric("/admin/email/update", input, options),
2066
+ delete: (input, options) => postGeneric("/admin/email/delete", input, options),
2067
+ failure: {
2068
+ list: (input, options) => getWithQuery("/admin/email-failure/list", input, options),
2069
+ get: (input, options) => getWithQuery("/admin/email-failure/get", input, options),
2070
+ create: (input, options) => postGeneric("/admin/email-failure/create", input, options),
2071
+ update: (input, options) => postGeneric("/admin/email-failure/update", input, options),
2072
+ delete: (input, options) => postGeneric("/admin/email-failure/delete", input, options)
2073
+ },
2074
+ template: {
2075
+ list: (input, options) => getWithQuery("/admin/email-template/list", input, options),
2076
+ get: (input, options) => getWithQuery("/admin/email-template/get", input, options),
2077
+ create: (input, options) => postGeneric("/admin/email-template/create", input, options),
2078
+ update: (input, options) => postGeneric("/admin/email-template/update", input, options),
2079
+ delete: (input, options) => postGeneric("/admin/email-template/delete", input, options)
2080
+ }
2081
+ },
2082
+ emailTemplate: {
2083
+ get: (input, options) => getWithQuery("/admin/email-template/get", input, options),
2084
+ create: (input, options) => postGeneric("/admin/email-template/create", input, options),
2085
+ delete: (input, options) => postGeneric("/admin/email-template/delete", input, options),
2086
+ list: (input, options) => getWithQuery("/admin/email-template/list", input, options),
2087
+ update: (input, options) => postGeneric("/admin/email-template/update", input, options)
2088
+ }
2089
+ },
2090
+ apiKey: {
2091
+ create: (input, options) => postGeneric("/api-key/create", input, options),
2092
+ get: (input, options) => getWithQuery("/api-key/get", input, options),
2093
+ update: (input, options) => postGeneric("/api-key/update", input, options),
2094
+ delete: (input, options) => postGeneric("/api-key/delete", input, options),
2095
+ list: (input, options) => getWithQuery("/api-key/list", input, options),
2096
+ verify: (input, options) => postGeneric("/api-key/verify", input, options),
2097
+ deleteAllExpired: (input, options) => executePostWithOptionalInput(
2098
+ resolvedConfig,
2099
+ { endpoint: "/api-key/delete-all-expired-api-keys", method: "POST" },
2100
+ input,
2101
+ options
2102
+ )
2103
+ },
2104
+ signIn: {
2105
+ email: (input, options) => postGeneric("/sign-in/email", input, options),
2106
+ username: (input, options) => postGeneric("/sign-in/username", input, options),
2107
+ social: (input, options) => postGeneric("/sign-in/social", input, options)
2108
+ },
2109
+ signUp: {
2110
+ email: (input, options) => postGeneric("/sign-up/email", input, options)
2111
+ },
2112
+ organization,
2113
+ callback: {
2114
+ provider: (input, options) => {
2115
+ const { payload, fetchOptions } = extractFetchOptions(input);
2116
+ const parsed = payload;
2117
+ const provider = String(parsed?.provider ?? "").trim();
2118
+ if (!provider) {
2119
+ throw new Error("callback.provider requires a non-empty provider value");
2120
+ }
2121
+ const code = String(parsed?.code ?? "").trim();
2122
+ const state = String(parsed?.state ?? "").trim();
2123
+ if (!code || !state) {
2124
+ throw new Error("callback.provider requires non-empty code and state values");
2125
+ }
2126
+ const endpoint = `/callback/${encodeURIComponent(provider)}`;
2127
+ return request({
2128
+ endpoint,
2129
+ method: "GET",
2130
+ query: {
2131
+ code,
2132
+ state
2133
+ },
2134
+ fetchOptions
2135
+ }, options);
2136
+ }
2137
+ }
2138
+ };
2139
+ return {
2140
+ baseUrl: normalizedBaseUrl,
2141
+ request,
2142
+ signIn: {
2143
+ email: (input, options) => executePostWithCompatibleInput(
2144
+ resolvedConfig,
2145
+ { endpoint: "/sign-in/email", method: "POST" },
2146
+ input,
2147
+ options
2148
+ ),
2149
+ username: (input, options) => executePostWithCompatibleInput(
2150
+ resolvedConfig,
2151
+ { endpoint: "/sign-in/username", method: "POST" },
2152
+ input,
2153
+ options
2154
+ ),
2155
+ social: (input, options) => executePostWithCompatibleInput(
2156
+ resolvedConfig,
2157
+ { endpoint: "/sign-in/social", method: "POST" },
2158
+ input,
2159
+ options
2160
+ )
2161
+ },
2162
+ signUp: {
2163
+ email: (input, options) => executePostWithCompatibleInput(
2164
+ resolvedConfig,
2165
+ { endpoint: "/sign-up/email", method: "POST" },
2166
+ input,
2167
+ options
2168
+ )
2169
+ },
2170
+ signOut,
2171
+ logout: signOut,
2172
+ getSession: (input, options) => executeGetWithCompatibleInput(
2173
+ resolvedConfig,
2174
+ { endpoint: "/get-session", method: "GET" },
2175
+ input,
2176
+ options
2177
+ ),
2178
+ listSessions: (input, options) => executeGetWithCompatibleInput(
2179
+ resolvedConfig,
2180
+ { endpoint: "/list-sessions", method: "GET" },
2181
+ input,
2182
+ options
2183
+ ),
2184
+ revokeSession,
2185
+ clearSession: revokeSession,
2186
+ revokeSessions,
2187
+ clearSessions: revokeSessions,
2188
+ revokeOtherSessions,
2189
+ clearOtherSessions: revokeOtherSessions,
2190
+ forgetPassword: (input, options) => executePostWithCompatibleInput(
2191
+ resolvedConfig,
2192
+ { endpoint: "/forget-password", method: "POST" },
2193
+ input,
2194
+ options
2195
+ ),
2196
+ resetPassword: (input, options) => executePostWithCompatibleInput(
2197
+ resolvedConfig,
2198
+ { endpoint: "/reset-password", method: "POST" },
2199
+ input,
2200
+ options
2201
+ ),
2202
+ resolveResetPasswordToken,
2203
+ verifyEmail: (input, options) => {
2204
+ const { payload, fetchOptions } = extractFetchOptions(input);
2205
+ const mergedOptions = mergeCallOptions(fetchOptions, options);
2206
+ const query = payload;
2207
+ return callAuthEndpoint(
2208
+ resolvedConfig,
2209
+ { endpoint: "/verify-email", method: "GET" },
2210
+ void 0,
2211
+ query ? {
2212
+ token: query.token,
2213
+ callbackURL: query.callbackURL
2214
+ } : void 0,
2215
+ mergedOptions
2216
+ );
2217
+ },
2218
+ sendVerificationEmail: (input, options) => executePostWithCompatibleInput(
2219
+ resolvedConfig,
2220
+ { endpoint: "/send-verification-email", method: "POST" },
2221
+ input,
2222
+ options
2223
+ ),
2224
+ changeEmail: (input, options) => executePostWithCompatibleInput(
2225
+ resolvedConfig,
2226
+ { endpoint: "/change-email", method: "POST" },
2227
+ input,
2228
+ options
2229
+ ),
2230
+ changePassword: (input, options) => executePostWithCompatibleInput(
2231
+ resolvedConfig,
2232
+ { endpoint: "/change-password", method: "POST" },
2233
+ input,
2234
+ options
2235
+ ),
2236
+ updateUser: (input, options) => executePostWithCompatibleInput(
2237
+ resolvedConfig,
2238
+ { endpoint: "/update-user", method: "POST" },
2239
+ input,
2240
+ options
2241
+ ),
2242
+ deleteUser,
2243
+ deleteUserCallback,
2244
+ linkSocial: (input, options) => executePostWithCompatibleInput(
2245
+ resolvedConfig,
2246
+ { endpoint: "/link-social", method: "POST" },
2247
+ input,
2248
+ options
2249
+ ),
2250
+ listAccounts: (input, options) => executeGetWithCompatibleInput(
2251
+ resolvedConfig,
2252
+ { endpoint: "/list-accounts", method: "GET" },
2253
+ input,
2254
+ options
2255
+ ),
2256
+ unlinkAccount: (input, options) => executePostWithCompatibleInput(
2257
+ resolvedConfig,
2258
+ { endpoint: "/unlink-account", method: "POST" },
2259
+ input,
2260
+ options
2261
+ ),
2262
+ refreshToken: (input, options) => executePostWithCompatibleInput(
2263
+ resolvedConfig,
2264
+ { endpoint: "/refresh-token", method: "POST" },
2265
+ input,
2266
+ options
2267
+ ),
2268
+ getAccessToken: (input, options) => executePostWithCompatibleInput(
2269
+ resolvedConfig,
2270
+ { endpoint: "/get-access-token", method: "POST" },
2271
+ input,
2272
+ options
2273
+ ),
2274
+ organization,
2275
+ auth
2276
+ };
2277
+ }
2278
+
1201
2279
  // src/client.ts
1202
2280
  var DEFAULT_COLUMNS = "*";
1203
2281
  var UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
@@ -1229,6 +2307,12 @@ function mergeOptions(...options) {
1229
2307
  return { ...acc, ...next };
1230
2308
  }, void 0);
1231
2309
  }
2310
+ function asAthenaJsonObject(value) {
2311
+ return value;
2312
+ }
2313
+ function asAthenaJsonObjectArray(values) {
2314
+ return values;
2315
+ }
1232
2316
  function createMutationQuery(executor, defaultColumns = DEFAULT_COLUMNS) {
1233
2317
  let selectedColumns = defaultColumns === null ? void 0 : defaultColumns;
1234
2318
  let selectedOptions;
@@ -1317,6 +2401,22 @@ function buildSelectColumnsClause(columns) {
1317
2401
  }
1318
2402
  return quoteSelectColumnsExpression(columns);
1319
2403
  }
2404
+ function resolveTableNameForCall(tableName, schema) {
2405
+ if (!schema) return tableName;
2406
+ const normalizedSchema = schema.trim();
2407
+ if (!normalizedSchema) {
2408
+ throw new Error("schema option must be a non-empty string");
2409
+ }
2410
+ if (tableName.includes(".")) {
2411
+ if (tableName.startsWith(`${normalizedSchema}.`)) {
2412
+ return tableName;
2413
+ }
2414
+ throw new Error(
2415
+ `schema option "${normalizedSchema}" conflicts with schema-qualified table "${tableName}"`
2416
+ );
2417
+ }
2418
+ return `${normalizedSchema}.${tableName}`;
2419
+ }
1320
2420
  function conditionToSqlClause(condition) {
1321
2421
  if (!condition.column) return null;
1322
2422
  const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast);
@@ -1396,23 +2496,27 @@ function buildTypedSelectQuery(input) {
1396
2496
  function createFilterMethods(state, addCondition, self) {
1397
2497
  return {
1398
2498
  eq(column, value) {
1399
- if (shouldUseUuidTextComparison(column, value)) {
1400
- addCondition("eq", column, value, { columnCast: "text" });
2499
+ const columnName = String(column);
2500
+ if (shouldUseUuidTextComparison(columnName, value)) {
2501
+ addCondition("eq", columnName, value, { columnCast: "text" });
1401
2502
  } else {
1402
- addCondition("eq", column, value);
2503
+ addCondition("eq", columnName, value);
1403
2504
  }
1404
2505
  return self;
1405
2506
  },
1406
2507
  eqCast(column, value, cast) {
1407
- addCondition("eq", column, value, { valueCast: cast });
2508
+ addCondition("eq", String(column), value, { valueCast: cast });
1408
2509
  return self;
1409
2510
  },
1410
2511
  eqUuid(column, value) {
1411
- addCondition("eq", column, value, { valueCast: "uuid" });
2512
+ addCondition("eq", String(column), value, { valueCast: "uuid" });
1412
2513
  return self;
1413
2514
  },
1414
2515
  match(filters) {
1415
2516
  Object.entries(filters).forEach(([column, value]) => {
2517
+ if (value === void 0) {
2518
+ return;
2519
+ }
1416
2520
  if (shouldUseUuidTextComparison(column, value)) {
1417
2521
  addCondition("eq", column, value, { columnCast: "text" });
1418
2522
  } else {
@@ -1448,60 +2552,61 @@ function createFilterMethods(state, addCondition, self) {
1448
2552
  },
1449
2553
  order(column, options) {
1450
2554
  state.order = {
1451
- field: column,
2555
+ field: String(column),
1452
2556
  direction: options?.ascending === false ? "descending" : "ascending"
1453
2557
  };
1454
2558
  return self;
1455
2559
  },
1456
2560
  gt(column, value) {
1457
- addCondition("gt", column, value);
2561
+ addCondition("gt", String(column), value);
1458
2562
  return self;
1459
2563
  },
1460
2564
  gte(column, value) {
1461
- addCondition("gte", column, value);
2565
+ addCondition("gte", String(column), value);
1462
2566
  return self;
1463
2567
  },
1464
2568
  lt(column, value) {
1465
- addCondition("lt", column, value);
2569
+ addCondition("lt", String(column), value);
1466
2570
  return self;
1467
2571
  },
1468
2572
  lte(column, value) {
1469
- addCondition("lte", column, value);
2573
+ addCondition("lte", String(column), value);
1470
2574
  return self;
1471
2575
  },
1472
2576
  neq(column, value) {
1473
- addCondition("neq", column, value);
2577
+ addCondition("neq", String(column), value);
1474
2578
  return self;
1475
2579
  },
1476
2580
  like(column, value) {
1477
- addCondition("like", column, value);
2581
+ addCondition("like", String(column), value);
1478
2582
  return self;
1479
2583
  },
1480
2584
  ilike(column, value) {
1481
- addCondition("ilike", column, value);
2585
+ addCondition("ilike", String(column), value);
1482
2586
  return self;
1483
2587
  },
1484
2588
  is(column, value) {
1485
- addCondition("is", column, value);
2589
+ addCondition("is", String(column), value);
1486
2590
  return self;
1487
2591
  },
1488
2592
  in(column, values) {
1489
- addCondition("in", column, values);
2593
+ addCondition("in", String(column), values);
1490
2594
  return self;
1491
2595
  },
1492
2596
  contains(column, values) {
1493
- addCondition("contains", column, values);
2597
+ addCondition("contains", String(column), values);
1494
2598
  return self;
1495
2599
  },
1496
2600
  containedBy(column, values) {
1497
- addCondition("containedBy", column, values);
2601
+ addCondition("containedBy", String(column), values);
1498
2602
  return self;
1499
2603
  },
1500
2604
  not(columnOrExpression, operator, value) {
2605
+ const expression = String(columnOrExpression);
1501
2606
  if (operator != null && value !== void 0) {
1502
- addCondition("not", void 0, `${columnOrExpression}.${operator}.${stringifyFilterValue(value)}`);
2607
+ addCondition("not", void 0, `${expression}.${operator}.${stringifyFilterValue(value)}`);
1503
2608
  } else {
1504
- addCondition("not", void 0, columnOrExpression);
2609
+ addCondition("not", void 0, expression);
1505
2610
  }
1506
2611
  return self;
1507
2612
  },
@@ -1671,15 +2776,20 @@ function createTableBuilder(tableName, client) {
1671
2776
  state.conditions.push(condition);
1672
2777
  };
1673
2778
  const builder = {};
1674
- const filterMethods = createFilterMethods(state, addCondition, builder);
2779
+ const filterMethods = createFilterMethods(
2780
+ state,
2781
+ addCondition,
2782
+ builder
2783
+ );
1675
2784
  const runSelect = async (columns = DEFAULT_COLUMNS, options) => {
2785
+ const resolvedTableName = resolveTableNameForCall(tableName, options?.schema);
1676
2786
  const conditions = state.conditions.length ? state.conditions.map((condition) => ({ ...condition })) : void 0;
1677
2787
  const hasTypedEqualityComparison = conditions?.some(
1678
2788
  (condition) => condition.operator === "eq" && (condition.value_cast !== void 0 || condition.column_cast !== void 0)
1679
2789
  ) ?? false;
1680
2790
  if (hasTypedEqualityComparison && !options?.head && !options?.count && conditions) {
1681
2791
  const query = buildTypedSelectQuery({
1682
- tableName,
2792
+ tableName: resolvedTableName,
1683
2793
  columns,
1684
2794
  conditions,
1685
2795
  limit: state.limit,
@@ -1694,7 +2804,7 @@ function createTableBuilder(tableName, client) {
1694
2804
  }
1695
2805
  }
1696
2806
  const payload = {
1697
- table_name: tableName,
2807
+ table_name: resolvedTableName,
1698
2808
  columns,
1699
2809
  conditions,
1700
2810
  limit: state.limit,
@@ -1751,9 +2861,10 @@ function createTableBuilder(tableName, client) {
1751
2861
  if (Array.isArray(values)) {
1752
2862
  const executeInsertMany = async (columns, selectOptions) => {
1753
2863
  const mergedOptions = mergeOptions(options, selectOptions);
2864
+ const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema);
1754
2865
  const payload = {
1755
- table_name: tableName,
1756
- insert_body: values
2866
+ table_name: resolvedTableName,
2867
+ insert_body: asAthenaJsonObjectArray(values)
1757
2868
  };
1758
2869
  if (columns) payload.columns = columns;
1759
2870
  if (mergedOptions?.count) payload.count = mergedOptions.count;
@@ -1768,9 +2879,10 @@ function createTableBuilder(tableName, client) {
1768
2879
  }
1769
2880
  const executeInsertOne = async (columns, selectOptions) => {
1770
2881
  const mergedOptions = mergeOptions(options, selectOptions);
2882
+ const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema);
1771
2883
  const payload = {
1772
- table_name: tableName,
1773
- insert_body: values
2884
+ table_name: resolvedTableName,
2885
+ insert_body: asAthenaJsonObject(values)
1774
2886
  };
1775
2887
  if (columns) payload.columns = columns;
1776
2888
  if (mergedOptions?.count) payload.count = mergedOptions.count;
@@ -1787,10 +2899,11 @@ function createTableBuilder(tableName, client) {
1787
2899
  if (Array.isArray(values)) {
1788
2900
  const executeUpsertMany = async (columns, selectOptions) => {
1789
2901
  const mergedOptions = mergeOptions(options, selectOptions);
2902
+ const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema);
1790
2903
  const payload = {
1791
- table_name: tableName,
1792
- insert_body: values,
1793
- update_body: options?.updateBody ? options.updateBody : void 0
2904
+ table_name: resolvedTableName,
2905
+ insert_body: asAthenaJsonObjectArray(values),
2906
+ update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : void 0
1794
2907
  };
1795
2908
  if (columns) payload.columns = columns;
1796
2909
  if (options?.onConflict) payload.on_conflict = options.onConflict;
@@ -1806,10 +2919,11 @@ function createTableBuilder(tableName, client) {
1806
2919
  }
1807
2920
  const executeUpsertOne = async (columns, selectOptions) => {
1808
2921
  const mergedOptions = mergeOptions(options, selectOptions);
2922
+ const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema);
1809
2923
  const payload = {
1810
- table_name: tableName,
1811
- insert_body: values,
1812
- update_body: options?.updateBody ? options.updateBody : void 0
2924
+ table_name: resolvedTableName,
2925
+ insert_body: asAthenaJsonObject(values),
2926
+ update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : void 0
1813
2927
  };
1814
2928
  if (columns) payload.columns = columns;
1815
2929
  if (options?.onConflict) payload.on_conflict = options.onConflict;
@@ -1827,9 +2941,10 @@ function createTableBuilder(tableName, client) {
1827
2941
  const executeUpdate = async (columns, selectOptions) => {
1828
2942
  const filters = state.conditions.length ? [...state.conditions] : void 0;
1829
2943
  const mergedOptions = mergeOptions(options, selectOptions);
2944
+ const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema);
1830
2945
  const payload = {
1831
- table_name: tableName,
1832
- set: values,
2946
+ table_name: resolvedTableName,
2947
+ set: asAthenaJsonObject(values),
1833
2948
  conditions: filters,
1834
2949
  strip_nulls: mergedOptions?.stripNulls ?? true
1835
2950
  };
@@ -1855,8 +2970,9 @@ function createTableBuilder(tableName, client) {
1855
2970
  }
1856
2971
  const executeDelete = async (columns, selectOptions) => {
1857
2972
  const mergedOptions = mergeOptions(options, selectOptions);
2973
+ const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema);
1858
2974
  const payload = {
1859
- table_name: tableName,
2975
+ table_name: resolvedTableName,
1860
2976
  resource_id: resourceId,
1861
2977
  conditions: filters
1862
2978
  };
@@ -1898,6 +3014,7 @@ function createClientFromConfig(config) {
1898
3014
  backend: config.backend,
1899
3015
  headers: config.headers
1900
3016
  });
3017
+ const auth = createAuthClient(config.auth);
1901
3018
  return {
1902
3019
  from(table) {
1903
3020
  return createTableBuilder(table, gateway);
@@ -1914,7 +3031,8 @@ function createClientFromConfig(config) {
1914
3031
  gateway
1915
3032
  );
1916
3033
  },
1917
- query: createQueryBuilder(gateway)
3034
+ query: createQueryBuilder(gateway),
3035
+ auth: auth.auth
1918
3036
  };
1919
3037
  }
1920
3038
  var DEFAULT_BACKEND = { type: "athena" };
@@ -1988,7 +3106,11 @@ function createClient(url, apiKey, options) {
1988
3106
  const b = AthenaClient.builder().url(url).key(apiKey).backend(toBackendConfig(options?.backend));
1989
3107
  if (options?.client) b.client(options.client);
1990
3108
  if (options?.headers && Object.keys(options.headers).length > 0) b.headers(options.headers);
1991
- return b.build();
3109
+ const client = b.build();
3110
+ if (options?.auth) {
3111
+ client.auth = createAuthClient(options.auth).auth;
3112
+ }
3113
+ return client;
1992
3114
  }
1993
3115
 
1994
3116
  // src/schema/postgres-introspection-core.ts