accounts 0.8.4 → 0.8.5
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/CHANGELOG.md +8 -0
- package/dist/core/ExecutionError.d.ts.map +1 -1
- package/dist/core/ExecutionError.js +14 -14
- package/dist/core/ExecutionError.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/server/Handler.d.ts +41 -2
- package/dist/server/Handler.d.ts.map +1 -1
- package/dist/server/Handler.js +27 -14
- package/dist/server/Handler.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/internal/handlers/exchange.d.ts +271 -0
- package/dist/server/internal/handlers/exchange.d.ts.map +1 -0
- package/dist/server/internal/handlers/exchange.js +313 -0
- package/dist/server/internal/handlers/exchange.js.map +1 -0
- package/dist/server/internal/handlers/relay.d.ts.map +1 -1
- package/dist/server/internal/handlers/relay.js +7 -2
- package/dist/server/internal/handlers/relay.js.map +1 -1
- package/dist/server/internal/hono.d.ts +20 -0
- package/dist/server/internal/hono.d.ts.map +1 -0
- package/dist/server/internal/hono.js +24 -0
- package/dist/server/internal/hono.js.map +1 -0
- package/dist/server/internal/kv.d.ts +19 -0
- package/dist/server/internal/kv.d.ts.map +1 -0
- package/dist/server/internal/kv.js +17 -0
- package/dist/server/internal/kv.js.map +1 -0
- package/dist/server/internal/zod.d.ts +30 -0
- package/dist/server/internal/zod.d.ts.map +1 -0
- package/dist/server/internal/zod.js +53 -0
- package/dist/server/internal/zod.js.map +1 -0
- package/package.json +1 -1
- package/src/core/ExecutionError.ts +16 -14
- package/src/index.ts +1 -0
- package/src/server/Handler.test-d.ts +85 -0
- package/src/server/Handler.ts +56 -17
- package/src/server/index.ts +2 -0
- package/src/server/internal/handlers/exchange.test-d.ts +163 -0
- package/src/server/internal/handlers/exchange.test.ts +632 -0
- package/src/server/internal/handlers/exchange.ts +479 -0
- package/src/server/internal/handlers/relay.test.ts +43 -0
- package/src/server/internal/handlers/relay.ts +6 -2
- package/src/server/internal/hono.ts +30 -0
- package/src/server/internal/kv.ts +35 -0
- package/src/server/internal/zod.ts +65 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# accounts
|
|
2
2
|
|
|
3
|
+
## 0.8.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- a9c2b0d: Added `Handler.exchange()` for the Tempo Stablecoin DEX, exposing `GET /exchange/tokens` and `POST /exchange/quote`.
|
|
8
|
+
- 5c5988f: Exported `ExecutionError`.
|
|
9
|
+
- 5c5988f: Fixed relay default pass-through to return upstream RPC errors as structured JSON-RPC errors instead of HTTP 500.
|
|
10
|
+
|
|
3
11
|
## 0.8.4
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionError.d.ts","sourceRoot":"","sources":["../../src/core/ExecutionError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,2BAA2B,EAAE,KAAK,GAAG,EAAqB,MAAM,MAAM,CAAA;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAE5D,KAAK,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,CAAA;AAC/B,KAAK,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvE,8DAA8D;AAC9D,MAAM,MAAM,cAAc,GAAG,KAAK,CAC9B,CAAC,2BAA2B,CAAC,OAAO,CAAC,GAAG;IACtC,IAAI,EAAE,GAAG,CAAA;IACT,OAAO,EAAE,MAAM,CAAA;CAChB,CAAC,GACF;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAC5C,CAAA;AAED,mEAAmE;AACnE,MAAM,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;AAEnD,uDAAuD;AACvD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ExecutionError.d.ts","sourceRoot":"","sources":["../../src/core/ExecutionError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,2BAA2B,EAAE,KAAK,GAAG,EAAqB,MAAM,MAAM,CAAA;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAE5D,KAAK,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,CAAA;AAC/B,KAAK,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAEvE,8DAA8D;AAC9D,MAAM,MAAM,cAAc,GAAG,KAAK,CAC9B,CAAC,2BAA2B,CAAC,OAAO,CAAC,GAAG;IACtC,IAAI,EAAE,GAAG,CAAA;IACT,OAAO,EAAE,MAAM,CAAA;CAChB,CAAC,GACF;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAC5C,CAAA;AAED,mEAAmE;AACnE,MAAM,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;AAEnD,uDAAuD;AACvD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAoGjD,CAAA;AAWD,4DAA4D;AAC5D,wBAAgB,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,cAAc,CA+BlD;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,GAAG,CAQvD"}
|
|
@@ -6,7 +6,7 @@ export const messages = {
|
|
|
6
6
|
AddressNotReserved: 'Address is not reserved.',
|
|
7
7
|
AddressReserved: 'Address is reserved.',
|
|
8
8
|
AlreadyInitialized: 'Already initialized.',
|
|
9
|
-
BelowMinimumOrderSize: '
|
|
9
|
+
BelowMinimumOrderSize: 'Order size is below the minimum allowed ({0}).',
|
|
10
10
|
CallNotAllowed: 'This call is not allowed.',
|
|
11
11
|
CannotChangeWithPendingFees: 'Cannot change while fees are pending.',
|
|
12
12
|
CannotChangeWithinBlock: 'Cannot change within the same block.',
|
|
@@ -17,22 +17,22 @@ export const messages = {
|
|
|
17
17
|
ExpiringNonceSetFull: 'Expiring nonce set is full.',
|
|
18
18
|
ExpiryInPast: 'Expiry is in the past.',
|
|
19
19
|
IdenticalAddresses: 'Addresses must be different.',
|
|
20
|
-
IdenticalTokens: '
|
|
20
|
+
IdenticalTokens: 'Cannot swap a token for itself — input and output tokens must be different.',
|
|
21
21
|
IncompatiblePolicyType: 'Incompatible policy type.',
|
|
22
22
|
IngressAlreadyExists: 'Ingress "{0}" already exists.',
|
|
23
23
|
InsufficientAllowance: 'Insufficient allowance.',
|
|
24
24
|
InsufficientBalance: 'Insufficient balance. Required: {1}, available: {0}.',
|
|
25
25
|
InsufficientFeeTokenBalance: 'Insufficient fee token balance.',
|
|
26
|
-
InsufficientLiquidity: '
|
|
27
|
-
InsufficientOutput: '
|
|
26
|
+
InsufficientLiquidity: 'Not enough liquidity in the order book to fill this trade.',
|
|
27
|
+
InsufficientOutput: 'The output amount is below the slippage minimum — try increasing slippage tolerance.',
|
|
28
28
|
InsufficientReserves: 'Insufficient reserves.',
|
|
29
29
|
InternalError: 'Internal error.',
|
|
30
30
|
InvalidAmount: 'Invalid amount.',
|
|
31
|
-
InvalidBaseToken: '
|
|
31
|
+
InvalidBaseToken: 'This token is not a valid base token for the requested pair.',
|
|
32
32
|
InvalidCallScope: 'Invalid call scope.',
|
|
33
33
|
InvalidCurrency: 'Invalid currency.',
|
|
34
34
|
InvalidExpiringNonceExpiry: 'Invalid expiring nonce expiry.',
|
|
35
|
-
InvalidFlipTick: '
|
|
35
|
+
InvalidFlipTick: 'The flip-order price tick is invalid.',
|
|
36
36
|
InvalidFormat: 'Invalid format.',
|
|
37
37
|
InvalidMasterAddress: 'Invalid master address.',
|
|
38
38
|
InvalidMigrationIndex: 'Invalid migration index.',
|
|
@@ -49,8 +49,8 @@ export const messages = {
|
|
|
49
49
|
InvalidSpendingLimit: 'Invalid spending limit.',
|
|
50
50
|
InvalidSupplyCap: 'Invalid supply cap.',
|
|
51
51
|
InvalidSwapCalculation: 'Invalid swap calculation.',
|
|
52
|
-
InvalidTick: '
|
|
53
|
-
InvalidToken: '
|
|
52
|
+
InvalidTick: 'The price tick is invalid.',
|
|
53
|
+
InvalidToken: 'This token is not supported on the exchange.',
|
|
54
54
|
InvalidTransferPolicyId: 'Invalid transfer policy.',
|
|
55
55
|
InvalidValidatorAddress: 'Invalid validator address.',
|
|
56
56
|
KeyAlreadyExists: 'Key already exists.',
|
|
@@ -59,7 +59,7 @@ export const messages = {
|
|
|
59
59
|
KeyNotFound: 'Key not found.',
|
|
60
60
|
LegacyAuthorizeKeySelectorChanged: 'Legacy authorize key selector changed to {0}.',
|
|
61
61
|
MasterIdCollision: 'Master ID collision with {0}.',
|
|
62
|
-
MaxInputExceeded: '
|
|
62
|
+
MaxInputExceeded: 'The required input exceeds the slippage maximum — try increasing slippage tolerance.',
|
|
63
63
|
MigrationNotComplete: 'Migration is not complete.',
|
|
64
64
|
NoOptedInSupply: 'No opted-in supply.',
|
|
65
65
|
NonceOverflow: 'Nonce overflow.',
|
|
@@ -69,10 +69,10 @@ export const messages = {
|
|
|
69
69
|
NotIpPort: '"{1}" is not a valid IP:port for {0}.',
|
|
70
70
|
OnlySystemContract: 'Only callable by system contract.',
|
|
71
71
|
OnlyValidator: 'Only callable by a validator.',
|
|
72
|
-
OrderDoesNotExist: '
|
|
73
|
-
OrderNotStale: '
|
|
74
|
-
PairAlreadyExists: '
|
|
75
|
-
PairDoesNotExist: '
|
|
72
|
+
OrderDoesNotExist: 'No order exists with the given ID.',
|
|
73
|
+
OrderNotStale: 'This order is not yet eligible for stale-cleanup.',
|
|
74
|
+
PairAlreadyExists: 'A trading pair for these tokens has already been created.',
|
|
75
|
+
PairDoesNotExist: 'No trading pair exists for these tokens.',
|
|
76
76
|
PermitExpired: 'Permit has expired.',
|
|
77
77
|
PolicyForbids: 'Forbidden by policy.',
|
|
78
78
|
PolicyNotFound: 'Policy not found.',
|
|
@@ -86,7 +86,7 @@ export const messages = {
|
|
|
86
86
|
SpendingLimitExceeded: 'Spending limit exceeded.',
|
|
87
87
|
StringTooLong: 'String is too long.',
|
|
88
88
|
SupplyCapExceeded: 'Supply cap exceeded.',
|
|
89
|
-
TickOutOfBounds: '
|
|
89
|
+
TickOutOfBounds: 'Price tick {0} is outside the allowed range.',
|
|
90
90
|
TokenAlreadyExists: 'Token {0} already exists.',
|
|
91
91
|
TokenPolicyForbids: 'Forbidden by token policy.',
|
|
92
92
|
TransfersDisabled: 'Transfers are disabled.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionError.js","sourceRoot":"","sources":["../../src/core/ExecutionError.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAmBjC,uDAAuD;AACvD,MAAM,CAAC,MAAM,QAAQ,GAAiC;IACpD,0BAA0B,EAAE,uCAAuC;IACnE,kBAAkB,EAAE,0BAA0B;IAC9C,eAAe,EAAE,sBAAsB;IACvC,kBAAkB,EAAE,sBAAsB;IAC1C,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"ExecutionError.js","sourceRoot":"","sources":["../../src/core/ExecutionError.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * as IntersectionObserver from './core/IntersectionObserver.js';
|
|
2
2
|
export * as Dialog from './core/Dialog.js';
|
|
3
|
+
export * as ExecutionError from './core/ExecutionError.js';
|
|
3
4
|
export * as Messenger from './core/Messenger.js';
|
|
4
5
|
export * as Schema from './core/Schema.js';
|
|
5
6
|
export * as Provider from './core/Provider.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * as IntersectionObserver from './core/IntersectionObserver.js';
|
|
2
2
|
export * as Dialog from './core/Dialog.js';
|
|
3
|
+
export * as ExecutionError from './core/ExecutionError.js';
|
|
3
4
|
export * as Messenger from './core/Messenger.js';
|
|
4
5
|
export * as Schema from './core/Schema.js';
|
|
5
6
|
export * as Provider from './core/Provider.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,QAAQ,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA"}
|
package/dist/server/Handler.d.ts
CHANGED
|
@@ -1,11 +1,50 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
|
+
import type { ExtractSchema, MergeSchemaPath, Schema } from 'hono/types';
|
|
3
|
+
import type { UnionToIntersection } from '../internal/types.js';
|
|
2
4
|
export { codeAuth } from './internal/handlers/codeAuth.js';
|
|
5
|
+
export { exchange } from './internal/handlers/exchange.js';
|
|
3
6
|
export { relay } from './internal/handlers/relay.js';
|
|
4
7
|
export { webAuthn } from './internal/handlers/webAuthn.js';
|
|
5
|
-
|
|
8
|
+
/**
|
|
9
|
+
* A request handler. Generic over the underlying Hono app shape so chained
|
|
10
|
+
* route definitions (`.post`, `.get`, …) can flow their type information
|
|
11
|
+
* through to consumers — most notably for Hono's typed RPC client
|
|
12
|
+
* (`hc<typeof handler>`).
|
|
13
|
+
*/
|
|
14
|
+
export type Handler<app extends Hono<any, any, any> = Hono> = app & {
|
|
6
15
|
listener: (req: any, res: any) => void;
|
|
7
16
|
};
|
|
8
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Merges the route schemas of every sub-handler into a single Hono schema,
|
|
19
|
+
* prefixing each route key with `path`. Used by `compose()` to preserve
|
|
20
|
+
* typed routes for Hono's RPC client (`hc`).
|
|
21
|
+
*/
|
|
22
|
+
export type ComposedSchema<subs extends readonly unknown[], path extends string> = UnionToIntersection<subs[number] extends infer sub ? sub extends unknown ? MergeSchemaPath<Extract<ExtractSchema<sub>, Schema>, path> : never : never> extends infer schema extends Schema ? schema : never;
|
|
23
|
+
/**
|
|
24
|
+
* Mounts each sub-handler onto a fresh Hono app at `path` (default `/`) and
|
|
25
|
+
* returns a single composed handler. Routes are dispatched by Hono's trie
|
|
26
|
+
* — a deterministic match per path — instead of the older "try each handler
|
|
27
|
+
* in order until one returns non-404" loop.
|
|
28
|
+
*
|
|
29
|
+
* The returned handler preserves each sub-handler's route schema so the
|
|
30
|
+
* composed app stays usable from Hono's typed RPC client:
|
|
31
|
+
*
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { hc } from 'hono/client'
|
|
34
|
+
*
|
|
35
|
+
* const app = Handler.compose(
|
|
36
|
+
* [Handler.exchange(), Handler.codeAuth({ store })],
|
|
37
|
+
* { path: '/api' },
|
|
38
|
+
* )
|
|
39
|
+
* type App = typeof app
|
|
40
|
+
*
|
|
41
|
+
* const client = hc<App>('https://wallet.example.com')
|
|
42
|
+
* await client.api.exchange.quote.$post({ json: { ... } }) // typed
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function compose<const subs extends readonly Handler[], const path extends string = '/'>(handlers: subs, options?: compose.Options & {
|
|
46
|
+
path?: path;
|
|
47
|
+
}): Handler<Hono<{}, ComposedSchema<subs, path>, '/'>>;
|
|
9
48
|
export declare namespace compose {
|
|
10
49
|
type Options = from.Options & {
|
|
11
50
|
/** The path to use for the handler. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Handler.d.ts","sourceRoot":"","sources":["../../src/server/Handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Handler.d.ts","sourceRoot":"","sources":["../../src/server/Handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAG/D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,OAAO,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,GAAG;IAClE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;CACvC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EAAE,IAAI,SAAS,MAAM,IAC7E,mBAAmB,CACjB,IAAI,CAAC,MAAM,CAAC,SAAS,MAAM,GAAG,GAC1B,GAAG,SAAS,OAAO,GACjB,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,GAC1D,KAAK,GACP,KAAK,CACV,SAAS,MAAM,MAAM,SAAS,MAAM,GACjC,MAAM,GACN,KAAK,CAAA;AAEX;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,EAAE,KAAK,CAAC,IAAI,SAAS,MAAM,GAAG,GAAG,EAC5F,QAAQ,EAAE,IAAI,EACd,OAAO,GAAE,OAAO,CAAC,OAAO,GAAG;IAAE,IAAI,CAAC,EAAE,IAAI,CAAA;CAAO,GAC9C,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAQpD;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAY,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG;QACnC,uCAAuC;QACvC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,IAAI,CAAC,OAAY,GAAG,OAAO,CAiBxD;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,KAAY,OAAO,GAAG;QACpB;;;;;WAKG;QACH,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;QACjC,sCAAsC;QACtC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;KACvD,CAAA;IAED,KAAY,IAAI,GAAG;QACjB,0CAA0C;QAC1C,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;QACtC,wEAAwE;QACxE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,qDAAqD;QACrD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,oCAAoC;QACpC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QACjC,wCAAwC;QACxC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAClC,8CAA8C;QAC9C,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC5B,CAAA;CACF"}
|
package/dist/server/Handler.js
CHANGED
|
@@ -1,24 +1,37 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
2
|
import * as RequestListener from './internal/requestListener.js';
|
|
3
3
|
export { codeAuth } from './internal/handlers/codeAuth.js';
|
|
4
|
+
export { exchange } from './internal/handlers/exchange.js';
|
|
4
5
|
export { relay } from './internal/handlers/relay.js';
|
|
5
6
|
export { webAuthn } from './internal/handlers/webAuthn.js';
|
|
7
|
+
/**
|
|
8
|
+
* Mounts each sub-handler onto a fresh Hono app at `path` (default `/`) and
|
|
9
|
+
* returns a single composed handler. Routes are dispatched by Hono's trie
|
|
10
|
+
* — a deterministic match per path — instead of the older "try each handler
|
|
11
|
+
* in order until one returns non-404" loop.
|
|
12
|
+
*
|
|
13
|
+
* The returned handler preserves each sub-handler's route schema so the
|
|
14
|
+
* composed app stays usable from Hono's typed RPC client:
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { hc } from 'hono/client'
|
|
18
|
+
*
|
|
19
|
+
* const app = Handler.compose(
|
|
20
|
+
* [Handler.exchange(), Handler.codeAuth({ store })],
|
|
21
|
+
* { path: '/api' },
|
|
22
|
+
* )
|
|
23
|
+
* type App = typeof app
|
|
24
|
+
*
|
|
25
|
+
* const client = hc<App>('https://wallet.example.com')
|
|
26
|
+
* await client.api.exchange.quote.$post({ json: { ... } }) // typed
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
6
29
|
export function compose(handlers, options = {}) {
|
|
7
|
-
const
|
|
30
|
+
const mountPath = (options.path ?? '/');
|
|
8
31
|
const app = from(options);
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return new Response('Not Found', { status: 404 });
|
|
13
|
-
url.pathname = url.pathname.replace(path, '');
|
|
14
|
-
for (const handler of handlers) {
|
|
15
|
-
const request = new Request(url, c.req.raw.clone());
|
|
16
|
-
const response = await handler.fetch(request);
|
|
17
|
-
if (response.status !== 404)
|
|
18
|
-
return response;
|
|
19
|
-
}
|
|
20
|
-
return new Response('Not Found', { status: 404 });
|
|
21
|
-
});
|
|
32
|
+
for (const sub of handlers)
|
|
33
|
+
app.route(mountPath, sub);
|
|
34
|
+
app.notFound(() => new Response('Not Found', { status: 404 }));
|
|
22
35
|
return app;
|
|
23
36
|
}
|
|
24
37
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Handler.js","sourceRoot":"","sources":["../../src/server/Handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Handler.js","sourceRoot":"","sources":["../../src/server/Handler.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA"}
|
package/dist/server/index.js
CHANGED
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { type Address, type Chain, type Transport } from 'viem';
|
|
2
|
+
import * as z from 'zod/mini';
|
|
3
|
+
import { type Handler, from } from '../../Handler.js';
|
|
4
|
+
import * as Kv from '../../Kv.js';
|
|
5
|
+
/** Zod schemas for the exchange handler's request and response payloads. */
|
|
6
|
+
export declare namespace schema {
|
|
7
|
+
/** Schemas for `POST /exchange/quote`. */
|
|
8
|
+
namespace quote {
|
|
9
|
+
/** Request body schema. */
|
|
10
|
+
const parameters: z.ZodMiniObject<{
|
|
11
|
+
amount: z.ZodMiniString<string>;
|
|
12
|
+
chainId: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
13
|
+
input: z.ZodMiniString<string>;
|
|
14
|
+
output: z.ZodMiniString<string>;
|
|
15
|
+
slippage: z.ZodMiniNumber<number>;
|
|
16
|
+
type: z.ZodMiniUnion<readonly [z.ZodMiniLiteral<"buy">, z.ZodMiniLiteral<"sell">]>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
/** Response body schema. */
|
|
19
|
+
const returns: z.ZodMiniObject<{
|
|
20
|
+
calls: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniObject<{
|
|
21
|
+
data: z.ZodMiniTemplateLiteral<`0x${string}`>;
|
|
22
|
+
to: z.ZodMiniTemplateLiteral<`0x${string}`>;
|
|
23
|
+
}, z.core.$strip>>>;
|
|
24
|
+
input: z.ZodMiniObject<{
|
|
25
|
+
amount: z.ZodMiniString<string>;
|
|
26
|
+
name: z.ZodMiniString<string>;
|
|
27
|
+
symbol: z.ZodMiniString<string>;
|
|
28
|
+
token: z.ZodMiniTemplateLiteral<`0x${string}`>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
output: z.ZodMiniObject<{
|
|
31
|
+
amount: z.ZodMiniString<string>;
|
|
32
|
+
name: z.ZodMiniString<string>;
|
|
33
|
+
symbol: z.ZodMiniString<string>;
|
|
34
|
+
token: z.ZodMiniTemplateLiteral<`0x${string}`>;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
slippage: z.ZodMiniNumber<number>;
|
|
37
|
+
type: z.ZodMiniUnion<readonly [z.ZodMiniLiteral<"buy">, z.ZodMiniLiteral<"sell">]>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
}
|
|
40
|
+
/** Schemas for `GET /exchange/tokens`. */
|
|
41
|
+
namespace tokens {
|
|
42
|
+
/** Query string schema. `chainId` is a decimal string when present. */
|
|
43
|
+
const parameters: z.ZodMiniObject<{
|
|
44
|
+
chainId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
/** Response body schema. */
|
|
47
|
+
const returns: z.ZodMiniObject<{
|
|
48
|
+
tokens: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniObject<{
|
|
49
|
+
address: z.ZodMiniTemplateLiteral<`0x${string}`>;
|
|
50
|
+
decimals: z.ZodMiniNumber<number>;
|
|
51
|
+
name: z.ZodMiniString<string>;
|
|
52
|
+
symbol: z.ZodMiniString<string>;
|
|
53
|
+
}, z.core.$strip>>>;
|
|
54
|
+
}, z.core.$strip>;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Instantiates a stablecoin-exchange handler that returns swap quotes plus
|
|
59
|
+
* the matching `calls` (approve + buy/sell) for the Tempo Stablecoin DEX.
|
|
60
|
+
*
|
|
61
|
+
* Exposes 2 endpoints:
|
|
62
|
+
* - `GET /exchange/tokens` — list known tokens for a chain (defaults to the
|
|
63
|
+
* first configured chain; pass `?chainId=N` to pick a different one).
|
|
64
|
+
* - `POST /exchange/quote` — return a quote and ready-to-submit calls.
|
|
65
|
+
*
|
|
66
|
+
* The returned value is a Hono app augmented with a Node `listener`. The full
|
|
67
|
+
* route schema is preserved on the type so consumers can derive a typed RPC
|
|
68
|
+
* client with `hc<ReturnType<typeof exchange>>(url)`.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* import { Handler } from 'accounts/server'
|
|
73
|
+
*
|
|
74
|
+
* const handler = Handler.exchange()
|
|
75
|
+
*
|
|
76
|
+
* // Plug handler into your server framework of choice:
|
|
77
|
+
* createServer(handler.listener)
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* Typed RPC client
|
|
82
|
+
*
|
|
83
|
+
* ```ts
|
|
84
|
+
* import { hc } from 'hono/client'
|
|
85
|
+
* import { Handler } from 'accounts/server'
|
|
86
|
+
*
|
|
87
|
+
* const handler = Handler.exchange()
|
|
88
|
+
* type Handler = typeof handler
|
|
89
|
+
*
|
|
90
|
+
* const client = hc<Handler>('https://example.com')
|
|
91
|
+
* const res = await client.exchange.quote.$post({
|
|
92
|
+
* json: {
|
|
93
|
+
* amount: '1',
|
|
94
|
+
* input: 'USDC',
|
|
95
|
+
* output: 'USDT',
|
|
96
|
+
* slippage: 0.01,
|
|
97
|
+
* type: 'sell',
|
|
98
|
+
* },
|
|
99
|
+
* })
|
|
100
|
+
* if (res.ok) {
|
|
101
|
+
* const { calls, input, output } = await res.json()
|
|
102
|
+
* // fully typed
|
|
103
|
+
* }
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* @param options - Options.
|
|
107
|
+
* @returns Request handler.
|
|
108
|
+
*/
|
|
109
|
+
export declare function exchange<const path extends string = '/exchange'>(options?: exchange.Options<path>): Handler<import("hono/hono-base").HonoBase<import("hono/types").BlankEnv, { [K in import("hono/types").MergePath<"/", `${path}/tokens`>]: {
|
|
110
|
+
$get: {
|
|
111
|
+
input: import("hono/types").AddParam<{
|
|
112
|
+
query: {
|
|
113
|
+
chainId?: string | undefined;
|
|
114
|
+
};
|
|
115
|
+
}, import("hono/types").MergePath<"/", `${path}/tokens`>>;
|
|
116
|
+
output: {
|
|
117
|
+
error: string;
|
|
118
|
+
issues: {
|
|
119
|
+
path: string;
|
|
120
|
+
message: string;
|
|
121
|
+
}[];
|
|
122
|
+
};
|
|
123
|
+
outputFormat: "json";
|
|
124
|
+
status: 400;
|
|
125
|
+
} | {
|
|
126
|
+
input: import("hono/types").AddParam<{
|
|
127
|
+
query: {
|
|
128
|
+
chainId?: string | undefined;
|
|
129
|
+
};
|
|
130
|
+
}, import("hono/types").MergePath<"/", `${path}/tokens`>>;
|
|
131
|
+
output: {
|
|
132
|
+
tokens: readonly {
|
|
133
|
+
address: `0x${string}`;
|
|
134
|
+
decimals: number;
|
|
135
|
+
name: string;
|
|
136
|
+
symbol: string;
|
|
137
|
+
}[];
|
|
138
|
+
};
|
|
139
|
+
outputFormat: "json";
|
|
140
|
+
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
141
|
+
} | {
|
|
142
|
+
input: import("hono/types").AddParam<{
|
|
143
|
+
query: {
|
|
144
|
+
chainId?: string | undefined;
|
|
145
|
+
};
|
|
146
|
+
}, import("hono/types").MergePath<"/", `${path}/tokens`>>;
|
|
147
|
+
output: {
|
|
148
|
+
error: string;
|
|
149
|
+
};
|
|
150
|
+
outputFormat: "json";
|
|
151
|
+
status: 400;
|
|
152
|
+
};
|
|
153
|
+
}; } & { [K_1 in import("hono/types").MergePath<"/", `${path}/quote`>]: {
|
|
154
|
+
$post: {
|
|
155
|
+
input: import("hono/types").AddParam<{
|
|
156
|
+
json: {
|
|
157
|
+
amount: string;
|
|
158
|
+
input: string;
|
|
159
|
+
output: string;
|
|
160
|
+
slippage: number;
|
|
161
|
+
type: "buy" | "sell";
|
|
162
|
+
chainId?: number | undefined;
|
|
163
|
+
};
|
|
164
|
+
}, import("hono/types").MergePath<"/", `${path}/quote`>>;
|
|
165
|
+
output: {
|
|
166
|
+
error: string;
|
|
167
|
+
issues: {
|
|
168
|
+
path: string;
|
|
169
|
+
message: string;
|
|
170
|
+
}[];
|
|
171
|
+
};
|
|
172
|
+
outputFormat: "json";
|
|
173
|
+
status: 400;
|
|
174
|
+
} | {
|
|
175
|
+
input: import("hono/types").AddParam<{
|
|
176
|
+
json: {
|
|
177
|
+
amount: string;
|
|
178
|
+
input: string;
|
|
179
|
+
output: string;
|
|
180
|
+
slippage: number;
|
|
181
|
+
type: "buy" | "sell";
|
|
182
|
+
chainId?: number | undefined;
|
|
183
|
+
};
|
|
184
|
+
}, import("hono/types").MergePath<"/", `${path}/quote`>>;
|
|
185
|
+
output: {
|
|
186
|
+
calls: readonly {
|
|
187
|
+
data: `0x${string}`;
|
|
188
|
+
to: `0x${string}`;
|
|
189
|
+
}[];
|
|
190
|
+
input: {
|
|
191
|
+
amount: string;
|
|
192
|
+
name: string;
|
|
193
|
+
symbol: string;
|
|
194
|
+
token: `0x${string}`;
|
|
195
|
+
};
|
|
196
|
+
output: {
|
|
197
|
+
amount: string;
|
|
198
|
+
name: string;
|
|
199
|
+
symbol: string;
|
|
200
|
+
token: `0x${string}`;
|
|
201
|
+
};
|
|
202
|
+
slippage: number;
|
|
203
|
+
type: "buy" | "sell";
|
|
204
|
+
};
|
|
205
|
+
outputFormat: "json";
|
|
206
|
+
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
207
|
+
} | {
|
|
208
|
+
input: import("hono/types").AddParam<{
|
|
209
|
+
json: {
|
|
210
|
+
amount: string;
|
|
211
|
+
input: string;
|
|
212
|
+
output: string;
|
|
213
|
+
slippage: number;
|
|
214
|
+
type: "buy" | "sell";
|
|
215
|
+
chainId?: number | undefined;
|
|
216
|
+
};
|
|
217
|
+
}, import("hono/types").MergePath<"/", `${path}/quote`>>;
|
|
218
|
+
output: {
|
|
219
|
+
error: string;
|
|
220
|
+
};
|
|
221
|
+
outputFormat: "json";
|
|
222
|
+
status: 400;
|
|
223
|
+
};
|
|
224
|
+
}; }, "/", import("hono/types").MergePath<"/", `${path}/quote`>>>;
|
|
225
|
+
export declare namespace exchange {
|
|
226
|
+
/** Options for `exchange()`. */
|
|
227
|
+
type Options<path extends string = string> = from.Options & {
|
|
228
|
+
/**
|
|
229
|
+
* TTL in seconds for cached tokenlist responses. On-chain token metadata
|
|
230
|
+
* is cached without expiry (immutable per address).
|
|
231
|
+
* @default 600 (10 minutes)
|
|
232
|
+
*/
|
|
233
|
+
cacheTtl?: number | undefined;
|
|
234
|
+
/**
|
|
235
|
+
* Supported chains. The first chain is used to resolve the client.
|
|
236
|
+
* @default [tempo, tempoModerato, tempoDevnet]
|
|
237
|
+
*/
|
|
238
|
+
chains?: readonly [Chain, ...Chain[]] | undefined;
|
|
239
|
+
/**
|
|
240
|
+
* Kv store used to cache network responses. Provide `Kv.cloudflare(env.KV)`
|
|
241
|
+
* for cross-instance caching, or omit for an in-process LRU.
|
|
242
|
+
* @default Kv.memory()
|
|
243
|
+
*/
|
|
244
|
+
kv?: Kv.Kv | undefined;
|
|
245
|
+
/** Function to call before handling the request. */
|
|
246
|
+
onRequest?: ((request: Request) => void | Promise<void>) | undefined;
|
|
247
|
+
/** Path prefix for the exchange endpoints. @default '/exchange' */
|
|
248
|
+
path?: path | undefined;
|
|
249
|
+
/**
|
|
250
|
+
* Resolves the list of known tokens for a chain. Used to resolve symbol
|
|
251
|
+
* references (e.g. `"USDC.e"`) to addresses + metadata. Address references
|
|
252
|
+
* are matched against this list first, falling back to on-chain metadata.
|
|
253
|
+
* @default Fetches `https://tokenlist.tempo.xyz/list/:chainId`
|
|
254
|
+
*/
|
|
255
|
+
resolveTokens?: ((chainId: number) => readonly Token[] | Promise<readonly Token[]>) | undefined;
|
|
256
|
+
/** Transports keyed by chain ID. Defaults to `http()` per chain. */
|
|
257
|
+
transports?: Record<number, Transport> | undefined;
|
|
258
|
+
};
|
|
259
|
+
/** Resolved token metadata. */
|
|
260
|
+
type Token = {
|
|
261
|
+
/** Token address. */
|
|
262
|
+
address: Address;
|
|
263
|
+
/** Token decimals. */
|
|
264
|
+
decimals: number;
|
|
265
|
+
/** Token name. */
|
|
266
|
+
name: string;
|
|
267
|
+
/** Token symbol. */
|
|
268
|
+
symbol: string;
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=exchange.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../../../../src/server/internal/handlers/exchange.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EAMV,KAAK,SAAS,EACf,MAAM,MAAM,CAAA;AAGb,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAI7B,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AAOjC,4EAA4E;AAC5E,yBAAiB,MAAM,CAAC;IAQtB,0CAA0C;IAC1C,UAAiB,KAAK,CAAC;QACrB,2BAA2B;QACpB,MAAM,UAAU;;;;;;;yBAOrB,CAAA;QASF,4BAA4B;QACrB,MAAM,OAAO;;;;;;;;;;;;;;;;;;;yBAalB,CAAA;KACH;IAED,0CAA0C;IAC1C,UAAiB,MAAM,CAAC;QACtB,uEAAuE;QAChE,MAAM,UAAU;;yBAErB,CAAA;QAEF,4BAA4B;QACrB,MAAM,OAAO;;;;;;;yBAElB,CAAA;KACH;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,GAAG,WAAW,EAC9D,OAAO,GAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAM,GA+HtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iEAAY,CAClC;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,gCAAgC;IAChC,KAAY,OAAO,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,GAAG;QACjE;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B;;;WAGG;QACH,MAAM,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;QACjD;;;;WAIG;QACH,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,SAAS,CAAA;QACtB,oDAAoD;QACpD,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAA;QACpE,mEAAmE;QACnE,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;QACvB;;;;;WAKG;QACH,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,KAAK,EAAE,GAAG,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;QAC/F,oEAAoE;QACpE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAA;KACnD,CAAA;IAED,+BAA+B;IAC/B,KAAY,KAAK,GAAG;QAClB,qBAAqB;QACrB,OAAO,EAAE,OAAO,CAAA;QAChB,sBAAsB;QACtB,QAAQ,EAAE,MAAM,CAAA;QAChB,kBAAkB;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,oBAAoB;QACpB,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF"}
|