tempo.ts 0.6.2 → 0.7.1

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 (91) hide show
  1. package/CHANGELOG.md +134 -0
  2. package/README.md +6 -2
  3. package/dist/ox/Transaction.js +1 -1
  4. package/dist/ox/Transaction.js.map +1 -1
  5. package/dist/server/Handler.d.ts +346 -0
  6. package/dist/server/Handler.d.ts.map +1 -0
  7. package/dist/server/Handler.js +441 -0
  8. package/dist/server/Handler.js.map +1 -0
  9. package/dist/server/Kv.d.ts +16 -0
  10. package/dist/server/Kv.d.ts.map +1 -0
  11. package/dist/server/Kv.js +25 -0
  12. package/dist/server/Kv.js.map +1 -0
  13. package/dist/server/index.d.ts +3 -0
  14. package/dist/server/index.d.ts.map +1 -0
  15. package/dist/server/index.js +3 -0
  16. package/dist/server/index.js.map +1 -0
  17. package/dist/server/internal/requestListener.d.ts +124 -0
  18. package/dist/server/internal/requestListener.d.ts.map +1 -0
  19. package/dist/server/internal/requestListener.js +174 -0
  20. package/dist/server/internal/requestListener.js.map +1 -0
  21. package/dist/viem/Actions/amm.d.ts +9 -41
  22. package/dist/viem/Actions/amm.d.ts.map +1 -1
  23. package/dist/viem/Actions/amm.js +15 -26
  24. package/dist/viem/Actions/amm.js.map +1 -1
  25. package/dist/viem/Actions/reward.d.ts +0 -1067
  26. package/dist/viem/Actions/reward.d.ts.map +1 -1
  27. package/dist/viem/Actions/reward.js +4 -212
  28. package/dist/viem/Actions/reward.js.map +1 -1
  29. package/dist/viem/Decorator.d.ts +0 -263
  30. package/dist/viem/Decorator.d.ts.map +1 -1
  31. package/dist/viem/Decorator.js +0 -10
  32. package/dist/viem/Decorator.js.map +1 -1
  33. package/dist/viem/Storage.d.ts +23 -0
  34. package/dist/viem/Storage.d.ts.map +1 -0
  35. package/dist/viem/Storage.js +47 -0
  36. package/dist/viem/Storage.js.map +1 -0
  37. package/dist/viem/Transport.d.ts +10 -1
  38. package/dist/viem/Transport.d.ts.map +1 -1
  39. package/dist/viem/Transport.js +22 -3
  40. package/dist/viem/Transport.js.map +1 -1
  41. package/dist/viem/internal/utils.d.ts +6 -0
  42. package/dist/viem/internal/utils.d.ts.map +1 -1
  43. package/dist/viem/internal/utils.js +24 -0
  44. package/dist/viem/internal/utils.js.map +1 -1
  45. package/dist/wagmi/Actions/reward.d.ts +0 -110
  46. package/dist/wagmi/Actions/reward.d.ts.map +1 -1
  47. package/dist/wagmi/Actions/reward.js +0 -121
  48. package/dist/wagmi/Actions/reward.js.map +1 -1
  49. package/dist/wagmi/Connector.d.ts +6 -17
  50. package/dist/wagmi/Connector.d.ts.map +1 -1
  51. package/dist/wagmi/Connector.js +17 -43
  52. package/dist/wagmi/Connector.js.map +1 -1
  53. package/dist/wagmi/Hooks/reward.d.ts +0 -88
  54. package/dist/wagmi/Hooks/reward.d.ts.map +1 -1
  55. package/dist/wagmi/Hooks/reward.js +0 -103
  56. package/dist/wagmi/Hooks/reward.js.map +1 -1
  57. package/dist/wagmi/KeyManager.d.ts +57 -0
  58. package/dist/wagmi/KeyManager.d.ts.map +1 -0
  59. package/dist/wagmi/KeyManager.js +101 -0
  60. package/dist/wagmi/KeyManager.js.map +1 -0
  61. package/dist/wagmi/index.d.ts +1 -0
  62. package/dist/wagmi/index.d.ts.map +1 -1
  63. package/dist/wagmi/index.js +1 -0
  64. package/dist/wagmi/index.js.map +1 -1
  65. package/package.json +8 -2
  66. package/src/ox/Transaction.ts +1 -1
  67. package/src/ox/e2e.test.ts +7 -0
  68. package/src/server/Handler.test.ts +566 -0
  69. package/src/server/Handler.ts +577 -0
  70. package/src/server/Kv.ts +40 -0
  71. package/src/server/index.ts +2 -0
  72. package/src/server/internal/requestListener.ts +285 -0
  73. package/src/viem/Actions/amm.test.ts +10 -284
  74. package/src/viem/Actions/amm.ts +32 -40
  75. package/src/viem/Actions/reward.test.ts +4 -212
  76. package/src/viem/Actions/reward.ts +4 -291
  77. package/src/viem/Decorator.ts +0 -294
  78. package/src/viem/Storage.ts +88 -0
  79. package/src/viem/Transport.ts +40 -2
  80. package/src/viem/e2e.test.ts +106 -3
  81. package/src/viem/internal/utils.ts +21 -0
  82. package/src/wagmi/Actions/amm.test.ts +7 -85
  83. package/src/wagmi/Actions/reward.test.ts +0 -99
  84. package/src/wagmi/Actions/reward.ts +0 -203
  85. package/src/wagmi/Connector.test.ts +4 -1
  86. package/src/wagmi/Connector.ts +24 -58
  87. package/src/wagmi/Hooks/amm.test.ts +8 -200
  88. package/src/wagmi/Hooks/reward.test.ts +1 -142
  89. package/src/wagmi/Hooks/reward.ts +0 -196
  90. package/src/wagmi/KeyManager.ts +159 -0
  91. package/src/wagmi/index.ts +1 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,139 @@
1
1
  # tempo.ts
2
2
 
3
+ ## 0.7.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`e2c53ba`](https://github.com/tempoxyz/tempo-ts/commit/e2c53ba9bebe8cbda19dfe531fef95d963fcd8af) Thanks [@jxom](https://github.com/jxom)! - Added back `amm` actions.
8
+
9
+ ## 0.7.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#88](https://github.com/tempoxyz/tempo-ts/pull/88) [`f6da019`](https://github.com/tempoxyz/tempo-ts/commit/f6da019ddcef6eb5c492e6bf853d2fc4e15fac64) Thanks [@jxom](https://github.com/jxom)! - Removed `userToken.amount` from `amm.mint`, and flattened the API:
14
+
15
+ ```diff
16
+ Actions.amm.mint({
17
+ - userToken: {
18
+ - address: '0x...',
19
+ - amount: 100n,
20
+ - },
21
+ + userTokenAddress: '0x...',
22
+ - validatorToken: {
23
+ - address: '0x...',
24
+ - amount: 100n,
25
+ - },
26
+ + validatorTokenAddress: '0x...',
27
+ + validatorTokenAmount: 100n,
28
+ to: '0x...',
29
+ })
30
+ ```
31
+
32
+ - [#88](https://github.com/tempoxyz/tempo-ts/pull/88) [`f6da019`](https://github.com/tempoxyz/tempo-ts/commit/f6da019ddcef6eb5c492e6bf853d2fc4e15fac64) Thanks [@jxom](https://github.com/jxom)! - Removed the following APIs:
33
+
34
+ #### `tempo.ts/viem`
35
+ - `Actions.amm.rebalanceSwap`
36
+ - `Actions.amm.rebalanceSwapSync`
37
+ - `Actions.amm.watchRebalanceSwap`
38
+ - `Actions.amm.watchFeeSwap`
39
+ - `Actions.amm.watchBurn`
40
+ - `Actions.reward.cancel`
41
+ - `Actions.reward.cancelSync`
42
+ - `Actions.reward.getStream`
43
+
44
+ #### `tempo.ts/wagmi`
45
+ - `Actions.amm.rebalanceSwap`
46
+ - `Actions.amm.rebalanceSwapSync`
47
+ - `Actions.amm.burn`
48
+ - `Actions.amm.burnSync`
49
+ - `Actions.amm.watchRebalanceSwap`
50
+ - `Actions.amm.watchFeeSwap`
51
+ - `Actions.amm.watchBurn`
52
+ - `Actions.reward.cancel`
53
+ - `Actions.reward.cancelSync`
54
+ - `Actions.reward.getStream`
55
+ - `Hooks.amm.useBurn`
56
+ - `Hooks.amm.useBurnSync`
57
+ - `Hooks.amm.useWatchMint`
58
+ - `Hooks.reward.useCancel`
59
+ - `Hooks.reward.useCancelSync`
60
+ - `Hooks.reward.useGetStream`
61
+
62
+ ### Patch Changes
63
+
64
+ - [#87](https://github.com/tempoxyz/tempo-ts/pull/87) [`e5ff1a4`](https://github.com/tempoxyz/tempo-ts/commit/e5ff1a41bf53834348604a55480ab5acc0492a9c) Thanks [@jxom](https://github.com/jxom)! - Added `Handler.feePayer` server handler for fee sponsorship.
65
+
66
+ `Handler.feePayer` returns a `fetch` or `listener` handler that can be used by the majority of
67
+ server frameworks.
68
+
69
+ For example:
70
+
71
+ ```ts
72
+ import { privateKeyToAccount } from "viem/accounts";
73
+ import { Handler } from "tempo.ts/server";
74
+ import { client } from "./viem.config";
75
+
76
+ const handler = Handler.feePayer({
77
+ account: privateKeyToAccount("0x..."),
78
+ client,
79
+ });
80
+
81
+ // Node.js
82
+ import { createServer } from "node:http";
83
+ const server = createServer(handler.listener);
84
+ server.listen(3000);
85
+
86
+ // Bun
87
+ Bun.serve(handler);
88
+
89
+ // Cloudflare
90
+ export default {
91
+ fetch(request) {
92
+ return handler.fetch(request);
93
+ },
94
+ };
95
+
96
+ // Express
97
+ import express from "express";
98
+ const app = express();
99
+ app.use(handler.listener);
100
+ app.listen(3000);
101
+ ```
102
+
103
+ - [#82](https://github.com/tempoxyz/tempo-ts/pull/82) [`94388bc`](https://github.com/tempoxyz/tempo-ts/commit/94388bcaa88ae85c4848c5bdfce6254f5b21218d) Thanks [@jxom](https://github.com/jxom)! - Added `tempo.ts/server` entrypoint with a `Handler` module. The `Handler` module provides a `keyManager` handler to instantiate a lightweight Key Manager API to use for WebAuthn credential management.
104
+
105
+ Each `Handler` function returns a `fetch` or `listener` handler that can be used by the majority of
106
+ server frameworks.
107
+
108
+ For example:
109
+
110
+ ```ts
111
+ import { Handler, Kv } from "tempo.ts/server";
112
+
113
+ const handler = Handler.keyManager({ kv: Kv.memory() });
114
+
115
+ // Node.js
116
+ import { createServer } from "node:http";
117
+ const server = createServer(handler.listener);
118
+ server.listen(3000);
119
+
120
+ // Bun
121
+ Bun.serve(handler);
122
+
123
+ // Cloudflare
124
+ export default {
125
+ fetch(request) {
126
+ return handler.fetch(request);
127
+ },
128
+ };
129
+
130
+ // Express
131
+ import express from "express";
132
+ const app = express();
133
+ app.use(handler.listener);
134
+ app.listen(3000);
135
+ ```
136
+
3
137
  ## 0.6.2
4
138
 
5
139
  ### Patch Changes
package/README.md CHANGED
@@ -71,11 +71,15 @@ const transaction = await client.getTransaction({ hash });
71
71
  ```ts
72
72
  import { createConfig, http } from 'wagmi';
73
73
  import { tempo } from 'tempo.ts/chains';
74
- import { Actions, Hooks, webauthn } from 'tempo.ts/wagmi';
74
+ import { Actions, Hooks, KeyManager, webauthn } from 'tempo.ts/wagmi';
75
75
 
76
76
  export const config = createConfig({
77
77
  chains: [tempo({ feeToken: '0x20c0000000000000000000000000000000000001' })],
78
- connectors: [webAuthn()],
78
+ connectors: [
79
+ webAuthn({
80
+ keyManager: KeyManager.localStorage(),
81
+ })
82
+ ],
79
83
  transports: {
80
84
  [tempo.id]: http(),
81
85
  },
@@ -64,7 +64,7 @@ export function fromRpc(transaction, _options = {}) {
64
64
  if (transaction.calls)
65
65
  transaction_.calls = transaction.calls.map((call) => ({
66
66
  to: call.to,
67
- value: call.value ? BigInt(call.value) : undefined,
67
+ value: call.value && call.value !== '0x' ? BigInt(call.value) : undefined,
68
68
  // @ts-expect-error
69
69
  data: call.input || call.data || '0x',
70
70
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../src/ox/Transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../src/ox/Transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,346 @@
1
+ import { type Router } from '@remix-run/fetch-router';
2
+ import { RpcRequest } from 'ox';
3
+ import * as Hex from 'ox/Hex';
4
+ import type * as WebAuthnP256 from 'ox/WebAuthnP256';
5
+ import { type Chain, type Client, type Transport } from 'viem';
6
+ import type { LocalAccount } from 'viem/accounts';
7
+ import type { OneOf } from '../internal/types.js';
8
+ import type * as Kv from './Kv.js';
9
+ export type Handler = Router & {
10
+ listener: (req: any, res: any) => void;
11
+ };
12
+ /**
13
+ * Instantiates a new request handler.
14
+ *
15
+ * @param options - constructor options
16
+ * @returns Handler instance
17
+ */
18
+ export declare function from(): Handler;
19
+ /**
20
+ * Defines a Key Manager request handler.
21
+ *
22
+ * @example
23
+ * ### Cloudflare Worker
24
+ *
25
+ * ```ts
26
+ * import { env } from 'cloudflare:workers'
27
+ * import { Handler } from 'tempo.ts/server'
28
+ *
29
+ * export default {
30
+ * fetch(request) {
31
+ * return Handler.keyManager({
32
+ * kv: Kv.cloudflare(env.KEY_STORE),
33
+ * }).fetch(request)
34
+ * }
35
+ * }
36
+ * ```
37
+ *
38
+ * @example
39
+ * ### Next.js
40
+ *
41
+ * ```ts
42
+ * import { Handler } from 'tempo.ts/server'
43
+ *
44
+ * const handler = Handler.keyManager({
45
+ * kv: Kv.memory(),
46
+ * })
47
+ *
48
+ * export GET = handler.fetch
49
+ * export POST = handler.fetch
50
+ * ```
51
+ *
52
+ * @example
53
+ * ### Hono
54
+ *
55
+ * ```ts
56
+ * import { Handler } from 'tempo.ts/server'
57
+ *
58
+ * const handler = Handler.keyManager({
59
+ * kv: Kv.memory(),
60
+ * })
61
+ *
62
+ * const app = new Hono()
63
+ * app.all('*', handler)
64
+ *
65
+ * export default app
66
+ * ```
67
+ *
68
+ * @example
69
+ * ### Node.js
70
+ *
71
+ * ```ts
72
+ * import { Handler } from 'tempo.ts/server'
73
+ *
74
+ * const handler = Handler.keyManager({
75
+ * kv: Kv.memory(),
76
+ * })
77
+ *
78
+ * const server = createServer(handler.listener)
79
+ * server.listen(3000)
80
+ * ```
81
+ *
82
+ * @example
83
+ * ### Bun
84
+ *
85
+ * ```ts
86
+ * import { Handler } from 'tempo.ts/server'
87
+ *
88
+ * const handler = Handler.keyManager({
89
+ * kv: Kv.memory(),
90
+ * })
91
+ *
92
+ * Bun.serve(handler)
93
+ * ```
94
+ *
95
+ * @example
96
+ * ### Deno
97
+ *
98
+ * ```ts
99
+ * import { Handler } from 'tempo.ts/server'
100
+ *
101
+ * const handler = Handler.keyManager({
102
+ * kv: Kv.memory(),
103
+ * })
104
+ *
105
+ * Deno.serve(handler)
106
+ * ```
107
+ *
108
+ * @example
109
+ * ### Express
110
+ *
111
+ * ```ts
112
+ * import { Handler } from 'tempo.ts/server'
113
+ *
114
+ * const handler = Handler.keyManager({
115
+ * kv: Kv.memory(),
116
+ * })
117
+ *
118
+ * const app = express()
119
+ * app.use(handler.listener)
120
+ * app.listen(3000)
121
+ * ```
122
+ *
123
+ * @param options - Options.
124
+ * @returns Request handler.
125
+ */
126
+ export declare function keyManager(options: keyManager.Options): Handler;
127
+ export declare namespace keyManager {
128
+ type Options = {
129
+ /** The KV store to use for key management. */
130
+ kv: Kv.Kv;
131
+ /** The path to use for the handler. */
132
+ path?: string | undefined;
133
+ /** The RP to use for WebAuthn. */
134
+ rp?: string | {
135
+ id: string;
136
+ name?: string | undefined;
137
+ } | undefined;
138
+ };
139
+ type ChallengeResponse = {
140
+ challenge: Hex.Hex;
141
+ rp?: {
142
+ id: string;
143
+ name: string;
144
+ } | undefined;
145
+ };
146
+ type GetPublicKeyParameters = {
147
+ credential: WebAuthnP256.P256Credential['raw'];
148
+ };
149
+ type SetPublicKeyParameters = {
150
+ credential: WebAuthnP256.P256Credential['raw'];
151
+ publicKey: Hex.Hex;
152
+ };
153
+ }
154
+ /**
155
+ * Instantiates a fee payer service request handler that can be used to
156
+ * sponsor the fee for user transactions.
157
+ *
158
+ * @example
159
+ * ### Cloudflare Worker
160
+ *
161
+ * ```ts
162
+ * import { createClient, http } from 'viem'
163
+ * import { privateKeyToAccount } from 'viem/accounts'
164
+ * import { tempo } from 'tempo.ts/chains'
165
+ * import { Handler } from 'tempo.ts/server'
166
+ *
167
+ * const client = createClient({
168
+ * chain: tempo({ feeToken: '0x20c0000000000000000000000000000000000001' }),
169
+ * transport: http(),
170
+ * })
171
+ *
172
+ * export default {
173
+ * fetch(request) {
174
+ * return Handler.feePayer({
175
+ * account: privateKeyToAccount('0x...'),
176
+ * client,
177
+ * }).fetch(request)
178
+ * }
179
+ * }
180
+ * ```
181
+ *
182
+ * @example
183
+ * ### Next.js
184
+ *
185
+ * ```ts
186
+ * import { createClient, http } from 'viem'
187
+ * import { privateKeyToAccount } from 'viem/accounts'
188
+ * import { tempo } from 'tempo.ts/chains'
189
+ * import { Handler } from 'tempo.ts/server'
190
+ *
191
+ * const client = createClient({
192
+ * chain: tempo({ feeToken: '0x20c0000000000000000000000000000000000001' }),
193
+ * transport: http(),
194
+ * })
195
+ *
196
+ * const handler = Handler.feePayer({
197
+ * account: privateKeyToAccount('0x...'),
198
+ * client,
199
+ * })
200
+ *
201
+ * export GET = handler.fetch
202
+ * export POST = handler.fetch
203
+ * ```
204
+ *
205
+ * @example
206
+ * ### Hono
207
+ *
208
+ * ```ts
209
+ * import { createClient, http } from 'viem'
210
+ * import { privateKeyToAccount } from 'viem/accounts'
211
+ * import { tempo } from 'tempo.ts/chains'
212
+ * import { Handler } from 'tempo.ts/server'
213
+ *
214
+ * const client = createClient({
215
+ * chain: tempo({ feeToken: '0x20c0000000000000000000000000000000000001' }),
216
+ * transport: http(),
217
+ * })
218
+ *
219
+ * const handler = Handler.feePayer({
220
+ * account: privateKeyToAccount('0x...'),
221
+ * client,
222
+ * })
223
+ *
224
+ * const app = new Hono()
225
+ * app.all('*', handler)
226
+ *
227
+ * export default app
228
+ * ```
229
+ *
230
+ * @example
231
+ * ### Node.js
232
+ *
233
+ * ```ts
234
+ * import { createClient, http } from 'viem'
235
+ * import { privateKeyToAccount } from 'viem/accounts'
236
+ * import { tempo } from 'tempo.ts/chains'
237
+ * import { Handler } from 'tempo.ts/server'
238
+ *
239
+ * const client = createClient({
240
+ * chain: tempo({ feeToken: '0x20c0000000000000000000000000000000000001' }),
241
+ * transport: http(),
242
+ * })
243
+ *
244
+ * const handler = Handler.feePayer({
245
+ * account: privateKeyToAccount('0x...'),
246
+ * client,
247
+ * })
248
+ *
249
+ * const server = createServer(handler.listener)
250
+ * server.listen(3000)
251
+ * ```
252
+ *
253
+ * @example
254
+ * ### Bun
255
+ *
256
+ * ```ts
257
+ * import { createClient, http } from 'viem'
258
+ * import { privateKeyToAccount } from 'viem/accounts'
259
+ * import { tempo } from 'tempo.ts/chains'
260
+ * import { Handler } from 'tempo.ts/server'
261
+ *
262
+ * const client = createClient({
263
+ * account: privateKeyToAccount('0x...'),
264
+ * chain: tempo({
265
+ * feeToken: '0x20c0000000000000000000000000000000000001',
266
+ * }),
267
+ * transport: http(),
268
+ * })
269
+ *
270
+ * const handler = Handler.feePayer({
271
+ * account: privateKeyToAccount('0x...'),
272
+ * client,
273
+ * })
274
+ *
275
+ * Bun.serve(handler)
276
+ * ```
277
+ *
278
+ * @example
279
+ * ### Deno
280
+ *
281
+ * ```ts
282
+ * import { createClient, http } from 'viem'
283
+ * import { privateKeyToAccount } from 'viem/accounts'
284
+ * import { tempo } from 'tempo.ts/chains'
285
+ * import { Handler } from 'tempo.ts/server'
286
+ *
287
+ * const client = createClient({
288
+ * chain: tempo({ feeToken: '0x20c0000000000000000000000000000000000001' }),
289
+ * transport: http(),
290
+ * })
291
+ *
292
+ * const handler = Handler.feePayer({
293
+ * account: privateKeyToAccount('0x...'),
294
+ * client,
295
+ * })
296
+ *
297
+ * Deno.serve(handler)
298
+ * ```
299
+ *
300
+ * @example
301
+ * ### Express
302
+ *
303
+ * ```ts
304
+ * import { createClient, http } from 'viem'
305
+ * import { privateKeyToAccount } from 'viem/accounts'
306
+ * import { tempo } from 'tempo.ts/chains'
307
+ * import { Handler } from 'tempo.ts/server'
308
+ *
309
+ * const client = createClient({
310
+ * chain: tempo({ feeToken: '0x20c0000000000000000000000000000000000001' }),
311
+ * transport: http(),
312
+ * })
313
+ *
314
+ * const handler = Handler.feePayer({
315
+ * account: privateKeyToAccount('0x...'),
316
+ * client,
317
+ * })
318
+ *
319
+ * const app = express()
320
+ * app.use(handler.listener)
321
+ * app.listen(3000)
322
+ * ```
323
+ *
324
+ * @param options - Options.
325
+ * @returns Request handler.
326
+ */
327
+ export declare function feePayer(options: feePayer.Options): Handler;
328
+ export declare namespace feePayer {
329
+ type Options = {
330
+ /** Account to use as the fee payer. */
331
+ account: LocalAccount;
332
+ /** Function to call before handling the request. */
333
+ onRequest?: (request: RpcRequest.RpcRequest) => Promise<void>;
334
+ /** Path to use for the handler. */
335
+ path?: string | undefined;
336
+ } & OneOf<{
337
+ /** Client to use. */
338
+ client: Client;
339
+ } | {
340
+ /** Chain to use. */
341
+ chain: Chain;
342
+ /** Transport to use. */
343
+ transport: Transport;
344
+ }>;
345
+ }
346
+ //# sourceMappingURL=Handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Handler.d.ts","sourceRoot":"","sources":["../../src/server/Handler.ts"],"names":[],"mappings":"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"}