tapimo 0.8.0 → 0.10.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 (223) hide show
  1. package/dist/App.d.ts +7410 -7613
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +0 -1
  4. package/dist/App.js.map +1 -1
  5. package/dist/Webhooks.d.ts +21 -20
  6. package/dist/Webhooks.d.ts.map +1 -1
  7. package/dist/Webhooks.js +66 -23
  8. package/dist/Webhooks.js.map +1 -1
  9. package/dist/admin/apps/verified-tokens.d.ts +74 -74
  10. package/dist/apps/Zones.d.ts +34 -22
  11. package/dist/apps/Zones.d.ts.map +1 -1
  12. package/dist/apps/Zones.js +9 -8
  13. package/dist/apps/Zones.js.map +1 -1
  14. package/dist/apps/data/App.d.ts +3120 -2782
  15. package/dist/apps/data/App.d.ts.map +1 -1
  16. package/dist/apps/data/FxOracle.d.ts +4 -5
  17. package/dist/apps/data/FxOracle.d.ts.map +1 -1
  18. package/dist/apps/data/FxOracle.js +19 -4
  19. package/dist/apps/data/FxOracle.js.map +1 -1
  20. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  21. package/dist/apps/data/routes/activities.js +32 -27
  22. package/dist/apps/data/routes/activities.js.map +1 -1
  23. package/dist/apps/data/routes/addresses.d.ts +283 -52
  24. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  25. package/dist/apps/data/routes/balances.d.ts +291 -21
  26. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  27. package/dist/apps/data/routes/balances.js +232 -66
  28. package/dist/apps/data/routes/balances.js.map +1 -1
  29. package/dist/apps/data/routes/blocks.d.ts +4 -4
  30. package/dist/apps/data/routes/coingecko.d.ts +54 -54
  31. package/dist/apps/data/routes/earn.d.ts +642 -126
  32. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  33. package/dist/apps/data/routes/earn.js +627 -58
  34. package/dist/apps/data/routes/earn.js.map +1 -1
  35. package/dist/apps/data/routes/exchanges.d.ts +120 -120
  36. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  37. package/dist/apps/data/routes/exchanges.js +114 -118
  38. package/dist/apps/data/routes/exchanges.js.map +1 -1
  39. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  40. package/dist/apps/data/routes/receipts.js +68 -47
  41. package/dist/apps/data/routes/receipts.js.map +1 -1
  42. package/dist/apps/data/routes/tokens.d.ts +2 -0
  43. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  44. package/dist/apps/data/routes/transactions.d.ts +59 -51
  45. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  46. package/dist/apps/data/routes/transactions.js +25 -23
  47. package/dist/apps/data/routes/transactions.js.map +1 -1
  48. package/dist/apps/data/routes/transfers.d.ts +40 -18
  49. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  50. package/dist/apps/data/routes/transfers.js +618 -105
  51. package/dist/apps/data/routes/transfers.js.map +1 -1
  52. package/dist/apps/data/routes/valuation.d.ts +21 -21
  53. package/dist/apps/data/routes/valuation.d.ts.map +1 -1
  54. package/dist/apps/data/routes/valuation.js +2 -2
  55. package/dist/apps/data/routes/valuation.js.map +1 -1
  56. package/dist/apps/data/routes/verified-tokens.d.ts +37 -37
  57. package/dist/apps/data/routes/webhooks.d.ts +102 -505
  58. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  59. package/dist/apps/data/routes/webhooks.js +484 -342
  60. package/dist/apps/data/routes/webhooks.js.map +1 -1
  61. package/dist/apps/data/routes/zones.d.ts +12 -12
  62. package/dist/apps/data/routes/zones.d.ts.map +1 -1
  63. package/dist/apps/data/routes/zones.js +3 -1
  64. package/dist/apps/data/routes/zones.js.map +1 -1
  65. package/dist/apps/funding/App.d.ts +127 -386
  66. package/dist/apps/funding/App.d.ts.map +1 -1
  67. package/dist/apps/funding/App.js +20 -5
  68. package/dist/apps/funding/App.js.map +1 -1
  69. package/dist/apps/funding/routes/deposit-addresses.d.ts +141 -532
  70. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
  71. package/dist/apps/funding/routes/deposit-addresses.js +21 -103
  72. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  73. package/dist/apps/funding/routes/transfers.d.ts +4 -4
  74. package/dist/apps/funding/routes/transfers.js +5 -5
  75. package/dist/apps/funding/routes/transfers.js.map +1 -1
  76. package/dist/apps/management/App.d.ts +429 -727
  77. package/dist/apps/management/App.d.ts.map +1 -1
  78. package/dist/apps/management/routes/api-keys.d.ts +24 -24
  79. package/dist/apps/management/routes/billing.d.ts +72 -72
  80. package/dist/apps/management/routes/faucet.d.ts +6 -6
  81. package/dist/apps/management/routes/invite-links.d.ts +38 -38
  82. package/dist/apps/management/routes/me.d.ts +6 -6
  83. package/dist/apps/management/routes/members.d.ts +30 -30
  84. package/dist/apps/management/routes/projects.d.ts +20 -20
  85. package/dist/apps/management/routes/usage.d.ts +24 -24
  86. package/dist/apps/management/routes/webhooks.d.ts +158 -573
  87. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  88. package/dist/apps/mpp/App.d.ts +12 -0
  89. package/dist/apps/mpp/App.d.ts.map +1 -1
  90. package/dist/apps/mpp/Mpp.d.ts +3 -0
  91. package/dist/apps/mpp/Mpp.d.ts.map +1 -1
  92. package/dist/apps/mpp/Mpp.js +3 -0
  93. package/dist/apps/mpp/Mpp.js.map +1 -1
  94. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  95. package/dist/apps/mpp/internal/Adapter.js +9 -2
  96. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  97. package/dist/db/Db.d.ts +2 -2
  98. package/dist/db/Db.d.ts.map +1 -1
  99. package/dist/db/Db.js +25 -15
  100. package/dist/db/Db.js.map +1 -1
  101. package/dist/db/tables/fundingDeposits.d.ts +18 -1
  102. package/dist/db/tables/fundingDeposits.d.ts.map +1 -1
  103. package/dist/db/tables/fundingDeposits.js +46 -2
  104. package/dist/db/tables/fundingDeposits.js.map +1 -1
  105. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  106. package/dist/db/tables/sponsoredTransactions.js +4 -1
  107. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  108. package/dist/db/tables/webhookSubscriptions.d.ts +56 -3
  109. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  110. package/dist/db/tables/webhookSubscriptions.js +76 -3
  111. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  112. package/dist/internal/Auth.d.ts +4 -0
  113. package/dist/internal/Auth.d.ts.map +1 -1
  114. package/dist/internal/Auth.js +11 -2
  115. package/dist/internal/Auth.js.map +1 -1
  116. package/dist/internal/MetricSink.d.ts +112 -3
  117. package/dist/internal/MetricSink.d.ts.map +1 -1
  118. package/dist/internal/MetricSink.js +116 -3
  119. package/dist/internal/MetricSink.js.map +1 -1
  120. package/dist/internal/Schema.js +1 -1
  121. package/dist/internal/Schema.js.map +1 -1
  122. package/dist/internal/Tidx.d.ts +1 -3
  123. package/dist/internal/Tidx.d.ts.map +1 -1
  124. package/dist/internal/Tidx.js +1 -3
  125. package/dist/internal/Tidx.js.map +1 -1
  126. package/dist/internal/Viem.d.ts.map +1 -1
  127. package/dist/internal/Viem.js +2 -1
  128. package/dist/internal/Viem.js.map +1 -1
  129. package/dist/internal/WebhookDestination.d.ts +2 -0
  130. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  131. package/dist/internal/WebhookDestination.js +11 -0
  132. package/dist/internal/WebhookDestination.js.map +1 -1
  133. package/dist/internal/WebhookTransfer.d.ts +55 -0
  134. package/dist/internal/WebhookTransfer.d.ts.map +1 -0
  135. package/dist/internal/WebhookTransfer.js +296 -0
  136. package/dist/internal/WebhookTransfer.js.map +1 -0
  137. package/dist/internal/Webhooks.d.ts +37 -0
  138. package/dist/internal/Webhooks.d.ts.map +1 -1
  139. package/dist/internal/Webhooks.js +87 -13
  140. package/dist/internal/Webhooks.js.map +1 -1
  141. package/dist/internal/funding/Provider.d.ts +10 -6
  142. package/dist/internal/funding/Provider.d.ts.map +1 -1
  143. package/dist/internal/funding/Provider.js +11 -7
  144. package/dist/internal/funding/Provider.js.map +1 -1
  145. package/dist/internal/funding/Reconciliation.d.ts.map +1 -1
  146. package/dist/internal/funding/Reconciliation.js +229 -16
  147. package/dist/internal/funding/Reconciliation.js.map +1 -1
  148. package/dist/internal/funding/providers/relay.d.ts +3 -0
  149. package/dist/internal/funding/providers/relay.d.ts.map +1 -1
  150. package/dist/internal/funding/providers/relay.js +18 -3
  151. package/dist/internal/funding/providers/relay.js.map +1 -1
  152. package/package.json +3 -3
  153. package/src/App.test.ts +32 -0
  154. package/src/App.ts +4 -1
  155. package/src/Client.test-d.ts +116 -38
  156. package/src/Webhooks.bench.ts +714 -0
  157. package/src/Webhooks.memory.bench.ts +250 -0
  158. package/src/Webhooks.test.ts +77 -6
  159. package/src/Webhooks.ts +83 -29
  160. package/src/apps/Zones.test.ts +5 -4
  161. package/src/apps/Zones.ts +9 -8
  162. package/src/apps/composition.test.ts +39 -10
  163. package/src/apps/data/FxOracle.test.ts +18 -0
  164. package/src/apps/data/FxOracle.ts +28 -5
  165. package/src/apps/data/routes/activities.test.ts +19 -0
  166. package/src/apps/data/routes/activities.ts +34 -30
  167. package/src/apps/data/routes/balances.test.ts +161 -10
  168. package/src/apps/data/routes/balances.ts +339 -147
  169. package/src/apps/data/routes/blocks.test.ts +12 -6
  170. package/src/apps/data/routes/earn.test.ts +286 -9
  171. package/src/apps/data/routes/earn.ts +841 -58
  172. package/src/apps/data/routes/exchanges.test.ts +7 -6
  173. package/src/apps/data/routes/exchanges.ts +124 -117
  174. package/src/apps/data/routes/receipts.test.ts +24 -7
  175. package/src/apps/data/routes/receipts.ts +67 -50
  176. package/src/apps/data/routes/tokens.test.ts +51 -0
  177. package/src/apps/data/routes/transactions.test.ts +42 -0
  178. package/src/apps/data/routes/transactions.ts +44 -39
  179. package/src/apps/data/routes/transfers.test.ts +402 -24
  180. package/src/apps/data/routes/transfers.ts +708 -101
  181. package/src/apps/data/routes/valuation.test.ts +26 -0
  182. package/src/apps/data/routes/valuation.ts +6 -2
  183. package/src/apps/data/routes/webhooks.test.ts +414 -130
  184. package/src/apps/data/routes/webhooks.ts +603 -419
  185. package/src/apps/data/routes/zones.ts +6 -1
  186. package/src/apps/funding/App.ts +20 -5
  187. package/src/apps/funding/routes/deposit-addresses.test.ts +43 -22
  188. package/src/apps/funding/routes/deposit-addresses.ts +34 -117
  189. package/src/apps/funding/routes/quotes.test.ts +1 -1
  190. package/src/apps/funding/routes/transfers.test.ts +6 -25
  191. package/src/apps/funding/routes/transfers.ts +5 -5
  192. package/src/apps/mpp/Mpp.test.ts +13 -1
  193. package/src/apps/mpp/Mpp.ts +8 -0
  194. package/src/apps/mpp/internal/Adapter.ts +10 -2
  195. package/src/db/Db.test.ts +40 -6
  196. package/src/db/Db.ts +42 -19
  197. package/src/db/tables/fundingDeposits.test.ts +101 -0
  198. package/src/db/tables/fundingDeposits.ts +71 -2
  199. package/src/db/tables/sponsoredTransactions.ts +9 -2
  200. package/src/db/tables/webhookSubscriptions.ts +116 -4
  201. package/src/internal/Auth.test.ts +28 -0
  202. package/src/internal/Auth.ts +15 -1
  203. package/src/internal/EarnVaults.test.ts +2 -2
  204. package/src/internal/MetricSink.test.ts +518 -0
  205. package/src/internal/MetricSink.ts +266 -9
  206. package/src/internal/Schema.ts +1 -1
  207. package/src/internal/Tidx.test.ts +4 -4
  208. package/src/internal/Tidx.ts +1 -3
  209. package/src/internal/Viem.test.ts +8 -0
  210. package/src/internal/Viem.ts +2 -1
  211. package/src/internal/WebhookDestination.test.ts +20 -0
  212. package/src/internal/WebhookDestination.ts +10 -0
  213. package/src/internal/WebhookTransfer.ts +426 -0
  214. package/src/internal/Webhooks.test.ts +137 -0
  215. package/src/internal/Webhooks.ts +131 -17
  216. package/src/internal/funding/Provider.test.ts +47 -7
  217. package/src/internal/funding/Provider.ts +16 -11
  218. package/src/internal/funding/Reconciliation.local.test.ts +3 -1
  219. package/src/internal/funding/Reconciliation.test.ts +1532 -54
  220. package/src/internal/funding/Reconciliation.ts +296 -53
  221. package/src/internal/funding/SourceObservation.test.ts +3 -2
  222. package/src/internal/funding/providers/relay.test.ts +1 -4
  223. package/src/internal/funding/providers/relay.ts +23 -3
@@ -0,0 +1,296 @@
1
+ import { encodeEventTopics, parseAbiItem } from 'viem';
2
+ import * as z from 'zod/mini';
3
+ import * as Transfers from '../apps/data/routes/transfers.js';
4
+ import * as Schema from './Schema.js';
5
+ import * as Value from './Value.js';
6
+ /** Subscriptions matched per shared transfer scan. */
7
+ export const scanCohortSize = 32;
8
+ /**
9
+ * Blocks per transfer `eth_getLogs` request. Firehose scans stop after a
10
+ * 100-row page, so small windows bound the raw RPC body retained before that cap.
11
+ */
12
+ const scanChunkBlocks = 8;
13
+ const event = parseAbiItem(Transfers.signature);
14
+ const topic = encodeEventTopics({ abi: [event] })[0];
15
+ /** Returns a stable key for transfer filters with equivalent RPC pushdowns. */
16
+ function scanKey(filters_input) {
17
+ const filters = filters_input;
18
+ return JSON.stringify(normalizeRpcValue({
19
+ args: logArgs(filters),
20
+ token: filters.token,
21
+ }));
22
+ }
23
+ /** Scans transfer subscriptions through shared, memory-bounded RPC cohorts. */
24
+ export async function scan(options) {
25
+ const results = [];
26
+ const candidates = [];
27
+ for (let index = 0; index < options.states.length; index++) {
28
+ const state = options.states[index];
29
+ if (!state.window) {
30
+ results[index] = { status: 'fulfilled', value: { items: [] } };
31
+ continue;
32
+ }
33
+ candidates.push({
34
+ index,
35
+ key: scanKey(state.filters),
36
+ state: { ...state, window: state.window },
37
+ });
38
+ }
39
+ candidates.sort((a, b) => a.key.localeCompare(b.key) ||
40
+ a.state.window.from - b.state.window.from ||
41
+ a.state.window.to - b.state.window.to);
42
+ const cohorts = [];
43
+ for (const candidate of candidates) {
44
+ const previous = cohorts.at(-1);
45
+ const combinedBlocks = previous
46
+ ? Math.max(previous.window.to, candidate.state.window.to) - previous.window.from + 1
47
+ : 0;
48
+ if (!previous ||
49
+ candidate.key !== previous.key ||
50
+ candidate.state.window.from > previous.window.to ||
51
+ combinedBlocks > options.maxBlocks ||
52
+ previous.states.length >= scanCohortSize) {
53
+ cohorts.push({
54
+ key: candidate.key,
55
+ states: [candidate],
56
+ window: { from: candidate.state.window.from, to: candidate.state.window.to },
57
+ });
58
+ continue;
59
+ }
60
+ previous.states.push(candidate);
61
+ previous.window.to = Math.max(previous.window.to, candidate.state.window.to);
62
+ }
63
+ const settled = await mapWithLimit(cohorts, options.concurrency, (cohort) => options.schedule(async () => ({
64
+ cohort,
65
+ pages: await scanCohort({ client: options.client, cohort }),
66
+ })));
67
+ for (const entry of settled) {
68
+ if (entry.status === 'rejected')
69
+ continue;
70
+ for (let index = 0; index < entry.value.cohort.states.length; index++)
71
+ results[entry.value.cohort.states[index].index] = {
72
+ status: 'fulfilled',
73
+ value: entry.value.pages[index],
74
+ };
75
+ }
76
+ for (let index = 0; index < settled.length; index++) {
77
+ const entry = settled[index];
78
+ if (entry.status !== 'rejected')
79
+ continue;
80
+ for (const candidate of cohorts[index].states)
81
+ results[candidate.index] = { reason: entry.reason, status: 'rejected' };
82
+ }
83
+ return results;
84
+ }
85
+ /** Runs ordered async work with bounded concurrency. */
86
+ async function mapWithLimit(items, limit, fn) {
87
+ const results = [];
88
+ let next = 0;
89
+ await Promise.all(Array.from({ length: Math.min(limit, items.length) }, async () => {
90
+ while (next < items.length) {
91
+ const index = next++;
92
+ try {
93
+ results[index] = { status: 'fulfilled', value: await fn(items[index]) };
94
+ }
95
+ catch (reason) {
96
+ results[index] = { reason, status: 'rejected' };
97
+ }
98
+ }
99
+ }));
100
+ return results;
101
+ }
102
+ /** Recursively canonicalizes an RPC filter value for query grouping. */
103
+ function normalizeRpcValue(value) {
104
+ if (typeof value === 'bigint')
105
+ return `bigint:${value}`;
106
+ if (Array.isArray(value))
107
+ return value.map(normalizeRpcValue);
108
+ if (value && typeof value === 'object')
109
+ return Object.fromEntries(Object.entries(value)
110
+ .filter(([, item]) => item !== undefined)
111
+ .sort(([a], [b]) => a.localeCompare(b))
112
+ .map(([name, item]) => [name, normalizeRpcValue(item)]));
113
+ return value;
114
+ }
115
+ /** Returns indexed argument combinations pushed into Transfer log reads. */
116
+ function logArgs(filters) {
117
+ const args = {
118
+ ...(filters.sender ? { from: filters.sender } : {}),
119
+ ...(filters.recipient ? { to: filters.recipient } : {}),
120
+ };
121
+ return filters.address && !filters.sender && !filters.recipient
122
+ ? [{ from: filters.address }, { to: filters.address }]
123
+ : [args];
124
+ }
125
+ /** Encodes one indexed address as its left-padded event topic. */
126
+ function addressTopic(address) {
127
+ return `0x${'0'.repeat(24)}${address.slice(2).toLowerCase()}`;
128
+ }
129
+ /** Builds the exact Transfer topic filter for one indexed-argument combination. */
130
+ function topics(args) {
131
+ const values = [
132
+ topic,
133
+ args.from ? addressTopic(args.from) : null,
134
+ args.to ? addressTopic(args.to) : null,
135
+ ];
136
+ while (values.at(-1) === null)
137
+ values.pop();
138
+ return values;
139
+ }
140
+ /** Renders a block number as a JSON-RPC block tag. */
141
+ function blockTag(value) {
142
+ return `0x${value.toString(16)}`;
143
+ }
144
+ /** Issues an untyped JSON-RPC request through the Viem client. */
145
+ function rpc(client, method, params) {
146
+ return client.request({
147
+ method,
148
+ params: [...params],
149
+ });
150
+ }
151
+ /** Reads raw Transfer logs, splitting the either-side shortcut into two RPC filters. */
152
+ async function getLogs(client, filters, window) {
153
+ const pages = await Promise.all(logArgs(filters).map((args) => rpc(client, 'eth_getLogs', [
154
+ {
155
+ ...(filters.token ? { address: filters.token } : {}),
156
+ fromBlock: blockTag(window.from),
157
+ topics: topics(args),
158
+ toBlock: blockTag(window.to),
159
+ },
160
+ ])));
161
+ const logs = new Map();
162
+ for (const page of pages)
163
+ for (const log of page)
164
+ logs.set(`${log.blockNumber}:${log.logIndex}:${log.transactionHash}`, log);
165
+ return [...logs.values()];
166
+ }
167
+ /** Sorts raw logs into ascending `(blockNumber, logIndex)` order. */
168
+ function byPosition(a, b) {
169
+ const block = (Value.hexToNumber(a.blockNumber) ?? 0) - (Value.hexToNumber(b.blockNumber) ?? 0);
170
+ return block || (Value.hexToNumber(a.logIndex) ?? 0) - (Value.hexToNumber(b.logIndex) ?? 0);
171
+ }
172
+ /** True when an address is in Tempo's deterministic TIP-20 contract range. */
173
+ function isTip20Address(address) {
174
+ const value = address.toLowerCase();
175
+ return value >= Transfers.tip20AddressRange[0] && value < Transfers.tip20AddressRange[1];
176
+ }
177
+ /** Decodes one strict TIP-20 Transfer wire payload. */
178
+ function decode(log, timestamp) {
179
+ if (!isTip20Address(log.address))
180
+ return undefined;
181
+ if (log.topics.length !== 3 ||
182
+ log.topics[0]?.toLowerCase() !== topic.toLowerCase() ||
183
+ !/^0x0{24}[0-9a-fA-F]{40}$/.test(log.topics[1] ?? '') ||
184
+ !/^0x0{24}[0-9a-fA-F]{40}$/.test(log.topics[2] ?? '') ||
185
+ !/^0x[0-9a-fA-F]{64}$/.test(log.data))
186
+ return undefined;
187
+ const address = Schema.TokenAddress.safeParse(log.address);
188
+ const recipient = Schema.Address.safeParse(`0x${log.topics[2].slice(-40)}`);
189
+ const sender = Schema.Address.safeParse(`0x${log.topics[1].slice(-40)}`);
190
+ const transactionHash = Schema.Hash.safeParse(log.transactionHash);
191
+ const amount = Value.fromHex(log.data);
192
+ const blockNumber = Value.hexToNumber(log.blockNumber);
193
+ const logIndex = Value.hexToNumber(log.logIndex);
194
+ if (!address.success ||
195
+ !recipient.success ||
196
+ !sender.success ||
197
+ !transactionHash.success ||
198
+ amount === undefined ||
199
+ blockNumber === undefined ||
200
+ logIndex === undefined)
201
+ return undefined;
202
+ return {
203
+ address: address.data,
204
+ amount,
205
+ blockNumber,
206
+ logIndex,
207
+ recipient: recipient.data,
208
+ sender: sender.data,
209
+ timestamp,
210
+ transactionHash: transactionHash.data,
211
+ };
212
+ }
213
+ /** Re-checks every transfer filter after RPC topic pushdown. */
214
+ function matches(data, filters) {
215
+ if (filters.address && data.sender !== filters.address && data.recipient !== filters.address)
216
+ return false;
217
+ if (filters.recipient && data.recipient !== filters.recipient)
218
+ return false;
219
+ if (filters.sender && data.sender !== filters.sender)
220
+ return false;
221
+ if (filters.token && data.address !== filters.token)
222
+ return false;
223
+ return true;
224
+ }
225
+ /** Adds a matched row until one subscription reaches its fair-page limit. */
226
+ function addMatch(accumulator, item) {
227
+ if (accumulator.full)
228
+ return;
229
+ accumulator.items.push(item);
230
+ accumulator.full = accumulator.items.length >= accumulator.state.limit;
231
+ }
232
+ /** Checks whether a canonical row remains eligible for one subscription. */
233
+ function canMatch(accumulator, blockNumber, logIndex) {
234
+ const { skip, to } = accumulator.state.window;
235
+ return (!accumulator.full &&
236
+ blockNumber <= to &&
237
+ (blockNumber > skip[0] || (blockNumber === skip[0] && logIndex > skip[1])));
238
+ }
239
+ /** Converts match buffers into cursor-aware poller pages. */
240
+ function finish(accumulators) {
241
+ return accumulators.map((accumulator) => {
242
+ if (accumulator.full)
243
+ return { hasMore: true, items: accumulator.items };
244
+ if (accumulator.items.length > 0)
245
+ return { items: accumulator.items };
246
+ return { items: accumulator.items, scannedThrough: accumulator.state.window.to };
247
+ });
248
+ }
249
+ /** Scans one canonical transfer stream and fans rows into matching subscriptions. */
250
+ async function scanCohort(options) {
251
+ const { client, cohort } = options;
252
+ const accumulators = cohort.states.map(({ state }) => ({
253
+ full: false,
254
+ items: [],
255
+ state,
256
+ }));
257
+ const timestamps = new Map();
258
+ const timestamp = (blockNumber) => {
259
+ const existing = timestamps.get(blockNumber);
260
+ if (existing)
261
+ return existing;
262
+ const pending = client
263
+ .getBlock({ blockNumber: BigInt(blockNumber), includeTransactions: false })
264
+ .then((block) => new Date(Number(block.timestamp) * 1_000).toISOString());
265
+ timestamps.set(blockNumber, pending);
266
+ return pending;
267
+ };
268
+ const filters_source = cohort.states[0].state.filters;
269
+ // RPC pushdowns bound selective responses; only the unfiltered firehose needs small range chunks.
270
+ const chunkBlocks = Object.values(filters_source).some(Boolean)
271
+ ? cohort.window.to - cohort.window.from + 1
272
+ : scanChunkBlocks;
273
+ for (let from = cohort.window.from; from <= cohort.window.to; from += chunkBlocks) {
274
+ const to = Math.min(cohort.window.to, from + chunkBlocks - 1);
275
+ const logs = (await getLogs(client, filters_source, { from, to })).sort(byPosition);
276
+ for (const log of logs) {
277
+ const blockNumber = Value.hexToNumber(log.blockNumber);
278
+ const logIndex = Value.hexToNumber(log.logIndex);
279
+ if (blockNumber === undefined || logIndex === undefined)
280
+ continue;
281
+ const data = decode(log, await timestamp(blockNumber));
282
+ if (!data)
283
+ continue;
284
+ for (const accumulator of accumulators) {
285
+ if (!canMatch(accumulator, blockNumber, logIndex))
286
+ continue;
287
+ if (matches(data, accumulator.state.filters))
288
+ addMatch(accumulator, { cursor: [blockNumber, logIndex], data });
289
+ }
290
+ if (accumulators.every((accumulator) => accumulator.full))
291
+ return finish(accumulators);
292
+ }
293
+ }
294
+ return finish(accumulators);
295
+ }
296
+ //# sourceMappingURL=WebhookTransfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhookTransfer.js","sourceRoot":"","sources":["../../src/internal/WebhookTransfer.ts"],"names":[],"mappings":"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"}
@@ -198,6 +198,29 @@ export declare function deleteSubscription(db: Db.Db, owner: Owner, id: string):
198
198
  * secondary key space).
199
199
  */
200
200
  export declare function listActive(db: Db.Db, chainId: number, eventType: EventType): Promise<Subscription[]>;
201
+ /**
202
+ * Lists a stream's live active subscriptions paired with their poller cursors,
203
+ * from one query. The poller's per-tick lookup.
204
+ */
205
+ export declare function listActiveWithCursors(db: Db.Db, chainId: number, eventType: EventType): Promise<{
206
+ cursor: string | null;
207
+ subscription: Subscription;
208
+ }[]>;
209
+ /** Reads every live active subscription on a chain in one poller query. */
210
+ export declare function listActiveForChain(db: Db.Db, options: listActiveForChain.Options): Promise<{
211
+ cursor: string | null;
212
+ subscription: Subscription;
213
+ }[]>;
214
+ export declare namespace listActiveForChain {
215
+ /** Filters for the poller's chain-level subscription read. */
216
+ type Options = Pick<WebhookSubscriptions.listActiveForChain.Options, 'chainId' | 'eventTypes'>;
217
+ }
218
+ /**
219
+ * Reads the freshest cursor block across a chain's active subscriptions, or
220
+ * null when none carry a cursor. Creation checkpoints count at their recorded
221
+ * head, so a brand-new subscription reads as fresh.
222
+ */
223
+ export declare function maxCursorBlock(db: Db.Db, chainId: number): Promise<number | null>;
201
224
  /** Reads a subscription's keyset cursor. Returns null when unset. */
202
225
  export declare function getCursor(db: Db.Db, subscriptionId: string): Promise<string | null>;
203
226
  /** Writes a cursor only when its stored value matches the expected cursor. */
@@ -206,6 +229,12 @@ export declare namespace compareAndSetCursor {
206
229
  /** Options for {@link compareAndSetCursor}. */
207
230
  type Options = WebhookSubscriptions.compareAndSetCursor.Options;
208
231
  }
232
+ /** Writes cursors whose stored values match their expected cursors. */
233
+ export declare function compareAndSetCursors(db: Db.Db, options: compareAndSetCursors.Options): Promise<Set<string>>;
234
+ export declare namespace compareAndSetCursors {
235
+ /** Options for {@link compareAndSetCursors}. */
236
+ type Options = WebhookSubscriptions.compareAndSetCursors.Options;
237
+ }
209
238
  /** Writes a subscription's keyset cursor. */
210
239
  export declare function setCursor(db: Db.Db, subscriptionId: string, cursor: string): Promise<void>;
211
240
  /**
@@ -305,6 +334,8 @@ export declare namespace deliverAndRecord {
305
334
  type Options = {
306
335
  /** Delivery-log row TTL in ms; defaults to {@link deliveryRetentionMs}. */
307
336
  deliveryRetentionMs?: number | undefined;
337
+ /** Queue dequeue time as epoch milliseconds, captured before subscription lookup. */
338
+ dequeuedAt?: number | undefined;
308
339
  /** `fetch` implementation passed through to {@link deliver}. */
309
340
  fetch?: typeof globalThis.fetch | undefined;
310
341
  /** Consecutive failures before auto-disabling (default {@link maxFailures}). */
@@ -313,6 +344,12 @@ export declare namespace deliverAndRecord {
313
344
  metrics?: Metrics.Metrics | undefined;
314
345
  /** Clock used for timestamps; injectable for tests. */
315
346
  now?: (() => Date) | undefined;
347
+ /** Cloudflare Queue delivery attempt, starting at one; absent for inline delivery paths. */
348
+ queueAttempt?: number | undefined;
349
+ /** Queue enqueue time as epoch milliseconds, used to isolate queue wait. */
350
+ queuedAt?: number | undefined;
351
+ /** Authoritative subscription lookup duration, supplied by the queue path. */
352
+ subscriptionReadMs?: number | undefined;
316
353
  /** Delivery timeout in ms passed through to {@link deliver}. */
317
354
  timeoutMs?: number | undefined;
318
355
  /** Where this attempt originated; tags the `webhook:delivery` event (default `queue`). */
@@ -1 +1 @@
1
- {"version":3,"file":"Webhooks.d.ts","sourceRoot":"","sources":["../../src/internal/Webhooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Webhooks.d.ts","sourceRoot":"","sources":["../../src/internal/Webhooks.ts"],"names":[],"mappings":"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"}
@@ -104,8 +104,40 @@ export async function deleteSubscription(db, owner, id) {
104
104
  * secondary key space).
105
105
  */
106
106
  export async function listActive(db, chainId, eventType) {
107
+ const pairs = await listActiveWithCursors(db, chainId, eventType);
108
+ return pairs.map((pair) => pair.subscription);
109
+ }
110
+ /**
111
+ * Lists a stream's live active subscriptions paired with their poller cursors,
112
+ * from one query. The poller's per-tick lookup.
113
+ */
114
+ export async function listActiveWithCursors(db, chainId, eventType) {
107
115
  return WebhookSubscriptions.listActive(db, chainId, eventType, new Date().toISOString());
108
116
  }
117
+ /** Reads every live active subscription on a chain in one poller query. */
118
+ export async function listActiveForChain(db, options) {
119
+ return WebhookSubscriptions.listActiveForChain(db, {
120
+ chainId: options.chainId,
121
+ eventTypes: options.eventTypes,
122
+ now: new Date().toISOString(),
123
+ });
124
+ }
125
+ /**
126
+ * Reads the freshest cursor block across a chain's active subscriptions, or
127
+ * null when none carry a cursor. Creation checkpoints count at their recorded
128
+ * head, so a brand-new subscription reads as fresh.
129
+ */
130
+ export async function maxCursorBlock(db, chainId) {
131
+ const cursors = await WebhookSubscriptions.listActiveCursors(db, chainId, new Date().toISOString());
132
+ let max = null;
133
+ for (const cursor of cursors) {
134
+ const decoded = Cursor.decode(cursor, ['int', 'int']) ?? Cursor.decode(cursor, ['int']);
135
+ const block = decoded?.[0];
136
+ if (typeof block === 'number' && (max === null || block > max))
137
+ max = block;
138
+ }
139
+ return max;
140
+ }
109
141
  /** Reads a subscription's keyset cursor. Returns null when unset. */
110
142
  export async function getCursor(db, subscriptionId) {
111
143
  return WebhookSubscriptions.getCursor(db, subscriptionId);
@@ -114,6 +146,10 @@ export async function getCursor(db, subscriptionId) {
114
146
  export async function compareAndSetCursor(db, options) {
115
147
  return WebhookSubscriptions.compareAndSetCursor(db, options);
116
148
  }
149
+ /** Writes cursors whose stored values match their expected cursors. */
150
+ export async function compareAndSetCursors(db, options) {
151
+ return WebhookSubscriptions.compareAndSetCursors(db, options);
152
+ }
117
153
  /** Writes a subscription's keyset cursor. */
118
154
  export async function setCursor(db, subscriptionId, cursor) {
119
155
  await WebhookSubscriptions.setCursor(db, subscriptionId, cursor);
@@ -209,6 +245,7 @@ export async function recordFailure(db, subscription, options = {}) {
209
245
  * point shared by the Cloudflare Queue consumer and the self-host inline path.
210
246
  */
211
247
  export async function deliverAndRecord(db, subscription, envelope, options = {}) {
248
+ const startedAt = Date.now();
212
249
  // Snapshot the attempt before recordSuccess/recordFailure mutate the counter.
213
250
  const attempt = subscription.failureCount + 1;
214
251
  const result = await WebhookDestination.from(subscription.destination).deliver({
@@ -217,45 +254,82 @@ export async function deliverAndRecord(db, subscription, envelope, options = {})
217
254
  ...(options.fetch === undefined ? {} : { fetch: options.fetch }),
218
255
  ...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
219
256
  });
257
+ const stateWriteStartedAt = Date.now();
220
258
  if (result.ok)
221
259
  await recordSuccess(db, subscription, options);
222
260
  else
223
261
  await recordFailure(db, subscription, options);
224
- // Emit a `webhook:delivery` metric. recordSuccess/recordFailure are immutable
225
- // (they spread into a new record), so `subscription.failureCount` here is still
226
- // the pre-mutation snapshot the sink needs to derive the attempt bucket.
227
- // Best-effort, like delivery logging.
262
+ const stateWriteMs = Date.now() - stateWriteStartedAt;
263
+ // Append a delivery-log row. Best-effort: a logging failure must never change
264
+ // the delivery outcome the caller (Queue consumer / inline path) acts on.
265
+ const deliveryLogStartedAt = Date.now();
266
+ try {
267
+ await recordDelivery(db, buildDelivery({ attempt, envelope, result, subscription }, options), options.deliveryRetentionMs === undefined ? {} : { ttl: options.deliveryRetentionMs });
268
+ }
269
+ catch {
270
+ // delivery logging is best-effort
271
+ }
272
+ const completedAt = Date.now();
273
+ // Emit after all delivery work so the timings cover every stage. The
274
+ // subscription is immutable, preserving the pre-attempt failure count.
228
275
  const metrics = options.metrics ? MetricSink.webhooks(options.metrics) : undefined;
229
276
  if (metrics) {
277
+ const eventAt = eventTimestamp(envelope);
278
+ const envelopeAt = Date.parse(envelope.createdAt);
279
+ const dequeuedAt = options.dequeuedAt ?? startedAt;
230
280
  metrics.record({
231
281
  envelope,
282
+ queueAttempt: options.queueAttempt,
232
283
  result,
233
284
  subscription,
285
+ timings: {
286
+ deliveryLogMs: completedAt - deliveryLogStartedAt,
287
+ envelopeToQueueMs: options.queuedAt === undefined || Number.isNaN(envelopeAt)
288
+ ? undefined
289
+ : Math.max(0, options.queuedAt - envelopeAt),
290
+ endToEndMs: eventAt === undefined ? undefined : Math.max(0, completedAt - eventAt),
291
+ eventToEnvelopeMs: eventAt === undefined || Number.isNaN(envelopeAt)
292
+ ? undefined
293
+ : Math.max(0, envelopeAt - eventAt),
294
+ processingMs: Math.max(0, completedAt - dequeuedAt),
295
+ queueWaitMs: options.queuedAt === undefined ? undefined : Math.max(0, dequeuedAt - options.queuedAt),
296
+ stateWriteMs,
297
+ subscriptionReadMs: options.subscriptionReadMs,
298
+ },
234
299
  trigger: options.trigger ?? 'queue',
235
300
  type: 'webhook:delivery',
236
301
  });
237
302
  metrics.flush();
238
303
  }
239
- // Append a delivery-log row. Best-effort: a logging failure must never change
240
- // the delivery outcome the caller (Queue consumer / inline path) acts on.
241
- try {
242
- await recordDelivery(db, buildDelivery({ attempt, envelope, result, subscription }, options), options.deliveryRetentionMs === undefined ? {} : { ttl: options.deliveryRetentionMs });
243
- }
244
- catch {
245
- // delivery logging is best-effort
246
- }
247
304
  return result;
248
305
  }
306
+ /** Reads an event timestamp from an envelope, falling back to its creation time. */
307
+ function eventTimestamp(envelope) {
308
+ const value = typeof envelope.data === 'object' &&
309
+ envelope.data !== null &&
310
+ 'timestamp' in envelope.data &&
311
+ typeof envelope.data.timestamp === 'string'
312
+ ? envelope.data.timestamp
313
+ : envelope.createdAt;
314
+ const timestamp = Date.parse(value);
315
+ return Number.isNaN(timestamp) ? undefined : timestamp;
316
+ }
249
317
  /**
250
318
  * Re-resolves an enqueued subscription before delivery. Missing or inactive
251
319
  * subscriptions are skipped; delivery uses the current destination and secret.
252
320
  */
253
321
  export async function deliverCurrentAndRecord(db, queued, envelope, options = {}) {
322
+ const dequeuedAt = Date.now();
323
+ const subscriptionReadStartedAt = dequeuedAt;
254
324
  const subscription = await getSubscription(db, queued.owner, queued.id);
255
325
  if (!subscription || subscription.status !== 'active')
256
326
  return { status: 'skipped' };
257
327
  return {
258
- result: await deliverAndRecord(db, subscription, envelope, options),
328
+ result: await deliverAndRecord(db, subscription, envelope, {
329
+ ...options,
330
+ dequeuedAt,
331
+ subscriptionReadMs: Date.now() - subscriptionReadStartedAt,
332
+ }),
259
333
  status: 'delivered',
260
334
  };
261
335
  }