"use strict";
exports.id = 1352;
exports.ids = [1352];
exports.modules = {

/***/ 1352:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// @ts-check
/**
 * ==============================================================================
 * Imports
 * ==============================================================================
 */ 
const http = __webpack_require__(3685);
const decrypt = __webpack_require__(5425);
/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /**
 * @typedef {object} grabDelegatedUserFromCookieReturn
 * @property {number} dbUserId
 * @property {number} [dbUserId]
 * @property {number} [rootUserId]
 * @property {string} [rootUserName]
 * @property {string} [rootUserEmail]
 * @property {string} [rootUserImage]
 * @property {string} [databaseFullName]
 * @property {string} [databaseSlug]
 * @property {string[]} [allowedTables]
 * @property {string} [priviledges]
 * @property {string} [database]
 * @property {boolean} [delegated]
 */ /**
 * @param {object} params - user id
 * @param {import("next").NextApiRequest | http.IncomingMessage & { cookies: Partial<{ [key: string]: string; }>}} params.request - HTTPS request object
 * @param {string | string[]} params.databaseSlug - Database name slug
 * @param {{ id: number, first_name: string, last_name: string }} params.user
 * @param {any} params.query - query params
 *
 * @returns {Promise<grabDelegatedUserFromCookieReturn | null>} new user auth object payload
 */ module.exports = async function grabDelegatedUserFromCookie({ request , databaseSlug , user , query ,  }) {
    try {
        /**
         * Fetch user
         *
         * @description Fetch user from db
         */ let dbUserId = user.id;
        let delegatedUserObject = null;
        if (!query?.delegated) return {
            dbUserId
        };
        const rootUserId = query.dbUserId;
        const dbFullName = `${process.env.DSQL_USER_DB_PREFIX}${rootUserId}_${databaseSlug}`;
        const tokenName = `${process.env.DSQL_USER_DELEGATED_DB_COOKIE_PREFIX}${dbFullName}`;
        try {
            if (!request.cookies?.[tokenName]) throw new Error("Cookie not present");
            // @ts-ignore
            const decryptedToken = decrypt(request.cookies[tokenName]);
            if (!decryptedToken) throw new Error("Invalid Token");
            delegatedUserObject = JSON.parse(decryptedToken);
            if (delegatedUserObject.databaseSlug === databaseSlug) {
                dbUserId = delegatedUserObject.rootUserId;
                return {
                    dbUserId: dbUserId,
                    rootUserId: delegatedUserObject.rootUserId,
                    rootUserName: delegatedUserObject.rootUserName,
                    rootUserEmail: delegatedUserObject.rootUserEmail,
                    rootUserImage: delegatedUserObject.rootUserImage,
                    databaseFullName: delegatedUserObject.databaseFullName,
                    databaseSlug: delegatedUserObject.databaseSlug,
                    allowedTables: delegatedUserObject.allowedTables,
                    priviledges: delegatedUserObject.priviledges,
                    database: delegatedUserObject.databaseSlug,
                    delegated: true
                };
            }
        } catch (error) {
        // serverError({
        //     component: "grabDelegatedUserFromCookie",
        //     message: error.message,
        //     user: user,
        // });
        }
        ////////////////////////////////////////
        ////////////////////////////////////////
        ////////////////////////////////////////
        return {
            dbUserId
        };
    } catch (error1) {
        return null;
    }
}; ////////////////////////////////////////
 ////////////////////////////////////////
 ////////////////////////////////////////


/***/ })

};
;