@xylex-group/athena 2.4.0 → 2.4.1
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 +73 -2
- package/dist/browser.cjs +331 -100
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +3 -3
- package/dist/browser.d.ts +3 -3
- package/dist/browser.js +331 -100
- package/dist/browser.js.map +1 -1
- package/dist/cli/index.cjs +377 -92
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +377 -92
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +331 -100
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +331 -100
- package/dist/index.js.map +1 -1
- package/dist/{model-form-GzTqhEzM.d.cts → model-form-4LPnOPAF.d.cts} +8 -4
- package/dist/{model-form-C0FAbOaf.d.ts → model-form-CO4-LmNC.d.ts} +8 -4
- package/dist/{react-email-CQJq92zQ.d.cts → react-email-6mOyxBo4.d.cts} +42 -8
- package/dist/{react-email-BuApZuyG.d.ts → react-email-Buhcpglm.d.ts} +42 -8
- package/dist/react.cjs +84 -4
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +84 -4
- package/dist/react.js.map +1 -1
- package/dist/utils.cjs +131 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +42 -1
- package/dist/utils.d.ts +42 -1
- package/dist/utils.js +117 -1
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.cjs
CHANGED
|
@@ -663,6 +663,54 @@ function normalizeAthenaError(resultOrError, context) {
|
|
|
663
663
|
raw: resultOrError
|
|
664
664
|
};
|
|
665
665
|
}
|
|
666
|
+
function defaultShouldRetry(error) {
|
|
667
|
+
const normalized = normalizeAthenaError(error);
|
|
668
|
+
return normalized.kind === "transient" || normalized.kind === "rate_limit";
|
|
669
|
+
}
|
|
670
|
+
function computeDelayMs(attempt, error, config) {
|
|
671
|
+
const baseDelay = config.baseDelayMs;
|
|
672
|
+
const rawDelay = typeof config.backoff === "function" ? config.backoff(attempt, error) : config.backoff === "linear" ? baseDelay * attempt : baseDelay * Math.pow(2, attempt - 1);
|
|
673
|
+
const safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0;
|
|
674
|
+
const clamped = Math.min(config.maxDelayMs, safeDelay);
|
|
675
|
+
const jitterFactor = typeof config.jitter === "number" ? Math.max(0, Math.min(1, config.jitter)) : config.jitter ? 0.2 : 0;
|
|
676
|
+
if (!jitterFactor) return clamped;
|
|
677
|
+
const deviation = clamped * jitterFactor;
|
|
678
|
+
const offset = (Math.random() * 2 - 1) * deviation;
|
|
679
|
+
return Math.max(0, clamped + offset);
|
|
680
|
+
}
|
|
681
|
+
function sleep(ms) {
|
|
682
|
+
if (ms <= 0) return Promise.resolve();
|
|
683
|
+
return new Promise((resolve3) => {
|
|
684
|
+
setTimeout(resolve3, ms);
|
|
685
|
+
});
|
|
686
|
+
}
|
|
687
|
+
async function withRetry(config, fn) {
|
|
688
|
+
const retries = Math.max(0, Math.trunc(config.retries));
|
|
689
|
+
const shouldRetry = config.shouldRetry ?? defaultShouldRetry;
|
|
690
|
+
const resolvedConfig = {
|
|
691
|
+
baseDelayMs: config.baseDelayMs ?? 100,
|
|
692
|
+
maxDelayMs: config.maxDelayMs ?? 1e4,
|
|
693
|
+
backoff: config.backoff ?? "exponential",
|
|
694
|
+
jitter: config.jitter ?? false
|
|
695
|
+
};
|
|
696
|
+
for (let attempts = 0; attempts <= retries; attempts += 1) {
|
|
697
|
+
try {
|
|
698
|
+
return await fn();
|
|
699
|
+
} catch (error) {
|
|
700
|
+
if (attempts >= retries) {
|
|
701
|
+
throw error;
|
|
702
|
+
}
|
|
703
|
+
const currentAttempt = attempts + 1;
|
|
704
|
+
const retry = await shouldRetry(error, currentAttempt);
|
|
705
|
+
if (!retry) {
|
|
706
|
+
throw error;
|
|
707
|
+
}
|
|
708
|
+
const delay = computeDelayMs(currentAttempt, error, resolvedConfig);
|
|
709
|
+
await sleep(delay);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
throw new Error("withRetry reached an unexpected state");
|
|
713
|
+
}
|
|
666
714
|
|
|
667
715
|
// src/generator/schema-selection.ts
|
|
668
716
|
var DEFAULT_POSTGRES_SCHEMAS = ["public"];
|
|
@@ -1430,12 +1478,47 @@ function buildAthenaGatewayUrl(baseUrl, path) {
|
|
|
1430
1478
|
return `${baseUrl}${path}`;
|
|
1431
1479
|
}
|
|
1432
1480
|
|
|
1481
|
+
// src/cookies/cookie-utils.ts
|
|
1482
|
+
var SECURE_COOKIE_PREFIX = "__Secure-";
|
|
1483
|
+
function parseCookies(cookieHeader) {
|
|
1484
|
+
const cookies = cookieHeader.split("; ");
|
|
1485
|
+
const cookieMap = /* @__PURE__ */ new Map();
|
|
1486
|
+
cookies.forEach((cookie) => {
|
|
1487
|
+
const [name, value] = cookie.split(/=(.*)/s);
|
|
1488
|
+
cookieMap.set(name, value);
|
|
1489
|
+
});
|
|
1490
|
+
return cookieMap;
|
|
1491
|
+
}
|
|
1492
|
+
var getSessionCookie = (request, config) => {
|
|
1493
|
+
const cookies = (request instanceof Headers || !("headers" in request) ? request : request.headers).get("cookie");
|
|
1494
|
+
if (!cookies) {
|
|
1495
|
+
return null;
|
|
1496
|
+
}
|
|
1497
|
+
const { cookieName = "session_token", cookiePrefix = "athena-auth" } = {};
|
|
1498
|
+
const parsedCookie = parseCookies(cookies);
|
|
1499
|
+
const getCookie = (name) => parsedCookie.get(name) || parsedCookie.get(`${SECURE_COOKIE_PREFIX}${name}`);
|
|
1500
|
+
const sessionToken = getCookie(`${cookiePrefix}.${cookieName}`) || getCookie(`${cookiePrefix}-${cookieName}`);
|
|
1501
|
+
if (sessionToken) {
|
|
1502
|
+
return sessionToken;
|
|
1503
|
+
}
|
|
1504
|
+
return null;
|
|
1505
|
+
};
|
|
1506
|
+
|
|
1507
|
+
// package.json
|
|
1508
|
+
var package_default = {
|
|
1509
|
+
version: "2.4.1"
|
|
1510
|
+
};
|
|
1511
|
+
|
|
1512
|
+
// src/sdk-version.ts
|
|
1513
|
+
var PACKAGE_VERSION = package_default.version;
|
|
1514
|
+
function buildSdkHeaderValue(sdkName) {
|
|
1515
|
+
return `${sdkName} ${PACKAGE_VERSION}`;
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1433
1518
|
// src/gateway/client.ts
|
|
1434
1519
|
var DEFAULT_CLIENT = "railway_direct";
|
|
1435
|
-
var FALLBACK_SDK_VERSION = "1.3.0";
|
|
1436
1520
|
var SDK_NAME = "xylex-group/athena";
|
|
1437
|
-
var
|
|
1438
|
-
var SDK_HEADER_VALUE = `${SDK_NAME} ${SDK_VERSION}`;
|
|
1521
|
+
var SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);
|
|
1439
1522
|
function parseResponseBody(rawText, contentType) {
|
|
1440
1523
|
if (!rawText) {
|
|
1441
1524
|
return { parsed: null, parseFailed: false };
|
|
@@ -1454,6 +1537,37 @@ function parseResponseBody(rawText, contentType) {
|
|
|
1454
1537
|
function normalizeHeaderValue(value) {
|
|
1455
1538
|
return value ? value : void 0;
|
|
1456
1539
|
}
|
|
1540
|
+
function resolveHeaderValue(headers, candidates) {
|
|
1541
|
+
for (const candidate of candidates) {
|
|
1542
|
+
const direct = normalizeHeaderValue(headers[candidate]);
|
|
1543
|
+
if (direct) return direct;
|
|
1544
|
+
}
|
|
1545
|
+
const loweredCandidates = new Set(candidates.map((candidate) => candidate.toLowerCase()));
|
|
1546
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
1547
|
+
if (!loweredCandidates.has(key.toLowerCase())) {
|
|
1548
|
+
continue;
|
|
1549
|
+
}
|
|
1550
|
+
const normalized = normalizeHeaderValue(value);
|
|
1551
|
+
if (normalized) return normalized;
|
|
1552
|
+
}
|
|
1553
|
+
return void 0;
|
|
1554
|
+
}
|
|
1555
|
+
function resolveBearerTokenFromAuthorizationHeader(headers) {
|
|
1556
|
+
const authorization = resolveHeaderValue(headers, ["Authorization"]);
|
|
1557
|
+
if (!authorization) {
|
|
1558
|
+
return void 0;
|
|
1559
|
+
}
|
|
1560
|
+
const match = authorization.match(/^Bearer\s+(.+)$/i);
|
|
1561
|
+
const token = match?.[1]?.trim();
|
|
1562
|
+
return token ? token : void 0;
|
|
1563
|
+
}
|
|
1564
|
+
function resolveSessionTokenFromCookieHeader(headers) {
|
|
1565
|
+
const cookie = resolveHeaderValue(headers, ["Cookie"]);
|
|
1566
|
+
if (!cookie) {
|
|
1567
|
+
return void 0;
|
|
1568
|
+
}
|
|
1569
|
+
return getSessionCookie(new Headers({ cookie })) ?? void 0;
|
|
1570
|
+
}
|
|
1457
1571
|
function isRecord2(value) {
|
|
1458
1572
|
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
1459
1573
|
}
|
|
@@ -1571,7 +1685,7 @@ function buildRpcGetEndpoint(payload) {
|
|
|
1571
1685
|
status: 0
|
|
1572
1686
|
});
|
|
1573
1687
|
}
|
|
1574
|
-
query.
|
|
1688
|
+
query.append(filter.column, toRpcFilterQueryValue(filter));
|
|
1575
1689
|
}
|
|
1576
1690
|
}
|
|
1577
1691
|
const endpoint = `/rpc/${encodeURIComponent(functionName)}`;
|
|
@@ -1617,6 +1731,20 @@ function buildHeaders(config, options) {
|
|
|
1617
1731
|
headers["apikey"] = finalApiKey;
|
|
1618
1732
|
headers["x-api-key"] = headers["x-api-key"] ?? finalApiKey;
|
|
1619
1733
|
}
|
|
1734
|
+
const explicitSessionToken = resolveHeaderValue(extraHeaders, [
|
|
1735
|
+
"X-Athena-Auth-Session-Token"
|
|
1736
|
+
]);
|
|
1737
|
+
const derivedSessionToken = explicitSessionToken ?? resolveSessionTokenFromCookieHeader(extraHeaders);
|
|
1738
|
+
if (derivedSessionToken) {
|
|
1739
|
+
headers["X-Athena-Auth-Session-Token"] = derivedSessionToken;
|
|
1740
|
+
}
|
|
1741
|
+
const explicitBearerToken = resolveHeaderValue(extraHeaders, [
|
|
1742
|
+
"X-Athena-Auth-Bearer-Token"
|
|
1743
|
+
]);
|
|
1744
|
+
const derivedBearerToken = explicitBearerToken ?? resolveBearerTokenFromAuthorizationHeader(extraHeaders);
|
|
1745
|
+
if (derivedBearerToken) {
|
|
1746
|
+
headers["X-Athena-Auth-Bearer-Token"] = derivedBearerToken;
|
|
1747
|
+
}
|
|
1620
1748
|
const athenaClientKeys = ["x-athena-client", "X-Athena-Client"];
|
|
1621
1749
|
Object.entries(extraHeaders).forEach(([key, value]) => {
|
|
1622
1750
|
if (athenaClientKeys.includes(key)) return;
|
|
@@ -2251,10 +2379,8 @@ async function resolveReactEmailPayloadFields(input, fields, options) {
|
|
|
2251
2379
|
|
|
2252
2380
|
// src/auth/client.ts
|
|
2253
2381
|
var DEFAULT_AUTH_BASE_URL = "http://localhost:3001/api/auth";
|
|
2254
|
-
var FALLBACK_SDK_VERSION2 = "1.0.0";
|
|
2255
2382
|
var SDK_NAME2 = "xylex-group/athena-auth";
|
|
2256
|
-
var
|
|
2257
|
-
var SDK_HEADER_VALUE2 = `${SDK_NAME2} ${SDK_VERSION2}`;
|
|
2383
|
+
var SDK_HEADER_VALUE2 = buildSdkHeaderValue(SDK_NAME2);
|
|
2258
2384
|
function normalizeBaseUrl(baseUrl) {
|
|
2259
2385
|
return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\/$/, "");
|
|
2260
2386
|
}
|
|
@@ -3700,7 +3826,7 @@ function buildStructuredWhere(conditions) {
|
|
|
3700
3826
|
if (!condition.column) {
|
|
3701
3827
|
return null;
|
|
3702
3828
|
}
|
|
3703
|
-
if (condition.
|
|
3829
|
+
if (condition.value_cast !== void 0) {
|
|
3704
3830
|
return null;
|
|
3705
3831
|
}
|
|
3706
3832
|
const operand = condition.value;
|
|
@@ -3779,6 +3905,104 @@ function toFindManyAstOrder(order) {
|
|
|
3779
3905
|
ascending: order.direction !== "descending"
|
|
3780
3906
|
};
|
|
3781
3907
|
}
|
|
3908
|
+
function isRecord6(value) {
|
|
3909
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
3910
|
+
}
|
|
3911
|
+
function normalizeFindManyAstColumnPredicate(value) {
|
|
3912
|
+
if (!isRecord6(value)) {
|
|
3913
|
+
return {
|
|
3914
|
+
eq: value
|
|
3915
|
+
};
|
|
3916
|
+
}
|
|
3917
|
+
const normalized = {};
|
|
3918
|
+
for (const [key, operand] of Object.entries(value)) {
|
|
3919
|
+
if (operand !== void 0) {
|
|
3920
|
+
normalized[key] = operand;
|
|
3921
|
+
}
|
|
3922
|
+
}
|
|
3923
|
+
return normalized;
|
|
3924
|
+
}
|
|
3925
|
+
function normalizeFindManyAstBooleanOperand(clause) {
|
|
3926
|
+
const normalized = {};
|
|
3927
|
+
for (const [column, value] of Object.entries(clause)) {
|
|
3928
|
+
if (value === void 0) {
|
|
3929
|
+
continue;
|
|
3930
|
+
}
|
|
3931
|
+
normalized[column] = normalizeFindManyAstColumnPredicate(value);
|
|
3932
|
+
}
|
|
3933
|
+
return normalized;
|
|
3934
|
+
}
|
|
3935
|
+
function normalizeFindManyAstWhere(where) {
|
|
3936
|
+
if (!where || !isRecord6(where)) {
|
|
3937
|
+
return where;
|
|
3938
|
+
}
|
|
3939
|
+
const normalized = {};
|
|
3940
|
+
for (const [key, value] of Object.entries(where)) {
|
|
3941
|
+
if (value === void 0) {
|
|
3942
|
+
continue;
|
|
3943
|
+
}
|
|
3944
|
+
if (key === "or" && Array.isArray(value)) {
|
|
3945
|
+
normalized.or = value.map(
|
|
3946
|
+
(clause) => normalizeFindManyAstBooleanOperand(clause)
|
|
3947
|
+
);
|
|
3948
|
+
continue;
|
|
3949
|
+
}
|
|
3950
|
+
if (key === "not" && isRecord6(value)) {
|
|
3951
|
+
normalized.not = normalizeFindManyAstBooleanOperand(
|
|
3952
|
+
value
|
|
3953
|
+
);
|
|
3954
|
+
continue;
|
|
3955
|
+
}
|
|
3956
|
+
normalized[key] = normalizeFindManyAstColumnPredicate(value);
|
|
3957
|
+
}
|
|
3958
|
+
return normalized;
|
|
3959
|
+
}
|
|
3960
|
+
function predicateRequiresUuidQueryFallback(column, value) {
|
|
3961
|
+
if (!isRecord6(value)) {
|
|
3962
|
+
return shouldUseUuidTextComparison(column, value);
|
|
3963
|
+
}
|
|
3964
|
+
const eqValue = value.eq;
|
|
3965
|
+
return eqValue !== void 0 && shouldUseUuidTextComparison(column, eqValue);
|
|
3966
|
+
}
|
|
3967
|
+
function booleanOperandRequiresUuidQueryFallback(clause) {
|
|
3968
|
+
for (const [column, value] of Object.entries(clause)) {
|
|
3969
|
+
if (value === void 0) {
|
|
3970
|
+
continue;
|
|
3971
|
+
}
|
|
3972
|
+
if (predicateRequiresUuidQueryFallback(column, value)) {
|
|
3973
|
+
return true;
|
|
3974
|
+
}
|
|
3975
|
+
}
|
|
3976
|
+
return false;
|
|
3977
|
+
}
|
|
3978
|
+
function findManyAstWhereRequiresLegacyTransport(where) {
|
|
3979
|
+
if (!where || !isRecord6(where)) {
|
|
3980
|
+
return false;
|
|
3981
|
+
}
|
|
3982
|
+
for (const [key, value] of Object.entries(where)) {
|
|
3983
|
+
if (value === void 0) {
|
|
3984
|
+
continue;
|
|
3985
|
+
}
|
|
3986
|
+
if (key === "or" && Array.isArray(value)) {
|
|
3987
|
+
if (value.some(
|
|
3988
|
+
(clause) => booleanOperandRequiresUuidQueryFallback(clause)
|
|
3989
|
+
)) {
|
|
3990
|
+
return true;
|
|
3991
|
+
}
|
|
3992
|
+
continue;
|
|
3993
|
+
}
|
|
3994
|
+
if (key === "not" && isRecord6(value)) {
|
|
3995
|
+
if (booleanOperandRequiresUuidQueryFallback(value)) {
|
|
3996
|
+
return true;
|
|
3997
|
+
}
|
|
3998
|
+
continue;
|
|
3999
|
+
}
|
|
4000
|
+
if (predicateRequiresUuidQueryFallback(key, value)) {
|
|
4001
|
+
return true;
|
|
4002
|
+
}
|
|
4003
|
+
}
|
|
4004
|
+
return false;
|
|
4005
|
+
}
|
|
3782
4006
|
function resolvePagination(input) {
|
|
3783
4007
|
let limit = input.limit;
|
|
3784
4008
|
let offset = input.offset;
|
|
@@ -3797,25 +4021,6 @@ function hasTypedEqualityComparison(conditions) {
|
|
|
3797
4021
|
}
|
|
3798
4022
|
function createSelectTransportPlan(input) {
|
|
3799
4023
|
const conditions = input.state.conditions.length ? input.state.conditions.map((condition) => ({ ...condition })) : void 0;
|
|
3800
|
-
if (hasTypedEqualityComparison(conditions) && !input.options?.head && !input.options?.count && conditions) {
|
|
3801
|
-
const query = input.buildTypedSelectQuery({
|
|
3802
|
-
tableName: input.tableName,
|
|
3803
|
-
columns: input.columns,
|
|
3804
|
-
conditions,
|
|
3805
|
-
limit: input.state.limit,
|
|
3806
|
-
offset: input.state.offset,
|
|
3807
|
-
currentPage: input.state.currentPage,
|
|
3808
|
-
pageSize: input.state.pageSize,
|
|
3809
|
-
order: input.state.order
|
|
3810
|
-
});
|
|
3811
|
-
if (query) {
|
|
3812
|
-
return {
|
|
3813
|
-
kind: "query",
|
|
3814
|
-
query,
|
|
3815
|
-
payload: { query }
|
|
3816
|
-
};
|
|
3817
|
-
}
|
|
3818
|
-
}
|
|
3819
4024
|
const pagination = resolvePagination({
|
|
3820
4025
|
limit: input.state.limit,
|
|
3821
4026
|
offset: input.state.offset,
|
|
@@ -3851,6 +4056,25 @@ function createSelectTransportPlan(input) {
|
|
|
3851
4056
|
}
|
|
3852
4057
|
};
|
|
3853
4058
|
}
|
|
4059
|
+
if (hasTypedEqualityComparison(conditions) && !input.options?.head && !input.options?.count && conditions) {
|
|
4060
|
+
const query = input.buildTypedSelectQuery({
|
|
4061
|
+
tableName: input.tableName,
|
|
4062
|
+
columns: input.columns,
|
|
4063
|
+
conditions,
|
|
4064
|
+
limit: input.state.limit,
|
|
4065
|
+
offset: input.state.offset,
|
|
4066
|
+
currentPage: input.state.currentPage,
|
|
4067
|
+
pageSize: input.state.pageSize,
|
|
4068
|
+
order: input.state.order
|
|
4069
|
+
});
|
|
4070
|
+
if (query) {
|
|
4071
|
+
return {
|
|
4072
|
+
kind: "query",
|
|
4073
|
+
query,
|
|
4074
|
+
payload: { query }
|
|
4075
|
+
};
|
|
4076
|
+
}
|
|
4077
|
+
}
|
|
3854
4078
|
return {
|
|
3855
4079
|
kind: "fetch",
|
|
3856
4080
|
payload: {
|
|
@@ -3907,6 +4131,13 @@ function formatResult(response) {
|
|
|
3907
4131
|
}
|
|
3908
4132
|
return result;
|
|
3909
4133
|
}
|
|
4134
|
+
var EXPERIMENTAL_READ_RETRY_CONFIG = {
|
|
4135
|
+
retries: 2,
|
|
4136
|
+
baseDelayMs: 100,
|
|
4137
|
+
maxDelayMs: 1e3,
|
|
4138
|
+
backoff: "exponential",
|
|
4139
|
+
jitter: true
|
|
4140
|
+
};
|
|
3910
4141
|
function attachNormalizedError(result, normalizedError) {
|
|
3911
4142
|
Object.defineProperty(result, ATHENA_NORMALIZED_ERROR_KEY, {
|
|
3912
4143
|
value: normalizedError,
|
|
@@ -3933,7 +4164,36 @@ function createResultFormatter(experimental) {
|
|
|
3933
4164
|
return result;
|
|
3934
4165
|
};
|
|
3935
4166
|
}
|
|
3936
|
-
function
|
|
4167
|
+
async function executeExperimentalRead(experimental, runner) {
|
|
4168
|
+
if (!experimental?.retryReads) {
|
|
4169
|
+
return runner();
|
|
4170
|
+
}
|
|
4171
|
+
let lastRetryableResult;
|
|
4172
|
+
let lastRetrySignal = null;
|
|
4173
|
+
try {
|
|
4174
|
+
return await withRetry(
|
|
4175
|
+
{
|
|
4176
|
+
...EXPERIMENTAL_READ_RETRY_CONFIG,
|
|
4177
|
+
shouldRetry: (error) => error === lastRetrySignal || normalizeAthenaError(error).retryable
|
|
4178
|
+
},
|
|
4179
|
+
async () => {
|
|
4180
|
+
const result = await runner();
|
|
4181
|
+
if (result.error?.retryable) {
|
|
4182
|
+
lastRetryableResult = result;
|
|
4183
|
+
lastRetrySignal = result.error;
|
|
4184
|
+
throw lastRetrySignal;
|
|
4185
|
+
}
|
|
4186
|
+
return result;
|
|
4187
|
+
}
|
|
4188
|
+
);
|
|
4189
|
+
} catch (error) {
|
|
4190
|
+
if (lastRetryableResult && error === lastRetrySignal) {
|
|
4191
|
+
return lastRetryableResult;
|
|
4192
|
+
}
|
|
4193
|
+
throw error;
|
|
4194
|
+
}
|
|
4195
|
+
}
|
|
4196
|
+
function isRecord7(value) {
|
|
3937
4197
|
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
3938
4198
|
}
|
|
3939
4199
|
function firstNonEmptyString2(...values) {
|
|
@@ -3945,8 +4205,8 @@ function firstNonEmptyString2(...values) {
|
|
|
3945
4205
|
return void 0;
|
|
3946
4206
|
}
|
|
3947
4207
|
function resolveStructuredErrorPayload2(raw) {
|
|
3948
|
-
if (!
|
|
3949
|
-
return
|
|
4208
|
+
if (!isRecord7(raw)) return null;
|
|
4209
|
+
return isRecord7(raw.error) ? raw.error : raw;
|
|
3950
4210
|
}
|
|
3951
4211
|
function resolveStructuredErrorDetails(payload, message) {
|
|
3952
4212
|
if (!payload || !("details" in payload)) {
|
|
@@ -3962,7 +4222,7 @@ function resolveStructuredErrorDetails(payload, message) {
|
|
|
3962
4222
|
return details;
|
|
3963
4223
|
}
|
|
3964
4224
|
function createResultError(response, result, normalized) {
|
|
3965
|
-
const rawRecord =
|
|
4225
|
+
const rawRecord = isRecord7(response.raw) ? response.raw : null;
|
|
3966
4226
|
const payload = resolveStructuredErrorPayload2(response.raw);
|
|
3967
4227
|
const message = firstNonEmptyString2(
|
|
3968
4228
|
response.error,
|
|
@@ -4157,7 +4417,14 @@ function toSingleResult(response) {
|
|
|
4157
4417
|
function mergeOptions(...options) {
|
|
4158
4418
|
return options.reduce((acc, next) => {
|
|
4159
4419
|
if (!next) return acc;
|
|
4160
|
-
|
|
4420
|
+
const merged = { ...acc ?? {}, ...next };
|
|
4421
|
+
if (acc?.headers || next.headers) {
|
|
4422
|
+
merged.headers = {
|
|
4423
|
+
...acc?.headers ?? {},
|
|
4424
|
+
...next.headers ?? {}
|
|
4425
|
+
};
|
|
4426
|
+
}
|
|
4427
|
+
return merged;
|
|
4161
4428
|
}, void 0);
|
|
4162
4429
|
}
|
|
4163
4430
|
function asAthenaJsonObject(value) {
|
|
@@ -4949,42 +5216,48 @@ function createTableBuilder(tableName, client, formatGatewayResult, tracer, expe
|
|
|
4949
5216
|
buildTypedSelectQuery
|
|
4950
5217
|
});
|
|
4951
5218
|
if (plan.kind === "query") {
|
|
4952
|
-
return
|
|
5219
|
+
return executeExperimentalRead(
|
|
5220
|
+
experimental,
|
|
5221
|
+
() => executeWithQueryTrace(
|
|
5222
|
+
tracer,
|
|
5223
|
+
{
|
|
5224
|
+
operation: "select",
|
|
5225
|
+
endpoint: "/gateway/query",
|
|
5226
|
+
table: resolvedTableName,
|
|
5227
|
+
sql: plan.query,
|
|
5228
|
+
payload: plan.payload,
|
|
5229
|
+
options
|
|
5230
|
+
},
|
|
5231
|
+
async () => {
|
|
5232
|
+
const queryResponse = await client.queryGateway(plan.payload, options);
|
|
5233
|
+
return formatGatewayResult(queryResponse, { table: resolvedTableName, operation: "select" });
|
|
5234
|
+
},
|
|
5235
|
+
callsite
|
|
5236
|
+
)
|
|
5237
|
+
);
|
|
5238
|
+
}
|
|
5239
|
+
const sql = buildDebugSelectQuery({
|
|
5240
|
+
tableName: resolvedTableName,
|
|
5241
|
+
...plan.debug
|
|
5242
|
+
});
|
|
5243
|
+
return executeExperimentalRead(
|
|
5244
|
+
experimental,
|
|
5245
|
+
() => executeWithQueryTrace(
|
|
4953
5246
|
tracer,
|
|
4954
5247
|
{
|
|
4955
5248
|
operation: "select",
|
|
4956
|
-
endpoint: "/gateway/
|
|
5249
|
+
endpoint: "/gateway/fetch",
|
|
4957
5250
|
table: resolvedTableName,
|
|
4958
|
-
sql
|
|
5251
|
+
sql,
|
|
4959
5252
|
payload: plan.payload,
|
|
4960
5253
|
options
|
|
4961
5254
|
},
|
|
4962
5255
|
async () => {
|
|
4963
|
-
const
|
|
4964
|
-
return formatGatewayResult(
|
|
5256
|
+
const response = await client.fetchGateway(plan.payload, options);
|
|
5257
|
+
return formatGatewayResult(response, { table: resolvedTableName, operation: "select" });
|
|
4965
5258
|
},
|
|
4966
5259
|
callsite
|
|
4967
|
-
)
|
|
4968
|
-
}
|
|
4969
|
-
const sql = buildDebugSelectQuery({
|
|
4970
|
-
tableName: resolvedTableName,
|
|
4971
|
-
...plan.debug
|
|
4972
|
-
});
|
|
4973
|
-
return executeWithQueryTrace(
|
|
4974
|
-
tracer,
|
|
4975
|
-
{
|
|
4976
|
-
operation: "select",
|
|
4977
|
-
endpoint: "/gateway/fetch",
|
|
4978
|
-
table: resolvedTableName,
|
|
4979
|
-
sql,
|
|
4980
|
-
payload: plan.payload,
|
|
4981
|
-
options
|
|
4982
|
-
},
|
|
4983
|
-
async () => {
|
|
4984
|
-
const response = await client.fetchGateway(plan.payload, options);
|
|
4985
|
-
return formatGatewayResult(response, { table: resolvedTableName, operation: "select" });
|
|
4986
|
-
},
|
|
4987
|
-
callsite
|
|
5260
|
+
)
|
|
4988
5261
|
);
|
|
4989
5262
|
};
|
|
4990
5263
|
const createSelectChain = (columns, options, initialCallsite) => {
|
|
@@ -5054,14 +5327,14 @@ function createTableBuilder(tableName, client, formatGatewayResult, tracer, expe
|
|
|
5054
5327
|
if (options.limit !== void 0) {
|
|
5055
5328
|
executionState.limit = options.limit;
|
|
5056
5329
|
}
|
|
5057
|
-
if (experimental?.findManyAst && canUseFindManyAstTransport(baseState) && !selectShapeUsesRelationSchema(options.select)) {
|
|
5330
|
+
if (experimental?.findManyAst && canUseFindManyAstTransport(baseState) && !selectShapeUsesRelationSchema(options.select) && !findManyAstWhereRequiresLegacyTransport(options.where)) {
|
|
5058
5331
|
const resolvedTableName = resolveTableNameForCall(tableName, void 0);
|
|
5059
5332
|
const payload = {
|
|
5060
5333
|
table_name: resolvedTableName,
|
|
5061
5334
|
select: options.select
|
|
5062
5335
|
};
|
|
5063
5336
|
if (options.where !== void 0) {
|
|
5064
|
-
payload.where = options.where;
|
|
5337
|
+
payload.where = normalizeFindManyAstWhere(options.where);
|
|
5065
5338
|
}
|
|
5066
5339
|
const astOrder = toFindManyAstOrder(executionState.order);
|
|
5067
5340
|
if (astOrder !== void 0) {
|
|
@@ -5077,22 +5350,25 @@ function createTableBuilder(tableName, client, formatGatewayResult, tracer, expe
|
|
|
5077
5350
|
limit: executionState.limit,
|
|
5078
5351
|
order: executionState.order
|
|
5079
5352
|
});
|
|
5080
|
-
return
|
|
5081
|
-
|
|
5082
|
-
|
|
5083
|
-
|
|
5084
|
-
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
|
|
5088
|
-
|
|
5089
|
-
async () => {
|
|
5090
|
-
const response = await client.fetchGateway(
|
|
5353
|
+
return executeExperimentalRead(
|
|
5354
|
+
experimental,
|
|
5355
|
+
() => executeWithQueryTrace(
|
|
5356
|
+
tracer,
|
|
5357
|
+
{
|
|
5358
|
+
operation: "select",
|
|
5359
|
+
endpoint: "/gateway/fetch",
|
|
5360
|
+
table: resolvedTableName,
|
|
5361
|
+
sql,
|
|
5091
5362
|
payload
|
|
5092
|
-
|
|
5093
|
-
|
|
5094
|
-
|
|
5095
|
-
|
|
5363
|
+
},
|
|
5364
|
+
async () => {
|
|
5365
|
+
const response = await client.fetchGateway(
|
|
5366
|
+
payload
|
|
5367
|
+
);
|
|
5368
|
+
return formatGatewayResult(response, { table: resolvedTableName, operation: "select" });
|
|
5369
|
+
},
|
|
5370
|
+
callsite
|
|
5371
|
+
)
|
|
5096
5372
|
);
|
|
5097
5373
|
}
|
|
5098
5374
|
return runSelect(
|
|
@@ -5340,7 +5616,7 @@ function createTableBuilder(tableName, client, formatGatewayResult, tracer, expe
|
|
|
5340
5616
|
});
|
|
5341
5617
|
return builder;
|
|
5342
5618
|
}
|
|
5343
|
-
function createQueryBuilder(client, formatGatewayResult, tracer) {
|
|
5619
|
+
function createQueryBuilder(client, formatGatewayResult, experimental, tracer) {
|
|
5344
5620
|
return async function query(query, options) {
|
|
5345
5621
|
const normalizedQuery = query.trim();
|
|
5346
5622
|
if (!normalizedQuery) {
|
|
@@ -5348,30 +5624,39 @@ function createQueryBuilder(client, formatGatewayResult, tracer) {
|
|
|
5348
5624
|
}
|
|
5349
5625
|
const payload = { query: normalizedQuery };
|
|
5350
5626
|
const callsite = captureTraceCallsite(tracer);
|
|
5351
|
-
return
|
|
5352
|
-
|
|
5353
|
-
|
|
5354
|
-
|
|
5355
|
-
|
|
5356
|
-
|
|
5357
|
-
|
|
5358
|
-
|
|
5359
|
-
|
|
5360
|
-
|
|
5361
|
-
|
|
5362
|
-
|
|
5363
|
-
|
|
5364
|
-
|
|
5627
|
+
return executeExperimentalRead(
|
|
5628
|
+
experimental,
|
|
5629
|
+
() => executeWithQueryTrace(
|
|
5630
|
+
tracer,
|
|
5631
|
+
{
|
|
5632
|
+
operation: "query",
|
|
5633
|
+
endpoint: "/gateway/query",
|
|
5634
|
+
sql: normalizedQuery,
|
|
5635
|
+
payload,
|
|
5636
|
+
options
|
|
5637
|
+
},
|
|
5638
|
+
async () => {
|
|
5639
|
+
const response = await client.queryGateway(payload, options);
|
|
5640
|
+
return formatGatewayResult(response, { operation: "query" });
|
|
5641
|
+
},
|
|
5642
|
+
callsite
|
|
5643
|
+
)
|
|
5365
5644
|
);
|
|
5366
5645
|
};
|
|
5367
5646
|
}
|
|
5368
5647
|
function createClientFromConfig(config) {
|
|
5648
|
+
const gatewayHeaders = {
|
|
5649
|
+
...config.headers ?? {}
|
|
5650
|
+
};
|
|
5651
|
+
if (config.auth?.bearerToken && gatewayHeaders["X-Athena-Auth-Bearer-Token"] === void 0 && gatewayHeaders["x-athena-auth-bearer-token"] === void 0) {
|
|
5652
|
+
gatewayHeaders["X-Athena-Auth-Bearer-Token"] = config.auth.bearerToken;
|
|
5653
|
+
}
|
|
5369
5654
|
const gateway = createAthenaGatewayClient({
|
|
5370
5655
|
baseUrl: config.baseUrl,
|
|
5371
5656
|
apiKey: config.apiKey,
|
|
5372
5657
|
client: config.client,
|
|
5373
5658
|
backend: config.backend,
|
|
5374
|
-
headers:
|
|
5659
|
+
headers: gatewayHeaders
|
|
5375
5660
|
});
|
|
5376
5661
|
const formatGatewayResult = createResultFormatter();
|
|
5377
5662
|
const queryTracer = createQueryTracer(config.experimental);
|
|
@@ -5398,7 +5683,7 @@ function createClientFromConfig(config) {
|
|
|
5398
5683
|
captureTraceCallsite(queryTracer)
|
|
5399
5684
|
);
|
|
5400
5685
|
};
|
|
5401
|
-
const query = createQueryBuilder(gateway, formatGatewayResult, queryTracer);
|
|
5686
|
+
const query = createQueryBuilder(gateway, formatGatewayResult, config.experimental, queryTracer);
|
|
5402
5687
|
const db = createDbModule({ from, rpc, query });
|
|
5403
5688
|
return {
|
|
5404
5689
|
from,
|