@solvapay/server 1.0.8-preview.6 → 1.0.8-preview.8
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/chunk-R5U7XKVJ.js +16 -0
- package/dist/dist-EPVKJAIP.js +94 -0
- package/dist/dist-JBJ4HMP7.js +94 -0
- package/dist/esm-5GYCIXIY.js +3475 -0
- package/dist/esm-UW7WCMEK.js +3475 -0
- package/dist/index.cjs +307 -12
- package/dist/index.d.cts +35 -3
- package/dist/index.d.ts +35 -3
- package/dist/index.js +303 -12
- package/dist/src/adapters/base.d.ts +57 -0
- package/dist/src/adapters/base.d.ts.map +1 -0
- package/dist/src/adapters/base.js +73 -0
- package/dist/src/adapters/base.js.map +1 -0
- package/dist/src/adapters/http.d.ts +25 -0
- package/dist/src/adapters/http.d.ts.map +1 -0
- package/dist/src/adapters/http.js +99 -0
- package/dist/src/adapters/http.js.map +1 -0
- package/dist/src/adapters/index.d.ts +11 -0
- package/dist/src/adapters/index.d.ts.map +1 -0
- package/dist/src/adapters/index.js +10 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/adapters/mcp.d.ts +24 -0
- package/dist/src/adapters/mcp.d.ts.map +1 -0
- package/dist/src/adapters/mcp.js +75 -0
- package/dist/src/adapters/mcp.js.map +1 -0
- package/dist/src/adapters/next.d.ts +24 -0
- package/dist/src/adapters/next.d.ts.map +1 -0
- package/dist/src/adapters/next.js +109 -0
- package/dist/src/adapters/next.js.map +1 -0
- package/dist/src/client.d.ts +58 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +495 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/edge.d.ts +22 -0
- package/dist/src/edge.d.ts.map +1 -0
- package/dist/src/edge.js +91 -0
- package/dist/src/edge.js.map +1 -0
- package/dist/src/factory.d.ts +605 -0
- package/dist/src/factory.d.ts.map +1 -0
- package/dist/src/factory.js +215 -0
- package/dist/src/factory.js.map +1 -0
- package/dist/src/helpers/auth.d.ts +47 -0
- package/dist/src/helpers/auth.d.ts.map +1 -0
- package/dist/src/helpers/auth.js +73 -0
- package/dist/src/helpers/auth.js.map +1 -0
- package/dist/src/helpers/checkout.d.ts +45 -0
- package/dist/src/helpers/checkout.d.ts.map +1 -0
- package/dist/src/helpers/checkout.js +89 -0
- package/dist/src/helpers/checkout.js.map +1 -0
- package/dist/src/helpers/customer.d.ts +51 -0
- package/dist/src/helpers/customer.d.ts.map +1 -0
- package/dist/src/helpers/customer.js +77 -0
- package/dist/src/helpers/customer.js.map +1 -0
- package/dist/src/helpers/error.d.ts +15 -0
- package/dist/src/helpers/error.d.ts.map +1 -0
- package/dist/src/helpers/error.js +35 -0
- package/dist/src/helpers/error.js.map +1 -0
- package/dist/src/helpers/index.d.ts +17 -0
- package/dist/src/helpers/index.d.ts.map +1 -0
- package/dist/src/helpers/index.js +23 -0
- package/dist/src/helpers/index.js.map +1 -0
- package/dist/src/helpers/payment.d.ts +107 -0
- package/dist/src/helpers/payment.d.ts.map +1 -0
- package/dist/src/helpers/payment.js +150 -0
- package/dist/src/helpers/payment.js.map +1 -0
- package/dist/src/helpers/plans.d.ts +19 -0
- package/dist/src/helpers/plans.d.ts.map +1 -0
- package/dist/src/helpers/plans.js +53 -0
- package/dist/src/helpers/plans.js.map +1 -0
- package/dist/src/helpers/renewal.d.ts +23 -0
- package/dist/src/helpers/renewal.d.ts.map +1 -0
- package/dist/src/helpers/renewal.js +90 -0
- package/dist/src/helpers/renewal.js.map +1 -0
- package/dist/src/helpers/subscription.d.ts +23 -0
- package/dist/src/helpers/subscription.d.ts.map +1 -0
- package/dist/src/helpers/subscription.js +101 -0
- package/dist/src/helpers/subscription.js.map +1 -0
- package/dist/src/helpers/types.d.ts +22 -0
- package/dist/src/helpers/types.d.ts.map +1 -0
- package/dist/src/helpers/types.js +7 -0
- package/dist/src/helpers/types.js.map +1 -0
- package/dist/src/index.d.ts +73 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +106 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp/auth-bridge.d.ts +9 -0
- package/dist/src/mcp/auth-bridge.d.ts.map +1 -0
- package/dist/src/mcp/auth-bridge.js +46 -0
- package/dist/src/mcp/auth-bridge.js.map +1 -0
- package/dist/src/mcp/oauth-bridge.d.ts +48 -0
- package/dist/src/mcp/oauth-bridge.d.ts.map +1 -0
- package/dist/src/mcp/oauth-bridge.js +110 -0
- package/dist/src/mcp/oauth-bridge.js.map +1 -0
- package/dist/src/mcp-auth.d.ts +17 -0
- package/dist/src/mcp-auth.d.ts.map +1 -0
- package/dist/src/mcp-auth.js +57 -0
- package/dist/src/mcp-auth.js.map +1 -0
- package/dist/src/paywall.d.ts +119 -0
- package/dist/src/paywall.d.ts.map +1 -0
- package/dist/src/paywall.js +700 -0
- package/dist/src/paywall.js.map +1 -0
- package/dist/src/register-virtual-tools-mcp.d.ts +23 -0
- package/dist/src/register-virtual-tools-mcp.d.ts.map +1 -0
- package/dist/src/register-virtual-tools-mcp.js +86 -0
- package/dist/src/register-virtual-tools-mcp.js.map +1 -0
- package/dist/src/types/client.d.ts +216 -0
- package/dist/src/types/client.d.ts.map +1 -0
- package/dist/src/types/client.js +7 -0
- package/dist/src/types/client.js.map +1 -0
- package/dist/src/types/generated.d.ts +2834 -0
- package/dist/src/types/generated.d.ts.map +1 -0
- package/dist/src/types/generated.js +6 -0
- package/dist/src/types/generated.js.map +1 -0
- package/dist/src/types/index.d.ts +13 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +8 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/options.d.ts +126 -0
- package/dist/src/types/options.d.ts.map +1 -0
- package/dist/src/types/options.js +8 -0
- package/dist/src/types/options.js.map +1 -0
- package/dist/src/types/paywall.d.ts +64 -0
- package/dist/src/types/paywall.d.ts.map +1 -0
- package/dist/src/types/paywall.js +7 -0
- package/dist/src/types/paywall.js.map +1 -0
- package/dist/src/types/webhook.d.ts +50 -0
- package/dist/src/types/webhook.d.ts.map +1 -0
- package/dist/src/types/webhook.js +2 -0
- package/dist/src/types/webhook.js.map +1 -0
- package/dist/src/utils.d.ts +110 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +217 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/src/virtual-tools.d.ts +44 -0
- package/dist/src/virtual-tools.d.ts.map +1 -0
- package/dist/src/virtual-tools.js +140 -0
- package/dist/src/virtual-tools.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AACrC,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,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"}
|