@solvapay/server 1.0.8-preview.7 → 1.0.8-preview.9

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 (141) hide show
  1. package/dist/edge.d.ts +24 -1
  2. package/dist/edge.js +72 -0
  3. package/dist/index.cjs +12 -293
  4. package/dist/index.d.cts +3 -35
  5. package/dist/index.d.ts +3 -35
  6. package/dist/index.js +12 -289
  7. package/package.json +8 -8
  8. package/dist/chunk-R5U7XKVJ.js +0 -16
  9. package/dist/dist-EPVKJAIP.js +0 -94
  10. package/dist/dist-JBJ4HMP7.js +0 -94
  11. package/dist/esm-5GYCIXIY.js +0 -3475
  12. package/dist/esm-UW7WCMEK.js +0 -3475
  13. package/dist/src/adapters/base.d.ts +0 -57
  14. package/dist/src/adapters/base.d.ts.map +0 -1
  15. package/dist/src/adapters/base.js +0 -73
  16. package/dist/src/adapters/base.js.map +0 -1
  17. package/dist/src/adapters/http.d.ts +0 -25
  18. package/dist/src/adapters/http.d.ts.map +0 -1
  19. package/dist/src/adapters/http.js +0 -99
  20. package/dist/src/adapters/http.js.map +0 -1
  21. package/dist/src/adapters/index.d.ts +0 -11
  22. package/dist/src/adapters/index.d.ts.map +0 -1
  23. package/dist/src/adapters/index.js +0 -10
  24. package/dist/src/adapters/index.js.map +0 -1
  25. package/dist/src/adapters/mcp.d.ts +0 -24
  26. package/dist/src/adapters/mcp.d.ts.map +0 -1
  27. package/dist/src/adapters/mcp.js +0 -75
  28. package/dist/src/adapters/mcp.js.map +0 -1
  29. package/dist/src/adapters/next.d.ts +0 -24
  30. package/dist/src/adapters/next.d.ts.map +0 -1
  31. package/dist/src/adapters/next.js +0 -109
  32. package/dist/src/adapters/next.js.map +0 -1
  33. package/dist/src/client.d.ts +0 -58
  34. package/dist/src/client.d.ts.map +0 -1
  35. package/dist/src/client.js +0 -495
  36. package/dist/src/client.js.map +0 -1
  37. package/dist/src/edge.d.ts +0 -22
  38. package/dist/src/edge.d.ts.map +0 -1
  39. package/dist/src/edge.js +0 -91
  40. package/dist/src/edge.js.map +0 -1
  41. package/dist/src/factory.d.ts +0 -605
  42. package/dist/src/factory.d.ts.map +0 -1
  43. package/dist/src/factory.js +0 -215
  44. package/dist/src/factory.js.map +0 -1
  45. package/dist/src/helpers/auth.d.ts +0 -47
  46. package/dist/src/helpers/auth.d.ts.map +0 -1
  47. package/dist/src/helpers/auth.js +0 -73
  48. package/dist/src/helpers/auth.js.map +0 -1
  49. package/dist/src/helpers/checkout.d.ts +0 -45
  50. package/dist/src/helpers/checkout.d.ts.map +0 -1
  51. package/dist/src/helpers/checkout.js +0 -89
  52. package/dist/src/helpers/checkout.js.map +0 -1
  53. package/dist/src/helpers/customer.d.ts +0 -51
  54. package/dist/src/helpers/customer.d.ts.map +0 -1
  55. package/dist/src/helpers/customer.js +0 -77
  56. package/dist/src/helpers/customer.js.map +0 -1
  57. package/dist/src/helpers/error.d.ts +0 -15
  58. package/dist/src/helpers/error.d.ts.map +0 -1
  59. package/dist/src/helpers/error.js +0 -35
  60. package/dist/src/helpers/error.js.map +0 -1
  61. package/dist/src/helpers/index.d.ts +0 -17
  62. package/dist/src/helpers/index.d.ts.map +0 -1
  63. package/dist/src/helpers/index.js +0 -23
  64. package/dist/src/helpers/index.js.map +0 -1
  65. package/dist/src/helpers/payment.d.ts +0 -107
  66. package/dist/src/helpers/payment.d.ts.map +0 -1
  67. package/dist/src/helpers/payment.js +0 -150
  68. package/dist/src/helpers/payment.js.map +0 -1
  69. package/dist/src/helpers/plans.d.ts +0 -19
  70. package/dist/src/helpers/plans.d.ts.map +0 -1
  71. package/dist/src/helpers/plans.js +0 -53
  72. package/dist/src/helpers/plans.js.map +0 -1
  73. package/dist/src/helpers/renewal.d.ts +0 -23
  74. package/dist/src/helpers/renewal.d.ts.map +0 -1
  75. package/dist/src/helpers/renewal.js +0 -90
  76. package/dist/src/helpers/renewal.js.map +0 -1
  77. package/dist/src/helpers/subscription.d.ts +0 -23
  78. package/dist/src/helpers/subscription.d.ts.map +0 -1
  79. package/dist/src/helpers/subscription.js +0 -101
  80. package/dist/src/helpers/subscription.js.map +0 -1
  81. package/dist/src/helpers/types.d.ts +0 -22
  82. package/dist/src/helpers/types.d.ts.map +0 -1
  83. package/dist/src/helpers/types.js +0 -7
  84. package/dist/src/helpers/types.js.map +0 -1
  85. package/dist/src/index.d.ts +0 -73
  86. package/dist/src/index.d.ts.map +0 -1
  87. package/dist/src/index.js +0 -106
  88. package/dist/src/index.js.map +0 -1
  89. package/dist/src/mcp/auth-bridge.d.ts +0 -9
  90. package/dist/src/mcp/auth-bridge.d.ts.map +0 -1
  91. package/dist/src/mcp/auth-bridge.js +0 -46
  92. package/dist/src/mcp/auth-bridge.js.map +0 -1
  93. package/dist/src/mcp/oauth-bridge.d.ts +0 -48
  94. package/dist/src/mcp/oauth-bridge.d.ts.map +0 -1
  95. package/dist/src/mcp/oauth-bridge.js +0 -110
  96. package/dist/src/mcp/oauth-bridge.js.map +0 -1
  97. package/dist/src/mcp-auth.d.ts +0 -17
  98. package/dist/src/mcp-auth.d.ts.map +0 -1
  99. package/dist/src/mcp-auth.js +0 -57
  100. package/dist/src/mcp-auth.js.map +0 -1
  101. package/dist/src/paywall.d.ts +0 -119
  102. package/dist/src/paywall.d.ts.map +0 -1
  103. package/dist/src/paywall.js +0 -700
  104. package/dist/src/paywall.js.map +0 -1
  105. package/dist/src/register-virtual-tools-mcp.d.ts +0 -23
  106. package/dist/src/register-virtual-tools-mcp.d.ts.map +0 -1
  107. package/dist/src/register-virtual-tools-mcp.js +0 -86
  108. package/dist/src/register-virtual-tools-mcp.js.map +0 -1
  109. package/dist/src/types/client.d.ts +0 -216
  110. package/dist/src/types/client.d.ts.map +0 -1
  111. package/dist/src/types/client.js +0 -7
  112. package/dist/src/types/client.js.map +0 -1
  113. package/dist/src/types/generated.d.ts +0 -2834
  114. package/dist/src/types/generated.d.ts.map +0 -1
  115. package/dist/src/types/generated.js +0 -6
  116. package/dist/src/types/generated.js.map +0 -1
  117. package/dist/src/types/index.d.ts +0 -13
  118. package/dist/src/types/index.d.ts.map +0 -1
  119. package/dist/src/types/index.js +0 -8
  120. package/dist/src/types/index.js.map +0 -1
  121. package/dist/src/types/options.d.ts +0 -126
  122. package/dist/src/types/options.d.ts.map +0 -1
  123. package/dist/src/types/options.js +0 -8
  124. package/dist/src/types/options.js.map +0 -1
  125. package/dist/src/types/paywall.d.ts +0 -64
  126. package/dist/src/types/paywall.d.ts.map +0 -1
  127. package/dist/src/types/paywall.js +0 -7
  128. package/dist/src/types/paywall.js.map +0 -1
  129. package/dist/src/types/webhook.d.ts +0 -50
  130. package/dist/src/types/webhook.d.ts.map +0 -1
  131. package/dist/src/types/webhook.js +0 -2
  132. package/dist/src/types/webhook.js.map +0 -1
  133. package/dist/src/utils.d.ts +0 -110
  134. package/dist/src/utils.d.ts.map +0 -1
  135. package/dist/src/utils.js +0 -217
  136. package/dist/src/utils.js.map +0 -1
  137. package/dist/src/virtual-tools.d.ts +0 -44
  138. package/dist/src/virtual-tools.d.ts.map +0 -1
  139. package/dist/src/virtual-tools.js +0 -140
  140. package/dist/src/virtual-tools.js.map +0 -1
  141. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,57 +0,0 @@
1
- /**
2
- * MCP OAuth helper utilities.
3
- *
4
- * These helpers are intentionally lightweight and do not verify JWT signatures.
5
- * Use them after token validation (for example via /v1/customer/auth/userinfo).
6
- */
7
- export class McpBearerAuthError extends Error {
8
- constructor(message) {
9
- super(message);
10
- this.name = 'McpBearerAuthError';
11
- }
12
- }
13
- function base64UrlDecode(input) {
14
- const normalized = input.replace(/-/g, '+').replace(/_/g, '/');
15
- const padded = normalized.padEnd(normalized.length + ((4 - (normalized.length % 4)) % 4), '=');
16
- return Buffer.from(padded, 'base64').toString('utf8');
17
- }
18
- export function extractBearerToken(authorization) {
19
- if (!authorization)
20
- return null;
21
- if (!authorization.startsWith('Bearer '))
22
- return null;
23
- return authorization.slice(7).trim() || null;
24
- }
25
- export function decodeJwtPayload(token) {
26
- const parts = token.split('.');
27
- if (parts.length < 2) {
28
- throw new McpBearerAuthError('Invalid JWT format');
29
- }
30
- try {
31
- const payloadText = base64UrlDecode(parts[1]);
32
- const payload = JSON.parse(payloadText);
33
- return payload;
34
- }
35
- catch {
36
- throw new McpBearerAuthError('Invalid JWT payload');
37
- }
38
- }
39
- export function getCustomerRefFromJwtPayload(payload, options = {}) {
40
- const claimPriority = options.claimPriority || ['customerRef', 'customer_ref', 'sub'];
41
- for (const claim of claimPriority) {
42
- const value = payload[claim];
43
- if (typeof value === 'string' && value.trim()) {
44
- return value.trim();
45
- }
46
- }
47
- throw new McpBearerAuthError(`No customer reference claim found (checked: ${claimPriority.join(', ')})`);
48
- }
49
- export function getCustomerRefFromBearerAuthHeader(authorization, options = {}) {
50
- const token = extractBearerToken(authorization);
51
- if (!token) {
52
- throw new McpBearerAuthError('Missing bearer token');
53
- }
54
- const payload = decodeJwtPayload(token);
55
- return getCustomerRefFromJwtPayload(payload, options);
56
- }
57
- //# sourceMappingURL=mcp-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-auth.js","sourceRoot":"","sources":["../../src/mcp-auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAMD,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC9F,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,aAA6B;IAC9D,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAA;IAC/B,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAA;IACrD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,kBAAkB,CAAC,oBAAoB,CAAC,CAAA;IACpD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA4B,CAAA;QAClE,OAAO,OAAO,CAAA;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,kBAAkB,CAAC,qBAAqB,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,OAAgC,EAChC,UAAuC,EAAE;IAEzC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;IAErF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;QACrB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,kBAAkB,CAC1B,+CAA+C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC3E,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,aAA6B,EAC7B,UAAuC,EAAE;IAEzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAA;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,kBAAkB,CAAC,sBAAsB,CAAC,CAAA;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACvC,OAAO,4BAA4B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACvD,CAAC"}
@@ -1,119 +0,0 @@
1
- /**
2
- * SolvaPay SDK - Universal Paywall Protection
3
- *
4
- * One API that works everywhere:
5
- * - HTTP frameworks (Fastify, Express)
6
- * - MCP servers
7
- * - Class-based and functional programming
8
- */
9
- import type { PaywallArgs, PaywallMetadata, PaywallStructuredContent, PaywallToolResult, SolvaPayClient } from './types';
10
- export type { PaywallArgs, PaywallMetadata, PaywallStructuredContent, PaywallToolResult, SolvaPayClient, };
11
- /**
12
- * Error thrown when a paywall is triggered (purchase required or usage limit exceeded).
13
- *
14
- * This error is automatically thrown by the paywall protection system when:
15
- * - Customer doesn't have required purchase
16
- * - Customer has exceeded usage limits
17
- * - Customer needs to upgrade their plan
18
- *
19
- * The error includes structured content with checkout URLs and metadata for
20
- * building custom paywall UIs.
21
- *
22
- * @example
23
- * ```typescript
24
- * import { PaywallError } from '@solvapay/server';
25
- *
26
- * try {
27
- * const result = await payable.http(createTask)(req, res);
28
- * return result;
29
- * } catch (error) {
30
- * if (error instanceof PaywallError) {
31
- * // Custom paywall handling
32
- * return res.status(402).json({
33
- * error: error.message,
34
- * checkoutUrl: error.structuredContent.checkoutUrl,
35
- * // Additional metadata available in error.structuredContent
36
- * });
37
- * }
38
- * throw error;
39
- * }
40
- * ```
41
- *
42
- * @see {@link PaywallStructuredContent} for the structured content format
43
- * @since 1.0.0
44
- */
45
- export declare class PaywallError extends Error {
46
- structuredContent: PaywallStructuredContent;
47
- /**
48
- * Creates a new PaywallError instance.
49
- *
50
- * @param message - Error message
51
- * @param structuredContent - Structured content with checkout URLs and metadata
52
- */
53
- constructor(message: string, structuredContent: PaywallStructuredContent);
54
- }
55
- /** JSON body shape for HTTP adapters and MCP text content (stable fields for clients). */
56
- export declare function paywallErrorToClientPayload(error: PaywallError): Record<string, unknown>;
57
- /**
58
- * Universal SolvaPay Protection - One API for everything
59
- */
60
- export declare class SolvaPayPaywall {
61
- private apiClient;
62
- private customerCreationAttempts;
63
- private customerRefMapping;
64
- private debug;
65
- private limitsCache;
66
- private limitsCacheTTL;
67
- constructor(apiClient: SolvaPayClient, options?: {
68
- debug?: boolean;
69
- limitsCacheTTL?: number;
70
- });
71
- private log;
72
- private resolveProduct;
73
- private generateRequestId;
74
- /**
75
- * Core protection method - works for both MCP and HTTP
76
- */
77
- protect<TArgs extends PaywallArgs, TResult = any>(handler: (args: TArgs) => Promise<TResult>, metadata?: PaywallMetadata, getCustomerRef?: (args: TArgs) => string): Promise<(args: TArgs) => Promise<TResult>>;
78
- /**
79
- * Ensures a customer exists in the backend, creating them if necessary.
80
- * This is a public helper for testing, pre-creating customers, and internal use.
81
- * Only attempts creation once per customer (idempotent).
82
- * Returns the backend customer reference to use in API calls.
83
- *
84
- * @param customerRef - The customer reference used as a cache key (e.g., Supabase user ID)
85
- * @param externalRef - Optional external reference for backend lookup (e.g., Supabase user ID)
86
- * If provided, will lookup existing customer by externalRef before creating new one.
87
- * The externalRef is stored on the SolvaPay backend for customer lookup.
88
- * @param options - Optional customer details (email, name) for customer creation
89
- */
90
- ensureCustomer(customerRef: string, externalRef?: string, options?: {
91
- email?: string;
92
- name?: string;
93
- }): Promise<string>;
94
- trackUsage(customerRef: string, _productRef: string, _planRef: string, action: string, outcome: 'success' | 'paywall' | 'fail', requestId: string, actionDuration: number): Promise<void>;
95
- }
96
- /**
97
- * Universal SolvaPay factory - One API for MCP and HTTP
98
- */
99
- export declare function createPaywall(config: {
100
- apiClient: SolvaPayClient;
101
- }): {
102
- protect: <TArgs extends PaywallArgs, TResult = any>(metadata?: PaywallMetadata) => (handler: (args: TArgs) => Promise<TResult>) => Promise<(args: TArgs) => Promise<TResult>>;
103
- Paywall: (metadata?: PaywallMetadata) => (target: Record<string, unknown>, propertyKey: string, descriptor?: PropertyDescriptor) => Record<string, unknown> | PropertyDescriptor;
104
- createHttpHandler: (methodOrMetadata: ((...args: unknown[]) => unknown) | PaywallMetadata, handlerOrOptions?: ((args: PaywallArgs) => Promise<unknown>) | {
105
- extractArgs?: (req: any) => Record<string, unknown>;
106
- transformResponse?: (result: unknown, reply: any) => unknown;
107
- getCustomerRef?: (req: any) => string;
108
- }) => (req: any, reply: any) => Promise<unknown>;
109
- createMCPHandler: (methodOrMetadata: ((...args: unknown[]) => unknown) | PaywallMetadata, handler?: (args: PaywallArgs) => Promise<unknown>) => Promise<(args: PaywallArgs) => Promise<unknown>>;
110
- createNextHandler: (metadata: PaywallMetadata, handler: (args: PaywallArgs) => Promise<unknown>, options?: {
111
- extractArgs?: (request: Request, context?: any) => Promise<Record<string, unknown>> | Record<string, unknown>;
112
- getCustomerRef?: (request: Request) => Promise<string> | string;
113
- transformResponse?: (result: unknown) => unknown;
114
- }) => (request: Request, context?: any) => Promise<Response>;
115
- ensureCustomer: (customerRef: string) => Promise<string>;
116
- paywall: SolvaPayPaywall;
117
- };
118
- export declare function ensureCustomerRef(customerRef: string): string;
119
- //# sourceMappingURL=paywall.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paywall.d.ts","sourceRoot":"","sources":["../../src/paywall.ts"],"names":[],"mappings":"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"}