@frontmcp/sdk 1.7.2 → 1.8.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 (46) hide show
  1. package/agent/agent.scope.d.ts +12 -0
  2. package/agent/agent.scope.d.ts.map +1 -1
  3. package/auth/auth.registry.d.ts.map +1 -1
  4. package/auth/flows/oauth.authorize.flow.d.ts.map +1 -1
  5. package/auth/flows/session.verify.flow.d.ts +19 -1
  6. package/auth/flows/session.verify.flow.d.ts.map +1 -1
  7. package/auth/instances/instance.local-primary-auth.d.ts +2 -2
  8. package/auth/instances/instance.local-primary-auth.d.ts.map +1 -1
  9. package/auth/session/utils/session-id.utils.d.ts +11 -4
  10. package/auth/session/utils/session-id.utils.d.ts.map +1 -1
  11. package/common/metadata/app.metadata.d.ts +24 -0
  12. package/common/metadata/app.metadata.d.ts.map +1 -1
  13. package/common/metadata/front-mcp.metadata.d.ts +105 -0
  14. package/common/metadata/front-mcp.metadata.d.ts.map +1 -1
  15. package/common/tokens/server.tokens.d.ts +1 -0
  16. package/common/tokens/server.tokens.d.ts.map +1 -1
  17. package/common/types/options/auth/index.d.ts +4 -2
  18. package/common/types/options/auth/index.d.ts.map +1 -1
  19. package/common/utils/path.utils.d.ts +29 -0
  20. package/common/utils/path.utils.d.ts.map +1 -1
  21. package/context/frontmcp-context-storage.d.ts +3 -1
  22. package/context/frontmcp-context-storage.d.ts.map +1 -1
  23. package/context/metadata.utils.d.ts +29 -6
  24. package/context/metadata.utils.d.ts.map +1 -1
  25. package/errors/auth-internal.errors.d.ts +1 -1
  26. package/errors/auth-internal.errors.d.ts.map +1 -1
  27. package/errors/index.d.ts +1 -1
  28. package/errors/index.d.ts.map +1 -1
  29. package/esm/index.mjs +468 -170
  30. package/flows/flow.instance.d.ts.map +1 -1
  31. package/front-mcp/front-mcp.d.ts.map +1 -1
  32. package/front-mcp/front-mcp.providers.d.ts +52 -0
  33. package/front-mcp/front-mcp.providers.d.ts.map +1 -1
  34. package/index.js +882 -581
  35. package/job/execution/job-execution.manager.d.ts.map +1 -1
  36. package/package.json +10 -10
  37. package/scope/flows/http.request.flow.d.ts.map +1 -1
  38. package/scope/scope.instance.d.ts.map +1 -1
  39. package/server/adapters/express.host.adapter.d.ts.map +1 -1
  40. package/tool/ui/ui-shared.d.ts.map +1 -1
  41. package/transport/web-fetch-handler.d.ts +22 -1
  42. package/transport/web-fetch-handler.d.ts.map +1 -1
  43. package/workflow/engine/workflow-step.executor.d.ts +12 -4
  44. package/workflow/engine/workflow-step.executor.d.ts.map +1 -1
  45. package/workflow/engine/workflow.engine.d.ts +2 -4
  46. package/workflow/engine/workflow.engine.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/common/types/options/auth/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/common/types/options/auth/index.ts"],"names":[],"mappings":"AAMA,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EAExB,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EAEvB,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,0BAA0B,EAC1B,+BAA+B,EAC/B,yBAAyB,EACzB,0BAA0B,EAC1B,iCAAiC,EACjC,oBAAoB,EACpB,QAAQ,EAER,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EAEd,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,aAAa,EAEb,iCAAiC,EACjC,kCAAkC,EAClC,gCAAgC,EAChC,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EAExB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,8BAA8B,EAC9B,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EAEvB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGhF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAKhF,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC9D,YAAY,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAK1F,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,EAC7B,wBAAwB,EACxB,6BAA6B,EAC7B,yBAAyB,EACzB,8BAA8B,EAC9B,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAK1E,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
@@ -2,10 +2,39 @@ import type { ServerRequest } from '../interfaces';
2
2
  export { trimSlashes, joinPath } from '@frontmcp/utils';
3
3
  /** Normalize entryPath (gateway prefix) to "" or "/mcp" */
4
4
  export declare function normalizeEntryPrefix(entryPath?: string): string;
5
+ /**
6
+ * Resolve the configured MCP entry path, falling back to
7
+ * `FRONTMCP_HTTP_ENTRY_PATH`.
8
+ *
9
+ * `httpOptionsSchema.entryPath` already defaults from that env var (#446, how
10
+ * `frontmcp dev` propagates `transport.http.path`), but the schema only runs
11
+ * when the decorator actually declares an `http` block — `http` is
12
+ * `.optional()` on the metadata, so `@FrontMcp({ info, apps })` leaves
13
+ * `metadata.http` undefined and the default never fires. Reading the env here
14
+ * closes that gap for both hosts, which is what makes a Cloudflare worker
15
+ * serve `transport.http.path` (#539).
16
+ *
17
+ * @param entryPath - `metadata.http?.entryPath`, when the block exists.
18
+ */
19
+ export declare function resolveEntryPath(entryPath?: string): string;
5
20
  /** Normalize a scope base (per-app or per-auth) to "" or "/app1" */
6
21
  export declare function normalizeScopeBase(scopeBase?: string): string;
7
22
  /** True when the operator has pinned a canonical public origin. */
8
23
  export declare function isPublicUrlPinned(): boolean;
24
+ /**
25
+ * Whether `X-Forwarded-Host` / `X-Forwarded-Proto` may be trusted.
26
+ *
27
+ * SECURITY: these headers are attacker-controllable on any request that reaches
28
+ * the app directly. Deriving the issuer / resource / OAuth-discovery URLs — or,
29
+ * worse, the EXPECTED audience used to authorize a token — from them lets an
30
+ * attacker poison discovery and (in transparent mode) satisfy the audience gate
31
+ * with a token minted for another service. We therefore ignore forwarded
32
+ * headers by default and use the direct `Host`. Set `FRONTMCP_TRUST_PROXY`
33
+ * (1/true/yes/on) ONLY when a trusted reverse proxy strips client-supplied
34
+ * forwarded headers and sets its own. Prefer pinning `FRONTMCP_PUBLIC_URL`,
35
+ * which takes precedence over everything and is the safest option.
36
+ */
37
+ export declare function isProxyTrusted(): boolean;
9
38
  /**
10
39
  * Build the public base URL for issuer / resource / discovery URLs.
11
40
  *
@@ -1 +1 @@
1
- {"version":3,"file":"path.utils.d.ts","sourceRoot":"","sources":["../../../src/common/utils/path.utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAExD,2DAA2D;AAC3D,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7D;AAwBD,mEAAmE;AACnE,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AA2BD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,UAevE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAIrF;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAIvF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsBxD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAE/E;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,SAAK,eAOnF"}
1
+ {"version":3,"file":"path.utils.d.ts","sourceRoot":"","sources":["../../../src/common/utils/path.utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAExD,2DAA2D;AAC3D,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7D;AAwBD,mEAAmE;AACnE,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAUxC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,UAevE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAIrF;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAIvF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsBxD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAE/E;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,SAAK,eAOnF"}
@@ -46,7 +46,9 @@ export declare class FrontMcpContextStorage {
46
46
  * @param fn - Async function to run
47
47
  * @returns Result of the callback
48
48
  */
49
- runFromHeaders<T>(headers: Record<string, unknown>, args: Omit<FrontMcpContextArgs, 'traceContext' | 'metadata'>, fn: () => T | Promise<T>): T | Promise<T>;
49
+ runFromHeaders<T>(headers: Record<string, unknown>, args: Omit<FrontMcpContextArgs, 'traceContext' | 'metadata'> & {
50
+ peerAddress?: string;
51
+ }, fn: () => T | Promise<T>): T | Promise<T>;
50
52
  /**
51
53
  * Run with an existing FrontMcpContext.
52
54
  *
@@ -1 +1 @@
1
- {"version":3,"file":"frontmcp-context-storage.d.ts","sourceRoot":"","sources":["../../src/context/frontmcp-context-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAMnD,OAAO,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAY/E;;;;;;GAMG;AACH,qBAKa,sBAAsB;IACjC;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK3E;;;;;;;;;;OAUG;IACH,cAAc,CAAC,CAAC,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,UAAU,CAAC,EAC5D,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWjB;;;;;;;;OAQG;IACH,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIrF;;;;OAIG;IACH,QAAQ,IAAI,eAAe,GAAG,SAAS;IAIvC;;;;OAIG;IACH,eAAe,IAAI,eAAe;IAUlC;;;;OAIG;IACH,UAAU,IAAI,OAAO;IAIrB;;;;;;;;;OASG;IACH,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAKzF"}
1
+ {"version":3,"file":"frontmcp-context-storage.d.ts","sourceRoot":"","sources":["../../src/context/frontmcp-context-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAMnD,OAAO,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAY/E;;;;;;GAMG;AACH,qBAKa,sBAAsB;IACjC;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK3E;;;;;;;;;;OAUG;IACH,cAAc,CAAC,CAAC,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,UAAU,CAAC,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EACvF,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAcjB;;;;;;;;OAQG;IACH,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIrF;;;;OAIG;IACH,QAAQ,IAAI,eAAe,GAAG,SAAS;IAIvC;;;;OAIG;IACH,eAAe,IAAI,eAAe;IAUlC;;;;OAIG;IACH,UAAU,IAAI,OAAO;IAIrB;;;;;;;;;OASG;IACH,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAKzF"}
@@ -4,21 +4,44 @@
4
4
  * Shared utilities for extracting request metadata from HTTP headers.
5
5
  */
6
6
  import type { RequestMetadata } from './frontmcp-context';
7
+ /** Where the client IP may legitimately come from, beyond the headers. */
8
+ export interface ClientIpOptions {
9
+ /** Socket peer address, e.g. `req.socket.remoteAddress`. The only unforgeable source. */
10
+ peerAddress?: string;
11
+ /** Overrides the `FRONTMCP_TRUST_PROXY` environment default. */
12
+ trustProxy?: boolean;
13
+ /** Overrides the `FRONTMCP_TRUSTED_PROXY_DEPTH` environment default. */
14
+ trustedProxyDepth?: number;
15
+ }
7
16
  /**
8
17
  * Extract request metadata from headers.
9
18
  *
10
19
  * @param headers - HTTP headers object
20
+ * @param options - Socket peer address and proxy-trust overrides
11
21
  * @returns Extracted metadata including user-agent, content-type, client IP, and custom headers
12
22
  */
13
- export declare function extractMetadata(headers: Record<string, unknown>): RequestMetadata;
23
+ export declare function extractMetadata(headers: Record<string, unknown>, options?: ClientIpOptions): RequestMetadata;
14
24
  /**
15
- * Extract client IP from headers.
25
+ * Extract the client IP for a request (GHSA-p3qf-fcwm-35x4).
16
26
  *
17
- * Handles both string and array header values (some adapters pass arrays).
18
- * Supports x-forwarded-for (comma-separated list) and x-real-ip headers.
27
+ * `x-forwarded-for` and `x-real-ip` are claims made by whoever sent the request. Anything
28
+ * that reaches the app directly can set them, so they are honoured ONLY when a reverse proxy
29
+ * is declared trusted — via `FRONTMCP_TRUST_PROXY`, the same switch that already gates
30
+ * `x-forwarded-proto`/`x-forwarded-host` in `getRequestBaseUrl`. Otherwise the socket peer is
31
+ * the only honest answer.
32
+ *
33
+ * When a proxy IS trusted, the client is taken from the TRUSTED end of the chain:
34
+ * `x-forwarded-for` is append-only, so a caller controls the left of the list and our own
35
+ * proxies appended to the right. `FRONTMCP_TRUSTED_PROXY_DEPTH` (default 1) says how many
36
+ * hops we appended; the entry just before them is the furthest one we can still vouch for.
37
+ * Reading the leftmost entry, as this did, reads exactly the part the caller controls.
38
+ *
39
+ * The result is always validated as an IP, so a forged header cannot mint an arbitrary
40
+ * rate-limit bucket or smuggle a delimiter into a key built from it.
19
41
  *
20
42
  * @param headers - HTTP headers object
21
- * @returns Client IP address or undefined if not found
43
+ * @param options - Socket peer address and proxy-trust overrides
44
+ * @returns Client IP address or undefined when none can be established
22
45
  */
23
- export declare function extractClientIp(headers: Record<string, unknown>): string | undefined;
46
+ export declare function extractClientIp(headers: Record<string, unknown>, options?: ClientIpOptions): string | undefined;
24
47
  //# sourceMappingURL=metadata.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.utils.d.ts","sourceRoot":"","sources":["../../src/context/metadata.utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAgBjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAoBpF"}
1
+ {"version":3,"file":"metadata.utils.d.ts","sourceRoot":"","sources":["../../src/context/metadata.utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA4GD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,eAAe,CAgB5G;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAiC/G"}
@@ -1,2 +1,2 @@
1
- export { EncryptionContextNotSetError, VaultLoadError, VaultNotFoundError, TokenNotAvailableError, TokenStoreRequiredError, NoProviderIdError, TokenLeakDetectedError, SessionSecretRequiredError, CredentialProviderAlreadyRegisteredError, AuthProvidersNotConfiguredError, OrchestratedAuthNotAvailableError, EncryptionKeyNotConfiguredError, SessionIdEmptyError, ElicitationSecretRequiredError, ScopeDeniedError, InMemoryStoreRequiredError, OrchestratorJwksNotAvailableError, } from '@frontmcp/auth';
1
+ export { EncryptionContextNotSetError, VaultLoadError, VaultNotFoundError, TokenNotAvailableError, TokenStoreRequiredError, NoProviderIdError, TokenLeakDetectedError, JwtSecretRequiredError, JwtSecretWeakError, SessionSecretRequiredError, CredentialProviderAlreadyRegisteredError, AuthProvidersNotConfiguredError, OrchestratedAuthNotAvailableError, EncryptionKeyNotConfiguredError, SessionIdEmptyError, ElicitationSecretRequiredError, ScopeDeniedError, InMemoryStoreRequiredError, OrchestratorJwksNotAvailableError, } from '@frontmcp/auth';
2
2
  //# sourceMappingURL=auth-internal.errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-internal.errors.d.ts","sourceRoot":"","sources":["../../src/errors/auth-internal.errors.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,EAC1B,wCAAwC,EACxC,+BAA+B,EAC/B,iCAAiC,EACjC,+BAA+B,EAC/B,mBAAmB,EACnB,8BAA8B,EAC9B,gBAAgB,EAChB,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"auth-internal.errors.d.ts","sourceRoot":"","sources":["../../src/errors/auth-internal.errors.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,wCAAwC,EACxC,+BAA+B,EAC/B,iCAAiC,EACjC,+BAA+B,EAC/B,mBAAmB,EACnB,8BAA8B,EAC9B,gBAAgB,EAChB,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,gBAAgB,CAAC"}
package/errors/index.d.ts CHANGED
@@ -15,7 +15,7 @@ export { RegistryDefinitionNotFoundError, RegistryGraphEntryNotFoundError, Regis
15
15
  export { ProviderNotRegisteredError, ProviderScopeMismatchError, ProviderNotInstantiatedError, DependencyCycleError, ProviderConstructionError, ProviderDependencyError, ProviderScopedAccessError, ProviderNotAvailableError, PluginDependencyError, InvalidDependencyScopeError, } from './provider.errors';
16
16
  export { InvalidDecoratorMetadataError, HookTargetNotDefinedError } from './decorator.errors';
17
17
  export { MethodNotImplementedError, UnsupportedTransportTypeError, TransportBusRequiredError, InvalidTransportSessionError, TransportNotConnectedError, TransportAlreadyStartedError, UnsupportedContentTypeError, TransportServiceNotAvailableError, SessionClaimConflictError, } from './transport.errors';
18
- export { EncryptionContextNotSetError, VaultLoadError, VaultNotFoundError, TokenNotAvailableError, TokenStoreRequiredError, NoProviderIdError, TokenLeakDetectedError, SessionSecretRequiredError, CredentialProviderAlreadyRegisteredError, AuthProvidersNotConfiguredError, OrchestratedAuthNotAvailableError, EncryptionKeyNotConfiguredError, SessionIdEmptyError, ElicitationSecretRequiredError, ScopeDeniedError, InMemoryStoreRequiredError, OrchestratorJwksNotAvailableError, } from './auth-internal.errors';
18
+ export { EncryptionContextNotSetError, VaultLoadError, VaultNotFoundError, TokenNotAvailableError, TokenStoreRequiredError, NoProviderIdError, TokenLeakDetectedError, JwtSecretRequiredError, JwtSecretWeakError, SessionSecretRequiredError, CredentialProviderAlreadyRegisteredError, AuthProvidersNotConfiguredError, OrchestratedAuthNotAvailableError, EncryptionKeyNotConfiguredError, SessionIdEmptyError, ElicitationSecretRequiredError, ScopeDeniedError, InMemoryStoreRequiredError, OrchestratorJwksNotAvailableError, } from './auth-internal.errors';
19
19
  export { WorkflowStepNotFoundError, WorkflowTimeoutError, WorkflowDagValidationError, WorkflowJobTimeoutError, } from './workflow.errors';
20
20
  export { EsmPackageLoadError, EsmVersionResolutionError, EsmManifestInvalidError, EsmCacheError, EsmRegistryAuthError, EsmInvalidSpecifierError, } from './esm.errors';
21
21
  export { FlowExitedWithoutOutputError, ServerNotFoundError, ConfigNotFoundError, SessionVerificationFailedError, ContextExtensionNotAvailableError, ScopeConfigurationError, HaConfigurationError, InvokeStateMissingKeyError, SkillSessionError, InvalidSkillError, SkillInstructionFetchError, InvalidInstructionSourceError, SkillContextNotImplementedError, ServerlessHandlerNotInitializedError, MissingPromptArgumentError, DynamicAdapterNameError, AgentConfigKeyNotFoundError, AgentToolExecutionError, AgentMethodNotAvailableError, VercelKvNotSupportedError, VercelKvAsyncInitRequiredError, RequiredConfigUndefinedError, RegistryNotInitializedError, EnclaveExecutionError, FlowInputMissingError, DynamicJobDirectExecutionError, } from './sdk.errors';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAEhB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAElB,qBAAqB,EAErB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EAEvB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EAEpB,cAAc,EACd,kBAAkB,EAElB,iBAAiB,EAEjB,mBAAmB,EACnB,6BAA6B,EAE7B,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,+BAA+B,EAE/B,sBAAsB,EACtB,yBAAyB,EAEzB,mBAAmB,EACnB,oBAAoB,EAEpB,aAAa,EACb,UAAU,EACV,sBAAsB,EACtB,oBAAoB,EAEpB,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAEL,+BAA+B,EAC/B,iCAAiC,EACjC,+BAA+B,EAE/B,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,YAAY,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAGrF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACxF,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,mCAAmC,EACnC,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAG5G,OAAO,EAEL,qBAAqB,EACrB,qBAAqB,EAErB,kBAAkB,EAElB,uBAAuB,EACvB,2BAA2B,EAC3B,yBAAyB,EAEzB,eAAe,EACf,wBAAwB,EAExB,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EAEpB,oBAAoB,EACpB,+BAA+B,EAE/B,8BAA8B,EAC9B,iCAAiC,EAEjC,wBAAwB,EACxB,uBAAuB,EAEvB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,oCAAoC,EACpC,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAG9F,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,EAC5B,2BAA2B,EAC3B,iCAAiC,EACjC,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,wCAAwC,EACxC,+BAA+B,EAC/B,iCAAiC,EACjC,+BAA+B,EAC/B,mBAAmB,EACnB,8BAA8B,EAC9B,gBAAgB,EAChB,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,mBAAmB,EACnB,8BAA8B,EAC9B,iCAAiC,EACjC,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,6BAA6B,EAC7B,+BAA+B,EAC/B,oCAAoC,EACpC,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,EAC5B,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,cAAc,CAAC;AACtB,cAAc,cAAc,CAAC"}