tapimo 0.5.0 → 0.5.2

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 (197) hide show
  1. package/dist/App.d.ts +4854 -4829
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +20 -2
  4. package/dist/App.js.map +1 -1
  5. package/dist/Assets.js +3 -3
  6. package/dist/Assets.js.map +1 -1
  7. package/dist/Scope.d.ts.map +1 -1
  8. package/dist/Scope.js +1 -2
  9. package/dist/Scope.js.map +1 -1
  10. package/dist/Webhooks.d.ts +1 -1
  11. package/dist/Webhooks.d.ts.map +1 -1
  12. package/dist/Webhooks.js +5 -10
  13. package/dist/Webhooks.js.map +1 -1
  14. package/dist/admin/App.d.ts +6 -34
  15. package/dist/admin/App.d.ts.map +1 -1
  16. package/dist/admin/apps/api-keys.d.ts +3 -3
  17. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  18. package/dist/admin/apps/api-keys.js +4 -1
  19. package/dist/admin/apps/api-keys.js.map +1 -1
  20. package/dist/admin/apps/scopes.d.ts +6 -34
  21. package/dist/admin/apps/scopes.d.ts.map +1 -1
  22. package/dist/admin/apps/scopes.js +2 -2
  23. package/dist/admin/apps/scopes.js.map +1 -1
  24. package/dist/admin/apps/verified-tokens.d.ts +2 -2
  25. package/dist/admin/ui.generated.d.ts +1 -1
  26. package/dist/admin/ui.generated.js +33 -33
  27. package/dist/admin/ui.generated.js.map +1 -1
  28. package/dist/apps/data/App.d.ts +1398 -1405
  29. package/dist/apps/data/App.d.ts.map +1 -1
  30. package/dist/apps/data/App.js +25 -38
  31. package/dist/apps/data/App.js.map +1 -1
  32. package/dist/apps/data/FundingQuoteProviders.d.ts +108 -3
  33. package/dist/apps/data/FundingQuoteProviders.d.ts.map +1 -1
  34. package/dist/apps/data/FundingQuoteProviders.js +409 -2
  35. package/dist/apps/data/FundingQuoteProviders.js.map +1 -1
  36. package/dist/apps/data/routes/activities.d.ts +245 -245
  37. package/dist/apps/data/routes/blocks.d.ts +123 -123
  38. package/dist/apps/data/routes/funding.d.ts +236 -146
  39. package/dist/apps/data/routes/funding.d.ts.map +1 -1
  40. package/dist/apps/data/routes/funding.js +23 -12
  41. package/dist/apps/data/routes/funding.js.map +1 -1
  42. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  43. package/dist/apps/data/routes/indexer.js +9 -2
  44. package/dist/apps/data/routes/indexer.js.map +1 -1
  45. package/dist/apps/data/routes/rpc.d.ts +31 -31
  46. package/dist/apps/data/routes/tokenlist.d.ts +36 -36
  47. package/dist/apps/data/routes/transactions.d.ts +281 -281
  48. package/dist/apps/data/routes/transfers.d.ts +66 -73
  49. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  50. package/dist/apps/data/routes/transfers.js +21 -27
  51. package/dist/apps/data/routes/transfers.js.map +1 -1
  52. package/dist/apps/data/routes/verified-tokens.d.ts +86 -86
  53. package/dist/apps/data/routes/webhooks.d.ts +35 -35
  54. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  55. package/dist/apps/data/routes/webhooks.js +176 -42
  56. package/dist/apps/data/routes/webhooks.js.map +1 -1
  57. package/dist/apps/management/App.d.ts +520 -504
  58. package/dist/apps/management/App.d.ts.map +1 -1
  59. package/dist/apps/management/Billing.d.ts.map +1 -1
  60. package/dist/apps/management/Billing.js +5 -4
  61. package/dist/apps/management/Billing.js.map +1 -1
  62. package/dist/apps/management/routes/api-keys.d.ts +120 -120
  63. package/dist/apps/management/routes/billing.d.ts +211 -211
  64. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  65. package/dist/apps/management/routes/billing.js +1 -1
  66. package/dist/apps/management/routes/billing.js.map +1 -1
  67. package/dist/apps/management/routes/invitations.d.ts +72 -72
  68. package/dist/apps/management/routes/invite-links.d.ts +159 -159
  69. package/dist/apps/management/routes/me.d.ts +17 -17
  70. package/dist/apps/management/routes/members.d.ts +80 -80
  71. package/dist/apps/management/routes/orgs.d.ts +59 -43
  72. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  73. package/dist/apps/management/routes/orgs.js +18 -1
  74. package/dist/apps/management/routes/orgs.js.map +1 -1
  75. package/dist/apps/management/routes/projects.d.ts +109 -109
  76. package/dist/apps/management/routes/scopes.d.ts +11 -11
  77. package/dist/apps/management/routes/usage.d.ts +79 -79
  78. package/dist/apps/mcp.js +2 -2
  79. package/dist/apps/mcp.js.map +1 -1
  80. package/dist/apps/relay/App.d.ts +2 -2
  81. package/dist/apps/relay/App.js +2 -2
  82. package/dist/apps/relay/Sponsorships.d.ts +3 -0
  83. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  84. package/dist/apps/relay/Sponsorships.js +15 -1
  85. package/dist/apps/relay/Sponsorships.js.map +1 -1
  86. package/dist/db/Db.d.ts.map +1 -1
  87. package/dist/db/Db.js +4 -0
  88. package/dist/db/Db.js.map +1 -1
  89. package/dist/db/Schema.js +1 -1
  90. package/dist/db/Schema.js.map +1 -1
  91. package/dist/db/tables/organizations.d.ts +6 -0
  92. package/dist/db/tables/organizations.d.ts.map +1 -1
  93. package/dist/db/tables/organizations.js +26 -0
  94. package/dist/db/tables/organizations.js.map +1 -1
  95. package/dist/db/tables/requestUsage.d.ts +2 -11
  96. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  97. package/dist/db/tables/requestUsage.js +1 -20
  98. package/dist/db/tables/requestUsage.js.map +1 -1
  99. package/dist/db/tables/sponsoredTransactions.d.ts +2 -1
  100. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  101. package/dist/db/tables/sponsoredTransactions.js +52 -10
  102. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  103. package/dist/internal/Auth.d.ts +4 -0
  104. package/dist/internal/Auth.d.ts.map +1 -1
  105. package/dist/internal/Auth.js +15 -8
  106. package/dist/internal/Auth.js.map +1 -1
  107. package/dist/internal/Cache.d.ts.map +1 -1
  108. package/dist/internal/Cache.js +9 -1
  109. package/dist/internal/Cache.js.map +1 -1
  110. package/dist/internal/EdgeCache.d.ts.map +1 -1
  111. package/dist/internal/EdgeCache.js +12 -3
  112. package/dist/internal/EdgeCache.js.map +1 -1
  113. package/dist/internal/FundingQuotes.d.ts +176 -56
  114. package/dist/internal/FundingQuotes.d.ts.map +1 -1
  115. package/dist/internal/FundingQuotes.js +100 -5
  116. package/dist/internal/FundingQuotes.js.map +1 -1
  117. package/dist/internal/Log.d.ts +18 -12
  118. package/dist/internal/Log.d.ts.map +1 -1
  119. package/dist/internal/Log.js +2 -0
  120. package/dist/internal/Log.js.map +1 -1
  121. package/dist/internal/RateLimit.d.ts +2 -0
  122. package/dist/internal/RateLimit.d.ts.map +1 -1
  123. package/dist/internal/RateLimit.js +4 -4
  124. package/dist/internal/RateLimit.js.map +1 -1
  125. package/dist/internal/Tidx.d.ts +9 -3
  126. package/dist/internal/Tidx.d.ts.map +1 -1
  127. package/dist/internal/Tidx.js +13 -7
  128. package/dist/internal/Tidx.js.map +1 -1
  129. package/dist/internal/Viem.d.ts +14 -1
  130. package/dist/internal/Viem.d.ts.map +1 -1
  131. package/dist/internal/Viem.js +19 -1
  132. package/dist/internal/Viem.js.map +1 -1
  133. package/package.json +7 -2
  134. package/src/ApiKeys.test.ts +2 -0
  135. package/src/App.test.ts +15 -4
  136. package/src/App.ts +31 -5
  137. package/src/Assets.ts +3 -3
  138. package/src/Client.test-d.ts +30 -3
  139. package/src/Scope.ts +4 -2
  140. package/src/Webhooks.ts +5 -10
  141. package/src/admin/apps/api-keys.test.ts +27 -0
  142. package/src/admin/apps/api-keys.ts +8 -1
  143. package/src/admin/apps/scopes.test.ts +7 -2
  144. package/src/admin/apps/scopes.ts +2 -2
  145. package/src/admin/ui/src/components/Dialog.tsx +8 -2
  146. package/src/admin/ui/src/lib/scopes.test.ts +19 -0
  147. package/src/admin/ui/src/lib/scopes.ts +12 -0
  148. package/src/admin/ui/src/routes/api-keys.tsx +128 -27
  149. package/src/admin/ui.generated.ts +33 -33
  150. package/src/apps/composition.test.ts +77 -0
  151. package/src/apps/data/App.ts +25 -45
  152. package/src/apps/data/FundingQuoteProviders.test.ts +615 -5
  153. package/src/apps/data/FundingQuoteProviders.ts +570 -4
  154. package/src/apps/data/routes/funding.test.ts +181 -7
  155. package/src/apps/data/routes/funding.ts +27 -12
  156. package/src/apps/data/routes/indexer.test.ts +82 -20
  157. package/src/apps/data/routes/indexer.ts +8 -2
  158. package/src/apps/data/routes/tokens.test.ts +54 -0
  159. package/src/apps/data/routes/transfers.test.ts +73 -1
  160. package/src/apps/data/routes/transfers.ts +24 -30
  161. package/src/apps/data/routes/webhooks.test.ts +203 -0
  162. package/src/apps/data/routes/webhooks.ts +191 -54
  163. package/src/apps/management/Billing.test.ts +52 -3
  164. package/src/apps/management/Billing.ts +5 -4
  165. package/src/apps/management/routes/billing.ts +6 -1
  166. package/src/apps/management/routes/orgs.ts +19 -1
  167. package/src/apps/mcp.test.ts +18 -0
  168. package/src/apps/mcp.ts +2 -2
  169. package/src/apps/relay/App.test.ts +6 -5
  170. package/src/apps/relay/App.ts +2 -2
  171. package/src/apps/relay/Sponsorships.test.ts +2 -2
  172. package/src/apps/relay/Sponsorships.ts +24 -1
  173. package/src/db/Db.test.ts +5 -5
  174. package/src/db/Db.ts +4 -0
  175. package/src/db/Schema.ts +1 -1
  176. package/src/db/tables/billingSettings.test.ts +2 -2
  177. package/src/db/tables/organizations.test.ts +32 -2
  178. package/src/db/tables/organizations.ts +28 -0
  179. package/src/db/tables/requestUsage.ts +3 -23
  180. package/src/db/tables/sponsoredTransactions.test.ts +60 -2
  181. package/src/db/tables/sponsoredTransactions.ts +67 -21
  182. package/src/db/tables/stripeCustomers.test.ts +2 -2
  183. package/src/internal/Auth.test.ts +63 -10
  184. package/src/internal/Auth.ts +21 -9
  185. package/src/internal/Cache.test.ts +19 -0
  186. package/src/internal/Cache.ts +13 -1
  187. package/src/internal/EdgeCache.test.ts +40 -0
  188. package/src/internal/EdgeCache.ts +11 -3
  189. package/src/internal/FundingQuotes.test.ts +130 -3
  190. package/src/internal/FundingQuotes.ts +113 -6
  191. package/src/internal/Log.ts +21 -14
  192. package/src/internal/RateLimit.test.ts +12 -0
  193. package/src/internal/RateLimit.ts +4 -4
  194. package/src/internal/Tidx.test.ts +48 -0
  195. package/src/internal/Tidx.ts +21 -7
  196. package/src/internal/Viem.test.ts +46 -0
  197. package/src/internal/Viem.ts +34 -1
@@ -36,7 +36,18 @@ function RouteComponent() {
36
36
  const rateLimit = field('rateLimit')
37
37
  const perMinute = rateLimit ? Number(rateLimit) : undefined
38
38
  const environment = field('environment') === 'sandbox' ? 'sandbox' : 'production'
39
- const scopes = form.getAll('scopes').filter((v): v is string => typeof v === 'string')
39
+ const zoneChainId = field('zoneChainId')
40
+ const pendingZoneScope = zoneChainId ? Scopes.fromZoneChainId(zoneChainId) : undefined
41
+ if (zoneChainId && !pendingZoneScope) {
42
+ alert('Enter a positive integer Zone chain ID.')
43
+ return
44
+ }
45
+ const scopes = [
46
+ ...new Set([
47
+ ...form.getAll('scopes').filter((v): v is string => typeof v === 'string'),
48
+ ...(pendingZoneScope ? [pendingZoneScope] : []),
49
+ ]),
50
+ ]
40
51
  if (scopes.length === 0) {
41
52
  alert('Select at least one scope.')
42
53
  return
@@ -98,7 +109,7 @@ function RouteComponent() {
98
109
  )}
99
110
  loading={keys.isPending}
100
111
  />
101
- <Dialog.Popup>
112
+ <Dialog.Popup className="flex max-h-[calc(100dvh-2rem)] flex-col overflow-hidden">
102
113
  <ProvisionForm
103
114
  onSubmit={onSubmit}
104
115
  orgId={filters.orgId}
@@ -169,7 +180,7 @@ function ProvisionForm(props: {
169
180
  : 'Create a key that authenticates requests to the API.'}
170
181
  </Dialog.Description>
171
182
  <form
172
- className="mt-6 flex flex-col gap-8"
183
+ className="mt-6 flex min-h-0 flex-1 flex-col gap-8"
173
184
  onSubmit={(event) => {
174
185
  event.preventDefault()
175
186
  props.onSubmit(new FormData(event.currentTarget))
@@ -190,7 +201,10 @@ function ProvisionForm(props: {
190
201
  ) : null}
191
202
  </div>
192
203
  ) : null}
193
- <Fields className="gap-6" variant="default">
204
+ <Fields
205
+ className="min-h-0 flex-1 gap-6 [grid-template-rows:auto_auto_auto_minmax(0,1fr)]"
206
+ variant="default"
207
+ >
194
208
  <Input label="Name" name="name" placeholder="e.g. production-api" />
195
209
  <div className="flex flex-col gap-2">
196
210
  <span className="label-13 text-foreground-secondary">Environment</span>
@@ -212,35 +226,41 @@ function ProvisionForm(props: {
212
226
  suffix="req/min"
213
227
  type="number"
214
228
  />
215
- <div className="flex flex-col gap-2">
229
+ <div className="flex min-h-0 flex-col gap-2 overflow-hidden">
216
230
  <span className="label-13 text-foreground-secondary">Scopes</span>
217
231
  {scopes.isPending ? (
218
232
  <span className="text-label-13 text-foreground-secondary">Loading scopes…</span>
219
233
  ) : scopes.error ? (
220
234
  <span className="text-label-13 text-negative">{scopes.error.message}</span>
221
235
  ) : (
222
- <Rows className="border border-border" variant="surface">
223
- {(scopes.data?.data ?? []).map((entry) => (
224
- <Rows.Row
225
- key={entry.scope}
226
- className="min-h-[56px] py-3"
227
- render={<label className="cursor-pointer" />}
228
- style={{ height: 'auto' }}
229
- >
230
- <Checkbox
231
- defaultChecked={entry.scope === 'data:read'}
232
- name="scopes"
233
- value={entry.scope}
234
- />
235
- <span className="flex min-w-0 flex-col gap-0.5">
236
- <span className="text-label-13 text-foreground">{entry.scope}</span>
237
- <span className="text-label-12 text-foreground-secondary">
238
- {entry.description}
239
- </span>
240
- </span>
241
- </Rows.Row>
242
- ))}
243
- </Rows>
236
+ <div className="min-h-0 flex-1 overflow-y-auto overscroll-contain border border-border">
237
+ <Rows variant="surface">
238
+ {(scopes.data?.data ?? []).map((entry) =>
239
+ entry.scope === Scopes.zoneTemplate ? (
240
+ <ZoneScopeRow description={entry.description} key={entry.scope} />
241
+ ) : (
242
+ <Rows.Row
243
+ key={entry.scope}
244
+ className="min-h-[56px] py-3"
245
+ render={<label className="cursor-pointer" />}
246
+ style={{ height: 'auto' }}
247
+ >
248
+ <Checkbox
249
+ defaultChecked={entry.scope === 'data:read'}
250
+ name="scopes"
251
+ value={entry.scope}
252
+ />
253
+ <span className="flex min-w-0 flex-col gap-0.5">
254
+ <span className="text-label-13 text-foreground">{entry.scope}</span>
255
+ <span className="text-label-12 text-foreground-secondary">
256
+ {entry.description}
257
+ </span>
258
+ </span>
259
+ </Rows.Row>
260
+ ),
261
+ )}
262
+ </Rows>
263
+ </div>
244
264
  )}
245
265
  </div>
246
266
  </Fields>
@@ -255,6 +275,87 @@ function ProvisionForm(props: {
255
275
  )
256
276
  }
257
277
 
278
+ function ZoneScopeRow(props: { description: string }) {
279
+ const [chainId, setChainId] = useState('')
280
+ const [selected, setSelected] = useState<readonly string[]>([])
281
+ const scope = Scopes.fromZoneChainId(chainId)
282
+ const duplicate = scope ? selected.includes(scope) : false
283
+ const error =
284
+ chainId && !scope
285
+ ? 'Enter a positive integer chain ID.'
286
+ : duplicate
287
+ ? 'Zone already added.'
288
+ : false
289
+
290
+ function add() {
291
+ if (!scope || duplicate) return
292
+ setSelected((current) => [...current, scope])
293
+ setChainId('')
294
+ }
295
+
296
+ return (
297
+ <Rows.Row className="min-h-[56px] flex-col items-stretch py-3" style={{ height: 'auto' }}>
298
+ <span className="flex min-w-0 flex-col gap-0.5">
299
+ <span className="text-label-13 text-foreground">{Scopes.zoneTemplate}</span>
300
+ <span className="text-label-12 text-foreground-secondary">{props.description}</span>
301
+ </span>
302
+ <div className="flex items-start gap-2 max-sm:flex-col">
303
+ <div className="min-w-0 flex-1 max-sm:w-full">
304
+ <Input
305
+ aria-label="Zone chain ID"
306
+ autoComplete="off"
307
+ error={error}
308
+ inputMode="numeric"
309
+ name="zoneChainId"
310
+ onChange={(event) => setChainId(event.target.value)}
311
+ onKeyDown={(event) => {
312
+ if (event.key !== 'Enter') return
313
+ event.preventDefault()
314
+ add()
315
+ }}
316
+ pattern="[0-9]*"
317
+ placeholder="421700001"
318
+ prefix="zone:"
319
+ suffix=":read"
320
+ value={chainId}
321
+ />
322
+ </div>
323
+ <Button
324
+ className="max-sm:w-full"
325
+ disabled={!scope || duplicate}
326
+ onClick={add}
327
+ type="button"
328
+ >
329
+ Add zone
330
+ </Button>
331
+ </div>
332
+ {selected.length > 0 ? (
333
+ <ul className="flex flex-col gap-2">
334
+ {selected.map((scope) => (
335
+ <li
336
+ className="flex min-w-0 items-center gap-2 border border-border bg-secondary py-1 pr-1 pl-2"
337
+ key={scope}
338
+ >
339
+ <input name="scopes" type="hidden" value={scope} />
340
+ <code className="min-w-0 flex-1 truncate text-label-12 text-foreground">{scope}</code>
341
+ <Button.Icon
342
+ onClick={() =>
343
+ setSelected((current) => current.filter((candidate) => candidate !== scope))
344
+ }
345
+ size="md"
346
+ title={`Remove ${scope}`}
347
+ variant="plain"
348
+ >
349
+ <X className="size-4" />
350
+ </Button.Icon>
351
+ </li>
352
+ ))}
353
+ </ul>
354
+ ) : null}
355
+ </Rows.Row>
356
+ )
357
+ }
358
+
258
359
  function KeyList(props: {
259
360
  environment: 'production' | 'sandbox'
260
361
  error: Error | null