@peac/rails-x402 0.10.9 → 0.10.11
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/LICENSE +1 -1
- package/dist/index.cjs +305 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.mjs +286 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +20 -7
- package/dist/constants.js +0 -49
- package/dist/constants.js.map +0 -1
- package/dist/helpers.js +0 -138
- package/dist/helpers.js.map +0 -1
- package/dist/index.js +0 -283
- package/dist/index.js.map +0 -1
- package/dist/payment-headers.js +0 -120
- package/dist/payment-headers.js.map +0 -1
- package/dist/types.js +0 -8
- package/dist/types.js.map +0 -1
package/dist/payment-headers.js
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* x402 Payment Header Detection (Headers-Only)
|
|
4
|
-
*
|
|
5
|
-
* Provides minimal headers-only detection and extraction for x402 payment flow.
|
|
6
|
-
* No Response objects, no body parsing.
|
|
7
|
-
*
|
|
8
|
-
* x402 Header Names (per Coinbase x402 spec):
|
|
9
|
-
* - PAYMENT-REQUIRED: Server challenge with payment details
|
|
10
|
-
* - PAYMENT-SIGNATURE: Client payment proof
|
|
11
|
-
* - PAYMENT-RESPONSE: Server success response
|
|
12
|
-
*/
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.detectPaymentRequired = detectPaymentRequired;
|
|
15
|
-
exports.extractPaymentReference = extractPaymentReference;
|
|
16
|
-
exports.extractPaymentResponse = extractPaymentResponse;
|
|
17
|
-
/**
|
|
18
|
-
* Check if headers object has a .get() method.
|
|
19
|
-
*/
|
|
20
|
-
function hasGetMethod(headers) {
|
|
21
|
-
return typeof headers.get === 'function';
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get header value from plain object, handling case-insensitivity and arrays.
|
|
25
|
-
* Node.js lowercases all header names, so we check multiple casings.
|
|
26
|
-
*/
|
|
27
|
-
function getFromPlainObject(headers, name) {
|
|
28
|
-
// Common casings to try
|
|
29
|
-
const casings = [
|
|
30
|
-
name.toLowerCase(),
|
|
31
|
-
name.toUpperCase(),
|
|
32
|
-
name
|
|
33
|
-
.split('-')
|
|
34
|
-
.map((s) => s.charAt(0).toUpperCase() + s.slice(1).toLowerCase())
|
|
35
|
-
.join('-'),
|
|
36
|
-
];
|
|
37
|
-
for (const key of casings) {
|
|
38
|
-
const value = headers[key];
|
|
39
|
-
if (value !== undefined) {
|
|
40
|
-
// Handle array values (take first element)
|
|
41
|
-
return Array.isArray(value) ? (value[0] ?? null) : value;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// Also try exact match and iterate all keys for case-insensitive match
|
|
45
|
-
const lowerName = name.toLowerCase();
|
|
46
|
-
for (const key of Object.keys(headers)) {
|
|
47
|
-
if (key.toLowerCase() === lowerName) {
|
|
48
|
-
const value = headers[key];
|
|
49
|
-
if (value !== undefined) {
|
|
50
|
-
return Array.isArray(value) ? (value[0] ?? null) : value;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Case-insensitive header getter helper.
|
|
58
|
-
* Handles both Headers-like objects (.get() method) and plain objects.
|
|
59
|
-
*
|
|
60
|
-
* @param headers - Headers object or plain object to query
|
|
61
|
-
* @param name - Header name to look up
|
|
62
|
-
* @returns Header value or null if not found
|
|
63
|
-
*/
|
|
64
|
-
function getHeaderCaseInsensitive(headers, name) {
|
|
65
|
-
if (hasGetMethod(headers)) {
|
|
66
|
-
// Use .get() method - most Headers implementations are case-insensitive
|
|
67
|
-
// but we try multiple casings for implementations that aren't
|
|
68
|
-
const lower = headers.get(name.toLowerCase());
|
|
69
|
-
if (lower !== null)
|
|
70
|
-
return lower;
|
|
71
|
-
const titleCase = name
|
|
72
|
-
.split('-')
|
|
73
|
-
.map((s) => s.charAt(0).toUpperCase() + s.slice(1).toLowerCase())
|
|
74
|
-
.join('-');
|
|
75
|
-
const title = headers.get(titleCase);
|
|
76
|
-
if (title !== null)
|
|
77
|
-
return title;
|
|
78
|
-
const upper = headers.get(name.toUpperCase());
|
|
79
|
-
if (upper !== null)
|
|
80
|
-
return upper;
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
// Plain object path
|
|
84
|
-
return getFromPlainObject(headers, name);
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Detect payment-required mode from HTTP headers.
|
|
88
|
-
* Uses case-insensitive lookup and trims whitespace.
|
|
89
|
-
*
|
|
90
|
-
* @param headers - HTTP headers (HeadersLike interface)
|
|
91
|
-
* @returns true if PAYMENT-REQUIRED header is present and non-empty
|
|
92
|
-
*/
|
|
93
|
-
function detectPaymentRequired(headers) {
|
|
94
|
-
const paymentRequired = getHeaderCaseInsensitive(headers, 'payment-required');
|
|
95
|
-
return paymentRequired !== null && paymentRequired.trim().length > 0;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Extract payment reference from HTTP headers.
|
|
99
|
-
* Returns the PAYMENT-REQUIRED header value (contains payment details).
|
|
100
|
-
* Uses case-insensitive lookup.
|
|
101
|
-
*
|
|
102
|
-
* @param headers - HTTP headers (HeadersLike interface)
|
|
103
|
-
* @returns PAYMENT-REQUIRED header value, or undefined if not present/empty
|
|
104
|
-
*/
|
|
105
|
-
function extractPaymentReference(headers) {
|
|
106
|
-
const value = getHeaderCaseInsensitive(headers, 'payment-required');
|
|
107
|
-
return value?.trim() || undefined;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Extract payment response from success headers.
|
|
111
|
-
* Uses case-insensitive lookup.
|
|
112
|
-
*
|
|
113
|
-
* @param headers - HTTP headers (HeadersLike interface)
|
|
114
|
-
* @returns PAYMENT-RESPONSE header value, or undefined if not present/empty
|
|
115
|
-
*/
|
|
116
|
-
function extractPaymentResponse(headers) {
|
|
117
|
-
const value = getHeaderCaseInsensitive(headers, 'payment-response');
|
|
118
|
-
return value?.trim() || undefined;
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=payment-headers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"payment-headers.js","sourceRoot":"","sources":["../src/payment-headers.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|