@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.
Files changed (83) hide show
  1. package/dist/esm/core/constants.d.ts +2 -0
  2. package/dist/esm/core/constants.d.ts.map +1 -1
  3. package/dist/esm/core/constants.js +2 -0
  4. package/dist/esm/core/constants.js.map +1 -1
  5. package/dist/esm/payments/authorization-store.d.ts +55 -0
  6. package/dist/esm/payments/authorization-store.d.ts.map +1 -0
  7. package/dist/esm/payments/authorization-store.js +115 -0
  8. package/dist/esm/payments/authorization-store.js.map +1 -0
  9. package/dist/esm/payments/canonical-identity.d.ts +21 -0
  10. package/dist/esm/payments/canonical-identity.d.ts.map +1 -0
  11. package/dist/esm/payments/canonical-identity.js +54 -0
  12. package/dist/esm/payments/canonical-identity.js.map +1 -0
  13. package/dist/esm/payments/client-payments.d.ts +43 -0
  14. package/dist/esm/payments/client-payments.d.ts.map +1 -1
  15. package/dist/esm/payments/client-payments.js +248 -28
  16. package/dist/esm/payments/client-payments.js.map +1 -1
  17. package/dist/esm/payments/constants.d.ts +12 -0
  18. package/dist/esm/payments/constants.d.ts.map +1 -1
  19. package/dist/esm/payments/constants.js +12 -0
  20. package/dist/esm/payments/constants.js.map +1 -1
  21. package/dist/esm/payments/server-explicit-gating.d.ts +13 -0
  22. package/dist/esm/payments/server-explicit-gating.d.ts.map +1 -0
  23. package/dist/esm/payments/server-explicit-gating.js +189 -0
  24. package/dist/esm/payments/server-explicit-gating.js.map +1 -0
  25. package/dist/esm/payments/server-payments-utils.d.ts +39 -0
  26. package/dist/esm/payments/server-payments-utils.d.ts.map +1 -0
  27. package/dist/esm/payments/server-payments-utils.js +117 -0
  28. package/dist/esm/payments/server-payments-utils.js.map +1 -0
  29. package/dist/esm/payments/server-payments.d.ts +10 -1
  30. package/dist/esm/payments/server-payments.d.ts.map +1 -1
  31. package/dist/esm/payments/server-payments.js +74 -150
  32. package/dist/esm/payments/server-payments.js.map +1 -1
  33. package/dist/esm/payments/server-transport-payments.d.ts +6 -0
  34. package/dist/esm/payments/server-transport-payments.d.ts.map +1 -1
  35. package/dist/esm/payments/server-transport-payments.js +46 -3
  36. package/dist/esm/payments/server-transport-payments.js.map +1 -1
  37. package/dist/esm/payments/types.d.ts +77 -9
  38. package/dist/esm/payments/types.d.ts.map +1 -1
  39. package/dist/esm/payments/types.js.map +1 -1
  40. package/dist/esm/relay/applesauce-relay-pool.d.ts.map +1 -1
  41. package/dist/esm/relay/applesauce-relay-pool.js +22 -9
  42. package/dist/esm/relay/applesauce-relay-pool.js.map +1 -1
  43. package/dist/esm/transport/capability-negotiator.d.ts +17 -2
  44. package/dist/esm/transport/capability-negotiator.d.ts.map +1 -1
  45. package/dist/esm/transport/capability-negotiator.js +27 -2
  46. package/dist/esm/transport/capability-negotiator.js.map +1 -1
  47. package/dist/esm/transport/middleware.d.ts +8 -0
  48. package/dist/esm/transport/middleware.d.ts.map +1 -1
  49. package/dist/esm/transport/nostr-client/event-pipeline.d.ts +14 -0
  50. package/dist/esm/transport/nostr-client/event-pipeline.d.ts.map +1 -1
  51. package/dist/esm/transport/nostr-client/event-pipeline.js +90 -61
  52. package/dist/esm/transport/nostr-client/event-pipeline.js.map +1 -1
  53. package/dist/esm/transport/nostr-client/inbound-coordinator.d.ts +1 -1
  54. package/dist/esm/transport/nostr-client/inbound-coordinator.d.ts.map +1 -1
  55. package/dist/esm/transport/nostr-client/inbound-coordinator.js +16 -1
  56. package/dist/esm/transport/nostr-client/inbound-coordinator.js.map +1 -1
  57. package/dist/esm/transport/nostr-client/outbound-sender.d.ts.map +1 -1
  58. package/dist/esm/transport/nostr-client/outbound-sender.js +2 -2
  59. package/dist/esm/transport/nostr-client/outbound-sender.js.map +1 -1
  60. package/dist/esm/transport/nostr-client/server-metadata-store.d.ts +4 -0
  61. package/dist/esm/transport/nostr-client/server-metadata-store.d.ts.map +1 -1
  62. package/dist/esm/transport/nostr-client/server-metadata-store.js +7 -0
  63. package/dist/esm/transport/nostr-client/server-metadata-store.js.map +1 -1
  64. package/dist/esm/transport/nostr-client-transport.d.ts +9 -0
  65. package/dist/esm/transport/nostr-client-transport.d.ts.map +1 -1
  66. package/dist/esm/transport/nostr-client-transport.js +19 -3
  67. package/dist/esm/transport/nostr-client-transport.js.map +1 -1
  68. package/dist/esm/transport/nostr-server/inbound-coordinator.d.ts +3 -0
  69. package/dist/esm/transport/nostr-server/inbound-coordinator.d.ts.map +1 -1
  70. package/dist/esm/transport/nostr-server/inbound-coordinator.js +58 -3
  71. package/dist/esm/transport/nostr-server/inbound-coordinator.js.map +1 -1
  72. package/dist/esm/transport/nostr-server/outbound-response-router.d.ts +7 -0
  73. package/dist/esm/transport/nostr-server/outbound-response-router.d.ts.map +1 -1
  74. package/dist/esm/transport/nostr-server/outbound-response-router.js +43 -1
  75. package/dist/esm/transport/nostr-server/outbound-response-router.js.map +1 -1
  76. package/dist/esm/transport/nostr-server/session-store.d.ts +7 -0
  77. package/dist/esm/transport/nostr-server/session-store.d.ts.map +1 -1
  78. package/dist/esm/transport/nostr-server/session-store.js.map +1 -1
  79. package/dist/esm/transport/nostr-server-transport.d.ts +16 -1
  80. package/dist/esm/transport/nostr-server-transport.d.ts.map +1 -1
  81. package/dist/esm/transport/nostr-server-transport.js +18 -0
  82. package/dist/esm/transport/nostr-server-transport.js.map +1 -1
  83. package/package.json +2 -2
@@ -0,0 +1,189 @@
1
+ import { isJsonRpcRequest } from './types.js';
2
+ import { computeCanonicalInvocationIdentity } from './canonical-identity.js';
3
+ import { buildProcessorsByPmi, matchPricedCapability, resolveAndInitiatePayment, } from './server-payments-utils.js';
4
+ import { createLogger } from '../core/utils/logger.js';
5
+ import { withTimeout } from '../core/utils/utils.js';
6
+ import { PAYMENT_PENDING_ERROR_CODE, PAYMENT_REQUIRED_ERROR_CODE, } from './constants.js';
7
+ export function createExplicitGatingMiddleware(params) {
8
+ var _a;
9
+ const { options, authorizationStore, sendResponse } = params;
10
+ const logger = createLogger('server-explicit-gating');
11
+ const processorsByPmi = (_a = params.processorsByPmi) !== null && _a !== void 0 ? _a : buildProcessorsByPmi(options.processors, logger);
12
+ return async (message, ctx, forward) => {
13
+ var _a;
14
+ // Only gate requests.
15
+ if (!isJsonRpcRequest(message)) {
16
+ await forward(message);
17
+ return;
18
+ }
19
+ if (ctx.paymentInteraction !== 'explicit_gating') {
20
+ await forward(message);
21
+ return;
22
+ }
23
+ const priced = matchPricedCapability(message, options.pricedCapabilities);
24
+ if (!priced) {
25
+ await forward(message);
26
+ return;
27
+ }
28
+ const requestEventId = String(message.id);
29
+ const identity = computeCanonicalInvocationIdentity(ctx.clientPubkey, message.method, message.params);
30
+ // 1. Try to claim an existing authorization
31
+ if (authorizationStore.claim(identity)) {
32
+ logger.debug('authorization claimed, forwarding request', {
33
+ requestEventId,
34
+ method: message.method,
35
+ });
36
+ await forward(message);
37
+ return;
38
+ }
39
+ const paymentTtlMs = (_a = options.paymentTtlMs) !== null && _a !== void 0 ? _a : 300000;
40
+ // 2. Try to set pending state atomically
41
+ // We use a safe default TTL here, but will override it below if the payment option has a specific TTL
42
+ if (!authorizationStore.trySetPending(identity, paymentTtlMs)) {
43
+ logger.debug('payment already pending, returning -32043', {
44
+ requestEventId,
45
+ });
46
+ const errorResponse = {
47
+ jsonrpc: '2.0',
48
+ id: message.id,
49
+ error: {
50
+ code: PAYMENT_PENDING_ERROR_CODE,
51
+ message: 'Payment Pending',
52
+ data: {
53
+ instructions: 'A payment is already pending for this invocation. Retry the same request later with exactly the same method and params.',
54
+ // Suggest a short polling interval (e.g. 2 seconds) rather than the full TTL
55
+ retry_after: Math.min(2, Math.max(1, Math.ceil(authorizationStore.getPendingRemainingMs(identity) / 1000))),
56
+ },
57
+ },
58
+ };
59
+ await sendResponse(ctx.clientPubkey, errorResponse, requestEventId);
60
+ return;
61
+ }
62
+ // 3. Resolve price and initiate new payment
63
+ try {
64
+ const initResult = await resolveAndInitiatePayment({
65
+ message,
66
+ priced,
67
+ requestEventId,
68
+ clientPubkey: ctx.clientPubkey,
69
+ clientPmis: ctx.clientPmis,
70
+ options,
71
+ processorsByPmi,
72
+ });
73
+ if (initResult.kind === 'rejected') {
74
+ logger.info('payment rejected', {
75
+ requestEventId,
76
+ pmi: initResult.pmi,
77
+ amount: priced.amount,
78
+ reason: initResult.message,
79
+ });
80
+ authorizationStore.clearPending(identity);
81
+ // Spec: When a capability is rejected by policy, return a standard error.
82
+ // We'll use -32000 (Internal error or application-defined error) since CEP-8 doesn't specify a special rejection code.
83
+ const errorResponse = {
84
+ jsonrpc: '2.0',
85
+ id: message.id,
86
+ error: {
87
+ code: -32000,
88
+ message: initResult.message || 'Payment rejected by policy',
89
+ },
90
+ };
91
+ await sendResponse(ctx.clientPubkey, errorResponse, requestEventId);
92
+ return;
93
+ }
94
+ if (initResult.kind === 'waived') {
95
+ logger.debug('payment waived, forwarding priced request', {
96
+ requestEventId,
97
+ method: message.method,
98
+ });
99
+ authorizationStore.clearPending(identity);
100
+ await forward(message);
101
+ return;
102
+ }
103
+ const { paymentRequired, mergedMeta, processor, verifyTimeoutMs } = initResult;
104
+ // Use the strict verification timeout bound for polling
105
+ const pollingTimeoutMs = Math.min(verifyTimeoutMs, paymentTtlMs);
106
+ // Note: use the original payment request's TTL as the limit for the grant, not the verify timeout.
107
+ // verifyTimeoutMs includes standard bounds, but for grants we want to honor the
108
+ // payment option's TTL explicitly if it is smaller, or the fallback paymentTtlMs.
109
+ const grantTtlMs = paymentRequired.ttl !== undefined
110
+ ? paymentRequired.ttl * 1000
111
+ : paymentTtlMs;
112
+ // Update pending with the precise TTL
113
+ authorizationStore.updatePendingTtl(identity, grantTtlMs);
114
+ const errorResponse = {
115
+ jsonrpc: '2.0',
116
+ id: message.id,
117
+ error: {
118
+ code: PAYMENT_REQUIRED_ERROR_CODE,
119
+ message: 'Payment Required',
120
+ data: {
121
+ instructions: 'Payment is required to process this request. Pay one of the offered options, then retry the same request with exactly the same method and params.',
122
+ payment_options: [
123
+ {
124
+ amount: paymentRequired.amount,
125
+ pmi: paymentRequired.pmi,
126
+ pay_req: paymentRequired.pay_req,
127
+ description: paymentRequired.description,
128
+ ttl: paymentRequired.ttl,
129
+ _meta: mergedMeta,
130
+ },
131
+ ],
132
+ },
133
+ },
134
+ };
135
+ logger.info('payment required error sent', {
136
+ requestEventId,
137
+ pmi: paymentRequired.pmi,
138
+ amount: paymentRequired.amount,
139
+ ttl: paymentRequired.ttl,
140
+ });
141
+ await sendResponse(ctx.clientPubkey, errorResponse, requestEventId);
142
+ // Start async verification
143
+ // Do not await this, we must let the middleware chain return the error response.
144
+ (async () => {
145
+ const controller = new AbortController();
146
+ try {
147
+ logger.debug('verifying explicit payment', {
148
+ requestEventId,
149
+ pmi: paymentRequired.pmi,
150
+ timeoutMs: pollingTimeoutMs,
151
+ });
152
+ await withTimeout(processor.verifyPayment({
153
+ pay_req: paymentRequired.pay_req,
154
+ requestEventId,
155
+ clientPubkey: ctx.clientPubkey,
156
+ abortSignal: controller.signal,
157
+ }), pollingTimeoutMs, 'verifyPayment timed out');
158
+ logger.info('explicit payment accepted, granting authorization', {
159
+ requestEventId,
160
+ pmi: paymentRequired.pmi,
161
+ amount: paymentRequired.amount,
162
+ });
163
+ authorizationStore.grant(identity, grantTtlMs);
164
+ }
165
+ catch (err) {
166
+ logger.info('explicit payment verification failed or timed out', {
167
+ requestEventId,
168
+ error: err instanceof Error ? err.message : String(err),
169
+ });
170
+ authorizationStore.clearPending(identity);
171
+ }
172
+ finally {
173
+ controller.abort();
174
+ }
175
+ })().catch((err) => {
176
+ logger.error('unhandled exception in async payment verification', {
177
+ requestEventId,
178
+ pmi: paymentRequired.pmi,
179
+ error: err instanceof Error ? err.message : String(err),
180
+ });
181
+ });
182
+ }
183
+ catch (err) {
184
+ authorizationStore.clearPending(identity);
185
+ throw err;
186
+ }
187
+ };
188
+ }
189
+ //# sourceMappingURL=server-explicit-gating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-explicit-gating.js","sourceRoot":"","sources":["../../../src/payments/server-explicit-gating.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { JSONRPCRequest } from '@contextvm/mcp-sdk/types.js';
2
+ import { type Logger } from '../core/utils/logger.js';
3
+ import type { PricedCapability, ResolvePriceRejection, ResolvePriceResult, PaymentProcessor, PaymentRequired } from './types.js';
4
+ /** Builds the PMI → processor map, warning once on duplicate PMIs. */
5
+ export declare function buildProcessorsByPmi(processors: readonly PaymentProcessor[], logger: Logger): Map<string, PaymentProcessor>;
6
+ export declare function matchPricedCapability(message: JSONRPCRequest, priced: readonly PricedCapability[]): PricedCapability | undefined;
7
+ export type InitiationResult = {
8
+ kind: 'rejected';
9
+ pmi: string;
10
+ amount: number;
11
+ message?: string;
12
+ quote: ResolvePriceRejection;
13
+ } | {
14
+ kind: 'waived';
15
+ } | {
16
+ kind: 'payment_required';
17
+ processor: PaymentProcessor;
18
+ paymentRequired: PaymentRequired;
19
+ mergedMeta: Record<string, unknown> | undefined;
20
+ verifyTimeoutMs: number;
21
+ };
22
+ export declare function resolveAndInitiatePayment(params: {
23
+ message: JSONRPCRequest;
24
+ priced: PricedCapability;
25
+ requestEventId: string;
26
+ clientPubkey: string;
27
+ clientPmis: readonly string[] | undefined;
28
+ options: {
29
+ processors: readonly PaymentProcessor[];
30
+ resolvePrice?: (params: {
31
+ capability: PricedCapability;
32
+ request: JSONRPCRequest;
33
+ clientPubkey: string;
34
+ requestEventId: string;
35
+ }) => Promise<ResolvePriceResult>;
36
+ };
37
+ processorsByPmi: Map<string, PaymentProcessor>;
38
+ }): Promise<InitiationResult>;
39
+ //# sourceMappingURL=server-payments-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-payments-utils.d.ts","sourceRoot":"","sources":["../../../src/payments/server-payments-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EAErB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,sEAAsE;AACtE,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,MAAM,EAAE,MAAM,GACb,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAW/B;AAiBD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAClC,gBAAgB,GAAG,SAAS,CAQ9B;AAsDD,MAAM,MAAM,gBAAgB,GACxB;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,qBAAqB,CAAC;CAC9B,GACD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACtD,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC1C,OAAO,EAAE;QACP,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;QACxC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE;YACtB,UAAU,EAAE,gBAAgB,CAAC;YAC7B,OAAO,EAAE,cAAc,CAAC;YACxB,YAAY,EAAE,MAAM,CAAC;YACrB,cAAc,EAAE,MAAM,CAAC;SACxB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;KACnC,CAAC;IACF,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAChD,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyD5B"}
@@ -0,0 +1,117 @@
1
+ /** Builds the PMI → processor map, warning once on duplicate PMIs. */
2
+ export function buildProcessorsByPmi(processors, logger) {
3
+ const seenProcessorPmis = new Set();
4
+ for (const p of processors) {
5
+ if (seenProcessorPmis.has(p.pmi)) {
6
+ logger.warn('duplicate PMI processor registered, last one wins', {
7
+ pmi: p.pmi,
8
+ });
9
+ }
10
+ seenProcessorPmis.add(p.pmi);
11
+ }
12
+ return new Map(processors.map((p) => [p.pmi, p]));
13
+ }
14
+ function getVerificationTimeoutMs(params) {
15
+ // CEP-8 TTL is in seconds. If TTL is absent, default is 5 minutes.
16
+ const ttlSeconds = params.ttlSeconds;
17
+ if (ttlSeconds === undefined) {
18
+ return 5 * 60 * 1000;
19
+ }
20
+ if (!Number.isFinite(ttlSeconds) || ttlSeconds <= 0) {
21
+ return 5 * 60 * 1000;
22
+ }
23
+ const ms = ttlSeconds * 1000;
24
+ return Number.isFinite(ms) ? Math.floor(ms) : 5 * 60 * 1000;
25
+ }
26
+ export function matchPricedCapability(message, priced) {
27
+ const capabilityName = getCapabilityNameForPricing(message);
28
+ return priced.find((p) => {
29
+ if (p.method !== message.method)
30
+ return false;
31
+ if (p.name === undefined)
32
+ return true;
33
+ return p.name === capabilityName;
34
+ });
35
+ }
36
+ function getCapabilityNameForPricing(message) {
37
+ const params = message.params;
38
+ switch (message.method) {
39
+ case 'tools/call':
40
+ case 'prompts/get': {
41
+ const name = params === null || params === void 0 ? void 0 : params.name;
42
+ return typeof name === 'string' ? name : undefined;
43
+ }
44
+ case 'resources/read': {
45
+ const uri = params === null || params === void 0 ? void 0 : params.uri;
46
+ return typeof uri === 'string' ? uri : undefined;
47
+ }
48
+ default:
49
+ return undefined;
50
+ }
51
+ }
52
+ function isResolvePriceRejection(quote) {
53
+ return 'reject' in quote && quote.reject;
54
+ }
55
+ function isResolvePriceWaiver(quote) {
56
+ return 'waive' in quote && quote.waive;
57
+ }
58
+ function resolvePaymentProcessor(clientPmis, processorsByPmi, processors) {
59
+ const chosenPmi = clientPmis
60
+ ? clientPmis.find((pmi) => processorsByPmi.has(pmi))
61
+ : undefined;
62
+ const chosenProcessor = chosenPmi
63
+ ? processorsByPmi.get(chosenPmi)
64
+ : processors[0];
65
+ if (!chosenProcessor) {
66
+ throw new Error('No payment processors configured');
67
+ }
68
+ return chosenProcessor;
69
+ }
70
+ export async function resolveAndInitiatePayment(params) {
71
+ var _a, _b;
72
+ const processor = resolvePaymentProcessor(params.clientPmis, params.processorsByPmi, params.options.processors);
73
+ const quote = params.options.resolvePrice
74
+ ? await params.options.resolvePrice({
75
+ capability: params.priced,
76
+ request: params.message,
77
+ clientPubkey: params.clientPubkey,
78
+ requestEventId: params.requestEventId,
79
+ })
80
+ : { amount: params.priced.amount, description: params.priced.description };
81
+ if (isResolvePriceRejection(quote)) {
82
+ return {
83
+ kind: 'rejected',
84
+ pmi: processor.pmi,
85
+ amount: params.priced.amount,
86
+ message: quote.message,
87
+ quote,
88
+ };
89
+ }
90
+ if (isResolvePriceWaiver(quote)) {
91
+ return { kind: 'waived' };
92
+ }
93
+ const resolvedQuote = quote;
94
+ const paymentRequired = await processor.createPaymentRequired({
95
+ amount: resolvedQuote.amount,
96
+ description: resolvedQuote.description,
97
+ requestEventId: params.requestEventId,
98
+ clientPubkey: params.clientPubkey,
99
+ });
100
+ const mergedMeta = resolvedQuote.meta === undefined && paymentRequired._meta === undefined
101
+ ? undefined
102
+ : {
103
+ ...((_a = paymentRequired._meta) !== null && _a !== void 0 ? _a : {}),
104
+ ...((_b = resolvedQuote.meta) !== null && _b !== void 0 ? _b : {}),
105
+ };
106
+ const verifyTimeoutMs = getVerificationTimeoutMs({
107
+ ttlSeconds: paymentRequired.ttl,
108
+ });
109
+ return {
110
+ kind: 'payment_required',
111
+ processor,
112
+ paymentRequired,
113
+ mergedMeta,
114
+ verifyTimeoutMs,
115
+ };
116
+ }
117
+ //# sourceMappingURL=server-payments-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-payments-utils.js","sourceRoot":"","sources":["../../../src/payments/server-payments-utils.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { CorrelatedNotificationSender, PaymentProcessor, PricedCapability, ResolvePriceFn, ServerMiddlewareFn } from './types.js';
1
+ import type { CorrelatedNotificationSender, PaymentInteractionPolicy, PaymentProcessor, PricedCapability, ResolvePriceFn, ServerMiddlewareFn } from './types.js';
2
2
  export interface ServerPaymentsOptions {
3
3
  processors: readonly PaymentProcessor[];
4
4
  pricedCapabilities: readonly PricedCapability[];
@@ -21,6 +21,13 @@ export interface ServerPaymentsOptions {
21
21
  * @default 1000
22
22
  */
23
23
  maxPendingPayments?: number;
24
+ /**
25
+ * Server-side policy for which payment interaction lifecycles this server
26
+ * accepts. `optional` mirrors the client's requested mode (the default);
27
+ * `transparent` makes the server transparent-only.
28
+ * @default 'optional'
29
+ */
30
+ paymentInteraction?: PaymentInteractionPolicy;
24
31
  }
25
32
  /**
26
33
  * Creates a server-side middleware that gates priced requests until payment is verified.
@@ -28,5 +35,7 @@ export interface ServerPaymentsOptions {
28
35
  export declare function createServerPaymentsMiddleware(params: {
29
36
  sender: CorrelatedNotificationSender;
30
37
  options: ServerPaymentsOptions;
38
+ /** Pre-built PMI → processor map. Built locally when omitted (standalone use). */
39
+ processorsByPmi?: Map<string, PaymentProcessor>;
31
40
  }): ServerMiddlewareFn;
32
41
  //# sourceMappingURL=server-payments.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-payments.d.ts","sourceRoot":"","sources":["../../../src/payments/server-payments.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,EAE5B,gBAAgB,EAGhB,gBAAgB,EAIhB,cAAc,EACd,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACxC,kBAAkB,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAEhD,6EAA6E;IAC7E,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AA6HD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,MAAM,EAAE,4BAA4B,CAAC;IACrC,OAAO,EAAE,qBAAqB,CAAC;CAChC,GAAG,kBAAkB,CA6NrB"}
1
+ {"version":3,"file":"server-payments.d.ts","sourceRoot":"","sources":["../../../src/payments/server-payments.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,4BAA4B,EAE5B,wBAAwB,EACxB,gBAAgB,EAGhB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAgBpB,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACxC,kBAAkB,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAEhD,6EAA6E;IAC7E,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C;AA+DD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,MAAM,EAAE,4BAA4B,CAAC;IACrC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,kFAAkF;IAClF,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACjD,GAAG,kBAAkB,CA8LrB"}