Sign In

@solinkify/gate

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@solinkify/gate - npm Package Compare versions

Comparing version
0.4.3
to
0.5.0
+29
-0
dist/core.d.ts

@@ -31,2 +31,6 @@ import type { GateConfig, PaymentManifest, GateDiscoveryDocument, X402PaymentRequirements, X402ResourceInfo } from './types.js';

botName?: string | null;
/** The payment this request was verified against, whichever wire form it
* arrived in (`x-solinkify-payment` or the canonical `PAYMENT-SIGNATURE`).
* Adapters use it to file a delivery record without re-reading headers. */
paymentId?: string;
} | {

@@ -57,2 +61,7 @@ action: 'block';

export declare function resolveClientIp(forwardedFor: string | null | undefined, realIp: string | null | undefined, directIp: string | null | undefined, trustProxy: boolean): string | null;
/** Drop trailing slashes before matching an exempt path. Some hosts canonical-
* redirect into the slashed form (WordPress on plain permalinks sends
* /robots.txt → /robots.txt/), and the redirected request must stay exempt.
* '/' is left alone; every other path loses its trailing slashes. */
export declare function stripTrailingSlash(pathname: string): string;
/** SEO-critical paths that must ALWAYS be reachable by crawlers, even in strict

@@ -74,2 +83,8 @@ * mode or when misconfigured — a 402 here would break robots.txt/sitemap. */

export declare const WELL_KNOWN_PATH = "/.well-known/solinkify";
/** x402 scheme id for the Solinkify flow. Deliberately not `exact`: that scheme
* is defined on `solana:*` as a direct SPL transfer to `payTo`, which this gate
* rejects (it verifies an escrow PDA, so a direct transfer yields no payment_id
* and the payer loses the money). An unknown scheme id is the honest signal —
* a conformant client skips the entry rather than mis-paying. */
export declare const ESCROW_SCHEME = "solinkify-escrow";
/** Infer the x402 v2 CAIP-2 network id from the settlement mint: any known

@@ -92,2 +107,16 @@ * devnet mint → Solana devnet, else Solana mainnet (custom mints alike). */

export declare function buildDiscoveryDocument(config: ResolvedGateConfig): GateDiscoveryDocument;
/**
* Read the canonical x402 v2 request header. The HTTP transport spec puts the
* payment in `PAYMENT-SIGNATURE` as a base64 `PaymentPayload`; for the
* `solinkify-escrow` scheme its `payload` carries the escrow lock's
* `payment_id` and the `payer` that signed it — the same two values the
* `x-solinkify-payment` / `x-solinkify-payer` headers have always carried.
*
* Never throws: a malformed header must not take a creator's site down, and a
* request with no usable payment simply falls through to the 402 path.
*/
export declare function readPaymentSignature(headers?: Record<string, string | undefined>): {
paymentId?: string;
payer?: string;
};
/** Build the HTTP 402 response headers (Content-Type set by each adapter).

@@ -94,0 +123,0 @@ * `PAYMENT-REQUIRED` is the x402 v2 canonical wire location for the

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}

@@ -97,6 +97,13 @@ // Framework-agnostic core for @solinkify/gate.

}
/** Drop trailing slashes before matching an exempt path. Some hosts canonical-
* redirect into the slashed form (WordPress on plain permalinks sends
* /robots.txt → /robots.txt/), and the redirected request must stay exempt.
* '/' is left alone; every other path loses its trailing slashes. */
export function stripTrailingSlash(pathname) {
return pathname.length > 1 ? pathname.replace(/\/+$/, '') : pathname;
}
/** SEO-critical paths that must ALWAYS be reachable by crawlers, even in strict
* mode or when misconfigured — a 402 here would break robots.txt/sitemap. */
export function isSeoInfraPath(pathname) {
const p = pathname.toLowerCase();
const p = stripTrailingSlash(pathname.toLowerCase());
return p === '/robots.txt' || (p.startsWith('/sitemap') && p.endsWith('.xml'));

@@ -139,2 +146,8 @@ }

const CAIP2_SOLANA_DEVNET = 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1';
/** x402 scheme id for the Solinkify flow. Deliberately not `exact`: that scheme
* is defined on `solana:*` as a direct SPL transfer to `payTo`, which this gate
* rejects (it verifies an escrow PDA, so a direct transfer yields no payment_id
* and the payer loses the money). An unknown scheme id is the honest signal —
* a conformant client skips the entry rather than mis-paying. */
export const ESCROW_SCHEME = 'solinkify-escrow';
/** Infer the x402 v2 CAIP-2 network id from the settlement mint: any known

@@ -161,3 +174,3 @@ * devnet mint → Solana devnet, else Solana mainnet (custom mints alike). */

return {
scheme: 'exact',
scheme: ESCROW_SCHEME,
network: inferNetwork(eff.tokenMint),

@@ -292,2 +305,39 @@ amount: String(Math.round(eff.price * 10 ** TOKEN_DECIMALS)),

}
/** base64 → utf8 without assuming Node (core also runs on Workers/Edge). */
function fromBase64(s) {
if (typeof Buffer !== 'undefined')
return Buffer.from(s, 'base64').toString('utf8');
const bin = atob(s);
const bytes = Uint8Array.from(bin, (c) => c.charCodeAt(0));
return new TextDecoder().decode(bytes);
}
/**
* Read the canonical x402 v2 request header. The HTTP transport spec puts the
* payment in `PAYMENT-SIGNATURE` as a base64 `PaymentPayload`; for the
* `solinkify-escrow` scheme its `payload` carries the escrow lock's
* `payment_id` and the `payer` that signed it — the same two values the
* `x-solinkify-payment` / `x-solinkify-payer` headers have always carried.
*
* Never throws: a malformed header must not take a creator's site down, and a
* request with no usable payment simply falls through to the 402 path.
*/
export function readPaymentSignature(headers) {
const raw = headers?.['payment-signature'];
if (!raw)
return {};
try {
const payload = JSON.parse(fromBase64(raw)).payload;
if (!payload)
return {};
const paymentId = payload['payment_id'] ?? payload['paymentId'];
const payer = payload['payer'];
return {
paymentId: typeof paymentId === 'string' && paymentId ? paymentId : undefined,
payer: typeof payer === 'string' && payer ? payer : undefined,
};
}
catch {
return {};
}
}
/** utf8 → base64 without assuming Node (core also runs on Workers/Edge). */

@@ -384,3 +434,3 @@ function toBase64(s) {

// before path rules so it's always reachable (it is never priced content).
if (info.pathname === WELL_KNOWN_PATH) {
if (stripTrailingSlash(info.pathname) === WELL_KNOWN_PATH) {
return {

@@ -451,3 +501,8 @@ action: 'block', // "respond directly" — see GateResult docs

// Step 4: no payment header → freemium check, then 402 challenge.
const paymentId = info.paymentId;
// Two accepted wire forms, same meaning: the vendor headers the SDK has
// always used, and the canonical x402 v2 `PAYMENT-SIGNATURE` header. The
// vendor headers win when both are present, so existing agents are untouched.
const canonical = readPaymentSignature(info.headers);
const paymentId = info.paymentId || canonical.paymentId;
const payerPubkey = info.payerPubkey || canonical.payer;
if (!paymentId) {

@@ -460,5 +515,5 @@ // Fase 10 — settlement WITHOUT a per-request transaction:

// the normal freemium/402 path so the agent still gets the manifest.
if (info.payerPubkey && info.headers) {
if (payerPubkey && info.headers) {
if (info.headers['x-solinkify-prepaid']) {
if (await verifyPrepaidAccess(config, info.payerPubkey, eff.endpointId, info.headers['x-solinkify-prepaid-token'])) {
if (await verifyPrepaidAccess(config, payerPubkey, eff.endpointId, info.headers['x-solinkify-prepaid-token'])) {
if (config.analytics)

@@ -470,3 +525,3 @@ trackGateEvent(config.apiUrl, config.wallet, 'paid', detection.botName);

else if (info.headers['x-solinkify-subscription']) {
if (await verifySubscriptionAccess(config, info.payerPubkey, eff.endpointId)) {
if (await verifySubscriptionAccess(config, payerPubkey, eff.endpointId)) {
if (config.analytics)

@@ -490,3 +545,3 @@ trackGateEvent(config.apiUrl, config.wallet, 'paid', detection.botName);

// Step 5: verify payment on-chain via backend (bound to the tier's endpoint+amount).
const result = await verifyPayment(paymentId, config, info.payerPubkey ?? undefined, eff);
const result = await verifyPayment(paymentId, config, payerPubkey ?? undefined, eff);
if (!result.valid) {

@@ -500,3 +555,3 @@ trackBlocked(config, detection.botName ?? (detection.isBot ? 'unknown' : 'stealth'));

}
return { action: 'next', verified: true, botName: detection.botName };
return { action: 'next', verified: true, botName: detection.botName, paymentId };
}

@@ -503,0 +558,0 @@ function trackBlocked(config, bot) {

@@ -1,1 +0,1 @@

{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../src/express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,MAAM,WAAW,kBAAkB;IACjC;oEACgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,6EAA6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,MAAM,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,8EAA8E;IAC9E,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAC3D;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAgBlD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,IAKnD,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,MAAM,WAAW,KAChB,OAAO,CAAC,IAAI,CAAC,CAkEjB"}
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../src/express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,MAAM,WAAW,kBAAkB;IACjC;oEACgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,6EAA6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,MAAM,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,8EAA8E;IAC9E,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAC3D;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAgBlD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,IAKnD,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,MAAM,WAAW,KAChB,OAAO,CAAC,IAAI,CAAC,CAmEjB"}

@@ -64,3 +64,4 @@ import { assertValidConfig, resolveConfig, resolveClientIp, evaluateGate } from './core.js';

res.set('X-Solinkify-Bot', result.botName ?? 'unknown');
const paymentId = headerValue(req.headers['x-solinkify-payment']);
// Core already resolved it from whichever wire form arrived.
const paymentId = result.paymentId;
if (resolved.deliveryRecords && paymentId) {

@@ -67,0 +68,0 @@ captureNodeDelivery(res, {

@@ -1,1 +0,1 @@

{"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../src/fastify.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,sEAAsE;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC3C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACtD,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B;;4BAEwB;IACxB,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAOD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,IAIpC,SAAS,kBAAkB,EAAE,OAAO,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAAC,CA2DnF"}
{"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../src/fastify.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,sEAAsE;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC3C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACtD,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B;;4BAEwB;IACxB,GAAG,CAAC,EAAE,gBAAgB,CAAC;CACxB;AAOD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,IAIpC,SAAS,kBAAkB,EAAE,OAAO,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAAC,CA4DnF"}

@@ -54,3 +54,4 @@ // Fastify adapter — register as an onRequest hook.

reply.header('X-Solinkify-Bot', result.botName ?? 'unknown');
const paymentId = headerValue(request.headers['x-solinkify-payment']);
// Core already resolved it from whichever wire form arrived.
const paymentId = result.paymentId;
if (resolved.deliveryRecords && paymentId && reply.raw) {

@@ -57,0 +58,0 @@ captureNodeDelivery(reply.raw, {

@@ -1,1 +0,1 @@

{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAGjF;;;mFAGmF;AACnF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,UAAO,GAAG,eAAe,CAcvF;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,GAC/C,QAAQ,CAKV;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC,GACnD,QAAQ,CAKV;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,CAI7F;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,OAAO,CAAC,QAAQ,CAAC,CASnB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GACvC,OAAO,CAAC,QAAQ,CAAC,CAQnB"}
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAGjF;;;mFAGmF;AACnF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,UAAO,GAAG,eAAe,CAcvF;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,GAC/C,QAAQ,CAKV;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC,GACnD,QAAQ,CAKV;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,CAI7F;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,OAAO,CAAC,QAAQ,CAAC,CASnB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GACvC,OAAO,CAAC,QAAQ,CAAC,CAOnB"}

@@ -78,3 +78,3 @@ // Shared helpers for Web Fetch API frameworks (Astro, SvelteKit, Hono, Nuxt/

return response;
return finishVerified(response, resolved, result.botName, request.headers.get('x-solinkify-payment'));
return finishVerified(response, resolved, result.botName, result.paymentId);
}

@@ -203,3 +203,9 @@ export interface GateConfig {

export interface X402PaymentRequirements {
scheme: 'exact';
/** NOT `exact`. On a `solana:*` network the x402 `exact` scheme means "sign an
* SPL transfer straight to payTo and present it in the PAYMENT header" —
* Solinkify does not honour that. Settlement here is an escrow-PDA lock the
* backend verifies against chain state, so the scheme carries its own id and
* a conformant client can tell it does not know this flow (and skip it)
* instead of paying into a void. See `extra` for the retry headers. */
scheme: 'solinkify-escrow';
/** CAIP-2 network id: 'solana:5eykt4…' (mainnet) | 'solana:EtWTRA…' (devnet). */

@@ -206,0 +212,0 @@ network: string;

@@ -1,1 +0,1 @@

{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GACvC,OAAO,CAAC,QAAQ,CAAC,CAwCnB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,KACnB,SAAS,OAAO,EAAE,KAAK,SAAS,KAAG,OAAO,CAAC,QAAQ,CAAC,CAkBnE"}
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GACvC,OAAO,CAAC,QAAQ,CAAC,CAuCnB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,KACnB,SAAS,OAAO,EAAE,KAAK,SAAS,KAAG,OAAO,CAAC,QAAQ,CAAC,CAkBnE"}

@@ -54,3 +54,3 @@ import { assertValidConfig, resolveConfig, evaluateGate } from './core.js';

return response;
return finishVerified(response, resolved, result.botName, request.headers.get('x-solinkify-payment'));
return finishVerified(response, resolved, result.botName, result.paymentId);
}

@@ -57,0 +57,0 @@ /**

{
"name": "@solinkify/gate",
"version": "0.4.3",
"description": "Creator middleware (Next.js, Express, Cloudflare Workers) — blocks AI scrapers with HTTP 402 paywall, monetizes ethical AI agents on Solana.",
"version": "0.5.0",
"description": "Creator middleware (Next.js, Express, Cloudflare Workers) \u2014 blocks AI scrapers with HTTP 402 paywall, monetizes ethical AI agents on Solana.",
"type": "module",

@@ -6,0 +6,0 @@ "main": "./dist/index.js",