@sudobility/shapeshyft_service 1.0.0 → 1.0.2
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 +10 -0
- package/dist/context.d.ts +10 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -0
- package/dist/context.js.map +1 -1
- package/dist/hono-context.d.ts +31 -0
- package/dist/hono-context.d.ts.map +1 -0
- package/dist/hono-context.js +9 -0
- package/dist/hono-context.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/client-ip.d.ts +132 -0
- package/dist/lib/client-ip.d.ts.map +1 -0
- package/dist/lib/client-ip.js +267 -0
- package/dist/lib/client-ip.js.map +1 -0
- package/dist/middleware/firebaseAuth.d.ts +0 -24
- package/dist/middleware/firebaseAuth.d.ts.map +1 -1
- package/dist/middleware/firebaseAuth.js.map +1 -1
- package/dist/routes/ai.d.ts.map +1 -1
- package/dist/routes/ai.js +15 -14
- package/dist/routes/ai.js.map +1 -1
- package/package.json +2 -2
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;
|
package/dist/context.d.ts.map
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,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;;;;;;OAMG;IACH,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,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,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1D,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,CA4C5E"}
|
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,
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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":"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"}
|
|
@@ -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;
|
|
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":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"firebaseAuth.js","sourceRoot":"","sources":["../../src/middleware/firebaseAuth.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/ai.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
*
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
package/dist/routes/ai.js.map
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "1.0.2",
|
|
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.
|
|
35
|
+
"@sudobility/shapeshyft_engine": "^1.0.1",
|
|
36
36
|
"zod": "^3.24.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|