tapimo 0.12.0 → 0.13.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.
Files changed (257) hide show
  1. package/dist/App.d.ts +5561 -5026
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +38 -3
  4. package/dist/App.js.map +1 -1
  5. package/dist/Scope.d.ts +2 -0
  6. package/dist/Scope.d.ts.map +1 -1
  7. package/dist/Scope.js +17 -0
  8. package/dist/Scope.js.map +1 -1
  9. package/dist/admin/App.d.ts +123 -74
  10. package/dist/admin/App.d.ts.map +1 -1
  11. package/dist/admin/apps/api-keys.d.ts +80 -0
  12. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  13. package/dist/admin/apps/api-keys.js +54 -0
  14. package/dist/admin/apps/api-keys.js.map +1 -1
  15. package/dist/admin/apps/earn-vaults.d.ts +15 -15
  16. package/dist/admin/apps/earn-vaults.js +1 -1
  17. package/dist/admin/apps/verified-tokens.d.ts +81 -81
  18. package/dist/admin/ui.generated.d.ts +1 -1
  19. package/dist/admin/ui.generated.d.ts.map +1 -1
  20. package/dist/admin/ui.generated.js +151 -151
  21. package/dist/admin/ui.generated.js.map +1 -1
  22. package/dist/apps/Zones.d.ts +16 -16
  23. package/dist/apps/Zones.js +4 -4
  24. package/dist/apps/data/App.js +18 -18
  25. package/dist/apps/data/App.js.map +1 -1
  26. package/dist/apps/data/ZoneSelection.d.ts +8 -8
  27. package/dist/apps/data/ZoneSelection.d.ts.map +1 -1
  28. package/dist/apps/data/ZoneSelection.js +1 -1
  29. package/dist/apps/data/ZoneSelection.js.map +1 -1
  30. package/dist/apps/data/routes/activities.d.ts +588 -584
  31. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  32. package/dist/apps/data/routes/activities.js +1561 -1239
  33. package/dist/apps/data/routes/activities.js.map +1 -1
  34. package/dist/apps/data/routes/balances.d.ts +26 -26
  35. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  36. package/dist/apps/data/routes/balances.js +43 -16
  37. package/dist/apps/data/routes/balances.js.map +1 -1
  38. package/dist/apps/data/routes/blocks.d.ts +44 -44
  39. package/dist/apps/data/routes/blocks.d.ts.map +1 -1
  40. package/dist/apps/data/routes/blocks.js +21 -11
  41. package/dist/apps/data/routes/blocks.js.map +1 -1
  42. package/dist/apps/data/routes/coingecko.d.ts +3 -3
  43. package/dist/apps/data/routes/earn.d.ts +18 -18
  44. package/dist/apps/data/routes/earn.js +13 -13
  45. package/dist/apps/data/routes/exchanges.d.ts +145 -145
  46. package/dist/apps/data/routes/fee-amm.d.ts +2 -2
  47. package/dist/apps/data/routes/receipts.d.ts +155 -55
  48. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  49. package/dist/apps/data/routes/receipts.js +28 -10
  50. package/dist/apps/data/routes/receipts.js.map +1 -1
  51. package/dist/apps/data/routes/tokenlist.d.ts +13 -13
  52. package/dist/apps/data/routes/tokens.d.ts +98 -98
  53. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  54. package/dist/apps/data/routes/tokens.js +51 -20
  55. package/dist/apps/data/routes/tokens.js.map +1 -1
  56. package/dist/apps/data/routes/transactions.d.ts +7 -2
  57. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  58. package/dist/apps/data/routes/transactions.js +37 -17
  59. package/dist/apps/data/routes/transactions.js.map +1 -1
  60. package/dist/apps/data/routes/transfers.d.ts +1 -1
  61. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  62. package/dist/apps/data/routes/transfers.js +18 -12
  63. package/dist/apps/data/routes/transfers.js.map +1 -1
  64. package/dist/apps/data/routes/valuation.d.ts +1 -1
  65. package/dist/apps/data/routes/valuation.d.ts.map +1 -1
  66. package/dist/apps/data/routes/valuation.js +12 -7
  67. package/dist/apps/data/routes/valuation.js.map +1 -1
  68. package/dist/apps/data/routes/verified-tokens.d.ts +3 -3
  69. package/dist/apps/data/routes/webhooks.d.ts +11 -11
  70. package/dist/apps/data/routes/zones.d.ts +14 -14
  71. package/dist/apps/data/routes/zones.js +1 -1
  72. package/dist/apps/funding/App.d.ts +11 -0
  73. package/dist/apps/funding/App.d.ts.map +1 -1
  74. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
  75. package/dist/apps/funding/routes/deposit-addresses.js +16 -11
  76. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  77. package/dist/apps/funding/routes/transfers.d.ts +60 -48
  78. package/dist/apps/funding/routes/transfers.d.ts.map +1 -1
  79. package/dist/apps/funding/routes/transfers.js +27 -19
  80. package/dist/apps/funding/routes/transfers.js.map +1 -1
  81. package/dist/apps/management/App.d.ts +4487 -3963
  82. package/dist/apps/management/App.d.ts.map +1 -1
  83. package/dist/apps/management/routes/api-keys.d.ts +710 -159
  84. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  85. package/dist/apps/management/routes/api-keys.js +236 -4
  86. package/dist/apps/management/routes/api-keys.js.map +1 -1
  87. package/dist/apps/management/routes/faucet.d.ts +6 -6
  88. package/dist/apps/management/routes/invite-links.d.ts +42 -42
  89. package/dist/apps/management/routes/members.d.ts +30 -30
  90. package/dist/apps/management/routes/projects.d.ts +40 -40
  91. package/dist/apps/management/routes/usage.d.ts +24 -24
  92. package/dist/apps/management/routes/verified-token-requests.d.ts +1 -1
  93. package/dist/apps/management/routes/webhooks.d.ts +55 -55
  94. package/dist/db/Db.d.ts.map +1 -1
  95. package/dist/db/Db.js +12 -1
  96. package/dist/db/Db.js.map +1 -1
  97. package/dist/db/Schema.d.ts +3 -2
  98. package/dist/db/Schema.d.ts.map +1 -1
  99. package/dist/db/Schema.js +5 -2
  100. package/dist/db/Schema.js.map +1 -1
  101. package/dist/db/tables/fundingCatalog.d.ts +4 -2
  102. package/dist/db/tables/fundingCatalog.d.ts.map +1 -1
  103. package/dist/db/tables/fundingCatalog.js +5 -1
  104. package/dist/db/tables/fundingCatalog.js.map +1 -1
  105. package/dist/handlers/internal/utils.d.ts.map +1 -1
  106. package/dist/handlers/internal/utils.js +9 -0
  107. package/dist/handlers/internal/utils.js.map +1 -1
  108. package/dist/internal/Auth.d.ts +3 -1
  109. package/dist/internal/Auth.d.ts.map +1 -1
  110. package/dist/internal/Auth.js +6 -3
  111. package/dist/internal/Auth.js.map +1 -1
  112. package/dist/internal/EarnVaults.d.ts +3 -3
  113. package/dist/internal/EarnVaults.js +3 -3
  114. package/dist/internal/Fetch.d.ts +23 -0
  115. package/dist/internal/Fetch.d.ts.map +1 -0
  116. package/dist/internal/Fetch.js +26 -0
  117. package/dist/internal/Fetch.js.map +1 -0
  118. package/dist/internal/Log.d.ts +3 -1
  119. package/dist/internal/Log.d.ts.map +1 -1
  120. package/dist/internal/Log.js +16 -3
  121. package/dist/internal/Log.js.map +1 -1
  122. package/dist/internal/OpenApi.d.ts +5 -3
  123. package/dist/internal/OpenApi.d.ts.map +1 -1
  124. package/dist/internal/OpenApi.js +13 -3
  125. package/dist/internal/OpenApi.js.map +1 -1
  126. package/dist/internal/Response.d.ts +1 -1
  127. package/dist/internal/Response.d.ts.map +1 -1
  128. package/dist/internal/Schema.d.ts +6 -3
  129. package/dist/internal/Schema.d.ts.map +1 -1
  130. package/dist/internal/Schema.js +8 -2
  131. package/dist/internal/Schema.js.map +1 -1
  132. package/dist/internal/Store.d.ts +16 -3
  133. package/dist/internal/Store.d.ts.map +1 -1
  134. package/dist/internal/Store.js +82 -16
  135. package/dist/internal/Store.js.map +1 -1
  136. package/dist/internal/Tidx.d.ts.map +1 -1
  137. package/dist/internal/Tidx.js +7 -2
  138. package/dist/internal/Tidx.js.map +1 -1
  139. package/dist/internal/Timeout.d.ts +36 -0
  140. package/dist/internal/Timeout.d.ts.map +1 -0
  141. package/dist/internal/Timeout.js +37 -0
  142. package/dist/internal/Timeout.js.map +1 -0
  143. package/dist/internal/Timing.d.ts +9 -0
  144. package/dist/internal/Timing.d.ts.map +1 -1
  145. package/dist/internal/Timing.js +7 -0
  146. package/dist/internal/Timing.js.map +1 -1
  147. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  148. package/dist/internal/WebhookDestination.js +3 -0
  149. package/dist/internal/WebhookDestination.js.map +1 -1
  150. package/dist/internal/funding/Action.d.ts +9 -0
  151. package/dist/internal/funding/Action.d.ts.map +1 -1
  152. package/dist/internal/funding/Action.js +16 -8
  153. package/dist/internal/funding/Action.js.map +1 -1
  154. package/dist/internal/funding/Catalog.d.ts +9 -2
  155. package/dist/internal/funding/Catalog.d.ts.map +1 -1
  156. package/dist/internal/funding/Catalog.js +19 -8
  157. package/dist/internal/funding/Catalog.js.map +1 -1
  158. package/dist/internal/funding/Provider.d.ts +68 -13
  159. package/dist/internal/funding/Provider.d.ts.map +1 -1
  160. package/dist/internal/funding/Provider.js +29 -8
  161. package/dist/internal/funding/Provider.js.map +1 -1
  162. package/dist/internal/funding/Transfer.d.ts +13 -12
  163. package/dist/internal/funding/Transfer.d.ts.map +1 -1
  164. package/dist/internal/funding/Transfer.js +23 -21
  165. package/dist/internal/funding/Transfer.js.map +1 -1
  166. package/dist/internal/funding/providers/stargate.d.ts +28 -9
  167. package/dist/internal/funding/providers/stargate.d.ts.map +1 -1
  168. package/dist/internal/funding/providers/stargate.js +251 -117
  169. package/dist/internal/funding/providers/stargate.js.map +1 -1
  170. package/dist/internal/index.d.ts +1 -0
  171. package/dist/internal/index.d.ts.map +1 -1
  172. package/dist/internal/index.js +1 -0
  173. package/dist/internal/index.js.map +1 -1
  174. package/package.json +2 -2
  175. package/src/App.test.ts +100 -0
  176. package/src/App.ts +42 -3
  177. package/src/Client.test-d.ts +46 -0
  178. package/src/Scope.test.ts +20 -0
  179. package/src/Scope.ts +16 -0
  180. package/src/admin/apps/api-keys.test.ts +75 -0
  181. package/src/admin/apps/api-keys.ts +64 -0
  182. package/src/admin/apps/earn-vaults.test.ts +1 -1
  183. package/src/admin/apps/earn-vaults.ts +1 -1
  184. package/src/admin/ui/src/lib/api-keys.ts +19 -0
  185. package/src/admin/ui/src/routes/api-keys.tsx +89 -2
  186. package/src/admin/ui.generated.ts +189 -151
  187. package/src/apps/Zones.test.ts +4 -4
  188. package/src/apps/Zones.ts +4 -4
  189. package/src/apps/composition.test.ts +1 -1
  190. package/src/apps/data/App.test.ts +41 -0
  191. package/src/apps/data/App.ts +18 -18
  192. package/src/apps/data/ZoneSelection.test.ts +2 -2
  193. package/src/apps/data/ZoneSelection.ts +8 -8
  194. package/src/apps/data/routes/activities.test.ts +1526 -12
  195. package/src/apps/data/routes/activities.ts +1774 -1356
  196. package/src/apps/data/routes/balances.ts +133 -97
  197. package/src/apps/data/routes/blocks.test.ts +533 -0
  198. package/src/apps/data/routes/blocks.ts +35 -16
  199. package/src/apps/data/routes/earn.test.ts +4 -2
  200. package/src/apps/data/routes/earn.ts +13 -13
  201. package/src/apps/data/routes/earn.zone-access.test.ts +6 -6
  202. package/src/apps/data/routes/receipts.ts +47 -16
  203. package/src/apps/data/routes/tokens.test.ts +578 -0
  204. package/src/apps/data/routes/tokens.ts +283 -225
  205. package/src/apps/data/routes/transactions.ts +68 -29
  206. package/src/apps/data/routes/transfers.test.ts +421 -0
  207. package/src/apps/data/routes/transfers.ts +45 -27
  208. package/src/apps/data/routes/valuation.ts +94 -78
  209. package/src/apps/data/routes/zones.test.ts +2 -2
  210. package/src/apps/data/routes/zones.ts +1 -1
  211. package/src/apps/funding/routes/deposit-addresses.test.ts +25 -3
  212. package/src/apps/funding/routes/deposit-addresses.ts +17 -12
  213. package/src/apps/funding/routes/quotes.test.ts +5 -9
  214. package/src/apps/funding/routes/transfers.test.ts +395 -8
  215. package/src/apps/funding/routes/transfers.ts +76 -59
  216. package/src/apps/management/routes/api-keys.test.ts +220 -0
  217. package/src/apps/management/routes/api-keys.ts +280 -3
  218. package/src/db/Db.ts +13 -1
  219. package/src/db/Schema.ts +5 -2
  220. package/src/db/tables/earnVaults.test.ts +9 -9
  221. package/src/db/tables/fundingCatalog.test.ts +16 -2
  222. package/src/db/tables/fundingCatalog.ts +9 -3
  223. package/src/handlers/internal/utils.test.ts +53 -0
  224. package/src/handlers/internal/utils.ts +15 -0
  225. package/src/internal/Auth.ts +12 -4
  226. package/src/internal/EarnVaults.capabilities.test.ts +2 -2
  227. package/src/internal/EarnVaults.test.ts +1 -1
  228. package/src/internal/EarnVaults.ts +3 -3
  229. package/src/internal/Fetch.test.ts +46 -0
  230. package/src/internal/Fetch.ts +56 -0
  231. package/src/internal/Log.test.ts +21 -0
  232. package/src/internal/Log.ts +20 -5
  233. package/src/internal/OpenApi.ts +14 -4
  234. package/src/internal/Response.ts +1 -1
  235. package/src/internal/Schema.test.ts +2 -0
  236. package/src/internal/Schema.ts +12 -2
  237. package/src/internal/Store.test.ts +178 -0
  238. package/src/internal/Store.ts +104 -18
  239. package/src/internal/Tidx.test.ts +2 -1
  240. package/src/internal/Tidx.ts +7 -2
  241. package/src/internal/Timeout.test.ts +35 -0
  242. package/src/internal/Timeout.ts +73 -0
  243. package/src/internal/Timing.ts +16 -0
  244. package/src/internal/WebhookDestination.ts +3 -0
  245. package/src/internal/funding/Action.test.ts +41 -1
  246. package/src/internal/funding/Action.ts +69 -41
  247. package/src/internal/funding/Catalog.test.ts +34 -0
  248. package/src/internal/funding/Catalog.ts +28 -11
  249. package/src/internal/funding/Provider.test.ts +73 -0
  250. package/src/internal/funding/Provider.ts +82 -28
  251. package/src/internal/funding/Transfer.ts +133 -110
  252. package/src/internal/funding/providers/index.test.ts +4 -167
  253. package/src/internal/funding/providers/relay.test.ts +2 -2
  254. package/src/internal/funding/providers/stargate.test.ts +163 -0
  255. package/src/internal/funding/providers/stargate.ts +359 -134
  256. package/src/internal/index.test.ts +1 -0
  257. package/src/internal/index.ts +1 -0
@@ -1,143 +1,277 @@
1
- import { Address } from 'ox';
1
+ import { AbiFunction, Address, Hex, RpcTransport } from 'ox';
2
+ import { createClient, custom, fallback, publicActions } from 'viem';
2
3
  import * as z from 'zod/mini';
4
+ import * as Action from '../Action.js';
3
5
  import * as FundingProvider from '../Provider.js';
4
- const defaultBaseUrl = 'https://transfer.layerzero-api.com/v1';
6
+ const approve = AbiFunction.from('function approve(address spender, uint256 amount)');
5
7
  const defaultFetch = (input, init) => globalThis.fetch(input, init);
6
- const sourceDetails = {
7
- STARGATE_V2_BUS: 'stargate:value-transfer-v1:bus',
8
- STARGATE_V2_TAXI: 'stargate:value-transfer-v1:taxi',
9
- };
10
- var schema;
11
- (function (schema) {
12
- const DecimalString = z.string().check(z.regex(/^\d+(\.\d+)?$/));
13
- const IntegerString = z.string().check(z.regex(/^\d+$/));
14
- const Quote = z.object({
15
- dstAmount: IntegerString,
16
- dstAmountMin: IntegerString,
17
- duration: z.optional(z.object({
18
- estimated: z.nullable(DecimalString),
19
- })),
20
- expiresAt: z.optional(z.iso.datetime()),
21
- id: z.string().check(z.minLength(1)),
22
- routeSteps: z
23
- .array(z.object({
24
- srcChainKey: z.string(),
25
- type: z.string(),
26
- }))
27
- .check(z.minLength(1)),
28
- srcAmount: IntegerString,
29
- });
30
- const Error = z.object({
31
- message: z.string(),
32
- status: z.union([z.string(), z.number()]),
33
- });
34
- schema.Quotes = z.object({
35
- error: z.optional(z.nullable(Error)),
36
- quotes: z.array(Quote),
37
- });
38
- })(schema || (schema = {}));
39
- /** Creates a Stargate funding provider backed by LayerZero's `/quotes` endpoint. */
40
- export function stargate(options) {
41
- if (options.apiKey.trim().length === 0)
42
- throw new FundingProvider.ProviderConfigurationError();
43
- if (!Address.validate(options.userAddress, { strict: false }))
44
- throw new FundingProvider.ProviderConfigurationError();
45
- const endpoint = new URL(options.baseUrl ?? defaultBaseUrl);
46
- endpoint.pathname = `${endpoint.pathname.replace(/\/+$/, '')}/quotes`;
8
+ const destinationChainId = 'eip155:4217';
9
+ const destinationEid = 30_410;
10
+ const destinationToken = '0x20C000000000000000000000b9537d11c60E8b50';
11
+ const quoteOft = AbiFunction.from('function quoteOFT((uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd) sendParam) view returns ((uint256 minAmountLD, uint256 maxAmountLD) limit, (int256 feeAmountLD, string description)[] oftFeeDetails, (uint256 amountSentLD, uint256 amountReceivedLD) receipt)');
12
+ const quoteSend = AbiFunction.from('function quoteSend((uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd) sendParam, bool payInLzToken) view returns ((uint256 nativeFee, uint256 lzTokenFee) fee)');
13
+ const sendToken = AbiFunction.from('function sendToken((uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd) sendParam, (uint256 nativeFee, uint256 lzTokenFee) fee, address refundAddress) payable returns ((bytes32 guid, uint64 nonce, (uint256 nativeFee, uint256 lzTokenFee) fee) msgReceipt, (uint256 amountSentLD, uint256 amountReceivedLD) oftReceipt, (uint72 ticketId, bytes passengerBytes) ticket)');
14
+ const quoteTtlMs = 60_000;
15
+ const zeroAddress = '0x0000000000000000000000000000000000000000';
16
+ const configuration = z
17
+ .strictObject({
18
+ poolAddress: z
19
+ .string()
20
+ .check(z.regex(/^0x[0-9a-fA-F]{40}$/), z.describe('Stargate pool contract on the source chain.')),
21
+ })
22
+ .check(z.describe('Stargate configuration for one funding route.'));
23
+ /** Creates a direct Stargate V2 OFT funding provider. */
24
+ export function stargate(options = {}) {
47
25
  const fetch = options.fetch ?? defaultFetch;
48
26
  const now = options.now ?? (() => new Date());
49
27
  return FundingProvider.from({
50
28
  id: 'stargate',
51
29
  name: 'Stargate',
52
30
  async getQuote({ candidate, route }, signal) {
53
- const response = await FundingProvider.requestJson(endpoint, {
54
- body: {
55
- amount: candidate.sourceAmount.amount,
56
- dstChainKey: route.destination.chain.slug,
57
- dstTokenAddress: candidate.destinationToken.address,
58
- dstWalletAddress: options.userAddress,
59
- options: { amountType: 'EXACT_SRC_AMOUNT' },
60
- srcChainKey: route.source.chain.slug,
61
- srcTokenAddress: candidate.sourceToken.address,
62
- srcWalletAddress: options.userAddress,
63
- },
64
- fetch,
65
- headers: { 'user-agent': 'tempo-api', 'x-api-key': options.apiKey },
66
- method: 'POST',
67
- signal,
31
+ const deployment = resolveDeployment({
32
+ configuration: candidate.configuration,
33
+ destinationChainId: route.destination.chain.id,
34
+ destinationTokenAddress: route.destination.address,
35
+ sourceChainId: route.source.chain.id,
36
+ sourceTokenAddress: route.source.address,
68
37
  });
69
- const parsed = schema.Quotes.safeParse(response);
70
- if (!parsed.success || parsed.data.error)
71
- throw new FundingProvider.ProviderPayloadError();
72
38
  const sampledAt = now();
73
- const selected = selectQuote(parsed.data.quotes, {
39
+ if (!deployment)
40
+ return unavailable({ message: 'ROUTE_NOT_CONFIGURED', now: sampledAt });
41
+ const sendParam = createSendParam({
74
42
  amount: candidate.sourceAmount.amount,
75
- now: sampledAt,
76
- sourceChainKey: route.source.chain.slug,
43
+ recipient: zeroAddress,
77
44
  });
78
- if (!selected)
79
- return FundingProvider.unavailableResult({
80
- detail: 'stargate:value-transfer-v1',
81
- message: 'NO_STARGATE_ROUTE',
82
- now: sampledAt,
83
- source: 'providerQuote',
84
- });
85
- const estimated = estimatedSeconds(selected.quote.duration?.estimated);
45
+ const [limit, feeDetails, receipt] = await client({ fetch, route, signal }).readContract({
46
+ abi: [quoteOft],
47
+ address: deployment.pool,
48
+ args: [sendParam],
49
+ functionName: 'quoteOFT',
50
+ });
51
+ if (!isExactQuote({ amount: candidate.sourceAmount.amount, feeDetails, limit, receipt }))
52
+ return unavailable({ message: 'NO_EXACT_ROUTE', now: sampledAt });
86
53
  return {
87
- ...(selected.quote.expiresAt ? { expiresAt: selected.quote.expiresAt } : {}),
88
- destinationAmountMin: selected.quote.dstAmountMin,
89
- destinationAmount: selected.quote.dstAmount,
90
- quality: {
91
- ...(estimated === undefined ? {} : { estimatedSeconds: estimated }),
92
- liquiditySource: 'providerQuote',
93
- sourceDetail: sourceDetails[selected.type],
94
- tier: 'liquid',
95
- },
54
+ destinationAmountMin: receipt.amountReceivedLD.toString(),
55
+ destinationAmount: receipt.amountReceivedLD.toString(),
56
+ quality: quality(),
96
57
  sampledAt: sampledAt.toISOString(),
97
58
  status: 'available',
98
59
  };
99
60
  },
61
+ async prepareTransfer({ candidate, method, mode, recipient, sender }, signal) {
62
+ if (method !== 'transaction' ||
63
+ mode !== 'exactSource' ||
64
+ !Address.validate(recipient, { strict: false }) ||
65
+ !Address.validate(sender, { strict: false }))
66
+ throw new FundingProvider.ProviderConfigurationError();
67
+ const deployment = resolveDeployment({
68
+ configuration: candidate.configuration,
69
+ destinationChainId: candidate.destinationChain.id,
70
+ destinationTokenAddress: candidate.destinationToken.address,
71
+ sourceChainId: candidate.sourceChain.id,
72
+ sourceTokenAddress: candidate.sourceToken.address,
73
+ });
74
+ if (!deployment)
75
+ throw new FundingProvider.ProviderUnavailableError();
76
+ const sendParam = createSendParam({ amount: candidate.sourceAmount.amount, recipient });
77
+ const rpc = client({ fetch, route: candidate.route, signal });
78
+ const [[limit, feeDetails, receipt], messagingFee] = await Promise.all([
79
+ rpc.readContract({
80
+ abi: [quoteOft],
81
+ address: deployment.pool,
82
+ args: [sendParam],
83
+ functionName: 'quoteOFT',
84
+ }),
85
+ rpc.readContract({
86
+ abi: [quoteSend],
87
+ account: sender,
88
+ address: deployment.pool,
89
+ args: [sendParam, false],
90
+ functionName: 'quoteSend',
91
+ }),
92
+ ]);
93
+ if (!isExactQuote({ amount: candidate.sourceAmount.amount, feeDetails, limit, receipt }))
94
+ throw new FundingProvider.ProviderUnavailableError();
95
+ if (messagingFee.lzTokenFee !== 0n)
96
+ throw new FundingProvider.ProviderPayloadError();
97
+ const action = {
98
+ calls: [
99
+ {
100
+ data: AbiFunction.encodeData(approve, [
101
+ deployment.pool,
102
+ BigInt(candidate.sourceAmount.amount),
103
+ ]),
104
+ to: deployment.sourceToken,
105
+ value: '0x0',
106
+ },
107
+ {
108
+ data: AbiFunction.encodeData(sendToken, [sendParam, messagingFee, sender]),
109
+ to: deployment.pool,
110
+ value: Hex.fromNumber(messagingFee.nativeFee),
111
+ },
112
+ ],
113
+ type: 'evm:calls',
114
+ };
115
+ validateAction({
116
+ action,
117
+ configuration: candidate.configuration,
118
+ destinationTokenAddress: candidate.destinationToken.address,
119
+ recipient,
120
+ sender,
121
+ sourceAmount: candidate.sourceAmount.amount,
122
+ sourceChainId: candidate.sourceChain.id,
123
+ sourceTokenAddress: candidate.sourceToken.address,
124
+ });
125
+ const sampledAt = now();
126
+ return {
127
+ action,
128
+ destinationAmountMin: receipt.amountReceivedLD.toString(),
129
+ destinationAmount: receipt.amountReceivedLD.toString(),
130
+ expiresAt: new Date(sampledAt.getTime() + quoteTtlMs).toISOString(),
131
+ fees: messagingFee.nativeFee === 0n
132
+ ? []
133
+ : [
134
+ {
135
+ amount: messagingFee.nativeFee.toString(),
136
+ side: 'source',
137
+ token: nativeToken(candidate.sourceChain.id),
138
+ },
139
+ ],
140
+ quality: quality(),
141
+ sampledAt: sampledAt.toISOString(),
142
+ };
143
+ },
144
+ validateTransferAction({ action, candidate, recipient, sender }) {
145
+ return {
146
+ nativeValues: validateAction({
147
+ action,
148
+ configuration: candidate.configuration,
149
+ destinationTokenAddress: candidate.destinationToken.address,
150
+ recipient,
151
+ sender,
152
+ sourceAmount: candidate.sourceAmount.amount,
153
+ sourceChainId: candidate.sourceChain.id,
154
+ sourceTokenAddress: candidate.sourceToken.address,
155
+ }),
156
+ };
157
+ },
100
158
  });
101
159
  }
102
- function selectQuote(quotes, options) {
103
- return quotes
104
- .flatMap((quote) => {
105
- const type = quote.routeSteps
106
- .filter((step) => step.srcChainKey === options.sourceChainKey)
107
- .map((step) => step.type)
108
- .find(isStargateType);
109
- if (!type)
110
- return [];
111
- if (quote.expiresAt !== undefined &&
112
- new Date(quote.expiresAt).getTime() <= options.now.getTime())
113
- return [];
114
- if (quote.srcAmount !== options.amount ||
115
- BigInt(quote.dstAmount) <= 0n ||
116
- BigInt(quote.dstAmountMin) <= 0n ||
117
- BigInt(quote.dstAmountMin) > BigInt(quote.dstAmount))
160
+ /** Validates one direct Stargate action and returns its exact native-value allowance. */
161
+ export function validateAction(options) {
162
+ try {
163
+ const action = Action.schema.EvmCalls.parse(options.action);
164
+ const deployment = resolveDeployment({
165
+ configuration: options.configuration,
166
+ destinationChainId,
167
+ destinationTokenAddress: options.destinationTokenAddress,
168
+ sourceChainId: options.sourceChainId,
169
+ sourceTokenAddress: options.sourceTokenAddress,
170
+ });
171
+ if (!deployment || action.calls.length !== 2)
172
+ throw new FundingProvider.ProviderPayloadError();
173
+ const [approval, execution] = action.calls;
174
+ if (!Address.isEqual(approval.to, deployment.sourceToken) ||
175
+ BigInt(approval.value) !== 0n ||
176
+ !Address.isEqual(execution.to, deployment.pool))
118
177
  throw new FundingProvider.ProviderPayloadError();
119
- return [{ quote, type }];
120
- })
121
- .sort((a, b) => {
122
- const delta = BigInt(b.quote.dstAmountMin) - BigInt(a.quote.dstAmountMin);
123
- if (delta > 0n)
124
- return 1;
125
- if (delta < 0n)
126
- return -1;
127
- return 0;
128
- })[0];
178
+ const [spender, approvalAmount] = AbiFunction.decodeData(approve, approval.data);
179
+ const [sendParam, messagingFee, refundAddress] = AbiFunction.decodeData(sendToken, execution.data);
180
+ const nativeValue = BigInt(execution.value);
181
+ if (!Address.isEqual(spender, deployment.pool) ||
182
+ approvalAmount !== BigInt(options.sourceAmount) ||
183
+ sendParam.amountLD !== BigInt(options.sourceAmount) ||
184
+ sendParam.composeMsg !== '0x' ||
185
+ sendParam.dstEid !== destinationEid ||
186
+ sendParam.extraOptions !== '0x' ||
187
+ sendParam.minAmountLD !== BigInt(options.sourceAmount) ||
188
+ sendParam.oftCmd !== '0x' ||
189
+ !Hex.isEqual(sendParam.to, recipientBytes32(options.recipient)) ||
190
+ messagingFee.lzTokenFee !== 0n ||
191
+ messagingFee.nativeFee !== nativeValue ||
192
+ !Address.isEqual(refundAddress, options.sender))
193
+ throw new FundingProvider.ProviderPayloadError();
194
+ return [{ to: execution.to, value: execution.value }];
195
+ }
196
+ catch (cause) {
197
+ if (cause instanceof FundingProvider.ProviderPayloadError)
198
+ throw cause;
199
+ throw new FundingProvider.ProviderPayloadError();
200
+ }
201
+ }
202
+ function client(options) {
203
+ if (options.route.source.chain.rpcUrls.length === 0)
204
+ throw new FundingProvider.ProviderConfigurationError();
205
+ return createClient({
206
+ transport: fallback(options.route.source.chain.rpcUrls.map((url) => custom(RpcTransport.fromHttp(url, {
207
+ fetchFn: (input, init) => options.fetch(input, { ...init, signal: options.signal }),
208
+ }), { retryCount: 0 }))),
209
+ }).extend(publicActions);
129
210
  }
130
- function isStargateType(type) {
131
- return Object.hasOwn(sourceDetails, type);
211
+ function createSendParam(options) {
212
+ const amount = BigInt(options.amount);
213
+ return {
214
+ amountLD: amount,
215
+ composeMsg: '0x',
216
+ dstEid: destinationEid,
217
+ extraOptions: '0x',
218
+ minAmountLD: amount,
219
+ oftCmd: '0x',
220
+ to: recipientBytes32(options.recipient),
221
+ };
132
222
  }
133
- function estimatedSeconds(milliseconds) {
134
- if (milliseconds === undefined || milliseconds === null)
223
+ function isExactQuote(options) {
224
+ const amount = BigInt(options.amount);
225
+ return (amount >= options.limit.minAmountLD &&
226
+ amount <= options.limit.maxAmountLD &&
227
+ options.feeDetails.every((fee) => fee.feeAmountLD >= 0n) &&
228
+ options.receipt.amountSentLD === amount &&
229
+ options.receipt.amountReceivedLD === amount);
230
+ }
231
+ function nativeToken(sourceChainId) {
232
+ return {
233
+ address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
234
+ currency: 'ETH',
235
+ decimals: 18,
236
+ name: 'Ether',
237
+ standard: 'native',
238
+ symbol: 'ETH',
239
+ tokenKey: `${sourceChainId}/slip44:60`,
240
+ verified: true,
241
+ };
242
+ }
243
+ function quality() {
244
+ return {
245
+ liquiditySource: 'onchain',
246
+ sourceDetail: 'stargate:oft-v2:taxi',
247
+ tier: 'liquid',
248
+ };
249
+ }
250
+ function recipientBytes32(recipient) {
251
+ if (!Address.validate(recipient, { strict: false }))
252
+ throw new FundingProvider.ProviderConfigurationError();
253
+ return Hex.padLeft(recipient, 32);
254
+ }
255
+ function resolveDeployment(options) {
256
+ const parsed = configuration.safeParse(options.configuration);
257
+ if (!parsed.success ||
258
+ options.destinationChainId !== destinationChainId ||
259
+ !options.sourceChainId.startsWith('eip155:') ||
260
+ !Address.validate(options.destinationTokenAddress, { strict: false }) ||
261
+ !Address.validate(options.sourceTokenAddress, { strict: false }) ||
262
+ !Address.isEqual(options.destinationTokenAddress, destinationToken))
135
263
  return undefined;
136
- const [whole = '0', fraction] = milliseconds.split('.');
137
- const roundedMilliseconds = BigInt(whole) + (fraction !== undefined && /[1-9]/.test(fraction) ? 1n : 0n);
138
- const seconds = (roundedMilliseconds + 999n) / 1000n;
139
- if (seconds > BigInt(Number.MAX_SAFE_INTEGER))
140
- throw new FundingProvider.ProviderPayloadError();
141
- return Number(seconds);
264
+ return {
265
+ pool: Address.checksum(parsed.data.poolAddress),
266
+ sourceToken: Address.checksum(options.sourceTokenAddress),
267
+ };
268
+ }
269
+ function unavailable(options) {
270
+ return FundingProvider.unavailableResult({
271
+ detail: 'stargate:oft-v2',
272
+ message: options.message,
273
+ now: options.now,
274
+ source: 'onchain',
275
+ });
142
276
  }
143
277
  //# sourceMappingURL=stargate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stargate.js","sourceRoot":"","sources":["../../../../src/internal/funding/providers/stargate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stargate.js","sourceRoot":"","sources":["../../../../src/internal/funding/providers/stargate.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export * as EarnVaults from './EarnVaults.js';
7
7
  export * as Errors from './Errors.js';
8
8
  export * as Exchange from './exchange/index.js';
9
9
  export * as Fees from './Fees.js';
10
+ export * as Fetch from './Fetch.js';
10
11
  export * as Funding from './funding/index.js';
11
12
  export * as Id from './Id.js';
12
13
  export * as Idempotency from './Idempotency.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA"}
@@ -7,6 +7,7 @@ export * as EarnVaults from './EarnVaults.js';
7
7
  export * as Errors from './Errors.js';
8
8
  export * as Exchange from './exchange/index.js';
9
9
  export * as Fees from './Fees.js';
10
+ export * as Fetch from './Fetch.js';
10
11
  export * as Funding from './funding/index.js';
11
12
  export * as Id from './Id.js';
12
13
  export * as Idempotency from './Idempotency.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tapimo",
3
3
  "type": "module",
4
- "version": "0.12.0",
4
+ "version": "0.13.0",
5
5
  "main": "./dist/index.js",
6
6
  "license": "MIT",
7
7
  "bin": {
@@ -21,7 +21,7 @@
21
21
  "incur": "^0.4.19",
22
22
  "jose": "^6.2.3",
23
23
  "kysely": "^0.29.2",
24
- "mppx": "^0.8.15",
24
+ "mppx": "^0.8.17",
25
25
  "nanoid": "^5.1.16",
26
26
  "ox": "0.14.33",
27
27
  "pg": "^8.22.0",
package/src/App.test.ts CHANGED
@@ -40,6 +40,37 @@ describe('create', () => {
40
40
  expect(await store.get('status')).toMatchInlineSnapshot(`"ready"`)
41
41
  })
42
42
 
43
+ test('keeps cache persistence alive via waitUntil', async () => {
44
+ const pending = Promise.withResolvers<void>()
45
+ const waited: Promise<unknown>[] = []
46
+ const store = Store.from({
47
+ ...Store.memory(),
48
+ put: () => pending.promise,
49
+ type: 'cache',
50
+ })
51
+ const app = TestApp.create({ auth: false, cache: { store } })
52
+ app.get('/cache', async (c) =>
53
+ c.json(
54
+ await Store.memoize(async () => ({ value: 'fresh' }), {
55
+ key: 'app:cache',
56
+ store: c.get('store'),
57
+ ttl: 60_000,
58
+ }),
59
+ ),
60
+ )
61
+ const executionCtx = {
62
+ passThroughOnException: () => {},
63
+ waitUntil: (promise: Promise<unknown>) => void waited.push(promise),
64
+ }
65
+
66
+ const response = await app.request('/cache', undefined, undefined, executionCtx as never)
67
+
68
+ expect(response.status).toBe(200)
69
+ expect(waited).toHaveLength(1)
70
+ pending.resolve()
71
+ await Promise.all(waited)
72
+ })
73
+
43
74
  test('leaves routes public without auth middleware', async () => {
44
75
  const app = TestApp.create({ auth: false })
45
76
  const response = await app.request('/v1/tokens/not-an-address')
@@ -47,6 +78,57 @@ describe('create', () => {
47
78
  expect(response.status).toMatchInlineSnapshot(`400`)
48
79
  })
49
80
 
81
+ test('bounds a stalled request with a 504 envelope', async () => {
82
+ vi.useFakeTimers()
83
+ try {
84
+ const app = TestApp.create({ auth: false })
85
+ app.get('/hang', () => new Promise<never>(() => {}))
86
+
87
+ const pending = app.request('/hang')
88
+ await vi.advanceTimersByTimeAsync(60_000)
89
+ const response = await pending
90
+ const { requestId, ...body } = (await response.json()) as Record<string, unknown>
91
+
92
+ expect(response.status).toMatchInlineSnapshot(`504`)
93
+ expect(requestId).toBeTypeOf('string')
94
+ expect(body).toMatchInlineSnapshot(`
95
+ {
96
+ "error": {
97
+ "code": "request_timeout",
98
+ "message": "Request timed out",
99
+ },
100
+ }
101
+ `)
102
+ } finally {
103
+ vi.useRealTimers()
104
+ }
105
+ })
106
+
107
+ test('exempts mutations and paid requests from the deadline', async () => {
108
+ vi.useFakeTimers()
109
+ try {
110
+ const app = TestApp.create({ auth: false })
111
+ const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
112
+ app.post('/slow', async (c) => {
113
+ await wait(90_000)
114
+ return c.json({ ok: true }, 200)
115
+ })
116
+ app.get('/slow-paid', async (c) => {
117
+ await wait(90_000)
118
+ return c.json({ ok: true }, 200)
119
+ })
120
+
121
+ const post = app.request('/slow', { method: 'POST' })
122
+ const paid = app.request('/slow-paid', { headers: { authorization: 'Payment credential' } })
123
+ await vi.advanceTimersByTimeAsync(90_000)
124
+
125
+ expect((await post).status).toMatchInlineSnapshot(`200`)
126
+ expect((await paid).status).toMatchInlineSnapshot(`200`)
127
+ } finally {
128
+ vi.useRealTimers()
129
+ }
130
+ })
131
+
50
132
  test('serves public health check', async () => {
51
133
  const app = TestApp.create({ path: 'api/' })
52
134
  const response = await app.request('/api/health')
@@ -501,6 +583,24 @@ describe('create', () => {
501
583
  `)
502
584
  })
503
585
 
586
+ test('passes the original request error to the configured logger', async () => {
587
+ const cause = new Error('boom')
588
+ let logged: Error | undefined
589
+ const app = TestApp.create({
590
+ logger: (_entry, error) => {
591
+ logged = error
592
+ },
593
+ })
594
+ app.get('/boom', () => {
595
+ throw cause
596
+ })
597
+
598
+ const response = await app.request('/boom')
599
+
600
+ expect(response.status).toBe(500)
601
+ expect(logged).toBe(cause)
602
+ })
603
+
504
604
  test('logs the selected chain for anonymous edge-cache hits', async () => {
505
605
  const entries: Log.Entry[] = []
506
606
  const app = TestApp.create({