@naulon/enforce 0.1.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 (66) hide show
  1. package/README.md +89 -0
  2. package/dist/agentDetect.d.ts +94 -0
  3. package/dist/agentDetect.d.ts.map +1 -0
  4. package/dist/agentDetect.js +149 -0
  5. package/dist/agentDetect.js.map +1 -0
  6. package/dist/botAuth.d.ts +159 -0
  7. package/dist/botAuth.d.ts.map +1 -0
  8. package/dist/botAuth.js +659 -0
  9. package/dist/botAuth.js.map +1 -0
  10. package/dist/build402.d.ts +46 -0
  11. package/dist/build402.d.ts.map +1 -0
  12. package/dist/build402.js +137 -0
  13. package/dist/build402.js.map +1 -0
  14. package/dist/decide.d.ts +125 -0
  15. package/dist/decide.d.ts.map +1 -0
  16. package/dist/decide.js +221 -0
  17. package/dist/decide.js.map +1 -0
  18. package/dist/discoverability.d.ts +68 -0
  19. package/dist/discoverability.d.ts.map +1 -0
  20. package/dist/discoverability.js +62 -0
  21. package/dist/discoverability.js.map +1 -0
  22. package/dist/enforce/fetch-handler.d.ts +12 -0
  23. package/dist/enforce/fetch-handler.d.ts.map +1 -0
  24. package/dist/enforce/fetch-handler.js +25 -0
  25. package/dist/enforce/fetch-handler.js.map +1 -0
  26. package/dist/enforce/index.d.ts +11 -0
  27. package/dist/enforce/index.d.ts.map +1 -0
  28. package/dist/enforce/index.js +11 -0
  29. package/dist/enforce/index.js.map +1 -0
  30. package/dist/enforce/middleware.d.ts +27 -0
  31. package/dist/enforce/middleware.d.ts.map +1 -0
  32. package/dist/enforce/middleware.js +88 -0
  33. package/dist/enforce/middleware.js.map +1 -0
  34. package/dist/enforce/next.d.ts +24 -0
  35. package/dist/enforce/next.d.ts.map +1 -0
  36. package/dist/enforce/next.js +32 -0
  37. package/dist/enforce/next.js.map +1 -0
  38. package/dist/enforce/quote-source.d.ts +31 -0
  39. package/dist/enforce/quote-source.d.ts.map +1 -0
  40. package/dist/enforce/quote-source.js +29 -0
  41. package/dist/enforce/quote-source.js.map +1 -0
  42. package/dist/index.d.ts +23 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +31 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/license.d.ts +16 -0
  47. package/dist/license.d.ts.map +1 -0
  48. package/dist/license.js +18 -0
  49. package/dist/license.js.map +1 -0
  50. package/dist/nonce.d.ts +45 -0
  51. package/dist/nonce.d.ts.map +1 -0
  52. package/dist/nonce.js +122 -0
  53. package/dist/nonce.js.map +1 -0
  54. package/dist/pop.d.ts +15 -0
  55. package/dist/pop.d.ts.map +1 -0
  56. package/dist/pop.js +77 -0
  57. package/dist/pop.js.map +1 -0
  58. package/dist/pricing.d.ts +53 -0
  59. package/dist/pricing.d.ts.map +1 -0
  60. package/dist/pricing.js +44 -0
  61. package/dist/pricing.js.map +1 -0
  62. package/dist/revocation.d.ts +6 -0
  63. package/dist/revocation.d.ts.map +1 -0
  64. package/dist/revocation.js +45 -0
  65. package/dist/revocation.js.map +1 -0
  66. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"botAuth.js","sourceRoot":"","sources":["../src/botAuth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type NonceBinding } from "./nonce.ts";
2
+ import type { Quote } from "./pricing.ts";
3
+ export declare const MAX_TIMEOUT_SECONDS: number;
4
+ /** x402 header names (Circle/x402 spec). */
5
+ export declare const PAYMENT_SIGNATURE_HEADER = "payment-signature";
6
+ export declare const PAYMENT_REQUIRED_HEADER = "PAYMENT-REQUIRED";
7
+ export declare const PAYMENT_RESPONSE_HEADER = "PAYMENT-RESPONSE";
8
+ /** Minimal x402 PaymentRequirements (Gateway batching variant). */
9
+ export interface PaymentRequirements {
10
+ scheme: "exact";
11
+ network: string;
12
+ asset: string;
13
+ amount: string;
14
+ payTo: string;
15
+ maxTimeoutSeconds: number;
16
+ extra: Record<string, unknown>;
17
+ /** Optional on-chain memo reconciliation id (Arc only). Carried from the quote;
18
+ * read ONLY by the self-relay settle path on a memo-capable network. */
19
+ memoId?: string;
20
+ }
21
+ export declare function buildRequirements(quote: Quote): PaymentRequirements;
22
+ /** The payment facts a nonce is bound to — derived from the requirements. */
23
+ export declare function bindingOf(r: PaymentRequirements): NonceBinding;
24
+ /** Base64 `PAYMENT-REQUIRED` header value for a 402.
25
+ *
26
+ * In mock mode the `extra` carries our replay nonce (the offline buyer echoes it
27
+ * back and we consume it). In gateway mode `extra` stays exactly the Gateway
28
+ * batching descriptor `{name, version, verifyingContract}` — matching
29
+ * circlefin/arc-nanopayments. Circle's facilitator compares the signed `accepted`
30
+ * against the requirements, so an extra field there (or a per-request rebuild with
31
+ * a fresh nonce) makes verify fail; on-chain deposit-backed settlement is the real
32
+ * replay guard in gateway mode. */
33
+ /** A settlement leg paired with the x402 requirements a buyer signs for it. Leg 0
34
+ * is always the primary author leg (the stock single-author toll); the rest are
35
+ * the publisher-declared `extraLegs`, each its own direct buyer→payTo transfer. */
36
+ export interface SettlementLegReq {
37
+ /** Opaque ledger/dashboard label ("author" for the primary). No protocol meaning. */
38
+ role: string;
39
+ requirements: PaymentRequirements;
40
+ }
41
+ export declare function build402(quote: Quote, resourceUrl: string, now: number): {
42
+ requirements: PaymentRequirements;
43
+ legs: SettlementLegReq[];
44
+ header: string;
45
+ };
46
+ //# sourceMappingURL=build402.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build402.d.ts","sourceRoot":"","sources":["../src/build402.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAY1C,eAAO,MAAM,mBAAmB,QAA+B,CAAC;AAEhE,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAC5D,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B;6EACyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB,CAgBnE;AAED,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,CAAC,EAAE,mBAAmB,GAAG,YAAY,CAE9D;AAED;;;;;;;;mCAQmC;AACnC;;oFAEoF;AACpF,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;IACxE,YAAY,EAAE,mBAAmB,CAAC;IAClC,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,CAwFA"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * x402 BUILD side — assembling the 402 challenge a buyer signs against.
3
+ *
4
+ * This is the pure, settle-free half of the x402 flow: the `PAYMENT-REQUIRED`
5
+ * header consts, the `PaymentRequirements` shape, and `build402` (the per-leg
6
+ * assembly the gate AND the in-app enforce middleware both need to emit a 402).
7
+ * Its only deps are `@naulon/shared`, `./nonce.ts`, and `./pricing.ts` — no
8
+ * settlement, no `pendingLegs`, no `arcRelay`, no Circle facilitator. The SETTLE
9
+ * half (`verifyAndSettle`, `drainPendingLegs`, the signature builders) lives in
10
+ * `@naulon/tollgate`'s `x402.ts` and imports the build-side symbols from here.
11
+ *
12
+ * payTo is ONE address per x402 payment (the primary author). The recursive
13
+ * co-author split is recorded on the event and reconciled by the attribution
14
+ * service's onward payouts — see packages/attribution.
15
+ */
16
+ import { activeNetwork, gatewayExtra, getConfig, primaryPayee, splitAuthorLegs, toAtomicUsdc, } from "@naulon/shared";
17
+ import { issueNonce } from "./nonce.js";
18
+ const cfg = getConfig();
19
+ // Validity window (seconds) we advertise in the x402 quote — the payer signs
20
+ // validBefore = now + this. Circle's Gateway facilitator rejects `verify` unless
21
+ // the REMAINING validity at verify time is still >= 7 days (604800s). The SDK
22
+ // client clamps short windows up (Math.max(maxTimeoutSeconds, 604800+100)), so an
23
+ // SDK buyer survives a low value, but a non-SDK buyer that trusts our advertised
24
+ // number verbatim fails `authorization_validity_too_short` when it is below the
25
+ // floor. So we advertise above the floor with margin (default 8d, configurable).
26
+ // Was a hardcoded 345_600 (4d) — below the floor, a footgun for non-SDK buyers.
27
+ export const MAX_TIMEOUT_SECONDS = cfg.X402_MAX_TIMEOUT_SECONDS;
28
+ /** x402 header names (Circle/x402 spec). */
29
+ export const PAYMENT_SIGNATURE_HEADER = "payment-signature";
30
+ export const PAYMENT_REQUIRED_HEADER = "PAYMENT-REQUIRED";
31
+ export const PAYMENT_RESPONSE_HEADER = "PAYMENT-RESPONSE";
32
+ export function buildRequirements(quote) {
33
+ const net = activeNetwork();
34
+ return {
35
+ scheme: "exact",
36
+ network: net.network,
37
+ asset: net.usdc,
38
+ amount: toAtomicUsdc(quote.price),
39
+ // One on-chain recipient (the highest-share author); the full co-author split
40
+ // is recorded on the event. Shared with the settlement builder so both agree.
41
+ payTo: primaryPayee(quote.payees, cfg.PRIMARY_PAYEE_TIEBREAK),
42
+ maxTimeoutSeconds: MAX_TIMEOUT_SECONDS,
43
+ extra: gatewayExtra(net),
44
+ // Carried only when the quote supplies one; the self-relay path reads it on a
45
+ // memo-capable network. Harmless on Base (ignored by the Gateway settle path).
46
+ ...(quote.memoId ? { memoId: quote.memoId } : {}),
47
+ };
48
+ }
49
+ /** The payment facts a nonce is bound to — derived from the requirements. */
50
+ export function bindingOf(r) {
51
+ return { amount: r.amount, payTo: r.payTo, network: r.network };
52
+ }
53
+ export function build402(quote, resourceUrl, now) {
54
+ // The author (primary) leg, then the co-author split legs (if any), then one
55
+ // requirement per additive extra leg — all sharing the same network/asset/Gateway
56
+ // descriptor, each its own payTo + amount.
57
+ const requirements = buildRequirements(quote);
58
+ // Co-author on-chain split (opt-in, multi-author only): DIVIDE the author price into
59
+ // the primary's synchronous (content-gating) leg + one DEFERRED leg per other
60
+ // co-author. Custody-free split-at-source — every leg is a direct buyer→author
61
+ // transfer, so no leg ever holds a different author's cut. The buyer's total is
62
+ // unchanged (price is divided, not added to). Off / single-author → `requirements`
63
+ // keeps the full price and no co-author legs exist, byte-identical to the stock toll.
64
+ const coauthorLegs = [];
65
+ if (quote.coauthorSplit && quote.payees.length > 1) {
66
+ // toAtomicUsdc returns the atomic micro-USDC as a string; splitMicro works in
67
+ // integer micro units, exact for any realistic toll (well within Number range).
68
+ const atomicPrice = Number(toAtomicUsdc(quote.price));
69
+ const split = splitAuthorLegs(quote.payees, atomicPrice, cfg.PRIMARY_PAYEE_TIEBREAK);
70
+ // Reduce the author leg to the primary's OWN share, mutated in place so leg 0 stays
71
+ // the same object the returned `requirements` and the nonce loop below rely on.
72
+ requirements.amount = split.primaryAmountMicro;
73
+ requirements.payTo = split.primaryPayTo;
74
+ for (const leg of split.coauthorLegs) {
75
+ coauthorLegs.push({
76
+ role: "coauthor",
77
+ requirements: { ...requirements, payTo: leg.payTo, amount: leg.amountMicro, extra: { ...requirements.extra } },
78
+ });
79
+ }
80
+ }
81
+ const legs = [
82
+ { role: "author", requirements },
83
+ ...coauthorLegs,
84
+ ...quote.extraLegs.map((leg) => ({
85
+ role: leg.role,
86
+ requirements: { ...requirements, payTo: leg.payTo, amount: leg.amount, extra: { ...requirements.extra } },
87
+ })),
88
+ ];
89
+ // Mock mode clears offline, so each leg carries its OWN replay nonce (the buyer
90
+ // echoes it back, we consume it). Gateway mode needs none — the deposit-backed
91
+ // settle is the replay guard. Mutates each leg's requirements in place (leg 0 is
92
+ // `requirements`, so the returned value keeps its nonce, as before).
93
+ if (cfg.PAYMENT_MODE === "mock") {
94
+ for (const leg of legs) {
95
+ leg.requirements.extra = { ...leg.requirements.extra, nonce: issueNonce(bindingOf(leg.requirements), now) };
96
+ }
97
+ }
98
+ const paymentRequired = {
99
+ x402Version: 2,
100
+ resource: {
101
+ url: resourceUrl,
102
+ // Publisher-neutral: this gate is multi-tenant, so the 402 a buyer sees must
103
+ // NOT name any one publisher's brand (it would be wrong for every other tenant
104
+ // and leak the reference publisher). `naulon` names the toll PROTOCOL, not a
105
+ // tenant; the article itself is identified by `resourceUrl` + the title.
106
+ description: `naulon ${quote.kind} toll: ${quote.title}`,
107
+ mimeType: "text/html",
108
+ },
109
+ // Stock x402: `accepts[]` is a list of ALTERNATIVES ("pick one"), not
110
+ // simultaneous legs. The primary author leg stays here unchanged so a non-naulon
111
+ // x402 client sees a valid single-option 402 and degrades to single-leg.
112
+ accepts: [requirements],
113
+ };
114
+ // Simultaneous extra legs (co-author splits and/or `extraLegs`) are a naulon
115
+ // extension. A plain single-author quote has only the author leg → omit it ENTIRELY
116
+ // so the 402 is byte-identical to the stock shape (golden test). Key off the
117
+ // ASSEMBLED legs, not `quote.extraLegs`: co-author legs are built here, not on the quote.
118
+ if (legs.length > 1) {
119
+ paymentRequired.extensions = {
120
+ naulonLegs: {
121
+ version: 1,
122
+ settlement: "author-sync-rest-deferred",
123
+ // Full leg list (author first): the buyer signs one authorization per entry
124
+ // and sends them as an array in leg order. The gate uses its OWN `legs` for
125
+ // verify/settle — never the wire — so a tampered wire can't change amounts.
126
+ legs: legs.map((l) => ({
127
+ role: l.role,
128
+ payTo: l.requirements.payTo,
129
+ amount: l.requirements.amount,
130
+ ...(cfg.PAYMENT_MODE === "mock" ? { nonce: l.requirements.extra.nonce } : {}),
131
+ })),
132
+ },
133
+ };
134
+ }
135
+ return { requirements, legs, header: Buffer.from(JSON.stringify(paymentRequired)).toString("base64") };
136
+ }
137
+ //# sourceMappingURL=build402.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build402.js","sourceRoot":"","sources":["../src/build402.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Runtime-agnostic, PRE-SETTLEMENT toll decision.
3
+ *
4
+ * This is the single decision path the `createApp` proxy weld used to inline.
5
+ * Extracting it lets any runtime — the gate's Hono reverse proxy OR the
6
+ * `@naulon/sdk` in-app middleware — reach the SAME verdict from a web `Request`
7
+ * without dragging along the gate's proxy / observe / settle side effects.
8
+ *
9
+ * `decide()` performs NO side effects: no `observe`, no `proxyToOrigin`, no
10
+ * `verifyAndSettle`, no `record`/`emitSettlement`/`mintLicense`. It stops at "here
11
+ * is the verdict, and — for a machine — the 402 legs + header and the payment to
12
+ * settle." The CALLER settles, observes, and proxies. To keep the caller's audit
13
+ * plane byte-identical, every observed variant carries an `obs` facts payload
14
+ * (the classifier verdict + Web-Bot-Auth signals the `observe(...)` call needs).
15
+ *
16
+ * Preconditions the caller enforces BEFORE calling: the publisher is KNOWN
17
+ * (unknown-host already failed closed) and NOT suspended (a paused publisher
18
+ * proxies straight through, free). `decide()` assumes a known, live publisher.
19
+ */
20
+ import { type RequestSignals, type Verdict } from "./agentDetect.ts";
21
+ import { type RequestFacts, type BotAuthOptions } from "./botAuth.ts";
22
+ import { type SettlementLegReq } from "./build402.ts";
23
+ import type { Quote } from "./pricing.ts";
24
+ import { type PublisherConfig, type TollKind } from "@naulon/shared";
25
+ export { PAYMENT_SIGNATURE_HEADER, PAYMENT_REQUIRED_HEADER, PAYMENT_RESPONSE_HEADER, type SettlementLegReq, type PaymentRequirements, } from "./build402.ts";
26
+ export { PAYMENT_LINK_HEADER } from "./discoverability.ts";
27
+ export type { Quote } from "./pricing.ts";
28
+ export type { TollKind } from "@naulon/shared";
29
+ /** The header that carries a Citation License Token, both ways. */
30
+ export declare const LICENSE_HEADER = "X-Naulon-License";
31
+ /** The header that carries a holder-of-key proof-of-possession on a re-read. */
32
+ export declare const PROOF_HEADER = "X-Naulon-Proof";
33
+ /**
34
+ * A presented license entitles a free re-read iff it verifies AND is scoped to
35
+ * this exact slug, this publisher (aud === the publisher's licenseIdentity), and
36
+ * covers the requested kind (a citation license entitles a read, never the
37
+ * reverse). Fails closed — any defect drops the caller to the normal 402 path.
38
+ * Revocation is consulted only when the online check is enabled (needs shared state).
39
+ */
40
+ export declare function licenseEntitlesRead(jws: string, slug: string, requestedKind: TollKind, req: Request, identity: string): Promise<boolean>;
41
+ /** Pull the classifier's inputs out of the raw request. */
42
+ export declare function signalsFrom(req: Request): RequestSignals;
43
+ /**
44
+ * The request facts the Web Bot Auth verifier serializes signed components from.
45
+ * `authority` is the resolved tenant Host — the same identity the gate routes by —
46
+ * so a signature over `@authority` binds to the host being tolled.
47
+ */
48
+ export declare function requestFactsFrom(req: Request, host: string): RequestFacts;
49
+ /** Article slug from a path like /essays/on-stillness, using the publisher's prefixes. */
50
+ export declare function slugFromPath(path: string, prefixes: string[]): string | null;
51
+ /**
52
+ * Site-mode slug: the full decoded pathname, or null for the surfaces that must
53
+ * stay free — gate control routes, discovery (robots/sitemaps/feeds/favicon),
54
+ * static assets by extension (deliberately including .txt/.xml/.json: machine-
55
+ * readable surfaces never toll — the conservative humans/discovery-free bias),
56
+ * and the publisher's own excludePrefixes.
57
+ */
58
+ export declare function slugFromSitePath(path: string, excludePrefixes: string[]): string | null;
59
+ /**
60
+ * The classification facts an observed decision carries so the caller can emit a
61
+ * byte-identical `observe(...)` — the classifier verdict + Web-Bot-Auth signals.
62
+ */
63
+ export interface DecideObs {
64
+ /** The gated slug — carried so the caller's `observe(...)` needs nothing decide computed. */
65
+ slug: string;
66
+ classifiedAs: Verdict["kind"];
67
+ classifyReason: string;
68
+ agentUa?: string;
69
+ verified?: true;
70
+ verifiedAgent?: string;
71
+ sigInvalid?: true;
72
+ }
73
+ /**
74
+ * The pre-settlement verdict. `passthrough` proxies untouched (no observe).
75
+ * `payment-presented` hands the caller the buyer's payment + legs to settle.
76
+ */
77
+ export type Decision = {
78
+ kind: "passthrough";
79
+ verdict: "non-article" | "unknown-article";
80
+ } | {
81
+ kind: "free";
82
+ verdict: string;
83
+ obs: DecideObs;
84
+ } | {
85
+ kind: "blocked";
86
+ frag: string;
87
+ obs: DecideObs;
88
+ } | {
89
+ kind: "reread";
90
+ tollKind: TollKind;
91
+ obs: DecideObs;
92
+ } | {
93
+ kind: "payment-required";
94
+ legs: SettlementLegReq[];
95
+ header: string;
96
+ quote: Quote;
97
+ tollKind: TollKind;
98
+ obs: DecideObs;
99
+ } | {
100
+ kind: "payment-presented";
101
+ payment: string;
102
+ legs: SettlementLegReq[];
103
+ header: string;
104
+ quote: Quote;
105
+ tollKind: TollKind;
106
+ obs: DecideObs;
107
+ };
108
+ export interface DecideInput {
109
+ /** The raw web request being decided. */
110
+ raw: Request;
111
+ /** The resolved tenant Host (the identity the gate routes + Bot-Auth binds to). */
112
+ host: string;
113
+ /** `URL.pathname + URL.search` — the slug matcher's input. */
114
+ path: string;
115
+ /** The resolved, KNOWN, non-suspended publisher (caller enforced both). */
116
+ publisher: PublisherConfig;
117
+ /** Single timestamp for build402; the caller reuses it for settle/event/mint. */
118
+ now: number;
119
+ /** Price + payees resolver — local (own data) or hosted (`/quote`). */
120
+ quote: (publisher: PublisherConfig, slug: string, kind: TollKind) => Promise<Quote | null | undefined>;
121
+ /** Web-Bot-Auth options (e.g. `allowInsecureHttp` on a dev/plaintext origin). */
122
+ botAuthOpts?: BotAuthOptions;
123
+ }
124
+ export declare function decide(input: DecideInput): Promise<Decision>;
125
+ //# sourceMappingURL=decide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decide.d.ts","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
package/dist/decide.js ADDED
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Runtime-agnostic, PRE-SETTLEMENT toll decision.
3
+ *
4
+ * This is the single decision path the `createApp` proxy weld used to inline.
5
+ * Extracting it lets any runtime — the gate's Hono reverse proxy OR the
6
+ * `@naulon/sdk` in-app middleware — reach the SAME verdict from a web `Request`
7
+ * without dragging along the gate's proxy / observe / settle side effects.
8
+ *
9
+ * `decide()` performs NO side effects: no `observe`, no `proxyToOrigin`, no
10
+ * `verifyAndSettle`, no `record`/`emitSettlement`/`mintLicense`. It stops at "here
11
+ * is the verdict, and — for a machine — the 402 legs + header and the payment to
12
+ * settle." The CALLER settles, observes, and proxies. To keep the caller's audit
13
+ * plane byte-identical, every observed variant carries an `obs` facts payload
14
+ * (the classifier verdict + Web-Bot-Auth signals the `observe(...)` call needs).
15
+ *
16
+ * Preconditions the caller enforces BEFORE calling: the publisher is KNOWN
17
+ * (unknown-host already failed closed) and NOT suspended (a paused publisher
18
+ * proxies straight through, free). `decide()` assumes a known, live publisher.
19
+ */
20
+ import { classify, matchUaFragment } from "./agentDetect.js";
21
+ import { verifyBotAuth } from "./botAuth.js";
22
+ import { build402, PAYMENT_SIGNATURE_HEADER } from "./build402.js";
23
+ import { licensing } from "./license.js";
24
+ import { revocations } from "./revocation.js";
25
+ import { verifyPopProof } from "./pop.js";
26
+ import { getConfig, popBoundAddress, verifyLicense, } from "@naulon/shared";
27
+ // Global license POLICY (online-check flag) is a gate-operator setting, read once.
28
+ const cfg = getConfig();
29
+ // Re-exported for `@naulon/sdk/enforce` (the in-app middleware): the wire
30
+ // primitives a runtime needs to act on a `Decision` without pulling the whole
31
+ // gate (`app.ts` boots `createApp()` at import — the `./decide` subpath does not).
32
+ export { PAYMENT_SIGNATURE_HEADER, PAYMENT_REQUIRED_HEADER, PAYMENT_RESPONSE_HEADER, } from "./build402.js";
33
+ export { PAYMENT_LINK_HEADER } from "./discoverability.js";
34
+ /** The header that carries a Citation License Token, both ways. */
35
+ export const LICENSE_HEADER = "X-Naulon-License";
36
+ /** The header that carries a holder-of-key proof-of-possession on a re-read. */
37
+ export const PROOF_HEADER = "X-Naulon-Proof";
38
+ /**
39
+ * A presented license entitles a free re-read iff it verifies AND is scoped to
40
+ * this exact slug, this publisher (aud === the publisher's licenseIdentity), and
41
+ * covers the requested kind (a citation license entitles a read, never the
42
+ * reverse). Fails closed — any defect drops the caller to the normal 402 path.
43
+ * Revocation is consulted only when the online check is enabled (needs shared state).
44
+ */
45
+ export async function licenseEntitlesRead(jws, slug, requestedKind, req, identity) {
46
+ if (!licensing)
47
+ return false;
48
+ const r = verifyLicense(jws, {
49
+ now: Date.now(),
50
+ expectedIssuer: identity,
51
+ expectedAudience: identity,
52
+ jwks: licensing.jwks,
53
+ });
54
+ if (!r.ok)
55
+ return false;
56
+ const n = r.claims.naulon;
57
+ if (n.slug !== slug)
58
+ return false;
59
+ if (requestedKind === "citation" && n.kind !== "citation")
60
+ return false; // no read→citation upgrade
61
+ if (cfg.LICENSE_ONLINE_CHECK && (await revocations.isRevoked(r.claims.jti)))
62
+ return false;
63
+ // Holder-of-key: a cnf-bound license is NOT a bearer right — require a fresh
64
+ // wallet proof-of-possession. Fail closed (drop to 402) if it's missing or bad.
65
+ if (popBoundAddress(r.claims)) {
66
+ const proof = req.headers.get(PROOF_HEADER);
67
+ if (!proof)
68
+ return false;
69
+ if (!(await verifyPopProof(proof, { claims: r.claims, slug, identity, now: Date.now() })))
70
+ return false;
71
+ }
72
+ return true;
73
+ }
74
+ /** Pull the classifier's inputs out of the raw request. */
75
+ export function signalsFrom(req) {
76
+ const headers = Object.fromEntries(req.headers.entries());
77
+ return {
78
+ userAgent: headers["user-agent"] ?? "",
79
+ hasPaymentHeader: PAYMENT_SIGNATURE_HEADER in headers,
80
+ declaredAgentId: headers["x-naulon-agent"] ?? null,
81
+ accept: headers["accept"] ?? "",
82
+ headers,
83
+ };
84
+ }
85
+ /**
86
+ * The request facts the Web Bot Auth verifier serializes signed components from.
87
+ * `authority` is the resolved tenant Host — the same identity the gate routes by —
88
+ * so a signature over `@authority` binds to the host being tolled.
89
+ */
90
+ export function requestFactsFrom(req, host) {
91
+ const url = new URL(req.url);
92
+ return {
93
+ authority: host,
94
+ method: req.method,
95
+ path: url.pathname,
96
+ targetUri: `${url.protocol}//${host}${url.pathname}${url.search}`,
97
+ headers: Object.fromEntries(req.headers.entries()),
98
+ };
99
+ }
100
+ function escapeRe(s) {
101
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
102
+ }
103
+ // Compiled article-path matchers, memoized per prefix set — a gate sees a handful
104
+ // of distinct prefix configs, not one per request, so we compile each regex once
105
+ // and reuse it. Prefixes are escaped before interpolation: an injected resolver may
106
+ // feed untrusted publisher prefixes here, so a literal `new RegExp(prefix)` would be
107
+ // a regex injection / ReDoS hole.
108
+ const articleReCache = new Map();
109
+ function articleRe(prefixes) {
110
+ const key = prefixes.join("|");
111
+ let re = articleReCache.get(key);
112
+ if (!re) {
113
+ re = new RegExp(`^/(?:${prefixes.map(escapeRe).join("|")})/([^/?#]+)`);
114
+ articleReCache.set(key, re);
115
+ }
116
+ return re;
117
+ }
118
+ /** Article slug from a path like /essays/on-stillness, using the publisher's prefixes. */
119
+ export function slugFromPath(path, prefixes) {
120
+ // Never treat the gate's own control routes as articles, whatever the
121
+ // configured prefixes are.
122
+ if (path.startsWith("/.well-known/") || path.startsWith("/licenses/"))
123
+ return null;
124
+ // Drop empty prefixes — an empty alternative would make the regex match `//x`
125
+ // or any leading slash and gate routes the publisher never opted in.
126
+ const clean = prefixes.filter(Boolean);
127
+ if (clean.length === 0)
128
+ return null;
129
+ const m = path.match(articleRe(clean));
130
+ return m ? decodeURIComponent(m[1]) : null;
131
+ }
132
+ const STATIC_EXT_RE = /\.(css|js|mjs|map|png|jpe?g|gif|webp|avif|svg|ico|woff2?|ttf|otf|eot|mp4|webm|mp3|pdf|txt|xml|json)$/i;
133
+ const DISCOVERY_RE = /^\/(robots\.txt|sitemap[^/]*|rss[^/]*|atom[^/]*|feed[^/]*|favicon\.ico)$/i;
134
+ /**
135
+ * Site-mode slug: the full decoded pathname, or null for the surfaces that must
136
+ * stay free — gate control routes, discovery (robots/sitemaps/feeds/favicon),
137
+ * static assets by extension (deliberately including .txt/.xml/.json: machine-
138
+ * readable surfaces never toll — the conservative humans/discovery-free bias),
139
+ * and the publisher's own excludePrefixes.
140
+ */
141
+ export function slugFromSitePath(path, excludePrefixes) {
142
+ const pathname = path.split(/[?#]/, 1)[0];
143
+ if (pathname.startsWith("/.well-known/") || pathname.startsWith("/licenses/"))
144
+ return null;
145
+ if (DISCOVERY_RE.test(pathname) || STATIC_EXT_RE.test(pathname))
146
+ return null;
147
+ const clean = excludePrefixes.filter(Boolean);
148
+ if (clean.some((p) => pathname === `/${p}` || pathname.startsWith(`/${p}/`)))
149
+ return null;
150
+ return decodeURIComponent(pathname);
151
+ }
152
+ export async function decide(input) {
153
+ const { raw, host, path, publisher, now, quote } = input;
154
+ const slug = publisher.gateScope?.mode === "site"
155
+ ? slugFromSitePath(path, publisher.gateScope.excludePrefixes)
156
+ : slugFromPath(path, publisher.articlePrefixes);
157
+ // Non-article routes: pure passthrough (assets, home, RSS...).
158
+ if (!slug)
159
+ return { kind: "passthrough", verdict: "non-article" };
160
+ // Web Bot Auth: verify cryptographic identity once per gateable request.
161
+ // Unsigned requests short-circuit to "absent" inside the verifier — zero cost.
162
+ const botAuth = await verifyBotAuth(requestFactsFrom(raw, host), input.botAuthOpts ?? {});
163
+ const verifiedAgent = botAuth.status === "verified" ? botAuth.agent : null;
164
+ const sigInvalid = botAuth.status === "invalid" ? true : undefined;
165
+ // Publisher-refused crawlers: 403 BEFORE classification, so payment intent can
166
+ // never buy past a block, and before the allow merge, so block wins an overlap.
167
+ // The same fragments match the VERIFIED identity too — no UA-rotation dodge.
168
+ const uaRaw = raw.headers.get("user-agent") ?? "";
169
+ const blockedFrag = matchUaFragment(uaRaw, publisher.crawlerPolicy?.block) ??
170
+ (verifiedAgent ? matchUaFragment(verifiedAgent.agent, publisher.crawlerPolicy?.block) : undefined);
171
+ if (blockedFrag) {
172
+ return {
173
+ kind: "blocked",
174
+ frag: blockedFrag,
175
+ obs: {
176
+ slug,
177
+ classifiedAs: "agent",
178
+ classifyReason: `crawler blocked by publisher ("${blockedFrag}")`,
179
+ agentUa: uaRaw,
180
+ verified: verifiedAgent ? true : undefined,
181
+ verifiedAgent: verifiedAgent?.agent,
182
+ sigInvalid,
183
+ },
184
+ };
185
+ }
186
+ const verdict = classify({ ...signalsFrom(raw), verifiedAgent }, {
187
+ seoAllowlist: [...(publisher.seoAllowlist ?? []), ...(publisher.crawlerPolicy?.allow ?? [])],
188
+ chargeList: publisher.crawlerPolicy?.charge,
189
+ });
190
+ const obs = {
191
+ slug,
192
+ classifiedAs: verdict.kind,
193
+ classifyReason: verdict.reason,
194
+ agentUa: raw.headers.get("user-agent") ?? undefined,
195
+ verified: verifiedAgent ? true : undefined,
196
+ verifiedAgent: verifiedAgent?.agent,
197
+ sigInvalid,
198
+ };
199
+ // Humans read free, forever.
200
+ if (verdict.kind === "human")
201
+ return { kind: "free", verdict: `human (${verdict.reason})`, obs };
202
+ // Machine. What's it asking for?
203
+ const tollKind = raw.headers.get("x-naulon-kind") === "citation" ? "citation" : "read";
204
+ // Already paid? A valid, unexpired license scoped to this slug+kind re-reads free.
205
+ // Fails closed: an invalid/expired/mismatched license falls through to the 402.
206
+ const presentedLicense = raw.headers.get(LICENSE_HEADER);
207
+ if (presentedLicense &&
208
+ (await licenseEntitlesRead(presentedLicense, slug, tollKind, raw, publisher.licenseIdentity))) {
209
+ return { kind: "reread", tollKind, obs };
210
+ }
211
+ // Price it.
212
+ const q = await quote(publisher, slug, tollKind);
213
+ if (!q)
214
+ return { kind: "passthrough", verdict: "unknown-article" }; // unknown article — don't gate.
215
+ const { legs, header } = build402(q, new URL(raw.url).toString(), now);
216
+ const payment = raw.headers.get(PAYMENT_SIGNATURE_HEADER);
217
+ return payment
218
+ ? { kind: "payment-presented", payment, legs, header, quote: q, tollKind, obs }
219
+ : { kind: "payment-required", legs, header, quote: q, tollKind, obs };
220
+ }
221
+ //# sourceMappingURL=decide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}