@adaptic/backend-legacy 0.0.904 → 0.0.905
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/ABTest.cjs +291 -63
- package/Account.cjs +291 -63
- package/AccountLinkingRequest.cjs +291 -63
- package/Action.cjs +291 -63
- package/Alert.cjs +291 -63
- package/Allocation.cjs +291 -63
- package/AlpacaAccount.cjs +291 -63
- package/AnalyticsConfiguration.cjs +291 -63
- package/AnalyticsSnapshot.cjs +291 -63
- package/Asset.cjs +291 -63
- package/AuditLog.cjs +291 -63
- package/Authenticator.cjs +291 -63
- package/Configuration.cjs +291 -63
- package/ConflictEvent.cjs +291 -63
- package/ConnectionHealthSnapshot.cjs +291 -63
- package/Customer.cjs +291 -63
- package/DeadLetterMessage.cjs +291 -63
- package/EconomicEvent.cjs +291 -63
- package/Event.cjs +291 -63
- package/EventSnapshot.cjs +291 -63
- package/FeatureImportanceAnalysis.cjs +291 -63
- package/InstitutionalFlowSignal.cjs +291 -63
- package/InstitutionalHolding.cjs +291 -63
- package/InstitutionalSentimentAlerts.cjs +291 -63
- package/InstitutionalSentimentErrors.cjs +291 -63
- package/InstitutionalSentimentHistory.cjs +291 -63
- package/InstitutionalSentimentMetrics.cjs +291 -63
- package/InviteToken.cjs +291 -63
- package/LinkedProvider.cjs +291 -63
- package/MLTrainingData.cjs +291 -63
- package/MarketSentiment.cjs +291 -63
- package/ModelArtifact.cjs +291 -63
- package/ModelVersion.cjs +291 -63
- package/ModelVersionArtifact.cjs +291 -63
- package/NewsArticle.cjs +291 -63
- package/NewsArticleAssetSentiment.cjs +291 -63
- package/OptionsContract.cjs +291 -63
- package/OptionsGreeksHistory.cjs +291 -63
- package/OptionsPosition.cjs +291 -63
- package/OptionsTradeExecution.cjs +291 -63
- package/PortfolioGreeksHistory.cjs +291 -63
- package/ScheduledOptionOrder.cjs +291 -63
- package/Session.cjs +291 -63
- package/SignalGeneratorMetrics.cjs +291 -63
- package/SignalLineage.cjs +291 -63
- package/SignalOutcome.cjs +291 -63
- package/SignalPriorityQueue.cjs +291 -63
- package/SyncEvent.cjs +291 -63
- package/SystemAlert.cjs +291 -63
- package/Trade.cjs +291 -63
- package/TradeAuditEvent.cjs +291 -63
- package/TradeExecutionHistory.cjs +291 -63
- package/User.cjs +291 -63
- package/VerificationToken.cjs +291 -63
- package/WaitlistEntry.cjs +291 -63
- package/esm/ABTest.d.ts.map +1 -1
- package/esm/ABTest.js.map +1 -1
- package/esm/ABTest.mjs +255 -27
- package/esm/Account.d.ts.map +1 -1
- package/esm/Account.js.map +1 -1
- package/esm/Account.mjs +255 -27
- package/esm/AccountLinkingRequest.d.ts.map +1 -1
- package/esm/AccountLinkingRequest.js.map +1 -1
- package/esm/AccountLinkingRequest.mjs +255 -27
- package/esm/Action.d.ts.map +1 -1
- package/esm/Action.js.map +1 -1
- package/esm/Action.mjs +255 -27
- package/esm/Alert.d.ts.map +1 -1
- package/esm/Alert.js.map +1 -1
- package/esm/Alert.mjs +255 -27
- package/esm/Allocation.d.ts.map +1 -1
- package/esm/Allocation.js.map +1 -1
- package/esm/Allocation.mjs +255 -27
- package/esm/AlpacaAccount.d.ts.map +1 -1
- package/esm/AlpacaAccount.js.map +1 -1
- package/esm/AlpacaAccount.mjs +255 -27
- package/esm/AnalyticsConfiguration.d.ts.map +1 -1
- package/esm/AnalyticsConfiguration.js.map +1 -1
- package/esm/AnalyticsConfiguration.mjs +255 -27
- package/esm/AnalyticsSnapshot.d.ts.map +1 -1
- package/esm/AnalyticsSnapshot.js.map +1 -1
- package/esm/AnalyticsSnapshot.mjs +255 -27
- package/esm/Asset.d.ts.map +1 -1
- package/esm/Asset.js.map +1 -1
- package/esm/Asset.mjs +255 -27
- package/esm/AuditLog.d.ts.map +1 -1
- package/esm/AuditLog.js.map +1 -1
- package/esm/AuditLog.mjs +255 -27
- package/esm/Authenticator.d.ts.map +1 -1
- package/esm/Authenticator.js.map +1 -1
- package/esm/Authenticator.mjs +255 -27
- package/esm/Configuration.d.ts.map +1 -1
- package/esm/Configuration.js.map +1 -1
- package/esm/Configuration.mjs +255 -27
- package/esm/ConflictEvent.d.ts.map +1 -1
- package/esm/ConflictEvent.js.map +1 -1
- package/esm/ConflictEvent.mjs +255 -27
- package/esm/ConnectionHealthSnapshot.d.ts.map +1 -1
- package/esm/ConnectionHealthSnapshot.js.map +1 -1
- package/esm/ConnectionHealthSnapshot.mjs +255 -27
- package/esm/Customer.d.ts.map +1 -1
- package/esm/Customer.js.map +1 -1
- package/esm/Customer.mjs +255 -27
- package/esm/DeadLetterMessage.d.ts.map +1 -1
- package/esm/DeadLetterMessage.js.map +1 -1
- package/esm/DeadLetterMessage.mjs +255 -27
- package/esm/EconomicEvent.d.ts.map +1 -1
- package/esm/EconomicEvent.js.map +1 -1
- package/esm/EconomicEvent.mjs +255 -27
- package/esm/Event.d.ts.map +1 -1
- package/esm/Event.js.map +1 -1
- package/esm/Event.mjs +255 -27
- package/esm/EventSnapshot.d.ts.map +1 -1
- package/esm/EventSnapshot.js.map +1 -1
- package/esm/EventSnapshot.mjs +255 -27
- package/esm/FeatureImportanceAnalysis.d.ts.map +1 -1
- package/esm/FeatureImportanceAnalysis.js.map +1 -1
- package/esm/FeatureImportanceAnalysis.mjs +255 -27
- package/esm/InstitutionalFlowSignal.d.ts.map +1 -1
- package/esm/InstitutionalFlowSignal.js.map +1 -1
- package/esm/InstitutionalFlowSignal.mjs +255 -27
- package/esm/InstitutionalHolding.d.ts.map +1 -1
- package/esm/InstitutionalHolding.js.map +1 -1
- package/esm/InstitutionalHolding.mjs +255 -27
- package/esm/InstitutionalSentimentAlerts.d.ts.map +1 -1
- package/esm/InstitutionalSentimentAlerts.js.map +1 -1
- package/esm/InstitutionalSentimentAlerts.mjs +255 -27
- package/esm/InstitutionalSentimentErrors.d.ts.map +1 -1
- package/esm/InstitutionalSentimentErrors.js.map +1 -1
- package/esm/InstitutionalSentimentErrors.mjs +255 -27
- package/esm/InstitutionalSentimentHistory.d.ts.map +1 -1
- package/esm/InstitutionalSentimentHistory.js.map +1 -1
- package/esm/InstitutionalSentimentHistory.mjs +255 -27
- package/esm/InstitutionalSentimentMetrics.d.ts.map +1 -1
- package/esm/InstitutionalSentimentMetrics.js.map +1 -1
- package/esm/InstitutionalSentimentMetrics.mjs +255 -27
- package/esm/InviteToken.d.ts.map +1 -1
- package/esm/InviteToken.js.map +1 -1
- package/esm/InviteToken.mjs +255 -27
- package/esm/LinkedProvider.d.ts.map +1 -1
- package/esm/LinkedProvider.js.map +1 -1
- package/esm/LinkedProvider.mjs +255 -27
- package/esm/MLTrainingData.d.ts.map +1 -1
- package/esm/MLTrainingData.js.map +1 -1
- package/esm/MLTrainingData.mjs +255 -27
- package/esm/MarketSentiment.d.ts.map +1 -1
- package/esm/MarketSentiment.js.map +1 -1
- package/esm/MarketSentiment.mjs +255 -27
- package/esm/ModelArtifact.d.ts.map +1 -1
- package/esm/ModelArtifact.js.map +1 -1
- package/esm/ModelArtifact.mjs +255 -27
- package/esm/ModelVersion.d.ts.map +1 -1
- package/esm/ModelVersion.js.map +1 -1
- package/esm/ModelVersion.mjs +255 -27
- package/esm/ModelVersionArtifact.d.ts.map +1 -1
- package/esm/ModelVersionArtifact.js.map +1 -1
- package/esm/ModelVersionArtifact.mjs +255 -27
- package/esm/NewsArticle.d.ts.map +1 -1
- package/esm/NewsArticle.js.map +1 -1
- package/esm/NewsArticle.mjs +255 -27
- package/esm/NewsArticleAssetSentiment.d.ts.map +1 -1
- package/esm/NewsArticleAssetSentiment.js.map +1 -1
- package/esm/NewsArticleAssetSentiment.mjs +255 -27
- package/esm/OptionsContract.d.ts.map +1 -1
- package/esm/OptionsContract.js.map +1 -1
- package/esm/OptionsContract.mjs +255 -27
- package/esm/OptionsGreeksHistory.d.ts.map +1 -1
- package/esm/OptionsGreeksHistory.js.map +1 -1
- package/esm/OptionsGreeksHistory.mjs +255 -27
- package/esm/OptionsPosition.d.ts.map +1 -1
- package/esm/OptionsPosition.js.map +1 -1
- package/esm/OptionsPosition.mjs +255 -27
- package/esm/OptionsTradeExecution.d.ts.map +1 -1
- package/esm/OptionsTradeExecution.js.map +1 -1
- package/esm/OptionsTradeExecution.mjs +255 -27
- package/esm/PortfolioGreeksHistory.d.ts.map +1 -1
- package/esm/PortfolioGreeksHistory.js.map +1 -1
- package/esm/PortfolioGreeksHistory.mjs +255 -27
- package/esm/ScheduledOptionOrder.d.ts.map +1 -1
- package/esm/ScheduledOptionOrder.js.map +1 -1
- package/esm/ScheduledOptionOrder.mjs +255 -27
- package/esm/Session.d.ts.map +1 -1
- package/esm/Session.js.map +1 -1
- package/esm/Session.mjs +255 -27
- package/esm/SignalGeneratorMetrics.d.ts.map +1 -1
- package/esm/SignalGeneratorMetrics.js.map +1 -1
- package/esm/SignalGeneratorMetrics.mjs +255 -27
- package/esm/SignalLineage.d.ts.map +1 -1
- package/esm/SignalLineage.js.map +1 -1
- package/esm/SignalLineage.mjs +255 -27
- package/esm/SignalOutcome.d.ts.map +1 -1
- package/esm/SignalOutcome.js.map +1 -1
- package/esm/SignalOutcome.mjs +255 -27
- package/esm/SignalPriorityQueue.d.ts.map +1 -1
- package/esm/SignalPriorityQueue.js.map +1 -1
- package/esm/SignalPriorityQueue.mjs +255 -27
- package/esm/SyncEvent.d.ts.map +1 -1
- package/esm/SyncEvent.js.map +1 -1
- package/esm/SyncEvent.mjs +255 -27
- package/esm/SystemAlert.d.ts.map +1 -1
- package/esm/SystemAlert.js.map +1 -1
- package/esm/SystemAlert.mjs +255 -27
- package/esm/Trade.d.ts.map +1 -1
- package/esm/Trade.js.map +1 -1
- package/esm/Trade.mjs +255 -27
- package/esm/TradeAuditEvent.d.ts.map +1 -1
- package/esm/TradeAuditEvent.js.map +1 -1
- package/esm/TradeAuditEvent.mjs +255 -27
- package/esm/TradeExecutionHistory.d.ts.map +1 -1
- package/esm/TradeExecutionHistory.js.map +1 -1
- package/esm/TradeExecutionHistory.mjs +255 -27
- package/esm/User.d.ts.map +1 -1
- package/esm/User.js.map +1 -1
- package/esm/User.mjs +255 -27
- package/esm/VerificationToken.d.ts.map +1 -1
- package/esm/VerificationToken.js.map +1 -1
- package/esm/VerificationToken.mjs +255 -27
- package/esm/WaitlistEntry.d.ts.map +1 -1
- package/esm/WaitlistEntry.js.map +1 -1
- package/esm/WaitlistEntry.mjs +255 -27
- package/esm/prismaClient.d.ts.map +1 -1
- package/esm/prismaClient.js.map +1 -1
- package/esm/prismaClient.mjs +38 -9
- package/package.json +1 -1
- package/prismaClient.cjs +38 -9
package/ABTest.cjs
CHANGED
|
@@ -241,7 +241,7 @@ exports.ABTest = {
|
|
|
241
241
|
* @returns The created ABTest or null.
|
|
242
242
|
*/
|
|
243
243
|
async create(props, globalClient) {
|
|
244
|
-
var _a, _b, _c, _d, _e;
|
|
244
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
245
245
|
// Maximum number of retries for database connection issues
|
|
246
246
|
const MAX_RETRIES = 3;
|
|
247
247
|
let retryCount = 0;
|
|
@@ -1688,21 +1688,52 @@ exports.ABTest = {
|
|
|
1688
1688
|
}
|
|
1689
1689
|
catch (error) {
|
|
1690
1690
|
lastError = error;
|
|
1691
|
+
// Check for constraint violations FIRST - these are NEVER retryable
|
|
1692
|
+
const isConstraintViolation = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('violates check constraint')) ||
|
|
1693
|
+
((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('violates unique constraint')) ||
|
|
1694
|
+
((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('violates foreign key constraint')) ||
|
|
1695
|
+
((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('unique constraint')) ||
|
|
1696
|
+
((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('23514')) ||
|
|
1697
|
+
((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('23505')) ||
|
|
1698
|
+
((_g = error.message) === null || _g === void 0 ? void 0 : _g.includes('P2002')) ||
|
|
1699
|
+
((_h = error.message) === null || _h === void 0 ? void 0 : _h.includes('P2003'));
|
|
1700
|
+
if (isConstraintViolation) {
|
|
1701
|
+
const constraintMatch = (_j = error.message) === null || _j === void 0 ? void 0 : _j.match(/constraint\s+"([^"]+)"/);
|
|
1702
|
+
logger_1.logger.error("Non-retryable constraint violation in createOneABTest", {
|
|
1703
|
+
operation: 'createOneABTest',
|
|
1704
|
+
model: 'ABTest',
|
|
1705
|
+
error: String(error),
|
|
1706
|
+
constraintName: constraintMatch ? constraintMatch[1] : undefined,
|
|
1707
|
+
errorCategory: 'CONSTRAINT_VIOLATION',
|
|
1708
|
+
isRetryable: false,
|
|
1709
|
+
});
|
|
1710
|
+
throw error;
|
|
1711
|
+
}
|
|
1691
1712
|
// Check if this is a database connection error that we should retry
|
|
1692
|
-
const isConnectionError = ((
|
|
1693
|
-
((
|
|
1694
|
-
((
|
|
1695
|
-
((
|
|
1696
|
-
(error.networkError && ((
|
|
1713
|
+
const isConnectionError = ((_k = error.message) === null || _k === void 0 ? void 0 : _k.includes('Server has closed the connection')) ||
|
|
1714
|
+
((_l = error.message) === null || _l === void 0 ? void 0 : _l.includes('Cannot reach database server')) ||
|
|
1715
|
+
((_m = error.message) === null || _m === void 0 ? void 0 : _m.includes('Connection timed out')) ||
|
|
1716
|
+
((_o = error.message) === null || _o === void 0 ? void 0 : _o.includes('Accelerate')) || // Prisma Accelerate proxy errors
|
|
1717
|
+
(error.networkError && ((_p = error.networkError.message) === null || _p === void 0 ? void 0 : _p.includes('Failed to fetch')));
|
|
1697
1718
|
if (isConnectionError && retryCount < MAX_RETRIES - 1) {
|
|
1698
1719
|
retryCount++;
|
|
1699
1720
|
const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
|
|
1700
|
-
logger_1.logger.warn("Database connection error, retrying..."
|
|
1721
|
+
logger_1.logger.warn("Database connection error in createOneABTest, retrying...", {
|
|
1722
|
+
operation: 'createOneABTest',
|
|
1723
|
+
model: 'ABTest',
|
|
1724
|
+
attempt: retryCount,
|
|
1725
|
+
maxRetries: MAX_RETRIES,
|
|
1726
|
+
});
|
|
1701
1727
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
1702
1728
|
continue;
|
|
1703
1729
|
}
|
|
1704
|
-
// Log
|
|
1705
|
-
logger_1.logger.error("Database
|
|
1730
|
+
// Log structured error details and rethrow
|
|
1731
|
+
logger_1.logger.error("Database create operation failed", {
|
|
1732
|
+
operation: 'createOneABTest',
|
|
1733
|
+
model: 'ABTest',
|
|
1734
|
+
error: String(error),
|
|
1735
|
+
isRetryable: isConnectionError,
|
|
1736
|
+
});
|
|
1706
1737
|
throw error;
|
|
1707
1738
|
}
|
|
1708
1739
|
}
|
|
@@ -1717,7 +1748,7 @@ exports.ABTest = {
|
|
|
1717
1748
|
* @returns The count of created records or null.
|
|
1718
1749
|
*/
|
|
1719
1750
|
async createMany(props, globalClient) {
|
|
1720
|
-
var _a, _b, _c, _d, _e;
|
|
1751
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
1721
1752
|
// Maximum number of retries for database connection issues
|
|
1722
1753
|
const MAX_RETRIES = 3;
|
|
1723
1754
|
let retryCount = 0;
|
|
@@ -1785,21 +1816,52 @@ exports.ABTest = {
|
|
|
1785
1816
|
}
|
|
1786
1817
|
catch (error) {
|
|
1787
1818
|
lastError = error;
|
|
1819
|
+
// Check for constraint violations FIRST - these are NEVER retryable
|
|
1820
|
+
const isConstraintViolation = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('violates check constraint')) ||
|
|
1821
|
+
((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('violates unique constraint')) ||
|
|
1822
|
+
((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('violates foreign key constraint')) ||
|
|
1823
|
+
((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('unique constraint')) ||
|
|
1824
|
+
((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('23514')) ||
|
|
1825
|
+
((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('23505')) ||
|
|
1826
|
+
((_g = error.message) === null || _g === void 0 ? void 0 : _g.includes('P2002')) ||
|
|
1827
|
+
((_h = error.message) === null || _h === void 0 ? void 0 : _h.includes('P2003'));
|
|
1828
|
+
if (isConstraintViolation) {
|
|
1829
|
+
const constraintMatch = (_j = error.message) === null || _j === void 0 ? void 0 : _j.match(/constraint\s+"([^"]+)"/);
|
|
1830
|
+
logger_1.logger.error("Non-retryable constraint violation in createManyABTest", {
|
|
1831
|
+
operation: 'createManyABTest',
|
|
1832
|
+
model: 'ABTest',
|
|
1833
|
+
error: String(error),
|
|
1834
|
+
constraintName: constraintMatch ? constraintMatch[1] : undefined,
|
|
1835
|
+
errorCategory: 'CONSTRAINT_VIOLATION',
|
|
1836
|
+
isRetryable: false,
|
|
1837
|
+
});
|
|
1838
|
+
throw error;
|
|
1839
|
+
}
|
|
1788
1840
|
// Check if this is a database connection error that we should retry
|
|
1789
|
-
const isConnectionError = ((
|
|
1790
|
-
((
|
|
1791
|
-
((
|
|
1792
|
-
((
|
|
1793
|
-
(error.networkError && ((
|
|
1841
|
+
const isConnectionError = ((_k = error.message) === null || _k === void 0 ? void 0 : _k.includes('Server has closed the connection')) ||
|
|
1842
|
+
((_l = error.message) === null || _l === void 0 ? void 0 : _l.includes('Cannot reach database server')) ||
|
|
1843
|
+
((_m = error.message) === null || _m === void 0 ? void 0 : _m.includes('Connection timed out')) ||
|
|
1844
|
+
((_o = error.message) === null || _o === void 0 ? void 0 : _o.includes('Accelerate')) || // Prisma Accelerate proxy errors
|
|
1845
|
+
(error.networkError && ((_p = error.networkError.message) === null || _p === void 0 ? void 0 : _p.includes('Failed to fetch')));
|
|
1794
1846
|
if (isConnectionError && retryCount < MAX_RETRIES - 1) {
|
|
1795
1847
|
retryCount++;
|
|
1796
1848
|
const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
|
|
1797
|
-
logger_1.logger.warn("Database connection error, retrying..."
|
|
1849
|
+
logger_1.logger.warn("Database connection error in createManyABTest, retrying...", {
|
|
1850
|
+
operation: 'createManyABTest',
|
|
1851
|
+
model: 'ABTest',
|
|
1852
|
+
attempt: retryCount,
|
|
1853
|
+
maxRetries: MAX_RETRIES,
|
|
1854
|
+
});
|
|
1798
1855
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
1799
1856
|
continue;
|
|
1800
1857
|
}
|
|
1801
|
-
// Log
|
|
1802
|
-
logger_1.logger.error("Database
|
|
1858
|
+
// Log structured error details and rethrow
|
|
1859
|
+
logger_1.logger.error("Database createMany operation failed", {
|
|
1860
|
+
operation: 'createManyABTest',
|
|
1861
|
+
model: 'ABTest',
|
|
1862
|
+
error: String(error),
|
|
1863
|
+
isRetryable: isConnectionError,
|
|
1864
|
+
});
|
|
1803
1865
|
throw error;
|
|
1804
1866
|
}
|
|
1805
1867
|
}
|
|
@@ -1814,7 +1876,7 @@ exports.ABTest = {
|
|
|
1814
1876
|
* @returns The updated ABTest or null.
|
|
1815
1877
|
*/
|
|
1816
1878
|
async update(props, globalClient) {
|
|
1817
|
-
var _a, _b, _c, _d, _e;
|
|
1879
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
1818
1880
|
// Maximum number of retries for database connection issues
|
|
1819
1881
|
const MAX_RETRIES = 3;
|
|
1820
1882
|
let retryCount = 0;
|
|
@@ -7974,21 +8036,55 @@ exports.ABTest = {
|
|
|
7974
8036
|
}
|
|
7975
8037
|
catch (error) {
|
|
7976
8038
|
lastError = error;
|
|
8039
|
+
// Check for constraint violations FIRST - these are NEVER retryable
|
|
8040
|
+
const isConstraintViolation = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('violates check constraint')) ||
|
|
8041
|
+
((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('violates unique constraint')) ||
|
|
8042
|
+
((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('violates foreign key constraint')) ||
|
|
8043
|
+
((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('unique constraint')) ||
|
|
8044
|
+
((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('23514')) ||
|
|
8045
|
+
((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('23505')) ||
|
|
8046
|
+
((_g = error.message) === null || _g === void 0 ? void 0 : _g.includes('P2002')) ||
|
|
8047
|
+
((_h = error.message) === null || _h === void 0 ? void 0 : _h.includes('P2003'));
|
|
8048
|
+
if (isConstraintViolation) {
|
|
8049
|
+
const constraintMatch = (_j = error.message) === null || _j === void 0 ? void 0 : _j.match(/constraint\s+"([^"]+)"/);
|
|
8050
|
+
logger_1.logger.error("Non-retryable constraint violation in updateOneABTest", {
|
|
8051
|
+
operation: 'updateOneABTest',
|
|
8052
|
+
model: 'ABTest',
|
|
8053
|
+
error: String(error),
|
|
8054
|
+
recordId: props.id,
|
|
8055
|
+
constraintName: constraintMatch ? constraintMatch[1] : undefined,
|
|
8056
|
+
errorCategory: 'CONSTRAINT_VIOLATION',
|
|
8057
|
+
isRetryable: false,
|
|
8058
|
+
});
|
|
8059
|
+
throw error;
|
|
8060
|
+
}
|
|
7977
8061
|
// Check if this is a database connection error that we should retry
|
|
7978
|
-
const isConnectionError = ((
|
|
7979
|
-
((
|
|
7980
|
-
((
|
|
7981
|
-
((
|
|
7982
|
-
(error.networkError && ((
|
|
8062
|
+
const isConnectionError = ((_k = error.message) === null || _k === void 0 ? void 0 : _k.includes('Server has closed the connection')) ||
|
|
8063
|
+
((_l = error.message) === null || _l === void 0 ? void 0 : _l.includes('Cannot reach database server')) ||
|
|
8064
|
+
((_m = error.message) === null || _m === void 0 ? void 0 : _m.includes('Connection timed out')) ||
|
|
8065
|
+
((_o = error.message) === null || _o === void 0 ? void 0 : _o.includes('Accelerate')) || // Prisma Accelerate proxy errors
|
|
8066
|
+
(error.networkError && ((_p = error.networkError.message) === null || _p === void 0 ? void 0 : _p.includes('Failed to fetch')));
|
|
7983
8067
|
if (isConnectionError && retryCount < MAX_RETRIES - 1) {
|
|
7984
8068
|
retryCount++;
|
|
7985
8069
|
const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
|
|
7986
|
-
logger_1.logger.warn("Database connection error, retrying..."
|
|
8070
|
+
logger_1.logger.warn("Database connection error in updateOneABTest, retrying...", {
|
|
8071
|
+
operation: 'updateOneABTest',
|
|
8072
|
+
model: 'ABTest',
|
|
8073
|
+
attempt: retryCount,
|
|
8074
|
+
maxRetries: MAX_RETRIES,
|
|
8075
|
+
recordId: props.id,
|
|
8076
|
+
});
|
|
7987
8077
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
7988
8078
|
continue;
|
|
7989
8079
|
}
|
|
7990
|
-
// Log
|
|
7991
|
-
logger_1.logger.error("Database
|
|
8080
|
+
// Log structured error details and rethrow
|
|
8081
|
+
logger_1.logger.error("Database update operation failed", {
|
|
8082
|
+
operation: 'updateOneABTest',
|
|
8083
|
+
model: 'ABTest',
|
|
8084
|
+
error: String(error),
|
|
8085
|
+
recordId: props.id,
|
|
8086
|
+
isRetryable: isConnectionError,
|
|
8087
|
+
});
|
|
7992
8088
|
throw error;
|
|
7993
8089
|
}
|
|
7994
8090
|
}
|
|
@@ -8003,7 +8099,7 @@ exports.ABTest = {
|
|
|
8003
8099
|
* @returns The updated ABTest or null.
|
|
8004
8100
|
*/
|
|
8005
8101
|
async upsert(props, globalClient) {
|
|
8006
|
-
var _a, _b, _c, _d, _e;
|
|
8102
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
8007
8103
|
// Maximum number of retries for database connection issues
|
|
8008
8104
|
const MAX_RETRIES = 3;
|
|
8009
8105
|
let retryCount = 0;
|
|
@@ -15559,21 +15655,55 @@ exports.ABTest = {
|
|
|
15559
15655
|
}
|
|
15560
15656
|
catch (error) {
|
|
15561
15657
|
lastError = error;
|
|
15658
|
+
// Check for constraint violations FIRST - these are NEVER retryable
|
|
15659
|
+
const isConstraintViolation = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('violates check constraint')) ||
|
|
15660
|
+
((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('violates unique constraint')) ||
|
|
15661
|
+
((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('violates foreign key constraint')) ||
|
|
15662
|
+
((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('unique constraint')) ||
|
|
15663
|
+
((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('23514')) ||
|
|
15664
|
+
((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('23505')) ||
|
|
15665
|
+
((_g = error.message) === null || _g === void 0 ? void 0 : _g.includes('P2002')) ||
|
|
15666
|
+
((_h = error.message) === null || _h === void 0 ? void 0 : _h.includes('P2003'));
|
|
15667
|
+
if (isConstraintViolation) {
|
|
15668
|
+
const constraintMatch = (_j = error.message) === null || _j === void 0 ? void 0 : _j.match(/constraint\s+"([^"]+)"/);
|
|
15669
|
+
logger_1.logger.error("Non-retryable constraint violation in upsertOneABTest", {
|
|
15670
|
+
operation: 'upsertOneABTest',
|
|
15671
|
+
model: 'ABTest',
|
|
15672
|
+
error: String(error),
|
|
15673
|
+
recordId: props.id,
|
|
15674
|
+
constraintName: constraintMatch ? constraintMatch[1] : undefined,
|
|
15675
|
+
errorCategory: 'CONSTRAINT_VIOLATION',
|
|
15676
|
+
isRetryable: false,
|
|
15677
|
+
});
|
|
15678
|
+
throw error;
|
|
15679
|
+
}
|
|
15562
15680
|
// Check if this is a database connection error that we should retry
|
|
15563
|
-
const isConnectionError = ((
|
|
15564
|
-
((
|
|
15565
|
-
((
|
|
15566
|
-
((
|
|
15567
|
-
(error.networkError && ((
|
|
15681
|
+
const isConnectionError = ((_k = error.message) === null || _k === void 0 ? void 0 : _k.includes('Server has closed the connection')) ||
|
|
15682
|
+
((_l = error.message) === null || _l === void 0 ? void 0 : _l.includes('Cannot reach database server')) ||
|
|
15683
|
+
((_m = error.message) === null || _m === void 0 ? void 0 : _m.includes('Connection timed out')) ||
|
|
15684
|
+
((_o = error.message) === null || _o === void 0 ? void 0 : _o.includes('Accelerate')) || // Prisma Accelerate proxy errors
|
|
15685
|
+
(error.networkError && ((_p = error.networkError.message) === null || _p === void 0 ? void 0 : _p.includes('Failed to fetch')));
|
|
15568
15686
|
if (isConnectionError && retryCount < MAX_RETRIES - 1) {
|
|
15569
15687
|
retryCount++;
|
|
15570
15688
|
const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
|
|
15571
|
-
logger_1.logger.warn("Database connection error, retrying..."
|
|
15689
|
+
logger_1.logger.warn("Database connection error in upsertOneABTest, retrying...", {
|
|
15690
|
+
operation: 'upsertOneABTest',
|
|
15691
|
+
model: 'ABTest',
|
|
15692
|
+
attempt: retryCount,
|
|
15693
|
+
maxRetries: MAX_RETRIES,
|
|
15694
|
+
recordId: props.id,
|
|
15695
|
+
});
|
|
15572
15696
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
15573
15697
|
continue;
|
|
15574
15698
|
}
|
|
15575
|
-
// Log
|
|
15576
|
-
logger_1.logger.error("Database
|
|
15699
|
+
// Log structured error details and rethrow
|
|
15700
|
+
logger_1.logger.error("Database upsert operation failed", {
|
|
15701
|
+
operation: 'upsertOneABTest',
|
|
15702
|
+
model: 'ABTest',
|
|
15703
|
+
error: String(error),
|
|
15704
|
+
recordId: props.id,
|
|
15705
|
+
isRetryable: isConnectionError,
|
|
15706
|
+
});
|
|
15577
15707
|
throw error;
|
|
15578
15708
|
}
|
|
15579
15709
|
}
|
|
@@ -15588,7 +15718,7 @@ exports.ABTest = {
|
|
|
15588
15718
|
* @returns The count of created records or null.
|
|
15589
15719
|
*/
|
|
15590
15720
|
async updateMany(props, globalClient) {
|
|
15591
|
-
var _a, _b, _c, _d, _e;
|
|
15721
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
15592
15722
|
// Maximum number of retries for database connection issues
|
|
15593
15723
|
const MAX_RETRIES = 3;
|
|
15594
15724
|
let retryCount = 0;
|
|
@@ -21748,21 +21878,52 @@ exports.ABTest = {
|
|
|
21748
21878
|
}
|
|
21749
21879
|
catch (error) {
|
|
21750
21880
|
lastError = error;
|
|
21881
|
+
// Check for constraint violations FIRST - these are NEVER retryable
|
|
21882
|
+
const isConstraintViolation = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('violates check constraint')) ||
|
|
21883
|
+
((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('violates unique constraint')) ||
|
|
21884
|
+
((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('violates foreign key constraint')) ||
|
|
21885
|
+
((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('unique constraint')) ||
|
|
21886
|
+
((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('23514')) ||
|
|
21887
|
+
((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('23505')) ||
|
|
21888
|
+
((_g = error.message) === null || _g === void 0 ? void 0 : _g.includes('P2002')) ||
|
|
21889
|
+
((_h = error.message) === null || _h === void 0 ? void 0 : _h.includes('P2003'));
|
|
21890
|
+
if (isConstraintViolation) {
|
|
21891
|
+
const constraintMatch = (_j = error.message) === null || _j === void 0 ? void 0 : _j.match(/constraint\s+"([^"]+)"/);
|
|
21892
|
+
logger_1.logger.error("Non-retryable constraint violation in updateManyABTest", {
|
|
21893
|
+
operation: 'updateManyABTest',
|
|
21894
|
+
model: 'ABTest',
|
|
21895
|
+
error: String(error),
|
|
21896
|
+
constraintName: constraintMatch ? constraintMatch[1] : undefined,
|
|
21897
|
+
errorCategory: 'CONSTRAINT_VIOLATION',
|
|
21898
|
+
isRetryable: false,
|
|
21899
|
+
});
|
|
21900
|
+
throw error;
|
|
21901
|
+
}
|
|
21751
21902
|
// Check if this is a database connection error that we should retry
|
|
21752
|
-
const isConnectionError = ((
|
|
21753
|
-
((
|
|
21754
|
-
((
|
|
21755
|
-
((
|
|
21756
|
-
(error.networkError && ((
|
|
21903
|
+
const isConnectionError = ((_k = error.message) === null || _k === void 0 ? void 0 : _k.includes('Server has closed the connection')) ||
|
|
21904
|
+
((_l = error.message) === null || _l === void 0 ? void 0 : _l.includes('Cannot reach database server')) ||
|
|
21905
|
+
((_m = error.message) === null || _m === void 0 ? void 0 : _m.includes('Connection timed out')) ||
|
|
21906
|
+
((_o = error.message) === null || _o === void 0 ? void 0 : _o.includes('Accelerate')) || // Prisma Accelerate proxy errors
|
|
21907
|
+
(error.networkError && ((_p = error.networkError.message) === null || _p === void 0 ? void 0 : _p.includes('Failed to fetch')));
|
|
21757
21908
|
if (isConnectionError && retryCount < MAX_RETRIES - 1) {
|
|
21758
21909
|
retryCount++;
|
|
21759
21910
|
const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
|
|
21760
|
-
logger_1.logger.warn("Database connection error, retrying..."
|
|
21911
|
+
logger_1.logger.warn("Database connection error in updateManyABTest, retrying...", {
|
|
21912
|
+
operation: 'updateManyABTest',
|
|
21913
|
+
model: 'ABTest',
|
|
21914
|
+
attempt: retryCount,
|
|
21915
|
+
maxRetries: MAX_RETRIES,
|
|
21916
|
+
});
|
|
21761
21917
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
21762
21918
|
continue;
|
|
21763
21919
|
}
|
|
21764
|
-
// Log
|
|
21765
|
-
logger_1.logger.error("Database
|
|
21920
|
+
// Log structured error details and rethrow
|
|
21921
|
+
logger_1.logger.error("Database updateMany operation failed", {
|
|
21922
|
+
operation: 'updateManyABTest',
|
|
21923
|
+
model: 'ABTest',
|
|
21924
|
+
error: String(error),
|
|
21925
|
+
isRetryable: isConnectionError,
|
|
21926
|
+
});
|
|
21766
21927
|
throw error;
|
|
21767
21928
|
}
|
|
21768
21929
|
}
|
|
@@ -21777,7 +21938,7 @@ exports.ABTest = {
|
|
|
21777
21938
|
* @returns The deleted ABTest or null.
|
|
21778
21939
|
*/
|
|
21779
21940
|
async delete(props, globalClient) {
|
|
21780
|
-
var _a, _b, _c, _d, _e;
|
|
21941
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
21781
21942
|
// Maximum number of retries for database connection issues
|
|
21782
21943
|
const MAX_RETRIES = 3;
|
|
21783
21944
|
let retryCount = 0;
|
|
@@ -21821,21 +21982,58 @@ exports.ABTest = {
|
|
|
21821
21982
|
}
|
|
21822
21983
|
catch (error) {
|
|
21823
21984
|
lastError = error;
|
|
21985
|
+
// Check for constraint violations FIRST - these are NEVER retryable
|
|
21986
|
+
// (e.g., foreign key constraints preventing deletion)
|
|
21987
|
+
const isConstraintViolation = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('violates check constraint')) ||
|
|
21988
|
+
((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('violates unique constraint')) ||
|
|
21989
|
+
((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('violates foreign key constraint')) ||
|
|
21990
|
+
((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('unique constraint')) ||
|
|
21991
|
+
((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('23514')) ||
|
|
21992
|
+
((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('23505')) ||
|
|
21993
|
+
((_g = error.message) === null || _g === void 0 ? void 0 : _g.includes('23503')) ||
|
|
21994
|
+
((_h = error.message) === null || _h === void 0 ? void 0 : _h.includes('P2002')) ||
|
|
21995
|
+
((_j = error.message) === null || _j === void 0 ? void 0 : _j.includes('P2003')) ||
|
|
21996
|
+
((_k = error.message) === null || _k === void 0 ? void 0 : _k.includes('P2014'));
|
|
21997
|
+
if (isConstraintViolation) {
|
|
21998
|
+
const constraintMatch = (_l = error.message) === null || _l === void 0 ? void 0 : _l.match(/constraint\s+"([^"]+)"/);
|
|
21999
|
+
logger_1.logger.error("Non-retryable constraint violation in deleteOneABTest", {
|
|
22000
|
+
operation: 'deleteOneABTest',
|
|
22001
|
+
model: 'ABTest',
|
|
22002
|
+
error: String(error),
|
|
22003
|
+
recordId: props.id,
|
|
22004
|
+
constraintName: constraintMatch ? constraintMatch[1] : undefined,
|
|
22005
|
+
errorCategory: 'CONSTRAINT_VIOLATION',
|
|
22006
|
+
isRetryable: false,
|
|
22007
|
+
});
|
|
22008
|
+
throw error;
|
|
22009
|
+
}
|
|
21824
22010
|
// Check if this is a database connection error that we should retry
|
|
21825
|
-
const isConnectionError = ((
|
|
21826
|
-
((
|
|
21827
|
-
((
|
|
21828
|
-
((
|
|
21829
|
-
(error.networkError && ((
|
|
22011
|
+
const isConnectionError = ((_m = error.message) === null || _m === void 0 ? void 0 : _m.includes('Server has closed the connection')) ||
|
|
22012
|
+
((_o = error.message) === null || _o === void 0 ? void 0 : _o.includes('Cannot reach database server')) ||
|
|
22013
|
+
((_p = error.message) === null || _p === void 0 ? void 0 : _p.includes('Connection timed out')) ||
|
|
22014
|
+
((_q = error.message) === null || _q === void 0 ? void 0 : _q.includes('Accelerate')) || // Prisma Accelerate proxy errors
|
|
22015
|
+
(error.networkError && ((_r = error.networkError.message) === null || _r === void 0 ? void 0 : _r.includes('Failed to fetch')));
|
|
21830
22016
|
if (isConnectionError && retryCount < MAX_RETRIES - 1) {
|
|
21831
22017
|
retryCount++;
|
|
21832
22018
|
const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
|
|
21833
|
-
logger_1.logger.warn("Database connection error, retrying..."
|
|
22019
|
+
logger_1.logger.warn("Database connection error in deleteOneABTest, retrying...", {
|
|
22020
|
+
operation: 'deleteOneABTest',
|
|
22021
|
+
model: 'ABTest',
|
|
22022
|
+
attempt: retryCount,
|
|
22023
|
+
maxRetries: MAX_RETRIES,
|
|
22024
|
+
recordId: props.id,
|
|
22025
|
+
});
|
|
21834
22026
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
21835
22027
|
continue;
|
|
21836
22028
|
}
|
|
21837
|
-
// Log
|
|
21838
|
-
logger_1.logger.error("Database
|
|
22029
|
+
// Log structured error details and rethrow
|
|
22030
|
+
logger_1.logger.error("Database delete operation failed", {
|
|
22031
|
+
operation: 'deleteOneABTest',
|
|
22032
|
+
model: 'ABTest',
|
|
22033
|
+
error: String(error),
|
|
22034
|
+
recordId: props.id,
|
|
22035
|
+
isRetryable: isConnectionError,
|
|
22036
|
+
});
|
|
21839
22037
|
throw error;
|
|
21840
22038
|
}
|
|
21841
22039
|
}
|
|
@@ -21911,12 +22109,22 @@ exports.ABTest = {
|
|
|
21911
22109
|
if (isConnectionError && retryCount < MAX_RETRIES - 1) {
|
|
21912
22110
|
retryCount++;
|
|
21913
22111
|
const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
|
|
21914
|
-
logger_1.logger.warn("Database connection error, retrying..."
|
|
22112
|
+
logger_1.logger.warn("Database connection error in getABTest, retrying...", {
|
|
22113
|
+
operation: 'getABTest',
|
|
22114
|
+
model: 'ABTest',
|
|
22115
|
+
attempt: retryCount,
|
|
22116
|
+
maxRetries: MAX_RETRIES,
|
|
22117
|
+
});
|
|
21915
22118
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
21916
22119
|
continue;
|
|
21917
22120
|
}
|
|
21918
|
-
// Log
|
|
21919
|
-
logger_1.logger.error("Database
|
|
22121
|
+
// Log structured error details and rethrow
|
|
22122
|
+
logger_1.logger.error("Database get operation failed", {
|
|
22123
|
+
operation: 'getABTest',
|
|
22124
|
+
model: 'ABTest',
|
|
22125
|
+
error: String(error),
|
|
22126
|
+
isRetryable: isConnectionError,
|
|
22127
|
+
});
|
|
21920
22128
|
throw error;
|
|
21921
22129
|
}
|
|
21922
22130
|
}
|
|
@@ -21974,12 +22182,22 @@ exports.ABTest = {
|
|
|
21974
22182
|
if (isConnectionError && retryCount < MAX_RETRIES - 1) {
|
|
21975
22183
|
retryCount++;
|
|
21976
22184
|
const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
|
|
21977
|
-
logger_1.logger.warn("Database connection error, retrying..."
|
|
22185
|
+
logger_1.logger.warn("Database connection error in getAllABTest, retrying...", {
|
|
22186
|
+
operation: 'getAllABTest',
|
|
22187
|
+
model: 'ABTest',
|
|
22188
|
+
attempt: retryCount,
|
|
22189
|
+
maxRetries: MAX_RETRIES,
|
|
22190
|
+
});
|
|
21978
22191
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
21979
22192
|
continue;
|
|
21980
22193
|
}
|
|
21981
|
-
// Log
|
|
21982
|
-
logger_1.logger.error("Database
|
|
22194
|
+
// Log structured error details and rethrow
|
|
22195
|
+
logger_1.logger.error("Database getAll operation failed", {
|
|
22196
|
+
operation: 'getAllABTest',
|
|
22197
|
+
model: 'ABTest',
|
|
22198
|
+
error: String(error),
|
|
22199
|
+
isRetryable: isConnectionError,
|
|
22200
|
+
});
|
|
21983
22201
|
throw error;
|
|
21984
22202
|
}
|
|
21985
22203
|
}
|
|
@@ -22062,12 +22280,22 @@ exports.ABTest = {
|
|
|
22062
22280
|
if (isConnectionError && retryCount < MAX_RETRIES - 1) {
|
|
22063
22281
|
retryCount++;
|
|
22064
22282
|
const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
|
|
22065
|
-
logger_1.logger.warn("Database connection error, retrying..."
|
|
22283
|
+
logger_1.logger.warn("Database connection error in findManyABTest, retrying...", {
|
|
22284
|
+
operation: 'findManyABTest',
|
|
22285
|
+
model: 'ABTest',
|
|
22286
|
+
attempt: retryCount,
|
|
22287
|
+
maxRetries: MAX_RETRIES,
|
|
22288
|
+
});
|
|
22066
22289
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
22067
22290
|
continue;
|
|
22068
22291
|
}
|
|
22069
|
-
// Log
|
|
22070
|
-
logger_1.logger.error("Database
|
|
22292
|
+
// Log structured error details and rethrow
|
|
22293
|
+
logger_1.logger.error("Database findMany operation failed", {
|
|
22294
|
+
operation: 'findManyABTest',
|
|
22295
|
+
model: 'ABTest',
|
|
22296
|
+
error: String(error),
|
|
22297
|
+
isRetryable: isConnectionError,
|
|
22298
|
+
});
|
|
22071
22299
|
throw error;
|
|
22072
22300
|
}
|
|
22073
22301
|
}
|