tapimo 0.7.2 → 0.9.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 (300) hide show
  1. package/README.md +10 -7
  2. package/dist/ApiKey.d.ts +3 -0
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +10 -0
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +7 -3
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +9 -2
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +20117 -19183
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +61 -4
  13. package/dist/App.js.map +1 -1
  14. package/dist/admin/App.d.ts +84 -74
  15. package/dist/admin/App.d.ts.map +1 -1
  16. package/dist/admin/apps/api-keys.d.ts +14 -1
  17. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  18. package/dist/admin/apps/api-keys.js +6 -2
  19. package/dist/admin/apps/api-keys.js.map +1 -1
  20. package/dist/admin/apps/organizations.d.ts +2 -0
  21. package/dist/admin/apps/organizations.d.ts.map +1 -1
  22. package/dist/admin/apps/verified-tokens.d.ts +11 -11
  23. package/dist/admin/ui.generated.d.ts +1 -1
  24. package/dist/admin/ui.generated.js +67 -67
  25. package/dist/admin/ui.generated.js.map +1 -1
  26. package/dist/analytics/Analytics.d.ts +2 -0
  27. package/dist/analytics/Analytics.d.ts.map +1 -1
  28. package/dist/analytics/Analytics.js +3 -0
  29. package/dist/analytics/Analytics.js.map +1 -1
  30. package/dist/apps/data/App.d.ts +11696 -13937
  31. package/dist/apps/data/App.d.ts.map +1 -1
  32. package/dist/apps/data/App.js +4 -8
  33. package/dist/apps/data/App.js.map +1 -1
  34. package/dist/apps/data/routes/activities.d.ts +271 -271
  35. package/dist/apps/data/routes/addresses.d.ts +398 -167
  36. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  37. package/dist/apps/data/routes/balances.d.ts +278 -8
  38. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  39. package/dist/apps/data/routes/balances.js +114 -2
  40. package/dist/apps/data/routes/balances.js.map +1 -1
  41. package/dist/apps/data/routes/blocks.d.ts +123 -123
  42. package/dist/apps/data/routes/coingecko.d.ts +170 -170
  43. package/dist/apps/data/routes/earn.d.ts +498 -6
  44. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  45. package/dist/apps/data/routes/earn.js +876 -4
  46. package/dist/apps/data/routes/earn.js.map +1 -1
  47. package/dist/apps/data/routes/exchanges.d.ts +10 -10
  48. package/dist/apps/data/routes/fee-amm.d.ts +2 -2
  49. package/dist/apps/data/routes/indexer.d.ts +6 -6
  50. package/dist/apps/data/routes/indexer.js +4 -1
  51. package/dist/apps/data/routes/indexer.js.map +1 -1
  52. package/dist/apps/data/routes/receipts.d.ts +235 -235
  53. package/dist/apps/data/routes/rpc.d.ts +31 -31
  54. package/dist/apps/data/routes/rpc.js +4 -1
  55. package/dist/apps/data/routes/rpc.js.map +1 -1
  56. package/dist/apps/data/routes/tokenlist.d.ts +36 -36
  57. package/dist/apps/data/routes/tokens.d.ts +449 -449
  58. package/dist/apps/data/routes/transactions.d.ts +2 -2
  59. package/dist/apps/data/routes/transfers.d.ts +81 -81
  60. package/dist/apps/data/routes/valuation.d.ts +1 -1
  61. package/dist/apps/data/routes/verified-tokens.d.ts +36 -36
  62. package/dist/apps/data/routes/webhooks.d.ts +9 -9
  63. package/dist/apps/data/routes/zones.d.ts +14 -14
  64. package/dist/apps/funding/Access.d.ts +16 -0
  65. package/dist/apps/funding/Access.d.ts.map +1 -0
  66. package/dist/apps/funding/Access.js +22 -0
  67. package/dist/apps/funding/Access.js.map +1 -0
  68. package/dist/apps/{data/routes/funding.d.ts → funding/App.d.ts} +1640 -3217
  69. package/dist/apps/funding/App.d.ts.map +1 -0
  70. package/dist/apps/funding/App.js +61 -0
  71. package/dist/apps/funding/App.js.map +1 -0
  72. package/dist/apps/funding/Inventory.d.ts +5 -0
  73. package/dist/apps/funding/Inventory.d.ts.map +1 -0
  74. package/dist/apps/funding/Inventory.js +25 -0
  75. package/dist/apps/funding/Inventory.js.map +1 -0
  76. package/dist/apps/funding/ProviderAttempts.d.ts +5 -0
  77. package/dist/apps/funding/ProviderAttempts.d.ts.map +1 -0
  78. package/dist/apps/funding/ProviderAttempts.js +24 -0
  79. package/dist/apps/funding/ProviderAttempts.js.map +1 -0
  80. package/dist/apps/funding/index.d.ts +2 -0
  81. package/dist/apps/funding/index.d.ts.map +1 -0
  82. package/dist/apps/funding/index.js +2 -0
  83. package/dist/apps/funding/index.js.map +1 -0
  84. package/dist/apps/funding/routes/chains.d.ts +169 -0
  85. package/dist/apps/funding/routes/chains.d.ts.map +1 -0
  86. package/dist/apps/funding/routes/chains.js +80 -0
  87. package/dist/apps/funding/routes/chains.js.map +1 -0
  88. package/dist/apps/funding/routes/deposit-addresses.d.ts +1997 -0
  89. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -0
  90. package/dist/apps/funding/routes/deposit-addresses.js +778 -0
  91. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -0
  92. package/dist/apps/funding/routes/providers.d.ts +91 -0
  93. package/dist/apps/funding/routes/providers.d.ts.map +1 -0
  94. package/dist/apps/funding/routes/providers.js +56 -0
  95. package/dist/apps/funding/routes/providers.js.map +1 -0
  96. package/dist/apps/funding/routes/quotes.d.ts +426 -0
  97. package/dist/apps/funding/routes/quotes.d.ts.map +1 -0
  98. package/dist/apps/funding/routes/quotes.js +188 -0
  99. package/dist/apps/funding/routes/quotes.js.map +1 -0
  100. package/dist/apps/funding/routes/transfers.d.ts +1999 -0
  101. package/dist/apps/funding/routes/transfers.d.ts.map +1 -0
  102. package/dist/apps/funding/routes/transfers.js +614 -0
  103. package/dist/apps/funding/routes/transfers.js.map +1 -0
  104. package/dist/apps/index.d.ts +1 -0
  105. package/dist/apps/index.d.ts.map +1 -1
  106. package/dist/apps/index.js +1 -0
  107. package/dist/apps/index.js.map +1 -1
  108. package/dist/apps/management/App.d.ts +430 -165
  109. package/dist/apps/management/App.d.ts.map +1 -1
  110. package/dist/apps/management/routes/api-keys.d.ts +298 -21
  111. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  112. package/dist/apps/management/routes/api-keys.js +75 -1
  113. package/dist/apps/management/routes/api-keys.js.map +1 -1
  114. package/dist/apps/management/routes/billing.d.ts +6 -6
  115. package/dist/apps/management/routes/faucet.d.ts +35 -35
  116. package/dist/apps/management/routes/invitations.d.ts +122 -122
  117. package/dist/apps/management/routes/invite-links.d.ts +38 -38
  118. package/dist/apps/management/routes/members.d.ts +69 -69
  119. package/dist/apps/management/routes/orgs.d.ts +99 -99
  120. package/dist/apps/management/routes/projects.d.ts +25 -25
  121. package/dist/apps/management/routes/scopes.d.ts +1 -1
  122. package/dist/apps/management/routes/usage.d.ts +72 -72
  123. package/dist/apps/management/routes/verified-token-requests.d.ts +77 -77
  124. package/dist/apps/management/routes/webhooks.d.ts +128 -128
  125. package/dist/apps/mcp.d.ts +2 -3
  126. package/dist/apps/mcp.d.ts.map +1 -1
  127. package/dist/apps/mcp.js +16 -14
  128. package/dist/apps/mcp.js.map +1 -1
  129. package/dist/apps/metadata.d.ts +4 -0
  130. package/dist/apps/metadata.d.ts.map +1 -1
  131. package/dist/apps/metadata.js +10 -0
  132. package/dist/apps/metadata.js.map +1 -1
  133. package/dist/apps/mpp/App.d.ts +44 -44
  134. package/dist/cloudflare.d.ts +50 -0
  135. package/dist/cloudflare.d.ts.map +1 -1
  136. package/dist/cloudflare.js +178 -0
  137. package/dist/cloudflare.js.map +1 -1
  138. package/dist/db/Db.d.ts +2 -0
  139. package/dist/db/Db.d.ts.map +1 -1
  140. package/dist/db/Db.js +45 -0
  141. package/dist/db/Db.js.map +1 -1
  142. package/dist/db/Schema.d.ts +12 -0
  143. package/dist/db/Schema.d.ts.map +1 -1
  144. package/dist/db/Schema.js +20 -0
  145. package/dist/db/Schema.js.map +1 -1
  146. package/dist/db/tables/fundingDepositAddresses.d.ts +13 -0
  147. package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -1
  148. package/dist/db/tables/fundingDepositAddresses.js +12 -0
  149. package/dist/db/tables/fundingDepositAddresses.js.map +1 -1
  150. package/dist/db/tables/fundingDepositRequestObservations.d.ts +45 -0
  151. package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +1 -0
  152. package/dist/db/tables/fundingDepositRequestObservations.js +46 -0
  153. package/dist/db/tables/fundingDepositRequestObservations.js.map +1 -0
  154. package/dist/db/tables/fundingDeposits.d.ts +74 -1
  155. package/dist/db/tables/fundingDeposits.d.ts.map +1 -1
  156. package/dist/db/tables/fundingDeposits.js +126 -0
  157. package/dist/db/tables/fundingDeposits.js.map +1 -1
  158. package/dist/internal/Auth.d.ts +15 -11
  159. package/dist/internal/Auth.d.ts.map +1 -1
  160. package/dist/internal/Auth.js +52 -17
  161. package/dist/internal/Auth.js.map +1 -1
  162. package/dist/internal/Cache.js +1 -1
  163. package/dist/internal/Cache.js.map +1 -1
  164. package/dist/internal/EdgeCache.d.ts +2 -2
  165. package/dist/internal/EdgeCache.d.ts.map +1 -1
  166. package/dist/internal/EdgeCache.js +10 -4
  167. package/dist/internal/EdgeCache.js.map +1 -1
  168. package/dist/internal/IpAllowlist.d.ts +15 -0
  169. package/dist/internal/IpAllowlist.d.ts.map +1 -0
  170. package/dist/internal/IpAllowlist.js +27 -0
  171. package/dist/internal/IpAllowlist.js.map +1 -0
  172. package/dist/internal/OpenApi.d.ts +1 -1
  173. package/dist/internal/OpenApi.js +1 -1
  174. package/dist/internal/OpenApi.js.map +1 -1
  175. package/dist/internal/Tidx.d.ts +6 -0
  176. package/dist/internal/Tidx.d.ts.map +1 -1
  177. package/dist/internal/Tidx.js +13 -3
  178. package/dist/internal/Tidx.js.map +1 -1
  179. package/dist/internal/Viem.d.ts +8 -0
  180. package/dist/internal/Viem.d.ts.map +1 -1
  181. package/dist/internal/Viem.js +12 -5
  182. package/dist/internal/Viem.js.map +1 -1
  183. package/dist/internal/funding/Deposit.d.ts +42 -0
  184. package/dist/internal/funding/Deposit.d.ts.map +1 -1
  185. package/dist/internal/funding/Deposit.js +37 -5
  186. package/dist/internal/funding/Deposit.js.map +1 -1
  187. package/dist/internal/funding/Evidence.d.ts +1 -5
  188. package/dist/internal/funding/Evidence.d.ts.map +1 -1
  189. package/dist/internal/funding/Evidence.js +4 -3
  190. package/dist/internal/funding/Evidence.js.map +1 -1
  191. package/dist/internal/funding/Provider.d.ts +102 -0
  192. package/dist/internal/funding/Provider.d.ts.map +1 -1
  193. package/dist/internal/funding/Provider.js +5 -0
  194. package/dist/internal/funding/Provider.js.map +1 -1
  195. package/dist/internal/funding/Reconciliation.d.ts +16 -2
  196. package/dist/internal/funding/Reconciliation.d.ts.map +1 -1
  197. package/dist/internal/funding/Reconciliation.js +348 -54
  198. package/dist/internal/funding/Reconciliation.js.map +1 -1
  199. package/dist/internal/funding/SourceObservation.d.ts +108 -0
  200. package/dist/internal/funding/SourceObservation.d.ts.map +1 -0
  201. package/dist/internal/funding/SourceObservation.js +143 -0
  202. package/dist/internal/funding/SourceObservation.js.map +1 -0
  203. package/dist/internal/funding/Subsidy.d.ts +2 -2
  204. package/dist/internal/funding/Subsidy.d.ts.map +1 -1
  205. package/dist/internal/funding/Subsidy.js +1 -1
  206. package/dist/internal/funding/Subsidy.js.map +1 -1
  207. package/dist/internal/funding/index.d.ts +1 -0
  208. package/dist/internal/funding/index.d.ts.map +1 -1
  209. package/dist/internal/funding/index.js +1 -0
  210. package/dist/internal/funding/index.js.map +1 -1
  211. package/dist/internal/funding/providers/relay.d.ts +43 -1
  212. package/dist/internal/funding/providers/relay.d.ts.map +1 -1
  213. package/dist/internal/funding/providers/relay.js +438 -27
  214. package/dist/internal/funding/providers/relay.js.map +1 -1
  215. package/package.json +3 -3
  216. package/src/ApiKey.test.ts +35 -0
  217. package/src/ApiKey.ts +27 -0
  218. package/src/ApiKeys.test.ts +29 -0
  219. package/src/ApiKeys.ts +11 -3
  220. package/src/App.test.ts +55 -5
  221. package/src/App.ts +79 -5
  222. package/src/Client.test-d.ts +203 -28
  223. package/src/admin/apps/api-keys.test.ts +25 -1
  224. package/src/admin/apps/api-keys.ts +6 -2
  225. package/src/admin/ui.generated.ts +67 -67
  226. package/src/analytics/Analytics.ts +4 -0
  227. package/src/apps/composition.test.ts +130 -3
  228. package/src/apps/data/App.test.ts +0 -12
  229. package/src/apps/data/App.ts +4 -8
  230. package/src/apps/data/routes/balances.test.ts +42 -0
  231. package/src/apps/data/routes/balances.ts +218 -85
  232. package/src/apps/data/routes/earn.test.ts +363 -0
  233. package/src/apps/data/routes/earn.ts +1141 -3
  234. package/src/apps/data/routes/indexer.ts +2 -1
  235. package/src/apps/data/routes/rpc.ts +2 -0
  236. package/src/apps/data/routes/tokens.test.ts +6 -8
  237. package/src/apps/funding/Access.ts +26 -0
  238. package/src/apps/funding/App.test.ts +78 -0
  239. package/src/apps/funding/App.ts +78 -0
  240. package/src/apps/funding/Inventory.ts +30 -0
  241. package/src/apps/funding/ProviderAttempts.ts +26 -0
  242. package/src/apps/funding/index.ts +1 -0
  243. package/src/apps/funding/routes/chains.test.ts +78 -0
  244. package/src/apps/funding/routes/chains.ts +101 -0
  245. package/src/apps/funding/routes/deposit-addresses.test.ts +1649 -0
  246. package/src/apps/funding/routes/deposit-addresses.ts +932 -0
  247. package/src/apps/funding/routes/providers.test.ts +165 -0
  248. package/src/apps/funding/routes/providers.ts +73 -0
  249. package/src/apps/funding/routes/quotes.test.ts +511 -0
  250. package/src/apps/funding/routes/quotes.ts +205 -0
  251. package/src/apps/funding/routes/transfers.test.ts +1236 -0
  252. package/src/apps/funding/routes/transfers.ts +704 -0
  253. package/src/apps/index.ts +1 -0
  254. package/src/apps/management/routes/api-keys.test.ts +98 -0
  255. package/src/apps/management/routes/api-keys.ts +96 -1
  256. package/src/apps/mcp.test.ts +17 -2
  257. package/src/apps/mcp.ts +18 -13
  258. package/src/apps/metadata.ts +12 -0
  259. package/src/apps/mpp/internal/Policy.test.ts +7 -1
  260. package/src/cloudflare.ts +279 -0
  261. package/src/db/Db.ts +71 -0
  262. package/src/db/Schema.ts +24 -0
  263. package/src/db/tables/fundingDepositAddresses.ts +28 -0
  264. package/src/db/tables/fundingDepositRequestObservations.test.ts +106 -0
  265. package/src/db/tables/fundingDepositRequestObservations.ts +99 -0
  266. package/src/db/tables/fundingDeposits.test.ts +239 -0
  267. package/src/db/tables/fundingDeposits.ts +214 -1
  268. package/src/internal/Auth.test.ts +205 -5
  269. package/src/internal/Auth.ts +63 -19
  270. package/src/internal/Cache.test.ts +37 -3
  271. package/src/internal/Cache.ts +1 -1
  272. package/src/internal/EdgeCache.test.ts +7 -7
  273. package/src/internal/EdgeCache.ts +13 -4
  274. package/src/internal/IpAllowlist.test.ts +52 -0
  275. package/src/internal/IpAllowlist.ts +39 -0
  276. package/src/internal/Log.test.ts +7 -1
  277. package/src/internal/OpenApi.ts +1 -1
  278. package/src/internal/Tidx.test.ts +28 -0
  279. package/src/internal/Tidx.ts +19 -3
  280. package/src/internal/Viem.test.ts +28 -0
  281. package/src/internal/Viem.ts +21 -5
  282. package/src/internal/funding/Deposit.ts +74 -5
  283. package/src/internal/funding/Evidence.test.ts +2 -2
  284. package/src/internal/funding/Evidence.ts +4 -9
  285. package/src/internal/funding/Provider.ts +115 -0
  286. package/src/internal/funding/Reconciliation.local.test.ts +7 -0
  287. package/src/internal/funding/Reconciliation.test.ts +1364 -109
  288. package/src/internal/funding/Reconciliation.ts +467 -88
  289. package/src/internal/funding/SourceObservation.test.ts +301 -0
  290. package/src/internal/funding/SourceObservation.ts +267 -0
  291. package/src/internal/funding/Subsidy.ts +2 -2
  292. package/src/internal/funding/index.test.ts +1 -0
  293. package/src/internal/funding/index.ts +1 -0
  294. package/src/internal/funding/providers/relay.test.ts +94 -4
  295. package/src/internal/funding/providers/relay.ts +533 -27
  296. package/dist/apps/data/routes/funding.d.ts.map +0 -1
  297. package/dist/apps/data/routes/funding.js +0 -1557
  298. package/dist/apps/data/routes/funding.js.map +0 -1
  299. package/src/apps/data/routes/funding.test.ts +0 -2994
  300. package/src/apps/data/routes/funding.ts +0 -1821
package/dist/apps/mcp.js CHANGED
@@ -4,12 +4,14 @@ import * as z from 'zod/mini';
4
4
  import * as Auth from '../internal/Auth.js';
5
5
  import * as OpenApi from '../internal/OpenApi.js';
6
6
  import * as Metadata from './metadata.js';
7
- /** Document tag group whose operations surface as MCP tools (the data domain). */
8
- const tagGroup = 'Data API';
7
+ /** Required document tag group whose operations surface as MCP tools. */
8
+ const dataTagGroup = 'Data API';
9
+ /** Optional document tag group added when the funding app is mounted. */
10
+ const fundingTagGroup = 'Funding & Bridge API';
9
11
  /** Tags inside the group hidden from MCP: partner-shaped CoinGecko mirrors and the MCP endpoint itself. */
10
12
  const excludedTags = ['CoinGecko', 'MCP'];
11
13
  /** Usage guidance surfaced to MCP clients on initialize. */
12
- const instructions = "Tempo MCP provides access to the Tempo API's data domain and documentation. Authenticated tools accept a Tempo API key sent as an `Authorization: Bearer` header on the HTTP request. List endpoints paginate via `cursor`/`nextCursor`. `docs_*` tools search the Tempo documentation.";
14
+ const instructions = "Tempo MCP provides access to the Tempo API's data and inbound funding domains, plus documentation. Authenticated tools accept a Tempo API key sent as an `Authorization: Bearer` header on the HTTP request. List endpoints paginate via `cursor`/`nextCursor`. `docs_*` tools search the Tempo documentation.";
13
15
  /** Zod schemas owned by the MCP endpoint's OpenAPI description. */
14
16
  export var schema;
15
17
  (function (schema) {
@@ -45,9 +47,8 @@ export var schema;
45
47
  })(schema || (schema = {}));
46
48
  /**
47
49
  * The MCP route group: a stateless streamable-HTTP MCP server at `/mcp` whose
48
- * tools mirror the API's data domain (scoped via the OpenAPI document's
49
- * `Data API` tag group), plus the remote Tempo docs tools. Mount alongside
50
- * the other route groups:
50
+ * tools mirror the API's data domain and its optional inbound funding domain,
51
+ * plus the remote Tempo docs tools. Mount alongside the other route groups:
51
52
  *
52
53
  * ```ts
53
54
  * const app = App.create(options)
@@ -172,20 +173,21 @@ const openapi = {
172
173
  description: 'A hosted Model Context Protocol server: the data domain and Tempo docs exposed as tools.',
173
174
  },
174
175
  ],
175
- 'x-tagGroups': [{ name: tagGroup, tags: ['MCP'] }],
176
+ 'x-tagGroups': [{ name: dataTagGroup, tags: ['MCP'] }],
176
177
  };
177
178
  /** HTTP methods that carry operations in an OpenAPI path item. */
178
179
  const methods = ['delete', 'get', 'head', 'options', 'patch', 'post', 'put', 'trace']; // prettier-ignore
179
180
  /**
180
- * Narrows the document to the data domain: operations tagged inside the
181
- * `Data API` tag group, minus excluded tags. Management, relay, and session
182
- * operations never surface as tools.
181
+ * Narrows the document to the data and optional inbound funding domains.
182
+ * Management, relay, and session operations never surface as tools.
183
183
  */
184
184
  function scope(document) {
185
- const group = document['x-tagGroups']?.find((entry) => entry.name === tagGroup);
186
- if (!group)
187
- throw new Error(`openapi.json is missing the "${tagGroup}" tag group`);
188
- const tags = new Set(group.tags.filter((tag) => !excludedTags.includes(tag)));
185
+ const groups = document['x-tagGroups'] ?? [];
186
+ const dataGroup = groups.find((entry) => entry.name === dataTagGroup);
187
+ if (!dataGroup)
188
+ throw new Error(`openapi.json is missing the "${dataTagGroup}" tag group`);
189
+ const fundingGroup = groups.find((entry) => entry.name === fundingTagGroup);
190
+ const tags = new Set([...dataGroup.tags, ...(fundingGroup?.tags ?? [])].filter((tag) => !excludedTags.includes(tag)));
189
191
  const paths = {};
190
192
  for (const [path, item] of Object.entries(document.paths)) {
191
193
  // Keep in-domain operations; non-method keys (parameters, summary) ride along.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/apps/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/apps/mcp.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,8 @@ import type * as App from '../App.js';
4
4
  export declare function attach<const app extends Hono<any, any>>(app: app, metadata: App.create.Metadata): app;
5
5
  /** Reads the OpenAPI metadata attached to an app instance, if any. */
6
6
  export declare function read(app: Hono<any, any>): App.create.Metadata | undefined;
7
+ /** Marks a group whose routes use the root app's default chain access policy. */
8
+ export declare function defaultChain<const app extends Hono<any, any>>(app: app): app;
9
+ /** Returns whether a group uses the root app's default chain access policy. */
10
+ export declare function usesDefaultChain(app: Hono<any, any>): boolean;
7
11
  //# sourceMappingURL=metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/apps/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAEhC,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAA;AAQrC,gGAAgG;AAChG,wBAAgB,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EACrD,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,GAC5B,GAAG,CAGL;AAED,sEAAsE;AACtE,wBAAgB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAEzE"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/apps/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAEhC,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAA;AASrC,gGAAgG;AAChG,wBAAgB,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EACrD,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,GAC5B,GAAG,CAGL;AAED,sEAAsE;AACtE,wBAAgB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAEzE;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAG5E;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAE7D"}
@@ -3,6 +3,7 @@
3
3
  // `App.create` reads it back on mount. The `WeakMap` keeps the association off
4
4
  // the app's type, so `testClient`/`hc` inference is untouched.
5
5
  const registry = new WeakMap();
6
+ const defaultChainRegistry = new WeakSet();
6
7
  /** Attaches a group's OpenAPI metadata to its app instance for `create` to collect on mount. */
7
8
  export function attach(app, metadata) {
8
9
  registry.set(app, metadata);
@@ -12,4 +13,13 @@ export function attach(app, metadata) {
12
13
  export function read(app) {
13
14
  return registry.get(app);
14
15
  }
16
+ /** Marks a group whose routes use the root app's default chain access policy. */
17
+ export function defaultChain(app) {
18
+ defaultChainRegistry.add(app);
19
+ return app;
20
+ }
21
+ /** Returns whether a group uses the root app's default chain access policy. */
22
+ export function usesDefaultChain(app) {
23
+ return defaultChainRegistry.has(app);
24
+ }
15
25
  //# sourceMappingURL=metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/apps/metadata.ts"],"names":[],"mappings":"AAIA,gFAAgF;AAChF,0EAA0E;AAC1E,+EAA+E;AAC/E,+DAA+D;AAC/D,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAuC,CAAA;AAEnE,gGAAgG;AAChG,MAAM,UAAU,MAAM,CACpB,GAAQ,EACR,QAA6B;IAE7B,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,IAAI,CAAC,GAAmB;IACtC,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/apps/metadata.ts"],"names":[],"mappings":"AAIA,gFAAgF;AAChF,0EAA0E;AAC1E,+EAA+E;AAC/E,+DAA+D;AAC/D,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAuC,CAAA;AACnE,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAAkB,CAAA;AAE1D,gGAAgG;AAChG,MAAM,UAAU,MAAM,CACpB,GAAQ,EACR,QAA6B;IAE7B,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,IAAI,CAAC,GAAmB;IACtC,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,YAAY,CAAmC,GAAQ;IACrE,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,GAAmB;IAClD,OAAO,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AACtC,CAAC"}
@@ -7,15 +7,16 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
7
7
  "/v1/mpp/validate": {
8
8
  $post: {
9
9
  output: {
10
+ success: true;
11
+ } | {
10
12
  error: {
11
- code: "api_key_malformed";
12
- details?: readonly Response.error.Detail[] | undefined;
13
- message: string;
13
+ code: "already_used" | "broadcast_failed" | "expired" | "insufficient_funds" | "invalid_payment" | "policy_denied" | "screen_rejected" | "simulation_failed" | "temporarily_unavailable" | "unknown" | "unsupported";
14
+ message?: string | undefined;
14
15
  };
15
- requestId: string;
16
+ success: false;
16
17
  };
17
18
  outputFormat: "json";
18
- status: 400;
19
+ status: 200;
19
20
  input: {
20
21
  json: {
21
22
  challenge: {
@@ -35,14 +36,14 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
35
36
  } | {
36
37
  output: {
37
38
  error: {
38
- code: "api_key_invalid" | "api_key_missing";
39
+ code: "api_key_malformed";
39
40
  details?: readonly Response.error.Detail[] | undefined;
40
41
  message: string;
41
42
  };
42
43
  requestId: string;
43
44
  };
44
45
  outputFormat: "json";
45
- status: 401;
46
+ status: 400;
46
47
  input: {
47
48
  json: {
48
49
  challenge: {
@@ -62,14 +63,14 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
62
63
  } | {
63
64
  output: {
64
65
  error: {
65
- code: "api_key_forbidden";
66
+ code: "body_invalid";
66
67
  details?: readonly Response.error.Detail[] | undefined;
67
68
  message: string;
68
69
  };
69
70
  requestId: string;
70
71
  };
71
72
  outputFormat: "json";
72
- status: 403;
73
+ status: 400;
73
74
  input: {
74
75
  json: {
75
76
  challenge: {
@@ -89,14 +90,14 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
89
90
  } | {
90
91
  output: {
91
92
  error: {
92
- code: "payment_required" | "rate_limit_exceeded";
93
+ code: "api_key_invalid" | "api_key_missing";
93
94
  details?: readonly Response.error.Detail[] | undefined;
94
95
  message: string;
95
96
  };
96
97
  requestId: string;
97
98
  };
98
99
  outputFormat: "json";
99
- status: 429;
100
+ status: 401;
100
101
  input: {
101
102
  json: {
102
103
  challenge: {
@@ -116,14 +117,14 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
116
117
  } | {
117
118
  output: {
118
119
  error: {
119
- code: "body_invalid";
120
+ code: "api_key_forbidden" | "api_key_ip_forbidden";
120
121
  details?: readonly Response.error.Detail[] | undefined;
121
122
  message: string;
122
123
  };
123
124
  requestId: string;
124
125
  };
125
126
  outputFormat: "json";
126
- status: 400;
127
+ status: 403;
127
128
  input: {
128
129
  json: {
129
130
  challenge: {
@@ -142,16 +143,15 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
142
143
  };
143
144
  } | {
144
145
  output: {
145
- success: true;
146
- } | {
147
146
  error: {
148
- code: "already_used" | "broadcast_failed" | "expired" | "insufficient_funds" | "invalid_payment" | "policy_denied" | "screen_rejected" | "simulation_failed" | "temporarily_unavailable" | "unknown" | "unsupported";
149
- message?: string | undefined;
147
+ code: "payment_required" | "rate_limit_exceeded";
148
+ details?: readonly Response.error.Detail[] | undefined;
149
+ message: string;
150
150
  };
151
- success: false;
151
+ requestId: string;
152
152
  };
153
153
  outputFormat: "json";
154
- status: 200;
154
+ status: 429;
155
155
  input: {
156
156
  json: {
157
157
  challenge: {
@@ -174,15 +174,22 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
174
174
  "/v1/mpp/broadcast": {
175
175
  $post: {
176
176
  output: {
177
+ receipt: {
178
+ externalId?: string | undefined;
179
+ method: string;
180
+ reference: string;
181
+ timestamp: string;
182
+ };
183
+ success: true;
184
+ } | {
177
185
  error: {
178
- code: "api_key_malformed";
179
- details?: readonly Response.error.Detail[] | undefined;
180
- message: string;
186
+ code: "already_used" | "broadcast_failed" | "expired" | "insufficient_funds" | "invalid_payment" | "policy_denied" | "screen_rejected" | "simulation_failed" | "temporarily_unavailable" | "unknown" | "unsupported";
187
+ message?: string | undefined;
181
188
  };
182
- requestId: string;
189
+ success: false;
183
190
  };
184
191
  outputFormat: "json";
185
- status: 400;
192
+ status: 200;
186
193
  input: {
187
194
  json: {
188
195
  challenge: {
@@ -202,14 +209,14 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
202
209
  } | {
203
210
  output: {
204
211
  error: {
205
- code: "api_key_invalid" | "api_key_missing";
212
+ code: "api_key_malformed";
206
213
  details?: readonly Response.error.Detail[] | undefined;
207
214
  message: string;
208
215
  };
209
216
  requestId: string;
210
217
  };
211
218
  outputFormat: "json";
212
- status: 401;
219
+ status: 400;
213
220
  input: {
214
221
  json: {
215
222
  challenge: {
@@ -229,14 +236,14 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
229
236
  } | {
230
237
  output: {
231
238
  error: {
232
- code: "api_key_forbidden";
239
+ code: "body_invalid";
233
240
  details?: readonly Response.error.Detail[] | undefined;
234
241
  message: string;
235
242
  };
236
243
  requestId: string;
237
244
  };
238
245
  outputFormat: "json";
239
- status: 403;
246
+ status: 400;
240
247
  input: {
241
248
  json: {
242
249
  challenge: {
@@ -256,14 +263,14 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
256
263
  } | {
257
264
  output: {
258
265
  error: {
259
- code: "payment_required" | "rate_limit_exceeded";
266
+ code: "api_key_invalid" | "api_key_missing";
260
267
  details?: readonly Response.error.Detail[] | undefined;
261
268
  message: string;
262
269
  };
263
270
  requestId: string;
264
271
  };
265
272
  outputFormat: "json";
266
- status: 429;
273
+ status: 401;
267
274
  input: {
268
275
  json: {
269
276
  challenge: {
@@ -283,14 +290,14 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
283
290
  } | {
284
291
  output: {
285
292
  error: {
286
- code: "body_invalid";
293
+ code: "api_key_forbidden" | "api_key_ip_forbidden";
287
294
  details?: readonly Response.error.Detail[] | undefined;
288
295
  message: string;
289
296
  };
290
297
  requestId: string;
291
298
  };
292
299
  outputFormat: "json";
293
- status: 400;
300
+ status: 403;
294
301
  input: {
295
302
  json: {
296
303
  challenge: {
@@ -309,22 +316,15 @@ export declare function mpp(options: mpp.Options): import("hono/hono-base").Hono
309
316
  };
310
317
  } | {
311
318
  output: {
312
- receipt: {
313
- externalId?: string | undefined;
314
- method: string;
315
- reference: string;
316
- timestamp: string;
317
- };
318
- success: true;
319
- } | {
320
319
  error: {
321
- code: "already_used" | "broadcast_failed" | "expired" | "insufficient_funds" | "invalid_payment" | "policy_denied" | "screen_rejected" | "simulation_failed" | "temporarily_unavailable" | "unknown" | "unsupported";
322
- message?: string | undefined;
320
+ code: "payment_required" | "rate_limit_exceeded";
321
+ details?: readonly Response.error.Detail[] | undefined;
322
+ message: string;
323
323
  };
324
- success: false;
324
+ requestId: string;
325
325
  };
326
326
  outputFormat: "json";
327
- status: 200;
327
+ status: 429;
328
328
  input: {
329
329
  json: {
330
330
  challenge: {
@@ -1,4 +1,6 @@
1
1
  import { DurableObject as CloudflareDurableObject } from 'cloudflare:workers';
2
+ import * as Funding from './internal/funding/index.js';
3
+ import * as Metrics from './Metrics.js';
2
4
  import * as Store from './internal/Store.js';
3
5
  type State = ConstructorParameters<typeof CloudflareDurableObject>[0];
4
6
  type Environment = ConstructorParameters<typeof CloudflareDurableObject>[1];
@@ -37,5 +39,53 @@ export declare class DurableObject extends CloudflareDurableObject {
37
39
  */
38
40
  swap(key: string, expected: null | string, next: string, options?: Store.Store.PutOptions): Promise<boolean>;
39
41
  }
42
+ type FundingSourceConfiguration = {
43
+ chainId: string;
44
+ rpcUrls: readonly string[];
45
+ tokenAddress: string;
46
+ };
47
+ type FundingSourceRoute = Funding.SourceObservation.Route;
48
+ type FundingSourceRegisterOptions = FundingSourceConfiguration & {
49
+ route: FundingSourceRoute;
50
+ };
51
+ type FundingSourceSyncOptions = FundingSourceConfiguration & {
52
+ routes: readonly FundingSourceRoute[];
53
+ };
54
+ /** Cloudflare Durable Object that detects EVM funding deposits before provider indexing. */
55
+ export declare class FundingSourceObserver<environment extends FundingSourceObserver.Environment = FundingSourceObserver.Environment> extends CloudflareDurableObject {
56
+ #private;
57
+ /** Durable Object storage and alarm context. */
58
+ protected context: State;
59
+ /** Cloudflare bindings used by the observer. */
60
+ protected environment: environment;
61
+ constructor(ctx: State, env: environment);
62
+ /** Registers one newly created deposit address and starts source observation. */
63
+ register(options: FundingSourceRegisterOptions): Promise<void>;
64
+ /** Replaces the active routes from the database and repairs alarm scheduling. */
65
+ sync(options: FundingSourceSyncOptions): Promise<void>;
66
+ /** Scans confirmed source blocks and persists newly observed deposits. */
67
+ alarm(): Promise<void>;
68
+ /** Reports one source-observer failure. */
69
+ protected capture(cause: unknown): void;
70
+ /** Creates the operational metric sink used by one alarm invocation. */
71
+ protected createMetrics(): Metrics.Metrics;
72
+ }
73
+ export declare namespace FundingSourceObserver {
74
+ /** Cloudflare bindings and deployment metadata used by the observer. */
75
+ type Environment = {
76
+ /** Deployment environment included in operational metrics. */
77
+ ENVIRONMENT?: string | undefined;
78
+ /** Queue that receives deposit-address reconciliation work. */
79
+ FUNDING_RECONCILIATION_QUEUE: {
80
+ /** Enqueues one chain-detected address for reconciliation. */
81
+ send(message: Funding.Provider.Webhook.receive.Dispatchable): Promise<unknown>;
82
+ };
83
+ /** Authoritative Postgres connection exposed through Hyperdrive. */
84
+ HYPERDRIVE: {
85
+ /** PostgreSQL connection string supplied by the Hyperdrive binding. */
86
+ connectionString: string;
87
+ };
88
+ };
89
+ }
40
90
  export {};
41
91
  //# sourceMappingURL=cloudflare.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,IAAI,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAE7E,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAE5C,KAAK,KAAK,GAAG,qBAAqB,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAA;AACrE,KAAK,WAAW,GAAG,qBAAqB,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAA;AAE3E,+EAA+E;AAC/E,qBAAa,aAAc,SAAQ,uBAAuB;;IAGxD,YAAY,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAMvC;IAED,qBAAqB;IACf,MAAM,CAAC,GAAG,EAAE,MAAM,iBAEvB;IAED,4DAA4D;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,oBAElD;IAED,uEAAuE;IACjE,GAAG,CAAC,GAAG,EAAE,MAAM,0BAEpB;IAED;;;;;;;OAOG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,mBAE5D;IAED,kBAAkB;IACZ,IAAI,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;;;OAEtD;IAED,6DAA6D;IACvD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,iBAErE;IAED;;;;;OAKG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,oBAE9F;CACF"}
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,9 @@
3
3
  // web types like `Response.json`.
4
4
  // @ts-ignore
5
5
  import { DurableObject as CloudflareDurableObject } from 'cloudflare:workers';
6
+ import * as Db from './db/Db.js';
7
+ import * as Funding from './internal/funding/index.js';
8
+ import * as Metrics from './Metrics.js';
6
9
  import * as Store from './internal/Store.js';
7
10
  /** Durable Object class that exposes a Tempo API store over Cloudflare RPC. */
8
11
  export class DurableObject extends CloudflareDurableObject {
@@ -55,4 +58,179 @@ export class DurableObject extends CloudflareDurableObject {
55
58
  return this.#store.swap(key, expected, next, options);
56
59
  }
57
60
  }
61
+ const fundingSourceAlarmIntervalMs = 500;
62
+ const fundingSourceRetryIntervalMs = 2_000;
63
+ /** Cloudflare Durable Object that detects EVM funding deposits before provider indexing. */
64
+ export class FundingSourceObserver extends CloudflareDurableObject {
65
+ /** Durable Object storage and alarm context. */
66
+ context;
67
+ /** Cloudflare bindings used by the observer. */
68
+ environment;
69
+ constructor(ctx, env) {
70
+ super(ctx, env);
71
+ this.context = ctx;
72
+ this.environment = env;
73
+ void ctx.blockConcurrencyWhile(async () => {
74
+ ctx.storage.sql.exec('CREATE TABLE IF NOT EXISTS configuration (id INTEGER PRIMARY KEY CHECK (id = 1), value TEXT NOT NULL)');
75
+ ctx.storage.sql.exec('CREATE TABLE IF NOT EXISTS backfills (id TEXT PRIMARY KEY)');
76
+ ctx.storage.sql.exec('CREATE TABLE IF NOT EXISTS routes (id TEXT PRIMARY KEY, address TEXT NOT NULL UNIQUE)');
77
+ ctx.storage.sql.exec('CREATE TABLE IF NOT EXISTS state (key TEXT PRIMARY KEY, value TEXT NOT NULL)');
78
+ });
79
+ }
80
+ /** Registers one newly created deposit address and starts source observation. */
81
+ async register(options) {
82
+ const configuration = serializeFundingSourceConfiguration(options);
83
+ const route = this.context.storage.sql
84
+ .exec('SELECT id, address FROM routes WHERE id = ?', options.route.id)
85
+ .toArray()[0];
86
+ this.context.storage.transactionSync(() => {
87
+ this.context.storage.sql.exec('INSERT OR REPLACE INTO configuration (id, value) VALUES (1, ?)', configuration);
88
+ this.context.storage.sql.exec('INSERT OR REPLACE INTO routes (id, address) VALUES (?, ?)', options.route.id, options.route.address.toLowerCase());
89
+ if (!route || route.address.toLowerCase() !== options.route.address.toLowerCase())
90
+ this.context.storage.sql.exec('INSERT OR IGNORE INTO backfills (id) VALUES (?)', options.route.id);
91
+ });
92
+ await this.#ensureAlarm();
93
+ }
94
+ /** Replaces the active routes from the database and repairs alarm scheduling. */
95
+ async sync(options) {
96
+ const configuration = serializeFundingSourceConfiguration(options);
97
+ const existing = new Map(this.context.storage.sql
98
+ .exec('SELECT id, address FROM routes ORDER BY id')
99
+ .toArray()
100
+ .map((route) => [route.id, route.address.toLowerCase()]));
101
+ const changed = options.routes.filter((route) => existing.get(route.id) !== route.address.toLowerCase());
102
+ this.context.storage.transactionSync(() => {
103
+ this.context.storage.sql.exec('INSERT OR REPLACE INTO configuration (id, value) VALUES (1, ?)', configuration);
104
+ this.context.storage.sql.exec('DELETE FROM routes');
105
+ for (const route of options.routes)
106
+ this.context.storage.sql.exec('INSERT INTO routes (id, address) VALUES (?, ?)', route.id, route.address.toLowerCase());
107
+ this.context.storage.sql.exec('DELETE FROM backfills WHERE id NOT IN (SELECT id FROM routes)');
108
+ for (const route of changed)
109
+ this.context.storage.sql.exec('INSERT OR IGNORE INTO backfills (id) VALUES (?)', route.id);
110
+ });
111
+ if (options.routes.length === 0) {
112
+ await this.context.storage.deleteAlarm();
113
+ return;
114
+ }
115
+ await this.#ensureAlarm();
116
+ }
117
+ /** Scans confirmed source blocks and persists newly observed deposits. */
118
+ async alarm() {
119
+ const metrics = this.createMetrics();
120
+ const configuration = this.#readConfiguration();
121
+ const routes = this.context.storage.sql
122
+ .exec('SELECT id, address FROM routes ORDER BY id')
123
+ .toArray();
124
+ if (!configuration || routes.length === 0)
125
+ return;
126
+ try {
127
+ const cursor = this.context.storage.sql
128
+ .exec("SELECT value FROM state WHERE key = 'cursor'")
129
+ .toArray()[0];
130
+ const result = await Funding.SourceObservation.scan({
131
+ chainId: configuration.chainId,
132
+ ...(cursor ? { cursor: BigInt(cursor.value) } : {}),
133
+ routes,
134
+ rpcUrls: configuration.rpcUrls,
135
+ tokenAddress: configuration.tokenAddress,
136
+ });
137
+ const backfills = this.context.storage.sql
138
+ .exec('SELECT routes.id, routes.address FROM routes INNER JOIN backfills ON backfills.id = routes.id ORDER BY routes.id')
139
+ .toArray();
140
+ // Backfill new routes independently so the main cursor retains any older shard backlog.
141
+ const backfill = await (async () => {
142
+ if (!cursor || backfills.length === 0)
143
+ return undefined;
144
+ return Funding.SourceObservation.scan({
145
+ chainId: configuration.chainId,
146
+ routes: backfills,
147
+ rpcUrls: configuration.rpcUrls,
148
+ tokenAddress: configuration.tokenAddress,
149
+ });
150
+ })();
151
+ const database = Db.get(() => Db.postgres({ connectionString: this.environment.HYPERDRIVE.connectionString }));
152
+ const routesById = new Map(routes.map((route) => [route.id, route]));
153
+ const observations = new Map([...result.observations, ...(backfill?.observations ?? [])].map((observation) => [
154
+ `${observation.addressId}:${observation.transactionHash.toLowerCase()}:${observation.transferIndex}`,
155
+ observation,
156
+ ])).values();
157
+ for (const observation of observations) {
158
+ const route = routesById.get(observation.addressId);
159
+ if (!route)
160
+ continue;
161
+ const persisted = await Funding.SourceObservation.observe(database, {
162
+ ...observation,
163
+ recipient: route.address,
164
+ });
165
+ if (persisted.type === 'ignored' ||
166
+ persisted.record.providerRequestId !== null ||
167
+ Funding.Deposit.isTerminal(persisted.record.status))
168
+ continue;
169
+ await this.environment.FUNDING_RECONCILIATION_QUEUE.send({
170
+ addressId: observation.addressId,
171
+ trigger: 'chain',
172
+ type: 'funding:deposit-address:reconcile',
173
+ });
174
+ metrics.count('funding_source_observer_deposit_count', 1, {
175
+ chain: configuration.chainId,
176
+ outcome: persisted.type,
177
+ });
178
+ }
179
+ this.context.storage.transactionSync(() => {
180
+ this.context.storage.sql.exec("INSERT OR REPLACE INTO state (key, value) VALUES ('cursor', ?)", result.cursor.toString());
181
+ for (const route of backfills)
182
+ this.context.storage.sql.exec('DELETE FROM backfills WHERE id = ?', route.id);
183
+ });
184
+ metrics.count('funding_source_observer_scan_count', 1, {
185
+ chain: configuration.chainId,
186
+ outcome: 'completed',
187
+ });
188
+ metrics.gauge('funding_source_observer_block_lag', Math.max(0, Number(result.head - result.cursor)), { chain: configuration.chainId });
189
+ await this.context.storage.setAlarm(result.cursor < result.head ? Date.now() : Date.now() + fundingSourceAlarmIntervalMs);
190
+ }
191
+ catch (cause) {
192
+ metrics.count('funding_source_observer_scan_count', 1, {
193
+ chain: configuration.chainId,
194
+ outcome: 'failed',
195
+ });
196
+ this.capture(cause);
197
+ await this.context.storage.setAlarm(Date.now() + fundingSourceRetryIntervalMs);
198
+ }
199
+ finally {
200
+ metrics.flush();
201
+ }
202
+ }
203
+ /** Reports one source-observer failure. */
204
+ capture(cause) {
205
+ console.error(cause);
206
+ }
207
+ /** Creates the operational metric sink used by one alarm invocation. */
208
+ createMetrics() {
209
+ return Metrics.cloudflare({
210
+ enabled: Boolean(this.environment.ENVIRONMENT),
211
+ environment: this.environment.ENVIRONMENT ?? 'development',
212
+ service: 'tapimo',
213
+ });
214
+ }
215
+ #configuration() {
216
+ return this.context.storage.sql
217
+ .exec('SELECT value FROM configuration WHERE id = 1')
218
+ .toArray()[0]?.value;
219
+ }
220
+ async #ensureAlarm() {
221
+ if ((await this.context.storage.getAlarm()) === null)
222
+ await this.context.storage.setAlarm(Date.now());
223
+ }
224
+ #readConfiguration() {
225
+ const value = this.#configuration();
226
+ return value ? JSON.parse(value) : undefined;
227
+ }
228
+ }
229
+ function serializeFundingSourceConfiguration(options) {
230
+ return JSON.stringify({
231
+ chainId: options.chainId,
232
+ rpcUrls: options.rpcUrls,
233
+ tokenAddress: options.tokenAddress.toLowerCase(),
234
+ });
235
+ }
58
236
  //# sourceMappingURL=cloudflare.js.map