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.
Files changed (49) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/core/ExecutionError.d.ts.map +1 -1
  3. package/dist/core/ExecutionError.js +14 -14
  4. package/dist/core/ExecutionError.js.map +1 -1
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/server/Handler.d.ts +41 -2
  10. package/dist/server/Handler.d.ts.map +1 -1
  11. package/dist/server/Handler.js +27 -14
  12. package/dist/server/Handler.js.map +1 -1
  13. package/dist/server/index.d.ts +1 -0
  14. package/dist/server/index.d.ts.map +1 -1
  15. package/dist/server/index.js +1 -0
  16. package/dist/server/index.js.map +1 -1
  17. package/dist/server/internal/handlers/exchange.d.ts +271 -0
  18. package/dist/server/internal/handlers/exchange.d.ts.map +1 -0
  19. package/dist/server/internal/handlers/exchange.js +313 -0
  20. package/dist/server/internal/handlers/exchange.js.map +1 -0
  21. package/dist/server/internal/handlers/relay.d.ts.map +1 -1
  22. package/dist/server/internal/handlers/relay.js +7 -2
  23. package/dist/server/internal/handlers/relay.js.map +1 -1
  24. package/dist/server/internal/hono.d.ts +20 -0
  25. package/dist/server/internal/hono.d.ts.map +1 -0
  26. package/dist/server/internal/hono.js +24 -0
  27. package/dist/server/internal/hono.js.map +1 -0
  28. package/dist/server/internal/kv.d.ts +19 -0
  29. package/dist/server/internal/kv.d.ts.map +1 -0
  30. package/dist/server/internal/kv.js +17 -0
  31. package/dist/server/internal/kv.js.map +1 -0
  32. package/dist/server/internal/zod.d.ts +30 -0
  33. package/dist/server/internal/zod.d.ts.map +1 -0
  34. package/dist/server/internal/zod.js +53 -0
  35. package/dist/server/internal/zod.js.map +1 -0
  36. package/package.json +1 -1
  37. package/src/core/ExecutionError.ts +16 -14
  38. package/src/index.ts +1 -0
  39. package/src/server/Handler.test-d.ts +85 -0
  40. package/src/server/Handler.ts +56 -17
  41. package/src/server/index.ts +2 -0
  42. package/src/server/internal/handlers/exchange.test-d.ts +163 -0
  43. package/src/server/internal/handlers/exchange.test.ts +632 -0
  44. package/src/server/internal/handlers/exchange.ts +479 -0
  45. package/src/server/internal/handlers/relay.test.ts +43 -0
  46. package/src/server/internal/handlers/relay.ts +6 -2
  47. package/src/server/internal/hono.ts +30 -0
  48. package/src/server/internal/kv.ts +35 -0
  49. 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,CAkGjD,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"}
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: 'Below minimum order size: {0}.',
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: 'Tokens must be different.',
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: 'Insufficient liquidity.',
27
- InsufficientOutput: 'Insufficient output amount.',
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: 'Invalid base token.',
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: 'Invalid flip tick.',
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: 'Invalid tick.',
53
- InvalidToken: 'Invalid token.',
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: 'Maximum input exceeded.',
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: 'Order does not exist.',
73
- OrderNotStale: 'Order is not stale.',
74
- PairAlreadyExists: 'Pair already exists.',
75
- PairDoesNotExist: 'Pair does not exist.',
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: 'Tick {0} is out of bounds.',
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":"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"}
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';
@@ -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"}
@@ -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
- export type Handler = Hono & {
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
- export declare function compose(handlers: Array<Handler>, options?: compose.Options): Handler;
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;AAI3B,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAE1D,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG;IAC3B,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;CACvC,CAAA;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,GAAE,OAAO,CAAC,OAAY,GAAG,OAAO,CAmBxF;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"}
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"}
@@ -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 path = options.path ?? '/';
30
+ const mountPath = (options.path ?? '/');
8
31
  const app = from(options);
9
- app.all('*', async (c) => {
10
- const url = new URL(c.req.url);
11
- if (!url.pathname.startsWith(path))
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":"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"}
1
+ {"version":3,"file":"Handler.js","sourceRoot":"","sources":["../../src/server/Handler.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ export { hc } from 'hono/client';
1
2
  export * as CliAuth from './CliAuth.js';
2
3
  export * as Handler from './Handler.js';
3
4
  export * as Kv from './Kv.js';
@@ -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"}
@@ -1,3 +1,4 @@
1
+ export { hc } from 'hono/client';
1
2
  export * as CliAuth from './CliAuth.js';
2
3
  export * as Handler from './Handler.js';
3
4
  export * as Kv from './Kv.js';
@@ -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"}