@dimes-dot-fi/sdk 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/{aliases-DzVxkXtK.d.cts → aliases-BGqwpyE-.d.cts} +39 -1
  2. package/dist/{aliases-DzVxkXtK.d.ts → aliases-BGqwpyE-.d.ts} +39 -1
  3. package/dist/{chunk-YUCGNELT.mjs → chunk-4MO3HKMS.mjs} +7 -1
  4. package/dist/chunk-4MO3HKMS.mjs.map +1 -0
  5. package/dist/{chunk-S65RABUT.mjs → chunk-BVILILIV.mjs} +13 -1
  6. package/dist/chunk-BVILILIV.mjs.map +1 -0
  7. package/dist/{chunk-JWAPH4GD.cjs → chunk-COSLZ5TM.cjs} +36 -11
  8. package/dist/chunk-COSLZ5TM.cjs.map +1 -0
  9. package/dist/{chunk-UUE4HG2H.cjs → chunk-DYPABUKC.cjs} +13 -1
  10. package/dist/chunk-DYPABUKC.cjs.map +1 -0
  11. package/dist/{chunk-EI5V5Z6G.mjs → chunk-SGA6OZEU.mjs} +33 -8
  12. package/dist/chunk-SGA6OZEU.mjs.map +1 -0
  13. package/dist/{chunk-ZK56XS4X.cjs → chunk-UHQZSMUD.cjs} +8 -2
  14. package/dist/chunk-UHQZSMUD.cjs.map +1 -0
  15. package/dist/contract/index.cjs +206 -14
  16. package/dist/contract/index.cjs.map +1 -1
  17. package/dist/contract/index.d.cts +155 -4
  18. package/dist/contract/index.d.ts +155 -4
  19. package/dist/contract/index.mjs +193 -1
  20. package/dist/contract/index.mjs.map +1 -1
  21. package/dist/{dimes-client-D88pW-Lm.d.ts → dimes-client-C2hT6mZ8.d.cts} +10 -2
  22. package/dist/{dimes-client-Bs6eTIvn.d.cts → dimes-client-DFAKtIeI.d.ts} +10 -2
  23. package/dist/{dimes-error-DxIoHQzj.d.cts → dimes-error-BW0wd1ib.d.cts} +1 -1
  24. package/dist/{dimes-error-BHVY6vDv.d.ts → dimes-error-IBJ5eff6.d.ts} +1 -1
  25. package/dist/index.cjs +12 -7
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +7 -7
  28. package/dist/index.d.ts +7 -7
  29. package/dist/index.mjs +8 -3
  30. package/dist/index.mjs.map +1 -1
  31. package/dist/{quote-Cy7ie8yT.d.ts → quote-BVMZb0T8.d.ts} +2 -2
  32. package/dist/{quote-CZqCqt8R.d.cts → quote-BcVJ0U0l.d.cts} +2 -2
  33. package/dist/react/index.cjs +4 -4
  34. package/dist/react/index.d.cts +3 -3
  35. package/dist/react/index.d.ts +3 -3
  36. package/dist/react/index.mjs +2 -2
  37. package/dist/{types-BcUKsoEs.d.ts → types-BwPF-kCK.d.cts} +20 -2
  38. package/dist/{types--ysRe5Os.d.cts → types-C7nWOxO-.d.ts} +20 -2
  39. package/dist/ws/index.cjs +114 -4
  40. package/dist/ws/index.cjs.map +1 -1
  41. package/dist/ws/index.d.cts +36 -9
  42. package/dist/ws/index.d.ts +36 -9
  43. package/dist/ws/index.mjs +111 -1
  44. package/dist/ws/index.mjs.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/chunk-EI5V5Z6G.mjs.map +0 -1
  47. package/dist/chunk-JWAPH4GD.cjs.map +0 -1
  48. package/dist/chunk-S65RABUT.mjs.map +0 -1
  49. package/dist/chunk-UUE4HG2H.cjs.map +0 -1
  50. package/dist/chunk-YUCGNELT.mjs.map +0 -1
  51. package/dist/chunk-ZK56XS4X.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/quote/build-quote-params.ts","../src/quote/quote-error-hints.ts","../src/quote/quote.ts"],"sourcesContent":["import type { CreateOfferParams } from \"../types\";\nimport type { QuoteParams } from \"../types/quote\";\n\nconst DEFAULT_LEVERAGE_STEP_BPS = 2500;\n\nexport function buildQuoteParams(params: QuoteParams, stepBps: number = DEFAULT_LEVERAGE_STEP_BPS): CreateOfferParams {\n const leverageBps = Math.round(params.leverageBps / stepBps) * stepBps;\n const notionalUsdPips = Math.round(params.collateralUsd * leverageBps);\n\n return {\n marketTicker: params.marketTicker,\n effectiveSide: params.side,\n leverageBps,\n notionalAmountUsdPips: notionalUsdPips.toString(),\n slippageBps: params.slippageBps,\n };\n}\n","const pipsPerUsd = 10_000;\nconst bpsPerUnit = 10_000;\nconst bpsPerPct = 100;\nconst centsFactor = 100;\nconst decimalPlaces = 2;\n\nexport const marketMovedCodes = new Set([\n \"quote_slippage_too_high\",\n \"quote_insufficient_liquidity\",\n \"quote_entry_price_out_of_range\",\n \"quote_entry_bid_depth_too_low\",\n \"quote_entry_depth_too_low\",\n \"quote_entry_spread_too_wide\",\n]);\n\nexport type QuoteHint =\n | { kind: \"use-max-collateral\"; maxCollateralUsd: number; minCollateralUsd: number }\n | { kind: \"raise-collateral\"; minCollateralUsd: number }\n | { kind: \"clamp-leverage\"; maxLeverageBps?: number }\n | { kind: \"raise-leverage\"; minLeverageBps: number }\n | { kind: \"raise-slippage\"; currentSlippageBps: number; maxSlippageBps: number }\n | { kind: \"market-full\" }\n | { kind: \"insufficient-liquidity\"; maxCollateralUsd: number; minCollateralUsd: number }\n | null;\n\ntype Params = Record<string, unknown> | null | undefined;\n\nfunction num(params: Params, key: string): number | null {\n if (!params) {\n return null;\n }\n const raw = params[key];\n if (raw === null || raw === undefined) {\n return null;\n }\n // eslint-disable-next-line no-restricted-syntax\n const n = typeof raw === \"string\" ? Number(raw) : typeof raw === \"number\" ? raw : NaN;\n return Number.isFinite(n) ? n : null;\n}\n\nfunction pipsToUsd(pips: number): number {\n return pips / pipsPerUsd;\n}\n\nfunction notionalPipsToCollateralUsd(notionalPips: number, leverageBps: number): number | null {\n if (!Number.isFinite(leverageBps) || leverageBps <= 0) {\n return null;\n }\n return (notionalPips * bpsPerUnit) / leverageBps / pipsPerUsd;\n}\n\nfunction buildExhaustedHint(\n exhaustedKind: \"market-full\" | \"insufficient-liquidity\",\n maxCollateralUsd: number,\n minCollateralUsd: number,\n): QuoteHint {\n if (exhaustedKind === \"insufficient-liquidity\") {\n return { kind: \"insufficient-liquidity\", maxCollateralUsd, minCollateralUsd };\n }\n return { kind: \"market-full\" };\n}\n\nfunction resolveMaxCollateralHint(\n params: Params,\n context: { leverageBps: number },\n capacityKey: string,\n exhaustedKind: \"market-full\" | \"insufficient-liquidity\",\n): QuoteHint {\n const serverMaxCollateralPips = num(params, \"maxSupportedCollateralUsdPips\");\n const capacityPips = num(params, capacityKey);\n const minNotionalPips = num(params, \"minNotionalUsdPips\");\n\n const fromServer = serverMaxCollateralPips !== null ? pipsToUsd(serverMaxCollateralPips) : null;\n const fromCapacity = capacityPips !== null ? notionalPipsToCollateralUsd(capacityPips, context.leverageBps) : null;\n const maxCollateralUsd =\n fromServer !== null && fromCapacity !== null ? Math.min(fromServer, fromCapacity) : (fromServer ?? fromCapacity);\n\n const minCollateralUsd =\n minNotionalPips !== null ? notionalPipsToCollateralUsd(minNotionalPips, context.leverageBps) : null;\n\n if (maxCollateralUsd === null || minCollateralUsd === null) {\n return null;\n }\n if (maxCollateralUsd < minCollateralUsd) {\n return buildExhaustedHint(exhaustedKind, maxCollateralUsd, minCollateralUsd);\n }\n return { kind: \"use-max-collateral\", maxCollateralUsd, minCollateralUsd };\n}\n\n// eslint-disable-next-line complexity\nexport function quoteErrorHint(code: string | null, params: Params, context: { leverageBps: number }): QuoteHint {\n if (!code) {\n return null;\n }\n\n switch (code) {\n case \"quote_side_capacity_exceeded\":\n case \"quote_user_position_limit_exceeded\":\n case \"quote_market_position_limit_exceeded\":\n case \"quote_side_position_limit_exceeded\":\n case \"quote_global_position_limit_exceeded\":\n case \"quote_partner_position_limit_exceeded\":\n return resolveMaxCollateralHint(params, context, \"availableCapacityUsdPips\", \"market-full\");\n\n case \"quote_insufficient_liquidity\":\n return resolveMaxCollateralHint(params, context, \"slippageMaxUsdPips\", \"market-full\");\n\n case \"notional_selector_insufficient_liquidity\":\n return resolveMaxCollateralHint(params, context, \"slippageMaxUsdPips\", \"insufficient-liquidity\");\n\n case \"quote_leverage_exceeds_collateral_floor\": {\n const minCollateralPips = num(params, \"minCollateralUsdPips\");\n if (minCollateralPips === null) {\n return null;\n }\n return { kind: \"raise-collateral\", minCollateralUsd: pipsToUsd(minCollateralPips) };\n }\n\n case \"quote_leverage_exceeds_maximum\":\n case \"quote_leverage_exceeds_model_max\": {\n const maxLeverageBps = num(params, \"maxLeverageBps\");\n if (maxLeverageBps === null) {\n return null;\n }\n return { kind: \"clamp-leverage\", maxLeverageBps };\n }\n\n case \"quote_leverage_too_high_for_price\": {\n const maxLeverageBps = num(params, \"maxAcceptableLeverageBps\");\n if (maxLeverageBps === null) {\n return null;\n }\n return { kind: \"clamp-leverage\", maxLeverageBps };\n }\n\n case \"quote_leverage_below_minimum\": {\n const minLeverageBps = num(params, \"minLeverageBps\");\n if (minLeverageBps === null) {\n return null;\n }\n return { kind: \"raise-leverage\", minLeverageBps };\n }\n\n case \"quote_slippage_too_high\": {\n const currentSlippageBps = num(params, \"currentSlippageBps\");\n const maxSlippageBps = num(params, \"maxSlippageBps\");\n if (currentSlippageBps === null || maxSlippageBps === null) {\n return null;\n }\n return { kind: \"raise-slippage\", currentSlippageBps, maxSlippageBps };\n }\n\n default:\n return null;\n }\n}\n\nexport type CorrectedField = \"collateral\" | \"leverage\" | \"slippage\";\n\nexport type HintAdjustment =\n | {\n field: \"collateral\";\n fromValue: number;\n toValue: number;\n toLabel: string;\n reason: \"max-collateral\" | \"min-collateral\";\n }\n | {\n field: \"leverage\";\n fromValue: number;\n toValue: number;\n toLabel: string;\n reason: \"clamp-max\" | \"raise-min\";\n }\n | {\n field: \"slippage\";\n fromValue: number;\n toValue: number;\n toLabel: string;\n reason: \"raise-slippage\";\n }\n | null;\n\nfunction formatUsd(value: number): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(value);\n}\n\nfunction bpsToMultiplier(bps: number): string {\n return `${(bps / bpsPerUnit).toFixed(1).replace(/\\.0$/, \"\")}x`;\n}\n\nexport function hintAdjustment(\n hint: QuoteHint,\n current: { collateralUsd: number; leverageBps: number; slippageBps: number },\n): HintAdjustment {\n if (!hint) {\n return null;\n }\n\n switch (hint.kind) {\n case \"use-max-collateral\": {\n const to = Math.max(0, Math.floor(hint.maxCollateralUsd * centsFactor) / centsFactor);\n if (to <= 0) {\n return null;\n }\n return {\n field: \"collateral\",\n fromValue: current.collateralUsd,\n toValue: to,\n toLabel: formatUsd(to),\n reason: \"max-collateral\",\n };\n }\n case \"raise-collateral\": {\n const to = Math.ceil(hint.minCollateralUsd * centsFactor) / centsFactor;\n if (to <= 0) {\n return null;\n }\n return {\n field: \"collateral\",\n fromValue: current.collateralUsd,\n toValue: to,\n toLabel: formatUsd(to),\n reason: \"min-collateral\",\n };\n }\n case \"clamp-leverage\": {\n if (hint.maxLeverageBps === undefined) {\n return null;\n }\n return {\n field: \"leverage\",\n fromValue: current.leverageBps,\n toValue: hint.maxLeverageBps,\n toLabel: bpsToMultiplier(hint.maxLeverageBps),\n reason: \"clamp-max\",\n };\n }\n case \"raise-leverage\":\n return {\n field: \"leverage\",\n fromValue: current.leverageBps,\n toValue: hint.minLeverageBps,\n toLabel: bpsToMultiplier(hint.minLeverageBps),\n reason: \"raise-min\",\n };\n case \"raise-slippage\":\n return {\n field: \"slippage\",\n fromValue: hint.currentSlippageBps,\n toValue: hint.maxSlippageBps,\n toLabel: `${(hint.maxSlippageBps / bpsPerPct).toFixed(decimalPlaces).replace(/\\.?0+$/, \"\")}%`,\n reason: \"raise-slippage\",\n };\n default:\n return null;\n }\n}\n","import { DimesApiError, DimesError } from \"../errors/dimes-error\";\nimport type { CreateOfferParams, Offer } from \"../types\";\nimport type { QuoteOptions, QuoteParams, QuoteResult } from \"../types/quote\";\nimport { buildQuoteParams } from \"./build-quote-params\";\nimport { type HintAdjustment, hintAdjustment, marketMovedCodes, quoteErrorHint } from \"./quote-error-hints\";\n\nexport interface QuoteClient {\n createDraftQuote(params: CreateOfferParams): Promise<Offer>;\n promoteDraftQuote(draftId: string): Promise<Offer>;\n createQuote(params: CreateOfferParams): Promise<Offer>;\n}\n\nconst DEFAULT_MAX_RETRIES = 3;\n\nfunction isMarketMovedError(err: unknown): boolean {\n return err instanceof DimesApiError && marketMovedCodes.has(err.code);\n}\n\nfunction applyAdjustment(\n params: CreateOfferParams,\n adj: NonNullable<HintAdjustment>,\n currentParams: QuoteParams,\n): CreateOfferParams {\n switch (adj.field) {\n case \"collateral\": {\n const notionalUsdPips = Math.round(adj.toValue * params.leverageBps);\n return { ...params, notionalAmountUsdPips: notionalUsdPips.toString() };\n }\n case \"leverage\": {\n const notionalUsdPips = Math.round(currentParams.collateralUsd * adj.toValue);\n return {\n ...params,\n leverageBps: adj.toValue,\n notionalAmountUsdPips: notionalUsdPips.toString(),\n };\n }\n case \"slippage\":\n return { ...params, slippageBps: adj.toValue };\n default:\n return params;\n }\n}\n\nfunction handleMarketMoved(err: unknown, attempt: number, maxRetries: number): boolean {\n return isMarketMovedError(err) && attempt < maxRetries;\n}\n\nfunction handleCorrection(err: unknown, currentParams: QuoteParams): { adj: NonNullable<HintAdjustment> } | null {\n if (!(err instanceof DimesApiError)) {\n return null;\n }\n\n const hint = quoteErrorHint(err.code, err.params, {\n leverageBps: currentParams.leverageBps,\n });\n\n const adj = hintAdjustment(hint, {\n collateralUsd: currentParams.collateralUsd,\n leverageBps: currentParams.leverageBps,\n slippageBps: currentParams.slippageBps,\n });\n\n if (!adj) {\n return null;\n }\n\n return { adj };\n}\n\n// eslint-disable-next-line complexity\nexport async function executeQuote(\n client: QuoteClient,\n params: QuoteParams,\n options?: QuoteOptions,\n): Promise<QuoteResult> {\n const maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n const autoCorrect = options?.autoCorrect ?? true;\n const corrections: NonNullable<HintAdjustment>[] = [];\n let retries = 0;\n\n let offerParams = buildQuoteParams(params);\n const currentParams = { ...params };\n\n const draft = await client.createDraftQuote(offerParams);\n options?.onDraftReady?.(draft);\n\n let currentDraft: Offer = draft;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const promotedOffer = await client.promoteDraftQuote(currentDraft.id);\n return { offer: promotedOffer, corrections, retries };\n } catch (err) {\n if (handleMarketMoved(err, attempt, maxRetries)) {\n const newDraft = await client.createDraftQuote(offerParams);\n retries++;\n\n const callbackResult = options?.onMarketMoved?.({\n originalDraft: currentDraft,\n newDraft,\n retryCount: retries,\n });\n\n if (callbackResult === false) {\n throw err;\n }\n\n currentDraft = newDraft;\n continue;\n }\n\n if (autoCorrect) {\n const correction = handleCorrection(err, currentParams);\n\n if (correction) {\n const callbackResult = options?.onCorrection?.(correction.adj);\n if (callbackResult === false) {\n throw err;\n }\n\n offerParams = applyAdjustment(offerParams, correction.adj, currentParams);\n corrections.push(correction.adj);\n\n const correctedOffer = await client.createQuote(offerParams);\n return { offer: correctedOffer, corrections, retries };\n }\n }\n\n throw err;\n }\n }\n\n throw new DimesError(\"market_moved_retries_exhausted\", \"Exhausted market-moved retries\");\n}\n"],"mappings":";;;;;;AAGA,IAAM,4BAA4B;AAE3B,SAAS,iBAAiB,QAAqB,UAAkB,2BAA8C;AACpH,QAAM,cAAc,KAAK,MAAM,OAAO,cAAc,OAAO,IAAI;AAC/D,QAAM,kBAAkB,KAAK,MAAM,OAAO,gBAAgB,WAAW;AAErE,SAAO;AAAA,IACL,cAAc,OAAO;AAAA,IACrB,eAAe,OAAO;AAAA,IACtB;AAAA,IACA,uBAAuB,gBAAgB,SAAS;AAAA,IAChD,aAAa,OAAO;AAAA,EACtB;AACF;;;AChBA,IAAM,aAAa;AACnB,IAAM,aAAa;AACnB,IAAM,YAAY;AAClB,IAAM,cAAc;AACpB,IAAM,gBAAgB;AAEf,IAAM,mBAAmB,oBAAI,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAcD,SAAS,IAAI,QAAgB,KAA4B;AACvD,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AACA,QAAM,MAAM,OAAO,GAAG;AACtB,MAAI,QAAQ,QAAQ,QAAQ,QAAW;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,OAAO,QAAQ,WAAW,OAAO,GAAG,IAAI,OAAO,QAAQ,WAAW,MAAM;AAClF,SAAO,OAAO,SAAS,CAAC,IAAI,IAAI;AAClC;AAEA,SAAS,UAAU,MAAsB;AACvC,SAAO,OAAO;AAChB;AAEA,SAAS,4BAA4B,cAAsB,aAAoC;AAC7F,MAAI,CAAC,OAAO,SAAS,WAAW,KAAK,eAAe,GAAG;AACrD,WAAO;AAAA,EACT;AACA,SAAQ,eAAe,aAAc,cAAc;AACrD;AAEA,SAAS,mBACP,eACA,kBACA,kBACW;AACX,MAAI,kBAAkB,0BAA0B;AAC9C,WAAO,EAAE,MAAM,0BAA0B,kBAAkB,iBAAiB;AAAA,EAC9E;AACA,SAAO,EAAE,MAAM,cAAc;AAC/B;AAEA,SAAS,yBACP,QACA,SACA,aACA,eACW;AACX,QAAM,0BAA0B,IAAI,QAAQ,+BAA+B;AAC3E,QAAM,eAAe,IAAI,QAAQ,WAAW;AAC5C,QAAM,kBAAkB,IAAI,QAAQ,oBAAoB;AAExD,QAAM,aAAa,4BAA4B,OAAO,UAAU,uBAAuB,IAAI;AAC3F,QAAM,eAAe,iBAAiB,OAAO,4BAA4B,cAAc,QAAQ,WAAW,IAAI;AAC9G,QAAM,mBACJ,eAAe,QAAQ,iBAAiB,OAAO,KAAK,IAAI,YAAY,YAAY,IAAK,cAAc;AAErG,QAAM,mBACJ,oBAAoB,OAAO,4BAA4B,iBAAiB,QAAQ,WAAW,IAAI;AAEjG,MAAI,qBAAqB,QAAQ,qBAAqB,MAAM;AAC1D,WAAO;AAAA,EACT;AACA,MAAI,mBAAmB,kBAAkB;AACvC,WAAO,mBAAmB,eAAe,kBAAkB,gBAAgB;AAAA,EAC7E;AACA,SAAO,EAAE,MAAM,sBAAsB,kBAAkB,iBAAiB;AAC1E;AAGO,SAAS,eAAe,MAAqB,QAAgB,SAA6C;AAC/G,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,yBAAyB,QAAQ,SAAS,4BAA4B,aAAa;AAAA,IAE5F,KAAK;AACH,aAAO,yBAAyB,QAAQ,SAAS,sBAAsB,aAAa;AAAA,IAEtF,KAAK;AACH,aAAO,yBAAyB,QAAQ,SAAS,sBAAsB,wBAAwB;AAAA,IAEjG,KAAK,2CAA2C;AAC9C,YAAM,oBAAoB,IAAI,QAAQ,sBAAsB;AAC5D,UAAI,sBAAsB,MAAM;AAC9B,eAAO;AAAA,MACT;AACA,aAAO,EAAE,MAAM,oBAAoB,kBAAkB,UAAU,iBAAiB,EAAE;AAAA,IACpF;AAAA,IAEA,KAAK;AAAA,IACL,KAAK,oCAAoC;AACvC,YAAM,iBAAiB,IAAI,QAAQ,gBAAgB;AACnD,UAAI,mBAAmB,MAAM;AAC3B,eAAO;AAAA,MACT;AACA,aAAO,EAAE,MAAM,kBAAkB,eAAe;AAAA,IAClD;AAAA,IAEA,KAAK,qCAAqC;AACxC,YAAM,iBAAiB,IAAI,QAAQ,0BAA0B;AAC7D,UAAI,mBAAmB,MAAM;AAC3B,eAAO;AAAA,MACT;AACA,aAAO,EAAE,MAAM,kBAAkB,eAAe;AAAA,IAClD;AAAA,IAEA,KAAK,gCAAgC;AACnC,YAAM,iBAAiB,IAAI,QAAQ,gBAAgB;AACnD,UAAI,mBAAmB,MAAM;AAC3B,eAAO;AAAA,MACT;AACA,aAAO,EAAE,MAAM,kBAAkB,eAAe;AAAA,IAClD;AAAA,IAEA,KAAK,2BAA2B;AAC9B,YAAM,qBAAqB,IAAI,QAAQ,oBAAoB;AAC3D,YAAM,iBAAiB,IAAI,QAAQ,gBAAgB;AACnD,UAAI,uBAAuB,QAAQ,mBAAmB,MAAM;AAC1D,eAAO;AAAA,MACT;AACA,aAAO,EAAE,MAAM,kBAAkB,oBAAoB,eAAe;AAAA,IACtE;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;AA4BA,SAAS,UAAU,OAAuB;AACxC,SAAO,IAAI,KAAK,aAAa,SAAS;AAAA,IACpC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,EACzB,CAAC,EAAE,OAAO,KAAK;AACjB;AAEA,SAAS,gBAAgB,KAAqB;AAC5C,SAAO,IAAI,MAAM,YAAY,QAAQ,CAAC,EAAE,QAAQ,QAAQ,EAAE,CAAC;AAC7D;AAEO,SAAS,eACd,MACA,SACgB;AAChB,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK,sBAAsB;AACzB,YAAM,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,mBAAmB,WAAW,IAAI,WAAW;AACpF,UAAI,MAAM,GAAG;AACX,eAAO;AAAA,MACT;AACA,aAAO;AAAA,QACL,OAAO;AAAA,QACP,WAAW,QAAQ;AAAA,QACnB,SAAS;AAAA,QACT,SAAS,UAAU,EAAE;AAAA,QACrB,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,KAAK,oBAAoB;AACvB,YAAM,KAAK,KAAK,KAAK,KAAK,mBAAmB,WAAW,IAAI;AAC5D,UAAI,MAAM,GAAG;AACX,eAAO;AAAA,MACT;AACA,aAAO;AAAA,QACL,OAAO;AAAA,QACP,WAAW,QAAQ;AAAA,QACnB,SAAS;AAAA,QACT,SAAS,UAAU,EAAE;AAAA,QACrB,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,KAAK,kBAAkB;AACrB,UAAI,KAAK,mBAAmB,QAAW;AACrC,eAAO;AAAA,MACT;AACA,aAAO;AAAA,QACL,OAAO;AAAA,QACP,WAAW,QAAQ;AAAA,QACnB,SAAS,KAAK;AAAA,QACd,SAAS,gBAAgB,KAAK,cAAc;AAAA,QAC5C,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,WAAW,QAAQ;AAAA,QACnB,SAAS,KAAK;AAAA,QACd,SAAS,gBAAgB,KAAK,cAAc;AAAA,QAC5C,QAAQ;AAAA,MACV;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,WAAW,KAAK;AAAA,QAChB,SAAS,KAAK;AAAA,QACd,SAAS,IAAI,KAAK,iBAAiB,WAAW,QAAQ,aAAa,EAAE,QAAQ,UAAU,EAAE,CAAC;AAAA,QAC1F,QAAQ;AAAA,MACV;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACF;;;AC1PA,IAAM,sBAAsB;AAE5B,SAAS,mBAAmB,KAAuB;AACjD,SAAO,eAAe,iBAAiB,iBAAiB,IAAI,IAAI,IAAI;AACtE;AAEA,SAAS,gBACP,QACA,KACA,eACmB;AACnB,UAAQ,IAAI,OAAO;AAAA,IACjB,KAAK,cAAc;AACjB,YAAM,kBAAkB,KAAK,MAAM,IAAI,UAAU,OAAO,WAAW;AACnE,aAAO,EAAE,GAAG,QAAQ,uBAAuB,gBAAgB,SAAS,EAAE;AAAA,IACxE;AAAA,IACA,KAAK,YAAY;AACf,YAAM,kBAAkB,KAAK,MAAM,cAAc,gBAAgB,IAAI,OAAO;AAC5E,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa,IAAI;AAAA,QACjB,uBAAuB,gBAAgB,SAAS;AAAA,MAClD;AAAA,IACF;AAAA,IACA,KAAK;AACH,aAAO,EAAE,GAAG,QAAQ,aAAa,IAAI,QAAQ;AAAA,IAC/C;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,kBAAkB,KAAc,SAAiB,YAA6B;AACrF,SAAO,mBAAmB,GAAG,KAAK,UAAU;AAC9C;AAEA,SAAS,iBAAiB,KAAc,eAAyE;AAC/G,MAAI,EAAE,eAAe,gBAAgB;AACnC,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,eAAe,IAAI,MAAM,IAAI,QAAQ;AAAA,IAChD,aAAa,cAAc;AAAA,EAC7B,CAAC;AAED,QAAM,MAAM,eAAe,MAAM;AAAA,IAC/B,eAAe,cAAc;AAAA,IAC7B,aAAa,cAAc;AAAA,IAC3B,aAAa,cAAc;AAAA,EAC7B,CAAC;AAED,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,IAAI;AACf;AAGA,eAAsB,aACpB,QACA,QACA,SACsB;AACtB,QAAM,aAAa,SAAS,cAAc;AAC1C,QAAM,cAAc,SAAS,eAAe;AAC5C,QAAM,cAA6C,CAAC;AACpD,MAAI,UAAU;AAEd,MAAI,cAAc,iBAAiB,MAAM;AACzC,QAAM,gBAAgB,EAAE,GAAG,OAAO;AAElC,QAAM,QAAQ,MAAM,OAAO,iBAAiB,WAAW;AACvD,WAAS,eAAe,KAAK;AAE7B,MAAI,eAAsB;AAE1B,WAAS,UAAU,GAAG,WAAW,YAAY,WAAW;AACtD,QAAI;AACF,YAAM,gBAAgB,MAAM,OAAO,kBAAkB,aAAa,EAAE;AACpE,aAAO,EAAE,OAAO,eAAe,aAAa,QAAQ;AAAA,IACtD,SAAS,KAAK;AACZ,UAAI,kBAAkB,KAAK,SAAS,UAAU,GAAG;AAC/C,cAAM,WAAW,MAAM,OAAO,iBAAiB,WAAW;AAC1D;AAEA,cAAM,iBAAiB,SAAS,gBAAgB;AAAA,UAC9C,eAAe;AAAA,UACf;AAAA,UACA,YAAY;AAAA,QACd,CAAC;AAED,YAAI,mBAAmB,OAAO;AAC5B,gBAAM;AAAA,QACR;AAEA,uBAAe;AACf;AAAA,MACF;AAEA,UAAI,aAAa;AACf,cAAM,aAAa,iBAAiB,KAAK,aAAa;AAEtD,YAAI,YAAY;AACd,gBAAM,iBAAiB,SAAS,eAAe,WAAW,GAAG;AAC7D,cAAI,mBAAmB,OAAO;AAC5B,kBAAM;AAAA,UACR;AAEA,wBAAc,gBAAgB,aAAa,WAAW,KAAK,aAAa;AACxE,sBAAY,KAAK,WAAW,GAAG;AAE/B,gBAAM,iBAAiB,MAAM,OAAO,YAAY,WAAW;AAC3D,iBAAO,EAAE,OAAO,gBAAgB,aAAa,QAAQ;AAAA,QACvD;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,IAAI,WAAW,kCAAkC,gCAAgC;AACzF;","names":[]}
@@ -11,6 +11,11 @@ var positionEventTypes = [
11
11
  "position.reverted",
12
12
  "position.settled"
13
13
  ];
14
+ var marketEventTypes = [
15
+ "market.discovered",
16
+ "market.eligibility_changed",
17
+ "market.max_leverage_changed"
18
+ ];
14
19
  var notificationCodes = {
15
20
  orderFulfillmentRetrying: "ORDER_FULFILLMENT_RETRYING"
16
21
  };
@@ -18,5 +23,6 @@ var notificationCodes = {
18
23
 
19
24
 
20
25
 
21
- exports.positionEventTypes = positionEventTypes; exports.notificationCodes = notificationCodes;
22
- //# sourceMappingURL=chunk-ZK56XS4X.cjs.map
26
+
27
+ exports.positionEventTypes = positionEventTypes; exports.marketEventTypes = marketEventTypes; exports.notificationCodes = notificationCodes;
28
+ //# sourceMappingURL=chunk-UHQZSMUD.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/alexemery/bl/dimes-sdk/dist/chunk-UHQZSMUD.cjs","../src/ws/types.ts"],"names":[],"mappings":"AAAA;ACEO,IAAM,mBAAA,EAAqB;AAAA,EAChC,oBAAA;AAAA,EACA,0BAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,wBAAA;AAAA,EACA,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAkBO,IAAM,iBAAA,EAAmB;AAAA,EAC9B,mBAAA;AAAA,EACA,4BAAA;AAAA,EACA;AACF,CAAA;AA6CO,IAAM,kBAAA,EAAoB;AAAA,EAC/B,wBAAA,EAA0B;AAC5B,CAAA;AD7DA;AACA;AACE;AACA;AACA;AACF,4IAAC","file":"/Users/alexemery/bl/dimes-sdk/dist/chunk-UHQZSMUD.cjs","sourcesContent":[null,"import type { Market, MarketLeverage, MarketPolymarket, Position } from \"../types\";\n\nexport const positionEventTypes = [\n \"position.cancelled\",\n \"position.close_requested\",\n \"position.closed\",\n \"position.created\",\n \"position.force_unwound\",\n \"position.liquidated\",\n \"position.opened\",\n \"position.opening\",\n \"position.reverted\",\n \"position.settled\",\n] as const;\n\nexport type PositionEventType = (typeof positionEventTypes)[number];\n\nexport interface PositionEventEnvelope {\n id: string;\n type: PositionEventType;\n created_at: string;\n data: Record<string, unknown>;\n}\n\nexport interface PositionEvent {\n id: string;\n type: PositionEventType;\n createdAt: string;\n data: Position;\n}\n\nexport const marketEventTypes = [\n \"market.discovered\",\n \"market.eligibility_changed\",\n \"market.max_leverage_changed\",\n] as const;\n\nexport type MarketEventType = (typeof marketEventTypes)[number];\n\nexport type MarketDelta = Pick<Market, \"id\"> & {\n polymarket: MarketPolymarket;\n leverage?: MarketLeverage;\n} & Partial<Omit<Market, \"id\" | \"leverage\">>;\n\nexport interface MarketEventEnvelope {\n id: string;\n type: MarketEventType;\n created_at: string;\n data: Record<string, unknown>[];\n}\n\nexport interface MarketEvent {\n id: string;\n type: MarketEventType;\n createdAt: string;\n data: Market[] | MarketDelta[];\n}\n\nexport interface NotificationEventEnvelope {\n id: string;\n type: \"notification\";\n created_at: string;\n data: {\n code: string;\n message: string;\n params?: Record<string, unknown>;\n };\n}\n\nexport interface NotificationEvent {\n id: string;\n type: \"notification\";\n createdAt: string;\n data: {\n code: string;\n message: string;\n params?: Record<string, unknown>;\n };\n}\n\nexport const notificationCodes = {\n orderFulfillmentRetrying: \"ORDER_FULFILLMENT_RETRYING\",\n} as const;\n\nexport type NotificationCode = (typeof notificationCodes)[keyof typeof notificationCodes];\n"]}
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
 
4
- var _chunkUUE4HG2Hcjs = require('../chunk-UUE4HG2H.cjs');
4
+ var _chunkDYPABUKCcjs = require('../chunk-DYPABUKC.cjs');
5
5
 
6
6
  // src/contract/vault-abi.json
7
7
  var vault_abi_default = {
@@ -411,7 +411,7 @@ var _viem = require('viem');
411
411
  function toHex(value) {
412
412
  if (!_viem.isHex.call(void 0, value)) {
413
413
  const HEX_PREVIEW_LENGTH = 10;
414
- throw new (0, _chunkUUE4HG2Hcjs.DimesError)(
414
+ throw new (0, _chunkDYPABUKCcjs.DimesError)(
415
415
  "invalid_hex",
416
416
  `Expected hex string starting with 0x, got: ${value.slice(0, HEX_PREVIEW_LENGTH)}`
417
417
  );
@@ -420,7 +420,7 @@ function toHex(value) {
420
420
  }
421
421
  function toAddress(value) {
422
422
  if (!_viem.isAddress.call(void 0, value)) {
423
- throw new (0, _chunkUUE4HG2Hcjs.DimesError)("invalid_address", `Invalid EVM address: ${value}`);
423
+ throw new (0, _chunkDYPABUKCcjs.DimesError)("invalid_address", `Invalid EVM address: ${value}`);
424
424
  }
425
425
  return _viem.getAddress.call(void 0, value);
426
426
  }
@@ -464,6 +464,189 @@ function buildRequestCloseTx(vaultAddress, positionKey) {
464
464
  };
465
465
  }
466
466
 
467
+ // src/contract/deposit-wallet.ts
468
+
469
+ var depositWalletFactoryAddress = "0x00000000000Fb5C9ADea0298D729A0CB3823Cc07";
470
+ var polymarketRelayerBaseUrl = "https://relayer-v2.polymarket.com";
471
+ var depositWalletBatchTypes = {
472
+ Batch: [
473
+ { name: "wallet", type: "address" },
474
+ { name: "nonce", type: "uint256" },
475
+ { name: "deadline", type: "uint256" },
476
+ { name: "calls", type: "Call[]" }
477
+ ],
478
+ Call: [
479
+ { name: "target", type: "address" },
480
+ { name: "value", type: "uint256" },
481
+ { name: "data", type: "bytes" }
482
+ ]
483
+ };
484
+ var reserveDepositAbi = [
485
+ {
486
+ type: "function",
487
+ name: "reserveDeposit",
488
+ stateMutability: "nonpayable",
489
+ inputs: [{ name: "expectedAmountUsdcUnits", type: "uint256" }],
490
+ outputs: []
491
+ }
492
+ ];
493
+ var createPositionPushFundedAbi = [
494
+ {
495
+ type: "function",
496
+ name: "createPositionPushFunded",
497
+ stateMutability: "nonpayable",
498
+ inputs: [
499
+ { name: "positionSeed", type: "bytes16" },
500
+ { name: "marketId", type: "bytes32" },
501
+ { name: "tokenId", type: "uint256" },
502
+ { name: "collateralUsdcUnits", type: "uint256" },
503
+ { name: "leverageBps", type: "uint32" },
504
+ { name: "notionalUsdcUnits", type: "uint256" },
505
+ { name: "originationFeeBps", type: "uint16" },
506
+ { name: "lifetimeFeeAprBps", type: "uint16" },
507
+ { name: "liquidationFeeBps", type: "uint16" },
508
+ { name: "venueFeeUsdcUnits", type: "uint256" },
509
+ { name: "signature", type: "bytes" },
510
+ { name: "signatureExpiry", type: "uint256" }
511
+ ],
512
+ outputs: []
513
+ }
514
+ ];
515
+ var erc20TransferAbi = [
516
+ {
517
+ type: "function",
518
+ name: "transfer",
519
+ stateMutability: "nonpayable",
520
+ inputs: [
521
+ { name: "to", type: "address" },
522
+ { name: "amount", type: "uint256" }
523
+ ],
524
+ outputs: [{ name: "", type: "bool" }]
525
+ }
526
+ ];
527
+ function buildPushFundedCreateCalls(offer, pUsdAddress) {
528
+ const vaultAddress = toAddress(offer.polygonVaultContractAddress);
529
+ const totalUserAmountUsdcUnits = BigInt(offer.totalUserAmountUsdcUnits);
530
+ const reserveDepositData = _viem.encodeFunctionData.call(void 0, {
531
+ abi: reserveDepositAbi,
532
+ functionName: "reserveDeposit",
533
+ args: [totalUserAmountUsdcUnits]
534
+ });
535
+ const transferData = _viem.encodeFunctionData.call(void 0, {
536
+ abi: erc20TransferAbi,
537
+ functionName: "transfer",
538
+ args: [vaultAddress, totalUserAmountUsdcUnits]
539
+ });
540
+ const createPositionData = _viem.encodeFunctionData.call(void 0, {
541
+ abi: createPositionPushFundedAbi,
542
+ functionName: "createPositionPushFunded",
543
+ args: [
544
+ toHex(offer.positionSeedHex),
545
+ toHex(offer.polymarketMarketId),
546
+ BigInt(offer.polymarketTokenId),
547
+ BigInt(offer.collateralUsdcUnits),
548
+ offer.leverageBps,
549
+ BigInt(offer.notionalUsdcUnits),
550
+ offer.originationFeeBps,
551
+ offer.lifetimeFeeAprBps,
552
+ offer.liquidationFeeBps,
553
+ BigInt(offer.expectedOpenTradingFeeUsdcUnits),
554
+ toHex(offer.contractSignature),
555
+ BigInt(offer.signatureExpiry)
556
+ ]
557
+ });
558
+ return [
559
+ { target: vaultAddress, value: 0n, data: reserveDepositData },
560
+ { target: toAddress(pUsdAddress), value: 0n, data: transferData },
561
+ { target: vaultAddress, value: 0n, data: createPositionData }
562
+ ];
563
+ }
564
+ function buildRequestCloseCalls(vaultAddress, positionKey) {
565
+ const closeData = _viem.encodeFunctionData.call(void 0, {
566
+ abi: vaultAbi,
567
+ functionName: "requestClose",
568
+ args: [toHex(positionKey)]
569
+ });
570
+ return [{ target: toAddress(vaultAddress), value: 0n, data: closeData }];
571
+ }
572
+ function buildDepositWalletBatch(params) {
573
+ return {
574
+ wallet: toAddress(params.depositWalletAddress),
575
+ nonce: params.nonce,
576
+ deadline: params.deadline,
577
+ calls: params.calls
578
+ };
579
+ }
580
+ function getDepositWalletBatchTypedData(batch) {
581
+ return {
582
+ domain: {
583
+ name: "DepositWallet",
584
+ version: "1",
585
+ chainId: 137,
586
+ verifyingContract: batch.wallet
587
+ },
588
+ types: depositWalletBatchTypes,
589
+ primaryType: "Batch",
590
+ message: batch
591
+ };
592
+ }
593
+ function buildRelayerSubmitPayload(params) {
594
+ return {
595
+ type: "WALLET",
596
+ from: toAddress(params.ownerAddress),
597
+ to: depositWalletFactoryAddress,
598
+ nonce: params.batch.nonce.toString(),
599
+ signature: params.signature,
600
+ depositWalletParams: {
601
+ depositWallet: params.batch.wallet,
602
+ deadline: params.batch.deadline.toString(),
603
+ calls: params.batch.calls.map((call) => ({
604
+ target: call.target,
605
+ value: call.value.toString(),
606
+ data: call.data
607
+ }))
608
+ }
609
+ };
610
+ }
611
+ function base64ToBytes(value) {
612
+ const binary = atob(value);
613
+ const buffer = new ArrayBuffer(binary.length);
614
+ const bytes = new Uint8Array(buffer);
615
+ for (let i = 0; i < binary.length; i++) {
616
+ bytes[i] = binary.charCodeAt(i);
617
+ }
618
+ return buffer;
619
+ }
620
+ function bytesToBase64Url(bytes) {
621
+ let binary = "";
622
+ const view = new Uint8Array(bytes);
623
+ for (const byte of view) {
624
+ binary += String.fromCharCode(byte);
625
+ }
626
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_");
627
+ }
628
+ async function buildRelayerAuthHeaders(params) {
629
+ const msPerSecond = 1e3;
630
+ const timestamp = _nullishCoalesce(params.timestamp, () => ( Math.floor(Date.now() / msPerSecond).toString()));
631
+ const key = await crypto.subtle.importKey(
632
+ "raw",
633
+ base64ToBytes(params.apiSecret),
634
+ { name: "HMAC", hash: "SHA-256" },
635
+ false,
636
+ ["sign"]
637
+ );
638
+ const encoded = new TextEncoder().encode(`${timestamp}POST/submit${params.body}`);
639
+ const message = new Uint8Array(encoded).buffer;
640
+ const signature = await crypto.subtle.sign("HMAC", key, message);
641
+ return {
642
+ "Content-Type": "application/json",
643
+ POLY_BUILDER_API_KEY: params.apiKey,
644
+ POLY_BUILDER_TIMESTAMP: timestamp,
645
+ POLY_BUILDER_PASSPHRASE: params.apiPassphrase,
646
+ POLY_BUILDER_SIGNATURE: bytesToBase64Url(signature)
647
+ };
648
+ }
649
+
467
650
  // src/contract/verify-signature.ts
468
651
 
469
652
  var createPositionTypes = {
@@ -522,7 +705,7 @@ async function verifyOfferSignature(client, offer, userAddress) {
522
705
  const recoveredSigner = await recoverCreatePositionSigner(offer, userAddress);
523
706
  const expectedSigner = _viem.getAddress.call(void 0, info.polygonSignerAddress);
524
707
  if (recoveredSigner !== expectedSigner) {
525
- throw new (0, _chunkUUE4HG2Hcjs.DimesContractError)(
708
+ throw new (0, _chunkDYPABUKCcjs.DimesContractError)(
526
709
  "invalid_signer",
527
710
  `Recovered signer ${recoveredSigner} does not match expected authority ${expectedSigner}`
528
711
  );
@@ -613,12 +796,12 @@ function firstLine(s) {
613
796
  }
614
797
  function formatContractError(err) {
615
798
  if (!err) {
616
- return new (0, _chunkUUE4HG2Hcjs.DimesContractError)("unknown", "Transaction failed.");
799
+ return new (0, _chunkDYPABUKCcjs.DimesContractError)("unknown", "Transaction failed.");
617
800
  }
618
801
  if (err instanceof _viem.BaseError) {
619
802
  const rejected = err.walk((e) => e instanceof _viem.UserRejectedRequestError);
620
803
  if (rejected) {
621
- return new (0, _chunkUUE4HG2Hcjs.DimesContractError)("UserRejected", "Transaction rejected in wallet.");
804
+ return new (0, _chunkDYPABUKCcjs.DimesContractError)("UserRejected", "Transaction rejected in wallet.");
622
805
  }
623
806
  const reverted = err.walk(
624
807
  (e) => e instanceof _viem.ContractFunctionRevertedError
@@ -629,12 +812,12 @@ function formatContractError(err) {
629
812
  if (errorName) {
630
813
  const fmt = friendlyByErrorName[errorName];
631
814
  const message = fmt ? fmt(args) : humanizeName(errorName);
632
- return new (0, _chunkUUE4HG2Hcjs.DimesContractError)(errorName, message);
815
+ return new (0, _chunkDYPABUKCcjs.DimesContractError)(errorName, message);
633
816
  }
634
817
  const raw = reverted.raw;
635
818
  const selector = raw && raw.length >= HEX_SELECTOR_LENGTH ? raw.slice(0, HEX_SELECTOR_LENGTH) : void 0;
636
819
  const selectorMessage = selector ? friendlyBySelector[selector] : void 0;
637
- return new (0, _chunkUUE4HG2Hcjs.DimesContractError)(
820
+ return new (0, _chunkDYPABUKCcjs.DimesContractError)(
638
821
  _nullishCoalesce(selector, () => ( "unknown_revert")),
639
822
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
640
823
  _nullishCoalesce(_nullishCoalesce(selectorMessage, () => ( reverted.shortMessage)), () => ( "Contract reverted."))
@@ -642,17 +825,17 @@ function formatContractError(err) {
642
825
  }
643
826
  const exec = err.walk((e) => e instanceof _viem.ContractFunctionExecutionError);
644
827
  if (_optionalChain([exec, 'optionalAccess', _5 => _5.shortMessage])) {
645
- return new (0, _chunkUUE4HG2Hcjs.DimesContractError)("execution_error", firstLine(exec.shortMessage));
828
+ return new (0, _chunkDYPABUKCcjs.DimesContractError)("execution_error", firstLine(exec.shortMessage));
646
829
  }
647
830
  if (err.shortMessage) {
648
- return new (0, _chunkUUE4HG2Hcjs.DimesContractError)("base_error", firstLine(err.shortMessage));
831
+ return new (0, _chunkDYPABUKCcjs.DimesContractError)("base_error", firstLine(err.shortMessage));
649
832
  }
650
- return new (0, _chunkUUE4HG2Hcjs.DimesContractError)("base_error", firstLine(err.message));
833
+ return new (0, _chunkDYPABUKCcjs.DimesContractError)("base_error", firstLine(err.message));
651
834
  }
652
835
  if (err instanceof Error) {
653
- return new (0, _chunkUUE4HG2Hcjs.DimesContractError)("error", firstLine(err.message));
836
+ return new (0, _chunkDYPABUKCcjs.DimesContractError)("error", firstLine(err.message));
654
837
  }
655
- return new (0, _chunkUUE4HG2Hcjs.DimesContractError)("unknown", "Transaction failed.");
838
+ return new (0, _chunkDYPABUKCcjs.DimesContractError)("unknown", "Transaction failed.");
656
839
  }
657
840
 
658
841
 
@@ -666,5 +849,14 @@ function formatContractError(err) {
666
849
 
667
850
 
668
851
 
669
- exports.buildApproveTx = buildApproveTx; exports.buildCreatePositionTx = buildCreatePositionTx; exports.buildRequestCloseTx = buildRequestCloseTx; exports.erc20Abi = erc20Abi; exports.formatContractError = formatContractError; exports.recoverCreatePositionSigner = recoverCreatePositionSigner; exports.resolveExpectedSigner = resolveExpectedSigner; exports.toAddress = toAddress; exports.toHex = toHex; exports.vaultAbi = vaultAbi; exports.verifyOfferSignature = verifyOfferSignature;
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+ exports.buildApproveTx = buildApproveTx; exports.buildCreatePositionTx = buildCreatePositionTx; exports.buildDepositWalletBatch = buildDepositWalletBatch; exports.buildPushFundedCreateCalls = buildPushFundedCreateCalls; exports.buildRelayerAuthHeaders = buildRelayerAuthHeaders; exports.buildRelayerSubmitPayload = buildRelayerSubmitPayload; exports.buildRequestCloseCalls = buildRequestCloseCalls; exports.buildRequestCloseTx = buildRequestCloseTx; exports.depositWalletBatchTypes = depositWalletBatchTypes; exports.depositWalletFactoryAddress = depositWalletFactoryAddress; exports.erc20Abi = erc20Abi; exports.formatContractError = formatContractError; exports.getDepositWalletBatchTypedData = getDepositWalletBatchTypedData; exports.polymarketRelayerBaseUrl = polymarketRelayerBaseUrl; exports.recoverCreatePositionSigner = recoverCreatePositionSigner; exports.resolveExpectedSigner = resolveExpectedSigner; exports.toAddress = toAddress; exports.toHex = toHex; exports.vaultAbi = vaultAbi; exports.verifyOfferSignature = verifyOfferSignature;
670
862
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/alexemery/bl/dimes-sdk/dist/contract/index.cjs","../../src/contract/vault-abi.json","../../src/contract/abi.ts","../../src/contract/evm.ts","../../src/contract/build-tx.ts","../../src/contract/verify-signature.ts","../../src/contract/error-messages.ts"],"names":[],"mappings":"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","file":"/Users/alexemery/bl/dimes-sdk/dist/contract/index.cjs","sourcesContent":[null,"{\n \"abi\": [\n {\n \"type\": \"function\",\n \"name\": \"createPosition\",\n \"inputs\": [\n {\n \"name\": \"positionSeed\",\n \"type\": \"bytes16\",\n \"internalType\": \"bytes16\"\n },\n {\n \"name\": \"marketId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"collateralUsdcUnits\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"leverageBps\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"notionalUsdcUnits\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"originationFeeBps\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"lifetimeFeeAprBps\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"liquidationFeeBps\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"venueFeeUsdcUnits\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"signatureExpiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestClose\",\n \"inputs\": [\n {\n \"name\": \"positionKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"CloseRequested\",\n \"inputs\": [\n {\n \"name\": \"positionKey\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"state\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PositionCreated\",\n \"inputs\": [\n {\n \"name\": \"positionKey\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"positionSeed\",\n \"type\": \"bytes16\",\n \"indexed\": false,\n \"internalType\": \"bytes16\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"marketId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"collateralUsdcUnits\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"leverageBps\",\n \"type\": \"uint32\",\n \"indexed\": false,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"notionalUsdcUnits\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"originationFeeUsdcUnits\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"venueFeeUsdcUnits\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"originationFeeBps\",\n \"type\": \"uint16\",\n \"indexed\": false,\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"lifetimeFeeAprBps\",\n \"type\": \"uint16\",\n \"indexed\": false,\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"liquidationFeeBps\",\n \"type\": \"uint16\",\n \"indexed\": false,\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"state\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"CancelDelayNotElapsed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CollateralBelowMinimum\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"inputs\": [\n {\n \"name\": \"length\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureS\",\n \"inputs\": [\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"EmergencyOnlyMode\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"EnforcedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"FailedCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"FeeRateExceedsMaximum\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InsufficientCapital\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidLeverage\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidNotional\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPositionState\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MarketCapitalExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewPositionsPaused\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoTokensToClose\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPositionOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PositionAlreadyExists\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PositionNotFound\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SafeERC20FailedOperation\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ServerHalted\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SignatureExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenCapitalExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TotalCapitalExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UserActionsPaused\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UserCapitalExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAmount\",\n \"inputs\": []\n }\n ]\n}\n","import type { Abi } from \"viem\";\nimport vaultAbiJson from \"./vault-abi.json\";\n\nexport const vaultAbi = (vaultAbiJson as { abi: Abi }).abi;\n\nexport const erc20Abi = [\n {\n name: \"approve\",\n type: \"function\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"bool\" }],\n },\n {\n name: \"allowance\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n ],\n outputs: [{ name: \"\", type: \"uint256\" }],\n },\n] as const;\n","import { type Hex, type Address, isHex, isAddress, getAddress } from \"viem\";\nimport { DimesError } from \"../errors/dimes-error\";\n\nexport type { Hex, Address };\n\nexport function toHex(value: string): Hex {\n if (!isHex(value)) {\n const HEX_PREVIEW_LENGTH = 10;\n throw new DimesError(\n \"invalid_hex\",\n `Expected hex string starting with 0x, got: ${value.slice(0, HEX_PREVIEW_LENGTH)}`,\n );\n }\n\n return value;\n}\n\nexport function toAddress(value: string): Address {\n if (!isAddress(value)) {\n throw new DimesError(\"invalid_address\", `Invalid EVM address: ${value}`);\n }\n\n return getAddress(value);\n}\n","import type { Abi } from \"viem\";\nimport type { Offer } from \"../types\";\nimport { vaultAbi, erc20Abi } from \"./abi\";\nimport { toHex, toAddress } from \"./evm\";\n\nexport interface CreatePositionTxData {\n address: `0x${string}`;\n abi: Abi;\n functionName: \"createPosition\";\n args: readonly [\n `0x${string}`,\n `0x${string}`,\n bigint,\n bigint,\n number,\n bigint,\n number,\n number,\n number,\n bigint,\n `0x${string}`,\n bigint,\n ];\n}\n\nexport interface ApproveTxData {\n address: `0x${string}`;\n abi: typeof erc20Abi;\n functionName: \"approve\";\n args: readonly [`0x${string}`, bigint];\n}\n\nexport interface RequestCloseTxData {\n address: `0x${string}`;\n abi: Abi;\n functionName: \"requestClose\";\n args: readonly [`0x${string}`];\n}\n\nexport function buildCreatePositionTx(offer: Offer): CreatePositionTxData {\n return {\n address: toAddress(offer.polygonVaultContractAddress),\n abi: vaultAbi,\n functionName: \"createPosition\",\n args: [\n toHex(offer.positionSeedHex),\n toHex(offer.polymarketMarketId),\n BigInt(offer.polymarketTokenId),\n BigInt(offer.collateralUsdcUnits),\n offer.leverageBps,\n BigInt(offer.notionalUsdcUnits),\n offer.originationFeeBps,\n offer.lifetimeFeeAprBps,\n offer.liquidationFeeBps,\n BigInt(offer.expectedOpenTradingFeeUsdcUnits),\n toHex(offer.contractSignature),\n BigInt(offer.signatureExpiry),\n ],\n };\n}\n\nexport function buildApproveTx(usdcAddress: `0x${string}`, spender: `0x${string}`, amount: bigint): ApproveTxData {\n return {\n address: usdcAddress,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [spender, amount],\n };\n}\n\nexport function buildRequestCloseTx(vaultAddress: `0x${string}`, positionKey: `0x${string}`): RequestCloseTxData {\n return {\n address: vaultAddress,\n abi: vaultAbi,\n functionName: \"requestClose\",\n args: [positionKey],\n };\n}\n","import { recoverTypedDataAddress, getAddress } from \"viem\";\nimport type { DimesClient } from \"../client/dimes-client\";\nimport { DimesContractError } from \"../errors/dimes-error\";\nimport type { ContractInfo, Offer } from \"../types\";\nimport { toHex, toAddress } from \"./evm\";\n\nconst createPositionTypes = {\n CreatePosition: [\n { name: \"positionSeed\", type: \"bytes16\" },\n { name: \"user\", type: \"address\" },\n { name: \"marketId\", type: \"bytes32\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"collateralUsdcUnits\", type: \"uint256\" },\n { name: \"leverageBps\", type: \"uint32\" },\n { name: \"notionalUsdcUnits\", type: \"uint256\" },\n { name: \"originationFeeBps\", type: \"uint16\" },\n { name: \"lifetimeFeeAprBps\", type: \"uint16\" },\n { name: \"liquidationFeeBps\", type: \"uint16\" },\n { name: \"venueFeeUsdcUnits\", type: \"uint256\" },\n { name: \"signatureExpiry\", type: \"uint256\" },\n ],\n} as const;\n\nexport async function recoverCreatePositionSigner(offer: Offer, userAddress: `0x${string}`): Promise<`0x${string}`> {\n return recoverTypedDataAddress({\n domain: {\n name: \"LeveragedPredictionVaultV1\",\n version: \"1\",\n chainId: Number(offer.evmChainId),\n verifyingContract: toAddress(offer.polygonVaultContractAddress),\n },\n types: createPositionTypes,\n primaryType: \"CreatePosition\",\n message: {\n positionSeed: toHex(offer.positionSeedHex),\n user: userAddress,\n marketId: toHex(offer.polymarketMarketId),\n tokenId: BigInt(offer.polymarketTokenId),\n collateralUsdcUnits: BigInt(offer.collateralUsdcUnits),\n leverageBps: offer.leverageBps,\n notionalUsdcUnits: BigInt(offer.notionalUsdcUnits),\n originationFeeBps: offer.originationFeeBps,\n lifetimeFeeAprBps: offer.lifetimeFeeAprBps,\n liquidationFeeBps: offer.liquidationFeeBps,\n venueFeeUsdcUnits: BigInt(offer.expectedOpenTradingFeeUsdcUnits),\n signatureExpiry: BigInt(offer.signatureExpiry),\n },\n signature: toHex(offer.contractSignature),\n });\n}\n\nexport function resolveExpectedSigner(apiSigner: string | undefined): `0x${string}` | undefined {\n return apiSigner ? getAddress(apiSigner) : undefined;\n}\n\nconst contractInfoCache = new WeakMap<DimesClient, ContractInfo>();\n\nexport async function verifyOfferSignature(\n client: DimesClient,\n offer: Offer,\n userAddress: `0x${string}`,\n): Promise<void> {\n let info = contractInfoCache.get(client);\n if (!info) {\n info = await client.getContractInfo();\n contractInfoCache.set(client, info);\n }\n\n const recoveredSigner = await recoverCreatePositionSigner(offer, userAddress);\n const expectedSigner = getAddress(info.polygonSignerAddress);\n\n if (recoveredSigner !== expectedSigner) {\n throw new DimesContractError(\n \"invalid_signer\",\n `Recovered signer ${recoveredSigner} does not match expected authority ${expectedSigner}`,\n );\n }\n}\n","import {\n BaseError,\n ContractFunctionRevertedError,\n ContractFunctionExecutionError,\n UserRejectedRequestError,\n formatUnits,\n} from \"viem\";\nimport { DimesContractError } from \"../errors/dimes-error\";\n\nconst USDC_DECIMALS = 6;\nconst BPS_PER_PCT = 100;\n\nconst fmtUsdc = (v: unknown): string => (typeof v === \"bigint\" ? `${formatUnits(v, USDC_DECIMALS)} USDC` : String(v));\n\nconst BPS_DECIMAL_PLACES = 2;\n\nconst fmtBps = (v: unknown): string => {\n if (typeof v === \"bigint\") {\n return `${(Number(v) / BPS_PER_PCT).toFixed(BPS_DECIMAL_PLACES)}%`;\n }\n if (typeof v === \"number\") {\n return `${(v / BPS_PER_PCT).toFixed(BPS_DECIMAL_PLACES)}%`;\n }\n return String(v);\n};\n\ntype Formatter = (args: readonly unknown[] | undefined) => string;\n\n/* eslint-disable no-magic-numbers -- array-length guards on contract error args */\nconst friendlyByErrorName: Record<string, Formatter> = {\n InvalidSignature: () => \"Quote signature is invalid. Refresh and try again.\",\n SignatureExpired: () => \"Quote has expired. Refresh and try again.\",\n TokenIdMismatch: () => \"Quote token mismatch. Refresh and try again.\",\n\n InsufficientCapital: () => \"Pool is short on capital right now. Try a smaller size.\",\n UserCapitalExceeded: (a) =>\n a && a.length >= 4\n ? `You'd exceed your account cap of ${fmtUsdc(a[3])} (current ${fmtUsdc(a[1])}, requested ${fmtUsdc(a[2])}).`\n : \"You'd exceed your account capital cap.\",\n MarketCapitalExceeded: (a) =>\n a && a.length >= 4\n ? `Market is at capacity (cap ${fmtUsdc(a[3])}, requested ${fmtUsdc(a[2])}).`\n : \"Market is at capacity.\",\n TotalCapitalExceeded: (a) =>\n a && a.length >= 3\n ? `Protocol is at capacity (cap ${fmtUsdc(a[2])}, requested ${fmtUsdc(a[1])}).`\n : \"Protocol is at capacity.\",\n TokenCapitalExceeded: () => \"This outcome is at capacity.\",\n\n InvalidLeverage: (a) => (a && a.length >= 1 ? `Invalid leverage (${fmtBps(a[0])}).` : \"Invalid leverage.\"),\n CollateralBelowMinimum: (a) =>\n a && a.length >= 2\n ? `Collateral ${fmtUsdc(a[0])} is below the minimum of ${fmtUsdc(a[1])}.`\n : \"Collateral is below the minimum.\",\n InvalidCollateral: (a) =>\n a && a.length >= 1 ? `Invalid collateral amount (${fmtUsdc(a[0])}).` : \"Invalid collateral amount.\",\n InvalidNotional: (a) => (a && a.length >= 1 ? `Invalid notional (${fmtUsdc(a[0])}).` : \"Invalid notional.\"),\n ZeroAmount: () => \"Amount cannot be zero.\",\n ZeroAddress: () => \"Address cannot be zero.\",\n\n PositionAlreadyExists: () => \"A position with this seed already exists.\",\n PositionNotFound: () => \"Position not found.\",\n PositionAlreadyFinalized: () => \"Position is already finalized.\",\n InvalidPositionState: () => \"Position is in the wrong state for this action.\",\n NotPositionOwner: () => \"You're not the owner of this position.\",\n\n NewPositionsPaused: () => \"New positions are paused.\",\n UserActionsPaused: () => \"User actions are temporarily paused.\",\n EmergencyOnlyMode: () => \"Protocol is in emergency-only mode.\",\n ServerHalted: () => \"Protocol is halted. Try again later.\",\n\n NoTokensToClose: () => \"Position has no tokens to close.\",\n InvalidProceeds: () => \"Invalid proceeds amount.\",\n InvalidMarketOutcome: () => \"Invalid market outcome.\",\n InvalidTokensToSell: () => \"Invalid token amount to sell.\",\n InvalidTargetLeverage: () => \"Target leverage must be lower than current.\",\n\n CancelDelayNotElapsed: () => \"Cancel delay has not elapsed yet.\",\n CancelDelayTooLong: () => \"Cancel delay exceeds the maximum allowed.\",\n\n SafeERC20FailedOperation: () => \"Token transfer failed.\",\n UnauthorizedTokenSender: () => \"Unauthorized token sender.\",\n CannotRescueOperationalToken: () => \"Cannot rescue operational tokens.\",\n\n ERC20InsufficientBalance: () => \"Insufficient USDC balance.\",\n ERC20InsufficientAllowance: () => \"Insufficient USDC allowance. Approve and try again.\",\n};\n/* eslint-enable no-magic-numbers */\n\nconst friendlyBySelector: Record<string, string> = {\n \"0xe450d38c\": \"Insufficient USDC balance.\",\n \"0xfb8f41b2\": \"Insufficient USDC allowance. Approve and try again.\",\n \"0x96c6fd1e\": \"Invalid token sender (zero address).\",\n \"0xec442f05\": \"Invalid token receiver (zero address).\",\n \"0xe602df05\": \"Invalid token approver (zero address).\",\n \"0x94280d62\": \"Invalid spender (zero address).\",\n \"0x03dee4c5\": \"Insufficient token balance for transfer.\",\n \"0x01a83514\": \"Invalid ERC-1155 sender (zero address).\",\n \"0x57f447ce\": \"Invalid ERC-1155 receiver.\",\n \"0xe237d922\": \"Missing ERC-1155 approval.\",\n \"0x3e31884e\": \"Invalid ERC-1155 approver (zero address).\",\n \"0xced3e100\": \"Invalid ERC-1155 operator (zero address).\",\n \"0x5b059991\": \"ERC-1155 array length mismatch.\",\n};\n\nconst HEX_SELECTOR_LENGTH = 10;\n\nfunction humanizeName(name: string): string {\n const spaced = name.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\");\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n}\n\nfunction firstLine(s: string): string {\n const i = s.indexOf(\"\\n\");\n return (i === -1 ? s : s.slice(0, i)).trim();\n}\n\n// eslint-disable-next-line complexity\nexport function formatContractError(err: unknown): DimesContractError {\n if (!err) {\n return new DimesContractError(\"unknown\", \"Transaction failed.\");\n }\n\n if (err instanceof BaseError) {\n const rejected = err.walk((e) => e instanceof UserRejectedRequestError);\n if (rejected) {\n return new DimesContractError(\"UserRejected\", \"Transaction rejected in wallet.\");\n }\n\n const reverted = err.walk(\n (e) => e instanceof ContractFunctionRevertedError,\n ) as ContractFunctionRevertedError | null;\n if (reverted) {\n const errorName = reverted.data?.errorName;\n const args = reverted.data?.args;\n if (errorName) {\n const fmt = friendlyByErrorName[errorName];\n const message = fmt ? fmt(args) : humanizeName(errorName);\n return new DimesContractError(errorName, message);\n }\n const raw = reverted.raw;\n const selector = raw && raw.length >= HEX_SELECTOR_LENGTH ? raw.slice(0, HEX_SELECTOR_LENGTH) : undefined;\n const selectorMessage = selector ? friendlyBySelector[selector] : undefined;\n return new DimesContractError(\n selector ?? \"unknown_revert\",\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n selectorMessage ?? reverted.shortMessage ?? \"Contract reverted.\",\n );\n }\n\n const exec = err.walk((e) => e instanceof ContractFunctionExecutionError) as ContractFunctionExecutionError | null;\n if (exec?.shortMessage) {\n return new DimesContractError(\"execution_error\", firstLine(exec.shortMessage));\n }\n\n if (err.shortMessage) {\n return new DimesContractError(\"base_error\", firstLine(err.shortMessage));\n }\n return new DimesContractError(\"base_error\", firstLine(err.message));\n }\n\n if (err instanceof Error) {\n return new DimesContractError(\"error\", firstLine(err.message));\n }\n return new DimesContractError(\"unknown\", \"Transaction failed.\");\n}\n"]}
1
+ {"version":3,"sources":["/Users/alexemery/bl/dimes-sdk/dist/contract/index.cjs","../../src/contract/vault-abi.json","../../src/contract/abi.ts","../../src/contract/evm.ts","../../src/contract/build-tx.ts","../../src/contract/deposit-wallet.ts","../../src/contract/verify-signature.ts","../../src/contract/error-messages.ts"],"names":[],"mappings":"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","file":"/Users/alexemery/bl/dimes-sdk/dist/contract/index.cjs","sourcesContent":[null,"{\n \"abi\": [\n {\n \"type\": \"function\",\n \"name\": \"createPosition\",\n \"inputs\": [\n {\n \"name\": \"positionSeed\",\n \"type\": \"bytes16\",\n \"internalType\": \"bytes16\"\n },\n {\n \"name\": \"marketId\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"collateralUsdcUnits\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"leverageBps\",\n \"type\": \"uint32\",\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"notionalUsdcUnits\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"originationFeeBps\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"lifetimeFeeAprBps\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"liquidationFeeBps\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"venueFeeUsdcUnits\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"signatureExpiry\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"requestClose\",\n \"inputs\": [\n {\n \"name\": \"positionKey\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"CloseRequested\",\n \"inputs\": [\n {\n \"name\": \"positionKey\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"state\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PositionCreated\",\n \"inputs\": [\n {\n \"name\": \"positionKey\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"positionSeed\",\n \"type\": \"bytes16\",\n \"indexed\": false,\n \"internalType\": \"bytes16\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"marketId\",\n \"type\": \"bytes32\",\n \"indexed\": true,\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"tokenId\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"collateralUsdcUnits\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"leverageBps\",\n \"type\": \"uint32\",\n \"indexed\": false,\n \"internalType\": \"uint32\"\n },\n {\n \"name\": \"notionalUsdcUnits\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"originationFeeUsdcUnits\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"venueFeeUsdcUnits\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"originationFeeBps\",\n \"type\": \"uint16\",\n \"indexed\": false,\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"lifetimeFeeAprBps\",\n \"type\": \"uint16\",\n \"indexed\": false,\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"liquidationFeeBps\",\n \"type\": \"uint16\",\n \"indexed\": false,\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"state\",\n \"type\": \"uint8\",\n \"indexed\": false,\n \"internalType\": \"uint8\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"CancelDelayNotElapsed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CollateralBelowMinimum\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"inputs\": [\n {\n \"name\": \"length\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureS\",\n \"inputs\": [\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"EmergencyOnlyMode\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"EnforcedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"FailedCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"FeeRateExceedsMaximum\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InsufficientCapital\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidLeverage\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidNotional\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidPositionState\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MarketCapitalExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NewPositionsPaused\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NoTokensToClose\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotPositionOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PositionAlreadyExists\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PositionNotFound\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SafeERC20FailedOperation\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ServerHalted\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SignatureExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TokenCapitalExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TotalCapitalExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UserActionsPaused\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UserCapitalExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAmount\",\n \"inputs\": []\n }\n ]\n}\n","import type { Abi } from \"viem\";\nimport vaultAbiJson from \"./vault-abi.json\";\n\nexport const vaultAbi = (vaultAbiJson as { abi: Abi }).abi;\n\nexport const erc20Abi = [\n {\n name: \"approve\",\n type: \"function\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"bool\" }],\n },\n {\n name: \"allowance\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n ],\n outputs: [{ name: \"\", type: \"uint256\" }],\n },\n] as const;\n","import { type Hex, type Address, isHex, isAddress, getAddress } from \"viem\";\nimport { DimesError } from \"../errors/dimes-error\";\n\nexport type { Hex, Address };\n\nexport function toHex(value: string): Hex {\n if (!isHex(value)) {\n const HEX_PREVIEW_LENGTH = 10;\n throw new DimesError(\n \"invalid_hex\",\n `Expected hex string starting with 0x, got: ${value.slice(0, HEX_PREVIEW_LENGTH)}`,\n );\n }\n\n return value;\n}\n\nexport function toAddress(value: string): Address {\n if (!isAddress(value)) {\n throw new DimesError(\"invalid_address\", `Invalid EVM address: ${value}`);\n }\n\n return getAddress(value);\n}\n","import type { Abi } from \"viem\";\nimport type { Offer } from \"../types\";\nimport { vaultAbi, erc20Abi } from \"./abi\";\nimport { toHex, toAddress } from \"./evm\";\n\nexport interface CreatePositionTxData {\n address: `0x${string}`;\n abi: Abi;\n functionName: \"createPosition\";\n args: readonly [\n `0x${string}`,\n `0x${string}`,\n bigint,\n bigint,\n number,\n bigint,\n number,\n number,\n number,\n bigint,\n `0x${string}`,\n bigint,\n ];\n}\n\nexport interface ApproveTxData {\n address: `0x${string}`;\n abi: typeof erc20Abi;\n functionName: \"approve\";\n args: readonly [`0x${string}`, bigint];\n}\n\nexport interface RequestCloseTxData {\n address: `0x${string}`;\n abi: Abi;\n functionName: \"requestClose\";\n args: readonly [`0x${string}`];\n}\n\nexport function buildCreatePositionTx(offer: Offer): CreatePositionTxData {\n return {\n address: toAddress(offer.polygonVaultContractAddress),\n abi: vaultAbi,\n functionName: \"createPosition\",\n args: [\n toHex(offer.positionSeedHex),\n toHex(offer.polymarketMarketId),\n BigInt(offer.polymarketTokenId),\n BigInt(offer.collateralUsdcUnits),\n offer.leverageBps,\n BigInt(offer.notionalUsdcUnits),\n offer.originationFeeBps,\n offer.lifetimeFeeAprBps,\n offer.liquidationFeeBps,\n BigInt(offer.expectedOpenTradingFeeUsdcUnits),\n toHex(offer.contractSignature),\n BigInt(offer.signatureExpiry),\n ],\n };\n}\n\nexport function buildApproveTx(usdcAddress: `0x${string}`, spender: `0x${string}`, amount: bigint): ApproveTxData {\n return {\n address: usdcAddress,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [spender, amount],\n };\n}\n\nexport function buildRequestCloseTx(vaultAddress: `0x${string}`, positionKey: `0x${string}`): RequestCloseTxData {\n return {\n address: vaultAddress,\n abi: vaultAbi,\n functionName: \"requestClose\",\n args: [positionKey],\n };\n}\n","import { encodeFunctionData } from \"viem\";\nimport type { Offer } from \"../types\";\nimport { vaultAbi } from \"./abi\";\nimport { toAddress, toHex, type Address, type Hex } from \"./evm\";\n\n/**\n * Helpers for opening and closing positions from a Polymarket **deposit wallet** (DW).\n *\n * Deposit wallets cannot use the legacy `approve` + `createPosition` path: the Polymarket\n * relayer blocks `approve` to non-whitelisted spenders. Instead the DW submits an atomic\n * batch through Polymarket's deposit-wallet factory:\n *\n * 1. `vault.reserveDeposit(totalUserAmount)` — snapshot the vault pUSD balance\n * 2. `pUSD.transfer(vault, totalUserAmount)` — push the funds directly\n * 3. `vault.createPositionPushFunded(...)` — verify the balance delta + create\n *\n * Closing follows the same batch mechanics with a single inner call, `requestClose`.\n */\n\n/** Polymarket deposit-wallet factory (the `proxy` entrypoint), Polygon mainnet. */\nexport const depositWalletFactoryAddress: Address = \"0x00000000000Fb5C9ADea0298D729A0CB3823Cc07\";\n\n/** Base URL of Polymarket's v2 relayer. */\nexport const polymarketRelayerBaseUrl = \"https://relayer-v2.polymarket.com\";\n\n/** A single inner call inside a deposit-wallet batch. */\nexport interface DepositWalletCall {\n target: Address;\n value: bigint;\n data: Hex;\n}\n\n/** The EIP-712 `Batch` struct signed by the deposit-wallet owner. */\nexport interface DepositWalletBatch {\n wallet: Address;\n nonce: bigint;\n deadline: bigint;\n calls: DepositWalletCall[];\n}\n\n/** EIP-712 type definitions for the deposit-wallet `Batch` signature. */\nexport const depositWalletBatchTypes = {\n Batch: [\n { name: \"wallet\", type: \"address\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n { name: \"calls\", type: \"Call[]\" },\n ],\n Call: [\n { name: \"target\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"data\", type: \"bytes\" },\n ],\n} as const;\n\nconst reserveDepositAbi = [\n {\n type: \"function\",\n name: \"reserveDeposit\",\n stateMutability: \"nonpayable\",\n inputs: [{ name: \"expectedAmountUsdcUnits\", type: \"uint256\" }],\n outputs: [],\n },\n] as const;\n\nconst createPositionPushFundedAbi = [\n {\n type: \"function\",\n name: \"createPositionPushFunded\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"positionSeed\", type: \"bytes16\" },\n { name: \"marketId\", type: \"bytes32\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"collateralUsdcUnits\", type: \"uint256\" },\n { name: \"leverageBps\", type: \"uint32\" },\n { name: \"notionalUsdcUnits\", type: \"uint256\" },\n { name: \"originationFeeBps\", type: \"uint16\" },\n { name: \"lifetimeFeeAprBps\", type: \"uint16\" },\n { name: \"liquidationFeeBps\", type: \"uint16\" },\n { name: \"venueFeeUsdcUnits\", type: \"uint256\" },\n { name: \"signature\", type: \"bytes\" },\n { name: \"signatureExpiry\", type: \"uint256\" },\n ],\n outputs: [],\n },\n] as const;\n\nconst erc20TransferAbi = [\n {\n type: \"function\",\n name: \"transfer\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"to\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"bool\" }],\n },\n] as const;\n\n/**\n * Build the three inner calls for a push-funded `createPosition`.\n *\n * The relayer submits these atomically; `offer.totalUserAmountUsdcUnits` is the\n * contract-ready amount (collateral + fees) used for both the reservation and the transfer.\n *\n * @param offer - the signed offer returned by the quote endpoint\n * @param pUsdAddress - the pUSD (USDC) token address (from `GET /contract-info`)\n */\nexport function buildPushFundedCreateCalls(offer: Offer, pUsdAddress: string): DepositWalletCall[] {\n const vaultAddress = toAddress(offer.polygonVaultContractAddress);\n const totalUserAmountUsdcUnits = BigInt(offer.totalUserAmountUsdcUnits);\n\n const reserveDepositData = encodeFunctionData({\n abi: reserveDepositAbi,\n functionName: \"reserveDeposit\",\n args: [totalUserAmountUsdcUnits],\n });\n\n const transferData = encodeFunctionData({\n abi: erc20TransferAbi,\n functionName: \"transfer\",\n args: [vaultAddress, totalUserAmountUsdcUnits],\n });\n\n const createPositionData = encodeFunctionData({\n abi: createPositionPushFundedAbi,\n functionName: \"createPositionPushFunded\",\n args: [\n toHex(offer.positionSeedHex),\n toHex(offer.polymarketMarketId),\n BigInt(offer.polymarketTokenId),\n BigInt(offer.collateralUsdcUnits),\n offer.leverageBps,\n BigInt(offer.notionalUsdcUnits),\n offer.originationFeeBps,\n offer.lifetimeFeeAprBps,\n offer.liquidationFeeBps,\n BigInt(offer.expectedOpenTradingFeeUsdcUnits),\n toHex(offer.contractSignature),\n BigInt(offer.signatureExpiry),\n ],\n });\n\n return [\n { target: vaultAddress, value: 0n, data: reserveDepositData },\n { target: toAddress(pUsdAddress), value: 0n, data: transferData },\n { target: vaultAddress, value: 0n, data: createPositionData },\n ];\n}\n\n/**\n * Build the single inner call for a deposit-wallet `requestClose`.\n *\n * @param vaultAddress - the vault contract address\n * @param positionKey - the `on_chain_position_key` field from `GET /positions`\n */\nexport function buildRequestCloseCalls(vaultAddress: string, positionKey: string): DepositWalletCall[] {\n const closeData = encodeFunctionData({\n abi: vaultAbi,\n functionName: \"requestClose\",\n args: [toHex(positionKey)],\n });\n\n return [{ target: toAddress(vaultAddress), value: 0n, data: closeData }];\n}\n\ninterface BuildBatchParams {\n depositWalletAddress: string;\n /** Current `nonce()` read from the deposit wallet. */\n nonce: bigint;\n /** Unix-seconds deadline after which the relayer may no longer submit the batch. */\n deadline: bigint;\n calls: DepositWalletCall[];\n}\n\n/** Assemble a `DepositWalletBatch` ready for EIP-712 signing. */\nexport function buildDepositWalletBatch(params: BuildBatchParams): DepositWalletBatch {\n return {\n wallet: toAddress(params.depositWalletAddress),\n nonce: params.nonce,\n deadline: params.deadline,\n calls: params.calls,\n };\n}\n\n/** EIP-712 typed-data payload for a deposit-wallet `Batch` signature. */\nexport interface DepositWalletBatchTypedData {\n domain: { name: string; version: string; chainId: number; verifyingContract: Address };\n types: typeof depositWalletBatchTypes;\n primaryType: \"Batch\";\n message: DepositWalletBatch;\n}\n\n/**\n * Produce the EIP-712 typed-data object for a batch, ready to pass to a signer\n * (viem `signTypedData`, ethers `signTypedData`, etc.). The owner of the deposit\n * wallet must sign this.\n */\nexport function getDepositWalletBatchTypedData(batch: DepositWalletBatch): DepositWalletBatchTypedData {\n return {\n domain: {\n name: \"DepositWallet\",\n version: \"1\",\n chainId: 137,\n verifyingContract: batch.wallet,\n },\n types: depositWalletBatchTypes,\n primaryType: \"Batch\",\n message: batch,\n };\n}\n\ninterface RelayerSubmitPayload {\n type: \"WALLET\";\n from: Address;\n to: Address;\n nonce: string;\n signature: Hex;\n depositWalletParams: {\n depositWallet: Address;\n deadline: string;\n calls: { target: Address; value: string; data: Hex }[];\n };\n}\n\ninterface BuildRelayerPayloadParams {\n /** The deposit-wallet owner EOA that produced `signature`. */\n ownerAddress: string;\n batch: DepositWalletBatch;\n /** The EIP-712 signature over `getDepositWalletBatchTypedData(batch)`. */\n signature: Hex;\n}\n\n/**\n * Build the JSON body for `POST {polymarketRelayerBaseUrl}/submit`.\n *\n * Stringify the result and send it with headers from {@link buildRelayerAuthHeaders}.\n */\nexport function buildRelayerSubmitPayload(params: BuildRelayerPayloadParams): RelayerSubmitPayload {\n return {\n type: \"WALLET\",\n from: toAddress(params.ownerAddress),\n to: depositWalletFactoryAddress,\n nonce: params.batch.nonce.toString(),\n signature: params.signature,\n depositWalletParams: {\n depositWallet: params.batch.wallet,\n deadline: params.batch.deadline.toString(),\n calls: params.batch.calls.map((call) => ({\n target: call.target,\n value: call.value.toString(),\n data: call.data,\n })),\n },\n };\n}\n\ninterface BuildRelayerHeadersParams {\n /** Polymarket builder API key. */\n apiKey: string;\n /** Polymarket builder API secret (base64). */\n apiSecret: string;\n /** Polymarket builder API passphrase. */\n apiPassphrase: string;\n /** The exact request body string sent to `/submit` (the value passed to `fetch`). */\n body: string;\n /** Unix-seconds timestamp; defaults to now. Must match the request time. */\n timestamp?: string;\n}\n\nfunction base64ToBytes(value: string): ArrayBuffer {\n const binary = atob(value);\n const buffer = new ArrayBuffer(binary.length);\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return buffer;\n}\n\nfunction bytesToBase64Url(bytes: ArrayBuffer): string {\n let binary = \"\";\n const view = new Uint8Array(bytes);\n for (const byte of view) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\");\n}\n\n/**\n * Compute the HMAC-signed headers for a relayer `/submit` request.\n *\n * The relayer authenticates each call with an HMAC-SHA256 over\n * `timestamp + \"POST\" + \"/submit\" + body`, keyed by the base64-decoded API secret,\n * encoded as base64url. Uses the Web Crypto API (works in Node 20+ and browsers).\n */\nexport async function buildRelayerAuthHeaders(params: BuildRelayerHeadersParams): Promise<Record<string, string>> {\n const msPerSecond = 1000;\n const timestamp = params.timestamp ?? Math.floor(Date.now() / msPerSecond).toString();\n const key = await crypto.subtle.importKey(\n \"raw\",\n base64ToBytes(params.apiSecret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const encoded = new TextEncoder().encode(`${timestamp}POST/submit${params.body}`);\n const message = new Uint8Array(encoded).buffer;\n const signature = await crypto.subtle.sign(\"HMAC\", key, message);\n\n return {\n \"Content-Type\": \"application/json\",\n POLY_BUILDER_API_KEY: params.apiKey,\n POLY_BUILDER_TIMESTAMP: timestamp,\n POLY_BUILDER_PASSPHRASE: params.apiPassphrase,\n POLY_BUILDER_SIGNATURE: bytesToBase64Url(signature),\n };\n}\n","import { recoverTypedDataAddress, getAddress } from \"viem\";\nimport type { DimesClient } from \"../client/dimes-client\";\nimport { DimesContractError } from \"../errors/dimes-error\";\nimport type { ContractInfo, Offer } from \"../types\";\nimport { toHex, toAddress } from \"./evm\";\n\nconst createPositionTypes = {\n CreatePosition: [\n { name: \"positionSeed\", type: \"bytes16\" },\n { name: \"user\", type: \"address\" },\n { name: \"marketId\", type: \"bytes32\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"collateralUsdcUnits\", type: \"uint256\" },\n { name: \"leverageBps\", type: \"uint32\" },\n { name: \"notionalUsdcUnits\", type: \"uint256\" },\n { name: \"originationFeeBps\", type: \"uint16\" },\n { name: \"lifetimeFeeAprBps\", type: \"uint16\" },\n { name: \"liquidationFeeBps\", type: \"uint16\" },\n { name: \"venueFeeUsdcUnits\", type: \"uint256\" },\n { name: \"signatureExpiry\", type: \"uint256\" },\n ],\n} as const;\n\nexport async function recoverCreatePositionSigner(offer: Offer, userAddress: `0x${string}`): Promise<`0x${string}`> {\n return recoverTypedDataAddress({\n domain: {\n name: \"LeveragedPredictionVaultV1\",\n version: \"1\",\n chainId: Number(offer.evmChainId),\n verifyingContract: toAddress(offer.polygonVaultContractAddress),\n },\n types: createPositionTypes,\n primaryType: \"CreatePosition\",\n message: {\n positionSeed: toHex(offer.positionSeedHex),\n user: userAddress,\n marketId: toHex(offer.polymarketMarketId),\n tokenId: BigInt(offer.polymarketTokenId),\n collateralUsdcUnits: BigInt(offer.collateralUsdcUnits),\n leverageBps: offer.leverageBps,\n notionalUsdcUnits: BigInt(offer.notionalUsdcUnits),\n originationFeeBps: offer.originationFeeBps,\n lifetimeFeeAprBps: offer.lifetimeFeeAprBps,\n liquidationFeeBps: offer.liquidationFeeBps,\n venueFeeUsdcUnits: BigInt(offer.expectedOpenTradingFeeUsdcUnits),\n signatureExpiry: BigInt(offer.signatureExpiry),\n },\n signature: toHex(offer.contractSignature),\n });\n}\n\nexport function resolveExpectedSigner(apiSigner: string | undefined): `0x${string}` | undefined {\n return apiSigner ? getAddress(apiSigner) : undefined;\n}\n\nconst contractInfoCache = new WeakMap<DimesClient, ContractInfo>();\n\nexport async function verifyOfferSignature(\n client: DimesClient,\n offer: Offer,\n userAddress: `0x${string}`,\n): Promise<void> {\n let info = contractInfoCache.get(client);\n if (!info) {\n info = await client.getContractInfo();\n contractInfoCache.set(client, info);\n }\n\n const recoveredSigner = await recoverCreatePositionSigner(offer, userAddress);\n const expectedSigner = getAddress(info.polygonSignerAddress);\n\n if (recoveredSigner !== expectedSigner) {\n throw new DimesContractError(\n \"invalid_signer\",\n `Recovered signer ${recoveredSigner} does not match expected authority ${expectedSigner}`,\n );\n }\n}\n","import {\n BaseError,\n ContractFunctionRevertedError,\n ContractFunctionExecutionError,\n UserRejectedRequestError,\n formatUnits,\n} from \"viem\";\nimport { DimesContractError } from \"../errors/dimes-error\";\n\nconst USDC_DECIMALS = 6;\nconst BPS_PER_PCT = 100;\n\nconst fmtUsdc = (v: unknown): string => (typeof v === \"bigint\" ? `${formatUnits(v, USDC_DECIMALS)} USDC` : String(v));\n\nconst BPS_DECIMAL_PLACES = 2;\n\nconst fmtBps = (v: unknown): string => {\n if (typeof v === \"bigint\") {\n return `${(Number(v) / BPS_PER_PCT).toFixed(BPS_DECIMAL_PLACES)}%`;\n }\n if (typeof v === \"number\") {\n return `${(v / BPS_PER_PCT).toFixed(BPS_DECIMAL_PLACES)}%`;\n }\n return String(v);\n};\n\ntype Formatter = (args: readonly unknown[] | undefined) => string;\n\n/* eslint-disable no-magic-numbers -- array-length guards on contract error args */\nconst friendlyByErrorName: Record<string, Formatter> = {\n InvalidSignature: () => \"Quote signature is invalid. Refresh and try again.\",\n SignatureExpired: () => \"Quote has expired. Refresh and try again.\",\n TokenIdMismatch: () => \"Quote token mismatch. Refresh and try again.\",\n\n InsufficientCapital: () => \"Pool is short on capital right now. Try a smaller size.\",\n UserCapitalExceeded: (a) =>\n a && a.length >= 4\n ? `You'd exceed your account cap of ${fmtUsdc(a[3])} (current ${fmtUsdc(a[1])}, requested ${fmtUsdc(a[2])}).`\n : \"You'd exceed your account capital cap.\",\n MarketCapitalExceeded: (a) =>\n a && a.length >= 4\n ? `Market is at capacity (cap ${fmtUsdc(a[3])}, requested ${fmtUsdc(a[2])}).`\n : \"Market is at capacity.\",\n TotalCapitalExceeded: (a) =>\n a && a.length >= 3\n ? `Protocol is at capacity (cap ${fmtUsdc(a[2])}, requested ${fmtUsdc(a[1])}).`\n : \"Protocol is at capacity.\",\n TokenCapitalExceeded: () => \"This outcome is at capacity.\",\n\n InvalidLeverage: (a) => (a && a.length >= 1 ? `Invalid leverage (${fmtBps(a[0])}).` : \"Invalid leverage.\"),\n CollateralBelowMinimum: (a) =>\n a && a.length >= 2\n ? `Collateral ${fmtUsdc(a[0])} is below the minimum of ${fmtUsdc(a[1])}.`\n : \"Collateral is below the minimum.\",\n InvalidCollateral: (a) =>\n a && a.length >= 1 ? `Invalid collateral amount (${fmtUsdc(a[0])}).` : \"Invalid collateral amount.\",\n InvalidNotional: (a) => (a && a.length >= 1 ? `Invalid notional (${fmtUsdc(a[0])}).` : \"Invalid notional.\"),\n ZeroAmount: () => \"Amount cannot be zero.\",\n ZeroAddress: () => \"Address cannot be zero.\",\n\n PositionAlreadyExists: () => \"A position with this seed already exists.\",\n PositionNotFound: () => \"Position not found.\",\n PositionAlreadyFinalized: () => \"Position is already finalized.\",\n InvalidPositionState: () => \"Position is in the wrong state for this action.\",\n NotPositionOwner: () => \"You're not the owner of this position.\",\n\n NewPositionsPaused: () => \"New positions are paused.\",\n UserActionsPaused: () => \"User actions are temporarily paused.\",\n EmergencyOnlyMode: () => \"Protocol is in emergency-only mode.\",\n ServerHalted: () => \"Protocol is halted. Try again later.\",\n\n NoTokensToClose: () => \"Position has no tokens to close.\",\n InvalidProceeds: () => \"Invalid proceeds amount.\",\n InvalidMarketOutcome: () => \"Invalid market outcome.\",\n InvalidTokensToSell: () => \"Invalid token amount to sell.\",\n InvalidTargetLeverage: () => \"Target leverage must be lower than current.\",\n\n CancelDelayNotElapsed: () => \"Cancel delay has not elapsed yet.\",\n CancelDelayTooLong: () => \"Cancel delay exceeds the maximum allowed.\",\n\n SafeERC20FailedOperation: () => \"Token transfer failed.\",\n UnauthorizedTokenSender: () => \"Unauthorized token sender.\",\n CannotRescueOperationalToken: () => \"Cannot rescue operational tokens.\",\n\n ERC20InsufficientBalance: () => \"Insufficient USDC balance.\",\n ERC20InsufficientAllowance: () => \"Insufficient USDC allowance. Approve and try again.\",\n};\n/* eslint-enable no-magic-numbers */\n\nconst friendlyBySelector: Record<string, string> = {\n \"0xe450d38c\": \"Insufficient USDC balance.\",\n \"0xfb8f41b2\": \"Insufficient USDC allowance. Approve and try again.\",\n \"0x96c6fd1e\": \"Invalid token sender (zero address).\",\n \"0xec442f05\": \"Invalid token receiver (zero address).\",\n \"0xe602df05\": \"Invalid token approver (zero address).\",\n \"0x94280d62\": \"Invalid spender (zero address).\",\n \"0x03dee4c5\": \"Insufficient token balance for transfer.\",\n \"0x01a83514\": \"Invalid ERC-1155 sender (zero address).\",\n \"0x57f447ce\": \"Invalid ERC-1155 receiver.\",\n \"0xe237d922\": \"Missing ERC-1155 approval.\",\n \"0x3e31884e\": \"Invalid ERC-1155 approver (zero address).\",\n \"0xced3e100\": \"Invalid ERC-1155 operator (zero address).\",\n \"0x5b059991\": \"ERC-1155 array length mismatch.\",\n};\n\nconst HEX_SELECTOR_LENGTH = 10;\n\nfunction humanizeName(name: string): string {\n const spaced = name.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\");\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n}\n\nfunction firstLine(s: string): string {\n const i = s.indexOf(\"\\n\");\n return (i === -1 ? s : s.slice(0, i)).trim();\n}\n\n// eslint-disable-next-line complexity\nexport function formatContractError(err: unknown): DimesContractError {\n if (!err) {\n return new DimesContractError(\"unknown\", \"Transaction failed.\");\n }\n\n if (err instanceof BaseError) {\n const rejected = err.walk((e) => e instanceof UserRejectedRequestError);\n if (rejected) {\n return new DimesContractError(\"UserRejected\", \"Transaction rejected in wallet.\");\n }\n\n const reverted = err.walk(\n (e) => e instanceof ContractFunctionRevertedError,\n ) as ContractFunctionRevertedError | null;\n if (reverted) {\n const errorName = reverted.data?.errorName;\n const args = reverted.data?.args;\n if (errorName) {\n const fmt = friendlyByErrorName[errorName];\n const message = fmt ? fmt(args) : humanizeName(errorName);\n return new DimesContractError(errorName, message);\n }\n const raw = reverted.raw;\n const selector = raw && raw.length >= HEX_SELECTOR_LENGTH ? raw.slice(0, HEX_SELECTOR_LENGTH) : undefined;\n const selectorMessage = selector ? friendlyBySelector[selector] : undefined;\n return new DimesContractError(\n selector ?? \"unknown_revert\",\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n selectorMessage ?? reverted.shortMessage ?? \"Contract reverted.\",\n );\n }\n\n const exec = err.walk((e) => e instanceof ContractFunctionExecutionError) as ContractFunctionExecutionError | null;\n if (exec?.shortMessage) {\n return new DimesContractError(\"execution_error\", firstLine(exec.shortMessage));\n }\n\n if (err.shortMessage) {\n return new DimesContractError(\"base_error\", firstLine(err.shortMessage));\n }\n return new DimesContractError(\"base_error\", firstLine(err.message));\n }\n\n if (err instanceof Error) {\n return new DimesContractError(\"error\", firstLine(err.message));\n }\n return new DimesContractError(\"unknown\", \"Transaction failed.\");\n}\n"]}