@armory-sh/middleware-bun 0.3.27 → 0.3.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/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as MiddlewareConfig, B as BunHandler, a as BunMiddleware } from './routes-
|
|
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-
|
|
1
|
+
import { M as MiddlewareConfig, B as BunHandler, a as BunMiddleware } from './routes-C69V5KAQ.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-C69V5KAQ.js';
|
|
3
3
|
import '@armory-sh/base';
|
|
4
4
|
|
|
5
5
|
interface BunMiddlewareConfig extends MiddlewareConfig {
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { createPaymentRequirements as createPaymentRequirements$1 } from './chunk-BJBLQMMR.js';
|
|
2
2
|
export { createRouteAwareBunMiddleware } from './chunk-BJBLQMMR.js';
|
|
3
|
-
import { resolveNetwork, isValidationError, resolveToken, createPaymentRequirements, PAYMENT_SIGNATURE_HEADER,
|
|
3
|
+
import { resolveNetwork, isValidationError, resolveToken, enrichPaymentRequirements, createPaymentRequirements, PAYMENT_SIGNATURE_HEADER, decodePayloadHeader, findRequirementByAccepted, verifyPayment, extractPayerAddress, settlePayment, createPaymentRequiredHeaders, TOKENS, registerToken, createSettlementHeaders, getSupported } from '@armory-sh/base';
|
|
4
4
|
|
|
5
|
+
var extensionCapabilityCache = /* @__PURE__ */ new Map();
|
|
6
|
+
var EXTENSION_CAPABILITY_TTL_MS = 5 * 60 * 1e3;
|
|
5
7
|
function ensureTokensRegistered() {
|
|
6
8
|
for (const token of Object.values(TOKENS)) {
|
|
7
9
|
try {
|
|
@@ -18,17 +20,13 @@ function resolveFacilitatorUrlFromRequirement(config, requirement) {
|
|
|
18
20
|
config.facilitatorUrlByToken
|
|
19
21
|
)) {
|
|
20
22
|
const resolvedChain = resolveNetwork(chainKey);
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return url;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
23
|
+
if (isValidationError(resolvedChain) || resolvedChain.config.chainId !== chainId) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
for (const [tokenKey, url] of Object.entries(tokenMap)) {
|
|
27
|
+
const resolvedToken = resolveToken(tokenKey, resolvedChain);
|
|
28
|
+
if (!isValidationError(resolvedToken) && resolvedToken.config.contractAddress.toLowerCase() === assetAddress) {
|
|
29
|
+
return url;
|
|
32
30
|
}
|
|
33
31
|
}
|
|
34
32
|
}
|
|
@@ -47,8 +45,9 @@ function resolveFacilitatorUrlFromRequirement(config, requirement) {
|
|
|
47
45
|
}
|
|
48
46
|
function createPaymentRequirements2(config) {
|
|
49
47
|
if (config.requirements) {
|
|
48
|
+
const requirements = Array.isArray(config.requirements) ? config.requirements : [config.requirements];
|
|
50
49
|
return {
|
|
51
|
-
requirements:
|
|
50
|
+
requirements: enrichPaymentRequirements(requirements)
|
|
52
51
|
};
|
|
53
52
|
}
|
|
54
53
|
if (!config.payTo) {
|
|
@@ -63,6 +62,48 @@ function createPaymentRequirements2(config) {
|
|
|
63
62
|
ensureTokensRegistered();
|
|
64
63
|
return createPaymentRequirements(config);
|
|
65
64
|
}
|
|
65
|
+
async function resolvePaymentRequiredExtensions(config, requirements) {
|
|
66
|
+
if (!config.extensions) {
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
let filtered = { ...config.extensions };
|
|
70
|
+
for (const requirement of requirements) {
|
|
71
|
+
const facilitatorUrl = resolveFacilitatorUrlFromRequirement(config, requirement);
|
|
72
|
+
if (!facilitatorUrl) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const cacheKey = `${facilitatorUrl}|${requirement.network.toLowerCase()}`;
|
|
76
|
+
const now = Date.now();
|
|
77
|
+
let keys = extensionCapabilityCache.get(cacheKey);
|
|
78
|
+
if (!keys || keys.expiresAt <= now) {
|
|
79
|
+
try {
|
|
80
|
+
const supported = await getSupported({ url: facilitatorUrl });
|
|
81
|
+
const nextKeys = /* @__PURE__ */ new Set();
|
|
82
|
+
for (const kind of supported.kinds) {
|
|
83
|
+
if (kind.network.toLowerCase() !== requirement.network.toLowerCase()) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (kind.extra && typeof kind.extra === "object") {
|
|
87
|
+
for (const key of Object.keys(kind.extra)) {
|
|
88
|
+
nextKeys.add(key);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
keys = { expiresAt: now + EXTENSION_CAPABILITY_TTL_MS, keys: nextKeys };
|
|
93
|
+
} catch {
|
|
94
|
+
keys = { expiresAt: now + EXTENSION_CAPABILITY_TTL_MS, keys: /* @__PURE__ */ new Set() };
|
|
95
|
+
}
|
|
96
|
+
extensionCapabilityCache.set(cacheKey, keys);
|
|
97
|
+
}
|
|
98
|
+
filtered = Object.fromEntries(
|
|
99
|
+
Object.entries(filtered).filter(([key]) => keys.keys.has(key))
|
|
100
|
+
);
|
|
101
|
+
if (Object.keys(filtered).length === 0) {
|
|
102
|
+
return {};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return filtered;
|
|
106
|
+
}
|
|
66
107
|
var errorResponse = (error, status, headers, accepts) => new Response(JSON.stringify({ error, accepts }), {
|
|
67
108
|
status,
|
|
68
109
|
headers: { "Content-Type": "application/json", ...headers }
|
|
@@ -99,6 +140,12 @@ var appendSettlementHeaders = (response, settlement) => {
|
|
|
99
140
|
};
|
|
100
141
|
var paymentMiddleware = (config, handler) => {
|
|
101
142
|
const { requirements, error } = createPaymentRequirements2(config);
|
|
143
|
+
const resolvePaymentRequiredHeaders = async () => createPaymentRequiredHeaders(requirements, {
|
|
144
|
+
extensions: await resolvePaymentRequiredExtensions(
|
|
145
|
+
config,
|
|
146
|
+
requirements
|
|
147
|
+
)
|
|
148
|
+
});
|
|
102
149
|
return async (request) => {
|
|
103
150
|
if (error) {
|
|
104
151
|
return errorResponse(
|
|
@@ -117,10 +164,11 @@ var paymentMiddleware = (config, handler) => {
|
|
|
117
164
|
}
|
|
118
165
|
const paymentSig = request.headers.get(PAYMENT_SIGNATURE_HEADER);
|
|
119
166
|
if (!paymentSig) {
|
|
167
|
+
const requiredHeaders = await resolvePaymentRequiredHeaders();
|
|
120
168
|
return errorResponse(
|
|
121
169
|
"Payment required",
|
|
122
170
|
402,
|
|
123
|
-
|
|
171
|
+
requiredHeaders,
|
|
124
172
|
[requirements]
|
|
125
173
|
);
|
|
126
174
|
}
|
|
@@ -158,10 +206,11 @@ var paymentMiddleware = (config, handler) => {
|
|
|
158
206
|
{ url: facilitatorUrl }
|
|
159
207
|
);
|
|
160
208
|
if (!verifyResult.isValid) {
|
|
209
|
+
const requiredHeaders = await resolvePaymentRequiredHeaders();
|
|
161
210
|
return errorResponse(
|
|
162
211
|
`Payment verification failed: ${verifyResult.invalidReason}`,
|
|
163
212
|
402,
|
|
164
|
-
|
|
213
|
+
requiredHeaders
|
|
165
214
|
);
|
|
166
215
|
}
|
|
167
216
|
const payerAddress = verifyResult.payer ?? extractPayerAddress(payload);
|
|
@@ -14,6 +14,7 @@ interface PaymentConfig {
|
|
|
14
14
|
facilitatorUrl?: string;
|
|
15
15
|
facilitatorUrlByChain?: Record<string, string>;
|
|
16
16
|
facilitatorUrlByToken?: Record<string, Record<string, string>>;
|
|
17
|
+
extensions?: Record<string, unknown>;
|
|
17
18
|
}
|
|
18
19
|
interface ResolvedRequirementsConfig {
|
|
19
20
|
requirements: PaymentRequirementsV2[];
|
package/dist/routes.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { e as BunMiddleware, b as RouteAwareBunMiddlewareConfig, d as createRouteAwareBunMiddleware } from './routes-
|
|
1
|
+
export { e as BunMiddleware, b as RouteAwareBunMiddlewareConfig, d as createRouteAwareBunMiddleware } from './routes-C69V5KAQ.js';
|
|
2
2
|
import '@armory-sh/base';
|
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.29",
|
|
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.31"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"bun-types": "latest",
|