opentool 0.20.1 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/hyperliquid/browser.d.ts +2 -2
- package/dist/adapters/hyperliquid/index.d.ts +3 -3
- package/dist/adapters/polymarket/index.d.ts +1 -1
- package/dist/{browser-z97Ptt32.d.ts → browser-Bf-eTSwj.d.ts} +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +1262 -5
- package/dist/index.js.map +1 -1
- package/dist/mpp/index.d.ts +64 -0
- package/dist/mpp/index.js +75 -0
- package/dist/mpp/index.js.map +1 -0
- package/dist/quant/index.d.ts +579 -0
- package/dist/quant/index.js +1103 -0
- package/dist/quant/index.js.map +1 -0
- package/dist/{types-BaTmu0gS.d.ts → types-D8s9zx-U.d.ts} +18 -1
- package/dist/wallet/browser.d.ts +1 -1
- package/dist/wallet/browser.js +27 -1
- package/dist/wallet/browser.js.map +1 -1
- package/dist/wallet/index.d.ts +2 -2
- package/dist/wallet/index.js +96 -4
- package/dist/wallet/index.js.map +1 -1
- package/package.json +11 -2
- package/templates/base/package.json +1 -1
- package/templates/polymarket-simple-trade/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/quant/schemas.ts","../../src/quant/bars.ts","../../src/quant/decision-series.ts","../../src/quant/features/beta.ts","../../src/quant/features/correlation.ts","../../src/quant/features/funding.ts","../../src/quant/features/momentum.ts","../../src/quant/features/relative-strength.ts","../../src/quant/features/returns.ts","../../src/quant/indicators/sma.ts","../../src/quant/features/volume.ts","../../src/quant/indicators/atr.ts","../../src/quant/indicators/bollinger.ts","../../src/quant/indicators/donchian.ts","../../src/quant/indicators/ema.ts","../../src/quant/indicators/macd.ts","../../src/quant/indicators/rsi.ts","../../src/quant/indicators/volatility.ts","../../src/quant/indicators/zscore.ts","../../src/quant/lineage.ts","../../src/quant/result.ts","../../src/quant/signal-study/adverse-excursion.ts","../../src/quant/signal-study/event-windows.ts","../../src/quant/signal-study/forward-returns.ts","../../src/quant/signal-study/hit-rate.ts","../../src/quant/signal-study/information-coefficient.ts","../../src/quant/signal-study/summary.ts","../../src/quant/strategies/breakout.ts","../../src/quant/strategies/funding-carry.ts","../../src/quant/strategies/macd-trend.ts","../../src/quant/strategies/ma-cross.ts","../../src/quant/strategies/momentum.ts","../../src/quant/strategies/registry.ts","../../src/quant/strategies/rsi-mean-reversion.ts","../../src/quant/strategies/rule-evaluator.ts","../../src/quant/strategies/zscore-mean-reversion.ts","../../src/quant/tester/plan.ts","../../src/quant/tester/report.ts","../../src/quant/tester/warnings.ts","../../src/quant/tester/run-idea-test.ts","../../src/quant/tester/run-signal-study.ts","../../src/quant/timeframes.ts"],"names":["horizonBars"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nexport const quantStrategyFamilySchema = z.enum([\n \"benchmark\",\n \"signal_rule\",\n \"trend\",\n \"mean_reversion\",\n \"stat_arb\",\n \"carry\",\n \"hedge\",\n \"execution\",\n \"market_making\",\n \"options\",\n \"regime_ml\",\n \"prediction_market\",\n \"defi_lp\",\n]);\nexport type QuantStrategyFamily = z.infer<typeof quantStrategyFamilySchema>;\n\nexport const quantTestKindSchema = z.enum([\n \"prompt_plan_check\",\n \"data_availability\",\n \"signal_study\",\n \"idea_rule_simulation\",\n \"variant_sensitivity\",\n \"leakage_check\",\n \"cost_stress\",\n]);\nexport type QuantTestKind = z.infer<typeof quantTestKindSchema>;\n\nexport const quantResolutionSchema = z.enum([\"1\", \"5\", \"15\", \"30\", \"60\", \"240\", \"1D\", \"1W\"]);\nexport type QuantResolution = z.infer<typeof quantResolutionSchema>;\n\nexport const quantBarSchema = z\n .object({\n time: z.number().int().nonnegative(),\n open: z.number().positive(),\n high: z.number().positive(),\n low: z.number().positive(),\n close: z.number().positive(),\n volume: z.number().nonnegative().optional(),\n fundingRate: z.number().optional(),\n })\n .strict();\nexport type QuantBar = z.infer<typeof quantBarSchema>;\n\nexport const quantFeatureSpecSchema = z\n .object({\n id: z.string().min(1),\n kind: z.string().min(1),\n params: z.record(z.string(), z.unknown()).default({}),\n })\n .strict();\nexport type QuantFeatureSpec = z.infer<typeof quantFeatureSpecSchema>;\n\nexport const quantRuleSpecSchema = z\n .object({\n kind: z.string().min(1),\n params: z.record(z.string(), z.unknown()).default({}),\n })\n .strict();\nexport type QuantRuleSpec = z.infer<typeof quantRuleSpecSchema>;\n\nexport const quantIdeaSpecV1Schema = z\n .object({\n version: z.literal(\"1\"),\n family: quantStrategyFamilySchema,\n thesis: z\n .object({\n title: z.string().min(1),\n belief: z.string().min(1),\n expectedDirection: z.enum([\n \"up\",\n \"down\",\n \"relative\",\n \"mean_revert\",\n \"volatility\",\n \"carry\",\n \"hedge\",\n \"unknown\",\n ]),\n horizon: z.array(z.string().min(1)).min(1),\n })\n .strict(),\n market: z\n .object({\n venue: z.enum([\"hyperliquid\", \"polymarket\", \"derive\", \"external_fixture\"]),\n symbol: z.string().min(1).optional(),\n universe: z.array(z.string().min(1)).optional(),\n })\n .strict(),\n requiredSources: z.array(z.string().min(1)).default([]),\n features: z.array(quantFeatureSpecSchema).default([]),\n rule: quantRuleSpecSchema.optional(),\n risk: z\n .object({\n maxPositionUsd: z.number().positive().optional(),\n maxLeverage: z.number().positive().optional(),\n stopLossPct: z.number().positive().optional(),\n takeProfitPct: z.number().positive().optional(),\n maxDrawdownPct: z.number().positive().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\nexport type QuantIdeaSpecV1 = z.infer<typeof quantIdeaSpecV1Schema>;\n\nexport const quantTestRequestV1Schema = z\n .object({\n version: z.literal(\"1\"),\n idea: quantIdeaSpecV1Schema,\n testKinds: z.array(quantTestKindSchema).min(1),\n window: z\n .object({\n resolution: quantResolutionSchema,\n timeframeStart: z.string().min(1),\n timeframeEnd: z.string().min(1),\n warmupBars: z.number().int().nonnegative().optional(),\n })\n .strict(),\n assumptions: z\n .object({\n initialEquityUsd: z.number().positive().optional(),\n makerFeeBps: z.number().nonnegative().optional(),\n takerFeeBps: z.number().nonnegative().optional(),\n slippageBps: z.number().nonnegative().optional(),\n fundingModel: z.enum([\"ignore\", \"historical\", \"estimated\"]).optional(),\n })\n .strict()\n .default({}),\n variantSpace: z.record(z.string(), z.unknown()).optional(),\n })\n .strict();\nexport type QuantTestRequestV1 = z.infer<typeof quantTestRequestV1Schema>;\n\nexport const quantDecisionActionSchema = z.enum([\"hold\", \"flat\", \"long\", \"short\", \"exit\"]);\nexport type QuantDecisionAction = z.infer<typeof quantDecisionActionSchema>;\n\nexport const quantDecisionSchema = z\n .object({\n time: z.number().int().nonnegative(),\n symbol: z.string().min(1),\n action: quantDecisionActionSchema,\n targetPosition: z.number(),\n reason: z.string().min(1),\n price: z.number().positive().optional(),\n })\n .strict();\nexport type QuantDecision = z.infer<typeof quantDecisionSchema>;\n\nexport const quantDecisionArtifactV1Schema = z\n .object({\n version: z.literal(\"1\"),\n family: quantStrategyFamilySchema,\n symbol: z.string().min(1),\n resolution: quantResolutionSchema,\n decisions: z.array(quantDecisionSchema),\n warnings: z.array(z.string()).default([]),\n })\n .strict();\nexport type QuantDecisionArtifactV1 = z.infer<typeof quantDecisionArtifactV1Schema>;\n\nexport const quantTesterReportV1Schema = z\n .object({\n ok: z.boolean(),\n testRunKind: z.enum([\n \"prompt_plan_check\",\n \"data_availability\",\n \"signal_study\",\n \"idea_rule_simulation\",\n \"variant_sensitivity\",\n ]),\n supported: z.boolean(),\n unsupportedReason: z.string().optional(),\n summary: z.string(),\n dataLineage: z\n .object({\n venue: z.string(),\n symbols: z.array(z.string()),\n resolution: quantResolutionSchema,\n timeframeStart: z.string(),\n timeframeEnd: z.string(),\n sourceIds: z.array(z.string()),\n warnings: z.array(z.string()),\n })\n .strict(),\n signalStudy: z.record(z.string(), z.unknown()).optional(),\n ideaSimulation: z.record(z.string(), z.unknown()).optional(),\n decisionArtifact: quantDecisionArtifactV1Schema.optional(),\n warnings: z.array(z.string()).default([]),\n })\n .strict();\nexport type QuantTesterReportV1 = z.infer<typeof quantTesterReportV1Schema>;\n","import { quantBarSchema, type QuantBar } from \"./schemas\";\n\nexport function normalizeQuantBars(input: unknown): QuantBar[] {\n const bars = quantBarSchema.array().parse(input).slice();\n bars.sort((a, b) => a.time - b.time);\n for (let index = 0; index < bars.length; index += 1) {\n const bar = bars[index];\n if (bar.high < Math.max(bar.open, bar.close) || bar.low > Math.min(bar.open, bar.close)) {\n throw new Error(`Invalid OHLC relationship at bar ${index}`);\n }\n if (index > 0 && bar.time <= bars[index - 1].time) {\n throw new Error(`Duplicate or non-increasing bar time at index ${index}`);\n }\n }\n return bars;\n}\n\nexport function closePrices(bars: QuantBar[]): number[] {\n return bars.map((bar) => bar.close);\n}\n\nexport function typicalPrices(bars: QuantBar[]): number[] {\n return bars.map((bar) => (bar.high + bar.low + bar.close) / 3);\n}\n\nexport function sliceBarsToWindow(params: {\n bars: QuantBar[];\n endSeconds: number;\n startSeconds: number;\n warmupBars?: number;\n}): QuantBar[] {\n const startIndex = params.bars.findIndex((bar) => bar.time >= params.startSeconds);\n const fromIndex = startIndex < 0 ? params.bars.length : Math.max(0, startIndex - (params.warmupBars ?? 0));\n return params.bars\n .slice(fromIndex)\n .filter((bar) => bar.time <= params.endSeconds);\n}\n","import {\n quantDecisionArtifactV1Schema,\n type QuantDecision,\n type QuantDecisionArtifactV1,\n} from \"./schemas\";\n\nexport function validateDecisionArtifact(value: unknown): QuantDecisionArtifactV1 {\n const artifact = quantDecisionArtifactV1Schema.parse(value);\n for (let index = 1; index < artifact.decisions.length; index += 1) {\n if (artifact.decisions[index].time < artifact.decisions[index - 1].time) {\n throw new Error(`Decision artifact times must be sorted at index ${index}`);\n }\n }\n return artifact;\n}\n\nexport function compactDecisionChanges(decisions: QuantDecision[]): QuantDecision[] {\n const compact: QuantDecision[] = [];\n let previousTarget: number | null = null;\n for (const decision of decisions) {\n if (previousTarget === null || decision.targetPosition !== previousTarget) {\n compact.push(decision);\n previousTarget = decision.targetPosition;\n }\n }\n return compact;\n}\n","export function beta(assetReturns: number[], benchmarkReturns: number[]): number | null {\n const length = Math.min(assetReturns.length, benchmarkReturns.length);\n if (length < 2) return null;\n const asset = assetReturns.slice(assetReturns.length - length);\n const benchmark = benchmarkReturns.slice(benchmarkReturns.length - length);\n const meanAsset = asset.reduce((total, value) => total + value, 0) / length;\n const meanBenchmark =\n benchmark.reduce((total, value) => total + value, 0) / length;\n let covariance = 0;\n let benchmarkVariance = 0;\n for (let index = 0; index < length; index += 1) {\n covariance += (asset[index] - meanAsset) * (benchmark[index] - meanBenchmark);\n benchmarkVariance += (benchmark[index] - meanBenchmark) ** 2;\n }\n return benchmarkVariance === 0 ? null : covariance / benchmarkVariance;\n}\n","export function correlation(a: number[], b: number[]): number | null {\n const length = Math.min(a.length, b.length);\n if (length < 2) return null;\n const left = a.slice(a.length - length);\n const right = b.slice(b.length - length);\n const meanA = left.reduce((total, value) => total + value, 0) / length;\n const meanB = right.reduce((total, value) => total + value, 0) / length;\n let covariance = 0;\n let varianceA = 0;\n let varianceB = 0;\n for (let index = 0; index < length; index += 1) {\n const da = left[index] - meanA;\n const db = right[index] - meanB;\n covariance += da * db;\n varianceA += da * da;\n varianceB += db * db;\n }\n if (varianceA === 0 || varianceB === 0) return null;\n return covariance / Math.sqrt(varianceA * varianceB);\n}\n\nexport function rollingCorrelation(\n a: number[],\n b: number[],\n period = 20,\n): Array<number | null> {\n return a.map((_, index) => {\n if (index < period - 1) return null;\n return correlation(\n a.slice(index - period + 1, index + 1),\n b.slice(index - period + 1, index + 1),\n );\n });\n}\n","import type { QuantBar } from \"../schemas\";\n\nexport function fundingRates(bars: QuantBar[]): number[] {\n return bars.map((bar) => bar.fundingRate ?? 0);\n}\n\nexport function cumulativeFunding(bars: QuantBar[]): number[] {\n let running = 0;\n return fundingRates(bars).map((rate) => {\n running += rate;\n return running;\n });\n}\n","export function momentum(values: number[], lookbackBars: number): Array<number | null> {\n if (!Number.isInteger(lookbackBars) || lookbackBars <= 0) {\n throw new Error(\"Momentum lookback must be a positive integer\");\n }\n return values.map((value, index) => {\n const prior = values[index - lookbackBars];\n return prior == null || prior === 0 ? null : value / prior - 1;\n });\n}\n","import { momentum } from \"./momentum\";\n\nexport function relativeStrength(\n assetPrices: number[],\n benchmarkPrices: number[],\n lookbackBars: number,\n): Array<number | null> {\n const assetMomentum = momentum(assetPrices, lookbackBars);\n const benchmarkMomentum = momentum(benchmarkPrices, lookbackBars);\n return assetMomentum.map((value, index) =>\n value == null || benchmarkMomentum[index] == null\n ? null\n : value - benchmarkMomentum[index],\n );\n}\n","export function simpleReturns(values: number[]): number[] {\n return values.map((value, index) => {\n if (index === 0) return 0;\n const previous = values[index - 1];\n return previous === 0 ? 0 : value / previous - 1;\n });\n}\n\nexport function logReturns(values: number[]): number[] {\n return values.map((value, index) => {\n if (index === 0) return 0;\n const previous = values[index - 1];\n return previous <= 0 || value <= 0 ? 0 : Math.log(value / previous);\n });\n}\n\nexport function forwardReturns(values: number[], horizonBars: number): Array<number | null> {\n if (!Number.isInteger(horizonBars) || horizonBars <= 0) {\n throw new Error(\"Forward return horizon must be a positive integer\");\n }\n return values.map((value, index) => {\n const future = values[index + horizonBars];\n return future == null || value === 0 ? null : future / value - 1;\n });\n}\n","export function sma(values: number[], period: number): Array<number | null> {\n if (!Number.isInteger(period) || period <= 0) {\n throw new Error(\"SMA period must be a positive integer\");\n }\n const output: Array<number | null> = [];\n let sum = 0;\n for (let index = 0; index < values.length; index += 1) {\n sum += values[index];\n if (index >= period) sum -= values[index - period];\n output.push(index >= period - 1 ? sum / period : null);\n }\n return output;\n}\n","import { sma } from \"../indicators/sma\";\nimport type { QuantBar } from \"../schemas\";\n\nexport function volumes(bars: QuantBar[]): number[] {\n return bars.map((bar) => bar.volume ?? 0);\n}\n\nexport function relativeVolume(bars: QuantBar[], period = 20): Array<number | null> {\n const raw = volumes(bars);\n const average = sma(raw, period);\n return raw.map((value, index) => {\n const baseline = average[index];\n return baseline == null || baseline === 0 ? null : value / baseline;\n });\n}\n","import type { QuantBar } from \"../schemas\";\nimport { sma } from \"./sma\";\n\nexport function trueRanges(bars: QuantBar[]): number[] {\n return bars.map((bar, index) => {\n const previousClose = index > 0 ? bars[index - 1].close : bar.close;\n return Math.max(\n bar.high - bar.low,\n Math.abs(bar.high - previousClose),\n Math.abs(bar.low - previousClose),\n );\n });\n}\n\nexport function atr(bars: QuantBar[], period = 14): Array<number | null> {\n return sma(trueRanges(bars), period);\n}\n","import { sma } from \"./sma\";\n\nexport type BollingerPoint = {\n lower: number | null;\n middle: number | null;\n upper: number | null;\n width: number | null;\n};\n\nexport function bollinger(values: number[], period = 20, standardDeviations = 2): BollingerPoint[] {\n const middle = sma(values, period);\n return values.map((_, index) => {\n const average = middle[index];\n if (average == null || index < period - 1) {\n return { lower: null, middle: null, upper: null, width: null };\n }\n const window = values.slice(index - period + 1, index + 1);\n const variance =\n window.reduce((total, value) => total + (value - average) ** 2, 0) / period;\n const deviation = Math.sqrt(variance);\n const lower = average - deviation * standardDeviations;\n const upper = average + deviation * standardDeviations;\n return {\n lower,\n middle: average,\n upper,\n width: average === 0 ? null : (upper - lower) / average,\n };\n });\n}\n","export type DonchianPoint = {\n lower: number | null;\n upper: number | null;\n};\n\nexport function donchian(\n highs: number[],\n lows: number[],\n period = 20,\n): DonchianPoint[] {\n if (highs.length !== lows.length) {\n throw new Error(\"Donchian high/low arrays must have the same length\");\n }\n if (!Number.isInteger(period) || period <= 0) {\n throw new Error(\"Donchian period must be a positive integer\");\n }\n return highs.map((_, index) => {\n if (index < period - 1) return { lower: null, upper: null };\n const highWindow = highs.slice(index - period + 1, index + 1);\n const lowWindow = lows.slice(index - period + 1, index + 1);\n return {\n lower: Math.min(...lowWindow),\n upper: Math.max(...highWindow),\n };\n });\n}\n","export function ema(values: number[], period: number): Array<number | null> {\n if (!Number.isInteger(period) || period <= 0) {\n throw new Error(\"EMA period must be a positive integer\");\n }\n const output: Array<number | null> = [];\n const multiplier = 2 / (period + 1);\n let previous: number | null = null;\n let seedSum = 0;\n\n for (let index = 0; index < values.length; index += 1) {\n const value = values[index];\n if (index < period) {\n seedSum += value;\n if (index === period - 1) {\n previous = seedSum / period;\n output.push(previous);\n } else {\n output.push(null);\n }\n continue;\n }\n previous = previous == null ? value : (value - previous) * multiplier + previous;\n output.push(previous);\n }\n return output;\n}\n","import { ema } from \"./ema\";\n\nexport type MacdPoint = {\n histogram: number | null;\n macd: number | null;\n signal: number | null;\n};\n\nexport function macd(values: number[], fastPeriod = 12, slowPeriod = 26, signalPeriod = 9): MacdPoint[] {\n if (fastPeriod >= slowPeriod) {\n throw new Error(\"MACD fast period must be less than slow period\");\n }\n const fast = ema(values, fastPeriod);\n const slow = ema(values, slowPeriod);\n const macdLine = values.map((_, index) =>\n fast[index] == null || slow[index] == null ? null : fast[index] - slow[index],\n );\n const signalInput = macdLine.map((value) => value ?? 0);\n const signalLine = ema(signalInput, signalPeriod);\n return values.map((_, index) => {\n const macdValue = macdLine[index];\n const signalValue = macdValue == null ? null : signalLine[index];\n return {\n macd: macdValue,\n signal: signalValue,\n histogram:\n macdValue == null || signalValue == null ? null : macdValue - signalValue,\n };\n });\n}\n","export function rsi(values: number[], period = 14): Array<number | null> {\n if (!Number.isInteger(period) || period <= 0) {\n throw new Error(\"RSI period must be a positive integer\");\n }\n const output: Array<number | null> = Array.from({ length: values.length }, () => null);\n if (values.length <= period) return output;\n\n let gainSum = 0;\n let lossSum = 0;\n for (let index = 1; index <= period; index += 1) {\n const delta = values[index] - values[index - 1];\n if (delta >= 0) gainSum += delta;\n else lossSum += Math.abs(delta);\n }\n\n let averageGain = gainSum / period;\n let averageLoss = lossSum / period;\n output[period] = averageLoss === 0 ? 100 : 100 - 100 / (1 + averageGain / averageLoss);\n\n for (let index = period + 1; index < values.length; index += 1) {\n const delta = values[index] - values[index - 1];\n const gain = delta > 0 ? delta : 0;\n const loss = delta < 0 ? Math.abs(delta) : 0;\n averageGain = (averageGain * (period - 1) + gain) / period;\n averageLoss = (averageLoss * (period - 1) + loss) / period;\n output[index] = averageLoss === 0 ? 100 : 100 - 100 / (1 + averageGain / averageLoss);\n }\n\n return output;\n}\n","export function rollingVolatility(returns: number[], period = 20, annualization = 365): Array<number | null> {\n if (!Number.isInteger(period) || period <= 1) {\n throw new Error(\"Volatility period must be an integer greater than 1\");\n }\n return returns.map((_, index) => {\n if (index < period - 1) return null;\n const window = returns.slice(index - period + 1, index + 1);\n const mean = window.reduce((total, value) => total + value, 0) / period;\n const variance =\n window.reduce((total, value) => total + (value - mean) ** 2, 0) / (period - 1);\n return Math.sqrt(variance) * Math.sqrt(annualization);\n });\n}\n","export function rollingZScore(values: number[], period = 20): Array<number | null> {\n if (!Number.isInteger(period) || period <= 1) {\n throw new Error(\"Z-score period must be an integer greater than 1\");\n }\n return values.map((value, index) => {\n if (index < period - 1) return null;\n const window = values.slice(index - period + 1, index + 1);\n const mean = window.reduce((total, current) => total + current, 0) / period;\n const variance =\n window.reduce((total, current) => total + (current - mean) ** 2, 0) / period;\n const deviation = Math.sqrt(variance);\n return deviation === 0 ? 0 : (value - mean) / deviation;\n });\n}\n","import type { QuantBar, QuantTestRequestV1 } from \"./schemas\";\n\nexport function buildQuantDataLineage(params: {\n bars: QuantBar[];\n request: QuantTestRequestV1;\n warnings?: string[];\n}) {\n const symbol =\n params.request.idea.market.symbol ??\n params.request.idea.market.universe?.[0] ??\n \"UNKNOWN\";\n return {\n venue: params.request.idea.market.venue,\n symbols: params.request.idea.market.universe ?? [symbol],\n resolution: params.request.window.resolution,\n timeframeStart: params.request.window.timeframeStart,\n timeframeEnd: params.request.window.timeframeEnd,\n sourceIds: params.request.idea.requiredSources,\n warnings: params.warnings ?? [],\n };\n}\n","export type QuantMetricSummary = {\n count: number;\n max: number | null;\n mean: number | null;\n median: number | null;\n min: number | null;\n positiveRate: number | null;\n standardDeviation: number | null;\n};\n\nexport function summarizeNumbers(values: number[]): QuantMetricSummary {\n const finite = values.filter((value) => Number.isFinite(value));\n if (finite.length === 0) {\n return {\n count: 0,\n max: null,\n mean: null,\n median: null,\n min: null,\n positiveRate: null,\n standardDeviation: null,\n };\n }\n const sorted = finite.slice().sort((a, b) => a - b);\n const mean = finite.reduce((total, value) => total + value, 0) / finite.length;\n const variance =\n finite.reduce((total, value) => total + (value - mean) ** 2, 0) / finite.length;\n const middle = Math.floor(sorted.length / 2);\n const median =\n sorted.length % 2 === 0\n ? (sorted[middle - 1] + sorted[middle]) / 2\n : sorted[middle];\n return {\n count: finite.length,\n max: sorted[sorted.length - 1],\n mean,\n median,\n min: sorted[0],\n positiveRate:\n finite.filter((value) => value > 0).length / Math.max(1, finite.length),\n standardDeviation: Math.sqrt(variance),\n };\n}\n","import type { QuantBar } from \"../schemas\";\n\nexport type ExcursionSummary = {\n averageAdverse: number | null;\n averageFavorable: number | null;\n count: number;\n};\n\nexport function summarizeExcursions(params: {\n bars: QuantBar[];\n condition: boolean[];\n horizonBars: number;\n}): ExcursionSummary {\n const adverse: number[] = [];\n const favorable: number[] = [];\n for (let index = 0; index < params.bars.length; index += 1) {\n if (!params.condition[index]) continue;\n const entry = params.bars[index].close;\n const window = params.bars.slice(index + 1, index + params.horizonBars + 1);\n if (window.length === 0) continue;\n adverse.push(Math.min(...window.map((bar) => bar.low / entry - 1)));\n favorable.push(Math.max(...window.map((bar) => bar.high / entry - 1)));\n }\n return {\n averageAdverse:\n adverse.length === 0\n ? null\n : adverse.reduce((total, value) => total + value, 0) / adverse.length,\n averageFavorable:\n favorable.length === 0\n ? null\n : favorable.reduce((total, value) => total + value, 0) / favorable.length,\n count: adverse.length,\n };\n}\n","import type { QuantBar } from \"../schemas\";\n\nexport type EventWindow = {\n endTime: number;\n eventTime: number;\n startTime: number;\n};\n\nexport function buildEventWindows(params: {\n bars: QuantBar[];\n condition: boolean[];\n postBars: number;\n preBars: number;\n}): EventWindow[] {\n const windows: EventWindow[] = [];\n for (let index = 0; index < params.bars.length; index += 1) {\n if (!params.condition[index]) continue;\n const start = params.bars[Math.max(0, index - params.preBars)];\n const end = params.bars[Math.min(params.bars.length - 1, index + params.postBars)];\n windows.push({\n endTime: end.time,\n eventTime: params.bars[index].time,\n startTime: start.time,\n });\n }\n return windows;\n}\n","import { forwardReturns } from \"../features/returns\";\nimport { summarizeNumbers, type QuantMetricSummary } from \"../result\";\n\nexport type ForwardReturnStudy = {\n conditioned: QuantMetricSummary;\n horizonBars: number;\n unconditional: QuantMetricSummary;\n};\n\nexport function studyForwardReturns(params: {\n condition: boolean[];\n horizonBars: number;\n prices: number[];\n}): ForwardReturnStudy {\n const forward = forwardReturns(params.prices, params.horizonBars);\n const all = forward.filter((value): value is number => value != null);\n const conditioned = forward.filter(\n (value, index): value is number => value != null && params.condition[index] === true,\n );\n return {\n conditioned: summarizeNumbers(conditioned),\n horizonBars: params.horizonBars,\n unconditional: summarizeNumbers(all),\n };\n}\n","export function hitRate(values: number[]): number | null {\n const finite = values.filter((value) => Number.isFinite(value));\n if (finite.length === 0) return null;\n return finite.filter((value) => value > 0).length / finite.length;\n}\n","export function informationCoefficient(params: {\n forwardReturns: Array<number | null>;\n signal: Array<number | null>;\n}): number | null {\n const pairs: Array<{ x: number; y: number }> = [];\n const length = Math.min(params.signal.length, params.forwardReturns.length);\n for (let index = 0; index < length; index += 1) {\n const x = params.signal[index];\n const y = params.forwardReturns[index];\n if (x != null && y != null && Number.isFinite(x) && Number.isFinite(y)) {\n pairs.push({ x, y });\n }\n }\n if (pairs.length < 3) return null;\n const meanX = pairs.reduce((total, pair) => total + pair.x, 0) / pairs.length;\n const meanY = pairs.reduce((total, pair) => total + pair.y, 0) / pairs.length;\n let covariance = 0;\n let varianceX = 0;\n let varianceY = 0;\n for (const pair of pairs) {\n const dx = pair.x - meanX;\n const dy = pair.y - meanY;\n covariance += dx * dy;\n varianceX += dx * dx;\n varianceY += dy * dy;\n }\n if (varianceX === 0 || varianceY === 0) return null;\n return covariance / Math.sqrt(varianceX * varianceY);\n}\n","export function signalStudySummary(params: {\n conditionedCount: number;\n conditionedMean: number | null;\n unconditionalMean: number | null;\n}): string {\n if (params.conditionedCount === 0) {\n return \"No signal events were available in the supplied window.\";\n }\n const conditioned = params.conditionedMean == null ? \"n/a\" : `${(params.conditionedMean * 100).toFixed(2)}%`;\n const unconditional =\n params.unconditionalMean == null ? \"n/a\" : `${(params.unconditionalMean * 100).toFixed(2)}%`;\n return `Signal events=${params.conditionedCount}; conditioned forward return=${conditioned}; unconditional=${unconditional}.`;\n}\n","export const DONCHIAN_BREAKOUT_RULE_KIND = \"donchian_breakout\" as const;\n","export const FUNDING_CARRY_RULE_KIND = \"funding_carry\" as const;\n","export const MACD_CROSSOVER_RULE_KIND = \"macd_crossover\" as const;\n","export const MA_CROSS_RULE_KIND = \"ma_cross\" as const;\n","export const MOMENTUM_RULE_KIND = \"momentum\" as const;\n","import type { QuantStrategyFamily, QuantTestKind } from \"../schemas\";\n\nexport type QuantSupportLevel =\n | \"v1_replayable\"\n | \"v1_signal_or_idea_test\"\n | \"advanced_research\"\n | \"unsupported_until_data\";\n\nexport type QuantFamilyCapability = {\n aliases: string[];\n family: QuantStrategyFamily;\n supportLevel: QuantSupportLevel;\n supportedTestKinds: QuantTestKind[];\n};\n\nconst BASE_TESTS: QuantTestKind[] = [\n \"prompt_plan_check\",\n \"data_availability\",\n \"signal_study\",\n \"idea_rule_simulation\",\n \"variant_sensitivity\",\n \"leakage_check\",\n \"cost_stress\",\n];\n\nexport const QUANT_FAMILY_CAPABILITIES: QuantFamilyCapability[] = [\n {\n aliases: [\"benchmark\", \"buy-and-hold\", \"buy_and_hold\", \"hold\"],\n family: \"benchmark\",\n supportLevel: \"v1_replayable\",\n supportedTestKinds: BASE_TESTS,\n },\n {\n aliases: [\"signal_rule\", \"moving_average\", \"ma_cross\", \"rsi\", \"macd\", \"bollinger\", \"donchian\"],\n family: \"signal_rule\",\n supportLevel: \"v1_replayable\",\n supportedTestKinds: BASE_TESTS,\n },\n {\n aliases: [\"trend\", \"momentum\", \"breakout\", \"time_series_momentum\"],\n family: \"trend\",\n supportLevel: \"v1_replayable\",\n supportedTestKinds: BASE_TESTS,\n },\n {\n aliases: [\"mean_reversion\", \"zscore\", \"rsi_mean_reversion\", \"bollinger_mean_reversion\"],\n family: \"mean_reversion\",\n supportLevel: \"v1_replayable\",\n supportedTestKinds: BASE_TESTS,\n },\n {\n aliases: [\"stat_arb\", \"pairs\", \"pair_spread\", \"cointegration\"],\n family: \"stat_arb\",\n supportLevel: \"v1_signal_or_idea_test\",\n supportedTestKinds: [\"prompt_plan_check\", \"data_availability\", \"signal_study\", \"leakage_check\"],\n },\n {\n aliases: [\"carry\", \"funding\", \"basis\", \"funding_carry\"],\n family: \"carry\",\n supportLevel: \"v1_signal_or_idea_test\",\n supportedTestKinds: BASE_TESTS,\n },\n {\n aliases: [\"hedge\", \"overlay\", \"tail_hedge\"],\n family: \"hedge\",\n supportLevel: \"v1_signal_or_idea_test\",\n supportedTestKinds: [\"prompt_plan_check\", \"data_availability\", \"signal_study\", \"cost_stress\"],\n },\n {\n aliases: [\"execution\", \"twap\", \"vwap\", \"participation\", \"iceberg\"],\n family: \"execution\",\n supportLevel: \"advanced_research\",\n supportedTestKinds: [\"prompt_plan_check\", \"data_availability\", \"cost_stress\"],\n },\n {\n aliases: [\"market_making\", \"maker\", \"avellaneda\", \"inventory_skew\"],\n family: \"market_making\",\n supportLevel: \"advanced_research\",\n supportedTestKinds: [\"prompt_plan_check\", \"data_availability\", \"cost_stress\"],\n },\n {\n aliases: [\"options\", \"vol\", \"black_scholes\", \"put_call_parity\"],\n family: \"options\",\n supportLevel: \"unsupported_until_data\",\n supportedTestKinds: [\"prompt_plan_check\", \"data_availability\"],\n },\n {\n aliases: [\"regime_ml\", \"ml\", \"regime\", \"markov\", \"hmm\", \"rl\"],\n family: \"regime_ml\",\n supportLevel: \"advanced_research\",\n supportedTestKinds: [\"prompt_plan_check\", \"data_availability\", \"leakage_check\"],\n },\n {\n aliases: [\"prediction_market\", \"outcome\", \"hip4\", \"binary\"],\n family: \"prediction_market\",\n supportLevel: \"v1_signal_or_idea_test\",\n supportedTestKinds: [\"prompt_plan_check\", \"data_availability\", \"signal_study\", \"cost_stress\"],\n },\n {\n aliases: [\"defi_lp\", \"amm\", \"lp\", \"concentrated_liquidity\"],\n family: \"defi_lp\",\n supportLevel: \"unsupported_until_data\",\n supportedTestKinds: [\"prompt_plan_check\", \"data_availability\"],\n },\n];\n\nexport function resolveQuantFamilyCapability(value: string): QuantFamilyCapability | null {\n const normalized = value.trim().toLowerCase().replace(/[\\s-]+/g, \"_\");\n return (\n QUANT_FAMILY_CAPABILITIES.find(\n (capability) =>\n capability.family === normalized ||\n capability.aliases.some((alias) => alias === normalized),\n ) ?? null\n );\n}\n","export const RSI_MEAN_REVERSION_RULE_KIND = \"rsi_mean_reversion\" as const;\n","import { closePrices } from \"../bars\";\nimport { fundingRates } from \"../features/funding\";\nimport { momentum } from \"../features/momentum\";\nimport { donchian } from \"../indicators/donchian\";\nimport { ema } from \"../indicators/ema\";\nimport { macd } from \"../indicators/macd\";\nimport { rsi } from \"../indicators/rsi\";\nimport { sma } from \"../indicators/sma\";\nimport { rollingZScore } from \"../indicators/zscore\";\nimport type { QuantBar, QuantIdeaSpecV1 } from \"../schemas\";\n\nexport type EvaluatedRuleSeries = {\n condition: boolean[];\n positions: number[];\n signal: Array<number | null>;\n warnings: string[];\n};\n\nfunction numberParam(params: Record<string, unknown>, key: string, fallback: number): number {\n const value = params[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n}\n\nfunction stringParam(params: Record<string, unknown>, key: string, fallback: string): string {\n const value = params[key];\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : fallback;\n}\n\nfunction ma(values: number[], type: string, period: number): Array<number | null> {\n return type.toLowerCase() === \"sma\" ? sma(values, period) : ema(values, period);\n}\n\nfunction shiftedBreakoutCondition(bars: QuantBar[], period: number): boolean[] {\n const channels = donchian(\n bars.map((bar) => bar.high),\n bars.map((bar) => bar.low),\n period,\n );\n return bars.map((bar, index) => {\n const prior = channels[index - 1];\n return prior?.upper != null && bar.close > prior.upper;\n });\n}\n\nexport function evaluateQuantRule(params: {\n bars: QuantBar[];\n idea: QuantIdeaSpecV1;\n}): EvaluatedRuleSeries {\n const prices = closePrices(params.bars);\n const rule = params.idea.rule;\n const kind = rule?.kind ?? (params.idea.family === \"benchmark\" ? \"buy_hold\" : \"momentum\");\n const ruleParams = rule?.params ?? {};\n const warnings: string[] = [];\n let condition: boolean[] = [];\n let positions: number[] = [];\n let signal: Array<number | null> = [];\n\n if (kind === \"buy_hold\") {\n condition = prices.map(() => true);\n positions = prices.map(() => 1);\n signal = prices.map(() => 1);\n } else if (kind === \"ma_cross\" || kind === \"moving_average_crossover\") {\n const fastPeriod = Math.max(1, Math.trunc(numberParam(ruleParams, \"fastPeriod\", 20)));\n const slowPeriod = Math.max(fastPeriod + 1, Math.trunc(numberParam(ruleParams, \"slowPeriod\", 100)));\n const averageType = stringParam(ruleParams, \"averageType\", \"ema\");\n const fast = ma(prices, averageType, fastPeriod);\n const slow = ma(prices, averageType, slowPeriod);\n signal = prices.map((_, index) =>\n fast[index] == null || slow[index] == null ? null : fast[index] - slow[index],\n );\n condition = signal.map((value) => value != null && value > 0);\n positions = condition.map((active) => (active ? 1 : 0));\n } else if (kind === \"rsi_mean_reversion\") {\n const period = Math.max(2, Math.trunc(numberParam(ruleParams, \"period\", 14)));\n const oversold = numberParam(ruleParams, \"oversold\", 30);\n const exit = numberParam(ruleParams, \"exit\", 50);\n signal = rsi(prices, period);\n let active = false;\n positions = signal.map((value) => {\n if (value == null) return 0;\n if (value <= oversold) active = true;\n if (value >= exit) active = false;\n return active ? 1 : 0;\n });\n condition = signal.map((value) => value != null && value <= oversold);\n } else if (kind === \"macd_crossover\") {\n const points = macd(prices);\n signal = points.map((point) =>\n point.macd == null || point.signal == null ? null : point.macd - point.signal,\n );\n condition = signal.map((value) => value != null && value > 0);\n positions = condition.map((active) => (active ? 1 : 0));\n } else if (kind === \"donchian_breakout\") {\n const period = Math.max(2, Math.trunc(numberParam(ruleParams, \"period\", 20)));\n condition = shiftedBreakoutCondition(params.bars, period);\n signal = condition.map((active) => (active ? 1 : 0));\n positions = condition.map((active) => (active ? 1 : 0));\n } else if (kind === \"zscore_mean_reversion\") {\n const period = Math.max(2, Math.trunc(numberParam(ruleParams, \"period\", 20)));\n const entry = Math.abs(numberParam(ruleParams, \"entry\", 2));\n const exit = Math.abs(numberParam(ruleParams, \"exit\", 0.25));\n signal = rollingZScore(prices, period);\n let active = false;\n positions = signal.map((value) => {\n if (value == null) return 0;\n if (value <= -entry) active = true;\n if (Math.abs(value) <= exit || value >= entry) active = false;\n return active ? 1 : 0;\n });\n condition = signal.map((value) => value != null && value <= -entry);\n } else if (kind === \"momentum\") {\n const lookbackBars = Math.max(1, Math.trunc(numberParam(ruleParams, \"lookbackBars\", 30)));\n const threshold = numberParam(ruleParams, \"threshold\", 0);\n signal = momentum(prices, lookbackBars);\n condition = signal.map((value) => value != null && value > threshold);\n positions = condition.map((active) => (active ? 1 : 0));\n } else if (kind === \"funding_carry\") {\n const threshold = numberParam(ruleParams, \"maxFundingRate\", 0);\n signal = fundingRates(params.bars);\n condition = signal.map((value) => value != null && value <= threshold);\n positions = condition.map((active) => (active ? 1 : 0));\n } else {\n warnings.push(`Rule kind ${kind} is not supported by the V1 evaluator; using signal-only flat positions.`);\n condition = prices.map(() => false);\n positions = prices.map(() => 0);\n signal = prices.map(() => null);\n }\n\n return { condition, positions, signal, warnings };\n}\n","export const ZSCORE_MEAN_REVERSION_RULE_KIND = \"zscore_mean_reversion\" as const;\n","import type { QuantIdeaSpecV1, QuantTestKind } from \"../schemas\";\nimport { resolveQuantFamilyCapability } from \"../strategies/registry\";\n\nexport type QuantTestPlan = {\n supportedTestKinds: QuantTestKind[];\n supportLevel: string;\n warnings: string[];\n};\n\nexport function buildQuantTestPlan(idea: QuantIdeaSpecV1): QuantTestPlan {\n const capability = resolveQuantFamilyCapability(idea.family);\n if (!capability) {\n return {\n supportedTestKinds: [\"prompt_plan_check\", \"data_availability\"],\n supportLevel: \"unsupported_until_data\",\n warnings: [`No V1 quant capability found for family ${idea.family}.`],\n };\n }\n return {\n supportedTestKinds: capability.supportedTestKinds,\n supportLevel: capability.supportLevel,\n warnings:\n capability.supportLevel === \"advanced_research\" ||\n capability.supportLevel === \"unsupported_until_data\"\n ? [`Family ${idea.family} is ${capability.supportLevel}; do not mark it strict-backtest-ready.`]\n : [],\n };\n}\n","import { quantTesterReportV1Schema, type QuantTesterReportV1 } from \"../schemas\";\n\nexport function finalizeQuantTesterReport(report: QuantTesterReportV1): QuantTesterReportV1 {\n return quantTesterReportV1Schema.parse(report);\n}\n","import type { QuantBar, QuantTestRequestV1 } from \"../schemas\";\n\nexport function quantDataWarnings(params: {\n bars: QuantBar[];\n request: QuantTestRequestV1;\n}): string[] {\n const warnings: string[] = [];\n if (params.bars.length < 50) {\n warnings.push(\"Sample has fewer than 50 bars; treat metrics as unstable.\");\n }\n if (params.bars.length > 1) {\n const gaps: number[] = [];\n for (let index = 1; index < params.bars.length; index += 1) {\n gaps.push(params.bars[index].time - params.bars[index - 1].time);\n }\n const medianGap = gaps.slice().sort((a, b) => a - b)[Math.floor(gaps.length / 2)];\n if (gaps.some((gap) => gap > medianGap * 2)) {\n warnings.push(\"Bars contain time gaps larger than twice the median interval.\");\n }\n }\n if (params.request.variantSpace && Object.keys(params.request.variantSpace).length > 20) {\n warnings.push(\"Variant space is broad; use multiple-comparison controls before promotion.\");\n }\n return warnings;\n}\n\nexport function quantCostBps(request: QuantTestRequestV1): number {\n return (\n (request.assumptions.takerFeeBps ?? request.assumptions.makerFeeBps ?? 0) +\n (request.assumptions.slippageBps ?? 0)\n );\n}\n","import { closePrices, normalizeQuantBars } from \"../bars\";\nimport { compactDecisionChanges, validateDecisionArtifact } from \"../decision-series\";\nimport { buildQuantDataLineage } from \"../lineage\";\nimport {\n quantTestRequestV1Schema,\n type QuantBar,\n type QuantDecision,\n type QuantTesterReportV1,\n type QuantTestRequestV1,\n} from \"../schemas\";\nimport { evaluateQuantRule } from \"../strategies/rule-evaluator\";\nimport { buildQuantTestPlan } from \"./plan\";\nimport { finalizeQuantTesterReport } from \"./report\";\nimport { quantCostBps, quantDataWarnings } from \"./warnings\";\n\ntype SimulationMetrics = {\n endingEquityUsd: number;\n maxDrawdownPct: number;\n netReturnPct: number;\n turnover: number;\n trades: number;\n};\n\nfunction symbolForRequest(request: QuantTestRequestV1): string {\n return request.idea.market.symbol ?? request.idea.market.universe?.[0] ?? \"UNKNOWN\";\n}\n\nfunction actionForPosition(target: number): QuantDecision[\"action\"] {\n if (target > 0) return \"long\";\n if (target < 0) return \"short\";\n return \"flat\";\n}\n\nfunction simulate(params: {\n bars: QuantBar[];\n costBps: number;\n positions: number[];\n request: QuantTestRequestV1;\n}): { decisions: QuantDecision[]; metrics: SimulationMetrics } {\n const prices = closePrices(params.bars);\n const initialEquity = params.request.assumptions.initialEquityUsd ?? 10_000;\n const symbol = symbolForRequest(params.request);\n let equity = initialEquity;\n let peak = initialEquity;\n let maxDrawdown = 0;\n let previousPosition = 0;\n let turnover = 0;\n let trades = 0;\n const decisions: QuantDecision[] = [];\n\n for (let index = 0; index < params.bars.length; index += 1) {\n const targetPosition = params.positions[index] ?? 0;\n const deltaPosition = Math.abs(targetPosition - previousPosition);\n if (deltaPosition > 0) {\n turnover += deltaPosition;\n trades += 1;\n equity -= equity * deltaPosition * (params.costBps / 10_000);\n }\n if (index > 0) {\n const priceReturn = prices[index - 1] === 0 ? 0 : prices[index] / prices[index - 1] - 1;\n equity *= 1 + previousPosition * priceReturn;\n }\n peak = Math.max(peak, equity);\n maxDrawdown = Math.max(maxDrawdown, peak === 0 ? 0 : (peak - equity) / peak);\n decisions.push({\n time: params.bars[index].time,\n symbol,\n action: actionForPosition(targetPosition),\n targetPosition,\n reason:\n targetPosition === previousPosition\n ? \"rule maintained target position\"\n : \"rule changed target position\",\n price: params.bars[index].close,\n });\n previousPosition = targetPosition;\n }\n\n return {\n decisions: compactDecisionChanges(decisions),\n metrics: {\n endingEquityUsd: equity,\n maxDrawdownPct: maxDrawdown * 100,\n netReturnPct: (equity / initialEquity - 1) * 100,\n turnover,\n trades,\n },\n };\n}\n\nexport function runQuantIdeaTest(params: {\n bars: QuantBar[] | unknown;\n request: QuantTestRequestV1 | unknown;\n}): QuantTesterReportV1 {\n const request = quantTestRequestV1Schema.parse(params.request);\n const bars = normalizeQuantBars(params.bars);\n const plan = buildQuantTestPlan(request.idea);\n const warnings = [...plan.warnings, ...quantDataWarnings({ bars, request })];\n const supported = plan.supportedTestKinds.includes(\"idea_rule_simulation\");\n if (!supported) {\n return finalizeQuantTesterReport({\n ok: false,\n testRunKind: \"idea_rule_simulation\",\n supported: false,\n unsupportedReason: `Family ${request.idea.family} does not support deterministic idea simulation in V1.`,\n summary: \"Idea simulation is not supported for this family.\",\n dataLineage: buildQuantDataLineage({ bars, request, warnings }),\n warnings,\n });\n }\n\n const evaluated = evaluateQuantRule({ bars, idea: request.idea });\n warnings.push(...evaluated.warnings);\n const simulation = simulate({\n bars,\n costBps: quantCostBps(request),\n positions: evaluated.positions,\n request,\n });\n const decisionArtifact = validateDecisionArtifact({\n version: \"1\",\n family: request.idea.family,\n symbol: symbolForRequest(request),\n resolution: request.window.resolution,\n decisions: simulation.decisions,\n warnings,\n });\n\n return finalizeQuantTesterReport({\n ok: true,\n testRunKind: \"idea_rule_simulation\",\n supported: true,\n summary: `Idea simulation completed: net return ${simulation.metrics.netReturnPct.toFixed(2)}%, trades ${simulation.metrics.trades}.`,\n dataLineage: buildQuantDataLineage({ bars, request, warnings }),\n ideaSimulation: simulation.metrics,\n decisionArtifact,\n warnings,\n });\n}\n","import { closePrices, normalizeQuantBars } from \"../bars\";\nimport { forwardReturns } from \"../features/returns\";\nimport { buildQuantDataLineage } from \"../lineage\";\nimport { summarizeExcursions } from \"../signal-study/adverse-excursion\";\nimport { studyForwardReturns } from \"../signal-study/forward-returns\";\nimport { informationCoefficient } from \"../signal-study/information-coefficient\";\nimport { signalStudySummary } from \"../signal-study/summary\";\nimport {\n quantTestRequestV1Schema,\n type QuantBar,\n type QuantTesterReportV1,\n type QuantTestRequestV1,\n} from \"../schemas\";\nimport { evaluateQuantRule } from \"../strategies/rule-evaluator\";\nimport { buildQuantTestPlan } from \"./plan\";\nimport { finalizeQuantTesterReport } from \"./report\";\nimport { quantDataWarnings } from \"./warnings\";\n\nfunction horizonBars(request: QuantTestRequestV1): number {\n const value = request.idea.rule?.params.horizonBars;\n return typeof value === \"number\" && Number.isInteger(value) && value > 0 ? value : 1;\n}\n\nexport function runSignalStudy(params: {\n bars: QuantBar[] | unknown;\n request: QuantTestRequestV1 | unknown;\n}): QuantTesterReportV1 {\n const request = quantTestRequestV1Schema.parse(params.request);\n const bars = normalizeQuantBars(params.bars);\n const plan = buildQuantTestPlan(request.idea);\n const warnings = [...plan.warnings, ...quantDataWarnings({ bars, request })];\n const supported = plan.supportedTestKinds.includes(\"signal_study\");\n if (!supported) {\n return finalizeQuantTesterReport({\n ok: false,\n testRunKind: \"signal_study\",\n supported: false,\n unsupportedReason: `Family ${request.idea.family} does not support signal studies in V1.`,\n summary: \"Signal study is not supported for this family.\",\n dataLineage: buildQuantDataLineage({ bars, request, warnings }),\n warnings,\n });\n }\n\n const evaluated = evaluateQuantRule({ bars, idea: request.idea });\n warnings.push(...evaluated.warnings);\n const prices = closePrices(bars);\n const horizon = horizonBars(request);\n const study = studyForwardReturns({\n condition: evaluated.condition,\n horizonBars: horizon,\n prices,\n });\n const forward = forwardReturns(prices, horizon);\n const excursions = summarizeExcursions({\n bars,\n condition: evaluated.condition,\n horizonBars: horizon,\n });\n const ic = informationCoefficient({\n forwardReturns: forward,\n signal: evaluated.signal,\n });\n const summary = signalStudySummary({\n conditionedCount: study.conditioned.count,\n conditionedMean: study.conditioned.mean,\n unconditionalMean: study.unconditional.mean,\n });\n\n return finalizeQuantTesterReport({\n ok: true,\n testRunKind: \"signal_study\",\n supported: true,\n summary,\n dataLineage: buildQuantDataLineage({ bars, request, warnings }),\n signalStudy: {\n forwardReturns: study,\n informationCoefficient: ic,\n excursions,\n signalEventCount: evaluated.condition.filter(Boolean).length,\n },\n warnings,\n });\n}\n","import type { QuantResolution } from \"./schemas\";\n\nexport const QUANT_RESOLUTION_SECONDS: Record<QuantResolution, number> = {\n \"1\": 60,\n \"5\": 300,\n \"15\": 900,\n \"30\": 1800,\n \"60\": 3600,\n \"240\": 14400,\n \"1D\": 86400,\n \"1W\": 604800,\n};\n\nexport function quantResolutionToSeconds(resolution: QuantResolution): number {\n return QUANT_RESOLUTION_SECONDS[resolution];\n}\n\nexport function parseQuantTimeToSeconds(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return Math.max(0, Math.trunc(value));\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const trimmed = value.trim();\n if (/^-?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n return Math.max(0, Math.trunc(Number.parseFloat(trimmed)));\n }\n const parsed = new Date(trimmed);\n if (!Number.isNaN(parsed.getTime())) {\n return Math.max(0, Math.trunc(parsed.getTime() / 1000));\n }\n }\n return null;\n}\n\nexport function assertQuantWindow(params: {\n timeframeEnd: string;\n timeframeStart: string;\n}): { endSeconds: number; startSeconds: number } {\n const startSeconds = parseQuantTimeToSeconds(params.timeframeStart);\n const endSeconds = parseQuantTimeToSeconds(params.timeframeEnd);\n if (startSeconds == null || endSeconds == null) {\n throw new Error(\"Quant test window must use parseable start and end times\");\n }\n if (endSeconds <= startSeconds) {\n throw new Error(\"Quant test window end must be after start\");\n }\n return { endSeconds, startSeconds };\n}\n"]}
|
|
@@ -35,6 +35,15 @@ interface WalletRegistry {
|
|
|
35
35
|
type ChainReference = string | number;
|
|
36
36
|
type WalletProviderType = "readonly" | "privateKey" | "turnkey";
|
|
37
37
|
type TurnkeySignWith = string;
|
|
38
|
+
type TurnkeyActivityOperation = "signRawPayload" | "signTransaction";
|
|
39
|
+
interface TurnkeyActivityTrace {
|
|
40
|
+
activityId: string;
|
|
41
|
+
organizationId?: string;
|
|
42
|
+
operation: TurnkeyActivityOperation;
|
|
43
|
+
type?: string;
|
|
44
|
+
status?: string;
|
|
45
|
+
capturedAt: string;
|
|
46
|
+
}
|
|
38
47
|
interface TurnkeyOptions {
|
|
39
48
|
organizationId: string;
|
|
40
49
|
apiPublicKey: string;
|
|
@@ -42,11 +51,15 @@ interface TurnkeyOptions {
|
|
|
42
51
|
/** Identifier of the delegated signer (Turnkey address or private key ID). */
|
|
43
52
|
signWith: TurnkeySignWith;
|
|
44
53
|
apiBaseUrl?: string;
|
|
54
|
+
/** Capture Turnkey signing activity IDs for debugging/audit responses. */
|
|
55
|
+
captureActivities?: boolean;
|
|
45
56
|
}
|
|
46
57
|
interface WalletOptionsBase {
|
|
47
58
|
chain?: ChainReference;
|
|
48
59
|
apiKey?: string;
|
|
49
60
|
rpcUrl?: string;
|
|
61
|
+
/** Capture Turnkey signing activity IDs when env-based Turnkey credentials are used. */
|
|
62
|
+
captureTurnkeyActivities?: boolean;
|
|
50
63
|
}
|
|
51
64
|
interface WalletPrivateKeyOptions extends WalletOptionsBase {
|
|
52
65
|
privateKey: string;
|
|
@@ -83,6 +96,10 @@ interface WalletSignerContext {
|
|
|
83
96
|
* Optional monotonic nonce provider for systems that require client-side nonces.
|
|
84
97
|
*/
|
|
85
98
|
nonceSource?: NonceSource;
|
|
99
|
+
/** Returns captured Turnkey signing activities when captureActivities is enabled. */
|
|
100
|
+
getTurnkeyActivities?: () => TurnkeyActivityTrace[];
|
|
101
|
+
/** Clears captured Turnkey signing activities when captureActivities is enabled. */
|
|
102
|
+
clearTurnkeyActivities?: () => void;
|
|
86
103
|
}
|
|
87
104
|
interface WalletBaseContext {
|
|
88
105
|
chain: ChainMetadata;
|
|
@@ -98,4 +115,4 @@ type WalletReadonlyContext = WalletBaseContext;
|
|
|
98
115
|
type WalletFullContext = WalletBaseContext & WalletSignerContext;
|
|
99
116
|
type WalletContext = WalletReadonlyContext | WalletFullContext;
|
|
100
117
|
|
|
101
|
-
export type { ChainMetadata as C, Hex as H, NonceSource as N, RpcProviderOptions as R, TokenMetadata as T, WalletBaseContext as W, ChainReference as a, ChainTokenMap as b, HexAddress as c, RpcUrlResolver as d,
|
|
118
|
+
export type { ChainMetadata as C, Hex as H, NonceSource as N, RpcProviderOptions as R, TokenMetadata as T, WalletBaseContext as W, ChainReference as a, ChainTokenMap as b, HexAddress as c, RpcUrlResolver as d, TurnkeyActivityOperation as e, TurnkeyActivityTrace as f, TurnkeyOptions as g, TurnkeySignWith as h, WalletContext as i, WalletFullContext as j, WalletOptions as k, WalletOptionsBase as l, WalletPrivateKeyOptions as m, WalletProviderType as n, WalletReadonlyContext as o, WalletReadonlyOptions as p, WalletRegistry as q, WalletSendTransactionParams as r, WalletSignerContext as s, WalletTransferParams as t, WalletTurnkeyOptions as u };
|
package/dist/wallet/browser.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createAccount } from '@turnkey/viem';
|
|
2
2
|
import { WalletClient, Transport, Chain, PublicClient } from 'viem';
|
|
3
3
|
import { Account } from 'viem/accounts';
|
|
4
|
-
import { a as ChainReference, c as HexAddress,
|
|
4
|
+
import { a as ChainReference, c as HexAddress, n as WalletProviderType, C as ChainMetadata, h as TurnkeySignWith, j as WalletFullContext } from '../types-D8s9zx-U.js';
|
|
5
5
|
|
|
6
6
|
type NonceSource = () => number;
|
|
7
7
|
declare function createMonotonicNonceSource(start?: number): NonceSource;
|
package/dist/wallet/browser.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createAccount } from '@turnkey/viem';
|
|
2
2
|
import { zeroAddress, createPublicClient, http, createWalletClient } from 'viem';
|
|
3
|
-
import { arbitrumSepolia, arbitrum, baseSepolia, mainnet, base } from 'viem/chains';
|
|
3
|
+
import { tempo, arbitrumSepolia, arbitrum, baseSepolia, mainnet, base } from 'viem/chains';
|
|
4
4
|
|
|
5
5
|
// src/wallet/browser.ts
|
|
6
6
|
var BASE_ALCHEMY_HOST = "https://base-mainnet.g.alchemy.com/v2/";
|
|
@@ -8,6 +8,7 @@ var ETHEREUM_ALCHEMY_HOST = "https://eth-mainnet.g.alchemy.com/v2/";
|
|
|
8
8
|
var BASE_SEPOLIA_ALCHEMY_HOST = "https://base-sepolia.g.alchemy.com/v2/";
|
|
9
9
|
var ARBITRUM_ALCHEMY_HOST = "https://arb-mainnet.g.alchemy.com/v2/";
|
|
10
10
|
var ARBITRUM_SEPOLIA_ALCHEMY_HOST = "https://arb-sepolia.g.alchemy.com/v2/";
|
|
11
|
+
var TEMPO_RPC_URL = "https://rpc.tempo.xyz";
|
|
11
12
|
function buildRpcResolver(host, fallbackUrls) {
|
|
12
13
|
return (options) => {
|
|
13
14
|
if (options?.url) {
|
|
@@ -63,6 +64,14 @@ var chains = {
|
|
|
63
64
|
chain: arbitrumSepolia,
|
|
64
65
|
rpcUrl: buildRpcResolver(ARBITRUM_SEPOLIA_ALCHEMY_HOST, arbitrumSepolia.rpcUrls.default.http),
|
|
65
66
|
publicRpcUrls: arbitrumSepolia.rpcUrls.default.http
|
|
67
|
+
},
|
|
68
|
+
tempo: {
|
|
69
|
+
id: tempo.id,
|
|
70
|
+
slug: "tempo",
|
|
71
|
+
name: "Tempo",
|
|
72
|
+
chain: tempo,
|
|
73
|
+
rpcUrl: buildRpcResolver(TEMPO_RPC_URL, [TEMPO_RPC_URL]),
|
|
74
|
+
publicRpcUrls: [TEMPO_RPC_URL]
|
|
66
75
|
}
|
|
67
76
|
};
|
|
68
77
|
function createNativeToken(chainId, symbol, name) {
|
|
@@ -108,6 +117,23 @@ var tokens = {
|
|
|
108
117
|
"0x1baAbB04529D43a73232B713C0FE471f7c7334d5",
|
|
109
118
|
6
|
|
110
119
|
)
|
|
120
|
+
},
|
|
121
|
+
tempo: {
|
|
122
|
+
...createNativeToken(tempo.id, "USD", "USD"),
|
|
123
|
+
USDC: token(
|
|
124
|
+
tempo.id,
|
|
125
|
+
"USDC",
|
|
126
|
+
"Tempo USDC (USDC.e)",
|
|
127
|
+
"0x20C000000000000000000000b9537d11c60E8b50",
|
|
128
|
+
6
|
|
129
|
+
),
|
|
130
|
+
PathUSD: token(
|
|
131
|
+
tempo.id,
|
|
132
|
+
"PathUSD",
|
|
133
|
+
"PathUSD",
|
|
134
|
+
"0x20c0000000000000000000000000000000000000",
|
|
135
|
+
6
|
|
136
|
+
)
|
|
111
137
|
}
|
|
112
138
|
};
|
|
113
139
|
var DEFAULT_CHAIN = chains.base;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/wallet/constants.ts","../../src/wallet/nonces.ts","../../src/wallet/browser.ts"],"names":["tokens"],"mappings":"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","file":"browser.js","sourcesContent":["import { zeroAddress } from \"viem\";\nimport { arbitrum, arbitrumSepolia, base, baseSepolia, mainnet } from \"viem/chains\";\n\nimport type {\n ChainMetadata,\n ChainTokenMap,\n HexAddress,\n RpcUrlResolver,\n WalletRegistry,\n} from \"./types\";\n\nconst BASE_ALCHEMY_HOST = \"https://base-mainnet.g.alchemy.com/v2/\";\nconst ETHEREUM_ALCHEMY_HOST = \"https://eth-mainnet.g.alchemy.com/v2/\";\nconst BASE_SEPOLIA_ALCHEMY_HOST = \"https://base-sepolia.g.alchemy.com/v2/\";\nconst ARBITRUM_ALCHEMY_HOST = \"https://arb-mainnet.g.alchemy.com/v2/\";\nconst ARBITRUM_SEPOLIA_ALCHEMY_HOST = \"https://arb-sepolia.g.alchemy.com/v2/\";\n\nfunction buildRpcResolver(host: string, fallbackUrls: readonly string[]): RpcUrlResolver {\n return (options) => {\n if (options?.url) {\n return options.url;\n }\n\n if (options?.apiKey) {\n return `${host}${options.apiKey}`;\n }\n\n if (fallbackUrls.length > 0) {\n return fallbackUrls[0];\n }\n\n throw new Error(\n \"No RPC URL available: supply a full url via options or an apiKey for the default host\",\n );\n };\n}\n\nconst chains: Record<string, ChainMetadata> = {\n base: {\n id: base.id,\n slug: \"base\",\n name: \"Base\",\n chain: base,\n rpcUrl: buildRpcResolver(BASE_ALCHEMY_HOST, base.rpcUrls.default.http),\n publicRpcUrls: base.rpcUrls.default.http,\n },\n ethereum: {\n id: mainnet.id,\n slug: \"ethereum\",\n name: \"Ethereum\",\n chain: mainnet,\n rpcUrl: buildRpcResolver(ETHEREUM_ALCHEMY_HOST, mainnet.rpcUrls.default.http),\n publicRpcUrls: mainnet.rpcUrls.default.http,\n },\n baseSepolia: {\n id: baseSepolia.id,\n slug: \"base-sepolia\",\n name: \"Base Sepolia\",\n chain: baseSepolia,\n rpcUrl: buildRpcResolver(BASE_SEPOLIA_ALCHEMY_HOST, baseSepolia.rpcUrls.default.http),\n },\n arbitrum: {\n id: arbitrum.id,\n slug: \"arbitrum\",\n name: \"Arbitrum One\",\n chain: arbitrum,\n rpcUrl: buildRpcResolver(ARBITRUM_ALCHEMY_HOST, arbitrum.rpcUrls.default.http),\n publicRpcUrls: arbitrum.rpcUrls.default.http,\n },\n arbitrumSepolia: {\n id: arbitrumSepolia.id,\n slug: \"arbitrum-sepolia\",\n name: \"Arbitrum Sepolia\",\n chain: arbitrumSepolia,\n rpcUrl: buildRpcResolver(ARBITRUM_SEPOLIA_ALCHEMY_HOST, arbitrumSepolia.rpcUrls.default.http),\n publicRpcUrls: arbitrumSepolia.rpcUrls.default.http,\n },\n};\n\nfunction createNativeToken(chainId: number, symbol: string, name: string): ChainTokenMap {\n return {\n [symbol]: {\n symbol,\n name,\n decimals: 18,\n address: zeroAddress,\n chainId,\n isNative: true,\n },\n };\n}\n\nfunction token(\n chainId: number,\n symbol: string,\n name: string,\n address: HexAddress,\n decimals: number,\n) {\n return {\n symbol,\n name,\n decimals,\n address,\n chainId,\n };\n}\n\nconst tokens: Record<string, ChainTokenMap> = {\n base: {\n ...createNativeToken(base.id, \"ETH\", \"Ether\"),\n USDC: token(base.id, \"USDC\", \"USD Coin\", \"0x833589fCD6eDb6E08f4c7C31c9A8Ba32D74b86B2\", 6),\n },\n ethereum: {\n ...createNativeToken(mainnet.id, \"ETH\", \"Ether\"),\n USDC: token(mainnet.id, \"USDC\", \"USD Coin\", \"0xA0b86991c6218b36c1d19d4a2e9Eb0cE3606eB48\", 6),\n },\n arbitrum: {\n ...createNativeToken(arbitrum.id, \"ETH\", \"Ether\"),\n USDC: token(arbitrum.id, \"USDC\", \"USD Coin\", \"0xaf88d065e77c8cc2239327c5edb3a432268e5831\", 6),\n },\n arbitrumSepolia: {\n ...createNativeToken(arbitrumSepolia.id, \"ETH\", \"Ether\"),\n USDC: token(\n arbitrumSepolia.id,\n \"USDC\",\n \"USD Coin\",\n \"0x1baAbB04529D43a73232B713C0FE471f7c7334d5\",\n 6,\n ),\n },\n};\n\nexport const DEFAULT_CHAIN = chains.base;\nexport const DEFAULT_TOKENS = tokens.base;\n\nexport const registry: WalletRegistry = {\n chains,\n tokens,\n};\n\nexport { chains, tokens };\n","export type NonceSource = () => number;\n\nexport function createMonotonicNonceSource(start: number = Date.now()): NonceSource {\n let last = start;\n return () => {\n const now = Date.now();\n if (now > last) {\n last = now;\n } else {\n last += 1;\n }\n return last;\n };\n}\n","import { createAccount } from \"@turnkey/viem\";\nimport {\n createPublicClient,\n createWalletClient,\n http,\n type Chain,\n type PublicClient,\n type Transport,\n type WalletClient,\n} from \"viem\";\nimport type { Account } from \"viem/accounts\";\n\nimport {\n chains as chainRegistry,\n tokens as tokenRegistry,\n DEFAULT_CHAIN,\n DEFAULT_TOKENS,\n} from \"./constants\";\nimport { createMonotonicNonceSource, type NonceSource } from \"./nonces\";\nimport type {\n ChainMetadata,\n ChainReference,\n HexAddress,\n RpcProviderOptions,\n TurnkeySignWith,\n WalletFullContext,\n WalletProviderType,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"./types\";\n\ntype ChainSlug = keyof typeof chainRegistry;\ntype TurnkeyBrowserClientLike = Parameters<typeof createAccount>[0][\"client\"];\n\nconst browserFetch: typeof fetch = (...args) => fetch(...args);\n\nfunction resolveChainSlug(reference?: ChainReference): ChainSlug {\n if (reference === undefined) {\n return (Object.entries(chainRegistry).find(([, meta]) => meta.id === DEFAULT_CHAIN.id)?.[0] ||\n DEFAULT_CHAIN.slug) as ChainSlug;\n }\n\n if (typeof reference === \"number\") {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === reference);\n if (match) {\n return match[0] as ChainSlug;\n }\n } else if (typeof reference === \"string\") {\n const sanitize = (value: string) => value.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n\n if (reference in chainRegistry) {\n return reference as ChainSlug;\n }\n\n const normalized = sanitize(reference);\n\n const keyMatch = Object.entries(chainRegistry).find(([key]) => sanitize(key) === normalized);\n if (keyMatch) {\n return keyMatch[0] as ChainSlug;\n }\n\n const slugMatch = Object.entries(chainRegistry).find(([, meta]) => {\n return meta.slug && sanitize(meta.slug) === normalized;\n });\n if (slugMatch) {\n return slugMatch[0] as ChainSlug;\n }\n\n const asNumber = Number.parseInt(normalized, 10);\n if (!Number.isNaN(asNumber)) {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === asNumber);\n if (match) {\n return match[0] as ChainSlug;\n }\n }\n }\n\n throw new Error(`Unknown chain reference: ${reference}`);\n}\n\nfunction getRpcUrl(chain: ChainSlug | number, options?: RpcProviderOptions): string {\n const slug = resolveChainSlug(chain);\n const entry = chainRegistry[slug];\n return entry.rpcUrl(options);\n}\n\nfunction createWalletHelpers(params: {\n account: Account;\n publicClient: PublicClient<Transport, Chain>;\n walletClient: WalletClient<Transport, Chain, Account>;\n}) {\n async function sendTransaction(options: WalletSendTransactionParams) {\n const tx: {\n account: Account;\n to?: HexAddress;\n value?: bigint;\n data?: `0x${string}`;\n } = {\n account: params.account,\n };\n\n if (options.to) {\n tx.to = options.to;\n }\n if (options.value !== undefined) {\n tx.value = options.value;\n }\n if (options.data !== undefined) {\n tx.data = options.data;\n }\n\n return params.walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return params.publicClient.getBalance({ address: params.account.address });\n }\n\n async function transfer(options: WalletTransferParams) {\n return sendTransaction({\n to: options.to,\n value: options.amount,\n ...(options.data !== undefined ? { data: options.data } : {}),\n });\n }\n\n return {\n sendTransaction,\n getNativeBalance,\n transfer,\n };\n}\n\nexport interface BrowserWalletContextOptions {\n chain?: ChainReference;\n apiKey?: string;\n rpcUrl?: string;\n address: HexAddress;\n account: Account;\n walletClient: WalletClient<Transport, Chain, Account>;\n publicClient?: PublicClient<Transport, Chain> | undefined;\n nonceSource?: NonceSource | undefined;\n providerType?: WalletProviderType | undefined;\n}\n\nexport function createBrowserWalletContext(\n options: BrowserWalletContextOptions,\n): WalletFullContext {\n const slug = resolveChainSlug(options.chain);\n const chain = chainRegistry[slug];\n const tokens = tokenRegistry[slug] ?? DEFAULT_TOKENS;\n const overrides: RpcProviderOptions = {};\n\n if (options.rpcUrl) {\n overrides.url = options.rpcUrl;\n }\n if (options.apiKey) {\n overrides.apiKey = options.apiKey;\n }\n\n const rpcUrl = getRpcUrl(slug, overrides);\n const publicClient =\n options.publicClient ??\n createPublicClient<Transport, Chain>({\n chain: chain.chain,\n transport: http(rpcUrl, { fetchFn: browserFetch }),\n });\n const walletClient = options.walletClient;\n const helperNonceSource = options.nonceSource ?? createMonotonicNonceSource();\n const helpers = createWalletHelpers({\n account: options.account,\n publicClient,\n walletClient,\n });\n\n return {\n chain,\n tokens,\n rpcUrl,\n providerType: options.providerType ?? \"turnkey\",\n publicClient,\n address: options.address,\n account: options.account,\n walletClient,\n nonceSource: helperNonceSource,\n getRpcUrl: (override?: RpcProviderOptions) => getRpcUrl(slug, override),\n ...helpers,\n };\n}\n\nexport interface TurnkeyBrowserProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n organizationId: string;\n signWith: TurnkeySignWith;\n client: TurnkeyBrowserClientLike;\n ethereumAddress?: HexAddress | undefined;\n nonceSource?: NonceSource | undefined;\n}\n\nexport async function createTurnkeyBrowserProvider(\n config: TurnkeyBrowserProviderConfig,\n): Promise<WalletFullContext> {\n const account = (await createAccount({\n client: config.client,\n organizationId: config.organizationId,\n signWith: config.signWith,\n ...(config.ethereumAddress ? { ethereumAddress: config.ethereumAddress } : {}),\n })) as Account;\n\n const transport = http(config.rpcUrl, { fetchFn: browserFetch });\n const publicClient = createPublicClient<Transport, Chain>({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient<Transport, Chain, Account>({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n return createBrowserWalletContext({\n chain: config.chain.slug,\n rpcUrl: config.rpcUrl,\n address: account.address as HexAddress,\n account,\n walletClient,\n publicClient,\n ...(config.nonceSource ? { nonceSource: config.nonceSource } : {}),\n providerType: \"turnkey\",\n });\n}\n\nexport { createMonotonicNonceSource };\nexport type { NonceSource };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/wallet/constants.ts","../../src/wallet/nonces.ts","../../src/wallet/browser.ts"],"names":["tokens"],"mappings":"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","file":"browser.js","sourcesContent":["import { zeroAddress } from \"viem\";\nimport { arbitrum, arbitrumSepolia, base, baseSepolia, mainnet, tempo } from \"viem/chains\";\n\nimport type {\n ChainMetadata,\n ChainTokenMap,\n HexAddress,\n RpcUrlResolver,\n WalletRegistry,\n} from \"./types\";\n\nconst BASE_ALCHEMY_HOST = \"https://base-mainnet.g.alchemy.com/v2/\";\nconst ETHEREUM_ALCHEMY_HOST = \"https://eth-mainnet.g.alchemy.com/v2/\";\nconst BASE_SEPOLIA_ALCHEMY_HOST = \"https://base-sepolia.g.alchemy.com/v2/\";\nconst ARBITRUM_ALCHEMY_HOST = \"https://arb-mainnet.g.alchemy.com/v2/\";\nconst ARBITRUM_SEPOLIA_ALCHEMY_HOST = \"https://arb-sepolia.g.alchemy.com/v2/\";\nconst TEMPO_RPC_URL = \"https://rpc.tempo.xyz\";\n\nfunction buildRpcResolver(host: string, fallbackUrls: readonly string[]): RpcUrlResolver {\n return (options) => {\n if (options?.url) {\n return options.url;\n }\n\n if (options?.apiKey) {\n return `${host}${options.apiKey}`;\n }\n\n if (fallbackUrls.length > 0) {\n return fallbackUrls[0];\n }\n\n throw new Error(\n \"No RPC URL available: supply a full url via options or an apiKey for the default host\",\n );\n };\n}\n\nconst chains: Record<string, ChainMetadata> = {\n base: {\n id: base.id,\n slug: \"base\",\n name: \"Base\",\n chain: base,\n rpcUrl: buildRpcResolver(BASE_ALCHEMY_HOST, base.rpcUrls.default.http),\n publicRpcUrls: base.rpcUrls.default.http,\n },\n ethereum: {\n id: mainnet.id,\n slug: \"ethereum\",\n name: \"Ethereum\",\n chain: mainnet,\n rpcUrl: buildRpcResolver(ETHEREUM_ALCHEMY_HOST, mainnet.rpcUrls.default.http),\n publicRpcUrls: mainnet.rpcUrls.default.http,\n },\n baseSepolia: {\n id: baseSepolia.id,\n slug: \"base-sepolia\",\n name: \"Base Sepolia\",\n chain: baseSepolia,\n rpcUrl: buildRpcResolver(BASE_SEPOLIA_ALCHEMY_HOST, baseSepolia.rpcUrls.default.http),\n },\n arbitrum: {\n id: arbitrum.id,\n slug: \"arbitrum\",\n name: \"Arbitrum One\",\n chain: arbitrum,\n rpcUrl: buildRpcResolver(ARBITRUM_ALCHEMY_HOST, arbitrum.rpcUrls.default.http),\n publicRpcUrls: arbitrum.rpcUrls.default.http,\n },\n arbitrumSepolia: {\n id: arbitrumSepolia.id,\n slug: \"arbitrum-sepolia\",\n name: \"Arbitrum Sepolia\",\n chain: arbitrumSepolia,\n rpcUrl: buildRpcResolver(ARBITRUM_SEPOLIA_ALCHEMY_HOST, arbitrumSepolia.rpcUrls.default.http),\n publicRpcUrls: arbitrumSepolia.rpcUrls.default.http,\n },\n tempo: {\n id: tempo.id,\n slug: \"tempo\",\n name: \"Tempo\",\n chain: tempo,\n rpcUrl: buildRpcResolver(TEMPO_RPC_URL, [TEMPO_RPC_URL]),\n publicRpcUrls: [TEMPO_RPC_URL],\n },\n};\n\nfunction createNativeToken(chainId: number, symbol: string, name: string): ChainTokenMap {\n return {\n [symbol]: {\n symbol,\n name,\n decimals: 18,\n address: zeroAddress,\n chainId,\n isNative: true,\n },\n };\n}\n\nfunction token(\n chainId: number,\n symbol: string,\n name: string,\n address: HexAddress,\n decimals: number,\n) {\n return {\n symbol,\n name,\n decimals,\n address,\n chainId,\n };\n}\n\nconst tokens: Record<string, ChainTokenMap> = {\n base: {\n ...createNativeToken(base.id, \"ETH\", \"Ether\"),\n USDC: token(base.id, \"USDC\", \"USD Coin\", \"0x833589fCD6eDb6E08f4c7C31c9A8Ba32D74b86B2\", 6),\n },\n ethereum: {\n ...createNativeToken(mainnet.id, \"ETH\", \"Ether\"),\n USDC: token(mainnet.id, \"USDC\", \"USD Coin\", \"0xA0b86991c6218b36c1d19d4a2e9Eb0cE3606eB48\", 6),\n },\n arbitrum: {\n ...createNativeToken(arbitrum.id, \"ETH\", \"Ether\"),\n USDC: token(arbitrum.id, \"USDC\", \"USD Coin\", \"0xaf88d065e77c8cc2239327c5edb3a432268e5831\", 6),\n },\n arbitrumSepolia: {\n ...createNativeToken(arbitrumSepolia.id, \"ETH\", \"Ether\"),\n USDC: token(\n arbitrumSepolia.id,\n \"USDC\",\n \"USD Coin\",\n \"0x1baAbB04529D43a73232B713C0FE471f7c7334d5\",\n 6,\n ),\n },\n tempo: {\n ...createNativeToken(tempo.id, \"USD\", \"USD\"),\n USDC: token(\n tempo.id,\n \"USDC\",\n \"Tempo USDC (USDC.e)\",\n \"0x20C000000000000000000000b9537d11c60E8b50\",\n 6,\n ),\n PathUSD: token(\n tempo.id,\n \"PathUSD\",\n \"PathUSD\",\n \"0x20c0000000000000000000000000000000000000\",\n 6,\n ),\n },\n};\n\nexport const DEFAULT_CHAIN = chains.base;\nexport const DEFAULT_TOKENS = tokens.base;\n\nexport const registry: WalletRegistry = {\n chains,\n tokens,\n};\n\nexport { chains, tokens };\n","export type NonceSource = () => number;\n\nexport function createMonotonicNonceSource(start: number = Date.now()): NonceSource {\n let last = start;\n return () => {\n const now = Date.now();\n if (now > last) {\n last = now;\n } else {\n last += 1;\n }\n return last;\n };\n}\n","import { createAccount } from \"@turnkey/viem\";\nimport {\n createPublicClient,\n createWalletClient,\n http,\n type Chain,\n type PublicClient,\n type Transport,\n type WalletClient,\n} from \"viem\";\nimport type { Account } from \"viem/accounts\";\n\nimport {\n chains as chainRegistry,\n tokens as tokenRegistry,\n DEFAULT_CHAIN,\n DEFAULT_TOKENS,\n} from \"./constants\";\nimport { createMonotonicNonceSource, type NonceSource } from \"./nonces\";\nimport type {\n ChainMetadata,\n ChainReference,\n HexAddress,\n RpcProviderOptions,\n TurnkeySignWith,\n WalletFullContext,\n WalletProviderType,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"./types\";\n\ntype ChainSlug = keyof typeof chainRegistry;\ntype TurnkeyBrowserClientLike = Parameters<typeof createAccount>[0][\"client\"];\n\nconst browserFetch: typeof fetch = (...args) => fetch(...args);\n\nfunction resolveChainSlug(reference?: ChainReference): ChainSlug {\n if (reference === undefined) {\n return (Object.entries(chainRegistry).find(([, meta]) => meta.id === DEFAULT_CHAIN.id)?.[0] ||\n DEFAULT_CHAIN.slug) as ChainSlug;\n }\n\n if (typeof reference === \"number\") {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === reference);\n if (match) {\n return match[0] as ChainSlug;\n }\n } else if (typeof reference === \"string\") {\n const sanitize = (value: string) => value.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n\n if (reference in chainRegistry) {\n return reference as ChainSlug;\n }\n\n const normalized = sanitize(reference);\n\n const keyMatch = Object.entries(chainRegistry).find(([key]) => sanitize(key) === normalized);\n if (keyMatch) {\n return keyMatch[0] as ChainSlug;\n }\n\n const slugMatch = Object.entries(chainRegistry).find(([, meta]) => {\n return meta.slug && sanitize(meta.slug) === normalized;\n });\n if (slugMatch) {\n return slugMatch[0] as ChainSlug;\n }\n\n const asNumber = Number.parseInt(normalized, 10);\n if (!Number.isNaN(asNumber)) {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === asNumber);\n if (match) {\n return match[0] as ChainSlug;\n }\n }\n }\n\n throw new Error(`Unknown chain reference: ${reference}`);\n}\n\nfunction getRpcUrl(chain: ChainSlug | number, options?: RpcProviderOptions): string {\n const slug = resolveChainSlug(chain);\n const entry = chainRegistry[slug];\n return entry.rpcUrl(options);\n}\n\nfunction createWalletHelpers(params: {\n account: Account;\n publicClient: PublicClient<Transport, Chain>;\n walletClient: WalletClient<Transport, Chain, Account>;\n}) {\n async function sendTransaction(options: WalletSendTransactionParams) {\n const tx: {\n account: Account;\n to?: HexAddress;\n value?: bigint;\n data?: `0x${string}`;\n } = {\n account: params.account,\n };\n\n if (options.to) {\n tx.to = options.to;\n }\n if (options.value !== undefined) {\n tx.value = options.value;\n }\n if (options.data !== undefined) {\n tx.data = options.data;\n }\n\n return params.walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return params.publicClient.getBalance({ address: params.account.address });\n }\n\n async function transfer(options: WalletTransferParams) {\n return sendTransaction({\n to: options.to,\n value: options.amount,\n ...(options.data !== undefined ? { data: options.data } : {}),\n });\n }\n\n return {\n sendTransaction,\n getNativeBalance,\n transfer,\n };\n}\n\nexport interface BrowserWalletContextOptions {\n chain?: ChainReference;\n apiKey?: string;\n rpcUrl?: string;\n address: HexAddress;\n account: Account;\n walletClient: WalletClient<Transport, Chain, Account>;\n publicClient?: PublicClient<Transport, Chain> | undefined;\n nonceSource?: NonceSource | undefined;\n providerType?: WalletProviderType | undefined;\n}\n\nexport function createBrowserWalletContext(\n options: BrowserWalletContextOptions,\n): WalletFullContext {\n const slug = resolveChainSlug(options.chain);\n const chain = chainRegistry[slug];\n const tokens = tokenRegistry[slug] ?? DEFAULT_TOKENS;\n const overrides: RpcProviderOptions = {};\n\n if (options.rpcUrl) {\n overrides.url = options.rpcUrl;\n }\n if (options.apiKey) {\n overrides.apiKey = options.apiKey;\n }\n\n const rpcUrl = getRpcUrl(slug, overrides);\n const publicClient =\n options.publicClient ??\n createPublicClient<Transport, Chain>({\n chain: chain.chain,\n transport: http(rpcUrl, { fetchFn: browserFetch }),\n });\n const walletClient = options.walletClient;\n const helperNonceSource = options.nonceSource ?? createMonotonicNonceSource();\n const helpers = createWalletHelpers({\n account: options.account,\n publicClient,\n walletClient,\n });\n\n return {\n chain,\n tokens,\n rpcUrl,\n providerType: options.providerType ?? \"turnkey\",\n publicClient,\n address: options.address,\n account: options.account,\n walletClient,\n nonceSource: helperNonceSource,\n getRpcUrl: (override?: RpcProviderOptions) => getRpcUrl(slug, override),\n ...helpers,\n };\n}\n\nexport interface TurnkeyBrowserProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n organizationId: string;\n signWith: TurnkeySignWith;\n client: TurnkeyBrowserClientLike;\n ethereumAddress?: HexAddress | undefined;\n nonceSource?: NonceSource | undefined;\n}\n\nexport async function createTurnkeyBrowserProvider(\n config: TurnkeyBrowserProviderConfig,\n): Promise<WalletFullContext> {\n const account = (await createAccount({\n client: config.client,\n organizationId: config.organizationId,\n signWith: config.signWith,\n ...(config.ethereumAddress ? { ethereumAddress: config.ethereumAddress } : {}),\n })) as Account;\n\n const transport = http(config.rpcUrl, { fetchFn: browserFetch });\n const publicClient = createPublicClient<Transport, Chain>({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient<Transport, Chain, Account>({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n return createBrowserWalletContext({\n chain: config.chain.slug,\n rpcUrl: config.rpcUrl,\n address: account.address as HexAddress,\n account,\n walletClient,\n publicClient,\n ...(config.nonceSource ? { nonceSource: config.nonceSource } : {}),\n providerType: \"turnkey\",\n });\n}\n\nexport { createMonotonicNonceSource };\nexport type { NonceSource };\n"]}
|
package/dist/wallet/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as ChainMetadata, b as ChainTokenMap,
|
|
2
|
-
export { a as ChainReference, H as Hex, c as HexAddress, N as NonceSource, d as RpcUrlResolver, T as TokenMetadata, e as
|
|
1
|
+
import { C as ChainMetadata, b as ChainTokenMap, q as WalletRegistry, R as RpcProviderOptions, m as WalletPrivateKeyOptions, j as WalletFullContext, u as WalletTurnkeyOptions, p as WalletReadonlyOptions, o as WalletReadonlyContext } from '../types-D8s9zx-U.js';
|
|
2
|
+
export { a as ChainReference, H as Hex, c as HexAddress, N as NonceSource, d as RpcUrlResolver, T as TokenMetadata, e as TurnkeyActivityOperation, f as TurnkeyActivityTrace, g as TurnkeyOptions, h as TurnkeySignWith, W as WalletBaseContext, i as WalletContext, k as WalletOptions, l as WalletOptionsBase, n as WalletProviderType, r as WalletSendTransactionParams, s as WalletSignerContext, t as WalletTransferParams } from '../types-D8s9zx-U.js';
|
|
3
3
|
import 'viem';
|
|
4
4
|
import 'viem/accounts';
|
|
5
5
|
|
package/dist/wallet/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { zeroAddress, createPublicClient, http, createWalletClient } from 'viem';
|
|
2
|
-
import { arbitrumSepolia, arbitrum, baseSepolia, mainnet, base } from 'viem/chains';
|
|
2
|
+
import { tempo, arbitrumSepolia, arbitrum, baseSepolia, mainnet, base } from 'viem/chains';
|
|
3
3
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
4
4
|
import { Turnkey } from '@turnkey/sdk-server';
|
|
5
5
|
import { createAccount } from '@turnkey/viem';
|
|
@@ -10,6 +10,7 @@ var ETHEREUM_ALCHEMY_HOST = "https://eth-mainnet.g.alchemy.com/v2/";
|
|
|
10
10
|
var BASE_SEPOLIA_ALCHEMY_HOST = "https://base-sepolia.g.alchemy.com/v2/";
|
|
11
11
|
var ARBITRUM_ALCHEMY_HOST = "https://arb-mainnet.g.alchemy.com/v2/";
|
|
12
12
|
var ARBITRUM_SEPOLIA_ALCHEMY_HOST = "https://arb-sepolia.g.alchemy.com/v2/";
|
|
13
|
+
var TEMPO_RPC_URL = "https://rpc.tempo.xyz";
|
|
13
14
|
function buildRpcResolver(host, fallbackUrls) {
|
|
14
15
|
return (options) => {
|
|
15
16
|
if (options?.url) {
|
|
@@ -65,6 +66,14 @@ var chains = {
|
|
|
65
66
|
chain: arbitrumSepolia,
|
|
66
67
|
rpcUrl: buildRpcResolver(ARBITRUM_SEPOLIA_ALCHEMY_HOST, arbitrumSepolia.rpcUrls.default.http),
|
|
67
68
|
publicRpcUrls: arbitrumSepolia.rpcUrls.default.http
|
|
69
|
+
},
|
|
70
|
+
tempo: {
|
|
71
|
+
id: tempo.id,
|
|
72
|
+
slug: "tempo",
|
|
73
|
+
name: "Tempo",
|
|
74
|
+
chain: tempo,
|
|
75
|
+
rpcUrl: buildRpcResolver(TEMPO_RPC_URL, [TEMPO_RPC_URL]),
|
|
76
|
+
publicRpcUrls: [TEMPO_RPC_URL]
|
|
68
77
|
}
|
|
69
78
|
};
|
|
70
79
|
function createNativeToken(chainId, symbol, name) {
|
|
@@ -110,6 +119,23 @@ var tokens = {
|
|
|
110
119
|
"0x1baAbB04529D43a73232B713C0FE471f7c7334d5",
|
|
111
120
|
6
|
|
112
121
|
)
|
|
122
|
+
},
|
|
123
|
+
tempo: {
|
|
124
|
+
...createNativeToken(tempo.id, "USD", "USD"),
|
|
125
|
+
USDC: token(
|
|
126
|
+
tempo.id,
|
|
127
|
+
"USDC",
|
|
128
|
+
"Tempo USDC (USDC.e)",
|
|
129
|
+
"0x20C000000000000000000000b9537d11c60E8b50",
|
|
130
|
+
6
|
|
131
|
+
),
|
|
132
|
+
PathUSD: token(
|
|
133
|
+
tempo.id,
|
|
134
|
+
"PathUSD",
|
|
135
|
+
"PathUSD",
|
|
136
|
+
"0x20c0000000000000000000000000000000000000",
|
|
137
|
+
6
|
|
138
|
+
)
|
|
113
139
|
}
|
|
114
140
|
};
|
|
115
141
|
var DEFAULT_CHAIN = chains.base;
|
|
@@ -191,6 +217,62 @@ function createPrivateKeyProvider(config) {
|
|
|
191
217
|
nonceSource: createMonotonicNonceSource()
|
|
192
218
|
};
|
|
193
219
|
}
|
|
220
|
+
function toRecord(value) {
|
|
221
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
222
|
+
}
|
|
223
|
+
function toString(value) {
|
|
224
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
225
|
+
}
|
|
226
|
+
function extractActivity(response) {
|
|
227
|
+
const record = toRecord(response);
|
|
228
|
+
return toRecord(record?.activity);
|
|
229
|
+
}
|
|
230
|
+
function recordActivityTrace(params) {
|
|
231
|
+
const activity = extractActivity(params.response);
|
|
232
|
+
const errorRecord = toRecord(params.error);
|
|
233
|
+
const activityId = toString(activity?.id) ?? toString(errorRecord?.activityId);
|
|
234
|
+
if (!activityId) return;
|
|
235
|
+
const type = toString(activity?.type) ?? toString(errorRecord?.activityType);
|
|
236
|
+
const status = toString(activity?.status) ?? toString(errorRecord?.activityStatus);
|
|
237
|
+
params.traces.push({
|
|
238
|
+
activityId,
|
|
239
|
+
organizationId: toString(activity?.organizationId) ?? params.organizationId,
|
|
240
|
+
operation: params.operation,
|
|
241
|
+
capturedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
242
|
+
...type ? { type } : {},
|
|
243
|
+
...status ? { status } : {}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
function createActivityCaptureClient(client, traces, organizationId) {
|
|
247
|
+
return new Proxy(client, {
|
|
248
|
+
get(target, prop, receiver) {
|
|
249
|
+
const value = Reflect.get(target, prop, receiver);
|
|
250
|
+
if (prop !== "signRawPayload" && prop !== "signTransaction") {
|
|
251
|
+
return typeof value === "function" ? value.bind(target) : value;
|
|
252
|
+
}
|
|
253
|
+
return async (...args) => {
|
|
254
|
+
try {
|
|
255
|
+
const response = await value.apply(target, args);
|
|
256
|
+
recordActivityTrace({
|
|
257
|
+
traces,
|
|
258
|
+
operation: prop,
|
|
259
|
+
organizationId,
|
|
260
|
+
response
|
|
261
|
+
});
|
|
262
|
+
return response;
|
|
263
|
+
} catch (error) {
|
|
264
|
+
recordActivityTrace({
|
|
265
|
+
traces,
|
|
266
|
+
operation: prop,
|
|
267
|
+
organizationId,
|
|
268
|
+
error
|
|
269
|
+
});
|
|
270
|
+
throw error;
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
}
|
|
194
276
|
async function createTurnkeyProvider(config) {
|
|
195
277
|
const turnkey = new Turnkey({
|
|
196
278
|
apiBaseUrl: config.apiBaseUrl ?? "https://api.turnkey.com",
|
|
@@ -199,8 +281,11 @@ async function createTurnkeyProvider(config) {
|
|
|
199
281
|
apiPublicKey: config.apiPublicKey,
|
|
200
282
|
apiPrivateKey: config.apiPrivateKey
|
|
201
283
|
});
|
|
284
|
+
const activityTraces = [];
|
|
285
|
+
const apiClient = turnkey.apiClient();
|
|
286
|
+
const accountClient = config.captureActivities ? createActivityCaptureClient(apiClient, activityTraces, config.organizationId) : apiClient;
|
|
202
287
|
const account = await createAccount({
|
|
203
|
-
client:
|
|
288
|
+
client: accountClient,
|
|
204
289
|
organizationId: config.organizationId,
|
|
205
290
|
signWith: config.signWith
|
|
206
291
|
});
|
|
@@ -247,7 +332,13 @@ async function createTurnkeyProvider(config) {
|
|
|
247
332
|
sendTransaction,
|
|
248
333
|
getNativeBalance,
|
|
249
334
|
transfer,
|
|
250
|
-
nonceSource: createMonotonicNonceSource()
|
|
335
|
+
nonceSource: createMonotonicNonceSource(),
|
|
336
|
+
...config.captureActivities ? {
|
|
337
|
+
getTurnkeyActivities: () => activityTraces.map((trace) => ({ ...trace })),
|
|
338
|
+
clearTurnkeyActivities: () => {
|
|
339
|
+
activityTraces.length = 0;
|
|
340
|
+
}
|
|
341
|
+
} : {}
|
|
251
342
|
};
|
|
252
343
|
}
|
|
253
344
|
|
|
@@ -352,7 +443,8 @@ async function wallet(options = {}) {
|
|
|
352
443
|
organizationId: effectiveTurnkey.organizationId,
|
|
353
444
|
apiPublicKey: effectiveTurnkey.apiPublicKey,
|
|
354
445
|
apiPrivateKey: effectiveTurnkey.apiPrivateKey,
|
|
355
|
-
signWith: effectiveTurnkey.signWith
|
|
446
|
+
signWith: effectiveTurnkey.signWith,
|
|
447
|
+
captureActivities: options.captureTurnkeyActivities ?? effectiveTurnkey.captureActivities
|
|
356
448
|
};
|
|
357
449
|
if (effectiveTurnkey.apiBaseUrl) {
|
|
358
450
|
turnkeyConfig.apiBaseUrl = effectiveTurnkey.apiBaseUrl;
|