@cryptonly/x402-fastify 0.6.0 → 0.7.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.
package/README.md CHANGED
@@ -69,9 +69,26 @@ The buyer is charged only when the handler succeeds. A `4xx`/`5xx` reply or a th
69
69
  | `svmSchemes` | `[new ExactSvmScheme()]` if `@x402/svm` is installed | Schemes for Solana. |
70
70
  | `logger` | `console` | Gets reload failures and skipped routes. |
71
71
  | `paywallConfig` | — | Passed to the stock `@x402/fastify` hooks. |
72
+ | `pathPrefix` | — | Prefix a proxy strips before the request reaches the app. See [Behind a proxy](#behind-a-proxy). |
73
+ | `publicPath` | — | Maps the app's path to the public path, for other rewrites. |
74
+ | `publicBaseUrl` | the request's | Public origin buyers call, for `resource.url` in the `402`. |
72
75
 
73
76
  `app.cryptonlyX402` has `ready()`, `refresh()`, `routes()` and `close()`. `app.close()` stops the refresh.
74
77
 
78
+ ## Behind a proxy
79
+
80
+ Dashboard prices are keyed by the public path. If a reverse proxy rewrites the path, tell the plugin how, or the paths don't match and the routes are served **for free**: the plugin only gates the paths it knows.
81
+
82
+ ```ts
83
+ // The proxy serves /v1/weather from the app's /weather:
84
+ await app.register(cryptonlyPayments, { apiKey, pathPrefix: '/v1', publicBaseUrl: 'https://api.example.com' });
85
+
86
+ // The proxy adds /internal:
87
+ await app.register(cryptonlyPayments, { apiKey, publicPath: (path) => path.replace(/^\/internal/, '') });
88
+ ```
89
+
90
+ `publicBaseUrl` sets the URL buyers see in the `402`. Without it, the URL is built from the request's host and protocol. Behind a proxy, set Fastify `trustProxy` so the protocol is right.
91
+
75
92
  ## Solana
76
93
 
77
94
  Install `@x402/svm` and `@solana/kit`, and add a Solana payout wallet in the dashboard. Solana prices then work with no other change.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { FastifyPluginAsync } from 'fastify';
2
- import { type RoutesConfig } from '@x402/core/server';
2
+ import type { RoutesConfig } from '@x402/core/server';
3
3
  import { type PaywallConfig } from '@x402/fastify';
4
4
  import { type X402RouteSourceOptions } from '@cryptonly/x402';
5
5
  /** Options for {@link cryptonlyPayments}. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAGnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAA0B,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAKL,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAC;AAEzB,6CAA6C;AAC7C,MAAM,MAAM,wBAAwB,GAAG,sBAAsB,GAAG;IAC9D,yEAAyE;IACzE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,0FAA0F;AAC1F,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,8EAA8E;IAC9E,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,0EAA0E;IAC1E,MAAM,IAAI,YAAY,GAAG,SAAS,CAAC;IACnC,8EAA8E;IAC9E,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,eAAe;QACvB,aAAa,EAAE,aAAa,CAAC;KAC9B;CACF;AAoFD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,iBAAiB,8CAG5B,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAGnB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,YAAY,EAA0B,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAOL,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAC;AAEzB,6CAA6C;AAC7C,MAAM,MAAM,wBAAwB,GAAG,sBAAsB,GAAG;IAC9D,yEAAyE;IACzE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF,0FAA0F;AAC1F,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,8EAA8E;IAC9E,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,0EAA0E;IAC1E,MAAM,IAAI,YAAY,GAAG,SAAS,CAAC;IACnC,8EAA8E;IAC9E,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,eAAe;QACvB,aAAa,EAAE,aAAa,CAAC;KAC9B;CACF;AAsFD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,iBAAiB,8CAG5B,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.routesFromConfig = exports.fetchX402Config = exports.cryptonlyPayments = void 0;
7
7
  const fastify_plugin_1 = __importDefault(require("fastify-plugin"));
8
- const server_1 = require("@x402/core/server");
9
8
  const fastify_1 = require("@x402/fastify");
10
9
  const x402_1 = require("@cryptonly/x402");
11
10
  const HOOKS = Symbol('cryptonlyX402Hooks');
@@ -30,7 +29,8 @@ function stockHooks(httpServer, paywallConfig) {
30
29
  return hooks;
31
30
  }
32
31
  const plugin = async (app, options) => {
33
- const source = (0, x402_1.createX402RouteSource)(options, (routes, config) => stockHooks(new server_1.x402HTTPResourceServer((0, x402_1.createResourceServer)(config, source.facilitator, source.schemes, source.svmSchemes), routes), options.paywallConfig));
32
+ const publicRequest = (0, x402_1.createPublicRequestMapper)(options);
33
+ const source = (0, x402_1.createX402RouteSource)(options, (routes, config) => stockHooks((0, x402_1.createHTTPResourceServer)((0, x402_1.createResourceServer)(config, source.facilitator, source.schemes, source.svmSchemes), routes, publicRequest), options.paywallConfig));
34
34
  // The stock hooks' per-request state, declared once on the real instance.
35
35
  app.decorateRequest('x402Context', undefined);
36
36
  app.decorateRequest('x402RawGuard', undefined);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cryptonly/x402-fastify",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "Fastify plugin for x402 payments with Cryptonly as the facilitator; prices come from the Cryptonly dashboard.",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -51,7 +51,7 @@
51
51
  "access": "public"
52
52
  },
53
53
  "dependencies": {
54
- "@cryptonly/x402": "0.6.0",
54
+ "@cryptonly/x402": "0.7.0",
55
55
  "fastify-plugin": "^5.1.0"
56
56
  },
57
57
  "peerDependencies": {