@schemavaults/auth-server-sdk 0.17.15 → 0.19.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/dist/AccessTokenCookieNames.d.ts +1 -0
- package/dist/AccessTokenCookieNames.js +2 -0
- package/dist/AccessTokenCookieNames.js.map +1 -0
- package/dist/JwtKeyManager/RemoteJwtKeyManager/RemoteJwtKeyManager.d.ts +3 -1
- package/dist/JwtKeyManager/RemoteJwtKeyManager/RemoteJwtKeyManager.js +4 -1
- package/dist/JwtKeyManager/RemoteJwtKeyManager/RemoteJwtKeyManager.js.map +1 -1
- package/dist/JwtKeyManager/RemoteJwtKeyManager/loadRemoteJwks.d.ts +2 -1
- package/dist/JwtKeyManager/RemoteJwtKeyManager/loadRemoteJwks.js +25 -4
- package/dist/JwtKeyManager/RemoteJwtKeyManager/loadRemoteJwks.js.map +1 -1
- package/dist/MaximumBrowserCookieSize.d.ts +1 -1
- package/dist/MaximumBrowserCookieSize.js +1 -1
- package/dist/MaximumBrowserCookieSize.js.map +1 -1
- package/dist/NextjsAppDirectoryPlugin/NextjsAppDirectoryPlugin.d.ts +5 -0
- package/dist/NextjsAppDirectoryPlugin/NextjsAppDirectoryPlugin.js +8 -0
- package/dist/NextjsAppDirectoryPlugin/NextjsAppDirectoryPlugin.js.map +1 -0
- package/dist/NextjsAppDirectoryPlugin/codegen.d.ts +4 -0
- package/dist/NextjsAppDirectoryPlugin/codegen.js +80 -0
- package/dist/NextjsAppDirectoryPlugin/codegen.js.map +1 -0
- package/dist/NextjsAppDirectoryPlugin/index.d.ts +2 -0
- package/dist/NextjsAppDirectoryPlugin/index.js +2 -0
- package/dist/NextjsAppDirectoryPlugin/index.js.map +1 -0
- package/dist/NextjsAppDirectoryPlugin/resolve-app-directory.d.ts +1 -0
- package/dist/NextjsAppDirectoryPlugin/resolve-app-directory.js +29 -0
- package/dist/NextjsAppDirectoryPlugin/resolve-app-directory.js.map +1 -0
- package/dist/NextjsAppDirectoryPlugin/resolve-codegen-templates-directory.d.ts +1 -0
- package/dist/NextjsAppDirectoryPlugin/resolve-codegen-templates-directory.js +6 -0
- package/dist/NextjsAppDirectoryPlugin/resolve-codegen-templates-directory.js.map +1 -0
- package/dist/RefreshTokenCookieNames.d.ts +1 -3
- package/dist/RefreshTokenCookieNames.js +1 -3
- package/dist/RefreshTokenCookieNames.js.map +1 -1
- package/dist/codegen-templates/auth/auth-provider.tsx +57 -0
- package/dist/codegen-templates/auth/authorize/page.tsx +54 -0
- package/dist/codegen-templates/auth/login/page.tsx +27 -0
- package/dist/codegen-templates/auth/logout/page.tsx +11 -0
- package/dist/codegen-templates/auth/register/page.tsx +29 -0
- package/dist/env/loadJwksAccessPrivateKey/index.d.ts +2 -0
- package/dist/env/loadJwksAccessPrivateKey/index.js +3 -0
- package/dist/env/loadJwksAccessPrivateKey/index.js.map +1 -0
- package/dist/env/loadJwksAccessPrivateKey/loadJwksAccessPrivateKey.js +42 -0
- package/dist/env/loadJwksAccessPrivateKey/loadJwksAccessPrivateKey.js.map +1 -0
- package/dist/get-app-environment.d.ts +2 -0
- package/dist/get-app-environment.js +2 -0
- package/dist/get-app-environment.js.map +1 -0
- package/dist/get-schemavaults-client-application-id.d.ts +10 -0
- package/dist/get-schemavaults-client-application-id.js +21 -0
- package/dist/get-schemavaults-client-application-id.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/middlewares/withAuthJwtValidation/withAuthJwtValidation.js +11 -8
- package/dist/middleware/middlewares/withAuthJwtValidation/withAuthJwtValidation.js.map +1 -1
- package/dist/middleware/middlewares/withCorsSettings/isAllowedOrigin.d.ts +1 -1
- package/dist/middleware/middlewares/withCorsSettings/isAllowedOrigin.js +1 -0
- package/dist/middleware/middlewares/withCorsSettings/isAllowedOrigin.js.map +1 -1
- package/dist/route_guards/assertValidRouteGuardType.d.ts +1 -0
- package/dist/route_guards/assertValidRouteGuardType.js +6 -0
- package/dist/route_guards/assertValidRouteGuardType.js.map +1 -0
- package/dist/route_guards/index.d.ts +2 -2
- package/dist/route_guards/index.js.map +1 -1
- package/dist/route_guards/route-guard-factory.js +1 -0
- package/dist/route_guards/route-guard-factory.js.map +1 -1
- package/dist/route_guards/withAdminRouteGuard.d.ts +5 -21
- package/dist/route_guards/withAdminRouteGuard.js +5 -124
- package/dist/route_guards/withAdminRouteGuard.js.map +1 -1
- package/dist/route_guards/withAuthenticatedRouteGuard.d.ts +9 -16
- package/dist/route_guards/withAuthenticatedRouteGuard.js +146 -42
- package/dist/route_guards/withAuthenticatedRouteGuard.js.map +1 -1
- package/package.json +16 -6
- package/dist/env/loadJwksAccessPrivateKey.js +0 -33
- package/dist/env/loadJwksAccessPrivateKey.js.map +0 -1
- /package/dist/env/{loadJwksAccessPrivateKey.d.ts → loadJwksAccessPrivateKey/loadJwksAccessPrivateKey.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { AccessTokenCookieName, AccessTokenExpiryCookieName, } from "@schemavaults/auth-common/AccessTokenCookieNames";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccessTokenCookieNames.js","sourceRoot":"","sources":["../src/AccessTokenCookieNames.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,kDAAkD,CAAC"}
|
|
@@ -3,10 +3,12 @@ import type { JWKS } from "@schemavaults/jwt";
|
|
|
3
3
|
import { ApiServerId } from "@schemavaults/app-definitions";
|
|
4
4
|
export interface IRemoteJwtKeyManagerConstructorOpts {
|
|
5
5
|
auth_server_uri?: string;
|
|
6
|
+
debug?: boolean;
|
|
6
7
|
}
|
|
7
8
|
export declare class RemoteJwtKeyManager implements IJwtKeyManager {
|
|
8
9
|
private readonly auth_server_uri;
|
|
9
|
-
|
|
10
|
+
private readonly debug;
|
|
11
|
+
constructor({ auth_server_uri, ...opts }: IRemoteJwtKeyManagerConstructorOpts);
|
|
10
12
|
loadJwks(audienceId: ApiServerId): Promise<JWKS>;
|
|
11
13
|
}
|
|
12
14
|
export default RemoteJwtKeyManager;
|
|
@@ -4,8 +4,10 @@ import getSchemaVaultsAuthServerUri from "../../get-schemavaults-auth-server-uri
|
|
|
4
4
|
import loadJwksAccessPrivateKey from "../../env/loadJwksAccessPrivateKey";
|
|
5
5
|
export class RemoteJwtKeyManager {
|
|
6
6
|
auth_server_uri;
|
|
7
|
-
|
|
7
|
+
debug;
|
|
8
|
+
constructor({ auth_server_uri = getSchemaVaultsAuthServerUri(), ...opts }) {
|
|
8
9
|
this.auth_server_uri = auth_server_uri;
|
|
10
|
+
this.debug = typeof opts.debug === "boolean" ? opts.debug : false;
|
|
9
11
|
}
|
|
10
12
|
async loadJwks(audienceId) {
|
|
11
13
|
if (!apiServerIdSchema.safeParse(audienceId).success) {
|
|
@@ -26,6 +28,7 @@ export class RemoteJwtKeyManager {
|
|
|
26
28
|
auth_server_uri: this.auth_server_uri,
|
|
27
29
|
api_server_id: audienceId,
|
|
28
30
|
jwks_access_private_key,
|
|
31
|
+
debug: this.debug,
|
|
29
32
|
});
|
|
30
33
|
}
|
|
31
34
|
}
|
|
@@ -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,gCAAgC,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,4BAA4B,MAAM,oCAAoC,CAAC;AAC9E,OAAO,wBAAwB,MAAM,gCAAgC,CAAC;
|
|
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,gCAAgC,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,4BAA4B,MAAM,oCAAoC,CAAC;AAC9E,OAAO,wBAAwB,MAAM,gCAAgC,CAAC;AAOtE,MAAM,OAAO,mBAAmB;IACb,eAAe,CAAS;IACxB,KAAK,CAAU;IAEhC,YAAmB,EACjB,eAAe,GAAG,4BAA4B,EAAE,EAChD,GAAG,IAAI,EAC6B;QACpC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACpE,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,UAAuB;QAC3C,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,8CAA8C,UAAU,GAAG,CAC5D,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,KAAK,gCAAgC,CAAC,MAAM,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;QACJ,CAAC;QAED,IAAI,uBAAkC,CAAC;QACvC,IAAI,CAAC;YACH,uBAAuB,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,SAAS,CACjB,oEAAoE,CACrE,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,cAAc,CAAC;YAC1B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,aAAa,EAAE,UAAU;YACzB,uBAAuB;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;IACL,CAAC;CACF;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -4,6 +4,7 @@ export interface ILoadRemoteJwksOpts {
|
|
|
4
4
|
auth_server_uri: string;
|
|
5
5
|
api_server_id: ApiServerId;
|
|
6
6
|
jwks_access_private_key: CryptoKey;
|
|
7
|
+
debug?: boolean;
|
|
7
8
|
}
|
|
8
|
-
export declare function loadRemoteJwks({ auth_server_uri, api_server_id, jwks_access_private_key, }: ILoadRemoteJwksOpts): Promise<JWKS>;
|
|
9
|
+
export declare function loadRemoteJwks({ auth_server_uri, api_server_id, jwks_access_private_key, ...opts }: ILoadRemoteJwksOpts): Promise<JWKS>;
|
|
9
10
|
export default loadRemoteJwks;
|
|
@@ -1,7 +1,8 @@
|
|
|
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({ auth_server_uri, api_server_id, jwks_access_private_key, }) {
|
|
4
|
+
export async function loadRemoteJwks({ auth_server_uri, api_server_id, jwks_access_private_key, ...opts }) {
|
|
5
|
+
const debug = typeof opts.debug === "boolean" ? opts.debug : false;
|
|
5
6
|
if (typeof auth_server_uri !== "string") {
|
|
6
7
|
throw new TypeError("Expected 'auth_server_uri' to be a string!");
|
|
7
8
|
}
|
|
@@ -34,13 +35,33 @@ export async function loadRemoteJwks({ auth_server_uri, api_server_id, jwks_acce
|
|
|
34
35
|
}
|
|
35
36
|
const body = await response.json();
|
|
36
37
|
if (typeof body !== "object" || !body) {
|
|
37
|
-
throw new TypeError("Expected result of loading jwks.json to be
|
|
38
|
+
throw new TypeError("Expected result of loading jwks.json to be a JavaScript object!");
|
|
38
39
|
}
|
|
39
40
|
if (!("keys" in body) || !Array.isArray(body["keys"])) {
|
|
40
41
|
throw new Error("Expected response body of jwks.json to have a 'keys' array field!");
|
|
41
42
|
}
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
const nKeys = body["keys"].length;
|
|
44
|
+
if (nKeys === 0) {
|
|
45
|
+
return { keys: [] };
|
|
46
|
+
}
|
|
47
|
+
const allKeysHaveValidType = body["keys"].every((key) => typeof key === "object" && key ? true : false);
|
|
48
|
+
if (!allKeysHaveValidType) {
|
|
49
|
+
let errorMessage = `Not all items in 'keys' array (length=${nKeys}) are objects!`;
|
|
50
|
+
const existingTypesInBadKeysArray = new Set();
|
|
51
|
+
for (const key of body["keys"]) {
|
|
52
|
+
existingTypesInBadKeysArray.add(typeof key);
|
|
53
|
+
}
|
|
54
|
+
const badKeyTypes = [
|
|
55
|
+
...existingTypesInBadKeysArray.values(),
|
|
56
|
+
];
|
|
57
|
+
errorMessage += " ";
|
|
58
|
+
errorMessage +=
|
|
59
|
+
"Types in 'keys' array include: " +
|
|
60
|
+
badKeyTypes.map((t) => `"${t}"`).join(", ");
|
|
61
|
+
if (debug) {
|
|
62
|
+
console.error("Bad 'keys' array that caused error: ", body["keys"]);
|
|
63
|
+
}
|
|
64
|
+
throw new TypeError(errorMessage);
|
|
44
65
|
}
|
|
45
66
|
const keys = body["keys"];
|
|
46
67
|
return { keys };
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"loadRemoteJwks.js","sourceRoot":"","sources":["../../../src/JwtKeyManager/RemoteJwtKeyManager/loadRemoteJwks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaximumBrowserCookieSize.js","sourceRoot":"","sources":["../src/MaximumBrowserCookieSize.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"MaximumBrowserCookieSize.js","sourceRoot":"","sources":["../src/MaximumBrowserCookieSize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,CAAC;AACpC,eAAe,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export class NextjsAppDirectoryPlugin {
|
|
2
|
+
static async codegen(opts) {
|
|
3
|
+
const gen = await import("./codegen").then((m) => m.default);
|
|
4
|
+
return await gen(opts);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export default NextjsAppDirectoryPlugin;
|
|
8
|
+
//# sourceMappingURL=NextjsAppDirectoryPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NextjsAppDirectoryPlugin.js","sourceRoot":"","sources":["../../src/NextjsAppDirectoryPlugin/NextjsAppDirectoryPlugin.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,wBAAwB;IAC5B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAwC;QAClE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;CACF;AAED,eAAe,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
2
|
+
import { dirname } from "path";
|
|
3
|
+
import resolveAppDirectory from "./resolve-app-directory";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import resolveCodegenTemplatesDirectory from "./resolve-codegen-templates-directory";
|
|
6
|
+
const pagesToCreate = [
|
|
7
|
+
{
|
|
8
|
+
app_dir_path: "/auth/login",
|
|
9
|
+
codegen_template_path: "auth/login/page.tsx",
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
app_dir_path: "/auth/register",
|
|
13
|
+
codegen_template_path: "auth/register/page.tsx",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
app_dir_path: "/auth/logout",
|
|
17
|
+
codegen_template_path: "auth/logout/page.tsx",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
app_dir_path: "/auth/authorize",
|
|
21
|
+
codegen_template_path: "auth/authorize/page.tsx",
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
function createClientPages(appDirectory, templatesDir) {
|
|
25
|
+
for (const page of pagesToCreate) {
|
|
26
|
+
const destPath = join(appDirectory, page.app_dir_path, "page.tsx");
|
|
27
|
+
if (existsSync(destPath)) {
|
|
28
|
+
console.log(` - skipping '${page.app_dir_path}/page.tsx' (already exists)`);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const destDir = dirname(destPath);
|
|
32
|
+
if (!existsSync(destDir)) {
|
|
33
|
+
mkdirSync(destDir, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
const templatePath = join(templatesDir, page.codegen_template_path);
|
|
36
|
+
const templateContent = readFileSync(templatePath, {
|
|
37
|
+
encoding: "utf-8",
|
|
38
|
+
});
|
|
39
|
+
writeFileSync(destPath, templateContent, { encoding: "utf-8" });
|
|
40
|
+
console.log(` - created '${page.app_dir_path}/page.tsx'`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function createClientAuthProvider(appDirectory, templatesDir) {
|
|
44
|
+
const srcTemplatePath = join(templatesDir, "auth", "auth-provider.tsx");
|
|
45
|
+
const destPath = join(appDirectory, "auth", "auth-provider.tsx");
|
|
46
|
+
if (existsSync(destPath)) {
|
|
47
|
+
console.log(` - skipping 'auth/auth-provider.tsx' (already exists)`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const destDir = dirname(destPath);
|
|
51
|
+
if (!existsSync(destDir)) {
|
|
52
|
+
mkdirSync(destDir, { recursive: true });
|
|
53
|
+
}
|
|
54
|
+
const templateContent = readFileSync(srcTemplatePath, {
|
|
55
|
+
encoding: "utf-8",
|
|
56
|
+
});
|
|
57
|
+
writeFileSync(destPath, templateContent, { encoding: "utf-8" });
|
|
58
|
+
console.log(` - created 'auth/auth-provider.tsx'`);
|
|
59
|
+
}
|
|
60
|
+
export default async function codegen(opts) {
|
|
61
|
+
console.log(`[@schemavaults/auth-server-sdk/NextjsAppDirectoryPlugin] Running codegen:`);
|
|
62
|
+
const appDirectory = resolveAppDirectory();
|
|
63
|
+
console.log(` - resolved /app directory at '${appDirectory}'`);
|
|
64
|
+
const authDirectory = join(appDirectory, "auth");
|
|
65
|
+
if (!existsSync(authDirectory)) {
|
|
66
|
+
mkdirSync(authDirectory);
|
|
67
|
+
console.log(` - created /auth directory at '${authDirectory}'`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.log(` - /auth directory already exists at '${authDirectory}'`);
|
|
71
|
+
}
|
|
72
|
+
const templatesDir = typeof opts?.codegenTemplatesDirectory === "string"
|
|
73
|
+
? opts.codegenTemplatesDirectory
|
|
74
|
+
: resolveCodegenTemplatesDirectory();
|
|
75
|
+
console.log(` - resolved codegen templates directory at '${templatesDir}'`);
|
|
76
|
+
createClientPages(appDirectory, templatesDir);
|
|
77
|
+
createClientAuthProvider(appDirectory, templatesDir);
|
|
78
|
+
console.log(`[@schemavaults/auth-server-sdk/NextjsAppDirectoryPlugin] Codegen complete.`);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=codegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/NextjsAppDirectoryPlugin/codegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/NextjsAppDirectoryPlugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,IAAI,OAAO,GACpC,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function resolveAppDirectory(): string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { join } from "path";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
import { cwd } from "process";
|
|
4
|
+
function resolveProjectRoot() {
|
|
5
|
+
const current = cwd();
|
|
6
|
+
if (existsSync(join(current, "package.json")) &&
|
|
7
|
+
(existsSync(join(current, "next.config.js")) ||
|
|
8
|
+
existsSync(join(current, "next.config.ts")) ||
|
|
9
|
+
existsSync(join(current, "next.config.mjs")) ||
|
|
10
|
+
existsSync(join(current, "next.config.cjs")))) {
|
|
11
|
+
return current;
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
throw new Error("Failed to resolve package root!");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export default function resolveAppDirectory() {
|
|
18
|
+
const projectRoot = resolveProjectRoot();
|
|
19
|
+
if (existsSync(join(projectRoot, "src", "app"))) {
|
|
20
|
+
return join(projectRoot, "src", "app");
|
|
21
|
+
}
|
|
22
|
+
else if (existsSync(join(projectRoot, "app"))) {
|
|
23
|
+
return join(projectRoot, "app");
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
throw new Error("Failed to resolve Next.js app/ directory!");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=resolve-app-directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-app-directory.js","sourceRoot":"","sources":["../../src/NextjsAppDirectoryPlugin/resolve-app-directory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,SAAS,kBAAkB;IACzB,MAAM,OAAO,GAAW,GAAG,EAAE,CAAC;IAC9B,IACE,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACzC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAC1C,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YAC5C,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC/C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB;IACzC,MAAM,WAAW,GAAW,kBAAkB,EAAE,CAAC;IACjD,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function resolveCodegenTemplatesDirectory(): string;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { dirname, join } from "path";
|
|
2
|
+
export default function resolveCodegenTemplatesDirectory() {
|
|
3
|
+
// Templates are copied into the dist/codegen-templates directory during build
|
|
4
|
+
return join(dirname(__dirname), "codegen-templates");
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=resolve-codegen-templates-directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-codegen-templates-directory.js","sourceRoot":"","sources":["../../src/NextjsAppDirectoryPlugin/resolve-codegen-templates-directory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,CAAC,OAAO,UAAU,gCAAgC;IACtD,8EAA8E;IAC9E,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -1,3 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export declare const RefreshTokenExpiryCookieName: "refresh_token_expiry";
|
|
3
|
-
export default RefreshTokenCookieName;
|
|
1
|
+
export { RefreshTokenCookieName, RefreshTokenExpiryCookieName, } from "@schemavaults/auth-common/RefreshTokenCookieNames";
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export const RefreshTokenExpiryCookieName = "refresh_token_expiry";
|
|
3
|
-
export default RefreshTokenCookieName;
|
|
1
|
+
export { RefreshTokenCookieName, RefreshTokenExpiryCookieName, } from "@schemavaults/auth-common/RefreshTokenCookieNames";
|
|
4
2
|
//# sourceMappingURL=RefreshTokenCookieNames.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefreshTokenCookieNames.js","sourceRoot":"","sources":["../src/RefreshTokenCookieNames.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RefreshTokenCookieNames.js","sourceRoot":"","sources":["../src/RefreshTokenCookieNames.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,mDAAmD,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
AuthProvider,
|
|
5
|
+
type SchemaVaultsAppEnvironment,
|
|
6
|
+
type AppId,
|
|
7
|
+
} from "@schemavaults/auth-react-provider";
|
|
8
|
+
import { usePathname, useRouter } from "next/navigation";
|
|
9
|
+
import type { PropsWithChildren } from "react";
|
|
10
|
+
|
|
11
|
+
export interface IAppAuthProviderProps extends PropsWithChildren {
|
|
12
|
+
environment: SchemaVaultsAppEnvironment;
|
|
13
|
+
app_id: AppId;
|
|
14
|
+
default_audiences: readonly string[];
|
|
15
|
+
debug?: boolean;
|
|
16
|
+
authed_on_unauthed_redirect_uri: string;
|
|
17
|
+
unauthed_on_authed_redirect_uri: string;
|
|
18
|
+
successful_logout_redirect_uri: string;
|
|
19
|
+
successful_authentication_redirect_uri: string;
|
|
20
|
+
authorize_uri: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export default function AppAuthProvider({
|
|
24
|
+
environment,
|
|
25
|
+
app_id,
|
|
26
|
+
...props
|
|
27
|
+
}: IAppAuthProviderProps) {
|
|
28
|
+
const router = useRouter();
|
|
29
|
+
const path: string = usePathname();
|
|
30
|
+
const debug: boolean =
|
|
31
|
+
typeof props.debug === "boolean"
|
|
32
|
+
? props.debug
|
|
33
|
+
: environment !== "production";
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<AuthProvider
|
|
37
|
+
app_id={app_id}
|
|
38
|
+
authed_on_unauthed_redirect_uri={props.authed_on_unauthed_redirect_uri}
|
|
39
|
+
unauthed_on_authed_redirect_uri={props.unauthed_on_authed_redirect_uri}
|
|
40
|
+
successful_logout_redirect_uri={props.successful_logout_redirect_uri}
|
|
41
|
+
successful_authentication_redirect_uri={
|
|
42
|
+
props.successful_authentication_redirect_uri
|
|
43
|
+
}
|
|
44
|
+
authorize_uri={props.authorize_uri}
|
|
45
|
+
router={router}
|
|
46
|
+
path={path}
|
|
47
|
+
default_audiences={props.default_audiences}
|
|
48
|
+
debug={debug}
|
|
49
|
+
environment={environment}
|
|
50
|
+
fetch={async (url: string, init: RequestInit | undefined) =>
|
|
51
|
+
await fetch(url, init)
|
|
52
|
+
}
|
|
53
|
+
>
|
|
54
|
+
{props.children}
|
|
55
|
+
</AuthProvider>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import type { ReactElement } from "react";
|
|
4
|
+
import { useRouter, useSearchParams } from "next/navigation";
|
|
5
|
+
import { LoadingPage, useToast } from "@schemavaults/ui";
|
|
6
|
+
import {
|
|
7
|
+
type ISchemaVaultsAuthClient,
|
|
8
|
+
type SchemaVaultsAppEnvironment,
|
|
9
|
+
useAppEnvironment,
|
|
10
|
+
useAuth,
|
|
11
|
+
useTradeAuthorizationCodeForTokensEffect,
|
|
12
|
+
} from "@schemavaults/auth-react-provider";
|
|
13
|
+
|
|
14
|
+
interface ExchangeAuthCodeForTokensManagerComponentProps {
|
|
15
|
+
auth: ISchemaVaultsAuthClient;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function ExchangeAuthCodeForTokensManagerComponent({
|
|
19
|
+
auth,
|
|
20
|
+
}: ExchangeAuthCodeForTokensManagerComponentProps): ReactElement {
|
|
21
|
+
const router = useRouter();
|
|
22
|
+
const searchParams = useSearchParams();
|
|
23
|
+
const { toast } = useToast();
|
|
24
|
+
const environment: SchemaVaultsAppEnvironment = useAppEnvironment();
|
|
25
|
+
useTradeAuthorizationCodeForTokensEffect({
|
|
26
|
+
router,
|
|
27
|
+
searchParams,
|
|
28
|
+
auth,
|
|
29
|
+
toast,
|
|
30
|
+
debug: environment !== "production",
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<>
|
|
35
|
+
<LoadingPage message="Trading authorization code & proof code for tokens..." />
|
|
36
|
+
</>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default function AuthorizePage(): ReactElement {
|
|
41
|
+
const auth = useAuth();
|
|
42
|
+
|
|
43
|
+
if (!auth || !auth.ready || !auth.client || !auth.client.current) {
|
|
44
|
+
return (
|
|
45
|
+
<>
|
|
46
|
+
<LoadingPage message="Loading auth client..." />
|
|
47
|
+
</>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const authClient: ISchemaVaultsAuthClient = auth.client.current;
|
|
52
|
+
|
|
53
|
+
return <ExchangeAuthCodeForTokensManagerComponent auth={authClient} />;
|
|
54
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { LoadingPage, useToast } from "@schemavaults/ui";
|
|
4
|
+
import { useStartLoginOauthPKCEFlow } from "@schemavaults/auth-react-provider";
|
|
5
|
+
import { type ReactElement } from "react";
|
|
6
|
+
|
|
7
|
+
export default function LoginPage(): ReactElement {
|
|
8
|
+
const { toast } = useToast();
|
|
9
|
+
|
|
10
|
+
function onError(e: unknown): void {
|
|
11
|
+
toast({
|
|
12
|
+
variant: "destructive",
|
|
13
|
+
title: "Error starting login flow",
|
|
14
|
+
description:
|
|
15
|
+
e instanceof Error ? e.message : "An unknown error has occurred!",
|
|
16
|
+
});
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
useStartLoginOauthPKCEFlow({ onError });
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<>
|
|
24
|
+
<LoadingPage message="Commencing login flow..." />
|
|
25
|
+
</>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useLogoutEffect } from "@schemavaults/auth-react-provider";
|
|
4
|
+
import { LoadingPage } from "@schemavaults/ui";
|
|
5
|
+
import type { ReactElement } from "react";
|
|
6
|
+
|
|
7
|
+
export default function LogoutPage(): ReactElement {
|
|
8
|
+
useLogoutEffect();
|
|
9
|
+
|
|
10
|
+
return <LoadingPage message="Logging you out..." />;
|
|
11
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { LoadingPage } from "@schemavaults/ui";
|
|
4
|
+
import { useStartRegisterOauthPKCEFlow } from "@schemavaults/auth-react-provider";
|
|
5
|
+
import { useToast } from "@schemavaults/ui";
|
|
6
|
+
import type { ReactElement } from "react";
|
|
7
|
+
|
|
8
|
+
export default function RegisterPage(): ReactElement {
|
|
9
|
+
const { toast } = useToast();
|
|
10
|
+
|
|
11
|
+
function onError(e: unknown): void {
|
|
12
|
+
toast({
|
|
13
|
+
variant: "destructive",
|
|
14
|
+
title: "Error starting register flow!",
|
|
15
|
+
description:
|
|
16
|
+
e instanceof Error ? e.message : "An unknown error has occurred!",
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
useStartRegisterOauthPKCEFlow({
|
|
21
|
+
onError,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<>
|
|
26
|
+
<LoadingPage message="Commencing register flow..." />
|
|
27
|
+
</>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/env/loadJwksAccessPrivateKey/index.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,IAAI,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { importPKCS8, isValidBase64UrlEncoding, PEMFormat, sign_verify_alg, } from "@schemavaults/jwt";
|
|
2
|
+
const key = "SCHEMAVAULTS_AUTH_JWKS_ACCESS_PRIVATE_KEY";
|
|
3
|
+
export default async function loadJwksAccessPrivateKey(env = process.env) {
|
|
4
|
+
const debug = "NODE_ENV" in env &&
|
|
5
|
+
(env["NODE_ENV"] === "development" || env["NODE_ENV"] === "test");
|
|
6
|
+
if (typeof env === "object" &&
|
|
7
|
+
key in env &&
|
|
8
|
+
typeof env[key] === "string" &&
|
|
9
|
+
env[key].length > 0) {
|
|
10
|
+
const environmentVariable = env[key];
|
|
11
|
+
if (debug) {
|
|
12
|
+
console.log(`[loadJwksAccessPrivateKey] Found env var with key '${key}'!`);
|
|
13
|
+
}
|
|
14
|
+
let pem;
|
|
15
|
+
if (PEMFormat.isPemFormat(environmentVariable, "PRIVATE", debug)) {
|
|
16
|
+
try {
|
|
17
|
+
pem = PEMFormat.parsePem(environmentVariable, "PRIVATE");
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
console.error(`Failed to import environment variable '${key}' from PEM-encoded environment variable: `, e);
|
|
21
|
+
throw new TypeError(`Failed to import environment variable '${key}' from PEM-encoded environment variable!`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else if (isValidBase64UrlEncoding(environmentVariable)) {
|
|
25
|
+
try {
|
|
26
|
+
pem = PEMFormat.fromBase64Url(environmentVariable, "PRIVATE", debug);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
console.error(`Failed to convert base64url-formatted private key into PEM-format: `, e);
|
|
30
|
+
throw new TypeError(`Failed to import environment variable '${key}' from base64url-encoded environment variable!`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
throw new TypeError(`Failed to determine what format the key in environment variable '${key}' is in!`);
|
|
35
|
+
}
|
|
36
|
+
return await importPKCS8(pem.value, sign_verify_alg);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
throw new TypeError(`Environment variable '${key}' missing!`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=loadJwksAccessPrivateKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadJwksAccessPrivateKey.js","sourceRoot":"","sources":["../../../src/env/loadJwksAccessPrivateKey/loadJwksAccessPrivateKey.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,SAAS,EACT,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,GAAG,GAAG,2CAAoD,CAAC;AAEjE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,wBAAwB,CACpD,MAAc,OAAO,CAAC,GAAG;IAEzB,MAAM,KAAK,GACT,UAAU,IAAI,GAAG;QACjB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,CAAC;IAEpE,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,IAAI,GAAG;QACV,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ;QAC5B,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EACnB,CAAC;QACD,MAAM,mBAAmB,GAAW,GAAG,CAAC,GAAG,CAAC,CAAC;QAE7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CACT,sDAAsD,GAAG,IAAI,CAC9D,CAAC;QACJ,CAAC;QAED,IAAI,GAAc,CAAC;QACnB,IAAI,SAAS,CAAC,WAAW,CAAC,mBAAmB,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;YACjE,IAAI,CAAC;gBACH,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,CAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CACX,0CAA0C,GAAG,2CAA2C,EACxF,CAAC,CACF,CAAC;gBACF,MAAM,IAAI,SAAS,CACjB,0CAA0C,GAAG,0CAA0C,CACxF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,wBAAwB,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC;gBACH,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,mBAAmB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;YAAC,OAAO,CAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CACX,qEAAqE,EACrE,CAAC,CACF,CAAC;gBACF,MAAM,IAAI,SAAS,CACjB,0CAA0C,GAAG,gDAAgD,CAC9F,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,SAAS,CACjB,oEAAoE,GAAG,UAAU,CAClF,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,SAAS,CAAC,yBAAyB,GAAG,YAAY,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-app-environment.js","sourceRoot":"","sources":["../src/get-app-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,IAAI,OAAO,GAC7B,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ApiServerId } from "@schemavaults/app-definitions";
|
|
2
|
+
export { type ApiServerId } from "@schemavaults/app-definitions";
|
|
3
|
+
/**
|
|
4
|
+
* @description Loads the client app ID. This is usually defined on the client-side, but this is useful in the auth-server-sdk
|
|
5
|
+
* for cases where one app is both the client & server (e.g. Next.js)
|
|
6
|
+
* @returns Parsed value of process.env.SCHEMAVAULTS_CLIENT_APP_ID
|
|
7
|
+
*/
|
|
8
|
+
declare function getSchemavaultsClientApplicationId(): ApiServerId;
|
|
9
|
+
export { getSchemavaultsClientApplicationId };
|
|
10
|
+
export default getSchemavaultsClientApplicationId;
|