tapimo 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.d.ts +5561 -5026
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +38 -3
- package/dist/App.js.map +1 -1
- package/dist/Scope.d.ts +2 -0
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +17 -0
- package/dist/Scope.js.map +1 -1
- package/dist/admin/App.d.ts +123 -74
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +80 -0
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +54 -0
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +15 -15
- package/dist/admin/apps/earn-vaults.js +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +81 -81
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.d.ts.map +1 -1
- package/dist/admin/ui.generated.js +151 -151
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/apps/Zones.d.ts +16 -16
- package/dist/apps/Zones.js +4 -4
- package/dist/apps/data/App.js +18 -18
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/ZoneSelection.d.ts +8 -8
- package/dist/apps/data/ZoneSelection.d.ts.map +1 -1
- package/dist/apps/data/ZoneSelection.js +1 -1
- package/dist/apps/data/ZoneSelection.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +588 -584
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +1561 -1239
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/balances.d.ts +26 -26
- package/dist/apps/data/routes/balances.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.js +43 -16
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +44 -44
- package/dist/apps/data/routes/blocks.d.ts.map +1 -1
- package/dist/apps/data/routes/blocks.js +21 -11
- package/dist/apps/data/routes/blocks.js.map +1 -1
- package/dist/apps/data/routes/coingecko.d.ts +3 -3
- package/dist/apps/data/routes/earn.d.ts +18 -18
- package/dist/apps/data/routes/earn.js +13 -13
- package/dist/apps/data/routes/exchanges.d.ts +145 -145
- package/dist/apps/data/routes/fee-amm.d.ts +2 -2
- package/dist/apps/data/routes/receipts.d.ts +155 -55
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +28 -10
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +13 -13
- package/dist/apps/data/routes/tokens.d.ts +98 -98
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +51 -20
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +7 -2
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +37 -17
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +1 -1
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +18 -12
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +1 -1
- package/dist/apps/data/routes/valuation.d.ts.map +1 -1
- package/dist/apps/data/routes/valuation.js +12 -7
- package/dist/apps/data/routes/valuation.js.map +1 -1
- package/dist/apps/data/routes/verified-tokens.d.ts +3 -3
- package/dist/apps/data/routes/webhooks.d.ts +11 -11
- package/dist/apps/data/routes/zones.d.ts +14 -14
- package/dist/apps/data/routes/zones.js +1 -1
- package/dist/apps/funding/App.d.ts +11 -0
- package/dist/apps/funding/App.d.ts.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.js +16 -11
- package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
- package/dist/apps/funding/routes/transfers.d.ts +60 -48
- package/dist/apps/funding/routes/transfers.d.ts.map +1 -1
- package/dist/apps/funding/routes/transfers.js +27 -19
- package/dist/apps/funding/routes/transfers.js.map +1 -1
- package/dist/apps/management/App.d.ts +4487 -3963
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +710 -159
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +236 -4
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +6 -6
- package/dist/apps/management/routes/invite-links.d.ts +42 -42
- package/dist/apps/management/routes/members.d.ts +30 -30
- package/dist/apps/management/routes/projects.d.ts +40 -40
- package/dist/apps/management/routes/usage.d.ts +24 -24
- package/dist/apps/management/routes/verified-token-requests.d.ts +1 -1
- package/dist/apps/management/routes/webhooks.d.ts +55 -55
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +12 -1
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +3 -2
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +5 -2
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/fundingCatalog.d.ts +4 -2
- package/dist/db/tables/fundingCatalog.d.ts.map +1 -1
- package/dist/db/tables/fundingCatalog.js +5 -1
- package/dist/db/tables/fundingCatalog.js.map +1 -1
- package/dist/handlers/internal/utils.d.ts.map +1 -1
- package/dist/handlers/internal/utils.js +9 -0
- package/dist/handlers/internal/utils.js.map +1 -1
- package/dist/internal/Auth.d.ts +3 -1
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +6 -3
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/EarnVaults.d.ts +3 -3
- package/dist/internal/EarnVaults.js +3 -3
- package/dist/internal/Fetch.d.ts +23 -0
- package/dist/internal/Fetch.d.ts.map +1 -0
- package/dist/internal/Fetch.js +26 -0
- package/dist/internal/Fetch.js.map +1 -0
- package/dist/internal/Log.d.ts +3 -1
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +16 -3
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +5 -3
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +13 -3
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Response.d.ts +1 -1
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Schema.d.ts +6 -3
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +8 -2
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +16 -3
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +82 -16
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +7 -2
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Timeout.d.ts +36 -0
- package/dist/internal/Timeout.d.ts.map +1 -0
- package/dist/internal/Timeout.js +37 -0
- package/dist/internal/Timeout.js.map +1 -0
- package/dist/internal/Timing.d.ts +9 -0
- package/dist/internal/Timing.d.ts.map +1 -1
- package/dist/internal/Timing.js +7 -0
- package/dist/internal/Timing.js.map +1 -1
- package/dist/internal/WebhookDestination.d.ts.map +1 -1
- package/dist/internal/WebhookDestination.js +3 -0
- package/dist/internal/WebhookDestination.js.map +1 -1
- package/dist/internal/funding/Action.d.ts +9 -0
- package/dist/internal/funding/Action.d.ts.map +1 -1
- package/dist/internal/funding/Action.js +16 -8
- package/dist/internal/funding/Action.js.map +1 -1
- package/dist/internal/funding/Catalog.d.ts +9 -2
- package/dist/internal/funding/Catalog.d.ts.map +1 -1
- package/dist/internal/funding/Catalog.js +19 -8
- package/dist/internal/funding/Catalog.js.map +1 -1
- package/dist/internal/funding/Provider.d.ts +68 -13
- package/dist/internal/funding/Provider.d.ts.map +1 -1
- package/dist/internal/funding/Provider.js +29 -8
- package/dist/internal/funding/Provider.js.map +1 -1
- package/dist/internal/funding/Transfer.d.ts +13 -12
- package/dist/internal/funding/Transfer.d.ts.map +1 -1
- package/dist/internal/funding/Transfer.js +23 -21
- package/dist/internal/funding/Transfer.js.map +1 -1
- package/dist/internal/funding/providers/stargate.d.ts +28 -9
- package/dist/internal/funding/providers/stargate.d.ts.map +1 -1
- package/dist/internal/funding/providers/stargate.js +251 -117
- package/dist/internal/funding/providers/stargate.js.map +1 -1
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +1 -0
- package/dist/internal/index.js.map +1 -1
- package/package.json +2 -2
- package/src/App.test.ts +100 -0
- package/src/App.ts +42 -3
- package/src/Client.test-d.ts +46 -0
- package/src/Scope.test.ts +20 -0
- package/src/Scope.ts +16 -0
- package/src/admin/apps/api-keys.test.ts +75 -0
- package/src/admin/apps/api-keys.ts +64 -0
- package/src/admin/apps/earn-vaults.test.ts +1 -1
- package/src/admin/apps/earn-vaults.ts +1 -1
- package/src/admin/ui/src/lib/api-keys.ts +19 -0
- package/src/admin/ui/src/routes/api-keys.tsx +89 -2
- package/src/admin/ui.generated.ts +189 -151
- package/src/apps/Zones.test.ts +4 -4
- package/src/apps/Zones.ts +4 -4
- package/src/apps/composition.test.ts +1 -1
- package/src/apps/data/App.test.ts +41 -0
- package/src/apps/data/App.ts +18 -18
- package/src/apps/data/ZoneSelection.test.ts +2 -2
- package/src/apps/data/ZoneSelection.ts +8 -8
- package/src/apps/data/routes/activities.test.ts +1526 -12
- package/src/apps/data/routes/activities.ts +1774 -1356
- package/src/apps/data/routes/balances.ts +133 -97
- package/src/apps/data/routes/blocks.test.ts +533 -0
- package/src/apps/data/routes/blocks.ts +35 -16
- package/src/apps/data/routes/earn.test.ts +4 -2
- package/src/apps/data/routes/earn.ts +13 -13
- package/src/apps/data/routes/earn.zone-access.test.ts +6 -6
- package/src/apps/data/routes/receipts.ts +47 -16
- package/src/apps/data/routes/tokens.test.ts +578 -0
- package/src/apps/data/routes/tokens.ts +283 -225
- package/src/apps/data/routes/transactions.ts +68 -29
- package/src/apps/data/routes/transfers.test.ts +421 -0
- package/src/apps/data/routes/transfers.ts +45 -27
- package/src/apps/data/routes/valuation.ts +94 -78
- package/src/apps/data/routes/zones.test.ts +2 -2
- package/src/apps/data/routes/zones.ts +1 -1
- package/src/apps/funding/routes/deposit-addresses.test.ts +25 -3
- package/src/apps/funding/routes/deposit-addresses.ts +17 -12
- package/src/apps/funding/routes/quotes.test.ts +5 -9
- package/src/apps/funding/routes/transfers.test.ts +395 -8
- package/src/apps/funding/routes/transfers.ts +76 -59
- package/src/apps/management/routes/api-keys.test.ts +220 -0
- package/src/apps/management/routes/api-keys.ts +280 -3
- package/src/db/Db.ts +13 -1
- package/src/db/Schema.ts +5 -2
- package/src/db/tables/earnVaults.test.ts +9 -9
- package/src/db/tables/fundingCatalog.test.ts +16 -2
- package/src/db/tables/fundingCatalog.ts +9 -3
- package/src/handlers/internal/utils.test.ts +53 -0
- package/src/handlers/internal/utils.ts +15 -0
- package/src/internal/Auth.ts +12 -4
- package/src/internal/EarnVaults.capabilities.test.ts +2 -2
- package/src/internal/EarnVaults.test.ts +1 -1
- package/src/internal/EarnVaults.ts +3 -3
- package/src/internal/Fetch.test.ts +46 -0
- package/src/internal/Fetch.ts +56 -0
- package/src/internal/Log.test.ts +21 -0
- package/src/internal/Log.ts +20 -5
- package/src/internal/OpenApi.ts +14 -4
- package/src/internal/Response.ts +1 -1
- package/src/internal/Schema.test.ts +2 -0
- package/src/internal/Schema.ts +12 -2
- package/src/internal/Store.test.ts +178 -0
- package/src/internal/Store.ts +104 -18
- package/src/internal/Tidx.test.ts +2 -1
- package/src/internal/Tidx.ts +7 -2
- package/src/internal/Timeout.test.ts +35 -0
- package/src/internal/Timeout.ts +73 -0
- package/src/internal/Timing.ts +16 -0
- package/src/internal/WebhookDestination.ts +3 -0
- package/src/internal/funding/Action.test.ts +41 -1
- package/src/internal/funding/Action.ts +69 -41
- package/src/internal/funding/Catalog.test.ts +34 -0
- package/src/internal/funding/Catalog.ts +28 -11
- package/src/internal/funding/Provider.test.ts +73 -0
- package/src/internal/funding/Provider.ts +82 -28
- package/src/internal/funding/Transfer.ts +133 -110
- package/src/internal/funding/providers/index.test.ts +4 -167
- package/src/internal/funding/providers/relay.test.ts +2 -2
- package/src/internal/funding/providers/stargate.test.ts +163 -0
- package/src/internal/funding/providers/stargate.ts +359 -134
- package/src/internal/index.test.ts +1 -0
- package/src/internal/index.ts +1 -0
|
@@ -70,6 +70,8 @@ export namespace schema {
|
|
|
70
70
|
z.describe('One EIP-2930 access-list entry that predeclares an account and storage slots.'),
|
|
71
71
|
)
|
|
72
72
|
|
|
73
|
+
const rpcAccessListItem = OpenApi.component(AccessListItem, 'RpcTransactionAccessListItem')
|
|
74
|
+
|
|
73
75
|
// TODO(ox/zod): replace with the zod schema for the RPC `Call` in `ox/tempo`'s
|
|
74
76
|
// `TxEnvelopeTempo`/`Transaction` types once ox ships a `zod` entrypoint.
|
|
75
77
|
/** One call within a Tempo account-abstraction transaction (RPC format). */
|
|
@@ -100,6 +102,8 @@ export namespace schema {
|
|
|
100
102
|
})
|
|
101
103
|
.check(z.describe('One operation inside a Tempo account-abstraction transaction.'))
|
|
102
104
|
|
|
105
|
+
const rpcCall = OpenApi.component(Call, 'RpcTransactionCall')
|
|
106
|
+
|
|
103
107
|
// TODO(ox/zod): replace with the zod schema for `ox/tempo`'s
|
|
104
108
|
// `SignatureEnvelope.Rpc` (the secp256k1 / p256 / webAuthn / keychain union)
|
|
105
109
|
// once ox ships a `zod` entrypoint.
|
|
@@ -122,6 +126,11 @@ export namespace schema {
|
|
|
122
126
|
})
|
|
123
127
|
.check(z.describe('The signature envelope exactly as returned by JSON-RPC.'))
|
|
124
128
|
|
|
129
|
+
const rpcSignatureEnvelope = OpenApi.component(
|
|
130
|
+
SignatureEnvelope,
|
|
131
|
+
'RpcTransactionSignatureEnvelope',
|
|
132
|
+
)
|
|
133
|
+
|
|
125
134
|
/** The verbatim JSON-RPC payloads, surfaced under each resource's `rpc` field. */
|
|
126
135
|
export namespace Rpc {
|
|
127
136
|
// TODO(ox/zod): replace with the zod schema for `ox/tempo`'s
|
|
@@ -135,7 +144,7 @@ export namespace schema {
|
|
|
135
144
|
z.describe('Tempo account-abstraction authorizations attached to the transaction.'),
|
|
136
145
|
),
|
|
137
146
|
accessList: z
|
|
138
|
-
.optional(z.array(
|
|
147
|
+
.optional(z.array(rpcAccessListItem))
|
|
139
148
|
.check(
|
|
140
149
|
z.describe(
|
|
141
150
|
'EIP-2930 access list that predeclares accounts and storage slots for the transaction.',
|
|
@@ -165,7 +174,7 @@ export namespace schema {
|
|
|
165
174
|
calls: z
|
|
166
175
|
.optional(
|
|
167
176
|
z.union([
|
|
168
|
-
z.array(
|
|
177
|
+
z.array(rpcCall).check(
|
|
169
178
|
z.meta({
|
|
170
179
|
examples: [[{ data: '0xdeadbeef', input: '0xdeadbeef', to: null, value: '0x0' }]],
|
|
171
180
|
}),
|
|
@@ -193,9 +202,9 @@ export namespace schema {
|
|
|
193
202
|
z.meta({ examples: ['0xbe058e1c4df8a4366a387bf595b284246a93039e'] }),
|
|
194
203
|
),
|
|
195
204
|
feePayerSignature: z
|
|
196
|
-
.nullish(
|
|
205
|
+
.nullish(rpcSignatureEnvelope)
|
|
197
206
|
.check(
|
|
198
|
-
z.describe('
|
|
207
|
+
z.describe('A signature envelope exactly as returned by JSON-RPC.'),
|
|
199
208
|
z.meta({ examples: [{ type: 'secp256k1' }] }),
|
|
200
209
|
),
|
|
201
210
|
feeToken: z
|
|
@@ -255,8 +264,8 @@ export namespace schema {
|
|
|
255
264
|
.optional(Schema.Quantity)
|
|
256
265
|
.check(z.describe('The `s` value from the transaction ECDSA signature.')),
|
|
257
266
|
signature: z
|
|
258
|
-
.optional(
|
|
259
|
-
.check(z.describe('
|
|
267
|
+
.optional(rpcSignatureEnvelope)
|
|
268
|
+
.check(z.describe('A signature envelope exactly as returned by JSON-RPC.')),
|
|
260
269
|
to: z
|
|
261
270
|
.nullish(Schema.Address)
|
|
262
271
|
.check(
|
|
@@ -294,15 +303,17 @@ export namespace schema {
|
|
|
294
303
|
.check(z.describe('The transaction exactly as returned by JSON-RPC.'))
|
|
295
304
|
}
|
|
296
305
|
|
|
306
|
+
const rpcTransaction = OpenApi.component(Rpc.Transaction, 'RpcTransaction')
|
|
307
|
+
|
|
297
308
|
/** Transaction metadata with the raw RPC transaction and optional receipt. */
|
|
298
309
|
export const TransactionMeta = z
|
|
299
310
|
.object({
|
|
300
311
|
receipt: z
|
|
301
|
-
.optional(z.lazy(() => Receipts.schema.
|
|
312
|
+
.optional(z.lazy(() => Receipts.schema.TransactionReceipt))
|
|
302
313
|
.check(
|
|
303
314
|
z.describe('The transaction outcome included only when you request `include=receipt`.'),
|
|
304
315
|
),
|
|
305
|
-
rpc:
|
|
316
|
+
rpc: rpcTransaction.check(z.describe('The original JSON-RPC transaction payload.')),
|
|
306
317
|
})
|
|
307
318
|
.check(
|
|
308
319
|
z.describe(
|
|
@@ -310,13 +321,18 @@ export namespace schema {
|
|
|
310
321
|
),
|
|
311
322
|
)
|
|
312
323
|
|
|
324
|
+
const transactionMeta = OpenApi.component(TransactionMeta, 'TransactionMeta')
|
|
325
|
+
|
|
313
326
|
/** Decoded transaction `type`; the raw `0x…` byte stays under `rpc.type`. */
|
|
314
|
-
export const TransactionType =
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
327
|
+
export const TransactionType = OpenApi.component(
|
|
328
|
+
z
|
|
329
|
+
.enum(['legacy', 'eip2930', 'eip1559', 'eip4844', 'eip7702', 'tempo', 'unknown'])
|
|
330
|
+
.check(
|
|
331
|
+
z.describe('Human-readable transaction type decoded from the raw JSON-RPC `type` byte.'),
|
|
332
|
+
z.meta({ examples: ['eip1559'] }),
|
|
333
|
+
),
|
|
334
|
+
'TransactionType',
|
|
335
|
+
)
|
|
320
336
|
|
|
321
337
|
/** One humanized call within a Tempo account-abstraction transaction. */
|
|
322
338
|
export const HumanCall = z
|
|
@@ -333,6 +349,8 @@ export namespace schema {
|
|
|
333
349
|
})
|
|
334
350
|
.check(z.describe('One decoded call inside a Tempo account-abstraction transaction.'))
|
|
335
351
|
|
|
352
|
+
const transactionCall = OpenApi.component(HumanCall, 'TransactionCall')
|
|
353
|
+
|
|
336
354
|
/**
|
|
337
355
|
* A humanized transaction: decoded `type`, decimal-string amounts, ISO 8601
|
|
338
356
|
* timestamps, and plain-number block fields. The verbatim JSON-RPC transaction
|
|
@@ -352,7 +370,7 @@ export namespace schema {
|
|
|
352
370
|
z.meta({ examples: [23456789] }),
|
|
353
371
|
),
|
|
354
372
|
calls: z
|
|
355
|
-
.optional(z.array(
|
|
373
|
+
.optional(z.array(transactionCall))
|
|
356
374
|
.check(
|
|
357
375
|
z.describe('Decoded calls for Tempo account-abstraction transactions.'),
|
|
358
376
|
z.meta({ examples: [[{ data: '0xdeadbeef', to: null }]] }),
|
|
@@ -405,7 +423,7 @@ export namespace schema {
|
|
|
405
423
|
maxPriorityFeePerGas: z
|
|
406
424
|
.optional(Schema.DecimalString)
|
|
407
425
|
.check(z.describe('Maximum priority fee per gas for EIP-1559-style transactions.')),
|
|
408
|
-
meta:
|
|
426
|
+
meta: transactionMeta.check(
|
|
409
427
|
z.describe('The original JSON-RPC payload plus any resources requested with `include`.'),
|
|
410
428
|
),
|
|
411
429
|
nonce: z
|
|
@@ -467,6 +485,8 @@ export namespace schema {
|
|
|
467
485
|
),
|
|
468
486
|
)
|
|
469
487
|
|
|
488
|
+
const transaction = OpenApi.component(Transaction, 'Transaction')
|
|
489
|
+
|
|
470
490
|
/** Schemas for the getTransaction operation. */
|
|
471
491
|
export namespace getTransaction {
|
|
472
492
|
/** Path parameters for transaction requests. */
|
|
@@ -505,7 +525,7 @@ export namespace schema {
|
|
|
505
525
|
.check(z.describe('Query parameters for looking up a transaction.'))
|
|
506
526
|
|
|
507
527
|
/** A humanized transaction, with the verbatim JSON-RPC payload under `rpc`. */
|
|
508
|
-
export const Response =
|
|
528
|
+
export const Response = transaction
|
|
509
529
|
}
|
|
510
530
|
|
|
511
531
|
/** Schemas for the getTransactions (list) operation. */
|
|
@@ -567,23 +587,31 @@ export namespace schema {
|
|
|
567
587
|
})
|
|
568
588
|
.check(...Schema.pageChecks(), z.describe('Query parameters for listing transactions.'))
|
|
569
589
|
|
|
590
|
+
/** Response metadata requested through `include`, such as capped counts. */
|
|
591
|
+
export const Meta = OpenApi.component(Schema.CountMeta, 'TransactionListMeta')
|
|
592
|
+
|
|
570
593
|
/**
|
|
571
594
|
* Page of transactions. Each item reuses the humanized transaction returned
|
|
572
595
|
* by `GET /transactions/:transactionHash`, so the list and detail endpoints
|
|
573
596
|
* expose one identical shape. Indexed list rows omit fields the indexer does
|
|
574
597
|
* not store (signatures, access list), reflected in their `rpc` payload.
|
|
575
598
|
*/
|
|
576
|
-
export const Response =
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
599
|
+
export const Response = OpenApi.component(
|
|
600
|
+
z
|
|
601
|
+
.object({
|
|
602
|
+
data: z.array(getTransaction.Response).check(z.describe('Transactions on this page.')),
|
|
603
|
+
meta: z
|
|
604
|
+
.optional(Meta)
|
|
605
|
+
.check(
|
|
606
|
+
z.describe('Response-level metadata requested with `include`, such as `totalCount`.'),
|
|
607
|
+
),
|
|
608
|
+
nextCursor: Schema.NextCursor,
|
|
609
|
+
})
|
|
610
|
+
.check(
|
|
611
|
+
z.describe('A page of transactions ordered by block number and transaction position.'),
|
|
612
|
+
),
|
|
613
|
+
'TransactionList',
|
|
614
|
+
)
|
|
587
615
|
}
|
|
588
616
|
}
|
|
589
617
|
/** Creates transaction handlers. */
|
|
@@ -601,7 +629,10 @@ export function transactions() {
|
|
|
601
629
|
'List transactions across Tempo, with filters for addresses, blocks, timestamps, fees, and status.',
|
|
602
630
|
operationId: 'getTransactions',
|
|
603
631
|
responses: OpenApi.responses({
|
|
604
|
-
errors: {
|
|
632
|
+
errors: {
|
|
633
|
+
400: { codes: ['chain_id_invalid', 'chain_id_unsupported', 'query_invalid'] },
|
|
634
|
+
502: 'Could not read transaction or token data from an upstream service.',
|
|
635
|
+
},
|
|
605
636
|
success: {
|
|
606
637
|
description: 'A page of transactions.',
|
|
607
638
|
schema: schema.getTransactions.Response,
|
|
@@ -707,6 +738,14 @@ export function transactions() {
|
|
|
707
738
|
operationId: 'getTransaction',
|
|
708
739
|
responses: OpenApi.responses({
|
|
709
740
|
errors: {
|
|
741
|
+
400: {
|
|
742
|
+
codes: [
|
|
743
|
+
'chain_id_invalid',
|
|
744
|
+
'chain_id_unsupported',
|
|
745
|
+
'query_invalid',
|
|
746
|
+
'transaction_invalid',
|
|
747
|
+
],
|
|
748
|
+
},
|
|
710
749
|
404: {
|
|
711
750
|
description: 'No transaction was found for that hash.',
|
|
712
751
|
codes: ['transaction_not_found'],
|
|
@@ -21,6 +21,427 @@ const fixed = FxOracle.from({
|
|
|
21
21
|
}),
|
|
22
22
|
})
|
|
23
23
|
|
|
24
|
+
describe('OpenAPI', () => {
|
|
25
|
+
test('publishes generator-ready transfer, activity, and valuation contracts', async () => {
|
|
26
|
+
const app = TestApp.create({ auth: false })
|
|
27
|
+
const spec = await (await app.request('/openapi.json')).json()
|
|
28
|
+
const operations = {
|
|
29
|
+
addressActivities: spec.paths['/v1/addresses/{address}/activities'].get,
|
|
30
|
+
addressValuation: spec.paths['/v1/addresses/{address}/valuation'].get,
|
|
31
|
+
transactionActivities: spec.paths['/v1/transactions/{transactionHash}/activities'].get,
|
|
32
|
+
transfers: spec.paths['/v1/transfers'].get,
|
|
33
|
+
}
|
|
34
|
+
const summarizeError = (
|
|
35
|
+
response: (typeof operations)[keyof typeof operations]['responses'][number],
|
|
36
|
+
) => {
|
|
37
|
+
const schema = response.$ref ?? response.content?.['application/json']?.schema
|
|
38
|
+
if (!schema || typeof schema === 'string' || !('$ref' in schema)) return schema
|
|
39
|
+
const name = schema.$ref.split('/').at(-1)!
|
|
40
|
+
return {
|
|
41
|
+
codes: spec.components.schemas[name].properties.error.properties.code.enum,
|
|
42
|
+
schema,
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const summarize = (operation: (typeof operations)[keyof typeof operations]) => ({
|
|
46
|
+
errors: Object.fromEntries(
|
|
47
|
+
[400, 401, 403, 404, 409, 429, 500, 502]
|
|
48
|
+
.filter((status) => operation.responses[status])
|
|
49
|
+
.map((status) => [status, summarizeError(operation.responses[status])]),
|
|
50
|
+
),
|
|
51
|
+
operationId: operation.operationId,
|
|
52
|
+
response: operation.responses[200].content['application/json'].schema,
|
|
53
|
+
})
|
|
54
|
+
type ActivityVariant = { $ref?: string }
|
|
55
|
+
const activityVariants = spec.components.schemas.ActivityItem.anyOf as ActivityVariant[]
|
|
56
|
+
const firstActivityVariant = activityVariants[0]!.$ref!.split('/').at(-1)!
|
|
57
|
+
|
|
58
|
+
expect({
|
|
59
|
+
components: [
|
|
60
|
+
'ActivityEntry',
|
|
61
|
+
'ActivityEvent',
|
|
62
|
+
'ActivityGroup',
|
|
63
|
+
'ActivityItem',
|
|
64
|
+
'ActivityMeta',
|
|
65
|
+
'ActivityToken',
|
|
66
|
+
'ActivityTransfer',
|
|
67
|
+
'ActivityValuedAmount',
|
|
68
|
+
'AddressActivityList',
|
|
69
|
+
'AddressValuation',
|
|
70
|
+
'TokenTransfer',
|
|
71
|
+
'TokenTransferList',
|
|
72
|
+
'TokenTransferListMeta',
|
|
73
|
+
'TokenTransferToken',
|
|
74
|
+
'TransactionActivityList',
|
|
75
|
+
'ValuationPricing',
|
|
76
|
+
'ValuationValue',
|
|
77
|
+
'ValuedTokenAmount',
|
|
78
|
+
].filter((name) => spec.components.schemas[name]),
|
|
79
|
+
descriptions: {
|
|
80
|
+
activityValuedAmount: spec.components.schemas.ActivityValuedAmount.description,
|
|
81
|
+
valuedTokenAmount: spec.components.schemas.ValuedTokenAmount.description,
|
|
82
|
+
},
|
|
83
|
+
formats: {
|
|
84
|
+
activityTransfer: spec.components.schemas.ActivityTransfer.properties.timestamp.format,
|
|
85
|
+
pricing: spec.components.schemas.ValuationPricing.properties.asOf.format,
|
|
86
|
+
transfer: spec.components.schemas.TokenTransfer.properties.timestamp.format,
|
|
87
|
+
},
|
|
88
|
+
models: {
|
|
89
|
+
activityEntry: spec.components.schemas.ActivityEntry.anyOf,
|
|
90
|
+
activityGroupItems:
|
|
91
|
+
spec.components.schemas.ActivityGroup.properties.data.properties.items.items,
|
|
92
|
+
activityItemEvents: spec.components.schemas[firstActivityVariant].properties.events.items,
|
|
93
|
+
activityItemVariants: {
|
|
94
|
+
count: activityVariants.length,
|
|
95
|
+
first: activityVariants[0],
|
|
96
|
+
last: activityVariants.at(-1),
|
|
97
|
+
referenced: activityVariants.every((variant) => variant.$ref),
|
|
98
|
+
stableName:
|
|
99
|
+
spec.components.schemas.ActivityItemSharesRedemptionRequested.properties.type.const,
|
|
100
|
+
},
|
|
101
|
+
activityList: spec.components.schemas.AddressActivityList.properties.data.items,
|
|
102
|
+
activityListMeta: spec.components.schemas.AddressActivityList.properties.meta,
|
|
103
|
+
activityTransferSourceAmount:
|
|
104
|
+
spec.components.schemas.ActivityTransfer.properties.sourceAmount,
|
|
105
|
+
activityTransferSourceToken:
|
|
106
|
+
spec.components.schemas.ActivityTransfer.properties.sourceToken,
|
|
107
|
+
transactionActivityList:
|
|
108
|
+
spec.components.schemas.TransactionActivityList.properties.data.items,
|
|
109
|
+
transferDestinationAmount:
|
|
110
|
+
spec.components.schemas.TokenTransfer.properties.destinationAmount,
|
|
111
|
+
transferDestinationToken: spec.components.schemas.TokenTransfer.properties.destinationToken,
|
|
112
|
+
transferList: spec.components.schemas.TokenTransferList.properties.data.items,
|
|
113
|
+
transferListMeta: spec.components.schemas.TokenTransferList.properties.meta,
|
|
114
|
+
transferSourceAmount: spec.components.schemas.TokenTransfer.properties.sourceAmount,
|
|
115
|
+
transferSourceToken: spec.components.schemas.TokenTransfer.properties.sourceToken,
|
|
116
|
+
valuationPricing: spec.components.schemas.AddressValuation.properties.pricing,
|
|
117
|
+
},
|
|
118
|
+
operations: Object.fromEntries(
|
|
119
|
+
Object.entries(operations).map(([name, operation]) => [name, summarize(operation)]),
|
|
120
|
+
),
|
|
121
|
+
}).toMatchInlineSnapshot(`
|
|
122
|
+
{
|
|
123
|
+
"components": [
|
|
124
|
+
"ActivityEntry",
|
|
125
|
+
"ActivityEvent",
|
|
126
|
+
"ActivityGroup",
|
|
127
|
+
"ActivityItem",
|
|
128
|
+
"ActivityMeta",
|
|
129
|
+
"ActivityToken",
|
|
130
|
+
"ActivityTransfer",
|
|
131
|
+
"ActivityValuedAmount",
|
|
132
|
+
"AddressActivityList",
|
|
133
|
+
"AddressValuation",
|
|
134
|
+
"TokenTransfer",
|
|
135
|
+
"TokenTransferList",
|
|
136
|
+
"TokenTransferListMeta",
|
|
137
|
+
"TokenTransferToken",
|
|
138
|
+
"TransactionActivityList",
|
|
139
|
+
"ValuationPricing",
|
|
140
|
+
"ValuationValue",
|
|
141
|
+
"ValuedTokenAmount",
|
|
142
|
+
],
|
|
143
|
+
"descriptions": {
|
|
144
|
+
"activityValuedAmount": "A token amount carrying its nominal value in the requested denomination.",
|
|
145
|
+
"valuedTokenAmount": "A token amount carrying its nominal value in the requested denomination.",
|
|
146
|
+
},
|
|
147
|
+
"formats": {
|
|
148
|
+
"activityTransfer": "date-time",
|
|
149
|
+
"pricing": "date-time",
|
|
150
|
+
"transfer": "date-time",
|
|
151
|
+
},
|
|
152
|
+
"models": {
|
|
153
|
+
"activityEntry": [
|
|
154
|
+
{
|
|
155
|
+
"$ref": "#/components/schemas/ActivityItem",
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"$ref": "#/components/schemas/ActivityGroup",
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
"activityGroupItems": {
|
|
162
|
+
"$ref": "#/components/schemas/ActivityItem",
|
|
163
|
+
},
|
|
164
|
+
"activityItemEvents": {
|
|
165
|
+
"$ref": "#/components/schemas/ActivityEvent",
|
|
166
|
+
},
|
|
167
|
+
"activityItemVariants": {
|
|
168
|
+
"count": 65,
|
|
169
|
+
"first": {
|
|
170
|
+
"$ref": "#/components/schemas/ActivityItemAssetsDeposited",
|
|
171
|
+
},
|
|
172
|
+
"last": {
|
|
173
|
+
"$ref": "#/components/schemas/ActivityItemUnknown",
|
|
174
|
+
},
|
|
175
|
+
"referenced": true,
|
|
176
|
+
"stableName": "shares-redemption-requested",
|
|
177
|
+
},
|
|
178
|
+
"activityList": {
|
|
179
|
+
"$ref": "#/components/schemas/ActivityEntry",
|
|
180
|
+
},
|
|
181
|
+
"activityListMeta": {
|
|
182
|
+
"$ref": "#/components/schemas/ActivityMeta",
|
|
183
|
+
},
|
|
184
|
+
"activityTransferSourceAmount": {
|
|
185
|
+
"$ref": "#/components/schemas/ActivityValuedAmount",
|
|
186
|
+
},
|
|
187
|
+
"activityTransferSourceToken": {
|
|
188
|
+
"$ref": "#/components/schemas/ActivityToken",
|
|
189
|
+
},
|
|
190
|
+
"transactionActivityList": {
|
|
191
|
+
"$ref": "#/components/schemas/ActivityItem",
|
|
192
|
+
},
|
|
193
|
+
"transferDestinationAmount": {
|
|
194
|
+
"$ref": "#/components/schemas/ValuedTokenAmount",
|
|
195
|
+
},
|
|
196
|
+
"transferDestinationToken": {
|
|
197
|
+
"$ref": "#/components/schemas/TokenTransferToken",
|
|
198
|
+
},
|
|
199
|
+
"transferList": {
|
|
200
|
+
"$ref": "#/components/schemas/TokenTransfer",
|
|
201
|
+
},
|
|
202
|
+
"transferListMeta": {
|
|
203
|
+
"$ref": "#/components/schemas/TokenTransferListMeta",
|
|
204
|
+
},
|
|
205
|
+
"transferSourceAmount": {
|
|
206
|
+
"$ref": "#/components/schemas/ValuedTokenAmount",
|
|
207
|
+
},
|
|
208
|
+
"transferSourceToken": {
|
|
209
|
+
"$ref": "#/components/schemas/TokenTransferToken",
|
|
210
|
+
},
|
|
211
|
+
"valuationPricing": {
|
|
212
|
+
"anyOf": [
|
|
213
|
+
{
|
|
214
|
+
"$ref": "#/components/schemas/ValuationPricing",
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"type": "null",
|
|
218
|
+
},
|
|
219
|
+
],
|
|
220
|
+
"description": "Rate provenance, or \`null\` when every valued holding was already denominated in \`currency\`.",
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
"operations": {
|
|
224
|
+
"addressActivities": {
|
|
225
|
+
"errors": {
|
|
226
|
+
"400": {
|
|
227
|
+
"codes": [
|
|
228
|
+
"address_invalid",
|
|
229
|
+
"api_key_malformed",
|
|
230
|
+
"chain_id_invalid",
|
|
231
|
+
"chain_id_unsupported",
|
|
232
|
+
"query_invalid",
|
|
233
|
+
],
|
|
234
|
+
"schema": {
|
|
235
|
+
"$ref": "#/components/schemas/AddressInvalidOrApiKeyMalformedOrChainIdInvalidOrChainIdUnsupportedOrQueryInvalidError",
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
"401": {
|
|
239
|
+
"codes": [
|
|
240
|
+
"api_key_invalid",
|
|
241
|
+
"api_key_missing",
|
|
242
|
+
"unauthorized",
|
|
243
|
+
],
|
|
244
|
+
"schema": {
|
|
245
|
+
"$ref": "#/components/schemas/AuthenticationError",
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
"403": {
|
|
249
|
+
"codes": [
|
|
250
|
+
"api_key_forbidden",
|
|
251
|
+
"api_key_ip_forbidden",
|
|
252
|
+
"forbidden",
|
|
253
|
+
],
|
|
254
|
+
"schema": {
|
|
255
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
"429": "#/components/responses/RateLimited",
|
|
259
|
+
"500": "#/components/responses/InternalError",
|
|
260
|
+
"502": {
|
|
261
|
+
"codes": [
|
|
262
|
+
"upstream_error",
|
|
263
|
+
],
|
|
264
|
+
"schema": {
|
|
265
|
+
"$ref": "#/components/schemas/UpstreamError",
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
"operationId": "getAddressActivities",
|
|
270
|
+
"response": {
|
|
271
|
+
"$ref": "#/components/schemas/AddressActivityList",
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
"addressValuation": {
|
|
275
|
+
"errors": {
|
|
276
|
+
"400": {
|
|
277
|
+
"codes": [
|
|
278
|
+
"address_invalid",
|
|
279
|
+
"api_key_malformed",
|
|
280
|
+
"chain_id_invalid",
|
|
281
|
+
"chain_id_unsupported",
|
|
282
|
+
"query_invalid",
|
|
283
|
+
],
|
|
284
|
+
"schema": {
|
|
285
|
+
"$ref": "#/components/schemas/AddressInvalidOrApiKeyMalformedOrChainIdInvalidOrChainIdUnsupportedOrQueryInvalidError",
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
"401": {
|
|
289
|
+
"codes": [
|
|
290
|
+
"api_key_invalid",
|
|
291
|
+
"api_key_missing",
|
|
292
|
+
"unauthorized",
|
|
293
|
+
],
|
|
294
|
+
"schema": {
|
|
295
|
+
"$ref": "#/components/schemas/AuthenticationError",
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
"403": {
|
|
299
|
+
"codes": [
|
|
300
|
+
"api_key_forbidden",
|
|
301
|
+
"api_key_ip_forbidden",
|
|
302
|
+
"forbidden",
|
|
303
|
+
],
|
|
304
|
+
"schema": {
|
|
305
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
"429": "#/components/responses/RateLimited",
|
|
309
|
+
"500": "#/components/responses/InternalError",
|
|
310
|
+
"502": {
|
|
311
|
+
"codes": [
|
|
312
|
+
"upstream_error",
|
|
313
|
+
],
|
|
314
|
+
"schema": {
|
|
315
|
+
"$ref": "#/components/schemas/UpstreamError",
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
},
|
|
319
|
+
"operationId": "getAddressValuation",
|
|
320
|
+
"response": {
|
|
321
|
+
"$ref": "#/components/schemas/AddressValuation",
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
"transactionActivities": {
|
|
325
|
+
"errors": {
|
|
326
|
+
"400": {
|
|
327
|
+
"codes": [
|
|
328
|
+
"api_key_malformed",
|
|
329
|
+
"chain_id_invalid",
|
|
330
|
+
"chain_id_unsupported",
|
|
331
|
+
"query_invalid",
|
|
332
|
+
"transaction_invalid",
|
|
333
|
+
],
|
|
334
|
+
"schema": {
|
|
335
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrChainIdInvalidOrChainIdUnsupportedOrQueryInvalidOrTransactionInvalidError",
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
"401": {
|
|
339
|
+
"codes": [
|
|
340
|
+
"api_key_invalid",
|
|
341
|
+
"api_key_missing",
|
|
342
|
+
"unauthorized",
|
|
343
|
+
],
|
|
344
|
+
"schema": {
|
|
345
|
+
"$ref": "#/components/schemas/AuthenticationError",
|
|
346
|
+
},
|
|
347
|
+
},
|
|
348
|
+
"403": {
|
|
349
|
+
"codes": [
|
|
350
|
+
"api_key_forbidden",
|
|
351
|
+
"api_key_ip_forbidden",
|
|
352
|
+
"forbidden",
|
|
353
|
+
],
|
|
354
|
+
"schema": {
|
|
355
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
"404": {
|
|
359
|
+
"codes": [
|
|
360
|
+
"transaction_not_found",
|
|
361
|
+
],
|
|
362
|
+
"schema": {
|
|
363
|
+
"$ref": "#/components/schemas/TransactionNotFoundError",
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
"409": {
|
|
367
|
+
"codes": [
|
|
368
|
+
"transaction_ambiguous",
|
|
369
|
+
],
|
|
370
|
+
"schema": {
|
|
371
|
+
"$ref": "#/components/schemas/TransactionAmbiguousError",
|
|
372
|
+
},
|
|
373
|
+
},
|
|
374
|
+
"429": "#/components/responses/RateLimited",
|
|
375
|
+
"500": "#/components/responses/InternalError",
|
|
376
|
+
"502": {
|
|
377
|
+
"codes": [
|
|
378
|
+
"upstream_error",
|
|
379
|
+
],
|
|
380
|
+
"schema": {
|
|
381
|
+
"$ref": "#/components/schemas/UpstreamError",
|
|
382
|
+
},
|
|
383
|
+
},
|
|
384
|
+
},
|
|
385
|
+
"operationId": "getTransactionActivities",
|
|
386
|
+
"response": {
|
|
387
|
+
"$ref": "#/components/schemas/TransactionActivityList",
|
|
388
|
+
},
|
|
389
|
+
},
|
|
390
|
+
"transfers": {
|
|
391
|
+
"errors": {
|
|
392
|
+
"400": {
|
|
393
|
+
"codes": [
|
|
394
|
+
"api_key_malformed",
|
|
395
|
+
"chain_id_invalid",
|
|
396
|
+
"chain_id_unsupported",
|
|
397
|
+
"query_invalid",
|
|
398
|
+
],
|
|
399
|
+
"schema": {
|
|
400
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrChainIdInvalidOrChainIdUnsupportedOrQueryInvalidError",
|
|
401
|
+
},
|
|
402
|
+
},
|
|
403
|
+
"401": {
|
|
404
|
+
"codes": [
|
|
405
|
+
"api_key_invalid",
|
|
406
|
+
"api_key_missing",
|
|
407
|
+
"unauthorized",
|
|
408
|
+
],
|
|
409
|
+
"schema": {
|
|
410
|
+
"$ref": "#/components/schemas/AuthenticationError",
|
|
411
|
+
},
|
|
412
|
+
},
|
|
413
|
+
"403": {
|
|
414
|
+
"codes": [
|
|
415
|
+
"api_key_forbidden",
|
|
416
|
+
"api_key_ip_forbidden",
|
|
417
|
+
"forbidden",
|
|
418
|
+
],
|
|
419
|
+
"schema": {
|
|
420
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
421
|
+
},
|
|
422
|
+
},
|
|
423
|
+
"429": "#/components/responses/RateLimited",
|
|
424
|
+
"500": "#/components/responses/InternalError",
|
|
425
|
+
"502": {
|
|
426
|
+
"codes": [
|
|
427
|
+
"upstream_error",
|
|
428
|
+
],
|
|
429
|
+
"schema": {
|
|
430
|
+
"$ref": "#/components/schemas/UpstreamError",
|
|
431
|
+
},
|
|
432
|
+
},
|
|
433
|
+
},
|
|
434
|
+
"operationId": "getTransfers",
|
|
435
|
+
"response": {
|
|
436
|
+
"$ref": "#/components/schemas/TokenTransferList",
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
},
|
|
440
|
+
}
|
|
441
|
+
`)
|
|
442
|
+
})
|
|
443
|
+
})
|
|
444
|
+
|
|
24
445
|
describe('GET /transfers', () => {
|
|
25
446
|
test('parses granular token includes', () => {
|
|
26
447
|
expect(
|