@sudobility/shapeshyft_service 1.0.0 → 1.0.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/CLAUDE.md CHANGED
@@ -21,6 +21,16 @@ The service never knows where a provider API key lives. The app passes a
21
21
  Optional `InvokeHooks`: `beforeInvoke` (after rate limiting; return a Response to
22
22
  stop) and `afterInvoke` (inside the usage_analytics transaction).
23
23
 
24
+ ## Client IP
25
+
26
+ `getPeerAddress` (required) supplies the TCP peer, which the service cannot read
27
+ without a runtime adapter; apps pass `getConnInfo` from `hono/bun`. The endpoint
28
+ IP allowlist uses `resolveAllowlistIp` (`lib/client-ip.ts`): a public peer is the
29
+ caller and its headers are ignored; forwarded headers are read only from a
30
+ private peer (our proxy), preferring `CF-Connecting-IP`, then `X-Forwarded-For`
31
+ right to left. Unknown peer means deny. Trusting `CF-Connecting-IP` assumes the
32
+ origin accepts traffic only through Cloudflare and the internal proxy.
33
+
24
34
  ## Rules
25
35
 
26
36
  - No `process.env`. Add a field to `ShapeshyftServiceConfig` instead.
package/dist/context.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @fileoverview Service configuration and the context every router closes over
3
3
  */
4
+ import type { Context } from "hono";
4
5
  import type { RateLimitsConfig } from "@sudobility/ratelimit_service";
5
6
  import { createLLMProvider } from "@sudobility/shapeshyft_engine";
6
7
  import type { AuthAdapter, EmailSender, InvokeHooks, Logger, ProviderCredentialResolver, ServiceDb } from "./contracts.js";
@@ -26,6 +27,14 @@ export interface ShapeshyftServiceConfig {
26
27
  auth: AuthAdapter;
27
28
  email: EmailSender;
28
29
  credentials: ProviderCredentialResolver;
30
+ /**
31
+ * The TCP peer address of a request, e.g.
32
+ * `c => getConnInfo(c).remote.address ?? null` with `getConnInfo` from
33
+ * `hono/bun`. The endpoint IP allowlist trusts forwarded headers only when
34
+ * this peer is private (our own proxy). Return null when unknown: an
35
+ * allowlisted endpoint then denies the request.
36
+ */
37
+ getPeerAddress: (c: Context) => string | null | undefined;
29
38
  /** Extra zod fields validated on endpoint create/update. */
30
39
  endpointBinding?: EndpointBindingShapes;
31
40
  hooks?: InvokeHooks;
@@ -44,6 +53,7 @@ export interface ServiceContext {
44
53
  auth: AuthAdapter;
45
54
  email: EmailSender;
46
55
  credentials: ProviderCredentialResolver;
56
+ getPeerAddress: (c: Context) => string | null | undefined;
47
57
  hooks: InvokeHooks;
48
58
  logger: Logger;
49
59
  createProvider: typeof createLLMProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,MAAM,EACN,0BAA0B,EAC1B,SAAS,EACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,yFAAyF;IACzF,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,WAAW,CAAC;IACnB,WAAW,EAAE,0BAA0B,CAAC;IACxC,4DAA4D;IAC5D,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,iBAAiB,CAAC;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,WAAW,CAAC;IACnB,WAAW,EAAE,0BAA0B,CAAC;IACxC,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,OAAO,iBAAiB,CAAC;IACzC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,kBAAkB,CAAC;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,uBAAuB,GAAG,cAAc,CA2C5E"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/dist/context.js CHANGED
@@ -22,6 +22,7 @@ export function buildContext(config) {
22
22
  auth: config.auth,
23
23
  email: config.email,
24
24
  credentials: config.credentials,
25
+ getPeerAddress: config.getPeerAddress,
25
26
  hooks: config.hooks ?? {},
26
27
  logger,
27
28
  createProvider: config.createProvider ?? createLLMProvider,
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAUlE,OAAO,EAAE,oBAAoB,EAAuB,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAoB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EACL,wBAAwB,GAEzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,GAEtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAqB,MAAM,yBAAyB,CAAC;AAChF,OAAO,EACL,wBAAwB,GAEzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,kBAAkB,EAClB,iCAAiC,EACjC,0BAA0B,GAE3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AA8C5B,MAAM,UAAU,YAAY,CAAC,MAA+B;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC;IACxC,MAAM,WAAW,GAAG,iBAAiB,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM;QACN,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,iBAAiB;QAC1D,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,cAAc,EAAE,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC;QACvD,WAAW;QACX,eAAe,EAAE,qBAAqB,CAAC;YACrC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,cAAc,EAAE,WAAW,CAAC,cAAc;YAC1C,MAAM;SACP,CAAC;QACF,kBAAkB,EAAE,wBAAwB,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;QACvE,YAAY,EAAE,kBAAkB,CAAC;YAC/B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;SAC3C,CAAC;QACF,YAAY,EAAE,wBAAwB,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAC/D,YAAY,EAAE,kBAAkB,CAAC;YAC/B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB;YAClD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,gBAAgB,EAAE,MAAM,CAAC,UAAU,IAAI,0BAA0B;YACjE,uBAAuB,EACrB,MAAM,CAAC,uBAAuB,IAAI,iCAAiC;SACtE,CAAC;QACF,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,eAAe,CAAC;KACvD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAUlE,OAAO,EAAE,oBAAoB,EAAuB,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAoB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EACL,wBAAwB,GAEzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,GAEtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAqB,MAAM,yBAAyB,CAAC;AAChF,OAAO,EACL,wBAAwB,GAEzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,kBAAkB,EAClB,iCAAiC,EACjC,0BAA0B,GAE3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AAuD5B,MAAM,UAAU,YAAY,CAAC,MAA+B;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC;IACxC,MAAM,WAAW,GAAG,iBAAiB,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;QACzB,MAAM;QACN,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,iBAAiB;QAC1D,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,cAAc,EAAE,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC;QACvD,WAAW;QACX,eAAe,EAAE,qBAAqB,CAAC;YACrC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,cAAc,EAAE,WAAW,CAAC,cAAc;YAC1C,MAAM;SACP,CAAC;QACF,kBAAkB,EAAE,wBAAwB,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;QACvE,YAAY,EAAE,kBAAkB,CAAC;YAC/B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;SAC3C,CAAC;QACF,YAAY,EAAE,wBAAwB,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAC/D,YAAY,EAAE,kBAAkB,CAAC;YAC/B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB;YAClD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,gBAAgB,EAAE,MAAM,CAAC,UAAU,IAAI,0BAA0B;YACjE,uBAAuB,EACrB,MAAM,CAAC,uBAAuB,IAAI,iCAAiC;SACtE,CAAC;QACF,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,eAAe,CAAC;KACvD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @fileoverview Context variables the auth middleware sets on every request
3
+ * @description Augments Hono's ContextVariableMap so `c.get("userId")` and
4
+ * friends are typed in the service and in every app that mounts routes on it.
5
+ * Re-exported from the package entry, which is what brings this augmentation
6
+ * into a consumer's compilation.
7
+ */
8
+ import type { DecodedIdToken } from "firebase-admin/auth";
9
+ export interface AuthContextVariables {
10
+ firebaseUser: DecodedIdToken;
11
+ userId: string;
12
+ userEmail: string | null;
13
+ siteAdmin: boolean;
14
+ /**
15
+ * How the caller authenticated. Neither key method has a firebaseUser.
16
+ * "api_key" is a personal key (acts as a user); "entity_api_key" is an
17
+ * entity key (acts as the entity itself).
18
+ */
19
+ authMethod: "firebase" | "api_key" | "entity_api_key";
20
+ /** UUID of the user API key used, when authMethod is "api_key" */
21
+ apiKeyId: string;
22
+ /** UUID of the entity API key used, when authMethod is "entity_api_key" */
23
+ entityApiKeyId: string;
24
+ /** Entity the request acts as, when authMethod is "entity_api_key" */
25
+ entityApiKeyEntityId: string;
26
+ }
27
+ declare module "hono" {
28
+ interface ContextVariableMap extends AuthContextVariables {
29
+ }
30
+ }
31
+ //# sourceMappingURL=hono-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono-context.d.ts","sourceRoot":"","sources":["../src/hono-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAC;IACtD,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAU,kBAAmB,SAAQ,oBAAoB;KAAG;CAC7D"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Context variables the auth middleware sets on every request
3
+ * @description Augments Hono's ContextVariableMap so `c.get("userId")` and
4
+ * friends are typed in the service and in every app that mounts routes on it.
5
+ * Re-exported from the package entry, which is what brings this augmentation
6
+ * into a consumer's compilation.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=hono-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono-context.js","sourceRoot":"","sources":["../src/hono-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
package/dist/index.d.ts CHANGED
@@ -14,4 +14,6 @@ export { toMicroCents } from "./lib/money.js";
14
14
  export { getActor, getPermissionErrorStatus, userActor, ENTITY_API_KEY_PERMISSIONS, type EntityAccess, type EntityActor, type EntityPermissionResult, } from "./lib/entity-helpers.js";
15
15
  export { DEFAULT_RATE_LIMITS_CONFIG, DEFAULT_ENTITLEMENT_DISPLAY_NAMES, } from "./middleware/rateLimit.js";
16
16
  export * from "./schemas/index.js";
17
+ export { collectForwardingHeaders, FORWARDING_HEADERS, isIpLiteral, isIpv4, isIpv6, isRoutableClientIp, normalizeClientIp, resolveAllowlistIp, resolveCallerIp, } from "./lib/client-ip.js";
18
+ export type { AuthContextVariables } from "./hono-context.js";
17
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,SAAS,EACT,WAAW,EACX,MAAM,EACN,UAAU,EACV,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,UAAU,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,SAAS,EACT,0BAA0B,EAC1B,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,2BAA2B,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,SAAS,EACT,WAAW,EACX,MAAM,EACN,UAAU,EACV,0BAA0B,EAC1B,kBAAkB,EAClB,eAAe,EACf,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,UAAU,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,SAAS,EACT,0BAA0B,EAC1B,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,2BAA2B,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,MAAM,EACN,MAAM,EACN,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -13,4 +13,5 @@ export { toMicroCents } from "./lib/money.js";
13
13
  export { getActor, getPermissionErrorStatus, userActor, ENTITY_API_KEY_PERMISSIONS, } from "./lib/entity-helpers.js";
14
14
  export { DEFAULT_RATE_LIMITS_CONFIG, DEFAULT_ENTITLEMENT_DISPLAY_NAMES, } from "./middleware/rateLimit.js";
15
15
  export * from "./schemas/index.js";
16
+ export { collectForwardingHeaders, FORWARDING_HEADERS, isIpLiteral, isIpv4, isIpv6, isRoutableClientIp, normalizeClientIp, resolveAllowlistIp, resolveCallerIp, } from "./lib/client-ip.js";
16
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,uBAAuB,GAGxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,GAGb,MAAM,cAAc,CAAC;AAiBtB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,SAAS,EACT,0BAA0B,GAI3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,2BAA2B,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,uBAAuB,GAGxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,GAGb,MAAM,cAAc,CAAC;AAiBtB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,SAAS,EACT,0BAA0B,GAI3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,2BAA2B,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,MAAM,EACN,MAAM,EACN,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * @fileoverview Client IP resolution
3
+ * @description Who is really calling, given the connection's peer address and
4
+ * its forwarded headers. Used by the endpoint IP allowlist, and by products
5
+ * that point self-hosted providers at the caller (ShapeShyft's provider sync).
6
+ *
7
+ * Kept free of Hono and the database so the address parsing -- which is where
8
+ * the sharp edges are -- can be tested directly. The peer address itself comes
9
+ * from the runtime (`getConnInfo` from `hono/bun`), which the app supplies as
10
+ * `getPeerAddress`.
11
+ */
12
+ /** Is this an IPv4 literal? */
13
+ export declare function isIpv4(value: string): boolean;
14
+ /**
15
+ * Is this an IPv6 literal?
16
+ *
17
+ * Parsed rather than pattern-matched. The regex this replaced accepted `":"`,
18
+ * `"a:"`, and `"1:2"` as valid, which meant a malformed forwarded header could
19
+ * be treated as a routable client address and written into a provider URL.
20
+ *
21
+ * A zone index (`fe80::1%eth0`) is rejected: it is a valid address but cannot be
22
+ * used as a URL host, which is the only thing this library does with one.
23
+ */
24
+ export declare function isIpv6(value: string): boolean;
25
+ /** Is this any IP literal, as opposed to a DNS hostname? */
26
+ export declare function isIpLiteral(value: string): boolean;
27
+ /**
28
+ * Normalize a peer address reported by the server.
29
+ *
30
+ * Bun reports an IPv4 peer as an IPv4-mapped IPv6 address
31
+ * (`::ffff:142.254.88.21`), which is the same address wearing a hat. Unwrap it
32
+ * so what gets written into a provider URL is the address a person would type.
33
+ *
34
+ * @param raw - The address from `getConnInfo(c).remote.address`
35
+ * @returns A bare IP literal, or null when there is nothing usable
36
+ */
37
+ export declare function normalizeClientIp(raw: string | undefined | null): string | null;
38
+ /**
39
+ * Is this an address worth writing into a provider URL?
40
+ *
41
+ * A loopback, private, or link-local peer means the request did not come from
42
+ * the internet -- a local test, a sidecar, or a proxy on the same host. Writing
43
+ * one of those would quietly break every endpoint using the provider, so the
44
+ * sync refuses rather than "succeeding" with an address that resolves nowhere
45
+ * useful from the API's perspective.
46
+ */
47
+ export declare function isRoutableClientIp(ip: string): boolean;
48
+ /**
49
+ * Headers that may carry a client address, and are safe to echo back.
50
+ *
51
+ * An explicit allowlist, never "every header": the request also carries the
52
+ * caller's `X-API-Key`, and a diagnostic that reflected the whole header set
53
+ * back would hand a credential to anything reading the response or the logs.
54
+ */
55
+ export declare const FORWARDING_HEADERS: readonly ["x-forwarded-for", "x-real-ip", "cf-connecting-ip", "true-client-ip", "x-client-ip", "x-cluster-client-ip", "fastly-client-ip", "x-original-forwarded-for", "forwarded", "x-forwarded-host", "x-forwarded-proto", "cf-ray", "cf-ipcountry", "via"];
56
+ /**
57
+ * Gather the forwarding-related headers actually present on a request.
58
+ *
59
+ * For diagnosing what a deployment's proxies really send, which is the only
60
+ * reliable way to know which header holds the client address -- guessing it
61
+ * from an infrastructure repo is how a Cloudflare edge IP ends up written into
62
+ * a provider URL.
63
+ *
64
+ * @param getHeader - Case-insensitive header lookup
65
+ * @returns Only the allowlisted headers that are present
66
+ */
67
+ export declare function collectForwardingHeaders(getHeader: (name: string) => string | undefined): Record<string, string>;
68
+ /**
69
+ * Resolve who is really calling, given the connection's peer and its headers.
70
+ *
71
+ * A forwarded header is written by whoever is upstream, so it is only worth
72
+ * anything once we know the hop that sent it is our own infrastructure. The
73
+ * peer address settles that: an attacker on the internet cannot make their TCP
74
+ * connection appear to originate from a private address.
75
+ *
76
+ * - **Public peer** -- the client reached us directly. Use the peer and ignore
77
+ * every header, forged or not.
78
+ * - **Private or loopback peer** -- we are behind our own reverse proxy
79
+ * (Traefik on the Docker network, in this deployment). Read the client from
80
+ * the forwarded headers it set.
81
+ *
82
+ * On the trusted branch the headers are consulted in a deliberate order:
83
+ *
84
+ * 1. `CF-Connecting-IP` / `True-Client-IP` -- a CDN's own client header, which
85
+ * it overwrites on every request and a client therefore cannot forge.
86
+ * 2. `X-Forwarded-For`, read **right to left**, taking the first public entry.
87
+ * Each proxy appends the address that connected to it, so the right-hand
88
+ * entries were written by trusted infrastructure while the leftmost may have
89
+ * come from the client.
90
+ * 3. `X-Real-Ip`.
91
+ *
92
+ * The CDN header must come first, and this is not theoretical. On
93
+ * api.shapeshyft.ai the chain is Cloudflare -> Traefik -> API, and Traefik has
94
+ * no `forwardedHeaders.trustedIPs`, so it *discards* Cloudflare's
95
+ * `X-Forwarded-For` and rewrites it with the Cloudflare edge address. That edge
96
+ * address is public, so every "is this routable" check passes and it looks like
97
+ * a perfectly good client IP -- it just is not one, and it changes from request
98
+ * to request. `CF-Connecting-IP` is the only header in that chain carrying the
99
+ * real client.
100
+ *
101
+ * @param peerAddress - The connection's peer, from `getConnInfo(c).remote.address`
102
+ * @param getHeader - Case-insensitive header lookup
103
+ * @returns The caller's IP, or null when it cannot be established
104
+ */
105
+ export declare function resolveCallerIp(peerAddress: string | null | undefined, getHeader: (name: string) => string | undefined): string | null;
106
+ /** Outcome of rewriting one provider URL. */
107
+ export type UrlRewrite = {
108
+ status: "updated";
109
+ url: string;
110
+ } | {
111
+ status: "unchanged";
112
+ } | {
113
+ status: "skipped";
114
+ reason: string;
115
+ };
116
+ /**
117
+ * The address an endpoint's IP allowlist is checked against.
118
+ *
119
+ * `resolveCallerIp`, falling back to the peer itself. The fallback covers a
120
+ * caller on the private network that reached us without a proxy: its peer
121
+ * address is private, so `resolveCallerIp` looks for forwarded headers and finds
122
+ * none -- but the peer is a TCP fact and cannot be forged, so it is the answer.
123
+ *
124
+ * What this replaced trusted the leftmost `X-Forwarded-For` entry from anyone,
125
+ * which let a caller holding a project key claim any allowlisted address.
126
+ *
127
+ * @param peerAddress - The connection's peer; null when the runtime cannot say
128
+ * @param getHeader - Case-insensitive header lookup
129
+ * @returns The caller's IP, or null when it cannot be established (deny)
130
+ */
131
+ export declare function resolveAllowlistIp(peerAddress: string | null | undefined, getHeader: (name: string) => string | undefined): string | null;
132
+ //# sourceMappingURL=client-ip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-ip.d.ts","sourceRoot":"","sources":["../../src/lib/client-ip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,+BAA+B;AAC/B,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAiCD;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAiB7C;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC7B,MAAM,GAAG,IAAI,CASf;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAgBtD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,8PAerB,CAAC;AAEX;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC9C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC9C,MAAM,GAAG,IAAI,CAsCf;AAED,6CAA6C;AAC7C,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC9C,MAAM,GAAG,IAAI,CAIf"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * @fileoverview Client IP resolution
3
+ * @description Who is really calling, given the connection's peer address and
4
+ * its forwarded headers. Used by the endpoint IP allowlist, and by products
5
+ * that point self-hosted providers at the caller (ShapeShyft's provider sync).
6
+ *
7
+ * Kept free of Hono and the database so the address parsing -- which is where
8
+ * the sharp edges are -- can be tested directly. The peer address itself comes
9
+ * from the runtime (`getConnInfo` from `hono/bun`), which the app supplies as
10
+ * `getPeerAddress`.
11
+ */
12
+ /** IPv4 dotted quad, each octet 0-255. */
13
+ const IPV4_RE = /^(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}$/;
14
+ /** A single IPv6 group: one to four hex digits. */
15
+ const IPV6_GROUP_RE = /^[0-9a-f]{1,4}$/i;
16
+ /** Is this an IPv4 literal? */
17
+ export function isIpv4(value) {
18
+ return IPV4_RE.test(value);
19
+ }
20
+ /**
21
+ * Count the groups on one side of a `::`, or null if the side is malformed.
22
+ *
23
+ * An embedded IPv4 tail (`::ffff:1.2.3.4`) is only legal as the final group and
24
+ * occupies two of the eight, which is why this returns a count rather than a
25
+ * boolean.
26
+ */
27
+ function countIpv6Groups(side) {
28
+ if (side === "")
29
+ return 0;
30
+ const groups = side.split(":");
31
+ let count = 0;
32
+ for (let i = 0; i < groups.length; i++) {
33
+ const group = groups[i];
34
+ if (group === "")
35
+ return null; // a stray colon, e.g. "a:" or ":a"
36
+ if (group.includes(".")) {
37
+ // A dotted quad is only an address here in the final position.
38
+ if (i !== groups.length - 1 || !isIpv4(group))
39
+ return null;
40
+ count += 2;
41
+ continue;
42
+ }
43
+ if (!IPV6_GROUP_RE.test(group))
44
+ return null;
45
+ count += 1;
46
+ }
47
+ return count;
48
+ }
49
+ /**
50
+ * Is this an IPv6 literal?
51
+ *
52
+ * Parsed rather than pattern-matched. The regex this replaced accepted `":"`,
53
+ * `"a:"`, and `"1:2"` as valid, which meant a malformed forwarded header could
54
+ * be treated as a routable client address and written into a provider URL.
55
+ *
56
+ * A zone index (`fe80::1%eth0`) is rejected: it is a valid address but cannot be
57
+ * used as a URL host, which is the only thing this library does with one.
58
+ */
59
+ export function isIpv6(value) {
60
+ if (!value.includes(":") || value.includes("%"))
61
+ return false;
62
+ const sides = value.split("::");
63
+ if (sides.length > 2)
64
+ return false; // "::" may appear at most once
65
+ const head = countIpv6Groups(sides[0]);
66
+ if (head === null)
67
+ return false;
68
+ // Uncompressed: all eight groups must be spelled out.
69
+ if (sides.length === 1)
70
+ return head === 8;
71
+ const tail = countIpv6Groups(sides[1]);
72
+ if (tail === null)
73
+ return false;
74
+ // "::" must stand in for at least one omitted group.
75
+ return head + tail <= 7;
76
+ }
77
+ /** Is this any IP literal, as opposed to a DNS hostname? */
78
+ export function isIpLiteral(value) {
79
+ return isIpv4(value) || isIpv6(value);
80
+ }
81
+ /**
82
+ * Normalize a peer address reported by the server.
83
+ *
84
+ * Bun reports an IPv4 peer as an IPv4-mapped IPv6 address
85
+ * (`::ffff:142.254.88.21`), which is the same address wearing a hat. Unwrap it
86
+ * so what gets written into a provider URL is the address a person would type.
87
+ *
88
+ * @param raw - The address from `getConnInfo(c).remote.address`
89
+ * @returns A bare IP literal, or null when there is nothing usable
90
+ */
91
+ export function normalizeClientIp(raw) {
92
+ if (typeof raw !== "string")
93
+ return null;
94
+ const trimmed = raw.trim();
95
+ if (trimmed.length === 0)
96
+ return null;
97
+ const mapped = /^::ffff:(.+)$/i.exec(trimmed);
98
+ const candidate = mapped?.[1] ?? trimmed;
99
+ return isIpLiteral(candidate) ? candidate : null;
100
+ }
101
+ /**
102
+ * Is this an address worth writing into a provider URL?
103
+ *
104
+ * A loopback, private, or link-local peer means the request did not come from
105
+ * the internet -- a local test, a sidecar, or a proxy on the same host. Writing
106
+ * one of those would quietly break every endpoint using the provider, so the
107
+ * sync refuses rather than "succeeding" with an address that resolves nowhere
108
+ * useful from the API's perspective.
109
+ */
110
+ export function isRoutableClientIp(ip) {
111
+ if (isIpv4(ip)) {
112
+ const [a, b] = ip.split(".").map(Number);
113
+ if (a === 0 || a === 127)
114
+ return false; // unspecified, loopback
115
+ if (a === 10)
116
+ return false; // 10/8
117
+ if (a === 172 && b >= 16 && b <= 31)
118
+ return false; // 172.16/12
119
+ if (a === 192 && b === 168)
120
+ return false; // 192.168/16
121
+ if (a === 169 && b === 254)
122
+ return false; // 169.254/16 link-local
123
+ return true;
124
+ }
125
+ const lower = ip.toLowerCase();
126
+ if (lower === "::" || lower === "::1")
127
+ return false; // unspecified, loopback
128
+ if (/^f[cd][0-9a-f]{2}:/.test(lower))
129
+ return false; // fc00::/7 unique-local
130
+ if (/^fe[89ab][0-9a-f]:/.test(lower))
131
+ return false; // fe80::/10 link-local
132
+ return true;
133
+ }
134
+ /**
135
+ * Headers that may carry a client address, and are safe to echo back.
136
+ *
137
+ * An explicit allowlist, never "every header": the request also carries the
138
+ * caller's `X-API-Key`, and a diagnostic that reflected the whole header set
139
+ * back would hand a credential to anything reading the response or the logs.
140
+ */
141
+ export const FORWARDING_HEADERS = [
142
+ "x-forwarded-for",
143
+ "x-real-ip",
144
+ "cf-connecting-ip",
145
+ "true-client-ip",
146
+ "x-client-ip",
147
+ "x-cluster-client-ip",
148
+ "fastly-client-ip",
149
+ "x-original-forwarded-for",
150
+ "forwarded",
151
+ "x-forwarded-host",
152
+ "x-forwarded-proto",
153
+ "cf-ray",
154
+ "cf-ipcountry",
155
+ "via",
156
+ ];
157
+ /**
158
+ * Gather the forwarding-related headers actually present on a request.
159
+ *
160
+ * For diagnosing what a deployment's proxies really send, which is the only
161
+ * reliable way to know which header holds the client address -- guessing it
162
+ * from an infrastructure repo is how a Cloudflare edge IP ends up written into
163
+ * a provider URL.
164
+ *
165
+ * @param getHeader - Case-insensitive header lookup
166
+ * @returns Only the allowlisted headers that are present
167
+ */
168
+ export function collectForwardingHeaders(getHeader) {
169
+ const found = {};
170
+ for (const name of FORWARDING_HEADERS) {
171
+ const value = getHeader(name);
172
+ if (value !== undefined && value !== "") {
173
+ found[name] = value;
174
+ }
175
+ }
176
+ return found;
177
+ }
178
+ /**
179
+ * Resolve who is really calling, given the connection's peer and its headers.
180
+ *
181
+ * A forwarded header is written by whoever is upstream, so it is only worth
182
+ * anything once we know the hop that sent it is our own infrastructure. The
183
+ * peer address settles that: an attacker on the internet cannot make their TCP
184
+ * connection appear to originate from a private address.
185
+ *
186
+ * - **Public peer** -- the client reached us directly. Use the peer and ignore
187
+ * every header, forged or not.
188
+ * - **Private or loopback peer** -- we are behind our own reverse proxy
189
+ * (Traefik on the Docker network, in this deployment). Read the client from
190
+ * the forwarded headers it set.
191
+ *
192
+ * On the trusted branch the headers are consulted in a deliberate order:
193
+ *
194
+ * 1. `CF-Connecting-IP` / `True-Client-IP` -- a CDN's own client header, which
195
+ * it overwrites on every request and a client therefore cannot forge.
196
+ * 2. `X-Forwarded-For`, read **right to left**, taking the first public entry.
197
+ * Each proxy appends the address that connected to it, so the right-hand
198
+ * entries were written by trusted infrastructure while the leftmost may have
199
+ * come from the client.
200
+ * 3. `X-Real-Ip`.
201
+ *
202
+ * The CDN header must come first, and this is not theoretical. On
203
+ * api.shapeshyft.ai the chain is Cloudflare -> Traefik -> API, and Traefik has
204
+ * no `forwardedHeaders.trustedIPs`, so it *discards* Cloudflare's
205
+ * `X-Forwarded-For` and rewrites it with the Cloudflare edge address. That edge
206
+ * address is public, so every "is this routable" check passes and it looks like
207
+ * a perfectly good client IP -- it just is not one, and it changes from request
208
+ * to request. `CF-Connecting-IP` is the only header in that chain carrying the
209
+ * real client.
210
+ *
211
+ * @param peerAddress - The connection's peer, from `getConnInfo(c).remote.address`
212
+ * @param getHeader - Case-insensitive header lookup
213
+ * @returns The caller's IP, or null when it cannot be established
214
+ */
215
+ export function resolveCallerIp(peerAddress, getHeader) {
216
+ const peer = normalizeClientIp(peerAddress);
217
+ if (!peer)
218
+ return null;
219
+ // A public peer is the client itself. Headers add nothing and can only lie.
220
+ if (isRoutableClientIp(peer)) {
221
+ return peer;
222
+ }
223
+ // Private peer: a hop inside our own network, so its headers are worth reading.
224
+ // A CDN's client header first: it is overwritten upstream on every request,
225
+ // whereas X-Forwarded-For may have been rewritten by an intermediate proxy
226
+ // that does not trust the CDN.
227
+ for (const name of ["cf-connecting-ip", "true-client-ip"]) {
228
+ const cdnClient = normalizeClientIp(getHeader(name));
229
+ if (cdnClient && isRoutableClientIp(cdnClient)) {
230
+ return cdnClient;
231
+ }
232
+ }
233
+ const forwardedFor = getHeader("x-forwarded-for");
234
+ if (forwardedFor) {
235
+ const hops = forwardedFor.split(",");
236
+ for (let i = hops.length - 1; i >= 0; i--) {
237
+ const candidate = normalizeClientIp(hops[i].trim());
238
+ if (candidate && isRoutableClientIp(candidate)) {
239
+ return candidate;
240
+ }
241
+ }
242
+ }
243
+ const realIp = normalizeClientIp(getHeader("x-real-ip"));
244
+ if (realIp && isRoutableClientIp(realIp)) {
245
+ return realIp;
246
+ }
247
+ return null;
248
+ }
249
+ /**
250
+ * The address an endpoint's IP allowlist is checked against.
251
+ *
252
+ * `resolveCallerIp`, falling back to the peer itself. The fallback covers a
253
+ * caller on the private network that reached us without a proxy: its peer
254
+ * address is private, so `resolveCallerIp` looks for forwarded headers and finds
255
+ * none -- but the peer is a TCP fact and cannot be forged, so it is the answer.
256
+ *
257
+ * What this replaced trusted the leftmost `X-Forwarded-For` entry from anyone,
258
+ * which let a caller holding a project key claim any allowlisted address.
259
+ *
260
+ * @param peerAddress - The connection's peer; null when the runtime cannot say
261
+ * @param getHeader - Case-insensitive header lookup
262
+ * @returns The caller's IP, or null when it cannot be established (deny)
263
+ */
264
+ export function resolveAllowlistIp(peerAddress, getHeader) {
265
+ return (resolveCallerIp(peerAddress, getHeader) ?? normalizeClientIp(peerAddress));
266
+ }
267
+ //# sourceMappingURL=client-ip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-ip.js","sourceRoot":"","sources":["../../src/lib/client-ip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,0CAA0C;AAC1C,MAAM,OAAO,GACX,6EAA6E,CAAC;AAEhF,mDAAmD;AACnD,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEzC,+BAA+B;AAC/B,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,CAAC,CAAC;IAE1B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QACzB,IAAI,KAAK,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC,CAAC,mCAAmC;QAElE,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,+DAA+D;YAC/D,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3D,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAE9D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,+BAA+B;IAEnE,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IACxC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAEhC,sDAAsD;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IACxC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAEhC,qDAAqD;IACrD,OAAO,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAA8B;IAE9B,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAEzC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QACf,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAqB,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC,CAAC,wBAAwB;QAChE,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC,CAAC,OAAO;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC,CAAC,YAAY;QAC/D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC,CAAC,aAAa;QACvD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC,CAAC,wBAAwB;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,wBAAwB;IAC7E,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,wBAAwB;IAC5E,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,uBAAuB;IAC3E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,iBAAiB;IACjB,WAAW;IACX,kBAAkB;IAClB,gBAAgB;IAChB,aAAa;IACb,qBAAqB;IACrB,kBAAkB;IAClB,0BAA0B;IAC1B,WAAW;IACX,kBAAkB;IAClB,mBAAmB;IACnB,QAAQ;IACR,cAAc;IACd,KAAK;CACG,CAAC;AAEX;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAA+C;IAE/C,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAsC,EACtC,SAA+C;IAE/C,MAAM,IAAI,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,4EAA4E;IAC5E,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gFAAgF;IAEhF,4EAA4E;IAC5E,2EAA2E;IAC3E,+BAA+B;IAC/B,KAAK,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,IAAI,SAAS,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAClD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACrD,IAAI,SAAS,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/C,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACzD,IAAI,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAQD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAsC,EACtC,SAA+C;IAE/C,OAAO,CACL,eAAe,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAC1E,CAAC;AACJ,CAAC"}
@@ -5,30 +5,6 @@
5
5
  * prefixes, auth functions, and storage all come from the service context.
6
6
  */
7
7
  import type { MiddlewareHandler } from "hono";
8
- import type { DecodedIdToken } from "firebase-admin/auth";
9
8
  import type { ServiceContext } from "../context.js";
10
- /**
11
- * Augment Hono's ContextVariableMap for type-safe context access.
12
- */
13
- declare module "hono" {
14
- interface ContextVariableMap {
15
- firebaseUser: DecodedIdToken;
16
- userId: string;
17
- userEmail: string | null;
18
- siteAdmin: boolean;
19
- /**
20
- * How the caller authenticated. Neither key method has a firebaseUser.
21
- * "api_key" is a personal key (acts as a user); "entity_api_key" is an
22
- * entity key (acts as the entity itself).
23
- */
24
- authMethod: "firebase" | "api_key" | "entity_api_key";
25
- /** UUID of the user API key used, when authMethod is "api_key" */
26
- apiKeyId: string;
27
- /** UUID of the entity API key used, when authMethod is "entity_api_key" */
28
- entityApiKeyId: string;
29
- /** Entity the request acts as, when authMethod is "entity_api_key" */
30
- entityApiKeyEntityId: string;
31
- }
32
- }
33
9
  export declare function createFirebaseAuthMiddleware(ctx: ServiceContext): MiddlewareHandler;
34
10
  //# sourceMappingURL=firebaseAuth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"firebaseAuth.d.ts","sourceRoot":"","sources":["../../src/middleware/firebaseAuth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,iBAAiB,EAAQ,MAAM,MAAM,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;GAEG;AACH,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAU,kBAAkB;QAC1B,YAAY,EAAE,cAAc,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,SAAS,EAAE,OAAO,CAAC;QACnB;;;;WAIG;QACH,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAC;QACtD,kEAAkE;QAClE,QAAQ,EAAE,MAAM,CAAC;QACjB,2EAA2E;QAC3E,cAAc,EAAE,MAAM,CAAC;QACvB,sEAAsE;QACtE,oBAAoB,EAAE,MAAM,CAAC;KAC9B;CACF;AAYD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,cAAc,GAClB,iBAAiB,CA8JnB"}
1
+ {"version":3,"file":"firebaseAuth.d.ts","sourceRoot":"","sources":["../../src/middleware/firebaseAuth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,iBAAiB,EAAQ,MAAM,MAAM,CAAC;AAG7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAYpD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,cAAc,GAClB,iBAAiB,CA8JnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"firebaseAuth.js","sourceRoot":"","sources":["../../src/middleware/firebaseAuth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firebaseAuth.js","sourceRoot":"","sources":["../../src/middleware/firebaseAuth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/routes/ai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA6B5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AASpD,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,8EAm5BjD"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/routes/ai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA6B5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAUpD,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,8EAg5BjD"}
package/dist/routes/ai.js CHANGED
@@ -13,6 +13,7 @@ import { ApiHelper, estimateCost, getModelPricing, extractMediaFromInput, conver
13
13
  import { EntitlementHelper, RateLimitChecker, } from "@sudobility/ratelimit_service";
14
14
  import { SubscriptionHelper } from "@sudobility/subscription_service";
15
15
  import { toMicroCents } from "../lib/money.js";
16
+ import { resolveAllowlistIp } from "../lib/client-ip.js";
16
17
  export function createAiRouter(ctx) {
17
18
  const { db } = ctx;
18
19
  const { projects, endpoints, usageAnalytics, entities, entityMembers, users, rateLimitCounters, } = ctx.tables;
@@ -60,22 +61,22 @@ export function createAiRouter(ctx) {
60
61
  return null;
61
62
  }
62
63
  /**
63
- * Get client IP address from request
64
+ * The caller's IP, for the endpoint allowlist.
65
+ *
66
+ * Forwarded headers are believed only when the connection itself comes from a
67
+ * private address -- our own proxy. A caller that connects directly is judged
68
+ * by its connection, so it cannot name an allowlisted address in a header.
69
+ * Null (deny) when the runtime cannot report the peer.
64
70
  */
65
71
  function getClientIp(c) {
66
- // Check common proxy headers first
67
- const xForwardedFor = c.req.header("X-Forwarded-For");
68
- if (xForwardedFor) {
69
- // X-Forwarded-For can be comma-separated list; take the first (client) IP
70
- return xForwardedFor.split(",")[0]?.trim() ?? null;
71
- }
72
- const xRealIp = c.req.header("X-Real-IP");
73
- if (xRealIp) {
74
- return xRealIp;
75
- }
76
- // Fallback to connection info if available
77
- // Note: This may not work in all environments
78
- return c.req.raw?.socket?.remoteAddress ?? null;
72
+ let peer;
73
+ try {
74
+ peer = ctx.getPeerAddress(c);
75
+ }
76
+ catch {
77
+ peer = null;
78
+ }
79
+ return resolveAllowlistIp(peer, name => c.req.header(name));
79
80
  }
80
81
  /**
81
82
  * Check if IP is in the allowlist
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/routes/ai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/routes/ai.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/shapeshyft_service",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
4
  "description": "Shared tables, routes and middleware for ShapeShyft-style structured-output APIs",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -32,7 +32,7 @@
32
32
  "license": "BUSL-1.1",
33
33
  "dependencies": {
34
34
  "@hono/zod-validator": "^0.7.5",
35
- "@sudobility/shapeshyft_engine": "^1.0.0",
35
+ "@sudobility/shapeshyft_engine": "^1.0.1",
36
36
  "zod": "^3.24.0"
37
37
  },
38
38
  "peerDependencies": {
@@ -68,7 +68,7 @@
68
68
  "openai": "^4.77.0",
69
69
  "postgres": "^3.4.7",
70
70
  "prettier": "^3.7.4",
71
- "sharp": "^0.34.5",
71
+ "sharp": "^0.35.4",
72
72
  "typescript": "^5.9.3",
73
73
  "vitest": "^4.0.4"
74
74
  },