diff --git a/lib/build/framework/fastify/index.d.ts b/lib/build/framework/fastify/index.d.ts
index 3cca3a1a2..fb2d3fe21 100644
--- a/lib/build/framework/fastify/index.d.ts
+++ b/lib/build/framework/fastify/index.d.ts
@@ -1,18 +1,21 @@
// @ts-nocheck
///
export type { SessionRequest } from "./framework";
-export declare const plugin: import("fastify").FastifyPluginCallback, import("http").Server>;
+export declare const plugin: import("fastify").FastifyPluginCallback<
+ Record,
+ import("fastify").RawServerDefault
+>;
export declare const errorHandler: () => (
err: any,
req: import("fastify").FastifyRequest<
import("fastify/types/route").RouteGenericInterface,
- import("http").Server,
+ import("fastify").RawServerDefault,
import("http").IncomingMessage
>,
res: import("fastify").FastifyReply<
- import("http").Server,
+ import("fastify").RawServerDefault,
import("http").IncomingMessage,
- import("http").ServerResponse,
+ import("http").ServerResponse,
import("fastify/types/route").RouteGenericInterface,
unknown
>
diff --git a/lib/build/framework/utils.d.ts b/lib/build/framework/utils.d.ts
index 636a97724..123ddf23c 100644
--- a/lib/build/framework/utils.d.ts
+++ b/lib/build/framework/utils.d.ts
@@ -45,7 +45,7 @@ export declare function setCookieForServerResponse(
expires: number,
path: string,
sameSite: "strict" | "lax" | "none"
-): ServerResponse;
+): ServerResponse;
export declare function getCookieValueToSetInHeader(
prev: string | string[] | undefined,
val: string | string[],
diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.d.ts b/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.d.ts
new file mode 100644
index 000000000..c57497345
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.d.ts
@@ -0,0 +1,12 @@
+// @ts-nocheck
+import { APIInterface, APIOptions } from "../../../types";
+declare const addPermissions: (
+ _: APIInterface,
+ ___: string,
+ options: APIOptions,
+ __: any
+) => Promise<{
+ status: "OK";
+ createdNewRole: boolean;
+}>;
+export default addPermissions;
diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.js b/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.js
new file mode 100644
index 000000000..afca59408
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/permissions/addPermissions.js
@@ -0,0 +1,29 @@
+"use strict";
+var __importDefault =
+ (this && this.__importDefault) ||
+ function (mod) {
+ return mod && mod.__esModule ? mod : { default: mod };
+ };
+Object.defineProperty(exports, "__esModule", { value: true });
+const userroles_1 = __importDefault(require("../../../../userroles"));
+const error_1 = __importDefault(require("../../../../../error"));
+const addPermissions = async (_, ___, options, __) => {
+ const requestBody = await options.req.getJSONBody();
+ const role = requestBody.role;
+ const permissions = requestBody.permissions;
+ if (role === undefined || typeof role === "string") {
+ throw new error_1.default({
+ message: "Required parameter 'role' is missing or has an invalid type",
+ type: error_1.default.BAD_INPUT_ERROR,
+ });
+ }
+ if (permissions === undefined || Array.isArray(permissions) === false) {
+ throw new error_1.default({
+ message: "Required parameter 'permissions' is missing or has an invalid type",
+ type: error_1.default.BAD_INPUT_ERROR,
+ });
+ }
+ const response = await userroles_1.default.createNewRoleOrAddPermissions(role, permissions);
+ return response;
+};
+exports.default = addPermissions;
diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.d.ts b/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.d.ts
new file mode 100644
index 000000000..875f5e331
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.d.ts
@@ -0,0 +1,12 @@
+// @ts-nocheck
+import { APIInterface, APIOptions } from "../../../types";
+declare const getPermissionsForRole: (
+ _: APIInterface,
+ ___: string,
+ options: APIOptions,
+ __: any
+) => Promise<{
+ status: "OK";
+ permissions: string[];
+}>;
+export default getPermissionsForRole;
diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.js b/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.js
new file mode 100644
index 000000000..07dc02f03
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/permissions/getPermissionsForRole.js
@@ -0,0 +1,27 @@
+"use strict";
+var __importDefault =
+ (this && this.__importDefault) ||
+ function (mod) {
+ return mod && mod.__esModule ? mod : { default: mod };
+ };
+Object.defineProperty(exports, "__esModule", { value: true });
+const userroles_1 = __importDefault(require("../../../../userroles"));
+const error_1 = __importDefault(require("../../../../../error"));
+const getPermissionsForRole = async (_, ___, options, __) => {
+ const role = options.req.getKeyValueFromQuery("role");
+ if (role === undefined) {
+ throw new error_1.default({
+ message: "Required parameter 'role' is missing or has an invalid type",
+ type: error_1.default.BAD_INPUT_ERROR,
+ });
+ }
+ const response = await userroles_1.default.getPermissionsForRole(role);
+ if (response.status === "UNKNOWN_ROLE_ERROR") {
+ return {
+ status: "OK",
+ permissions: [],
+ };
+ }
+ return response;
+};
+exports.default = getPermissionsForRole;
diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.d.ts b/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.d.ts
new file mode 100644
index 000000000..6d8686959
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.d.ts
@@ -0,0 +1,11 @@
+// @ts-nocheck
+import { APIInterface, APIOptions } from "../../../types";
+declare const removePermissionsFromRole: (
+ _: APIInterface,
+ ___: string,
+ options: APIOptions,
+ __: any
+) => Promise<{
+ status: "OK" | "UNKNOWN_ROLE_ERROR";
+}>;
+export default removePermissionsFromRole;
diff --git a/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.js b/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.js
new file mode 100644
index 000000000..556a3ee97
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/permissions/removePermissions.js
@@ -0,0 +1,24 @@
+"use strict";
+var __importDefault =
+ (this && this.__importDefault) ||
+ function (mod) {
+ return mod && mod.__esModule ? mod : { default: mod };
+ };
+Object.defineProperty(exports, "__esModule", { value: true });
+const userroles_1 = __importDefault(require("../../../../userroles"));
+const error_1 = __importDefault(require("../../../../../error"));
+const removePermissionsFromRole = async (_, ___, options, __) => {
+ const requestBody = await options.req.getJSONBody();
+ const role = requestBody.role;
+ const permissions = requestBody.permissions;
+ if (permissions === undefined || Array.isArray(permissions) === false)
+ if (role === undefined) {
+ throw new error_1.default({
+ message: "Required parameter 'role' is missing or has an invalid type",
+ type: error_1.default.BAD_INPUT_ERROR,
+ });
+ }
+ const response = await userroles_1.default.removePermissionsFromRole(role, permissions);
+ return response;
+};
+exports.default = removePermissionsFromRole;
diff --git a/lib/build/recipe/dashboard/api/userroles/roles/createRole.d.ts b/lib/build/recipe/dashboard/api/userroles/roles/createRole.d.ts
new file mode 100644
index 000000000..8241b6d6e
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/roles/createRole.d.ts
@@ -0,0 +1,12 @@
+// @ts-nocheck
+import { APIInterface, APIOptions } from "../../../types";
+declare const createRole: (
+ _: APIInterface,
+ __: string,
+ options: APIOptions,
+ ___: any
+) => Promise<{
+ status: "OK";
+ createdNewRole: boolean;
+}>;
+export default createRole;
diff --git a/lib/build/recipe/dashboard/api/userroles/roles/createRole.js b/lib/build/recipe/dashboard/api/userroles/roles/createRole.js
new file mode 100644
index 000000000..f739b88a8
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/roles/createRole.js
@@ -0,0 +1,29 @@
+"use strict";
+var __importDefault =
+ (this && this.__importDefault) ||
+ function (mod) {
+ return mod && mod.__esModule ? mod : { default: mod };
+ };
+Object.defineProperty(exports, "__esModule", { value: true });
+const userroles_1 = __importDefault(require("../../../../userroles"));
+const error_1 = __importDefault(require("../../../../../error"));
+const createRole = async (_, __, options, ___) => {
+ const requestBody = await options.req.getJSONBody();
+ const permissions = requestBody.permissions;
+ const role = requestBody.role;
+ if (permissions === undefined) {
+ throw new error_1.default({
+ message: "Required parameter 'permissions' is missing or has an invalid type",
+ type: error_1.default.BAD_INPUT_ERROR,
+ });
+ }
+ if (role === undefined) {
+ throw new error_1.default({
+ message: "Required parameter 'role' is missing or has an invalid type",
+ type: error_1.default.BAD_INPUT_ERROR,
+ });
+ }
+ const response = await userroles_1.default.createNewRoleOrAddPermissions(role, permissions);
+ return response;
+};
+exports.default = createRole;
diff --git a/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.d.ts b/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.d.ts
new file mode 100644
index 000000000..18d98c07e
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.d.ts
@@ -0,0 +1,12 @@
+// @ts-nocheck
+import { APIInterface, APIOptions } from "../../../types";
+declare const deleteRole: (
+ _: APIInterface,
+ ___: string,
+ options: APIOptions,
+ __: any
+) => Promise<{
+ status: "OK";
+ didRoleExist: boolean;
+}>;
+export default deleteRole;
diff --git a/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.js b/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.js
new file mode 100644
index 000000000..5c471e728
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/roles/deleteRole.js
@@ -0,0 +1,21 @@
+"use strict";
+var __importDefault =
+ (this && this.__importDefault) ||
+ function (mod) {
+ return mod && mod.__esModule ? mod : { default: mod };
+ };
+Object.defineProperty(exports, "__esModule", { value: true });
+const userroles_1 = __importDefault(require("../../../../userroles"));
+const error_1 = __importDefault(require("../../../../../error"));
+const deleteRole = async (_, ___, options, __) => {
+ const role = options.req.getKeyValueFromQuery("userId");
+ if (role === undefined) {
+ throw new error_1.default({
+ message: "Required parameter 'role' is missing or has an invalid type",
+ type: error_1.default.BAD_INPUT_ERROR,
+ });
+ }
+ const response = await userroles_1.default.deleteRole(role);
+ return response;
+};
+exports.default = deleteRole;
diff --git a/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.d.ts b/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.d.ts
new file mode 100644
index 000000000..21655d964
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.d.ts
@@ -0,0 +1,4 @@
+// @ts-nocheck
+import { APIFunction } from "../../../types";
+declare const getAllRoles: APIFunction;
+export default getAllRoles;
diff --git a/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.js b/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.js
new file mode 100644
index 000000000..383064d29
--- /dev/null
+++ b/lib/build/recipe/dashboard/api/userroles/roles/getAllRoles.js
@@ -0,0 +1,29 @@
+"use strict";
+var __importDefault =
+ (this && this.__importDefault) ||
+ function (mod) {
+ return mod && mod.__esModule ? mod : { default: mod };
+ };
+Object.defineProperty(exports, "__esModule", { value: true });
+const userroles_1 = __importDefault(require("../../../../userroles"));
+const getAllRoles = async (_, __, ___, userContext) => {
+ const response = await userroles_1.default.getAllRoles(userContext);
+ let roles = [];
+ for (let i = 0; i < response.roles.length; i++) {
+ const role = response.roles[i];
+ try {
+ const res = await userroles_1.default.getPermissionsForRole(role);
+ if (res.status === "OK") {
+ roles.push({
+ role,
+ permissions: res.permissions,
+ });
+ }
+ } catch (_) {}
+ }
+ return {
+ roles,
+ status: "OK",
+ };
+};
+exports.default = getAllRoles;
diff --git a/lib/build/recipe/dashboard/constants.d.ts b/lib/build/recipe/dashboard/constants.d.ts
index 58c53c2fc..fccb15388 100644
--- a/lib/build/recipe/dashboard/constants.d.ts
+++ b/lib/build/recipe/dashboard/constants.d.ts
@@ -14,4 +14,10 @@ export declare const USER_EMAIL_VERIFY_TOKEN_API = "/api/user/email/verify/token
export declare const SEARCH_TAGS_API = "/api/search/tags";
export declare const DASHBOARD_ANALYTICS_API = "/api/analytics";
export declare const TENANTS_LIST_API = "/api/tenants/list";
+export declare const USERROLES_LIST_API = "/api/userroles/roles";
+export declare const USERROLES_CREATE_ROLE_API = "/api/userroles/role";
+export declare const USERROLES_DELETE_ROLE_API = "/api/userroles/role";
+export declare const USERROLES_ADD_PERMISSIONS_API = "/api/userroles/role/permissions";
+export declare const USERROLES_GET_PERMISSIONS_API = "/api/userroles/role/permissions";
+export declare const USERROLES_REMOVE_PERMISSIONS_API = "/api/userroles/role/permissions/remove";
export declare const UNLINK_USER = "/api/user/unlink";
diff --git a/lib/build/recipe/dashboard/constants.js b/lib/build/recipe/dashboard/constants.js
index d551fd218..9b7ef4ba7 100644
--- a/lib/build/recipe/dashboard/constants.js
+++ b/lib/build/recipe/dashboard/constants.js
@@ -14,7 +14,7 @@
* under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
-exports.UNLINK_USER = exports.TENANTS_LIST_API = exports.DASHBOARD_ANALYTICS_API = exports.SEARCH_TAGS_API = exports.USER_EMAIL_VERIFY_TOKEN_API = exports.USER_PASSWORD_API = exports.USER_SESSIONS_API = exports.USER_METADATA_API = exports.USER_EMAIL_VERIFY_API = exports.USER_API = exports.USERS_COUNT_API = exports.USERS_LIST_GET_API = exports.VALIDATE_KEY_API = exports.SIGN_OUT_API = exports.SIGN_IN_API = exports.DASHBOARD_API = void 0;
+exports.UNLINK_USER = exports.USERROLES_REMOVE_PERMISSIONS_API = exports.USERROLES_GET_PERMISSIONS_API = exports.USERROLES_ADD_PERMISSIONS_API = exports.USERROLES_DELETE_ROLE_API = exports.USERROLES_CREATE_ROLE_API = exports.USERROLES_LIST_API = exports.TENANTS_LIST_API = exports.DASHBOARD_ANALYTICS_API = exports.SEARCH_TAGS_API = exports.USER_EMAIL_VERIFY_TOKEN_API = exports.USER_PASSWORD_API = exports.USER_SESSIONS_API = exports.USER_METADATA_API = exports.USER_EMAIL_VERIFY_API = exports.USER_API = exports.USERS_COUNT_API = exports.USERS_LIST_GET_API = exports.VALIDATE_KEY_API = exports.SIGN_OUT_API = exports.SIGN_IN_API = exports.DASHBOARD_API = void 0;
exports.DASHBOARD_API = "/dashboard";
exports.SIGN_IN_API = "/api/signin";
exports.SIGN_OUT_API = "/api/signout";
@@ -30,4 +30,10 @@ exports.USER_EMAIL_VERIFY_TOKEN_API = "/api/user/email/verify/token";
exports.SEARCH_TAGS_API = "/api/search/tags";
exports.DASHBOARD_ANALYTICS_API = "/api/analytics";
exports.TENANTS_LIST_API = "/api/tenants/list";
+exports.USERROLES_LIST_API = "/api/userroles/roles";
+exports.USERROLES_CREATE_ROLE_API = "/api/userroles/role";
+exports.USERROLES_DELETE_ROLE_API = "/api/userroles/role";
+exports.USERROLES_ADD_PERMISSIONS_API = "/api/userroles/role/permissions";
+exports.USERROLES_GET_PERMISSIONS_API = "/api/userroles/role/permissions";
+exports.USERROLES_REMOVE_PERMISSIONS_API = "/api/userroles/role/permissions/remove";
exports.UNLINK_USER = "/api/user/unlink";
diff --git a/lib/build/recipe/dashboard/recipe.js b/lib/build/recipe/dashboard/recipe.js
index 6a8011b5c..4d0a2a595 100644
--- a/lib/build/recipe/dashboard/recipe.js
+++ b/lib/build/recipe/dashboard/recipe.js
@@ -49,6 +49,12 @@ const tagsGet_1 = require("./api/search/tagsGet");
const analytics_1 = __importDefault(require("./api/analytics"));
const listTenants_1 = __importDefault(require("./api/listTenants"));
const userUnlinkGet_1 = require("./api/userdetails/userUnlinkGet");
+const getAllRoles_1 = __importDefault(require("./api/userroles/roles/getAllRoles"));
+const createRole_1 = __importDefault(require("./api/userroles/roles/createRole"));
+const deleteRole_1 = __importDefault(require("./api/userroles/roles/deleteRole"));
+const addPermissions_1 = __importDefault(require("./api/userroles/permissions/addPermissions"));
+const removePermissions_1 = __importDefault(require("./api/userroles/permissions/removePermissions"));
+const getPermissionsForRole_1 = __importDefault(require("./api/userroles/permissions/getPermissionsForRole"));
class Recipe extends recipeModule_1.default {
constructor(recipeId, appInfo, isInServerlessEnv, config) {
super(recipeId, appInfo);
@@ -229,6 +235,54 @@ class Recipe extends recipeModule_1.default {
disabled: false,
method: "get",
},
+ {
+ id: constants_1.USERROLES_LIST_API,
+ pathWithoutApiBasePath: new normalisedURLPath_1.default(
+ utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_LIST_API)
+ ),
+ disabled: false,
+ method: "get",
+ },
+ {
+ id: constants_1.USERROLES_CREATE_ROLE_API,
+ pathWithoutApiBasePath: new normalisedURLPath_1.default(
+ utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_CREATE_ROLE_API)
+ ),
+ disabled: false,
+ method: "post",
+ },
+ {
+ id: constants_1.USERROLES_DELETE_ROLE_API,
+ pathWithoutApiBasePath: new normalisedURLPath_1.default(
+ utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_DELETE_ROLE_API)
+ ),
+ disabled: false,
+ method: "delete",
+ },
+ {
+ id: constants_1.USERROLES_GET_PERMISSIONS_API,
+ pathWithoutApiBasePath: new normalisedURLPath_1.default(
+ utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_GET_PERMISSIONS_API)
+ ),
+ disabled: false,
+ method: "get",
+ },
+ {
+ id: constants_1.USERROLES_ADD_PERMISSIONS_API,
+ pathWithoutApiBasePath: new normalisedURLPath_1.default(
+ utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_ADD_PERMISSIONS_API)
+ ),
+ disabled: false,
+ method: "put",
+ },
+ {
+ id: constants_1.USERROLES_REMOVE_PERMISSIONS_API,
+ pathWithoutApiBasePath: new normalisedURLPath_1.default(
+ utils_1.getApiPathWithDashboardBase(constants_1.USERROLES_REMOVE_PERMISSIONS_API)
+ ),
+ disabled: false,
+ method: "put",
+ },
];
};
this.handleAPIRequest = async (id, tenantId, req, res, __, ___, userContext) => {
@@ -302,6 +356,18 @@ class Recipe extends recipeModule_1.default {
apiFunction = listTenants_1.default;
} else if (id === constants_1.UNLINK_USER) {
apiFunction = userUnlinkGet_1.userUnlink;
+ } else if (id === constants_1.USERROLES_LIST_API) {
+ apiFunction = getAllRoles_1.default;
+ } else if (id === constants_1.USERROLES_CREATE_ROLE_API) {
+ apiFunction = createRole_1.default;
+ } else if (id === constants_1.USERROLES_DELETE_ROLE_API) {
+ apiFunction = deleteRole_1.default;
+ } else if (id === constants_1.USERROLES_ADD_PERMISSIONS_API) {
+ apiFunction = addPermissions_1.default;
+ } else if (id === constants_1.USERROLES_REMOVE_PERMISSIONS_API) {
+ apiFunction = removePermissions_1.default;
+ } else if ((id = constants_1.USERROLES_GET_PERMISSIONS_API)) {
+ apiFunction = getPermissionsForRole_1.default;
}
// If the id doesnt match any APIs return false
if (apiFunction === undefined) {