@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/README.md +63 -53
- package/dist/cli/index.cjs +1224 -102
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +2 -2
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +1224 -102
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +1832 -1138
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +63 -293
- package/dist/index.d.ts +63 -293
- package/dist/index.js +1829 -1139
- package/dist/index.js.map +1 -1
- package/dist/model-form-CVOtC8jq.d.ts +1284 -0
- package/dist/model-form-hXkvHS_3.d.cts +1284 -0
- package/dist/pipeline-C-cN0ACi.d.cts +164 -0
- package/dist/pipeline-CQgV-Yfo.d.ts +164 -0
- package/dist/react.cjs +157 -0
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +38 -4
- package/dist/react.d.ts +38 -4
- package/dist/react.js +154 -1
- package/dist/react.js.map +1 -1
- package/dist/types-BnzoaNRC.d.cts +380 -0
- package/dist/types-BnzoaNRC.d.ts +380 -0
- package/package.json +3 -3
- package/dist/errors-BJGgjHcI.d.cts +0 -31
- package/dist/errors-Bcf5Sftv.d.ts +0 -31
- package/dist/pipeline-BsKuBqmE.d.cts +0 -343
- package/dist/pipeline-xQSjGbqF.d.ts +0 -343
- package/dist/types-wPA1Z4vQ.d.cts +0 -195
- package/dist/types-wPA1Z4vQ.d.ts +0 -195
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
|
-
|
|
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
|
-
|
|
1400
|
-
|
|
2499
|
+
const columnName = String(column);
|
|
2500
|
+
if (shouldUseUuidTextComparison(columnName, value)) {
|
|
2501
|
+
addCondition("eq", columnName, value, { columnCast: "text" });
|
|
1401
2502
|
} else {
|
|
1402
|
-
addCondition("eq",
|
|
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, `${
|
|
2607
|
+
addCondition("not", void 0, `${expression}.${operator}.${stringifyFilterValue(value)}`);
|
|
1503
2608
|
} else {
|
|
1504
|
-
addCondition("not", void 0,
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|