mppx 0.6.27 → 0.6.29
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 +25 -0
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +16 -10
- package/dist/Challenge.js.map +1 -1
- package/dist/Method.d.ts +1 -1
- package/dist/Method.d.ts.map +1 -1
- package/dist/Store.d.ts +32 -9
- package/dist/Store.d.ts.map +1 -1
- package/dist/Store.js +42 -10
- package/dist/Store.js.map +1 -1
- package/dist/client/Methods.d.ts +1 -0
- package/dist/client/Methods.d.ts.map +1 -1
- package/dist/client/Methods.js +1 -0
- package/dist/client/Methods.js.map +1 -1
- package/dist/client/Mppx.d.ts +3 -3
- package/dist/client/Mppx.d.ts.map +1 -1
- package/dist/client/Mppx.js +1 -0
- package/dist/client/Mppx.js.map +1 -1
- package/dist/client/Transport.d.ts +10 -3
- package/dist/client/Transport.d.ts.map +1 -1
- package/dist/client/Transport.js +60 -7
- package/dist/client/Transport.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/internal/Fetch.d.ts +3 -0
- package/dist/client/internal/Fetch.d.ts.map +1 -1
- package/dist/client/internal/Fetch.js +12 -20
- package/dist/client/internal/Fetch.js.map +1 -1
- package/dist/evm/Assets.d.ts +2 -0
- package/dist/evm/Assets.d.ts.map +1 -0
- package/dist/evm/Assets.js +2 -0
- package/dist/evm/Assets.js.map +1 -0
- package/dist/evm/Chains.d.ts +5 -0
- package/dist/evm/Chains.d.ts.map +1 -0
- package/dist/evm/Chains.js +5 -0
- package/dist/evm/Chains.js.map +1 -0
- package/dist/evm/Methods.d.ts +68 -0
- package/dist/evm/Methods.d.ts.map +1 -0
- package/dist/evm/Methods.js +28 -0
- package/dist/evm/Methods.js.map +1 -0
- package/dist/evm/Types.d.ts +143 -0
- package/dist/evm/Types.d.ts.map +1 -0
- package/dist/evm/Types.js +102 -0
- package/dist/evm/Types.js.map +1 -0
- package/dist/evm/client/Charge.d.ts +102 -0
- package/dist/evm/client/Charge.d.ts.map +1 -0
- package/dist/evm/client/Charge.js +141 -0
- package/dist/evm/client/Charge.js.map +1 -0
- package/dist/evm/client/Methods.d.ts +81 -0
- package/dist/evm/client/Methods.d.ts.map +1 -0
- package/dist/evm/client/Methods.js +16 -0
- package/dist/evm/client/Methods.js.map +1 -0
- package/dist/evm/client/index.d.ts +6 -0
- package/dist/evm/client/index.d.ts.map +1 -0
- package/dist/evm/client/index.js +6 -0
- package/dist/evm/client/index.js.map +1 -0
- package/dist/evm/index.d.ts +9 -0
- package/dist/evm/index.d.ts.map +1 -0
- package/dist/evm/index.js +8 -0
- package/dist/evm/index.js.map +1 -0
- package/dist/evm/server/Charge.d.ts +62 -0
- package/dist/evm/server/Charge.d.ts.map +1 -0
- package/dist/evm/server/Charge.js +172 -0
- package/dist/evm/server/Charge.js.map +1 -0
- package/dist/evm/server/Methods.d.ts +80 -0
- package/dist/evm/server/Methods.d.ts.map +1 -0
- package/dist/evm/server/Methods.js +16 -0
- package/dist/evm/server/Methods.js.map +1 -0
- package/dist/evm/server/index.d.ts +6 -0
- package/dist/evm/server/index.d.ts.map +1 -0
- package/dist/evm/server/index.js +6 -0
- package/dist/evm/server/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/HeaderCodec.d.ts +18 -0
- package/dist/internal/HeaderCodec.d.ts.map +1 -0
- package/dist/internal/HeaderCodec.js +31 -0
- package/dist/internal/HeaderCodec.js.map +1 -0
- package/dist/middlewares/elysia.d.ts.map +1 -1
- package/dist/middlewares/elysia.js +2 -3
- package/dist/middlewares/elysia.js.map +1 -1
- package/dist/middlewares/express.js +2 -1
- package/dist/middlewares/express.js.map +1 -1
- package/dist/proxy/internal/Headers.d.ts +13 -1
- package/dist/proxy/internal/Headers.d.ts.map +1 -1
- package/dist/proxy/internal/Headers.js +25 -2
- package/dist/proxy/internal/Headers.js.map +1 -1
- package/dist/proxy/services/openai.d.ts.map +1 -1
- package/dist/proxy/services/openai.js +2 -0
- package/dist/proxy/services/openai.js.map +1 -1
- package/dist/server/Methods.d.ts +1 -0
- package/dist/server/Methods.d.ts.map +1 -1
- package/dist/server/Methods.js +1 -0
- package/dist/server/Methods.js.map +1 -1
- package/dist/server/Mppx.d.ts.map +1 -1
- package/dist/server/Mppx.js +90 -12
- package/dist/server/Mppx.js.map +1 -1
- package/dist/server/Transport.d.ts +10 -0
- package/dist/server/Transport.d.ts.map +1 -1
- package/dist/server/Transport.js +9 -0
- package/dist/server/Transport.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/stripe/server/Charge.d.ts +31 -1
- package/dist/stripe/server/Charge.d.ts.map +1 -1
- package/dist/stripe/server/Charge.js +88 -11
- package/dist/stripe/server/Charge.js.map +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
- package/dist/stripe/server/internal/html.gen.js +1 -1
- package/dist/stripe/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/client/ChannelOps.d.ts +3 -3
- package/dist/tempo/client/ChannelOps.d.ts.map +1 -1
- package/dist/tempo/client/ChannelOps.js +13 -6
- package/dist/tempo/client/ChannelOps.js.map +1 -1
- package/dist/tempo/client/Charge.d.ts.map +1 -1
- package/dist/tempo/client/Charge.js +8 -5
- package/dist/tempo/client/Charge.js.map +1 -1
- package/dist/tempo/client/Methods.d.ts +0 -1
- package/dist/tempo/client/Methods.d.ts.map +1 -1
- package/dist/tempo/client/Session.d.ts +2 -4
- package/dist/tempo/client/Session.d.ts.map +1 -1
- package/dist/tempo/client/Session.js +10 -12
- package/dist/tempo/client/Session.js.map +1 -1
- package/dist/tempo/client/SessionManager.d.ts +3 -3
- package/dist/tempo/client/SessionManager.d.ts.map +1 -1
- package/dist/tempo/client/SessionManager.js +1 -1
- package/dist/tempo/client/SessionManager.js.map +1 -1
- package/dist/tempo/internal/account.d.ts +5 -0
- package/dist/tempo/internal/account.d.ts.map +1 -1
- package/dist/tempo/internal/account.js +8 -0
- package/dist/tempo/internal/account.js.map +1 -1
- package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.js +5 -2
- package/dist/tempo/internal/fee-payer.js.map +1 -1
- package/dist/tempo/server/Charge.d.ts +6 -0
- package/dist/tempo/server/Charge.d.ts.map +1 -1
- package/dist/tempo/server/Charge.js +30 -3
- package/dist/tempo/server/Charge.js.map +1 -1
- package/dist/tempo/server/Session.d.ts +6 -0
- package/dist/tempo/server/Session.d.ts.map +1 -1
- package/dist/tempo/server/Session.js +14 -13
- package/dist/tempo/server/Session.js.map +1 -1
- package/dist/tempo/server/Subscription.d.ts +6 -0
- package/dist/tempo/server/Subscription.d.ts.map +1 -1
- package/dist/tempo/server/Subscription.js +1 -1
- package/dist/tempo/server/Subscription.js.map +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/dist/tempo/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/session/Chain.d.ts +2 -0
- package/dist/tempo/session/Chain.d.ts.map +1 -1
- package/dist/tempo/session/Chain.js +8 -8
- package/dist/tempo/session/Chain.js.map +1 -1
- package/dist/tempo/session/Voucher.d.ts +4 -3
- package/dist/tempo/session/Voucher.d.ts.map +1 -1
- package/dist/tempo/session/Voucher.js +71 -44
- package/dist/tempo/session/Voucher.js.map +1 -1
- package/dist/tempo/session/Ws.d.ts.map +1 -1
- package/dist/tempo/session/Ws.js +15 -0
- package/dist/tempo/session/Ws.js.map +1 -1
- package/dist/tempo/subscription/KeyAuthorization.d.ts +2 -2
- package/dist/x402/Assets.d.ts +29 -0
- package/dist/x402/Assets.d.ts.map +1 -0
- package/dist/x402/Assets.js +46 -0
- package/dist/x402/Assets.js.map +1 -0
- package/dist/x402/Header.d.ts +14 -0
- package/dist/x402/Header.d.ts.map +1 -0
- package/dist/x402/Header.js +18 -0
- package/dist/x402/Header.js.map +1 -0
- package/dist/x402/Types.d.ts +289 -0
- package/dist/x402/Types.d.ts.map +1 -0
- package/dist/x402/Types.js +139 -0
- package/dist/x402/Types.js.map +1 -0
- package/dist/x402/client/Exact.d.ts +38 -0
- package/dist/x402/client/Exact.d.ts.map +1 -0
- package/dist/x402/client/Exact.js +141 -0
- package/dist/x402/client/Exact.js.map +1 -0
- package/dist/x402/index.d.ts +6 -0
- package/dist/x402/index.d.ts.map +1 -0
- package/dist/x402/index.js +6 -0
- package/dist/x402/index.js.map +1 -0
- package/dist/x402/internal/ChallengeBrand.d.ts +5 -0
- package/dist/x402/internal/ChallengeBrand.d.ts.map +1 -0
- package/dist/x402/internal/ChallengeBrand.js +13 -0
- package/dist/x402/internal/ChallengeBrand.js.map +1 -0
- package/dist/x402/internal/RouteBinding.d.ts +8 -0
- package/dist/x402/internal/RouteBinding.d.ts.map +1 -0
- package/dist/x402/internal/RouteBinding.js +12 -0
- package/dist/x402/internal/RouteBinding.js.map +1 -0
- package/dist/x402/server/EvmCharge.d.ts +50 -0
- package/dist/x402/server/EvmCharge.d.ts.map +1 -0
- package/dist/x402/server/EvmCharge.js +301 -0
- package/dist/x402/server/EvmCharge.js.map +1 -0
- package/dist/x402/server/Facilitator.d.ts +12 -0
- package/dist/x402/server/Facilitator.d.ts.map +1 -0
- package/dist/x402/server/Facilitator.js +42 -0
- package/dist/x402/server/Facilitator.js.map +1 -0
- package/package.json +41 -21
- package/src/Challenge.test.ts +28 -0
- package/src/Challenge.ts +17 -10
- package/src/Method.ts +1 -1
- package/src/Store.test-d.ts +58 -0
- package/src/Store.test.ts +77 -0
- package/src/Store.ts +155 -74
- package/src/client/Methods.ts +1 -0
- package/src/client/Mppx.ts +4 -3
- package/src/client/Transport.test.ts +165 -30
- package/src/client/Transport.ts +76 -8
- package/src/client/index.ts +1 -1
- package/src/client/internal/Fetch.test.ts +31 -2
- package/src/client/internal/Fetch.ts +26 -19
- package/src/evm/Assets.ts +1 -0
- package/src/evm/Chains.ts +5 -0
- package/src/evm/Methods.ts +44 -0
- package/src/evm/PublicInterface.test-d.ts +109 -0
- package/src/evm/Types.ts +140 -0
- package/src/evm/client/Charge.test.ts +99 -0
- package/src/evm/client/Charge.ts +198 -0
- package/src/evm/client/Methods.ts +19 -0
- package/src/evm/client/index.ts +5 -0
- package/src/evm/index.ts +13 -0
- package/src/evm/server/Charge.test.ts +199 -0
- package/src/evm/server/Charge.ts +283 -0
- package/src/evm/server/Methods.ts +22 -0
- package/src/evm/server/index.ts +5 -0
- package/src/index.ts +2 -0
- package/src/internal/HeaderCodec.ts +36 -0
- package/src/middlewares/elysia.test.ts +25 -0
- package/src/middlewares/elysia.ts +1 -2
- package/src/middlewares/express.test.ts +28 -0
- package/src/middlewares/express.ts +1 -1
- package/src/middlewares/hono.test.ts +138 -2
- package/src/middlewares/nextjs.test.ts +22 -0
- package/src/proxy/internal/Headers.test.ts +38 -0
- package/src/proxy/internal/Headers.ts +26 -2
- package/src/proxy/services/openai.test.ts +57 -1
- package/src/proxy/services/openai.ts +2 -0
- package/src/server/Methods.ts +1 -0
- package/src/server/Mppx.test.ts +244 -1
- package/src/server/Mppx.ts +124 -11
- package/src/server/NodeListener.test.ts +28 -1
- package/src/server/Transport.test.ts +19 -0
- package/src/server/Transport.ts +20 -0
- package/src/server/index.ts +1 -1
- package/src/stripe/server/Charge.test.ts +215 -1
- package/src/stripe/server/Charge.ts +150 -20
- package/src/stripe/server/internal/html.gen.ts +1 -1
- package/src/tempo/AccessKeyAuthorization.test.ts +231 -0
- package/src/tempo/client/ChannelOps.test.ts +61 -7
- package/src/tempo/client/ChannelOps.ts +18 -7
- package/src/tempo/client/Charge.test.ts +126 -0
- package/src/tempo/client/Charge.ts +10 -6
- package/src/tempo/client/Session.test.ts +130 -1
- package/src/tempo/client/Session.ts +12 -19
- package/src/tempo/client/SessionManager.test.ts +69 -2
- package/src/tempo/client/SessionManager.ts +4 -4
- package/src/tempo/internal/account.ts +13 -0
- package/src/tempo/internal/fee-payer.test.ts +32 -2
- package/src/tempo/internal/fee-payer.ts +6 -2
- package/src/tempo/server/Charge.test.ts +91 -1
- package/src/tempo/server/Charge.ts +48 -2
- package/src/tempo/server/Session.test.ts +30 -0
- package/src/tempo/server/Session.ts +24 -17
- package/src/tempo/server/Subscription.ts +7 -1
- package/src/tempo/server/internal/html.gen.ts +1 -1
- package/src/tempo/session/Chain.test.ts +4 -4
- package/src/tempo/session/Chain.ts +10 -6
- package/src/tempo/session/ChannelStore.test.ts +21 -0
- package/src/tempo/session/Voucher.test.ts +230 -1
- package/src/tempo/session/Voucher.ts +96 -48
- package/src/tempo/session/Ws.test.ts +71 -0
- package/src/tempo/session/Ws.ts +13 -0
- package/src/tempo/subscription/Store.test.ts +55 -0
- package/src/x402/Assets.ts +65 -0
- package/src/x402/Exact.e2e.test.ts +448 -0
- package/src/x402/Header.test.ts +73 -0
- package/src/x402/Header.ts +34 -0
- package/src/x402/PublicInterface.test-d.ts +39 -0
- package/src/x402/Types.ts +248 -0
- package/src/x402/client/Exact.test.ts +180 -0
- package/src/x402/client/Exact.ts +198 -0
- package/src/x402/index.ts +5 -0
- package/src/x402/internal/ChallengeBrand.ts +14 -0
- package/src/x402/internal/RouteBinding.ts +18 -0
- package/src/x402/server/EvmCharge.ts +394 -0
- package/src/x402/server/Facilitator.test.ts +111 -0
- package/src/x402/server/Facilitator.ts +56 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mppx",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.6.
|
|
4
|
+
"version": "0.6.29",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"files": [
|
|
@@ -11,93 +11,113 @@
|
|
|
11
11
|
],
|
|
12
12
|
"exports": {
|
|
13
13
|
".": {
|
|
14
|
-
"types": "./dist/index.d.ts",
|
|
15
14
|
"src": "./src/index.ts",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
16
|
"default": "./dist/index.js"
|
|
17
17
|
},
|
|
18
18
|
"./cli": {
|
|
19
|
-
"types": "./dist/cli/config.d.ts",
|
|
20
19
|
"src": "./src/cli/config.ts",
|
|
20
|
+
"types": "./dist/cli/config.d.ts",
|
|
21
21
|
"default": "./dist/cli/config.js"
|
|
22
22
|
},
|
|
23
23
|
"./cli/plugins": {
|
|
24
|
-
"types": "./dist/cli/plugins/index.d.ts",
|
|
25
24
|
"src": "./src/cli/plugins/index.ts",
|
|
25
|
+
"types": "./dist/cli/plugins/index.d.ts",
|
|
26
26
|
"default": "./dist/cli/plugins/index.js"
|
|
27
27
|
},
|
|
28
28
|
"./client": {
|
|
29
|
-
"types": "./dist/client/index.d.ts",
|
|
30
29
|
"src": "./src/client/index.ts",
|
|
30
|
+
"types": "./dist/client/index.d.ts",
|
|
31
31
|
"default": "./dist/client/index.js"
|
|
32
32
|
},
|
|
33
33
|
"./discovery": {
|
|
34
|
-
"types": "./dist/discovery/index.d.ts",
|
|
35
34
|
"src": "./src/discovery/index.ts",
|
|
35
|
+
"types": "./dist/discovery/index.d.ts",
|
|
36
36
|
"default": "./dist/discovery/index.js"
|
|
37
37
|
},
|
|
38
|
+
"./evm": {
|
|
39
|
+
"src": "./src/evm/index.ts",
|
|
40
|
+
"types": "./dist/evm/index.d.ts",
|
|
41
|
+
"default": "./dist/evm/index.js"
|
|
42
|
+
},
|
|
43
|
+
"./evm/client": {
|
|
44
|
+
"src": "./src/evm/client/index.ts",
|
|
45
|
+
"types": "./dist/evm/client/index.d.ts",
|
|
46
|
+
"default": "./dist/evm/client/index.js"
|
|
47
|
+
},
|
|
48
|
+
"./evm/server": {
|
|
49
|
+
"src": "./src/evm/server/index.ts",
|
|
50
|
+
"types": "./dist/evm/server/index.d.ts",
|
|
51
|
+
"default": "./dist/evm/server/index.js"
|
|
52
|
+
},
|
|
38
53
|
"./mcp-sdk/client": {
|
|
39
|
-
"types": "./dist/mcp-sdk/client/index.d.ts",
|
|
40
54
|
"src": "./src/mcp-sdk/client/index.ts",
|
|
55
|
+
"types": "./dist/mcp-sdk/client/index.d.ts",
|
|
41
56
|
"default": "./dist/mcp-sdk/client/index.js"
|
|
42
57
|
},
|
|
43
58
|
"./mcp-sdk/server": {
|
|
44
|
-
"types": "./dist/mcp-sdk/server/index.d.ts",
|
|
45
59
|
"src": "./src/mcp-sdk/server/index.ts",
|
|
60
|
+
"types": "./dist/mcp-sdk/server/index.d.ts",
|
|
46
61
|
"default": "./dist/mcp-sdk/server/index.js"
|
|
47
62
|
},
|
|
48
63
|
"./proxy": {
|
|
49
|
-
"types": "./dist/proxy/index.d.ts",
|
|
50
64
|
"src": "./src/proxy/index.ts",
|
|
65
|
+
"types": "./dist/proxy/index.d.ts",
|
|
51
66
|
"default": "./dist/proxy/index.js"
|
|
52
67
|
},
|
|
53
68
|
"./server": {
|
|
54
|
-
"types": "./dist/server/index.d.ts",
|
|
55
69
|
"src": "./src/server/index.ts",
|
|
70
|
+
"types": "./dist/server/index.d.ts",
|
|
56
71
|
"default": "./dist/server/index.js"
|
|
57
72
|
},
|
|
58
73
|
"./stripe": {
|
|
59
|
-
"types": "./dist/stripe/index.d.ts",
|
|
60
74
|
"src": "./src/stripe/index.ts",
|
|
75
|
+
"types": "./dist/stripe/index.d.ts",
|
|
61
76
|
"default": "./dist/stripe/index.js"
|
|
62
77
|
},
|
|
63
78
|
"./stripe/client": {
|
|
64
|
-
"types": "./dist/stripe/client/index.d.ts",
|
|
65
79
|
"src": "./src/stripe/client/index.ts",
|
|
80
|
+
"types": "./dist/stripe/client/index.d.ts",
|
|
66
81
|
"default": "./dist/stripe/client/index.js"
|
|
67
82
|
},
|
|
68
83
|
"./stripe/server": {
|
|
69
|
-
"types": "./dist/stripe/server/index.d.ts",
|
|
70
84
|
"src": "./src/stripe/server/index.ts",
|
|
85
|
+
"types": "./dist/stripe/server/index.d.ts",
|
|
71
86
|
"default": "./dist/stripe/server/index.js"
|
|
72
87
|
},
|
|
88
|
+
"./x402": {
|
|
89
|
+
"src": "./src/x402/index.ts",
|
|
90
|
+
"types": "./dist/x402/index.d.ts",
|
|
91
|
+
"default": "./dist/x402/index.js"
|
|
92
|
+
},
|
|
73
93
|
"./tempo": {
|
|
74
|
-
"types": "./dist/tempo/index.d.ts",
|
|
75
94
|
"src": "./src/tempo/index.ts",
|
|
95
|
+
"types": "./dist/tempo/index.d.ts",
|
|
76
96
|
"default": "./dist/tempo/index.js"
|
|
77
97
|
},
|
|
78
98
|
"./html": {
|
|
79
|
-
"types": "./dist/Html.d.ts",
|
|
80
99
|
"src": "./src/Html.ts",
|
|
100
|
+
"types": "./dist/Html.d.ts",
|
|
81
101
|
"default": "./dist/Html.js"
|
|
82
102
|
},
|
|
83
103
|
"./hono": {
|
|
84
|
-
"types": "./dist/middlewares/hono.d.ts",
|
|
85
104
|
"src": "./src/middlewares/hono.ts",
|
|
105
|
+
"types": "./dist/middlewares/hono.d.ts",
|
|
86
106
|
"default": "./dist/middlewares/hono.js"
|
|
87
107
|
},
|
|
88
108
|
"./express": {
|
|
89
|
-
"types": "./dist/middlewares/express.d.ts",
|
|
90
109
|
"src": "./src/middlewares/express.ts",
|
|
110
|
+
"types": "./dist/middlewares/express.d.ts",
|
|
91
111
|
"default": "./dist/middlewares/express.js"
|
|
92
112
|
},
|
|
93
113
|
"./nextjs": {
|
|
94
|
-
"types": "./dist/middlewares/nextjs.d.ts",
|
|
95
114
|
"src": "./src/middlewares/nextjs.ts",
|
|
115
|
+
"types": "./dist/middlewares/nextjs.d.ts",
|
|
96
116
|
"default": "./dist/middlewares/nextjs.js"
|
|
97
117
|
},
|
|
98
118
|
"./elysia": {
|
|
99
|
-
"types": "./dist/middlewares/elysia.d.ts",
|
|
100
119
|
"src": "./src/middlewares/elysia.ts",
|
|
120
|
+
"types": "./dist/middlewares/elysia.d.ts",
|
|
101
121
|
"default": "./dist/middlewares/elysia.js"
|
|
102
122
|
}
|
|
103
123
|
},
|
|
@@ -106,7 +126,7 @@
|
|
|
106
126
|
"elysia": ">=1",
|
|
107
127
|
"express": ">=5",
|
|
108
128
|
"hono": ">=4.12.18",
|
|
109
|
-
"viem": ">=2.
|
|
129
|
+
"viem": ">=2.51.0"
|
|
110
130
|
},
|
|
111
131
|
"peerDependenciesMeta": {
|
|
112
132
|
"@modelcontextprotocol/sdk": {
|
|
@@ -124,7 +144,7 @@
|
|
|
124
144
|
},
|
|
125
145
|
"dependencies": {
|
|
126
146
|
"incur": "^0.4.5",
|
|
127
|
-
"ox": "0.14.
|
|
147
|
+
"ox": "0.14.24",
|
|
128
148
|
"zod": "^4.4.3"
|
|
129
149
|
},
|
|
130
150
|
"repository": {
|
package/src/Challenge.test.ts
CHANGED
|
@@ -453,6 +453,34 @@ describe('serialize', () => {
|
|
|
453
453
|
expect(header).toContain('digest="sha-256=abc"')
|
|
454
454
|
expect(header).toContain('expires="2025-01-06T12:00:00Z"')
|
|
455
455
|
})
|
|
456
|
+
|
|
457
|
+
test('behavior: escapes quoted-string values', () => {
|
|
458
|
+
const challenge = Challenge.from({
|
|
459
|
+
id: 'abc123',
|
|
460
|
+
realm: 'api.example.com',
|
|
461
|
+
method: 'tempo',
|
|
462
|
+
intent: 'charge',
|
|
463
|
+
request: { amount: '1000000' },
|
|
464
|
+
description: 'Pay "premium" path C:\\tempo\\api',
|
|
465
|
+
})
|
|
466
|
+
|
|
467
|
+
const header = Challenge.serialize(challenge)
|
|
468
|
+
expect(header).toContain('description="Pay \\"premium\\" path C:\\\\tempo\\\\api"')
|
|
469
|
+
expect(Challenge.deserialize(header).description).toBe('Pay "premium" path C:\\tempo\\api')
|
|
470
|
+
})
|
|
471
|
+
|
|
472
|
+
test('error: rejects CRLF in quoted-string values', () => {
|
|
473
|
+
const challenge = Challenge.from({
|
|
474
|
+
id: 'abc123',
|
|
475
|
+
realm: 'api.example.com',
|
|
476
|
+
method: 'tempo',
|
|
477
|
+
intent: 'charge',
|
|
478
|
+
request: { amount: '1000000' },
|
|
479
|
+
description: 'Line one\r\nLine two',
|
|
480
|
+
})
|
|
481
|
+
|
|
482
|
+
expect(() => Challenge.serialize(challenge)).toThrow('Invalid quoted-string value.')
|
|
483
|
+
})
|
|
456
484
|
})
|
|
457
485
|
|
|
458
486
|
describe('deserialize', () => {
|
package/src/Challenge.ts
CHANGED
|
@@ -294,23 +294,30 @@ export declare namespace fromMethod {
|
|
|
294
294
|
*/
|
|
295
295
|
export function serialize(challenge: Challenge): string {
|
|
296
296
|
const parts = [
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
297
|
+
authParam('id', challenge.id),
|
|
298
|
+
authParam('realm', challenge.realm),
|
|
299
|
+
authParam('method', challenge.method),
|
|
300
|
+
authParam('intent', challenge.intent),
|
|
301
|
+
authParam('request', PaymentRequest.serialize(challenge.request)),
|
|
302
302
|
]
|
|
303
303
|
|
|
304
|
-
if (challenge.description !== undefined)
|
|
305
|
-
|
|
306
|
-
if (challenge.
|
|
307
|
-
if (challenge.
|
|
304
|
+
if (challenge.description !== undefined)
|
|
305
|
+
parts.push(authParam('description', challenge.description))
|
|
306
|
+
if (challenge.digest !== undefined) parts.push(authParam('digest', challenge.digest))
|
|
307
|
+
if (challenge.expires !== undefined) parts.push(authParam('expires', challenge.expires))
|
|
308
|
+
if (challenge.opaque !== undefined) parts.push(authParam('opaque', challenge.opaque))
|
|
308
309
|
else if (challenge.meta !== undefined)
|
|
309
|
-
parts.push(
|
|
310
|
+
parts.push(authParam('opaque', PaymentRequest.serialize(challenge.meta)))
|
|
310
311
|
|
|
311
312
|
return `Payment ${parts.join(', ')}`
|
|
312
313
|
}
|
|
313
314
|
|
|
315
|
+
/** @internal */
|
|
316
|
+
function authParam(name: string, value: string): string {
|
|
317
|
+
if (/[\r\n]/.test(value)) throw new Error('Invalid quoted-string value.')
|
|
318
|
+
return `${name}="${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`
|
|
319
|
+
}
|
|
320
|
+
|
|
314
321
|
/**
|
|
315
322
|
* Deserializes a WWW-Authenticate header value to a challenge.
|
|
316
323
|
*
|
package/src/Method.ts
CHANGED
|
@@ -334,7 +334,7 @@ export declare namespace toServer {
|
|
|
334
334
|
request?: RequestFn<method> | undefined
|
|
335
335
|
respond?: RespondFn<method> | undefined
|
|
336
336
|
stableBinding?: StableBindingFn<method> | undefined
|
|
337
|
-
transport?: transportOverride | undefined
|
|
337
|
+
transport?: transportOverride | Transport.AnyTransport | undefined
|
|
338
338
|
verify: VerifyFn<method>
|
|
339
339
|
}
|
|
340
340
|
}
|
package/src/Store.test-d.ts
CHANGED
|
@@ -25,6 +25,64 @@ test('memory returns AtomicStore', () => {
|
|
|
25
25
|
expectTypeOf(store).toEqualTypeOf<Store.AtomicStore>()
|
|
26
26
|
})
|
|
27
27
|
|
|
28
|
+
test('from with keyPrefix preserves AtomicStore', () => {
|
|
29
|
+
const store = Store.from(Store.memory(), { keyPrefix: 'tenant:' })
|
|
30
|
+
expectTypeOf(store).toEqualTypeOf<Store.AtomicStore>()
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
test('from with keyPrefix preserves typed Store', () => {
|
|
34
|
+
type ItemMap = { [key: `mppx:charge:${string}`]: number }
|
|
35
|
+
const store = {} as Store.Store<ItemMap>
|
|
36
|
+
const prefixed = Store.from(store, { keyPrefix: 'tenant:' })
|
|
37
|
+
|
|
38
|
+
expectTypeOf(prefixed.get).parameter(0).toEqualTypeOf<`mppx:charge:${string}`>()
|
|
39
|
+
expectTypeOf(prefixed.put).parameter(1).toEqualTypeOf<number>()
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
test('from with keyPrefix preserves typed AtomicStore', () => {
|
|
43
|
+
type ItemMap = { [key: `mppx:charge:${string}`]: number }
|
|
44
|
+
const store = {} as Store.AtomicStore<ItemMap>
|
|
45
|
+
const prefixed = Store.from(store, { keyPrefix: 'tenant:' })
|
|
46
|
+
|
|
47
|
+
expectTypeOf(prefixed.update).parameter(0).toEqualTypeOf<`mppx:charge:${string}`>()
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
test('memory accepts keyPrefix option', () => {
|
|
51
|
+
const store = Store.memory({ keyPrefix: 'tenant:' })
|
|
52
|
+
expectTypeOf(store).toEqualTypeOf<Store.AtomicStore>()
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
test('adapter constructors accept keyPrefix option', () => {
|
|
56
|
+
const cloudflare = Store.cloudflare(
|
|
57
|
+
{
|
|
58
|
+
get: async () => null,
|
|
59
|
+
put: async () => {},
|
|
60
|
+
delete: async () => {},
|
|
61
|
+
},
|
|
62
|
+
{ keyPrefix: 'tenant:' },
|
|
63
|
+
)
|
|
64
|
+
const redis = Store.redis(
|
|
65
|
+
{
|
|
66
|
+
get: async () => null,
|
|
67
|
+
set: async () => null,
|
|
68
|
+
del: async () => null,
|
|
69
|
+
},
|
|
70
|
+
{ keyPrefix: 'tenant:' },
|
|
71
|
+
)
|
|
72
|
+
const upstash = Store.upstash(
|
|
73
|
+
{
|
|
74
|
+
get: async () => null,
|
|
75
|
+
set: async () => null,
|
|
76
|
+
del: async () => null,
|
|
77
|
+
},
|
|
78
|
+
{ keyPrefix: 'tenant:' },
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
expectTypeOf(cloudflare).toEqualTypeOf<Store.Store>()
|
|
82
|
+
expectTypeOf(redis).toEqualTypeOf<Store.Store>()
|
|
83
|
+
expectTypeOf(upstash).toEqualTypeOf<Store.Store>()
|
|
84
|
+
})
|
|
85
|
+
|
|
28
86
|
test('AtomicStore is assignable to Store', () => {
|
|
29
87
|
const atomic = {} as Store.AtomicStore
|
|
30
88
|
expectTypeOf(atomic).toMatchTypeOf<Store.Store>()
|
package/src/Store.test.ts
CHANGED
|
@@ -112,6 +112,83 @@ describe.each([
|
|
|
112
112
|
})
|
|
113
113
|
})
|
|
114
114
|
|
|
115
|
+
describe('keyPrefix', () => {
|
|
116
|
+
test('scopes get, put, and delete to prefixed backing keys', async () => {
|
|
117
|
+
const backing = Store.memory()
|
|
118
|
+
const store = Store.from(backing, { keyPrefix: 'tenant:' })
|
|
119
|
+
|
|
120
|
+
await store.put('k', nested)
|
|
121
|
+
expect(await backing.get('tenant:k')).toEqual(nested)
|
|
122
|
+
expect(await backing.get('k')).toBeNull()
|
|
123
|
+
expect(await store.get('k')).toEqual(nested)
|
|
124
|
+
|
|
125
|
+
await store.delete('k')
|
|
126
|
+
expect(await backing.get('tenant:k')).toBeNull()
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
test('scopes atomic update to prefixed backing keys', async () => {
|
|
130
|
+
const backing = Store.memory()
|
|
131
|
+
const store = Store.from(backing, { keyPrefix: 'tenant:' })
|
|
132
|
+
|
|
133
|
+
const result = await store.update('k', (current) => {
|
|
134
|
+
expect(current).toBeNull()
|
|
135
|
+
return { op: 'set', value: { count: 1 }, result: 'created' as const }
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
expect(result).toBe('created')
|
|
139
|
+
expect(await backing.get('tenant:k')).toEqual({ count: 1 })
|
|
140
|
+
expect(await backing.get('k')).toBeNull()
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
test('returns the original store when keyPrefix is empty', () => {
|
|
144
|
+
const backing = Store.memory()
|
|
145
|
+
expect(Store.from(backing, { keyPrefix: '' })).toBe(backing)
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
test('reuses wrappers for the same backing store and prefix', () => {
|
|
149
|
+
const backing = Store.memory()
|
|
150
|
+
expect(Store.from(backing, { keyPrefix: 'tenant:' })).toBe(
|
|
151
|
+
Store.from(backing, { keyPrefix: 'tenant:' }),
|
|
152
|
+
)
|
|
153
|
+
expect(Store.from(backing, { keyPrefix: 'other:' })).not.toBe(
|
|
154
|
+
Store.from(backing, { keyPrefix: 'tenant:' }),
|
|
155
|
+
)
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
test('constructs memory stores with a keyPrefix', async () => {
|
|
159
|
+
const store = Store.memory({ keyPrefix: 'tenant:' })
|
|
160
|
+
await store.put('k', 'value')
|
|
161
|
+
expect(await store.get('k')).toBe('value')
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
test('constructs adapter stores with a keyPrefix', async () => {
|
|
165
|
+
const cloudflareKv = fakeStringKv()
|
|
166
|
+
const cloudflare = Store.cloudflare(cloudflareKv, { keyPrefix: 'tenant:' })
|
|
167
|
+
await cloudflare.put('k', 'value')
|
|
168
|
+
expect(await cloudflareKv.get('tenant:k')).not.toBeNull()
|
|
169
|
+
expect(await cloudflareKv.get('k')).toBeNull()
|
|
170
|
+
|
|
171
|
+
const redisKv = fakeStringKv()
|
|
172
|
+
const redis = Store.redis(
|
|
173
|
+
{
|
|
174
|
+
get: redisKv.get,
|
|
175
|
+
set: redisKv.put,
|
|
176
|
+
del: redisKv.delete,
|
|
177
|
+
},
|
|
178
|
+
{ keyPrefix: 'tenant:' },
|
|
179
|
+
)
|
|
180
|
+
await redis.put('k', 'value')
|
|
181
|
+
expect(await redisKv.get('tenant:k')).not.toBeNull()
|
|
182
|
+
expect(await redisKv.get('k')).toBeNull()
|
|
183
|
+
|
|
184
|
+
const upstashKv = fakeUnknownKv()
|
|
185
|
+
const upstash = Store.upstash(upstashKv, { keyPrefix: 'tenant:' })
|
|
186
|
+
await upstash.put('k', 'value')
|
|
187
|
+
expect(await upstashKv.get('tenant:k')).toBe('value')
|
|
188
|
+
expect(await upstashKv.get('k')).toBeNull()
|
|
189
|
+
})
|
|
190
|
+
})
|
|
191
|
+
|
|
115
192
|
describe('json roundtrip behavior', () => {
|
|
116
193
|
test('cloudflare json-roundtrips nested objects', async () => {
|
|
117
194
|
const store = Store.cloudflare(fakeStringKv())
|
package/src/Store.ts
CHANGED
|
@@ -84,11 +84,55 @@ export type AtomicStore<itemMap extends StoreItemMap = StoreItemMap> = Store<
|
|
|
84
84
|
AtomicActions<itemMap>
|
|
85
85
|
>
|
|
86
86
|
|
|
87
|
+
/** Options shared by store constructors. */
|
|
88
|
+
export type Options = {
|
|
89
|
+
/** Prefix prepended to every backing store key. */
|
|
90
|
+
keyPrefix?: string | undefined
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const keyPrefixCache = new WeakMap<Store, Map<string, Store | AtomicStore>>()
|
|
94
|
+
|
|
87
95
|
/** Creates a {@link Store} from an existing implementation. */
|
|
88
|
-
export function from<store extends
|
|
89
|
-
export function from<store extends
|
|
90
|
-
export function from(store: Store | AtomicStore) {
|
|
91
|
-
return store
|
|
96
|
+
export function from<store extends AtomicStore<any>>(store: store, options?: Options): store
|
|
97
|
+
export function from<store extends Store<any>>(store: store, options?: Options): store
|
|
98
|
+
export function from(store: Store | AtomicStore, options?: Options) {
|
|
99
|
+
return withKeyPrefix(store, options?.keyPrefix)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function withKeyPrefix(store: Store | AtomicStore, keyPrefix = ''): Store | AtomicStore {
|
|
103
|
+
if (!keyPrefix) return store
|
|
104
|
+
|
|
105
|
+
const cached = keyPrefixCache.get(store)?.get(keyPrefix)
|
|
106
|
+
if (cached) return cached
|
|
107
|
+
|
|
108
|
+
const backing = store as Store
|
|
109
|
+
const prefixedKey = (key: string) => `${keyPrefix}${key}`
|
|
110
|
+
const prefixed = from({
|
|
111
|
+
async get(key: string) {
|
|
112
|
+
return backing.get(prefixedKey(key)) as Promise<unknown>
|
|
113
|
+
},
|
|
114
|
+
async put(key: string, value: unknown) {
|
|
115
|
+
await backing.put(prefixedKey(key), value)
|
|
116
|
+
},
|
|
117
|
+
async delete(key: string) {
|
|
118
|
+
await backing.delete(prefixedKey(key))
|
|
119
|
+
},
|
|
120
|
+
...('update' in store
|
|
121
|
+
? {
|
|
122
|
+
async update<result>(
|
|
123
|
+
key: string,
|
|
124
|
+
fn: (current: unknown | null) => Change<unknown, result>,
|
|
125
|
+
) {
|
|
126
|
+
return (store as AtomicStore).update(prefixedKey(key), fn as never)
|
|
127
|
+
},
|
|
128
|
+
}
|
|
129
|
+
: {}),
|
|
130
|
+
} satisfies Store | AtomicStore)
|
|
131
|
+
|
|
132
|
+
const cachedByPrefix = keyPrefixCache.get(store) ?? new Map<string, Store | AtomicStore>()
|
|
133
|
+
cachedByPrefix.set(keyPrefix, prefixed)
|
|
134
|
+
keyPrefixCache.set(store, cachedByPrefix)
|
|
135
|
+
return prefixed
|
|
92
136
|
}
|
|
93
137
|
|
|
94
138
|
function wrapJsonUpdate(
|
|
@@ -113,26 +157,37 @@ function wrapJsonUpdate(
|
|
|
113
157
|
}
|
|
114
158
|
|
|
115
159
|
/** Wraps a Cloudflare KV namespace. */
|
|
116
|
-
export function cloudflare(
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
160
|
+
export function cloudflare(
|
|
161
|
+
kv: cloudflare.AtomicParameters,
|
|
162
|
+
options?: cloudflare.Options,
|
|
163
|
+
): AtomicStore
|
|
164
|
+
export function cloudflare(kv: cloudflare.Parameters, options?: cloudflare.Options): Store
|
|
165
|
+
export function cloudflare(kv: cloudflare.Parameters, options?: cloudflare.Options): Store {
|
|
166
|
+
return from(
|
|
167
|
+
{
|
|
168
|
+
async get(key: string) {
|
|
169
|
+
const raw = await kv.get(key)
|
|
170
|
+
if (raw == null) return null as any
|
|
171
|
+
return Json.parse(raw as string)
|
|
172
|
+
},
|
|
173
|
+
async put(key: string, value: unknown) {
|
|
174
|
+
await kv.put(key, Json.stringify(value))
|
|
175
|
+
},
|
|
176
|
+
async delete(key: string) {
|
|
177
|
+
await kv.delete(key)
|
|
178
|
+
},
|
|
179
|
+
...wrapJsonUpdate(kv.update),
|
|
124
180
|
},
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
},
|
|
128
|
-
async delete(key) {
|
|
129
|
-
await kv.delete(key)
|
|
130
|
-
},
|
|
131
|
-
...wrapJsonUpdate(kv.update),
|
|
132
|
-
})
|
|
181
|
+
options,
|
|
182
|
+
)
|
|
133
183
|
}
|
|
134
184
|
|
|
135
185
|
export declare namespace cloudflare {
|
|
186
|
+
export type Options = {
|
|
187
|
+
/** Prefix prepended to every backing store key. */
|
|
188
|
+
keyPrefix?: string | undefined
|
|
189
|
+
}
|
|
190
|
+
|
|
136
191
|
export type Parameters = {
|
|
137
192
|
get: (key: string) => Promise<unknown>
|
|
138
193
|
put: (key: string, value: string) => Promise<void>
|
|
@@ -149,51 +204,69 @@ export declare namespace cloudflare {
|
|
|
149
204
|
}
|
|
150
205
|
|
|
151
206
|
/** In-memory store backed by a `Map`. JSON-roundtrips values to match production behavior. */
|
|
152
|
-
export function memory(): AtomicStore {
|
|
207
|
+
export function memory(options?: memory.Options): AtomicStore {
|
|
153
208
|
const store = new Map<string, string>()
|
|
154
|
-
return from(
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
209
|
+
return from(
|
|
210
|
+
{
|
|
211
|
+
async get(key: string) {
|
|
212
|
+
const raw = store.get(key)
|
|
213
|
+
if (raw === undefined) return null as any
|
|
214
|
+
return Json.parse(raw)
|
|
215
|
+
},
|
|
216
|
+
async put(key: string, value: unknown) {
|
|
217
|
+
store.set(key, Json.stringify(value))
|
|
218
|
+
},
|
|
219
|
+
async delete(key: string) {
|
|
220
|
+
store.delete(key)
|
|
221
|
+
},
|
|
222
|
+
async update<result>(key: string, fn: (current: unknown | null) => Change<unknown, result>) {
|
|
223
|
+
const current = store.has(key) ? (Json.parse(store.get(key)!) as never) : null
|
|
224
|
+
const change = fn(current)
|
|
225
|
+
if (change.op === 'set') store.set(key, Json.stringify(change.value))
|
|
226
|
+
if (change.op === 'delete') store.delete(key)
|
|
227
|
+
return change.result
|
|
228
|
+
},
|
|
159
229
|
},
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
if (change.op === 'set') store.set(key, Json.stringify(change.value))
|
|
170
|
-
if (change.op === 'delete') store.delete(key)
|
|
171
|
-
return change.result
|
|
172
|
-
},
|
|
173
|
-
})
|
|
230
|
+
options,
|
|
231
|
+
)
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export declare namespace memory {
|
|
235
|
+
export type Options = {
|
|
236
|
+
/** Prefix prepended to every backing store key. */
|
|
237
|
+
keyPrefix?: string | undefined
|
|
238
|
+
}
|
|
174
239
|
}
|
|
175
240
|
|
|
176
241
|
/** Wraps a standard Redis client (ioredis, node-redis, Valkey). */
|
|
177
|
-
export function redis(client: redis.AtomicParameters): AtomicStore
|
|
178
|
-
export function redis(client: redis.Parameters): Store
|
|
179
|
-
export function redis(client: redis.Parameters): Store {
|
|
180
|
-
return from(
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
242
|
+
export function redis(client: redis.AtomicParameters, options?: redis.Options): AtomicStore
|
|
243
|
+
export function redis(client: redis.Parameters, options?: redis.Options): Store
|
|
244
|
+
export function redis(client: redis.Parameters, options?: redis.Options): Store {
|
|
245
|
+
return from(
|
|
246
|
+
{
|
|
247
|
+
async get(key: string) {
|
|
248
|
+
const raw = await client.get(key)
|
|
249
|
+
if (raw == null) return null as any
|
|
250
|
+
return Json.parse(raw)
|
|
251
|
+
},
|
|
252
|
+
async put(key: string, value: unknown) {
|
|
253
|
+
await client.set(key, Json.stringify(value))
|
|
254
|
+
},
|
|
255
|
+
async delete(key: string) {
|
|
256
|
+
await client.del(key)
|
|
257
|
+
},
|
|
258
|
+
...wrapJsonUpdate(client.update),
|
|
191
259
|
},
|
|
192
|
-
|
|
193
|
-
|
|
260
|
+
options,
|
|
261
|
+
)
|
|
194
262
|
}
|
|
195
263
|
|
|
196
264
|
export declare namespace redis {
|
|
265
|
+
export type Options = {
|
|
266
|
+
/** Prefix prepended to every backing store key. */
|
|
267
|
+
keyPrefix?: string | undefined
|
|
268
|
+
}
|
|
269
|
+
|
|
197
270
|
export type Parameters = {
|
|
198
271
|
get: (key: string) => Promise<string | null>
|
|
199
272
|
set: (key: string, value: string) => Promise<unknown>
|
|
@@ -210,28 +283,36 @@ export declare namespace redis {
|
|
|
210
283
|
}
|
|
211
284
|
|
|
212
285
|
/** Wraps an Upstash Redis instance (e.g. Vercel KV). */
|
|
213
|
-
export function upstash(redis: upstash.AtomicParameters): AtomicStore
|
|
214
|
-
export function upstash(redis: upstash.Parameters): Store
|
|
215
|
-
export function upstash(redis: upstash.Parameters): Store {
|
|
216
|
-
return from(
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
286
|
+
export function upstash(redis: upstash.AtomicParameters, options?: upstash.Options): AtomicStore
|
|
287
|
+
export function upstash(redis: upstash.Parameters, options?: upstash.Options): Store
|
|
288
|
+
export function upstash(redis: upstash.Parameters, options?: upstash.Options): Store {
|
|
289
|
+
return from(
|
|
290
|
+
{
|
|
291
|
+
async get(key: string) {
|
|
292
|
+
return (await redis.get(key)) as any
|
|
293
|
+
},
|
|
294
|
+
async put(key: string, value: unknown) {
|
|
295
|
+
await redis.set(key, value)
|
|
296
|
+
},
|
|
297
|
+
async delete(key: string) {
|
|
298
|
+
await redis.del(key)
|
|
299
|
+
},
|
|
300
|
+
...(redis.update
|
|
301
|
+
? {
|
|
302
|
+
update: redis.update as Update,
|
|
303
|
+
}
|
|
304
|
+
: {}),
|
|
222
305
|
},
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
},
|
|
226
|
-
...(redis.update
|
|
227
|
-
? {
|
|
228
|
-
update: redis.update as Update,
|
|
229
|
-
}
|
|
230
|
-
: {}),
|
|
231
|
-
})
|
|
306
|
+
options,
|
|
307
|
+
)
|
|
232
308
|
}
|
|
233
309
|
|
|
234
310
|
export declare namespace upstash {
|
|
311
|
+
export type Options = {
|
|
312
|
+
/** Prefix prepended to every backing store key. */
|
|
313
|
+
keyPrefix?: string | undefined
|
|
314
|
+
}
|
|
315
|
+
|
|
235
316
|
export type Parameters = {
|
|
236
317
|
get: (key: string) => Promise<unknown>
|
|
237
318
|
set: (key: string, value: unknown) => Promise<unknown>
|
package/src/client/Methods.ts
CHANGED