@armory-sh/middleware-bun 0.3.26 → 0.3.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-WLKV5FDR.js → chunk-BJBLQMMR.js} +56 -17
- package/dist/index.d.ts +9 -1
- package/dist/index.js +237 -21
- package/dist/routes-BKjM-6xh.d.ts +48 -0
- package/dist/routes.d.ts +2 -27
- package/dist/routes.js +1 -1
- package/package.json +4 -2
|
@@ -8,7 +8,9 @@ var toSlug = (network) => {
|
|
|
8
8
|
return normalizeNetworkName(net.name);
|
|
9
9
|
}
|
|
10
10
|
if (network.startsWith("eip155:")) {
|
|
11
|
-
const
|
|
11
|
+
const chainPart = network.split(":")[1];
|
|
12
|
+
if (!chainPart) throw new Error(`Invalid network format: ${network}`);
|
|
13
|
+
const chainId = parseInt(chainPart, 10);
|
|
12
14
|
const net = getNetworkByChainId(chainId);
|
|
13
15
|
if (!net) throw new Error(`No network found for chainId: ${chainId}`);
|
|
14
16
|
return normalizeNetworkName(net.name);
|
|
@@ -38,12 +40,16 @@ var createV2Requirements = (config, expiry) => {
|
|
|
38
40
|
const network = getNetworkConfig(networkName);
|
|
39
41
|
if (!network) throw new Error(`Unsupported network: ${networkName}`);
|
|
40
42
|
return {
|
|
43
|
+
scheme: "exact",
|
|
41
44
|
amount: config.amount,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
network: getChainId(config.network),
|
|
46
|
+
asset: network.usdcAddress,
|
|
47
|
+
payTo: config.payTo,
|
|
48
|
+
maxTimeoutSeconds: Math.max(1, expiry - Math.floor(Date.now() / 1e3)),
|
|
49
|
+
extra: {
|
|
50
|
+
name: "USDC",
|
|
51
|
+
version: "2"
|
|
52
|
+
}
|
|
47
53
|
};
|
|
48
54
|
};
|
|
49
55
|
var createPaymentRequirements = (config) => {
|
|
@@ -80,7 +86,9 @@ var parsePaymentHeader = async (request, requirements) => {
|
|
|
80
86
|
const paymentSig = request.headers.get(PAYMENT_SIGNATURE_HEADER);
|
|
81
87
|
if (paymentSig) {
|
|
82
88
|
try {
|
|
83
|
-
const payload = decodePayloadHeader(paymentSig, {
|
|
89
|
+
const payload = decodePayloadHeader(paymentSig, {
|
|
90
|
+
accepted: requirements
|
|
91
|
+
});
|
|
84
92
|
return { payload, payerAddress: extractPayerAddress(payload) };
|
|
85
93
|
} catch {
|
|
86
94
|
}
|
|
@@ -133,32 +141,58 @@ var createRouteAwareBunMiddleware = (config, handler) => {
|
|
|
133
141
|
const { routes: resolvedRoutes, error: configError } = resolveRouteConfig(config);
|
|
134
142
|
const middleware = async (request) => {
|
|
135
143
|
if (configError) {
|
|
136
|
-
return errorResponse(
|
|
144
|
+
return errorResponse(
|
|
145
|
+
`Payment middleware configuration error: ${configError.message}`,
|
|
146
|
+
500
|
|
147
|
+
);
|
|
137
148
|
}
|
|
138
149
|
const path = new URL(request.url).pathname;
|
|
139
|
-
const matchedRoute = resolvedRoutes.find(
|
|
150
|
+
const matchedRoute = resolvedRoutes.find(
|
|
151
|
+
(r) => matchRoute(r.pattern, path)
|
|
152
|
+
);
|
|
140
153
|
if (!matchedRoute) {
|
|
141
154
|
return null;
|
|
142
155
|
}
|
|
143
156
|
const routeConfig = matchedRoute.config;
|
|
144
|
-
const {
|
|
157
|
+
const {
|
|
158
|
+
facilitator,
|
|
159
|
+
settlementMode = "settle",
|
|
160
|
+
waitForSettlement = false
|
|
161
|
+
} = routeConfig;
|
|
145
162
|
const requirements = createPaymentRequirements(routeConfig);
|
|
146
163
|
const paymentResult = await parsePaymentHeader(request, requirements);
|
|
147
164
|
if (!paymentResult) {
|
|
148
|
-
return errorResponse(
|
|
165
|
+
return errorResponse(
|
|
166
|
+
"Payment required",
|
|
167
|
+
402,
|
|
168
|
+
createPaymentRequiredHeaders(requirements),
|
|
169
|
+
[requirements]
|
|
170
|
+
);
|
|
149
171
|
}
|
|
150
172
|
const { payerAddress, payload } = paymentResult;
|
|
151
173
|
if (facilitator) {
|
|
152
|
-
const verifyResult = await verifyPayment(payload, requirements, {
|
|
174
|
+
const verifyResult = await verifyPayment(payload, requirements, {
|
|
175
|
+
url: facilitator.url
|
|
176
|
+
});
|
|
153
177
|
if (!verifyResult.isValid) {
|
|
154
|
-
return errorResponse(
|
|
178
|
+
return errorResponse(
|
|
179
|
+
`Payment verification failed: ${verifyResult.invalidReason}`,
|
|
180
|
+
402,
|
|
181
|
+
createPaymentRequiredHeaders(requirements),
|
|
182
|
+
[requirements]
|
|
183
|
+
);
|
|
155
184
|
}
|
|
156
185
|
}
|
|
157
186
|
if (!handler) {
|
|
158
187
|
if (settlementMode === "settle" && facilitator) {
|
|
159
188
|
const settle = async () => {
|
|
160
|
-
const result = await settlePayment(payload, requirements, {
|
|
161
|
-
|
|
189
|
+
const result = await settlePayment(payload, requirements, {
|
|
190
|
+
url: facilitator.url
|
|
191
|
+
});
|
|
192
|
+
return result.success ? successResponse(
|
|
193
|
+
payerAddress,
|
|
194
|
+
createSettlementResponse(true, result.transaction)
|
|
195
|
+
) : errorResponse(result.errorReason ?? "Settlement failed", 400);
|
|
162
196
|
};
|
|
163
197
|
if (waitForSettlement) {
|
|
164
198
|
return await settle();
|
|
@@ -172,9 +206,14 @@ var createRouteAwareBunMiddleware = (config, handler) => {
|
|
|
172
206
|
if (response.status >= 400 || settlementMode !== "settle" || !facilitator) {
|
|
173
207
|
return response;
|
|
174
208
|
}
|
|
175
|
-
const settleResult = await settlePayment(payload, requirements, {
|
|
209
|
+
const settleResult = await settlePayment(payload, requirements, {
|
|
210
|
+
url: facilitator.url
|
|
211
|
+
});
|
|
176
212
|
if (!settleResult.success) {
|
|
177
|
-
return errorResponse(
|
|
213
|
+
return errorResponse(
|
|
214
|
+
settleResult.errorReason ?? "Settlement failed",
|
|
215
|
+
502
|
|
216
|
+
);
|
|
178
217
|
}
|
|
179
218
|
const settlement = createSettlementResponse(true, settleResult.transaction);
|
|
180
219
|
return appendSettlementHeaders(response, settlement);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
import { M as MiddlewareConfig, B as BunHandler, a as BunMiddleware } from './routes-BKjM-6xh.js';
|
|
2
|
+
export { P as PaymentConfig, R as ResolvedRequirementsConfig, b as RouteAwareBunMiddlewareConfig, c as createPaymentRequirements, d as createRouteAwareBunMiddleware, p as paymentMiddleware, r as resolveFacilitatorUrlFromRequirement } from './routes-BKjM-6xh.js';
|
|
2
3
|
import '@armory-sh/base';
|
|
4
|
+
|
|
5
|
+
interface BunMiddlewareConfig extends MiddlewareConfig {
|
|
6
|
+
waitForSettlement?: boolean;
|
|
7
|
+
}
|
|
8
|
+
declare const createBunMiddleware: (config: BunMiddlewareConfig, handler?: BunHandler) => BunMiddleware | ((request: Request) => Promise<Response>);
|
|
9
|
+
|
|
10
|
+
export { BunHandler, BunMiddleware, type BunMiddlewareConfig, createBunMiddleware };
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,207 @@
|
|
|
1
|
-
import { createPaymentRequirements } from './chunk-
|
|
2
|
-
export { createRouteAwareBunMiddleware } from './chunk-
|
|
3
|
-
import {
|
|
1
|
+
import { createPaymentRequirements as createPaymentRequirements$1 } from './chunk-BJBLQMMR.js';
|
|
2
|
+
export { createRouteAwareBunMiddleware } from './chunk-BJBLQMMR.js';
|
|
3
|
+
import { resolveNetwork, isValidationError, resolveToken, createPaymentRequirements, PAYMENT_SIGNATURE_HEADER, createPaymentRequiredHeaders, decodePayloadHeader, findRequirementByAccepted, verifyPayment, extractPayerAddress, settlePayment, TOKENS, registerToken, createSettlementHeaders } from '@armory-sh/base';
|
|
4
4
|
|
|
5
|
+
function ensureTokensRegistered() {
|
|
6
|
+
for (const token of Object.values(TOKENS)) {
|
|
7
|
+
try {
|
|
8
|
+
registerToken(token);
|
|
9
|
+
} catch {
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function resolveFacilitatorUrlFromRequirement(config, requirement) {
|
|
14
|
+
const chainId = parseInt(requirement.network.split(":")[1] || "0", 10);
|
|
15
|
+
const assetAddress = requirement.asset.toLowerCase();
|
|
16
|
+
if (config.facilitatorUrlByToken) {
|
|
17
|
+
for (const [chainKey, tokenMap] of Object.entries(
|
|
18
|
+
config.facilitatorUrlByToken
|
|
19
|
+
)) {
|
|
20
|
+
const resolvedChain = resolveNetwork(chainKey);
|
|
21
|
+
if (!isValidationError(resolvedChain) && resolvedChain.config.chainId === chainId) {
|
|
22
|
+
for (const [, url] of Object.entries(tokenMap)) {
|
|
23
|
+
const network = resolveNetwork(chainKey);
|
|
24
|
+
if (!isValidationError(network)) {
|
|
25
|
+
for (const tokenKey of Object.keys(tokenMap)) {
|
|
26
|
+
const resolvedToken = resolveToken(tokenKey, network);
|
|
27
|
+
if (!isValidationError(resolvedToken) && resolvedToken.config.contractAddress.toLowerCase() === assetAddress) {
|
|
28
|
+
return url;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (config.facilitatorUrlByChain) {
|
|
37
|
+
for (const [chainKey, url] of Object.entries(
|
|
38
|
+
config.facilitatorUrlByChain
|
|
39
|
+
)) {
|
|
40
|
+
const resolvedChain = resolveNetwork(chainKey);
|
|
41
|
+
if (!isValidationError(resolvedChain) && resolvedChain.config.chainId === chainId) {
|
|
42
|
+
return url;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return config.facilitatorUrl;
|
|
47
|
+
}
|
|
48
|
+
function createPaymentRequirements2(config) {
|
|
49
|
+
if (config.requirements) {
|
|
50
|
+
return {
|
|
51
|
+
requirements: Array.isArray(config.requirements) ? config.requirements : [config.requirements]
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (!config.payTo) {
|
|
55
|
+
return {
|
|
56
|
+
requirements: [],
|
|
57
|
+
error: {
|
|
58
|
+
code: "VALIDATION_FAILED",
|
|
59
|
+
message: "Missing payment configuration: provide payTo or explicit requirements"
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
ensureTokensRegistered();
|
|
64
|
+
return createPaymentRequirements(config);
|
|
65
|
+
}
|
|
66
|
+
var errorResponse = (error, status, headers, accepts) => new Response(JSON.stringify({ error, accepts }), {
|
|
67
|
+
status,
|
|
68
|
+
headers: { "Content-Type": "application/json", ...headers }
|
|
69
|
+
});
|
|
70
|
+
var successResponse = (payerAddress, settlement) => {
|
|
71
|
+
return new Response(
|
|
72
|
+
JSON.stringify({
|
|
73
|
+
verified: true,
|
|
74
|
+
payerAddress,
|
|
75
|
+
settlement: void 0
|
|
76
|
+
}),
|
|
77
|
+
{
|
|
78
|
+
status: 200,
|
|
79
|
+
headers: {
|
|
80
|
+
"Content-Type": "application/json",
|
|
81
|
+
"X-Payment-Verified": "true",
|
|
82
|
+
"X-Payer-Address": payerAddress,
|
|
83
|
+
...{}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
};
|
|
88
|
+
var appendSettlementHeaders = (response, settlement) => {
|
|
89
|
+
const headers = new Headers(response.headers);
|
|
90
|
+
const settlementHeaders = createSettlementHeaders(settlement);
|
|
91
|
+
for (const [key, value] of Object.entries(settlementHeaders)) {
|
|
92
|
+
headers.set(key, value);
|
|
93
|
+
}
|
|
94
|
+
return new Response(response.body, {
|
|
95
|
+
status: response.status,
|
|
96
|
+
statusText: response.statusText,
|
|
97
|
+
headers
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
var paymentMiddleware = (config, handler) => {
|
|
101
|
+
const { requirements, error } = createPaymentRequirements2(config);
|
|
102
|
+
return async (request) => {
|
|
103
|
+
if (error) {
|
|
104
|
+
return errorResponse(
|
|
105
|
+
"Payment middleware configuration error",
|
|
106
|
+
500,
|
|
107
|
+
void 0,
|
|
108
|
+
[error.message]
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
const primaryRequirement = requirements[0];
|
|
112
|
+
if (!primaryRequirement) {
|
|
113
|
+
return errorResponse(
|
|
114
|
+
"Payment middleware configuration error: No payment requirements configured",
|
|
115
|
+
500
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
const paymentSig = request.headers.get(PAYMENT_SIGNATURE_HEADER);
|
|
119
|
+
if (!paymentSig) {
|
|
120
|
+
return errorResponse(
|
|
121
|
+
"Payment required",
|
|
122
|
+
402,
|
|
123
|
+
createPaymentRequiredHeaders(requirements),
|
|
124
|
+
[requirements]
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
let payload;
|
|
128
|
+
try {
|
|
129
|
+
payload = decodePayloadHeader(paymentSig, {
|
|
130
|
+
accepted: primaryRequirement
|
|
131
|
+
});
|
|
132
|
+
} catch {
|
|
133
|
+
return errorResponse("Invalid payment payload", 400);
|
|
134
|
+
}
|
|
135
|
+
const selectedRequirement = findRequirementByAccepted(
|
|
136
|
+
requirements,
|
|
137
|
+
payload.accepted
|
|
138
|
+
);
|
|
139
|
+
if (!selectedRequirement) {
|
|
140
|
+
return errorResponse(
|
|
141
|
+
"Invalid payment payload: accepted requirement is not configured for this endpoint",
|
|
142
|
+
400
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
const facilitatorUrl = resolveFacilitatorUrlFromRequirement(
|
|
146
|
+
config,
|
|
147
|
+
selectedRequirement
|
|
148
|
+
);
|
|
149
|
+
if (!facilitatorUrl) {
|
|
150
|
+
return errorResponse(
|
|
151
|
+
"Payment middleware configuration error: Facilitator URL is required",
|
|
152
|
+
500
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
const verifyResult = await verifyPayment(
|
|
156
|
+
payload,
|
|
157
|
+
selectedRequirement,
|
|
158
|
+
{ url: facilitatorUrl }
|
|
159
|
+
);
|
|
160
|
+
if (!verifyResult.isValid) {
|
|
161
|
+
return errorResponse(
|
|
162
|
+
`Payment verification failed: ${verifyResult.invalidReason}`,
|
|
163
|
+
402,
|
|
164
|
+
createPaymentRequiredHeaders(requirements)
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
const payerAddress = verifyResult.payer ?? extractPayerAddress(payload);
|
|
168
|
+
if (!handler) {
|
|
169
|
+
return successResponse(payerAddress);
|
|
170
|
+
}
|
|
171
|
+
const response = await handler(request);
|
|
172
|
+
if (response.status >= 400) {
|
|
173
|
+
return response;
|
|
174
|
+
}
|
|
175
|
+
const settleResult = await settlePayment(
|
|
176
|
+
payload,
|
|
177
|
+
selectedRequirement,
|
|
178
|
+
{ url: facilitatorUrl }
|
|
179
|
+
);
|
|
180
|
+
if (!settleResult.success) {
|
|
181
|
+
return errorResponse(
|
|
182
|
+
settleResult.errorReason ?? "Settlement failed",
|
|
183
|
+
502
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
return appendSettlementHeaders(response, settleResult);
|
|
187
|
+
};
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// src/index.ts
|
|
5
191
|
var parsePaymentHeader = async (request, requirements) => {
|
|
6
192
|
const paymentSig = request.headers.get(PAYMENT_SIGNATURE_HEADER);
|
|
7
193
|
if (paymentSig) {
|
|
8
194
|
try {
|
|
9
|
-
const payload = decodePayloadHeader(paymentSig, {
|
|
195
|
+
const payload = decodePayloadHeader(paymentSig, {
|
|
196
|
+
accepted: requirements
|
|
197
|
+
});
|
|
10
198
|
return { payload, payerAddress: extractPayerAddress(payload) };
|
|
11
199
|
} catch {
|
|
12
200
|
}
|
|
13
201
|
}
|
|
14
202
|
return null;
|
|
15
203
|
};
|
|
16
|
-
var
|
|
204
|
+
var errorResponse2 = (error, status, headers, accepts) => new Response(JSON.stringify({ error, accepts }), {
|
|
17
205
|
status,
|
|
18
206
|
headers: { "Content-Type": "application/json", ...headers }
|
|
19
207
|
});
|
|
@@ -23,7 +211,7 @@ var createSettlementResponse = (success, txHash) => ({
|
|
|
23
211
|
errorReason: void 0 ,
|
|
24
212
|
network: "base"
|
|
25
213
|
});
|
|
26
|
-
var
|
|
214
|
+
var successResponse2 = (payerAddress, settlement) => {
|
|
27
215
|
const isSuccess = settlement?.success;
|
|
28
216
|
const txHash = settlement?.transaction;
|
|
29
217
|
return new Response(
|
|
@@ -43,7 +231,7 @@ var successResponse = (payerAddress, settlement) => {
|
|
|
43
231
|
}
|
|
44
232
|
);
|
|
45
233
|
};
|
|
46
|
-
var
|
|
234
|
+
var appendSettlementHeaders2 = (response, settlement) => {
|
|
47
235
|
const headers = new Headers(response.headers);
|
|
48
236
|
const settlementHeaders = createSettlementHeaders(settlement);
|
|
49
237
|
for (const [key, value] of Object.entries(settlementHeaders)) {
|
|
@@ -56,44 +244,72 @@ var appendSettlementHeaders = (response, settlement) => {
|
|
|
56
244
|
});
|
|
57
245
|
};
|
|
58
246
|
var createBunMiddleware = (config, handler) => {
|
|
59
|
-
const {
|
|
60
|
-
|
|
247
|
+
const {
|
|
248
|
+
facilitator,
|
|
249
|
+
settlementMode = "settle",
|
|
250
|
+
waitForSettlement = false
|
|
251
|
+
} = config;
|
|
252
|
+
const requirements = createPaymentRequirements$1(config);
|
|
61
253
|
const middleware = async (request) => {
|
|
62
254
|
const paymentResult = await parsePaymentHeader(request, requirements);
|
|
63
255
|
if (!paymentResult) {
|
|
64
|
-
return
|
|
256
|
+
return errorResponse2(
|
|
257
|
+
"Payment required",
|
|
258
|
+
402,
|
|
259
|
+
createPaymentRequiredHeaders(requirements),
|
|
260
|
+
[requirements]
|
|
261
|
+
);
|
|
65
262
|
}
|
|
66
263
|
const { payerAddress, payload } = paymentResult;
|
|
67
264
|
if (facilitator) {
|
|
68
|
-
const verifyResult = await verifyPayment(
|
|
265
|
+
const verifyResult = await verifyPayment(
|
|
266
|
+
payload,
|
|
267
|
+
requirements,
|
|
268
|
+
{ url: facilitator.url }
|
|
269
|
+
);
|
|
69
270
|
if (!verifyResult.isValid) {
|
|
70
|
-
return
|
|
271
|
+
return errorResponse2(
|
|
272
|
+
`Payment verification failed: ${verifyResult.invalidReason}`,
|
|
273
|
+
402,
|
|
274
|
+
createPaymentRequiredHeaders(requirements),
|
|
275
|
+
[requirements]
|
|
276
|
+
);
|
|
71
277
|
}
|
|
72
278
|
}
|
|
73
279
|
if (!handler) {
|
|
74
280
|
if (settlementMode === "settle" && facilitator) {
|
|
75
281
|
const settle = async () => {
|
|
76
|
-
const result = await settlePayment(payload, requirements, {
|
|
77
|
-
|
|
282
|
+
const result = await settlePayment(payload, requirements, {
|
|
283
|
+
url: facilitator.url
|
|
284
|
+
});
|
|
285
|
+
return result.success ? successResponse2(
|
|
286
|
+
payerAddress,
|
|
287
|
+
createSettlementResponse(true, result.transaction)
|
|
288
|
+
) : errorResponse2(result.errorReason ?? "Settlement failed", 400);
|
|
78
289
|
};
|
|
79
290
|
if (waitForSettlement) {
|
|
80
291
|
return await settle();
|
|
81
292
|
}
|
|
82
293
|
settle().catch(console.error);
|
|
83
|
-
return
|
|
294
|
+
return successResponse2(payerAddress);
|
|
84
295
|
}
|
|
85
|
-
return
|
|
296
|
+
return successResponse2(payerAddress);
|
|
86
297
|
}
|
|
87
298
|
const response = await handler(request);
|
|
88
299
|
if (response.status >= 400 || settlementMode !== "settle" || !facilitator) {
|
|
89
300
|
return response;
|
|
90
301
|
}
|
|
91
|
-
const settleResult = await settlePayment(payload, requirements, {
|
|
302
|
+
const settleResult = await settlePayment(payload, requirements, {
|
|
303
|
+
url: facilitator.url
|
|
304
|
+
});
|
|
92
305
|
if (!settleResult.success) {
|
|
93
|
-
return
|
|
306
|
+
return errorResponse2(
|
|
307
|
+
settleResult.errorReason ?? "Settlement failed",
|
|
308
|
+
502
|
|
309
|
+
);
|
|
94
310
|
}
|
|
95
311
|
const settlement = createSettlementResponse(true, settleResult.transaction);
|
|
96
|
-
return
|
|
312
|
+
return appendSettlementHeaders2(response, settlement);
|
|
97
313
|
};
|
|
98
314
|
if (!handler) {
|
|
99
315
|
return middleware;
|
|
@@ -101,10 +317,10 @@ var createBunMiddleware = (config, handler) => {
|
|
|
101
317
|
return async (request) => {
|
|
102
318
|
const result = await middleware(request);
|
|
103
319
|
if (!result) {
|
|
104
|
-
return
|
|
320
|
+
return errorResponse2("Payment middleware returned no response", 500);
|
|
105
321
|
}
|
|
106
322
|
return result;
|
|
107
323
|
};
|
|
108
324
|
};
|
|
109
325
|
|
|
110
|
-
export { createBunMiddleware };
|
|
326
|
+
export { createBunMiddleware, createPaymentRequirements2 as createPaymentRequirements, paymentMiddleware, resolveFacilitatorUrlFromRequirement };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { PaymentRequirementsV2, PayToAddress, FacilitatorConfig, SettlementMode } from '@armory-sh/base';
|
|
2
|
+
|
|
3
|
+
type NetworkId = string | number;
|
|
4
|
+
type TokenId = string;
|
|
5
|
+
interface PaymentConfig {
|
|
6
|
+
payTo?: string;
|
|
7
|
+
requirements?: PaymentRequirementsV2 | PaymentRequirementsV2[];
|
|
8
|
+
chains?: NetworkId[];
|
|
9
|
+
chain?: NetworkId;
|
|
10
|
+
tokens?: TokenId[];
|
|
11
|
+
token?: TokenId;
|
|
12
|
+
amount?: string;
|
|
13
|
+
maxTimeoutSeconds?: number;
|
|
14
|
+
facilitatorUrl?: string;
|
|
15
|
+
facilitatorUrlByChain?: Record<string, string>;
|
|
16
|
+
facilitatorUrlByToken?: Record<string, Record<string, string>>;
|
|
17
|
+
}
|
|
18
|
+
interface ResolvedRequirementsConfig {
|
|
19
|
+
requirements: PaymentRequirementsV2[];
|
|
20
|
+
error?: {
|
|
21
|
+
code: string;
|
|
22
|
+
message: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
type BunMiddleware$1 = (request: Request) => Promise<Response | null>;
|
|
26
|
+
type BunHandler = (request: Request) => Promise<Response> | Response;
|
|
27
|
+
declare function resolveFacilitatorUrlFromRequirement(config: PaymentConfig, requirement: PaymentRequirementsV2): string | undefined;
|
|
28
|
+
declare function createPaymentRequirements(config: PaymentConfig): ResolvedRequirementsConfig;
|
|
29
|
+
declare const paymentMiddleware: (config: PaymentConfig, handler?: BunHandler) => BunMiddleware$1;
|
|
30
|
+
|
|
31
|
+
interface MiddlewareConfig {
|
|
32
|
+
payTo: PayToAddress;
|
|
33
|
+
network: string | number;
|
|
34
|
+
amount: string;
|
|
35
|
+
facilitator?: FacilitatorConfig;
|
|
36
|
+
settlementMode?: SettlementMode;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type BunMiddleware = (request: Request) => Promise<Response | null>;
|
|
40
|
+
interface RouteAwareBunMiddlewareConfig extends MiddlewareConfig {
|
|
41
|
+
route?: string;
|
|
42
|
+
routes?: string[];
|
|
43
|
+
perRoute?: Record<string, Partial<MiddlewareConfig>>;
|
|
44
|
+
waitForSettlement?: boolean;
|
|
45
|
+
}
|
|
46
|
+
declare const createRouteAwareBunMiddleware: (config: RouteAwareBunMiddlewareConfig, handler?: BunHandler) => BunMiddleware | ((request: Request) => Promise<Response>);
|
|
47
|
+
|
|
48
|
+
export { type BunHandler as B, type MiddlewareConfig as M, type PaymentConfig as P, type ResolvedRequirementsConfig as R, type BunMiddleware$1 as a, type RouteAwareBunMiddlewareConfig as b, createPaymentRequirements as c, createRouteAwareBunMiddleware as d, type BunMiddleware as e, paymentMiddleware as p, resolveFacilitatorUrlFromRequirement as r };
|
package/dist/routes.d.ts
CHANGED
|
@@ -1,27 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
interface MiddlewareConfig {
|
|
4
|
-
payTo: PayToAddress;
|
|
5
|
-
network: string | number;
|
|
6
|
-
amount: string;
|
|
7
|
-
facilitator?: FacilitatorConfig;
|
|
8
|
-
settlementMode?: SettlementMode;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
type BunMiddleware$1 = (request: Request) => Promise<Response | null>;
|
|
12
|
-
interface RouteAwareBunMiddlewareConfig extends MiddlewareConfig {
|
|
13
|
-
route?: string;
|
|
14
|
-
routes?: string[];
|
|
15
|
-
perRoute?: Record<string, Partial<MiddlewareConfig>>;
|
|
16
|
-
waitForSettlement?: boolean;
|
|
17
|
-
}
|
|
18
|
-
declare const createRouteAwareBunMiddleware: (config: RouteAwareBunMiddlewareConfig, handler?: BunHandler) => BunMiddleware$1 | ((request: Request) => Promise<Response>);
|
|
19
|
-
|
|
20
|
-
type BunMiddleware = (request: Request) => Promise<Response | null>;
|
|
21
|
-
type BunHandler = (request: Request) => Promise<Response> | Response;
|
|
22
|
-
interface BunMiddlewareConfig extends MiddlewareConfig {
|
|
23
|
-
waitForSettlement?: boolean;
|
|
24
|
-
}
|
|
25
|
-
declare const createBunMiddleware: (config: BunMiddlewareConfig, handler?: BunHandler) => BunMiddleware | ((request: Request) => Promise<Response>);
|
|
26
|
-
|
|
27
|
-
export { type BunHandler as B, type BunMiddleware$1 as BunMiddleware, type RouteAwareBunMiddlewareConfig, type BunMiddleware as a, type BunMiddlewareConfig as b, createBunMiddleware as c, createRouteAwareBunMiddleware };
|
|
1
|
+
export { e as BunMiddleware, b as RouteAwareBunMiddlewareConfig, d as createRouteAwareBunMiddleware } from './routes-BKjM-6xh.js';
|
|
2
|
+
import '@armory-sh/base';
|
package/dist/routes.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createRouteAwareBunMiddleware } from './chunk-
|
|
1
|
+
export { createRouteAwareBunMiddleware } from './chunk-BJBLQMMR.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@armory-sh/middleware-bun",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.27",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Sawyer Cutler <sawyer@dirtroad.dev>",
|
|
6
6
|
"keywords": [
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"directory": "packages/middleware-bun"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@armory-sh/base": "0.2.
|
|
46
|
+
"@armory-sh/base": "0.2.29"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"bun-types": "latest",
|
|
@@ -52,6 +52,8 @@
|
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
54
|
"build": "rm -rf dist && tsup",
|
|
55
|
+
"lint": "bun run build",
|
|
56
|
+
"format": "bun run lint",
|
|
55
57
|
"test": "bun test"
|
|
56
58
|
}
|
|
57
59
|
}
|