@contextvm/sdk 0.12.4 → 0.13.0
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/esm/core/constants.d.ts +2 -0
- package/dist/esm/core/constants.d.ts.map +1 -1
- package/dist/esm/core/constants.js +2 -0
- package/dist/esm/core/constants.js.map +1 -1
- package/dist/esm/payments/authorization-store.d.ts +55 -0
- package/dist/esm/payments/authorization-store.d.ts.map +1 -0
- package/dist/esm/payments/authorization-store.js +115 -0
- package/dist/esm/payments/authorization-store.js.map +1 -0
- package/dist/esm/payments/canonical-identity.d.ts +21 -0
- package/dist/esm/payments/canonical-identity.d.ts.map +1 -0
- package/dist/esm/payments/canonical-identity.js +54 -0
- package/dist/esm/payments/canonical-identity.js.map +1 -0
- package/dist/esm/payments/client-payments.d.ts +43 -0
- package/dist/esm/payments/client-payments.d.ts.map +1 -1
- package/dist/esm/payments/client-payments.js +248 -28
- package/dist/esm/payments/client-payments.js.map +1 -1
- package/dist/esm/payments/constants.d.ts +12 -0
- package/dist/esm/payments/constants.d.ts.map +1 -1
- package/dist/esm/payments/constants.js +12 -0
- package/dist/esm/payments/constants.js.map +1 -1
- package/dist/esm/payments/server-explicit-gating.d.ts +13 -0
- package/dist/esm/payments/server-explicit-gating.d.ts.map +1 -0
- package/dist/esm/payments/server-explicit-gating.js +189 -0
- package/dist/esm/payments/server-explicit-gating.js.map +1 -0
- package/dist/esm/payments/server-payments-utils.d.ts +39 -0
- package/dist/esm/payments/server-payments-utils.d.ts.map +1 -0
- package/dist/esm/payments/server-payments-utils.js +117 -0
- package/dist/esm/payments/server-payments-utils.js.map +1 -0
- package/dist/esm/payments/server-payments.d.ts +10 -1
- package/dist/esm/payments/server-payments.d.ts.map +1 -1
- package/dist/esm/payments/server-payments.js +74 -150
- package/dist/esm/payments/server-payments.js.map +1 -1
- package/dist/esm/payments/server-transport-payments.d.ts +6 -0
- package/dist/esm/payments/server-transport-payments.d.ts.map +1 -1
- package/dist/esm/payments/server-transport-payments.js +46 -3
- package/dist/esm/payments/server-transport-payments.js.map +1 -1
- package/dist/esm/payments/types.d.ts +77 -9
- package/dist/esm/payments/types.d.ts.map +1 -1
- package/dist/esm/payments/types.js.map +1 -1
- package/dist/esm/relay/applesauce-relay-pool.d.ts.map +1 -1
- package/dist/esm/relay/applesauce-relay-pool.js +22 -9
- package/dist/esm/relay/applesauce-relay-pool.js.map +1 -1
- package/dist/esm/transport/capability-negotiator.d.ts +17 -2
- package/dist/esm/transport/capability-negotiator.d.ts.map +1 -1
- package/dist/esm/transport/capability-negotiator.js +27 -2
- package/dist/esm/transport/capability-negotiator.js.map +1 -1
- package/dist/esm/transport/middleware.d.ts +8 -0
- package/dist/esm/transport/middleware.d.ts.map +1 -1
- package/dist/esm/transport/nostr-client/event-pipeline.d.ts +14 -0
- package/dist/esm/transport/nostr-client/event-pipeline.d.ts.map +1 -1
- package/dist/esm/transport/nostr-client/event-pipeline.js +90 -61
- package/dist/esm/transport/nostr-client/event-pipeline.js.map +1 -1
- package/dist/esm/transport/nostr-client/inbound-coordinator.d.ts +1 -1
- package/dist/esm/transport/nostr-client/inbound-coordinator.d.ts.map +1 -1
- package/dist/esm/transport/nostr-client/inbound-coordinator.js +16 -1
- package/dist/esm/transport/nostr-client/inbound-coordinator.js.map +1 -1
- package/dist/esm/transport/nostr-client/outbound-sender.d.ts.map +1 -1
- package/dist/esm/transport/nostr-client/outbound-sender.js +2 -2
- package/dist/esm/transport/nostr-client/outbound-sender.js.map +1 -1
- package/dist/esm/transport/nostr-client/server-metadata-store.d.ts +4 -0
- package/dist/esm/transport/nostr-client/server-metadata-store.d.ts.map +1 -1
- package/dist/esm/transport/nostr-client/server-metadata-store.js +7 -0
- package/dist/esm/transport/nostr-client/server-metadata-store.js.map +1 -1
- package/dist/esm/transport/nostr-client-transport.d.ts +9 -0
- package/dist/esm/transport/nostr-client-transport.d.ts.map +1 -1
- package/dist/esm/transport/nostr-client-transport.js +19 -3
- package/dist/esm/transport/nostr-client-transport.js.map +1 -1
- package/dist/esm/transport/nostr-server/inbound-coordinator.d.ts +3 -0
- package/dist/esm/transport/nostr-server/inbound-coordinator.d.ts.map +1 -1
- package/dist/esm/transport/nostr-server/inbound-coordinator.js +58 -3
- package/dist/esm/transport/nostr-server/inbound-coordinator.js.map +1 -1
- package/dist/esm/transport/nostr-server/outbound-response-router.d.ts +7 -0
- package/dist/esm/transport/nostr-server/outbound-response-router.d.ts.map +1 -1
- package/dist/esm/transport/nostr-server/outbound-response-router.js +43 -1
- package/dist/esm/transport/nostr-server/outbound-response-router.js.map +1 -1
- package/dist/esm/transport/nostr-server/session-store.d.ts +7 -0
- package/dist/esm/transport/nostr-server/session-store.d.ts.map +1 -1
- package/dist/esm/transport/nostr-server/session-store.js.map +1 -1
- package/dist/esm/transport/nostr-server-transport.d.ts +16 -1
- package/dist/esm/transport/nostr-server-transport.d.ts.map +1 -1
- package/dist/esm/transport/nostr-server-transport.js +18 -0
- package/dist/esm/transport/nostr-server-transport.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { isJsonRpcRequest
|
|
1
|
+
import { isJsonRpcRequest } from './types.js';
|
|
2
2
|
import { LruCache } from '../core/utils/lru-cache.js';
|
|
3
3
|
import { withTimeout } from '../core/utils/utils.js';
|
|
4
4
|
import { createLogger } from '../core/utils/logger.js';
|
|
5
5
|
import { DEFAULT_PAYMENT_TTL_MS, PAYMENT_ACCEPTED_METHOD, PAYMENT_REJECTED_METHOD, PAYMENT_REQUIRED_METHOD, } from './constants.js';
|
|
6
|
+
import { buildProcessorsByPmi, matchPricedCapability, resolveAndInitiatePayment, } from './server-payments-utils.js';
|
|
6
7
|
function purgeExpiredPending(params) {
|
|
7
8
|
let checked = 0;
|
|
8
9
|
for (const [key, value] of params.pending.entries()) {
|
|
@@ -15,46 +16,6 @@ function purgeExpiredPending(params) {
|
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
|
-
function getVerificationTimeoutMs(params) {
|
|
19
|
-
// CEP-8 TTL is in seconds. If TTL is absent, default is 5 minutes.
|
|
20
|
-
const ttlSeconds = params.ttlSeconds;
|
|
21
|
-
if (ttlSeconds === undefined) {
|
|
22
|
-
return 5 * 60 * 1000;
|
|
23
|
-
}
|
|
24
|
-
if (!Number.isFinite(ttlSeconds) || ttlSeconds <= 0) {
|
|
25
|
-
return 5 * 60 * 1000;
|
|
26
|
-
}
|
|
27
|
-
return Math.floor(ttlSeconds * 1000);
|
|
28
|
-
}
|
|
29
|
-
function matchPricedCapability(message, priced) {
|
|
30
|
-
const capabilityName = getCapabilityNameForPricing(message);
|
|
31
|
-
return priced.find((p) => {
|
|
32
|
-
if (p.method !== message.method)
|
|
33
|
-
return false;
|
|
34
|
-
if (p.name === undefined)
|
|
35
|
-
return true;
|
|
36
|
-
return p.name === capabilityName;
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
function getCapabilityNameForPricing(message) {
|
|
40
|
-
const params = message.params;
|
|
41
|
-
switch (message.method) {
|
|
42
|
-
case 'tools/call': {
|
|
43
|
-
const name = params === null || params === void 0 ? void 0 : params.name;
|
|
44
|
-
return typeof name === 'string' ? name : undefined;
|
|
45
|
-
}
|
|
46
|
-
case 'prompts/get': {
|
|
47
|
-
const name = params === null || params === void 0 ? void 0 : params.name;
|
|
48
|
-
return typeof name === 'string' ? name : undefined;
|
|
49
|
-
}
|
|
50
|
-
case 'resources/read': {
|
|
51
|
-
const uri = params === null || params === void 0 ? void 0 : params.uri;
|
|
52
|
-
return typeof uri === 'string' ? uri : undefined;
|
|
53
|
-
}
|
|
54
|
-
default:
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
19
|
function createPaymentRequiredNotification(params) {
|
|
59
20
|
return {
|
|
60
21
|
jsonrpc: '2.0',
|
|
@@ -76,38 +37,27 @@ function createPaymentRejectedNotification(params) {
|
|
|
76
37
|
params,
|
|
77
38
|
};
|
|
78
39
|
}
|
|
79
|
-
function isResolvePriceRejection(quote) {
|
|
80
|
-
return 'reject' in quote && quote.reject;
|
|
81
|
-
}
|
|
82
|
-
function isResolvePriceWaiver(quote) {
|
|
83
|
-
return 'waive' in quote && quote.waive;
|
|
84
|
-
}
|
|
85
40
|
/**
|
|
86
41
|
* Creates a server-side middleware that gates priced requests until payment is verified.
|
|
87
42
|
*/
|
|
88
43
|
export function createServerPaymentsMiddleware(params) {
|
|
89
|
-
var _a, _b;
|
|
44
|
+
var _a, _b, _c;
|
|
90
45
|
const { sender, options } = params;
|
|
91
46
|
const logger = createLogger('server-payments');
|
|
92
|
-
const processorsByPmi =
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
for (const p of options.processors) {
|
|
96
|
-
if (seenProcessorPmis.has(p.pmi)) {
|
|
97
|
-
logger.warn('duplicate PMI processor registered, last one wins', {
|
|
98
|
-
pmi: p.pmi,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
seenProcessorPmis.add(p.pmi);
|
|
102
|
-
}
|
|
103
|
-
const paymentTtlMs = (_a = options.paymentTtlMs) !== null && _a !== void 0 ? _a : DEFAULT_PAYMENT_TTL_MS;
|
|
104
|
-
const pending = new LruCache((_b = options.maxPendingPayments) !== null && _b !== void 0 ? _b : 1000);
|
|
47
|
+
const processorsByPmi = (_a = params.processorsByPmi) !== null && _a !== void 0 ? _a : buildProcessorsByPmi(options.processors, logger);
|
|
48
|
+
const paymentTtlMs = (_b = options.paymentTtlMs) !== null && _b !== void 0 ? _b : DEFAULT_PAYMENT_TTL_MS;
|
|
49
|
+
const pending = new LruCache((_c = options.maxPendingPayments) !== null && _c !== void 0 ? _c : 1000);
|
|
105
50
|
return async (message, ctx, forward) => {
|
|
106
51
|
// Only gate requests. Never interfere with notifications.
|
|
107
52
|
if (!isJsonRpcRequest(message)) {
|
|
108
53
|
await forward(message);
|
|
109
54
|
return;
|
|
110
55
|
}
|
|
56
|
+
if (ctx.paymentInteraction !== undefined &&
|
|
57
|
+
ctx.paymentInteraction !== 'transparent') {
|
|
58
|
+
await forward(message);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
111
61
|
const priced = matchPricedCapability(message, options.pricedCapabilities);
|
|
112
62
|
if (!priced) {
|
|
113
63
|
await forward(message);
|
|
@@ -135,111 +85,85 @@ export function createServerPaymentsMiddleware(params) {
|
|
|
135
85
|
}
|
|
136
86
|
// IMPORTANT: set pending state synchronously before any await to make idempotency atomic.
|
|
137
87
|
const inFlight = (async () => {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
:
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
throw new Error('No payment processors configured');
|
|
148
|
-
}
|
|
149
|
-
const processor = chosenProcessor;
|
|
150
|
-
const quote = options.resolvePrice
|
|
151
|
-
? await options.resolvePrice({
|
|
152
|
-
capability: priced,
|
|
153
|
-
request: message,
|
|
154
|
-
clientPubkey: ctx.clientPubkey,
|
|
155
|
-
requestEventId,
|
|
156
|
-
})
|
|
157
|
-
: { amount: priced.amount, description: priced.description };
|
|
88
|
+
const initResult = await resolveAndInitiatePayment({
|
|
89
|
+
message,
|
|
90
|
+
priced,
|
|
91
|
+
requestEventId,
|
|
92
|
+
clientPubkey: ctx.clientPubkey,
|
|
93
|
+
clientPmis: ctx.clientPmis,
|
|
94
|
+
options,
|
|
95
|
+
processorsByPmi,
|
|
96
|
+
});
|
|
158
97
|
// Handle rejection: emit payment_rejected and do not forward.
|
|
159
|
-
if (
|
|
98
|
+
if (initResult.kind === 'rejected') {
|
|
160
99
|
logger.info('payment rejected', {
|
|
161
100
|
requestEventId,
|
|
162
|
-
pmi:
|
|
101
|
+
pmi: initResult.pmi,
|
|
163
102
|
amount: priced.amount,
|
|
164
|
-
reason:
|
|
103
|
+
reason: initResult.message,
|
|
165
104
|
});
|
|
166
105
|
const rejectedNotification = createPaymentRejectedNotification({
|
|
167
|
-
pmi:
|
|
106
|
+
pmi: initResult.pmi,
|
|
168
107
|
amount: priced.amount,
|
|
169
|
-
message:
|
|
108
|
+
message: initResult.message,
|
|
170
109
|
});
|
|
171
110
|
await sender.sendNotification(ctx.clientPubkey, rejectedNotification, requestEventId);
|
|
111
|
+
return;
|
|
172
112
|
}
|
|
173
|
-
|
|
113
|
+
if (initResult.kind === 'waived') {
|
|
174
114
|
logger.debug('payment waived, forwarding priced request', {
|
|
175
115
|
requestEventId,
|
|
176
116
|
method: message.method,
|
|
177
117
|
});
|
|
178
118
|
await forward(message);
|
|
119
|
+
return;
|
|
179
120
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
logger.info('payment accepted', {
|
|
227
|
-
requestEventId,
|
|
228
|
-
pmi: paymentRequired.pmi,
|
|
229
|
-
amount: paymentRequired.amount,
|
|
230
|
-
});
|
|
231
|
-
const acceptedNotification = createPaymentAcceptedNotification({
|
|
232
|
-
amount: paymentRequired.amount,
|
|
233
|
-
pmi: paymentRequired.pmi,
|
|
234
|
-
_meta: verified._meta,
|
|
235
|
-
});
|
|
236
|
-
await sender.sendNotification(ctx.clientPubkey, acceptedNotification, requestEventId);
|
|
237
|
-
logger.debug('forwarding priced request after payment', {
|
|
238
|
-
requestEventId,
|
|
239
|
-
method: message.method,
|
|
240
|
-
});
|
|
241
|
-
await forward(message);
|
|
242
|
-
}
|
|
121
|
+
const { paymentRequired, mergedMeta, processor, verifyTimeoutMs } = initResult;
|
|
122
|
+
const requiredNotification = createPaymentRequiredNotification({
|
|
123
|
+
amount: paymentRequired.amount,
|
|
124
|
+
pay_req: paymentRequired.pay_req,
|
|
125
|
+
pmi: paymentRequired.pmi,
|
|
126
|
+
description: paymentRequired.description,
|
|
127
|
+
ttl: paymentRequired.ttl,
|
|
128
|
+
_meta: mergedMeta,
|
|
129
|
+
});
|
|
130
|
+
logger.info('payment required notification sent', {
|
|
131
|
+
requestEventId,
|
|
132
|
+
pmi: paymentRequired.pmi,
|
|
133
|
+
amount: paymentRequired.amount,
|
|
134
|
+
ttl: paymentRequired.ttl,
|
|
135
|
+
});
|
|
136
|
+
await sender.sendNotification(ctx.clientPubkey, requiredNotification, requestEventId);
|
|
137
|
+
// Use the strict verification timeout bound for polling
|
|
138
|
+
const pollingTimeoutMs = Math.min(verifyTimeoutMs, paymentTtlMs);
|
|
139
|
+
logger.debug('verifying payment', {
|
|
140
|
+
requestEventId,
|
|
141
|
+
pmi: paymentRequired.pmi,
|
|
142
|
+
timeoutMs: pollingTimeoutMs,
|
|
143
|
+
});
|
|
144
|
+
const controller = new AbortController();
|
|
145
|
+
const verified = await withTimeout(processor.verifyPayment({
|
|
146
|
+
pay_req: paymentRequired.pay_req,
|
|
147
|
+
requestEventId,
|
|
148
|
+
clientPubkey: ctx.clientPubkey,
|
|
149
|
+
abortSignal: controller.signal,
|
|
150
|
+
}), pollingTimeoutMs, 'verifyPayment timed out').finally(() => controller.abort());
|
|
151
|
+
logger.info('payment accepted', {
|
|
152
|
+
requestEventId,
|
|
153
|
+
pmi: paymentRequired.pmi,
|
|
154
|
+
amount: paymentRequired.amount,
|
|
155
|
+
});
|
|
156
|
+
const acceptedNotification = createPaymentAcceptedNotification({
|
|
157
|
+
amount: paymentRequired.amount,
|
|
158
|
+
pmi: paymentRequired.pmi,
|
|
159
|
+
_meta: verified._meta,
|
|
160
|
+
});
|
|
161
|
+
await sender.sendNotification(ctx.clientPubkey, acceptedNotification, requestEventId);
|
|
162
|
+
logger.debug('forwarding priced request after payment', {
|
|
163
|
+
requestEventId,
|
|
164
|
+
method: message.method,
|
|
165
|
+
});
|
|
166
|
+
await forward(message);
|
|
243
167
|
})();
|
|
244
168
|
const state = {
|
|
245
169
|
expiresAtMs: now + paymentTtlMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-payments.js","sourceRoot":"","sources":["../../../src/payments/server-payments.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-payments.js","sourceRoot":"","sources":["../../../src/payments/server-payments.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,12 @@ import type { NostrServerTransport } from '../transport/nostr-server-transport.j
|
|
|
2
2
|
import type { ServerPaymentsOptions } from './server-payments.js';
|
|
3
3
|
/**
|
|
4
4
|
* Attaches CEP-8 payments gating to a NostrServerTransport.
|
|
5
|
+
*
|
|
6
|
+
* By default the server uses the `optional` policy: it advertises
|
|
7
|
+
* `explicit_gating` support and mirrors each client's requested lifecycle, so a
|
|
8
|
+
* client that requests `explicit_gating` is gated while transparent clients keep
|
|
9
|
+
* the notification-based flow. Pass `paymentInteraction: 'transparent'` for a
|
|
10
|
+
* transparent-only server.
|
|
5
11
|
*/
|
|
6
12
|
export declare function withServerPayments(transport: NostrServerTransport, options: ServerPaymentsOptions): NostrServerTransport;
|
|
7
13
|
//# sourceMappingURL=server-transport-payments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-transport-payments.d.ts","sourceRoot":"","sources":["../../../src/payments/server-transport-payments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"server-transport-payments.d.ts","sourceRoot":"","sources":["../../../src/payments/server-transport-payments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAEnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAUlE;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,oBAAoB,EAC/B,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CA0DtB"}
|
|
@@ -1,14 +1,57 @@
|
|
|
1
1
|
import { createCapTagsFromPricedCapabilities } from './cap-tags.js';
|
|
2
2
|
import { createPmiTagsFromProcessors } from './pmi-tags.js';
|
|
3
3
|
import { createServerPaymentsMiddleware } from './server-payments.js';
|
|
4
|
+
import { createExplicitGatingMiddleware } from './server-explicit-gating.js';
|
|
5
|
+
import { AuthorizationStore } from './authorization-store.js';
|
|
6
|
+
import { buildProcessorsByPmi } from './server-payments-utils.js';
|
|
7
|
+
import { createLogger } from '../core/utils/logger.js';
|
|
8
|
+
import { NOSTR_TAGS } from '../core/constants.js';
|
|
4
9
|
/**
|
|
5
10
|
* Attaches CEP-8 payments gating to a NostrServerTransport.
|
|
11
|
+
*
|
|
12
|
+
* By default the server uses the `optional` policy: it advertises
|
|
13
|
+
* `explicit_gating` support and mirrors each client's requested lifecycle, so a
|
|
14
|
+
* client that requests `explicit_gating` is gated while transparent clients keep
|
|
15
|
+
* the notification-based flow. Pass `paymentInteraction: 'transparent'` for a
|
|
16
|
+
* transparent-only server.
|
|
6
17
|
*/
|
|
7
18
|
export function withServerPayments(transport, options) {
|
|
8
|
-
|
|
9
|
-
|
|
19
|
+
var _a;
|
|
20
|
+
// Build the PMI → processor map once and share it across both middlewares.
|
|
21
|
+
const processorsByPmi = buildProcessorsByPmi(options.processors, createLogger('server-payments'));
|
|
22
|
+
const policy = (_a = options.paymentInteraction) !== null && _a !== void 0 ? _a : 'optional';
|
|
23
|
+
const supportsExplicitGating = policy === 'optional';
|
|
24
|
+
// CEP-8 discovery tags: advertise supported PMIs + reference pricing on
|
|
25
|
+
// announcement/list events. When explicit gating is supported, also advertise
|
|
26
|
+
// it as an available opt-in mode (availability, not effective session mode).
|
|
27
|
+
const extraTags = createPmiTagsFromProcessors(options.processors);
|
|
28
|
+
if (supportsExplicitGating) {
|
|
29
|
+
extraTags.push([NOSTR_TAGS.PAYMENT_INTERACTION, 'explicit_gating']);
|
|
30
|
+
}
|
|
31
|
+
transport.setAnnouncementExtraTags(extraTags);
|
|
10
32
|
transport.setAnnouncementPricingTags(createCapTagsFromPricedCapabilities(options.pricedCapabilities));
|
|
11
|
-
|
|
33
|
+
// Expose the configured policy to the transport coordinator so it can accept
|
|
34
|
+
// or reject per-session `payment_interaction` requests.
|
|
35
|
+
transport.setSupportedPaymentInteraction(policy);
|
|
36
|
+
transport.addInboundMiddleware(createServerPaymentsMiddleware({
|
|
37
|
+
sender: transport,
|
|
38
|
+
options,
|
|
39
|
+
processorsByPmi,
|
|
40
|
+
}));
|
|
41
|
+
// The transparent middleware self-gates on the per-session effective mode, so
|
|
42
|
+
// it is safe to register the explicit-gating middleware alongside it. Each
|
|
43
|
+
// request is routed to exactly one lifecycle based on the negotiated mode.
|
|
44
|
+
if (supportsExplicitGating) {
|
|
45
|
+
const authorizationStore = new AuthorizationStore({});
|
|
46
|
+
transport.addInboundMiddleware(createExplicitGatingMiddleware({
|
|
47
|
+
options,
|
|
48
|
+
authorizationStore,
|
|
49
|
+
sendResponse: async (clientPubkey, response, requestEventId) => {
|
|
50
|
+
await transport.sendTargetedResponse(clientPubkey, response, requestEventId);
|
|
51
|
+
},
|
|
52
|
+
processorsByPmi,
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
12
55
|
return transport;
|
|
13
56
|
}
|
|
14
57
|
//# sourceMappingURL=server-transport-payments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-transport-payments.js","sourceRoot":"","sources":["../../../src/payments/server-transport-payments.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-transport-payments.js","sourceRoot":"","sources":["../../../src/payments/server-transport-payments.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mCAAmC,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAA+B,EAC/B,OAA8B;;IAE9B,2EAA2E;IAC3E,MAAM,eAAe,GAAG,oBAAoB,CAC1C,OAAO,CAAC,UAAU,EAClB,YAAY,CAAC,iBAAiB,CAAC,CAChC,CAAC;IAEF,MAAM,MAAM,GACV,MAAA,OAAO,CAAC,kBAAkB,mCAAI,UAAU,CAAC;IAC3C,MAAM,sBAAsB,GAAG,MAAM,KAAK,UAAU,CAAC;IAErD,wEAAwE;IACxE,8EAA8E;IAC9E,6EAA6E;IAC7E,MAAM,SAAS,GAAe,2BAA2B,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE9E,IAAI,sBAAsB,EAAE,CAAC;QAC3B,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,SAAS,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC9C,SAAS,CAAC,0BAA0B,CAClC,mCAAmC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAChE,CAAC;IAEF,6EAA6E;IAC7E,wDAAwD;IACxD,SAAS,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAEjD,SAAS,CAAC,oBAAoB,CAC5B,8BAA8B,CAAC;QAC7B,MAAM,EAAE,SAAS;QACjB,OAAO;QACP,eAAe;KAChB,CAAC,CACH,CAAC;IAEF,8EAA8E;IAC9E,2EAA2E;IAC3E,2EAA2E;IAC3E,IAAI,sBAAsB,EAAE,CAAC;QAC3B,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACtD,SAAS,CAAC,oBAAoB,CAC5B,8BAA8B,CAAC;YAC7B,OAAO;YACP,kBAAkB;YAClB,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE;gBAC7D,MAAM,SAAS,CAAC,oBAAoB,CAClC,YAAY,EACZ,QAAQ,EACR,cAAc,CACf,CAAC;YACJ,CAAC;YACD,eAAe;SAChB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -50,6 +50,66 @@ export type PaymentRequiredNotification = JSONRPCNotification & {
|
|
|
50
50
|
_meta?: Record<string, unknown>;
|
|
51
51
|
};
|
|
52
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* CEP-8 payment interaction modes.
|
|
55
|
+
*
|
|
56
|
+
* These are the wire/session-level modes negotiated via the `payment_interaction`
|
|
57
|
+
* tag: `transparent` (default) and `explicit_gating` (opt-in).
|
|
58
|
+
*/
|
|
59
|
+
export type PaymentInteractionMode = 'transparent' | 'explicit_gating';
|
|
60
|
+
/**
|
|
61
|
+
* Server-side policy for which payment interaction lifecycles it accepts.
|
|
62
|
+
*
|
|
63
|
+
* This is a server configuration concern, distinct from the wire-level
|
|
64
|
+
* {@link PaymentInteractionMode}. It mirrors the OPTIONAL policy used for
|
|
65
|
+
* encryption and gift wrapping, where the peer's chosen mode is mirrored rather
|
|
66
|
+
* than forced.
|
|
67
|
+
*
|
|
68
|
+
* - `optional`: Accept both lifecycles and mirror the client's requested mode
|
|
69
|
+
* for the session (the default). A client that requests `explicit_gating`
|
|
70
|
+
* gets it; a client that omits the tag or requests `transparent` stays on the
|
|
71
|
+
* transparent lifecycle.
|
|
72
|
+
* - `transparent`: Transparent-only. Reject `explicit_gating` requests with a
|
|
73
|
+
* `-32602` negotiation error per CEP-8 effective-mode disclosure.
|
|
74
|
+
*/
|
|
75
|
+
export type PaymentInteractionPolicy = 'optional' | 'transparent';
|
|
76
|
+
/** A single payment option inside a -32042 error.data.payment_options entry. */
|
|
77
|
+
export interface PaymentOption {
|
|
78
|
+
amount: number;
|
|
79
|
+
pmi: string;
|
|
80
|
+
pay_req: string;
|
|
81
|
+
description?: string;
|
|
82
|
+
ttl?: number;
|
|
83
|
+
_meta?: Record<string, unknown>;
|
|
84
|
+
}
|
|
85
|
+
/** Shape of error.data for -32042 Payment Required. */
|
|
86
|
+
export interface PaymentRequiredErrorData {
|
|
87
|
+
instructions?: string;
|
|
88
|
+
payment_options: PaymentOption[];
|
|
89
|
+
}
|
|
90
|
+
/** Shape of error.data for -32043 Payment Pending. */
|
|
91
|
+
export interface PaymentPendingErrorData {
|
|
92
|
+
instructions?: string;
|
|
93
|
+
retry_after?: number;
|
|
94
|
+
}
|
|
95
|
+
/** Nostr `payment_interaction` tag as defined by CEP-8. */
|
|
96
|
+
export type PaymentInteractionTag = [
|
|
97
|
+
'payment_interaction',
|
|
98
|
+
PaymentInteractionMode
|
|
99
|
+
];
|
|
100
|
+
/**
|
|
101
|
+
* Canonical invocation identity for explicit-gating authorization matching.
|
|
102
|
+
*
|
|
103
|
+
* `invocationHash` is SHA-256 over JCS({method, params}). This means `params` MUST be
|
|
104
|
+
* deterministic — no timestamps, UUIDs, or ephemeral IDs that change across retries.
|
|
105
|
+
* Clients MUST preserve the exact original `params` object when retrying after payment
|
|
106
|
+
* so the retry computes the same `invocationHash` and matches the paid authorization.
|
|
107
|
+
*/
|
|
108
|
+
export interface CanonicalInvocationIdentity {
|
|
109
|
+
clientPubkey: string;
|
|
110
|
+
/** Hex-encoded SHA-256 of JCS({method, params}). */
|
|
111
|
+
invocationHash: string;
|
|
112
|
+
}
|
|
53
113
|
/** A CEP-8 payment-accepted notification (JSON-RPC notification). */
|
|
54
114
|
export type PaymentAcceptedNotification = JSONRPCNotification & {
|
|
55
115
|
method: 'notifications/payment_accepted';
|
|
@@ -165,6 +225,18 @@ export type ResolvePriceFn = (params: {
|
|
|
165
225
|
clientPubkey: string;
|
|
166
226
|
requestEventId: string;
|
|
167
227
|
}) => Promise<ResolvePriceResult>;
|
|
228
|
+
/**
|
|
229
|
+
* The structure returned by a PaymentProcessor when a new payment is issued.
|
|
230
|
+
*/
|
|
231
|
+
export interface PaymentRequired {
|
|
232
|
+
amount: number;
|
|
233
|
+
pay_req: string;
|
|
234
|
+
description?: string;
|
|
235
|
+
pmi: string;
|
|
236
|
+
/** Time-to-live in seconds (CEP-8). */
|
|
237
|
+
ttl?: number;
|
|
238
|
+
_meta?: Record<string, unknown>;
|
|
239
|
+
}
|
|
168
240
|
/**
|
|
169
241
|
* Server-side module that can issue and verify payments for a single PMI.
|
|
170
242
|
*/
|
|
@@ -172,15 +244,7 @@ export interface PaymentProcessor {
|
|
|
172
244
|
/** The PMI this processor can issue/verify */
|
|
173
245
|
readonly pmi: string;
|
|
174
246
|
/** Create a payment request for a specific capability invocation */
|
|
175
|
-
createPaymentRequired(params: PaymentProcessorCreateParams): Promise<
|
|
176
|
-
amount: number;
|
|
177
|
-
pay_req: string;
|
|
178
|
-
description?: string;
|
|
179
|
-
pmi: string;
|
|
180
|
-
/** Time-to-live in seconds (CEP-8). */
|
|
181
|
-
ttl?: number;
|
|
182
|
-
_meta?: Record<string, unknown>;
|
|
183
|
-
}>;
|
|
247
|
+
createPaymentRequired(params: PaymentProcessorCreateParams): Promise<PaymentRequired>;
|
|
184
248
|
/** Wait for and/or verify settlement for a previously issued pay_req */
|
|
185
249
|
verifyPayment(params: PaymentProcessorVerifyParams): Promise<{
|
|
186
250
|
_meta?: Record<string, unknown>;
|
|
@@ -195,6 +259,10 @@ export interface ServerPaymentsContext {
|
|
|
195
259
|
* Source: Nostr event tags (e.g. multiple `['pmi', '<pmi>']`).
|
|
196
260
|
*/
|
|
197
261
|
clientPmis?: readonly string[];
|
|
262
|
+
/**
|
|
263
|
+
* The negotiated payment interaction mode for the session.
|
|
264
|
+
*/
|
|
265
|
+
paymentInteraction?: PaymentInteractionMode;
|
|
198
266
|
}
|
|
199
267
|
/**
|
|
200
268
|
* Minimal capability required by server-side payments to emit CEP-8 correlated notifications.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/payments/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/payments/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/payments/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/payments/types.ts"],"names":[],"mappings":"AAyNA;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAA8B;IACvD,OAAO;QACL,KAAK,EAAE,IAAI;QACX,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,MAAc,EACd,OAAkE;IAElE,OAAO;QACL,MAAM;QACN,GAAG,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,MAAK,SAAS,IAAI;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;QACF,GAAG,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,MAAK,SAAS,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;KAC3D,CAAC;AACJ,CAAC;AA6FD,MAAM,UAAU,gBAAgB,CAC9B,OAAuB;IAEvB,OAAO,CACJ,OAA0B,CAAC,MAAM,KAAK,SAAS;QAC/C,OAA0B,CAAC,EAAE,KAAK,SAAS,CAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applesauce-relay-pool.d.ts","sourceRoot":"","sources":["../../../src/relay/applesauce-relay-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAqBrD,mEAAmE;AACnE,eAAO,MAAM,WAAW,EAAE,MAGzB,CAAC;AAeF,oDAAoD;AACpD,MAAM,WAAW,0BAA0B;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,IAAI,CACjB,YAAY,EACZ,WAAW,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,CAC7D,CAAC;IACF,kEAAkE;IAClE,cAAc,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;CAC9D;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwC;IACtE,OAAO,CAAC,eAAe,CAAK;IAG5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kCAAkC,CAAU;IACpE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAK;IAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAO;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAU;IAG/D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAG7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAA6C;IAC3E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8C;IAE7E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAS;IAE5D,OAAO,CAAC,uBAAuB;IA8B/B,OAAO,CAAC,gBAAgB,CAAC,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,eAAe,CAAC,CAAgB;IACxC,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,MAAM,CAAe;IAE7B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;;OAGG;YACW,gBAAgB;IAwF9B,OAAO,CAAC,WAAW;IA+CnB;;;;OAIG;gBACS,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,0BAA0B;IAoBlE;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAe9B;;;OAGG;IACG,OAAO,CACX,KAAK,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,GACnC,OAAO,CAAC,IAAI,CAAC;IAwHhB;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"applesauce-relay-pool.d.ts","sourceRoot":"","sources":["../../../src/relay/applesauce-relay-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -289,18 +289,31 @@ export class ApplesauceRelayPool {
|
|
|
289
289
|
*/
|
|
290
290
|
createSubscription(filters, onEvent, onEose) {
|
|
291
291
|
logger.debug('Creating subscription', { filters });
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
292
|
+
// NOTE: applesauce-relay 6.0.3 changed `RelayGroup.subscription()` to emit
|
|
293
|
+
// only deduplicated NostrEvents and no longer surfaces EOSE markers.
|
|
294
|
+
//
|
|
295
|
+
// We deliberately subscribe to the raw `RelayGroup.req()` message stream
|
|
296
|
+
// and forward EVERY event without deduplication. Dedup is intentionally NOT
|
|
297
|
+
// performed at the relay layer:
|
|
298
|
+
// - The transport layer already deduplicates gift-wrap envelopes and
|
|
299
|
+
// decrypted inner events via its own `seenEventIds` cache, with
|
|
300
|
+
// protocol-aware semantics.
|
|
301
|
+
// - The explicit-gating payment flow republishes the SAME request event
|
|
302
|
+
// id after payment and relies on the server re-observing it. Relay-
|
|
303
|
+
// layer dedup by event id (whether applesauce 6.0.3's `distinct()` or a
|
|
304
|
+
// local `Set`) silently swallows that retry and deadlocks the flow.
|
|
305
|
+
const sub = this.relayGroup
|
|
306
|
+
.req(filters, { reconnect: Infinity, resubscribe: Infinity })
|
|
307
|
+
.subscribe({
|
|
308
|
+
next: (message) => {
|
|
309
|
+
if (message.type === 'EOSE') {
|
|
299
310
|
onEose === null || onEose === void 0 ? void 0 : onEose();
|
|
300
311
|
}
|
|
301
|
-
else {
|
|
302
|
-
onEvent(
|
|
312
|
+
else if (message.type === 'EVENT') {
|
|
313
|
+
onEvent(message.event);
|
|
303
314
|
}
|
|
315
|
+
// OPEN / CLOSED / ERROR are intentionally ignored; the old
|
|
316
|
+
// `subscription()` filtered them out as well.
|
|
304
317
|
},
|
|
305
318
|
complete: () => {
|
|
306
319
|
logger.debug('Subscription complete');
|