@alleyboss/micropay-solana-x402-paywall 2.3.0 → 3.0.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 (70) hide show
  1. package/README.md +72 -116
  2. package/dist/agent/index.cjs +358 -0
  3. package/dist/agent/index.cjs.map +1 -0
  4. package/dist/agent/index.d.cts +221 -0
  5. package/dist/agent/index.d.ts +221 -0
  6. package/dist/agent/index.js +347 -0
  7. package/dist/agent/index.js.map +1 -0
  8. package/dist/client/index.cjs +1 -1
  9. package/dist/client/index.cjs.map +1 -1
  10. package/dist/client/index.d.cts +10 -1
  11. package/dist/client/index.d.ts +10 -1
  12. package/dist/client/index.js +1 -1
  13. package/dist/client/index.js.map +1 -1
  14. package/dist/express/index.cjs +79 -0
  15. package/dist/express/index.cjs.map +1 -0
  16. package/dist/express/index.d.cts +40 -0
  17. package/dist/express/index.d.ts +40 -0
  18. package/dist/express/index.js +76 -0
  19. package/dist/express/index.js.map +1 -0
  20. package/dist/index.cjs +315 -1116
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.cts +6 -10
  23. package/dist/index.d.ts +6 -10
  24. package/dist/index.js +283 -1074
  25. package/dist/index.js.map +1 -1
  26. package/dist/session/index.cjs.map +1 -1
  27. package/dist/session/index.d.cts +1 -1
  28. package/dist/session/index.d.ts +1 -1
  29. package/dist/session/index.js.map +1 -1
  30. package/dist/{session-D2IoWAWV.d.cts → types-BWYQMw03.d.cts} +1 -16
  31. package/dist/{session-D2IoWAWV.d.ts → types-BWYQMw03.d.ts} +1 -16
  32. package/package.json +29 -59
  33. package/dist/client-D-dteoJw.d.cts +0 -63
  34. package/dist/client-DfCIRrNG.d.ts +0 -63
  35. package/dist/memory-Daxkczti.d.cts +0 -29
  36. package/dist/memory-Daxkczti.d.ts +0 -29
  37. package/dist/middleware/index.cjs +0 -273
  38. package/dist/middleware/index.cjs.map +0 -1
  39. package/dist/middleware/index.d.cts +0 -91
  40. package/dist/middleware/index.d.ts +0 -91
  41. package/dist/middleware/index.js +0 -267
  42. package/dist/middleware/index.js.map +0 -1
  43. package/dist/nextjs-BDyOqGAq.d.cts +0 -81
  44. package/dist/nextjs-CbX8_9yK.d.ts +0 -81
  45. package/dist/payment-BGp7eMQl.d.cts +0 -103
  46. package/dist/payment-BGp7eMQl.d.ts +0 -103
  47. package/dist/solana/index.cjs +0 -589
  48. package/dist/solana/index.cjs.map +0 -1
  49. package/dist/solana/index.d.cts +0 -240
  50. package/dist/solana/index.d.ts +0 -240
  51. package/dist/solana/index.js +0 -567
  52. package/dist/solana/index.js.map +0 -1
  53. package/dist/store/index.cjs +0 -99
  54. package/dist/store/index.cjs.map +0 -1
  55. package/dist/store/index.d.cts +0 -38
  56. package/dist/store/index.d.ts +0 -38
  57. package/dist/store/index.js +0 -96
  58. package/dist/store/index.js.map +0 -1
  59. package/dist/utils/index.cjs +0 -68
  60. package/dist/utils/index.cjs.map +0 -1
  61. package/dist/utils/index.d.cts +0 -30
  62. package/dist/utils/index.d.ts +0 -30
  63. package/dist/utils/index.js +0 -65
  64. package/dist/utils/index.js.map +0 -1
  65. package/dist/x402/index.cjs +0 -387
  66. package/dist/x402/index.cjs.map +0 -1
  67. package/dist/x402/index.d.cts +0 -96
  68. package/dist/x402/index.d.ts +0 -96
  69. package/dist/x402/index.js +0 -375
  70. package/dist/x402/index.js.map +0 -1
@@ -0,0 +1,79 @@
1
+ 'use strict';
2
+
3
+ var server = require('@x402/core/server');
4
+
5
+ // src/express/index.ts
6
+ var ExpressAdapter = class {
7
+ constructor(req) {
8
+ this.req = req;
9
+ }
10
+ getHeader(name) {
11
+ const val = this.req.headers[name.toLowerCase()];
12
+ if (Array.isArray(val)) return val[0];
13
+ return val;
14
+ }
15
+ getMethod() {
16
+ return this.req.method;
17
+ }
18
+ getPath() {
19
+ return this.req.path;
20
+ }
21
+ getUrl() {
22
+ return this.req.originalUrl || this.req.url;
23
+ }
24
+ getAcceptHeader() {
25
+ return this.req.headers["accept"] || "";
26
+ }
27
+ getUserAgent() {
28
+ return this.req.headers["user-agent"] || "";
29
+ }
30
+ getQueryParams() {
31
+ return this.req.query;
32
+ }
33
+ getQueryParam(name) {
34
+ return this.req.query[name];
35
+ }
36
+ async getBody() {
37
+ return this.req.body;
38
+ }
39
+ };
40
+ function x402Middleware(server$1, routeConfig) {
41
+ return async (req, res, next) => {
42
+ try {
43
+ const currentRouteKey = `${req.method} ${req.path}`;
44
+ const routes = {
45
+ [currentRouteKey]: routeConfig
46
+ };
47
+ const httpServer = new server.x402HTTPResourceServer(server$1, routes);
48
+ await httpServer.initialize();
49
+ const adapter = new ExpressAdapter(req);
50
+ const result = await httpServer.processHTTPRequest({
51
+ adapter,
52
+ method: req.method,
53
+ path: req.path
54
+ });
55
+ if (result.type === "payment-verified" || result.type === "no-payment-required") {
56
+ req.x402 = result;
57
+ return next();
58
+ }
59
+ if (result.type === "payment-error") {
60
+ const instructions = result.response;
61
+ if (instructions.headers) {
62
+ Object.entries(instructions.headers).forEach(([key, value]) => {
63
+ if (value) res.setHeader(key, value);
64
+ });
65
+ }
66
+ res.status(instructions.status).send(instructions.body);
67
+ return;
68
+ }
69
+ } catch (error) {
70
+ console.error("x402 middleware error:", error);
71
+ res.status(500).json({ error: "Payment verification error" });
72
+ }
73
+ };
74
+ }
75
+
76
+ exports.ExpressAdapter = ExpressAdapter;
77
+ exports.x402Middleware = x402Middleware;
78
+ //# sourceMappingURL=index.cjs.map
79
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/express/index.ts"],"names":["server","x402HTTPResourceServer"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Request, Response, NextFunction } from 'express';\nimport {\n x402ResourceServer,\n x402HTTPResourceServer,\n type HTTPAdapter,\n type RouteConfig\n} from '@x402/core/server';\n\n/**\n * Express Adapter for x402\n */\nexport class ExpressAdapter implements HTTPAdapter {\n constructor(private req: Request) { }\n\n getHeader(name: string): string | undefined {\n const val = this.req.headers[name.toLowerCase()];\n if (Array.isArray(val)) return val[0];\n return val;\n }\n\n getMethod(): string {\n return this.req.method;\n }\n\n getPath(): string {\n return this.req.path;\n }\n\n getUrl(): string {\n return this.req.originalUrl || this.req.url;\n }\n\n getAcceptHeader(): string {\n return this.req.headers['accept'] || '';\n }\n\n getUserAgent(): string {\n return this.req.headers['user-agent'] || '';\n }\n\n getQueryParams(): Record<string, string | string[]> {\n return this.req.query as Record<string, string | string[]>;\n }\n\n getQueryParam(name: string): string | string[] | undefined {\n return this.req.query[name] as string | string[] | undefined;\n }\n\n async getBody(): Promise<unknown> {\n return this.req.body;\n }\n}\n\n/**\n * Create x402 middleware for Express\n * \n * @example\n * ```typescript\n * import { x402ResourceServer } from '@x402/core/server';\n * import { x402Middleware } from '@alleyboss/micropay-solana-x402-paywall/express';\n * \n * const server = new x402ResourceServer(facilitatorClient);\n * \n * app.get('/premium', x402Middleware(server, {\n * accepts: { scheme: 'exact', ... },\n * description: 'Premium content'\n * }), (req, res) => {\n * res.send('You paid!');\n * });\n * ```\n */\nexport function x402Middleware(\n server: x402ResourceServer,\n routeConfig: RouteConfig\n) {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n // Create a temporary HTTP resource server for this request\n // We use the current path + method to ensure it matches\n // NOTE: req.path contains the actual path (e.g. /users/123), not the route pattern\n const currentRouteKey = `${req.method} ${req.path}`;\n const routes = {\n [currentRouteKey]: routeConfig\n };\n\n const httpServer = new x402HTTPResourceServer(server, routes);\n await httpServer.initialize();\n\n const adapter = new ExpressAdapter(req);\n\n // Process request\n const result = await httpServer.processHTTPRequest({\n adapter,\n method: req.method,\n path: req.path\n });\n\n if (result.type === 'payment-verified' || result.type === 'no-payment-required') {\n // Attach result to request\n (req as any).x402 = result;\n return next();\n }\n\n if (result.type === 'payment-error') {\n const instructions = result.response;\n\n // Set headers\n if (instructions.headers) {\n Object.entries(instructions.headers).forEach(([key, value]) => {\n if (value) res.setHeader(key, value);\n });\n }\n\n // Send response\n res.status(instructions.status).send(instructions.body);\n return;\n }\n\n } catch (error) {\n console.error('x402 middleware error:', error);\n res.status(500).json({ error: 'Payment verification error' });\n }\n };\n}\n"]}
@@ -0,0 +1,40 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ import { HTTPAdapter, x402ResourceServer, RouteConfig } from '@x402/core/server';
3
+
4
+ /**
5
+ * Express Adapter for x402
6
+ */
7
+ declare class ExpressAdapter implements HTTPAdapter {
8
+ private req;
9
+ constructor(req: Request);
10
+ getHeader(name: string): string | undefined;
11
+ getMethod(): string;
12
+ getPath(): string;
13
+ getUrl(): string;
14
+ getAcceptHeader(): string;
15
+ getUserAgent(): string;
16
+ getQueryParams(): Record<string, string | string[]>;
17
+ getQueryParam(name: string): string | string[] | undefined;
18
+ getBody(): Promise<unknown>;
19
+ }
20
+ /**
21
+ * Create x402 middleware for Express
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import { x402ResourceServer } from '@x402/core/server';
26
+ * import { x402Middleware } from '@alleyboss/micropay-solana-x402-paywall/express';
27
+ *
28
+ * const server = new x402ResourceServer(facilitatorClient);
29
+ *
30
+ * app.get('/premium', x402Middleware(server, {
31
+ * accepts: { scheme: 'exact', ... },
32
+ * description: 'Premium content'
33
+ * }), (req, res) => {
34
+ * res.send('You paid!');
35
+ * });
36
+ * ```
37
+ */
38
+ declare function x402Middleware(server: x402ResourceServer, routeConfig: RouteConfig): (req: Request, res: Response, next: NextFunction) => Promise<void>;
39
+
40
+ export { ExpressAdapter, x402Middleware };
@@ -0,0 +1,40 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ import { HTTPAdapter, x402ResourceServer, RouteConfig } from '@x402/core/server';
3
+
4
+ /**
5
+ * Express Adapter for x402
6
+ */
7
+ declare class ExpressAdapter implements HTTPAdapter {
8
+ private req;
9
+ constructor(req: Request);
10
+ getHeader(name: string): string | undefined;
11
+ getMethod(): string;
12
+ getPath(): string;
13
+ getUrl(): string;
14
+ getAcceptHeader(): string;
15
+ getUserAgent(): string;
16
+ getQueryParams(): Record<string, string | string[]>;
17
+ getQueryParam(name: string): string | string[] | undefined;
18
+ getBody(): Promise<unknown>;
19
+ }
20
+ /**
21
+ * Create x402 middleware for Express
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import { x402ResourceServer } from '@x402/core/server';
26
+ * import { x402Middleware } from '@alleyboss/micropay-solana-x402-paywall/express';
27
+ *
28
+ * const server = new x402ResourceServer(facilitatorClient);
29
+ *
30
+ * app.get('/premium', x402Middleware(server, {
31
+ * accepts: { scheme: 'exact', ... },
32
+ * description: 'Premium content'
33
+ * }), (req, res) => {
34
+ * res.send('You paid!');
35
+ * });
36
+ * ```
37
+ */
38
+ declare function x402Middleware(server: x402ResourceServer, routeConfig: RouteConfig): (req: Request, res: Response, next: NextFunction) => Promise<void>;
39
+
40
+ export { ExpressAdapter, x402Middleware };
@@ -0,0 +1,76 @@
1
+ import { x402HTTPResourceServer } from '@x402/core/server';
2
+
3
+ // src/express/index.ts
4
+ var ExpressAdapter = class {
5
+ constructor(req) {
6
+ this.req = req;
7
+ }
8
+ getHeader(name) {
9
+ const val = this.req.headers[name.toLowerCase()];
10
+ if (Array.isArray(val)) return val[0];
11
+ return val;
12
+ }
13
+ getMethod() {
14
+ return this.req.method;
15
+ }
16
+ getPath() {
17
+ return this.req.path;
18
+ }
19
+ getUrl() {
20
+ return this.req.originalUrl || this.req.url;
21
+ }
22
+ getAcceptHeader() {
23
+ return this.req.headers["accept"] || "";
24
+ }
25
+ getUserAgent() {
26
+ return this.req.headers["user-agent"] || "";
27
+ }
28
+ getQueryParams() {
29
+ return this.req.query;
30
+ }
31
+ getQueryParam(name) {
32
+ return this.req.query[name];
33
+ }
34
+ async getBody() {
35
+ return this.req.body;
36
+ }
37
+ };
38
+ function x402Middleware(server, routeConfig) {
39
+ return async (req, res, next) => {
40
+ try {
41
+ const currentRouteKey = `${req.method} ${req.path}`;
42
+ const routes = {
43
+ [currentRouteKey]: routeConfig
44
+ };
45
+ const httpServer = new x402HTTPResourceServer(server, routes);
46
+ await httpServer.initialize();
47
+ const adapter = new ExpressAdapter(req);
48
+ const result = await httpServer.processHTTPRequest({
49
+ adapter,
50
+ method: req.method,
51
+ path: req.path
52
+ });
53
+ if (result.type === "payment-verified" || result.type === "no-payment-required") {
54
+ req.x402 = result;
55
+ return next();
56
+ }
57
+ if (result.type === "payment-error") {
58
+ const instructions = result.response;
59
+ if (instructions.headers) {
60
+ Object.entries(instructions.headers).forEach(([key, value]) => {
61
+ if (value) res.setHeader(key, value);
62
+ });
63
+ }
64
+ res.status(instructions.status).send(instructions.body);
65
+ return;
66
+ }
67
+ } catch (error) {
68
+ console.error("x402 middleware error:", error);
69
+ res.status(500).json({ error: "Payment verification error" });
70
+ }
71
+ };
72
+ }
73
+
74
+ export { ExpressAdapter, x402Middleware };
75
+ //# sourceMappingURL=index.js.map
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/express/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { Request, Response, NextFunction } from 'express';\nimport {\n x402ResourceServer,\n x402HTTPResourceServer,\n type HTTPAdapter,\n type RouteConfig\n} from '@x402/core/server';\n\n/**\n * Express Adapter for x402\n */\nexport class ExpressAdapter implements HTTPAdapter {\n constructor(private req: Request) { }\n\n getHeader(name: string): string | undefined {\n const val = this.req.headers[name.toLowerCase()];\n if (Array.isArray(val)) return val[0];\n return val;\n }\n\n getMethod(): string {\n return this.req.method;\n }\n\n getPath(): string {\n return this.req.path;\n }\n\n getUrl(): string {\n return this.req.originalUrl || this.req.url;\n }\n\n getAcceptHeader(): string {\n return this.req.headers['accept'] || '';\n }\n\n getUserAgent(): string {\n return this.req.headers['user-agent'] || '';\n }\n\n getQueryParams(): Record<string, string | string[]> {\n return this.req.query as Record<string, string | string[]>;\n }\n\n getQueryParam(name: string): string | string[] | undefined {\n return this.req.query[name] as string | string[] | undefined;\n }\n\n async getBody(): Promise<unknown> {\n return this.req.body;\n }\n}\n\n/**\n * Create x402 middleware for Express\n * \n * @example\n * ```typescript\n * import { x402ResourceServer } from '@x402/core/server';\n * import { x402Middleware } from '@alleyboss/micropay-solana-x402-paywall/express';\n * \n * const server = new x402ResourceServer(facilitatorClient);\n * \n * app.get('/premium', x402Middleware(server, {\n * accepts: { scheme: 'exact', ... },\n * description: 'Premium content'\n * }), (req, res) => {\n * res.send('You paid!');\n * });\n * ```\n */\nexport function x402Middleware(\n server: x402ResourceServer,\n routeConfig: RouteConfig\n) {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n // Create a temporary HTTP resource server for this request\n // We use the current path + method to ensure it matches\n // NOTE: req.path contains the actual path (e.g. /users/123), not the route pattern\n const currentRouteKey = `${req.method} ${req.path}`;\n const routes = {\n [currentRouteKey]: routeConfig\n };\n\n const httpServer = new x402HTTPResourceServer(server, routes);\n await httpServer.initialize();\n\n const adapter = new ExpressAdapter(req);\n\n // Process request\n const result = await httpServer.processHTTPRequest({\n adapter,\n method: req.method,\n path: req.path\n });\n\n if (result.type === 'payment-verified' || result.type === 'no-payment-required') {\n // Attach result to request\n (req as any).x402 = result;\n return next();\n }\n\n if (result.type === 'payment-error') {\n const instructions = result.response;\n\n // Set headers\n if (instructions.headers) {\n Object.entries(instructions.headers).forEach(([key, value]) => {\n if (value) res.setHeader(key, value);\n });\n }\n\n // Send response\n res.status(instructions.status).send(instructions.body);\n return;\n }\n\n } catch (error) {\n console.error('x402 middleware error:', error);\n res.status(500).json({ error: 'Payment verification error' });\n }\n };\n}\n"]}