"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = apiGoogleLogin; const https_1 = __importDefault(require("https")); const handleSocialDb_1 = __importDefault(require("../../social-login/handleSocialDb")); const ejson_1 = __importDefault(require("../../../../utils/ejson")); /** * # API google login */ function apiGoogleLogin(_a) { return __awaiter(this, arguments, void 0, function* ({ token, database, additionalFields, additionalData, }) { try { const gUser = yield new Promise((resolve, reject) => { https_1.default .request({ method: "GET", hostname: "www.googleapis.com", path: "/oauth2/v3/userinfo", headers: { Authorization: `Bearer ${token}`, }, }, (res) => { let data = ""; res.on("data", (chunk) => { data += chunk; }); res.on("end", () => { resolve(ejson_1.default.parse(data)); }); }) .end(); }); if (!(gUser === null || gUser === void 0 ? void 0 : gUser.email_verified)) throw new Error("No Google User."); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// if (!database || typeof database != "string" || (database === null || database === void 0 ? void 0 : database.match(/ /))) { return { success: false, payload: undefined, msg: "Please provide a database slug(database name in lowercase with no spaces)", }; } /** * Create new user folder and file * * @description Create new user folder and file */ const { given_name, family_name, email, sub, picture } = gUser; /** @type {Object} */ let payloadObject = { email: email, first_name: given_name, last_name: family_name, social_id: sub, social_platform: "google", image: picture, image_thumbnail: picture, username: `google-user-${sub}`, }; if (additionalData) { payloadObject = Object.assign(Object.assign({}, payloadObject), additionalData); } const loggedInGoogleUser = yield (0, handleSocialDb_1.default)({ database, email: email || "", payload: payloadObject, social_platform: "google", social_id: sub, additionalFields, }); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// return Object.assign({}, loggedInGoogleUser); } catch ( /** @type {any} */error) { console.log(`api-google-login.ts ERROR: ${error.message}`); return { success: false, payload: undefined, msg: error.message, }; } }); }