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

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 (139) hide show
  1. package/dist/chunk-R5U7XKVJ.js +16 -0
  2. package/dist/dist-EPVKJAIP.js +94 -0
  3. package/dist/dist-JBJ4HMP7.js +94 -0
  4. package/dist/esm-5GYCIXIY.js +3475 -0
  5. package/dist/esm-UW7WCMEK.js +3475 -0
  6. package/dist/index.cjs +293 -12
  7. package/dist/index.d.cts +35 -3
  8. package/dist/index.d.ts +35 -3
  9. package/dist/index.js +289 -12
  10. package/dist/src/adapters/base.d.ts +57 -0
  11. package/dist/src/adapters/base.d.ts.map +1 -0
  12. package/dist/src/adapters/base.js +73 -0
  13. package/dist/src/adapters/base.js.map +1 -0
  14. package/dist/src/adapters/http.d.ts +25 -0
  15. package/dist/src/adapters/http.d.ts.map +1 -0
  16. package/dist/src/adapters/http.js +99 -0
  17. package/dist/src/adapters/http.js.map +1 -0
  18. package/dist/src/adapters/index.d.ts +11 -0
  19. package/dist/src/adapters/index.d.ts.map +1 -0
  20. package/dist/src/adapters/index.js +10 -0
  21. package/dist/src/adapters/index.js.map +1 -0
  22. package/dist/src/adapters/mcp.d.ts +24 -0
  23. package/dist/src/adapters/mcp.d.ts.map +1 -0
  24. package/dist/src/adapters/mcp.js +75 -0
  25. package/dist/src/adapters/mcp.js.map +1 -0
  26. package/dist/src/adapters/next.d.ts +24 -0
  27. package/dist/src/adapters/next.d.ts.map +1 -0
  28. package/dist/src/adapters/next.js +109 -0
  29. package/dist/src/adapters/next.js.map +1 -0
  30. package/dist/src/client.d.ts +58 -0
  31. package/dist/src/client.d.ts.map +1 -0
  32. package/dist/src/client.js +495 -0
  33. package/dist/src/client.js.map +1 -0
  34. package/dist/src/edge.d.ts +22 -0
  35. package/dist/src/edge.d.ts.map +1 -0
  36. package/dist/src/edge.js +91 -0
  37. package/dist/src/edge.js.map +1 -0
  38. package/dist/src/factory.d.ts +605 -0
  39. package/dist/src/factory.d.ts.map +1 -0
  40. package/dist/src/factory.js +215 -0
  41. package/dist/src/factory.js.map +1 -0
  42. package/dist/src/helpers/auth.d.ts +47 -0
  43. package/dist/src/helpers/auth.d.ts.map +1 -0
  44. package/dist/src/helpers/auth.js +73 -0
  45. package/dist/src/helpers/auth.js.map +1 -0
  46. package/dist/src/helpers/checkout.d.ts +45 -0
  47. package/dist/src/helpers/checkout.d.ts.map +1 -0
  48. package/dist/src/helpers/checkout.js +89 -0
  49. package/dist/src/helpers/checkout.js.map +1 -0
  50. package/dist/src/helpers/customer.d.ts +51 -0
  51. package/dist/src/helpers/customer.d.ts.map +1 -0
  52. package/dist/src/helpers/customer.js +77 -0
  53. package/dist/src/helpers/customer.js.map +1 -0
  54. package/dist/src/helpers/error.d.ts +15 -0
  55. package/dist/src/helpers/error.d.ts.map +1 -0
  56. package/dist/src/helpers/error.js +35 -0
  57. package/dist/src/helpers/error.js.map +1 -0
  58. package/dist/src/helpers/index.d.ts +17 -0
  59. package/dist/src/helpers/index.d.ts.map +1 -0
  60. package/dist/src/helpers/index.js +23 -0
  61. package/dist/src/helpers/index.js.map +1 -0
  62. package/dist/src/helpers/payment.d.ts +107 -0
  63. package/dist/src/helpers/payment.d.ts.map +1 -0
  64. package/dist/src/helpers/payment.js +150 -0
  65. package/dist/src/helpers/payment.js.map +1 -0
  66. package/dist/src/helpers/plans.d.ts +19 -0
  67. package/dist/src/helpers/plans.d.ts.map +1 -0
  68. package/dist/src/helpers/plans.js +53 -0
  69. package/dist/src/helpers/plans.js.map +1 -0
  70. package/dist/src/helpers/renewal.d.ts +23 -0
  71. package/dist/src/helpers/renewal.d.ts.map +1 -0
  72. package/dist/src/helpers/renewal.js +90 -0
  73. package/dist/src/helpers/renewal.js.map +1 -0
  74. package/dist/src/helpers/subscription.d.ts +23 -0
  75. package/dist/src/helpers/subscription.d.ts.map +1 -0
  76. package/dist/src/helpers/subscription.js +101 -0
  77. package/dist/src/helpers/subscription.js.map +1 -0
  78. package/dist/src/helpers/types.d.ts +22 -0
  79. package/dist/src/helpers/types.d.ts.map +1 -0
  80. package/dist/src/helpers/types.js +7 -0
  81. package/dist/src/helpers/types.js.map +1 -0
  82. package/dist/src/index.d.ts +73 -0
  83. package/dist/src/index.d.ts.map +1 -0
  84. package/dist/src/index.js +106 -0
  85. package/dist/src/index.js.map +1 -0
  86. package/dist/src/mcp/auth-bridge.d.ts +9 -0
  87. package/dist/src/mcp/auth-bridge.d.ts.map +1 -0
  88. package/dist/src/mcp/auth-bridge.js +46 -0
  89. package/dist/src/mcp/auth-bridge.js.map +1 -0
  90. package/dist/src/mcp/oauth-bridge.d.ts +48 -0
  91. package/dist/src/mcp/oauth-bridge.d.ts.map +1 -0
  92. package/dist/src/mcp/oauth-bridge.js +110 -0
  93. package/dist/src/mcp/oauth-bridge.js.map +1 -0
  94. package/dist/src/mcp-auth.d.ts +17 -0
  95. package/dist/src/mcp-auth.d.ts.map +1 -0
  96. package/dist/src/mcp-auth.js +57 -0
  97. package/dist/src/mcp-auth.js.map +1 -0
  98. package/dist/src/paywall.d.ts +119 -0
  99. package/dist/src/paywall.d.ts.map +1 -0
  100. package/dist/src/paywall.js +700 -0
  101. package/dist/src/paywall.js.map +1 -0
  102. package/dist/src/register-virtual-tools-mcp.d.ts +23 -0
  103. package/dist/src/register-virtual-tools-mcp.d.ts.map +1 -0
  104. package/dist/src/register-virtual-tools-mcp.js +86 -0
  105. package/dist/src/register-virtual-tools-mcp.js.map +1 -0
  106. package/dist/src/types/client.d.ts +216 -0
  107. package/dist/src/types/client.d.ts.map +1 -0
  108. package/dist/src/types/client.js +7 -0
  109. package/dist/src/types/client.js.map +1 -0
  110. package/dist/src/types/generated.d.ts +2834 -0
  111. package/dist/src/types/generated.d.ts.map +1 -0
  112. package/dist/src/types/generated.js +6 -0
  113. package/dist/src/types/generated.js.map +1 -0
  114. package/dist/src/types/index.d.ts +13 -0
  115. package/dist/src/types/index.d.ts.map +1 -0
  116. package/dist/src/types/index.js +8 -0
  117. package/dist/src/types/index.js.map +1 -0
  118. package/dist/src/types/options.d.ts +126 -0
  119. package/dist/src/types/options.d.ts.map +1 -0
  120. package/dist/src/types/options.js +8 -0
  121. package/dist/src/types/options.js.map +1 -0
  122. package/dist/src/types/paywall.d.ts +64 -0
  123. package/dist/src/types/paywall.d.ts.map +1 -0
  124. package/dist/src/types/paywall.js +7 -0
  125. package/dist/src/types/paywall.js.map +1 -0
  126. package/dist/src/types/webhook.d.ts +50 -0
  127. package/dist/src/types/webhook.d.ts.map +1 -0
  128. package/dist/src/types/webhook.js +2 -0
  129. package/dist/src/types/webhook.js.map +1 -0
  130. package/dist/src/utils.d.ts +110 -0
  131. package/dist/src/utils.d.ts.map +1 -0
  132. package/dist/src/utils.js +217 -0
  133. package/dist/src/utils.js.map +1 -0
  134. package/dist/src/virtual-tools.d.ts +44 -0
  135. package/dist/src/virtual-tools.d.ts.map +1 -0
  136. package/dist/src/virtual-tools.js +140 -0
  137. package/dist/src/virtual-tools.js.map +1 -0
  138. package/dist/tsconfig.tsbuildinfo +1 -0
  139. package/package.json +7 -7
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Adapters Export
3
+ *
4
+ * Exports all framework adapters and utilities
5
+ */
6
+ export { AdapterUtils, createAdapterHandler } from './base';
7
+ export { HttpAdapter } from './http';
8
+ export { NextAdapter } from './next';
9
+ export { McpAdapter } from './mcp';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * MCP Adapter for Model Context Protocol servers
3
+ *
4
+ * Handles MCP tool format with content wrapping
5
+ */
6
+ import type { Adapter } from './base';
7
+ import type { McpAdapterOptions, McpToolExtra, PaywallToolResult } from '../types';
8
+ /**
9
+ * MCP context (plain args object)
10
+ */
11
+ type McpContext = Record<string, unknown>;
12
+ /**
13
+ * MCP Adapter implementation
14
+ */
15
+ export declare class McpAdapter implements Adapter<McpContext, PaywallToolResult> {
16
+ private options;
17
+ constructor(options?: McpAdapterOptions);
18
+ extractArgs(args: McpContext): Record<string, unknown>;
19
+ getCustomerRef(args: McpContext, extra?: McpToolExtra): Promise<string>;
20
+ formatResponse(result: unknown, _context: McpContext): PaywallToolResult;
21
+ formatError(error: Error, _context: McpContext): PaywallToolResult;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/adapters/mcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAErC,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAGlF;;GAEG;AACH,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEzC;;GAEG;AACH,qBAAa,UAAW,YAAW,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAC3D,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,iBAAsB;IAEnD,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKhD,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAc7E,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,GAAG,iBAAiB;IAqBxE,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,GAAG,iBAAiB;CA+BnE"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * MCP Adapter for Model Context Protocol servers
3
+ *
4
+ * Handles MCP tool format with content wrapping
5
+ */
6
+ import { AdapterUtils } from './base';
7
+ import { PaywallError, paywallErrorToClientPayload } from '../paywall';
8
+ /**
9
+ * MCP Adapter implementation
10
+ */
11
+ export class McpAdapter {
12
+ options;
13
+ constructor(options = {}) {
14
+ this.options = options;
15
+ }
16
+ extractArgs(args) {
17
+ // MCP args are already plain objects, pass through
18
+ return args;
19
+ }
20
+ async getCustomerRef(args, extra) {
21
+ if (this.options.getCustomerRef) {
22
+ const ref = await this.options.getCustomerRef(args, extra);
23
+ return AdapterUtils.ensureCustomerRef(ref);
24
+ }
25
+ const customerRefFromExtra = extra?.authInfo?.extra?.customer_ref;
26
+ const customerRef = typeof customerRefFromExtra === 'string' && customerRefFromExtra.trim()
27
+ ? customerRefFromExtra.trim()
28
+ : 'anonymous';
29
+ return AdapterUtils.ensureCustomerRef(customerRef);
30
+ }
31
+ formatResponse(result, _context) {
32
+ const transformed = this.options.transformResponse
33
+ ? this.options.transformResponse(result)
34
+ : result;
35
+ const response = {
36
+ content: [
37
+ {
38
+ type: 'text',
39
+ text: JSON.stringify(transformed, null, 2),
40
+ },
41
+ ],
42
+ };
43
+ if (transformed && typeof transformed === 'object' && !Array.isArray(transformed)) {
44
+ response.structuredContent = transformed;
45
+ }
46
+ return response;
47
+ }
48
+ formatError(error, _context) {
49
+ if (error instanceof PaywallError) {
50
+ return {
51
+ content: [
52
+ {
53
+ type: 'text',
54
+ text: JSON.stringify(paywallErrorToClientPayload(error), null, 2),
55
+ },
56
+ ],
57
+ isError: true,
58
+ structuredContent: error.structuredContent,
59
+ };
60
+ }
61
+ return {
62
+ content: [
63
+ {
64
+ type: 'text',
65
+ text: JSON.stringify({
66
+ success: false,
67
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
68
+ }, null, 2),
69
+ },
70
+ ],
71
+ isError: true,
72
+ };
73
+ }
74
+ }
75
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/adapters/mcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAErC,OAAO,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAA;AAOtE;;GAEG;AACH,MAAM,OAAO,UAAU;IACD;IAApB,YAAoB,UAA6B,EAAE;QAA/B,YAAO,GAAP,OAAO,CAAwB;IAAG,CAAC;IAEvD,WAAW,CAAC,IAAgB;QAC1B,mDAAmD;QACnD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAgB,EAAE,KAAoB;QACzD,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC1D,OAAO,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAC5C,CAAC;QAED,MAAM,oBAAoB,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAA;QACjE,MAAM,WAAW,GACf,OAAO,oBAAoB,KAAK,QAAQ,IAAI,oBAAoB,CAAC,IAAI,EAAE;YACrE,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE;YAC7B,CAAC,CAAC,WAAW,CAAA;QACjB,OAAO,YAAY,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;IACpD,CAAC;IAED,cAAc,CAAC,MAAe,EAAE,QAAoB;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB;YAChD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC;YACxC,CAAC,CAAC,MAAM,CAAA;QAEV,MAAM,QAAQ,GAAsB;YAClC,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC3C;aACF;SACF,CAAA;QAED,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAClF,QAAQ,CAAC,iBAAiB,GAAG,WAAsC,CAAA;QACrE,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,WAAW,CAAC,KAAY,EAAE,QAAoB;QAC5C,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBAClE;iBACF;gBACD,OAAO,EAAE,IAAI;gBACb,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;aAC3C,CAAA;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;qBACzE,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Next.js Adapter for App Router
3
+ *
4
+ * Handles Next.js App Router with Web Request/Response API
5
+ */
6
+ import type { Adapter } from './base';
7
+ import type { NextAdapterOptions } from '../types';
8
+ /**
9
+ * Next.js context (Web Request + optional route context)
10
+ */
11
+ type NextContext = [request: Request, context?: any];
12
+ /**
13
+ * Next.js Adapter implementation
14
+ */
15
+ export declare class NextAdapter implements Adapter<NextContext, Response> {
16
+ private options;
17
+ constructor(options?: NextAdapterOptions);
18
+ extractArgs([request, context]: NextContext): Promise<Record<string, unknown>>;
19
+ getCustomerRef([request]: NextContext): Promise<string>;
20
+ formatResponse(result: unknown, _context: NextContext): Response;
21
+ formatError(error: Error, _context: NextContext): Response;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=next.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../../src/adapters/next.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAErC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAGlD;;GAEG;AAEH,KAAK,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;AAEpD;;GAEG;AACH,qBAAa,WAAY,YAAW,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;IACpD,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,kBAAuB;IAE9C,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAwC9E,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAgC7D,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,GAAG,QAAQ;IAWhE,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,QAAQ;CA4B3D"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Next.js Adapter for App Router
3
+ *
4
+ * Handles Next.js App Router with Web Request/Response API
5
+ */
6
+ import { AdapterUtils } from './base';
7
+ import { PaywallError } from '../paywall';
8
+ /**
9
+ * Next.js Adapter implementation
10
+ */
11
+ export class NextAdapter {
12
+ options;
13
+ constructor(options = {}) {
14
+ this.options = options;
15
+ }
16
+ async extractArgs([request, context]) {
17
+ if (this.options.extractArgs) {
18
+ return await this.options.extractArgs(request, context);
19
+ }
20
+ // Default extraction from URL, body, and route params
21
+ const url = new URL(request.url);
22
+ const query = Object.fromEntries(url.searchParams.entries());
23
+ // Parse request body if present
24
+ let body = {};
25
+ try {
26
+ if (request.method !== 'GET' &&
27
+ request.headers.get('content-type')?.includes('application/json')) {
28
+ body = await request.json();
29
+ }
30
+ }
31
+ catch {
32
+ // If parsing fails, continue with empty body
33
+ }
34
+ // Handle route parameters if provided
35
+ let routeParams = {};
36
+ if (context?.params) {
37
+ if (typeof context.params === 'object' && 'then' in context.params) {
38
+ // Handle Promise<params> case (Next.js 15+ app router)
39
+ routeParams = await context.params;
40
+ }
41
+ else {
42
+ routeParams = context.params;
43
+ }
44
+ }
45
+ return {
46
+ ...body,
47
+ ...query,
48
+ ...routeParams,
49
+ };
50
+ }
51
+ async getCustomerRef([request]) {
52
+ if (this.options.getCustomerRef) {
53
+ const ref = await this.options.getCustomerRef(request);
54
+ return AdapterUtils.ensureCustomerRef(ref);
55
+ }
56
+ // Try to get from JWT token first
57
+ const authHeader = request.headers.get('authorization');
58
+ if (authHeader && authHeader.startsWith('Bearer ')) {
59
+ const token = authHeader.substring(7);
60
+ const jwtSub = await AdapterUtils.extractFromJWT(token);
61
+ if (jwtSub) {
62
+ return AdapterUtils.ensureCustomerRef(jwtSub);
63
+ }
64
+ }
65
+ // Try x-user-id header (set by middleware, e.g., Supabase auth)
66
+ const userId = request.headers.get('x-user-id');
67
+ if (userId) {
68
+ return AdapterUtils.ensureCustomerRef(userId);
69
+ }
70
+ // Fallback to x-customer-ref header
71
+ const headerRef = request.headers.get('x-customer-ref');
72
+ if (headerRef) {
73
+ return AdapterUtils.ensureCustomerRef(headerRef);
74
+ }
75
+ // Default to demo_user for Next.js (common in examples)
76
+ return 'demo_user';
77
+ }
78
+ formatResponse(result, _context) {
79
+ const transformed = this.options.transformResponse
80
+ ? this.options.transformResponse(result)
81
+ : result;
82
+ return new Response(JSON.stringify(transformed), {
83
+ status: 200,
84
+ headers: { 'Content-Type': 'application/json' },
85
+ });
86
+ }
87
+ formatError(error, _context) {
88
+ if (error instanceof PaywallError) {
89
+ return new Response(JSON.stringify({
90
+ success: false,
91
+ error: 'Payment required',
92
+ product: error.structuredContent.product,
93
+ checkoutUrl: error.structuredContent.checkoutUrl,
94
+ message: error.structuredContent.message,
95
+ }), {
96
+ status: 402,
97
+ headers: { 'Content-Type': 'application/json' },
98
+ });
99
+ }
100
+ return new Response(JSON.stringify({
101
+ success: false,
102
+ error: error instanceof Error ? error.message : 'Internal server error',
103
+ }), {
104
+ status: 500,
105
+ headers: { 'Content-Type': 'application/json' },
106
+ });
107
+ }
108
+ }
109
+ //# sourceMappingURL=next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../../../src/adapters/next.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * SolvaPay Server SDK - API Client
3
+ *
4
+ * This module provides the API client implementation for communicating with
5
+ * the SolvaPay backend. The client handles all HTTP requests for paywall
6
+ * protection, usage tracking, and resource management.
7
+ */
8
+ import type { SolvaPayClient } from './types';
9
+ /**
10
+ * Configuration options for creating a SolvaPay API client
11
+ */
12
+ export type ServerClientOptions = {
13
+ /**
14
+ * Your SolvaPay API key (required)
15
+ */
16
+ apiKey: string;
17
+ /**
18
+ * Base URL for the SolvaPay API (optional)
19
+ * Defaults to https://api.solvapay.com
20
+ */
21
+ apiBaseUrl?: string;
22
+ };
23
+ /**
24
+ * Creates a SolvaPay API client that implements the full SolvaPayClient interface.
25
+ *
26
+ * This function creates a low-level API client for direct communication with the
27
+ * SolvaPay backend. For most use cases, use `createSolvaPay()` instead, which
28
+ * provides a higher-level API with paywall protection.
29
+ *
30
+ * Use this function when you need:
31
+ * - Direct API access for custom operations
32
+ * - Testing with custom client implementations
33
+ * - Advanced use cases not covered by the main API
34
+ *
35
+ * @param opts - Configuration options
36
+ * @param opts.apiKey - Your SolvaPay API key (required)
37
+ * @param opts.apiBaseUrl - Optional API base URL override
38
+ * @returns A fully configured SolvaPayClient instance
39
+ * @throws {SolvaPayError} If API key is missing
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // Create API client directly
44
+ * const client = createSolvaPayClient({
45
+ * apiKey: process.env.SOLVAPAY_SECRET_KEY!,
46
+ * apiBaseUrl: 'https://api.solvapay.com' // optional
47
+ * });
48
+ *
49
+ * // Use client for custom operations
50
+ * const products = await client.listProducts();
51
+ * ```
52
+ *
53
+ * @see {@link createSolvaPay} for the recommended high-level API
54
+ * @see {@link ServerClientOptions} for configuration options
55
+ * @since 1.0.0
56
+ */
57
+ export declare function createSolvaPayClient(opts: ServerClientOptions): SolvaPayClient;
58
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,cAAc,CA0iB9E"}