@schemavaults/auth-server-sdk 0.22.84 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/JwtKeyManager/RemoteJwtKeyManager/RemoteJwtKeyManager.d.ts +3 -3
- package/dist/JwtKeyManager/RemoteJwtKeyManager/RemoteJwtKeyManager.js +8 -8
- package/dist/JwtKeyManager/RemoteJwtKeyManager/RemoteJwtKeyManager.js.map +1 -1
- package/dist/JwtKeyManager/RemoteJwtKeyManager/jwksEndpoint.js +3 -3
- package/dist/JwtKeyManager/RemoteJwtKeyManager/jwksEndpoint.js.map +1 -1
- package/dist/JwtKeyManager/RemoteJwtKeyManager/loadRemoteJwks.d.ts +2 -2
- package/dist/JwtKeyManager/RemoteJwtKeyManager/loadRemoteJwks.js +9 -7
- package/dist/JwtKeyManager/RemoteJwtKeyManager/loadRemoteJwks.js.map +1 -1
- package/dist/cli.cjs +2 -2
- package/dist/decode-jwts-with-key-manager.js +6 -2
- package/dist/decode-jwts-with-key-manager.js.map +1 -1
- package/dist/env/get-schemavaults-auth-server-url.d.ts +1 -0
- package/dist/env/get-schemavaults-auth-server-url.js +6 -0
- package/dist/env/get-schemavaults-auth-server-url.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/isUserInOrganization.js +3 -2
- package/dist/isUserInOrganization.js.map +1 -1
- package/dist/middleware/index.d.ts +2 -0
- package/dist/middleware/index.js +1 -0
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/middlewares/withAuthJwtValidation/withAuthJwtValidation.js +7 -5
- package/dist/middleware/middlewares/withAuthJwtValidation/withAuthJwtValidation.js.map +1 -1
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/IAllowedOriginsResolver.d.ts +11 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/IAllowedOriginsResolver.js +9 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/IAllowedOriginsResolver.js.map +1 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/RemoteAllowedOriginsResolver.d.ts +22 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/RemoteAllowedOriginsResolver.js +106 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/RemoteAllowedOriginsResolver.js.map +1 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/allowedOriginsEndpoint.d.ts +2 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/allowedOriginsEndpoint.js +11 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/allowedOriginsEndpoint.js.map +1 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/index.d.ts +6 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/index.js +4 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/index.js.map +1 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/loadRemoteAllowedOrigins.d.ts +9 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/loadRemoteAllowedOrigins.js +56 -0
- package/dist/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/loadRemoteAllowedOrigins.js.map +1 -0
- package/dist/middleware/middlewares/withCorsSettings/index.d.ts +2 -0
- package/dist/middleware/middlewares/withCorsSettings/index.js +1 -0
- package/dist/middleware/middlewares/withCorsSettings/index.js.map +1 -1
- package/dist/middleware/middlewares/withCorsSettings/isAllowedOrigin.d.ts +3 -0
- package/dist/middleware/middlewares/withCorsSettings/isAllowedOrigin.js +46 -55
- package/dist/middleware/middlewares/withCorsSettings/isAllowedOrigin.js.map +1 -1
- package/dist/middleware/middlewares/withCorsSettings/withCorsSettings.d.ts +7 -0
- package/dist/middleware/middlewares/withCorsSettings/withCorsSettings.js +12 -0
- package/dist/middleware/middlewares/withCorsSettings/withCorsSettings.js.map +1 -1
- package/dist/middleware/server-middleware.d.ts +3 -1
- package/dist/middleware/server-middleware.js +9 -5
- package/dist/middleware/server-middleware.js.map +1 -1
- package/dist/route_guards/route-guard-factory.js +2 -2
- package/dist/route_guards/withAuthenticatedRouteGuard/initDefaultJwtKeyManagerForAuthenticatedRouteGuard.js +5 -5
- package/dist/route_guards/withAuthenticatedRouteGuard/withAuthenticatedApiRouteGuard.js +7 -6
- package/dist/route_guards/withAuthenticatedRouteGuard/withAuthenticatedApiRouteGuard.js.map +1 -1
- package/dist/route_guards/withAuthenticatedRouteGuard/withAuthenticatedServerComponentRouteGuard.js +7 -6
- package/dist/route_guards/withAuthenticatedRouteGuard/withAuthenticatedServerComponentRouteGuard.js.map +1 -1
- package/package.json +8 -8
- package/dist/env/get-schemavaults-auth-server-uri.d.ts +0 -1
- package/dist/env/get-schemavaults-auth-server-uri.js +0 -21
- package/dist/env/get-schemavaults-auth-server-uri.js.map +0 -1
|
@@ -2,16 +2,16 @@ import type { ICacheableJwtKeyManager } from "../../JwtKeyManager/ICacheableJwtK
|
|
|
2
2
|
import type { JWKS } from "@schemavaults/jwt";
|
|
3
3
|
import { type ApiServerId } from "@schemavaults/app-definitions";
|
|
4
4
|
export interface IRemoteJwtKeyManagerConstructorOpts {
|
|
5
|
-
|
|
5
|
+
auth_server_url?: string;
|
|
6
6
|
debug?: boolean;
|
|
7
7
|
cache_ttl_ms?: number;
|
|
8
8
|
}
|
|
9
9
|
export declare class RemoteJwtKeyManager implements ICacheableJwtKeyManager {
|
|
10
|
-
private readonly
|
|
10
|
+
private readonly auth_server_url;
|
|
11
11
|
private readonly debug;
|
|
12
12
|
private readonly cache_ttl_ms;
|
|
13
13
|
private static readonly jwksCache;
|
|
14
|
-
constructor({
|
|
14
|
+
constructor({ auth_server_url, ...opts }: IRemoteJwtKeyManagerConstructorOpts);
|
|
15
15
|
private cacheKey;
|
|
16
16
|
invalidateJwksCache(audienceId: string): void;
|
|
17
17
|
protected loadJwksAccessPrivateKey(): Promise<CryptoKey>;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import loadRemoteJwks from "./loadRemoteJwks";
|
|
2
|
-
import { apiServerIdSchema,
|
|
3
|
-
import getSchemaVaultsAuthServerUri from "../../env/get-schemavaults-auth-server-
|
|
2
|
+
import { apiServerIdSchema, getAuthServerAppId, } from "@schemavaults/app-definitions";
|
|
3
|
+
import getSchemaVaultsAuthServerUri from "../../env/get-schemavaults-auth-server-url";
|
|
4
4
|
import loadJwksAccessPrivateKey, { JWKS_ACCESS_PRIVATE_KEY_ENV_VAR_NAME, } from "../../env/loadJwksAccessPrivateKey";
|
|
5
5
|
const DEFAULT_CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
6
6
|
export class RemoteJwtKeyManager {
|
|
7
|
-
|
|
7
|
+
auth_server_url;
|
|
8
8
|
debug;
|
|
9
9
|
cache_ttl_ms;
|
|
10
10
|
static jwksCache = new Map();
|
|
11
|
-
constructor({
|
|
12
|
-
this.
|
|
11
|
+
constructor({ auth_server_url = getSchemaVaultsAuthServerUri(), ...opts }) {
|
|
12
|
+
this.auth_server_url = auth_server_url;
|
|
13
13
|
this.debug = typeof opts.debug === "boolean" ? opts.debug : false;
|
|
14
14
|
this.cache_ttl_ms =
|
|
15
15
|
typeof opts.cache_ttl_ms === "number" && opts.cache_ttl_ms > 0
|
|
@@ -17,7 +17,7 @@ export class RemoteJwtKeyManager {
|
|
|
17
17
|
: DEFAULT_CACHE_TTL_MS;
|
|
18
18
|
}
|
|
19
19
|
cacheKey(audienceId) {
|
|
20
|
-
return `${this.
|
|
20
|
+
return `${this.auth_server_url}::${audienceId}`;
|
|
21
21
|
}
|
|
22
22
|
invalidateJwksCache(audienceId) {
|
|
23
23
|
const key = this.cacheKey(audienceId);
|
|
@@ -41,7 +41,7 @@ export class RemoteJwtKeyManager {
|
|
|
41
41
|
if (!apiServerIdSchema.safeParse(audienceId).success) {
|
|
42
42
|
throw new Error(`Invalid audience to load remote JWKS for: '${audienceId}'`);
|
|
43
43
|
}
|
|
44
|
-
if (audienceId ===
|
|
44
|
+
if (audienceId === getAuthServerAppId()) {
|
|
45
45
|
throw new Error(`Auth server doesn't need to load remote JWKS; it already has the keys.`);
|
|
46
46
|
}
|
|
47
47
|
// Check static cache (shared across all instances)
|
|
@@ -58,7 +58,7 @@ export class RemoteJwtKeyManager {
|
|
|
58
58
|
console.log(`[RemoteJwtKeyManager] loadJwks(audience_id='${audienceId}') — fetching from remote (cacheKey='${key}')`);
|
|
59
59
|
}
|
|
60
60
|
const jwks = await loadRemoteJwks({
|
|
61
|
-
|
|
61
|
+
auth_server_url: this.auth_server_url,
|
|
62
62
|
api_server_id: audienceId,
|
|
63
63
|
jwks_access_private_key,
|
|
64
64
|
debug: this.debug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteJwtKeyManager.js","sourceRoot":"","sources":["../../../src/JwtKeyManager/RemoteJwtKeyManager/RemoteJwtKeyManager.ts"],"names":[],"mappings":"AAEA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAEL,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"RemoteJwtKeyManager.js","sourceRoot":"","sources":["../../../src/JwtKeyManager/RemoteJwtKeyManager/RemoteJwtKeyManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { apiServerIdSchema,
|
|
1
|
+
import { apiServerIdSchema, getAuthServerAppId, } from "@schemavaults/app-definitions";
|
|
2
2
|
export default function jwksEndpoint(api_server_id) {
|
|
3
3
|
if (!apiServerIdSchema.safeParse(api_server_id).success) {
|
|
4
4
|
throw new TypeError("Invalid 'api_server_id' to load JWKS endpoint URL for!");
|
|
5
5
|
}
|
|
6
|
-
if (api_server_id ===
|
|
7
|
-
throw new
|
|
6
|
+
if (api_server_id === getAuthServerAppId()) {
|
|
7
|
+
throw new TypeError("The auth server does not need to load JWKS via remote connection!");
|
|
8
8
|
}
|
|
9
9
|
return `/api/jwks/${api_server_id}`;
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwksEndpoint.js","sourceRoot":"","sources":["../../../src/JwtKeyManager/RemoteJwtKeyManager/jwksEndpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"jwksEndpoint.js","sourceRoot":"","sources":["../../../src/JwtKeyManager/RemoteJwtKeyManager/jwksEndpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,aAAgB;IAEhB,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CACjB,wDAAwD,CACzD,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,KAAK,kBAAkB,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,SAAS,CACjB,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,aAAa,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type JWKS } from "@schemavaults/jwt";
|
|
2
2
|
import { type ApiServerId } from "@schemavaults/app-definitions";
|
|
3
3
|
export interface ILoadRemoteJwksOpts {
|
|
4
|
-
|
|
4
|
+
auth_server_url: string;
|
|
5
5
|
api_server_id: ApiServerId;
|
|
6
6
|
jwks_access_private_key: CryptoKey;
|
|
7
7
|
debug?: boolean;
|
|
8
8
|
}
|
|
9
|
-
export declare function loadRemoteJwks({
|
|
9
|
+
export declare function loadRemoteJwks({ auth_server_url, api_server_id, jwks_access_private_key, ...opts }: ILoadRemoteJwksOpts): Promise<JWKS>;
|
|
10
10
|
export default loadRemoteJwks;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { createJwksAccessProofToken } from "@schemavaults/jwt";
|
|
2
2
|
import jwksEndpoint from "./jwksEndpoint";
|
|
3
3
|
import { apiServerIdSchema, } from "@schemavaults/app-definitions";
|
|
4
|
-
export async function loadRemoteJwks({
|
|
4
|
+
export async function loadRemoteJwks({ auth_server_url, api_server_id, jwks_access_private_key, ...opts }) {
|
|
5
5
|
const debug = typeof opts.debug === "boolean" ? opts.debug : false;
|
|
6
|
-
if (typeof
|
|
7
|
-
throw new TypeError("Expected '
|
|
6
|
+
if (typeof auth_server_url !== "string") {
|
|
7
|
+
throw new TypeError("Expected 'auth_server_url' to be a string!");
|
|
8
8
|
}
|
|
9
|
-
else if (!
|
|
10
|
-
!
|
|
11
|
-
throw new TypeError("Expected '
|
|
9
|
+
else if (!auth_server_url.startsWith("http://") &&
|
|
10
|
+
!auth_server_url.startsWith("https://")) {
|
|
11
|
+
throw new TypeError("Expected 'auth_server_url' to start with http:// or https://");
|
|
12
12
|
}
|
|
13
13
|
if (!apiServerIdSchema.safeParse(api_server_id).success) {
|
|
14
14
|
throw new TypeError("Invalid API server ID to load remote JWKS for!");
|
|
@@ -17,6 +17,7 @@ export async function loadRemoteJwks({ auth_server_uri, api_server_id, jwks_acce
|
|
|
17
17
|
try {
|
|
18
18
|
jwks_access_proof_token = await createJwksAccessProofToken({
|
|
19
19
|
api_server_id,
|
|
20
|
+
auth_server_url,
|
|
20
21
|
private_key: jwks_access_private_key,
|
|
21
22
|
});
|
|
22
23
|
}
|
|
@@ -24,7 +25,8 @@ export async function loadRemoteJwks({ auth_server_uri, api_server_id, jwks_acce
|
|
|
24
25
|
console.error(e);
|
|
25
26
|
throw new Error("Failed to create JWKS Access Proof Token!");
|
|
26
27
|
}
|
|
27
|
-
const
|
|
28
|
+
const endpoint = new URL(`${jwksEndpoint(api_server_id)}`, auth_server_url);
|
|
29
|
+
const response = await fetch(endpoint, {
|
|
28
30
|
method: "GET",
|
|
29
31
|
headers: new Headers({
|
|
30
32
|
Authorization: `Bearer ${jwks_access_proof_token}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadRemoteJwks.js","sourceRoot":"","sources":["../../../src/JwtKeyManager/RemoteJwtKeyManager/loadRemoteJwks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAa,MAAM,mBAAmB,CAAC;AAC1E,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAEL,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AASvC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,GAAG,IAAI,EACa;IACpB,MAAM,KAAK,GAAY,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAE5E,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACpE,CAAC;SAAM,IACL,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC;QACtC,CAAC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,EACvC,CAAC;QACD,MAAM,IAAI,SAAS,CACjB,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,uBAA+B,CAAC;IACpC,IAAI,CAAC;QACH,uBAAuB,GAAG,MAAM,0BAA0B,CAAC;YACzD,aAAa;YACb,WAAW,EAAE,uBAAuB;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"loadRemoteJwks.js","sourceRoot":"","sources":["../../../src/JwtKeyManager/RemoteJwtKeyManager/loadRemoteJwks.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.cjs
CHANGED
|
@@ -89,7 +89,7 @@ var init_resolve_codegen_templates_directory = __esm({
|
|
|
89
89
|
|
|
90
90
|
// src/NextjsAppDirectoryPlugin/codegen-marker.ts
|
|
91
91
|
function getCodegenMarkerComment() {
|
|
92
|
-
const version = true ? "0.
|
|
92
|
+
const version = true ? "0.26.0" : "unknown";
|
|
93
93
|
return `${CODEGEN_MARKER_PREFIX}${version}`;
|
|
94
94
|
}
|
|
95
95
|
function hasCodegenMarker(firstLine) {
|
|
@@ -331,7 +331,7 @@ async function main() {
|
|
|
331
331
|
return;
|
|
332
332
|
}
|
|
333
333
|
if (args.includes("--version") || args.includes("-v")) {
|
|
334
|
-
console.log(`${PACKAGE_NAME}@${"0.
|
|
334
|
+
console.log(`${PACKAGE_NAME}@${"0.26.0"}`);
|
|
335
335
|
return;
|
|
336
336
|
}
|
|
337
337
|
const command = args.find((arg) => !arg.startsWith("-")) ?? "codegen";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getAppEnvironment } from "./env/get-app-environment";
|
|
2
2
|
import { decodeJWTs, userDataSchema, } from "@schemavaults/auth-common";
|
|
3
3
|
import { JwtDecodingKeysetNotFoundError, loadJwtDecodingKeys, } from "./JwtKeyManager";
|
|
4
|
-
import { apiServerIdSchema, } from "@schemavaults/app-definitions";
|
|
4
|
+
import { apiServerIdSchema, getTokenAudienceForApiServerId, } from "@schemavaults/app-definitions";
|
|
5
5
|
import getSchemavaultsApiServerId from "./env/get-schemavaults-api-server-id";
|
|
6
6
|
import { decodeJWT as decodeSchemavaultsJwt, getKeysetIdFromToken, customJwtPayloadToUserData, } from "@schemavaults/jwt";
|
|
7
7
|
import isValidUuid from "./is-valid-uuid";
|
|
@@ -12,6 +12,10 @@ export async function decodeJWTsWithKeyManager(keys_manager, token_sources, jwt_
|
|
|
12
12
|
if (!apiServerIdSchema.safeParse(jwt_audience).success) {
|
|
13
13
|
throw new TypeError(`Invalid API server ID for 'jwt_audience': ${jwt_audience}`);
|
|
14
14
|
}
|
|
15
|
+
// `jwt_audience` is the stable api server id (used below for keyset
|
|
16
|
+
// lookups), but the token `aud` claim carries the token-audience form (the
|
|
17
|
+
// auth server URL for the auth app; the api server id verbatim otherwise).
|
|
18
|
+
const token_audience = getTokenAudienceForApiServerId(jwt_audience, environment);
|
|
15
19
|
if (!keys_manager) {
|
|
16
20
|
throw new TypeError("Failed to resolve reference to JWT keys manager to load keys to perform decode!");
|
|
17
21
|
}
|
|
@@ -19,7 +23,7 @@ export async function decodeJWTsWithKeyManager(keys_manager, token_sources, jwt_
|
|
|
19
23
|
try {
|
|
20
24
|
const user = await decodeJWTs({
|
|
21
25
|
token_sources,
|
|
22
|
-
jwt_audience,
|
|
26
|
+
jwt_audience: token_audience,
|
|
23
27
|
decodeJWT: async (opts) => {
|
|
24
28
|
const sourceHintLabel = typeof opts.sourceHint === "string" && opts.sourceHint.length > 0
|
|
25
29
|
? opts.sourceHint
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode-jwts-with-key-manager.js","sourceRoot":"","sources":["../src/decode-jwts-with-key-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,UAAU,EAGV,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,8BAA8B,EAC9B,mBAAmB,GAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,
|
|
1
|
+
{"version":3,"file":"decode-jwts-with-key-manager.js","sourceRoot":"","sources":["../src/decode-jwts-with-key-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function getSchemaVaultsAuthServerUrl(): string;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { getAppEnvironment, } from "@schemavaults/app-definitions/get-app-environment";
|
|
2
|
+
import { getAuthServerUrl } from "@schemavaults/app-definitions";
|
|
3
|
+
export default function getSchemaVaultsAuthServerUrl() {
|
|
4
|
+
return getAuthServerUrl(getAppEnvironment());
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=get-schemavaults-auth-server-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-schemavaults-auth-server-url.js","sourceRoot":"","sources":["../../src/env/get-schemavaults-auth-server-url.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,MAAM,CAAC,OAAO,UAAU,4BAA4B;IAClD,OAAO,gBAAgB,CACrB,iBAAiB,EAAuC,CACzD,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,10 +14,10 @@ import MaximumBrowserCookieSize from "./MaximumBrowserCookieSize";
|
|
|
14
14
|
export { MaximumBrowserCookieSize };
|
|
15
15
|
export { getSchemavaultsApiServerId } from "./env/get-schemavaults-api-server-id";
|
|
16
16
|
export type { ApiServerId } from "@schemavaults/app-definitions";
|
|
17
|
-
export { apiServerIdSchema
|
|
17
|
+
export { apiServerIdSchema } from "@schemavaults/app-definitions";
|
|
18
18
|
export { getSchemavaultsClientApplicationId } from "./env/get-schemavaults-client-application-id";
|
|
19
19
|
export type { AppId } from "@schemavaults/app-definitions";
|
|
20
|
-
export { appIdSchema
|
|
20
|
+
export { appIdSchema } from "@schemavaults/app-definitions";
|
|
21
21
|
export { RefreshTokenCookieName, RefreshTokenExpiryCookieName, } from "./RefreshTokenCookieNames";
|
|
22
22
|
export { default as getStringByteSize } from "./getStringByteSize";
|
|
23
23
|
export { redirectToLogin } from "./redirect-to-login";
|
|
@@ -30,9 +30,9 @@ export type { IDecodeJWTsWithKeyManagerOutput } from "./decode-jwts-with-key-man
|
|
|
30
30
|
export { isUserInOrganization } from "./isUserInOrganization";
|
|
31
31
|
export { userDataSchema } from "@schemavaults/auth-common";
|
|
32
32
|
export type { UserData } from "@schemavaults/auth-common";
|
|
33
|
-
export { organizationIdSchema, organizationDefinitionSchema, isValidOrganizationID,
|
|
33
|
+
export { organizationIdSchema, organizationDefinitionSchema, isValidOrganizationID, getAuthServerOwnerOrganizationId, DEFAULT_AUTH_SERVER_OWNER_ORGANIZATION_ID, isValidOrganizationMembershipRoleType, organizationMembershipRoleTypes, organizationMembershipRoleTypeSchema, } from "@schemavaults/auth-common/organizations";
|
|
34
34
|
export type { OrganizationID, OrganizationDefinition, OrganizationMembershipRoleType, } from "@schemavaults/auth-common/organizations";
|
|
35
35
|
export type { SchemaVaultsApp, SchemaVaultsAppDomainRef, } from "@schemavaults/app-definitions";
|
|
36
36
|
export type { SchemaVaultsApiServerDefinition, SchemaVaultsApiServerDomainRef, } from "@schemavaults/app-definitions";
|
|
37
|
-
export {
|
|
37
|
+
export { getAuthServerUrl } from "@schemavaults/app-definitions";
|
|
38
38
|
export { loadJwksAccessPrivateKey } from "./env/loadJwksAccessPrivateKey";
|
package/dist/index.js
CHANGED
|
@@ -8,10 +8,10 @@ import MaximumBrowserCookieSize from "./MaximumBrowserCookieSize";
|
|
|
8
8
|
export { MaximumBrowserCookieSize };
|
|
9
9
|
// API Server IDs
|
|
10
10
|
export { getSchemavaultsApiServerId } from "./env/get-schemavaults-api-server-id";
|
|
11
|
-
export { apiServerIdSchema
|
|
11
|
+
export { apiServerIdSchema } from "@schemavaults/app-definitions";
|
|
12
12
|
// Client Application IDs
|
|
13
13
|
export { getSchemavaultsClientApplicationId } from "./env/get-schemavaults-client-application-id";
|
|
14
|
-
export { appIdSchema
|
|
14
|
+
export { appIdSchema } from "@schemavaults/app-definitions";
|
|
15
15
|
// Cookie Names
|
|
16
16
|
export { RefreshTokenCookieName, RefreshTokenExpiryCookieName, } from "./RefreshTokenCookieNames";
|
|
17
17
|
export { default as getStringByteSize } from "./getStringByteSize";
|
|
@@ -26,8 +26,8 @@ export { isUserInOrganization } from "./isUserInOrganization";
|
|
|
26
26
|
// Re-export user data types
|
|
27
27
|
export { userDataSchema } from "@schemavaults/auth-common";
|
|
28
28
|
// Re-export organization types
|
|
29
|
-
export { organizationIdSchema, organizationDefinitionSchema, isValidOrganizationID,
|
|
29
|
+
export { organizationIdSchema, organizationDefinitionSchema, isValidOrganizationID, getAuthServerOwnerOrganizationId, DEFAULT_AUTH_SERVER_OWNER_ORGANIZATION_ID, isValidOrganizationMembershipRoleType, organizationMembershipRoleTypes, organizationMembershipRoleTypeSchema, } from "@schemavaults/auth-common/organizations";
|
|
30
30
|
// Loading hardcoded apps/apis
|
|
31
|
-
export {
|
|
31
|
+
export { getAuthServerUrl } from "@schemavaults/app-definitions";
|
|
32
32
|
export { loadJwksAccessPrivateKey } from "./env/loadJwksAccessPrivateKey";
|
|
33
33
|
//# 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,cAAc,cAAc,CAAC;AAG7B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,yBAAyB,CAAC;AAGxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EACL,qBAAqB,EACrB,cAAc,GACf,MAAM,qCAAqC,CAAC;AAG7C,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,CAAC;AAEpC,iBAAiB;AACjB,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAG7B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,yBAAyB,CAAC;AAGxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EACL,qBAAqB,EACrB,cAAc,GACf,MAAM,qCAAqC,CAAC;AAG7C,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,CAAC;AAEpC,iBAAiB;AACjB,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,yBAAyB;AACzB,OAAO,EAAE,kCAAkC,EAAE,MAAM,8CAA8C,CAAC;AAElG,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,eAAe;AACf,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,kBAAkB;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AAEjF,gBAAgB;AAChB,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAG1E,6EAA6E;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,4BAA4B;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,+BAA+B;AAC/B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,EACrB,gCAAgC,EAChC,yCAAyC,EACzC,qCAAqC,EACrC,+BAA+B,EAC/B,oCAAoC,GACrC,MAAM,yCAAyC,CAAC;AAmBjD,8BAA8B;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -27,10 +27,11 @@ export async function isUserInOrganization(auth_server_url, api_server_id, jwks_
|
|
|
27
27
|
}
|
|
28
28
|
const assertion = await createJwksAccessProofToken({
|
|
29
29
|
api_server_id,
|
|
30
|
+
auth_server_url,
|
|
30
31
|
private_key: jwks_access_private_key,
|
|
31
32
|
});
|
|
32
|
-
const url =
|
|
33
|
-
const response = await fetch(url, {
|
|
33
|
+
const url = new URL(`/api/resource-server/organizations/${encodeURIComponent(organization_id)}/members/${encodeURIComponent(uid)}/role`, auth_server_url);
|
|
34
|
+
const response = await fetch(url.toString(), {
|
|
34
35
|
method: "GET",
|
|
35
36
|
headers: new Headers({
|
|
36
37
|
Authorization: `Bearer ${assertion}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isUserInOrganization.js","sourceRoot":"","sources":["../src/isUserInOrganization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAEL,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,qCAAqC,EACrC,oBAAoB,GAGrB,MAAM,yCAAyC,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,eAAuB,EACvB,aAA0B,EAC1B,uBAAkC,EAClC,GAAW,EACX,eAA+B;IAE/B,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7D,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"isUserInOrganization.js","sourceRoot":"","sources":["../src/isUserInOrganization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAEL,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,qCAAqC,EACrC,oBAAoB,GAGrB,MAAM,yCAAyC,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,eAAuB,EACvB,aAA0B,EAC1B,uBAAkC,EAClC,GAAW,EACX,eAA+B;IAE/B,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7D,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAW,MAAM,0BAA0B,CAAC;QACzD,aAAa;QACb,eAAe;QACf,WAAW,EAAE,uBAAuB;KACrC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,sCAAsC,kBAAkB,CAAC,eAAe,CAAC,YAAY,kBAAkB,CAAC,GAAG,CAAC,OAAO,EACnH,eAAe,CAChB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;QAC3C,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,IAAI,OAAO,CAAC;YACnB,aAAa,EAAE,UAAU,SAAS,EAAE;YACpC,iBAAiB,EAAE,aAAa;SACjC,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,qEAAqE,QAAQ,CAAC,MAAM,GAAG,CACxF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC5C,IACE,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,IAAI;QACL,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC;QACpB,CAAC,IAAI,CAAC,OAAO;QACb,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAC7B,CAAC,IAAI,CAAC,IAAI,EACV,CAAC;QACD,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAA+B,CAAC;IAClD,IACE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAC7B,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,EAChD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -3,3 +3,5 @@ export type { IServerMiddlewareInitializationOptions } from "./server-middleware
|
|
|
3
3
|
export type { ISchemaVaultsMiddleware } from "./middleware_types";
|
|
4
4
|
export type { SchemaVaultsCORSEnforcementPolicy } from "./middlewares/withCorsSettings";
|
|
5
5
|
export { SchemaVaultsCORSEnforcementPolicies } from "./middlewares/withCorsSettings";
|
|
6
|
+
export { RemoteAllowedOriginsResolver } from "./middlewares/withCorsSettings";
|
|
7
|
+
export type { IAllowedOriginsResolver, IRemoteAllowedOriginsResolverConstructorOpts, } from "./middlewares/withCorsSettings";
|
package/dist/middleware/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAKnE,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAKnE,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { AuthMiddleware, defaultAuthMiddlewareRules, determineAuthStatus, createAudienceSchema, } from "@schemavaults/auth-common";
|
|
2
3
|
import { decodeJWT, getKeysetIdFromToken, } from "@schemavaults/jwt";
|
|
3
|
-
import { apiServerIdSchema,
|
|
4
|
+
import { apiServerIdSchema, getAuthServerAppId, } from "@schemavaults/app-definitions";
|
|
4
5
|
import BaseMiddleware from "../BaseMiddleware";
|
|
5
6
|
import doLoadJwtDecodingKeys from "../../../JwtKeyManager/loadJwtDecodingKeys";
|
|
6
7
|
import { RefreshTokenCookieName } from "../../../RefreshTokenCookieNames";
|
|
@@ -52,8 +53,9 @@ class AuthJwtValidationMiddleware extends BaseMiddleware {
|
|
|
52
53
|
const token_sources = [];
|
|
53
54
|
// Load Tokens from cookies
|
|
54
55
|
let access_token = req.cookies.get("access_token")?.value;
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
const auth_server_app_id = getAuthServerAppId();
|
|
57
|
+
if (this.audience === auth_server_app_id) {
|
|
58
|
+
const refresh_token = req.cookies.get(RefreshTokenCookieName(auth_server_app_id))?.value;
|
|
57
59
|
if (typeof refresh_token === "string") {
|
|
58
60
|
token_sources.push({
|
|
59
61
|
token: refresh_token,
|
|
@@ -90,7 +92,7 @@ class AuthJwtValidationMiddleware extends BaseMiddleware {
|
|
|
90
92
|
});
|
|
91
93
|
}
|
|
92
94
|
const jwt_audience = this.audience;
|
|
93
|
-
const parsed_jwt_audience = await
|
|
95
|
+
const parsed_jwt_audience = await createAudienceSchema(z, this.environment).safeParseAsync(jwt_audience);
|
|
94
96
|
if (!parsed_jwt_audience.success) {
|
|
95
97
|
console.error(parsed_jwt_audience.error);
|
|
96
98
|
throw new Error("[withAuthJwtValidation] Received invalid JWT audience to enforce!");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withAuthJwtValidation.js","sourceRoot":"","sources":["../../../../src/middleware/middlewares/withAuthJwtValidation/withAuthJwtValidation.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EAGd,0BAA0B,EAC1B,mBAAmB,EAGnB,
|
|
1
|
+
{"version":3,"file":"withAuthJwtValidation.js","sourceRoot":"","sources":["../../../../src/middleware/middlewares/withAuthJwtValidation/withAuthJwtValidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ApiServerId } from "@schemavaults/app-definitions";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the list of origins allowed to make cross-origin requests to a
|
|
4
|
+
* resource server: the domains of every client app connected to the given
|
|
5
|
+
* API server.
|
|
6
|
+
*/
|
|
7
|
+
export interface IAllowedOriginsResolver {
|
|
8
|
+
loadAllowedOrigins(api_server_id: ApiServerId): Promise<readonly string[]>;
|
|
9
|
+
isConfigured(): boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function isAllowedOriginsResolver(value: unknown): value is IAllowedOriginsResolver;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function isAllowedOriginsResolver(value) {
|
|
2
|
+
return (typeof value === "object" &&
|
|
3
|
+
value !== null &&
|
|
4
|
+
"loadAllowedOrigins" in value &&
|
|
5
|
+
typeof value.loadAllowedOrigins === "function" &&
|
|
6
|
+
"isConfigured" in value &&
|
|
7
|
+
typeof value.isConfigured === "function");
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=IAllowedOriginsResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IAllowedOriginsResolver.js","sourceRoot":"","sources":["../../../../../src/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/IAllowedOriginsResolver.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,wBAAwB,CACtC,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,oBAAoB,IAAI,KAAK;QAC7B,OAAO,KAAK,CAAC,kBAAkB,KAAK,UAAU;QAC9C,cAAc,IAAI,KAAK;QACvB,OAAO,KAAK,CAAC,YAAY,KAAK,UAAU,CACzC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { IAllowedOriginsResolver } from "./IAllowedOriginsResolver";
|
|
2
|
+
import { type ApiServerId } from "@schemavaults/app-definitions";
|
|
3
|
+
export interface IRemoteAllowedOriginsResolverConstructorOpts {
|
|
4
|
+
auth_server_url?: string;
|
|
5
|
+
debug?: boolean;
|
|
6
|
+
cache_ttl_ms?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class RemoteAllowedOriginsResolver implements IAllowedOriginsResolver {
|
|
9
|
+
private readonly auth_server_url;
|
|
10
|
+
private readonly debug;
|
|
11
|
+
private readonly cache_ttl_ms;
|
|
12
|
+
private static readonly originsCache;
|
|
13
|
+
private static readonly inFlight;
|
|
14
|
+
constructor({ auth_server_url, ...opts }: IRemoteAllowedOriginsResolverConstructorOpts);
|
|
15
|
+
private cacheKey;
|
|
16
|
+
invalidateAllowedOriginsCache(api_server_id: string): void;
|
|
17
|
+
protected loadJwksAccessPrivateKey(): Promise<CryptoKey>;
|
|
18
|
+
protected fetchOrigins(api_server_id: ApiServerId, jwks_access_private_key: CryptoKey): Promise<readonly string[]>;
|
|
19
|
+
loadAllowedOrigins(api_server_id: ApiServerId): Promise<readonly string[]>;
|
|
20
|
+
isConfigured(): boolean;
|
|
21
|
+
}
|
|
22
|
+
export default RemoteAllowedOriginsResolver;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import loadRemoteAllowedOrigins from "./loadRemoteAllowedOrigins";
|
|
2
|
+
import { apiServerIdSchema, getAuthServerAppId, } from "@schemavaults/app-definitions";
|
|
3
|
+
import getSchemaVaultsAuthServerUri from "../../../../env/get-schemavaults-auth-server-url";
|
|
4
|
+
import loadJwksAccessPrivateKey, { JWKS_ACCESS_PRIVATE_KEY_ENV_VAR_NAME, } from "../../../../env/loadJwksAccessPrivateKey";
|
|
5
|
+
const DEFAULT_CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
6
|
+
export class RemoteAllowedOriginsResolver {
|
|
7
|
+
auth_server_url;
|
|
8
|
+
debug;
|
|
9
|
+
cache_ttl_ms;
|
|
10
|
+
static originsCache = new Map();
|
|
11
|
+
// Unlike the JWKS cache, this lookup runs on every cross-origin request,
|
|
12
|
+
// so concurrent misses must share one fetch (and one single-use proof
|
|
13
|
+
// token) instead of each minting their own.
|
|
14
|
+
static inFlight = new Map();
|
|
15
|
+
constructor({ auth_server_url = getSchemaVaultsAuthServerUri(), ...opts }) {
|
|
16
|
+
this.auth_server_url = auth_server_url;
|
|
17
|
+
this.debug = typeof opts.debug === "boolean" ? opts.debug : false;
|
|
18
|
+
this.cache_ttl_ms =
|
|
19
|
+
typeof opts.cache_ttl_ms === "number" && opts.cache_ttl_ms > 0
|
|
20
|
+
? opts.cache_ttl_ms
|
|
21
|
+
: DEFAULT_CACHE_TTL_MS;
|
|
22
|
+
}
|
|
23
|
+
cacheKey(api_server_id) {
|
|
24
|
+
return `${this.auth_server_url}::${api_server_id}`;
|
|
25
|
+
}
|
|
26
|
+
invalidateAllowedOriginsCache(api_server_id) {
|
|
27
|
+
const key = this.cacheKey(api_server_id);
|
|
28
|
+
if (this.debug) {
|
|
29
|
+
console.log(`[RemoteAllowedOriginsResolver] invalidateAllowedOriginsCache(api_server_id='${api_server_id}', cacheKey='${key}')`);
|
|
30
|
+
}
|
|
31
|
+
RemoteAllowedOriginsResolver.originsCache.delete(key);
|
|
32
|
+
}
|
|
33
|
+
async loadJwksAccessPrivateKey() {
|
|
34
|
+
let jwks_access_private_key;
|
|
35
|
+
try {
|
|
36
|
+
jwks_access_private_key = await loadJwksAccessPrivateKey(process.env);
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
console.error(e);
|
|
40
|
+
throw new TypeError("Failed to load JWKS access private key from environment variables!");
|
|
41
|
+
}
|
|
42
|
+
return jwks_access_private_key;
|
|
43
|
+
}
|
|
44
|
+
async fetchOrigins(api_server_id, jwks_access_private_key) {
|
|
45
|
+
return await loadRemoteAllowedOrigins({
|
|
46
|
+
auth_server_url: this.auth_server_url,
|
|
47
|
+
api_server_id,
|
|
48
|
+
jwks_access_private_key,
|
|
49
|
+
debug: this.debug,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async loadAllowedOrigins(api_server_id) {
|
|
53
|
+
if (!apiServerIdSchema.safeParse(api_server_id).success) {
|
|
54
|
+
throw new Error(`Invalid API server ID to load allowed origins for: '${api_server_id}'`);
|
|
55
|
+
}
|
|
56
|
+
if (api_server_id === getAuthServerAppId()) {
|
|
57
|
+
throw new Error(`Auth server doesn't load allowed origins remotely; it already has database access.`);
|
|
58
|
+
}
|
|
59
|
+
// Check static cache (shared across all instances)
|
|
60
|
+
const key = this.cacheKey(api_server_id);
|
|
61
|
+
const cached = RemoteAllowedOriginsResolver.originsCache.get(key);
|
|
62
|
+
if (cached && Date.now() - cached.fetchedAt < this.cache_ttl_ms) {
|
|
63
|
+
if (this.debug) {
|
|
64
|
+
console.log(`[RemoteAllowedOriginsResolver] loadAllowedOrigins(api_server_id='${api_server_id}') — cache hit (cacheKey='${key}')`);
|
|
65
|
+
}
|
|
66
|
+
return cached.origins;
|
|
67
|
+
}
|
|
68
|
+
const inFlight = RemoteAllowedOriginsResolver.inFlight.get(key);
|
|
69
|
+
if (inFlight) {
|
|
70
|
+
if (this.debug) {
|
|
71
|
+
console.log(`[RemoteAllowedOriginsResolver] loadAllowedOrigins(api_server_id='${api_server_id}') — joining in-flight fetch (cacheKey='${key}')`);
|
|
72
|
+
}
|
|
73
|
+
return await inFlight;
|
|
74
|
+
}
|
|
75
|
+
if (this.debug) {
|
|
76
|
+
console.log(`[RemoteAllowedOriginsResolver] loadAllowedOrigins(api_server_id='${api_server_id}') — fetching from remote (cacheKey='${key}')`);
|
|
77
|
+
}
|
|
78
|
+
const fetchPromise = (async () => {
|
|
79
|
+
const jwks_access_private_key = await this.loadJwksAccessPrivateKey();
|
|
80
|
+
const origins = await this.fetchOrigins(api_server_id, jwks_access_private_key);
|
|
81
|
+
RemoteAllowedOriginsResolver.originsCache.set(key, {
|
|
82
|
+
origins,
|
|
83
|
+
fetchedAt: Date.now(),
|
|
84
|
+
});
|
|
85
|
+
return origins;
|
|
86
|
+
})();
|
|
87
|
+
RemoteAllowedOriginsResolver.inFlight.set(key, fetchPromise);
|
|
88
|
+
try {
|
|
89
|
+
// Errors propagate to the caller and are NOT cached; the next request
|
|
90
|
+
// retries the fetch.
|
|
91
|
+
return await fetchPromise;
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
RemoteAllowedOriginsResolver.inFlight.delete(key);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
isConfigured() {
|
|
98
|
+
if (typeof process.env[JWKS_ACCESS_PRIVATE_KEY_ENV_VAR_NAME] === "string" &&
|
|
99
|
+
process.env[JWKS_ACCESS_PRIVATE_KEY_ENV_VAR_NAME].length > 0) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export default RemoteAllowedOriginsResolver;
|
|
106
|
+
//# sourceMappingURL=RemoteAllowedOriginsResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteAllowedOriginsResolver.js","sourceRoot":"","sources":["../../../../../src/middleware/middlewares/withCorsSettings/RemoteAllowedOriginsResolver/RemoteAllowedOriginsResolver.ts"],"names":[],"mappings":"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"}
|