@analytickit/sdk-node 0.1.1 → 0.1.3

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
@@ -12,7 +12,7 @@ Node client for AgentGraph. Two things live in this package:
12
12
  still produces events.
13
13
 
14
14
  Full install guide and the F0.3 access-log import mapping:
15
- [`docs/help/server-side-collection.md`](../../docs/help/server-side-collection.md).
15
+ [`docs/tech/reference/server-side-collection.md`](../../docs/tech/reference/server-side-collection.md).
16
16
 
17
17
  ## Install
18
18
 
@@ -48,6 +48,13 @@ await client.track('report_generated', {
48
48
  });
49
49
  ```
50
50
 
51
+ `declaredIntent` (on `track`, `trackBatch`'s per-event options, and
52
+ `trackRequest`) sends an advisory, caller-declared intent string as the
53
+ top-level `declared_intent` field — e.g. `declaredIntent: 'comparing
54
+ prices'`. It's free text kept verbatim; ingest keeps it only if it's
55
+ 1-64 characters after trimming and drops it silently otherwise (never a
56
+ 400). No classifier reads it today — it's for display/debugging.
57
+
51
58
  ### `trackBatch(events)`
52
59
 
53
60
  ```ts
@@ -76,6 +83,20 @@ transport headers for Web2 enrichment — see the install guide, §3.
76
83
 
77
84
  ## Middleware adapters
78
85
 
86
+ **Use a server key.** Give the middleware's client a *server key* (dashboard →
87
+ client → "Server key — keep secret", or `POST /v1/sdk-keys` with
88
+ `kind: "server"`), not the publishable snippet key. Ingest only trusts the
89
+ forwarded visitor IP (`request_context.ip`) from a server key, so with the
90
+ snippet key every crawler stays `unverified`. Never ship a server key to a
91
+ browser. The IP must also be one the visitor cannot forge: the middleware
92
+ sends `ipTrusted: true` only for the socket peer, or — when the socket peer is
93
+ inside the `trustedProxies` CIDRs you configure (your load balancer) — the
94
+ right-most `X-Forwarded-For` hop outside that list. Framework `req.ip` is never
95
+ consulted (Express `trust proxy = true` resolves it to the client-written
96
+ leftmost hop). A raw leftmost `X-Forwarded-For` (the `trustProxy` option's
97
+ fallback) is sent with `ipTrusted: false` and never verifies; neither does
98
+ `analyticKitFetch`, which has no socket.
99
+
79
100
  All three are re-exported from the package root (as well as from
80
101
  `@analytickit/sdk-node/middleware`):
81
102
 
@@ -100,9 +121,23 @@ import {
100
121
  | `DEFAULT_IGNORE` | The default `ignore` regex list (static assets, health checks, `_next`, favicon) |
101
122
 
102
123
  All three take `MiddlewareOptions` — at minimum `{ client }`. See the
103
- install guide for `ignore`, `sampleRate`, `trustProxy`, and `onError`, and
124
+ install guide for `ignore`, `sampleRate`, `trustProxy`, `trustedProxies`, and `onError`, and
104
125
  for why collection adds no request latency and cannot fail the request.
105
126
 
106
127
  Full docs, the privacy/`capture_ip` behavior, volume-control gotchas, and
107
128
  the F0.3 CSV access-log import mapping:
108
- [`docs/help/server-side-collection.md`](../../docs/help/server-side-collection.md).
129
+ [`docs/tech/reference/server-side-collection.md`](../../docs/tech/reference/server-side-collection.md).
130
+
131
+ ## x402 revenue (2026-10-17)
132
+
133
+ For a request the middleware detects as x402 (a `PAYMENT-SIGNATURE` or
134
+ `X-Payment` header present), it also tries to read how much was paid, once
135
+ your handler's response finishes and sets the settlement header
136
+ (`PAYMENT-RESPONSE`/`X-PAYMENT-RESPONSE`). When settlement succeeded, the
137
+ event's `request_context.payment` carries `amount` (atomic units),
138
+ `asset`, `network`, `tx_hash`, and `payer_hash` — a SHA-256 digest of the
139
+ payer address; the raw address is never read into anything forwarded or
140
+ logged. A failed settlement, or a header that doesn't parse, means no
141
+ `payment` block at all — never a thrown error. See
142
+ [`docs/tech/reference/server-side-collection.md`](../../docs/tech/reference/server-side-collection.md)
143
+ §8.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGnG,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE1E,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,aAAa;IAW3B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BjG;;;;;;;OAOG;IACG,YAAY,CAChB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAyCV,UAAU,CACd,MAAM,EAAE,YAAY,EAAE,GACrB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IA+B5C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAIjB,cAAc;IA0C5B,OAAO,CAAC,MAAM;CAGf;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGnG,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE1E,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,aAAa;IAW3B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjG;;;;;;;OAOG;IACG,YAAY,CAChB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC;IA4CV,UAAU,CACd,MAAM,EAAE,YAAY,EAAE,GACrB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAgC5C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAIjB,cAAc;IA0C5B,OAAO,CAAC,MAAM;CAGf;AAED,eAAe,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -44,6 +44,7 @@ class AnalyticKit {
44
44
  workflow_id: options?.workflowId,
45
45
  wallet_address: options?.walletAddress,
46
46
  chain: options?.chain,
47
+ declared_intent: options?.declaredIntent,
47
48
  };
48
49
  await this._sendWithRetry(`${this.endpoint}/v1/events`, JSON.stringify(payload), this.maxRetries);
49
50
  }
@@ -60,12 +61,14 @@ class AnalyticKit {
60
61
  const map = [
61
62
  ['userAgent', 'user_agent'],
62
63
  ['ip', 'ip'],
64
+ ['ipTrusted', 'ip_trusted'],
63
65
  ['path', 'path'],
64
66
  ['referrer', 'referrer'],
65
67
  ['host', 'host'],
66
68
  ['method', 'method'],
67
69
  ['status', 'status'],
68
70
  ['protocol', 'protocol'],
71
+ ['payment', 'payment'],
69
72
  ];
70
73
  for (const [from, to] of map) {
71
74
  const value = context[from];
@@ -86,6 +89,7 @@ class AnalyticKit {
86
89
  page_path: context.path ?? undefined,
87
90
  page_referrer: context.referrer ?? undefined,
88
91
  request_context: requestContext,
92
+ declared_intent: options?.declaredIntent,
89
93
  };
90
94
  await this._sendWithRetry(`${this.endpoint}/v1/events`, JSON.stringify(payload), this.maxRetries);
91
95
  }
@@ -101,6 +105,7 @@ class AnalyticKit {
101
105
  workflow_id: e.workflowId,
102
106
  wallet_address: e.walletAddress,
103
107
  chain: e.chain,
108
+ declared_intent: e.declaredIntent,
104
109
  }));
105
110
  const res = await this._sendWithRetry(`${this.endpoint}/v1/events/batch`, JSON.stringify(payloads), this.maxRetries);
106
111
  if (res) {
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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"}
@@ -1,5 +1,6 @@
1
+ import { BlockList } from 'node:net';
1
2
  import type { AnalyticKit } from './index.js';
2
- import type { RequestContext, TrackRequestOptions } from './types.js';
3
+ import type { PaymentContext, RequestContext, TrackRequestOptions } from './types.js';
3
4
  /**
4
5
  * Structural stand-ins for `http.IncomingMessage` and the Express/Fastify
5
6
  * request objects that wrap it. Typed here rather than imported so this
@@ -25,8 +26,21 @@ export interface MiddlewareOptions {
25
26
  ignore?: RegExp[];
26
27
  /** 0..1. Default 1 (collect everything). */
27
28
  sampleRate?: number;
28
- /** Read the client IP from X-Forwarded-For. Default true. */
29
+ /**
30
+ * Read the client IP from the leftmost X-Forwarded-For hop. Default true.
31
+ * Ignored when `trustedProxies` is set. An IP read this way is sent with
32
+ * `ipTrusted: false` — the end user can write that header — so it never
33
+ * verifies an agent. Behind a load balancer, set `trustedProxies` instead.
34
+ */
29
35
  trustProxy?: boolean;
36
+ /**
37
+ * CIDRs / IPs of YOUR proxies (load balancer, ingress). When the socket
38
+ * peer is inside one, the client IP is the right-most X-Forwarded-For hop
39
+ * NOT in this list, sent with `ipTrusted: true`. When the peer is not, the
40
+ * socket IP is used (also trusted) and X-Forwarded-For is ignored. Invalid
41
+ * entries throw when the middleware is created.
42
+ */
43
+ trustedProxies?: string[];
30
44
  /** Called instead of throwing when collection faults. Default: swallow. */
31
45
  onError?: (err: unknown) => void;
32
46
  /** Extra options forwarded to trackRequest (actorType, properties, ...). */
@@ -48,10 +62,44 @@ export declare const DEFAULT_IGNORE: RegExp[];
48
62
  * payment event.
49
63
  */
50
64
  export declare function detectAgentProtocol(get: (name: string) => string | null | undefined): 'mcp' | 'x402' | null;
65
+ /**
66
+ * Capture an x402 payment, only when settlement succeeded. `getRequestHeader`
67
+ * reads the ORIGINAL request's payment header (amount/asset); `getResponseHeader`
68
+ * reads the settlement header written AFTER the handler produced its response.
69
+ *
70
+ * Amount/asset come from the request's accepted-payment header (v2
71
+ * `PAYMENT-SIGNATURE`'s `accepted.amount`/`accepted.asset`; v1 `X-PAYMENT`
72
+ * has no `asset` field, only `payload.authorization.value` as the amount).
73
+ * network/tx_hash/payer come from the settlement header (v2
74
+ * `PAYMENT-RESPONSE`, v1 `X-PAYMENT-RESPONSE`), both shaped
75
+ * `{ success, transaction, network, payer }`.
76
+ *
77
+ * The raw payer address is hashed (SHA-256, lowercased first so case doesn't
78
+ * change the digest) and never returned itself — see `PaymentContext`.
79
+ */
80
+ export declare function extractPayment(getRequestHeader: (name: string) => string | null | undefined, getResponseHeader: (name: string) => string | null | undefined): PaymentContext | null;
51
81
  /** True when this path should produce an event. */
52
82
  export declare function shouldCollect(path: string, options: Pick<MiddlewareOptions, 'ignore' | 'sampleRate'>): boolean;
83
+ /**
84
+ * Build (once per options array) the BlockList for `trustedProxies`.
85
+ * Throws on an invalid entry — the adapters call it at creation time so a
86
+ * typo fails at startup, not silently on every request.
87
+ */
88
+ export declare function trustedProxyList(cidrs: string[]): BlockList;
89
+ /**
90
+ * The client IP and whether the END USER could have chosen it. Only two
91
+ * sources are trusted: the socket peer itself, and — when the peer is one of
92
+ * the integrator's declared `trustedProxies` — the right-most
93
+ * X-Forwarded-For hop outside that list (hops to its right were appended by
94
+ * your own proxies). Framework `req.ip` is deliberately NOT consulted:
95
+ * Express `trust proxy = true` resolves it to the client-written leftmost hop.
96
+ */
97
+ export declare function resolveClientIp(socketIp: string | null, xff: string | undefined, options: Pick<MiddlewareOptions, 'trustProxy' | 'trustedProxies'>): {
98
+ ip: string | null;
99
+ ipTrusted: boolean;
100
+ };
53
101
  /** Pull the END USER's signals off a node-style request object. */
54
- export declare function extractContext(req: NodeLikeRequest, options?: Pick<MiddlewareOptions, 'trustProxy'>): RequestContext;
102
+ export declare function extractContext(req: NodeLikeRequest, options?: Pick<MiddlewareOptions, 'trustProxy' | 'trustedProxies'>): RequestContext;
55
103
  /**
56
104
  * Express / Connect middleware.
57
105
  *
@@ -74,6 +122,12 @@ export declare function analyticKitFastify(options: MiddlewareOptions): (req: No
74
122
  * collect(request);
75
123
  * return NextResponse.next();
76
124
  * }
125
+ *
126
+ * No x402 payment capture here: this adapter only ever sees the `Request`,
127
+ * never the eventual `Response` (the caller builds and returns that itself,
128
+ * separately) — there is no settlement header to read. x402 detection still
129
+ * sets `protocol: 'x402'` as before; only the `payment` block is unavailable
130
+ * on this adapter.
77
131
  */
78
132
  export declare function analyticKitFetch(options: MiddlewareOptions): (request: Request) => void;
79
133
  //# sourceMappingURL=middleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtE;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACvD,MAAM,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;CAChD;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,EAalC,CAAC;AAsBF;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/C,KAAK,GAAG,MAAM,GAAG,IAAI,CAIvB;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,YAAY,CAAC,GACxD,OAAO,CAYT;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAC5B,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAM,GAClD,cAAc,CAuBhB;AA6CD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,GACzB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAchE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,GACzB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAWlE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,iBAAiB,GACzB,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CA4B5B"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_IGNORE = void 0;
4
4
  exports.detectAgentProtocol = detectAgentProtocol;
5
+ exports.extractPayment = extractPayment;
5
6
  exports.shouldCollect = shouldCollect;
7
+ exports.trustedProxyList = trustedProxyList;
8
+ exports.resolveClientIp = resolveClientIp;
6
9
  exports.extractContext = extractContext;
7
10
  exports.analyticKitExpress = analyticKitExpress;
8
11
  exports.analyticKitFastify = analyticKitFastify;
9
12
  exports.analyticKitFetch = analyticKitFetch;
13
+ const node_crypto_1 = require("node:crypto");
14
+ const node_net_1 = require("node:net");
10
15
  /**
11
16
  * Requests a page-analytics product should not count. Static assets dominate
12
17
  * request volume on any real site and would swamp both the customer's event
@@ -59,6 +64,144 @@ function detectAgentProtocol(get) {
59
64
  return 'mcp';
60
65
  return null;
61
66
  }
67
+ /**
68
+ * Decode a header value as base64 JSON (x402's wire format for both the
69
+ * payment-request headers and the settlement-response headers). Any
70
+ * failure — not base64, not JSON, not an object — returns null; this is a
71
+ * trust boundary (a customer's upstream or a hostile client controls these
72
+ * headers) and must never throw into the caller.
73
+ */
74
+ function decodeX402Header(value) {
75
+ if (!value)
76
+ return null;
77
+ try {
78
+ const decoded = Buffer.from(value, 'base64').toString('utf8');
79
+ const parsed = JSON.parse(decoded);
80
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : null;
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ function asRecord(value) {
87
+ return value && typeof value === 'object' && !Array.isArray(value)
88
+ ? value
89
+ : null;
90
+ }
91
+ function asString(value) {
92
+ if (typeof value === 'string' && value.length > 0)
93
+ return value;
94
+ if (typeof value === 'number' && Number.isFinite(value))
95
+ return String(value);
96
+ return null;
97
+ }
98
+ /**
99
+ * Capture an x402 payment, only when settlement succeeded. `getRequestHeader`
100
+ * reads the ORIGINAL request's payment header (amount/asset); `getResponseHeader`
101
+ * reads the settlement header written AFTER the handler produced its response.
102
+ *
103
+ * Amount/asset come from the request's accepted-payment header (v2
104
+ * `PAYMENT-SIGNATURE`'s `accepted.amount`/`accepted.asset`; v1 `X-PAYMENT`
105
+ * has no `asset` field, only `payload.authorization.value` as the amount).
106
+ * network/tx_hash/payer come from the settlement header (v2
107
+ * `PAYMENT-RESPONSE`, v1 `X-PAYMENT-RESPONSE`), both shaped
108
+ * `{ success, transaction, network, payer }`.
109
+ *
110
+ * The raw payer address is hashed (SHA-256, lowercased first so case doesn't
111
+ * change the digest) and never returned itself — see `PaymentContext`.
112
+ */
113
+ function extractPayment(getRequestHeader, getResponseHeader) {
114
+ const settlement = decodeX402Header(getResponseHeader('payment-response') ?? getResponseHeader('x-payment-response'));
115
+ if (!settlement || settlement['success'] !== true)
116
+ return null;
117
+ let amount = null;
118
+ let asset = null;
119
+ const v2 = decodeX402Header(getRequestHeader('payment-signature'));
120
+ if (v2) {
121
+ const accepted = asRecord(v2['accepted']);
122
+ amount = asString(accepted?.['amount']);
123
+ asset = asString(accepted?.['asset']);
124
+ }
125
+ else {
126
+ const v1 = decodeX402Header(getRequestHeader('x-payment'));
127
+ const authorization = asRecord(asRecord(v1?.['payload'])?.['authorization']);
128
+ amount = asString(authorization?.['value']);
129
+ // v1's payment payload carries no asset field at all.
130
+ }
131
+ if (!amount)
132
+ return null;
133
+ const payer = asString(settlement['payer']);
134
+ return {
135
+ amount,
136
+ asset,
137
+ network: asString(settlement['network']),
138
+ tx_hash: asString(settlement['transaction']),
139
+ payer_hash: payer ? (0, node_crypto_1.createHash)('sha256').update(payer.toLowerCase()).digest('hex') : null,
140
+ };
141
+ }
142
+ /**
143
+ * Structural stand-in for a Node response object (Express's `res`, or
144
+ * Fastify's `reply.raw`) — just enough to hook the `finish` event and read a
145
+ * header the host app set. Returns null when `res` doesn't look like either
146
+ * shape, so x402 payment capture degrades to "no payment data", never a throw.
147
+ */
148
+ function responseHooks(res) {
149
+ const candidate = res;
150
+ const target = candidate && typeof candidate === 'object' && candidate.raw && typeof candidate.raw === 'object'
151
+ ? candidate.raw
152
+ : candidate;
153
+ if (target &&
154
+ typeof target === 'object' &&
155
+ typeof target['on'] === 'function' &&
156
+ typeof target['getHeader'] === 'function') {
157
+ return {
158
+ on: target['on'].bind(target),
159
+ getHeader: target['getHeader'].bind(target),
160
+ };
161
+ }
162
+ return null;
163
+ }
164
+ function headerToString(value) {
165
+ if (value == null)
166
+ return null;
167
+ if (Array.isArray(value))
168
+ return typeof value[0] === 'string' ? value[0] : null;
169
+ return typeof value === 'string' ? value : String(value);
170
+ }
171
+ /**
172
+ * x402 requests need the RESPONSE's settlement header, which doesn't exist
173
+ * until the host app's handler has run — unlike `dispatch`, which fires
174
+ * immediately after `next()`/`done()`. Hooks the response's `finish` event
175
+ * and dispatches from there, carrying `extractContext`'s signals plus
176
+ * whatever payment (if any) `extractPayment` found.
177
+ *
178
+ * Falls back to the ordinary immediate dispatch (no payment data) when `res`
179
+ * doesn't expose the hooks this needs — e.g. a test double, or a framework
180
+ * this package doesn't structurally recognize — rather than dropping the
181
+ * event entirely.
182
+ */
183
+ function dispatchX402(req, res, options) {
184
+ const hooks = responseHooks(res);
185
+ if (!hooks) {
186
+ dispatch(() => extractContext(req, options), options);
187
+ return;
188
+ }
189
+ try {
190
+ hooks.on('finish', () => {
191
+ try {
192
+ const context = extractContext(req, options);
193
+ const payment = extractPayment((name) => headerValue(req.headers ?? {}, name), (name) => headerToString(hooks.getHeader(name)));
194
+ dispatch(() => ({ ...context, payment }), options);
195
+ }
196
+ catch (err) {
197
+ reportError(options, err);
198
+ }
199
+ });
200
+ }
201
+ catch (err) {
202
+ reportError(options, err);
203
+ }
204
+ }
62
205
  /** True when this path should produce an event. */
63
206
  function shouldCollect(path, options) {
64
207
  const ignore = options.ignore ?? exports.DEFAULT_IGNORE;
@@ -75,21 +218,80 @@ function shouldCollect(path, options) {
75
218
  return false;
76
219
  return Math.random() < rate;
77
220
  }
221
+ const v4Mapped = /^::ffff:(?=\d+\.\d+\.\d+\.\d+$)/i;
222
+ const proxyLists = new WeakMap();
223
+ /**
224
+ * Build (once per options array) the BlockList for `trustedProxies`.
225
+ * Throws on an invalid entry — the adapters call it at creation time so a
226
+ * typo fails at startup, not silently on every request.
227
+ */
228
+ function trustedProxyList(cidrs) {
229
+ let list = proxyLists.get(cidrs);
230
+ if (list)
231
+ return list;
232
+ list = new node_net_1.BlockList();
233
+ for (const entry of cidrs) {
234
+ // Strict: "<ip>" or "<ip>/<1-3 digits>", nothing else. A lax parse
235
+ // (Number("") === 0) would fail OPEN into a trust-everything subnet.
236
+ const m = /^([^/]+)(?:\/(\d{1,3}))?$/.exec(String(entry).trim());
237
+ const addr = m?.[1] ?? '';
238
+ const family = (0, node_net_1.isIP)(addr);
239
+ const max = family === 4 ? 32 : 128;
240
+ const prefix = m?.[2] === undefined ? undefined : Number(m[2]);
241
+ if (!m || family === 0 || (prefix !== undefined && (prefix < 1 || prefix > max))) {
242
+ throw new Error(`trustedProxies: invalid entry ${JSON.stringify(entry)} — expected an IP or CIDR with a /1-/${max} prefix (/0 would trust everyone)`);
243
+ }
244
+ const type = family === 4 ? 'ipv4' : 'ipv6';
245
+ if (prefix === undefined)
246
+ list.addAddress(addr, type);
247
+ else
248
+ list.addSubnet(addr, prefix, type);
249
+ }
250
+ proxyLists.set(cidrs, list);
251
+ return list;
252
+ }
253
+ function inList(list, raw) {
254
+ const addr = raw.replace(v4Mapped, '');
255
+ const family = (0, node_net_1.isIP)(addr);
256
+ return family !== 0 && list.check(addr, family === 4 ? 'ipv4' : 'ipv6');
257
+ }
258
+ /**
259
+ * The client IP and whether the END USER could have chosen it. Only two
260
+ * sources are trusted: the socket peer itself, and — when the peer is one of
261
+ * the integrator's declared `trustedProxies` — the right-most
262
+ * X-Forwarded-For hop outside that list (hops to its right were appended by
263
+ * your own proxies). Framework `req.ip` is deliberately NOT consulted:
264
+ * Express `trust proxy = true` resolves it to the client-written leftmost hop.
265
+ */
266
+ function resolveClientIp(socketIp, xff, options) {
267
+ const hops = (xff ?? '').split(',').map((h) => h.trim()).filter(Boolean);
268
+ if (options.trustedProxies) {
269
+ const list = trustedProxyList(options.trustedProxies);
270
+ if (socketIp === null || !inList(list, socketIp)) {
271
+ return { ip: socketIp, ipTrusted: socketIp !== null };
272
+ }
273
+ for (let i = hops.length - 1; i >= 0; i--) {
274
+ if (!inList(list, hops[i]))
275
+ return { ip: hops[i], ipTrusted: true };
276
+ }
277
+ // Every hop is one of our proxies — there is no client hop to trust.
278
+ return { ip: hops[0] ?? socketIp, ipTrusted: false };
279
+ }
280
+ if ((options.trustProxy ?? true) && hops[0]) {
281
+ // "client, proxy1, proxy2": the first hop is the client, but the client
282
+ // wrote it — usable for geo, never for verification.
283
+ return { ip: hops[0], ipTrusted: false };
284
+ }
285
+ return { ip: socketIp, ipTrusted: socketIp !== null };
286
+ }
78
287
  /** Pull the END USER's signals off a node-style request object. */
79
288
  function extractContext(req, options = {}) {
80
289
  const headers = req.headers ?? {};
81
- const trustProxy = options.trustProxy ?? true;
82
- let ip = req.socket?.remoteAddress ?? null;
83
- if (trustProxy) {
84
- const xff = headerValue(headers, 'x-forwarded-for');
85
- // "client, proxy1, proxy2" — the first hop is the client.
86
- const first = xff?.split(',')[0]?.trim();
87
- if (first)
88
- ip = first;
89
- }
290
+ const { ip, ipTrusted } = resolveClientIp(req.socket?.remoteAddress ?? null, headerValue(headers, 'x-forwarded-for'), options);
90
291
  return {
91
292
  userAgent: headerValue(headers, 'user-agent') ?? null,
92
293
  ip,
294
+ ipTrusted,
93
295
  path: req.originalUrl ?? req.url ?? null,
94
296
  // Note the historical misspelling: the HTTP header is `Referer`.
95
297
  referrer: headerValue(headers, 'referer') ?? headerValue(headers, 'referrer') ?? null,
@@ -148,7 +350,9 @@ function dispatch(buildContext, options) {
148
350
  * latency and cannot fail the request.
149
351
  */
150
352
  function analyticKitExpress(options) {
151
- return (req, _res, next) => {
353
+ if (options.trustedProxies)
354
+ trustedProxyList(options.trustedProxies); // fail fast on a typo
355
+ return (req, res, next) => {
152
356
  next();
153
357
  // Everything after next() is wrapped: the contract this middleware sells
154
358
  // is that installing it cannot break the host app, and that has to hold
@@ -157,6 +361,12 @@ function analyticKitExpress(options) {
157
361
  const path = req.originalUrl ?? req.url ?? '/';
158
362
  if (!shouldCollect(path, options))
159
363
  return;
364
+ // x402 needs the settlement header, which only exists once the host
365
+ // app's handler has written a response — see dispatchX402.
366
+ if (detectAgentProtocol((name) => headerValue(req.headers ?? {}, name)) === 'x402') {
367
+ dispatchX402(req, res, options);
368
+ return;
369
+ }
160
370
  dispatch(() => extractContext(req, options), options);
161
371
  }
162
372
  catch (err) {
@@ -170,12 +380,18 @@ function analyticKitExpress(options) {
170
380
  * app.addHook('onRequest', analyticKitFastify({ client }));
171
381
  */
172
382
  function analyticKitFastify(options) {
173
- return (req, _reply, done) => {
383
+ if (options.trustedProxies)
384
+ trustedProxyList(options.trustedProxies); // fail fast on a typo
385
+ return (req, reply, done) => {
174
386
  done();
175
387
  try {
176
388
  const path = req.originalUrl ?? req.url ?? '/';
177
389
  if (!shouldCollect(path, options))
178
390
  return;
391
+ if (detectAgentProtocol((name) => headerValue(req.headers ?? {}, name)) === 'x402') {
392
+ dispatchX402(req, reply, options);
393
+ return;
394
+ }
179
395
  dispatch(() => extractContext(req, options), options);
180
396
  }
181
397
  catch (err) {
@@ -190,6 +406,12 @@ function analyticKitFastify(options) {
190
406
  * collect(request);
191
407
  * return NextResponse.next();
192
408
  * }
409
+ *
410
+ * No x402 payment capture here: this adapter only ever sees the `Request`,
411
+ * never the eventual `Response` (the caller builds and returns that itself,
412
+ * separately) — there is no settlement header to read. x402 detection still
413
+ * sets `protocol: 'x402'` as before; only the `payment` block is unavailable
414
+ * on this adapter.
193
415
  */
194
416
  function analyticKitFetch(options) {
195
417
  return (request) => {
@@ -206,6 +428,9 @@ function analyticKitFetch(options) {
206
428
  return {
207
429
  userAgent: request.headers.get('user-agent'),
208
430
  ip: trustProxy ? (xff?.split(',')[0]?.trim() ?? null) : null,
431
+ // A Fetch Request carries no socket peer, only headers the client
432
+ // could have written — never trusted for verification.
433
+ ipTrusted: false,
209
434
  path,
210
435
  referrer: request.headers.get('referer') ?? request.headers.get('referrer'),
211
436
  host: request.headers.get('host') ?? url.host,
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":";;;AAoFA,kDAMC;AAGD,sCAeC;AAGD,wCA0BC;AAqDD,gDAgBC;AAOD,gDAaC;AAUD,4CA8BC;AAvOD;;;;GAIG;AACU,QAAA,cAAc,GAAa;IACtC,yEAAyE;IACzE,4EAA4E;IAC5E,wCAAwC;IACxC,wFAAwF;IACxF,4EAA4E;IAC5E,0EAA0E;IAC1E,uEAAuE;IACvE,2BAA2B;IAC3B,qBAAqB;IACrB,YAAY;IACZ,aAAa;IACb,kBAAkB;CACnB,CAAC;AAEF,SAAS,WAAW,CAClB,OAAmC,EACnC,IAAY;IAEZ,uEAAuE;IACvE,2EAA2E;IAC3E,0EAA0E;IAC1E,mEAAmE;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,mBAAmB,CACjC,GAAgD;IAEhD,IAAI,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC;IAChE,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,sBAAsB,CAAC;QAAE,OAAO,KAAK,CAAC;IACvE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mDAAmD;AACnD,SAAgB,aAAa,CAC3B,IAAY,EACZ,OAAyD;IAEzD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,sBAAc,CAAC;IAChD,2EAA2E;IAC3E,wEAAwE;IACxE,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAEzD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IACrC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5B,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED,mEAAmE;AACnE,SAAgB,cAAc,CAC5B,GAAoB,EACpB,UAAiD,EAAE;IAEnD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAE9C,IAAI,EAAE,GAAkB,GAAG,CAAC,MAAM,EAAE,aAAa,IAAI,IAAI,CAAC;IAC1D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACpD,0DAA0D;QAC1D,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACzC,IAAI,KAAK;YAAE,EAAE,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,OAAO;QACL,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,IAAI;QACrD,EAAE;QACF,IAAI,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI;QACxC,iEAAiE;QACjE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,IAAI;QACrF,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI;QAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI;QAC1B,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACpE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,WAAW,CAAC,OAA0B,EAAE,GAAY;IAC3D,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,QAAQ,CACf,YAAkC,EAClC,OAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE;YACzD,GAAG,OAAO,CAAC,KAAK;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,WAAW;SAC5C,CAAC,CAAC;QACH,sEAAsE;QACtE,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,OAA0B;IAE1B,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACzB,IAAI,EAAE,CAAC;QACP,yEAAyE;QACzE,wEAAwE;QACxE,uEAAuE;QACvE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;YAC/C,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;gBAAE,OAAO;YAC1C,QAAQ,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAChC,OAA0B;IAE1B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC3B,IAAI,EAAE,CAAC;QACP,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;YAC/C,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;gBAAE,OAAO;YAC1C,QAAQ,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAC9B,OAA0B;IAE1B,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,wEAAwE;QACxE,uEAAuE;QACvE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;gBAAE,OAAO;YAE1C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;YAE9C,QAAQ,CAAC,GAAG,EAAE;gBACZ,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBACnD,OAAO;oBACL,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;oBAC5C,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;oBAC5D,IAAI;oBACJ,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;oBAC3E,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI;oBAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,MAAM,EAAE,IAAI;oBACZ,QAAQ,EAAE,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBACnE,CAAC;YACJ,CAAC,EAAE,OAAO,CAAC,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -26,6 +26,31 @@ export interface TrackOptions {
26
26
  workflowId?: string;
27
27
  walletAddress?: string;
28
28
  chain?: string;
29
+ /**
30
+ * Advisory, caller-declared intent for this event — e.g. "comparing
31
+ * prices", "researching docs". Sent verbatim as the top-level
32
+ * `declared_intent` field; ingest keeps it only if 1-64 chars after
33
+ * trim and drops it silently otherwise (never a 400) — no classifier
34
+ * reads it, it's for display/debugging. See event-schema.ts.
35
+ */
36
+ declaredIntent?: string;
37
+ }
38
+ /**
39
+ * x402 settlement captured off the response AFTER it was produced. Field
40
+ * names stay snake_case (unlike the rest of this file) because this object
41
+ * rides straight onto the wire as `request_context.payment` with no mapping
42
+ * step — see the `['payment', 'payment']` entry in index.ts's `trackRequest`.
43
+ *
44
+ * Only ever built when the settlement response said `success === true`.
45
+ * `payer_hash` is a SHA-256 hex digest of the payer address — the raw
46
+ * address is never read into this object, let alone sent.
47
+ */
48
+ export interface PaymentContext {
49
+ amount: string;
50
+ asset: string | null;
51
+ network: string | null;
52
+ tx_hash: string | null;
53
+ payer_hash: string | null;
29
54
  }
30
55
  /**
31
56
  * The original request's signals, as observed by a server-side collector.
@@ -35,6 +60,13 @@ export interface TrackOptions {
35
60
  export interface RequestContext {
36
61
  userAgent?: string | null;
37
62
  ip?: string | null;
63
+ /**
64
+ * True only when `ip` is the socket peer or came through a configured
65
+ * trusted proxy (or Cloudflare's CF-Connecting-IP) — never a raw
66
+ * X-Forwarded-For. Ingest verifies agent identities against the IP only
67
+ * when this is true AND the client uses a server key.
68
+ */
69
+ ipTrusted?: boolean | null;
38
70
  path?: string | null;
39
71
  referrer?: string | null;
40
72
  host?: string | null;
@@ -46,6 +78,8 @@ export interface RequestContext {
46
78
  * payment payloads) are never captured — only this derived label.
47
79
  */
48
80
  protocol?: string | null;
81
+ /** x402 settlement, captured only for x402 requests. See PaymentContext. */
82
+ payment?: PaymentContext | null;
49
83
  }
50
84
  export interface TrackRequestOptions {
51
85
  /** Defaults to 'page_view' so server-collected traffic lands in the same
@@ -56,5 +90,7 @@ export interface TrackRequestOptions {
56
90
  idempotencyKey?: string;
57
91
  visitorId?: string;
58
92
  sessionId?: string;
93
+ /** See `TrackOptions.declaredIntent`. */
94
+ declaredIntent?: string;
59
95
  }
60
96
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC;mDAC+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC;mDAC+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analytickit/sdk-node",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Server-side event tracking + request middleware for the AgentGraph / AnalyticKit API. Captures AI crawlers and agents (GPTBot, ClaudeBot, MCP, x402, ...) that never run browser JS.",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",