Comparing version 1.0.1 to 1.0.2
@@ -11,5 +11,20 @@ "use strict"; | ||
async function withFacebook(credentials) { | ||
const hasFacebookToken = await (0, db_1.getAuthDatas)(credentials.email); | ||
if ((hasFacebookToken === null || hasFacebookToken === void 0 ? void 0 : hasFacebookToken.token) && hasFacebookToken.token !== "0") { | ||
const tokenIsValid = await loginProcess(credentials, true); | ||
if (tokenIsValid) { | ||
return true; | ||
} | ||
return loginProcess(credentials, false); | ||
} | ||
else { | ||
return loginProcess(credentials, false); | ||
} | ||
} | ||
async function loginProcess(credentials, withToken) { | ||
try { | ||
await (0, facebookLogin_1.default)(credentials); | ||
const authData = await (0, db_1.getAuthDatas)(); | ||
if (!withToken) { | ||
await (0, facebookLogin_1.default)(credentials); | ||
} | ||
const authData = await (0, db_1.getAuthDatas)(credentials.email); | ||
const assertionString = `{"facebook_token":"${authData.token}","mobile_token":"","mobile_id":""}`; | ||
@@ -16,0 +31,0 @@ const datas = { |
import { StringMap } from "yajdb/dist/esm/types/operations"; | ||
import { AuthData } from "../types/auth"; | ||
export declare function createDb(): Promise<boolean>; | ||
export declare function updateLoginDatas(updatePayload: StringMap): Promise<boolean>; | ||
export declare function getAuthDatas(): Promise<AuthData>; | ||
export declare function updateLoginDatas(email: string, updatePayload: StringMap): Promise<boolean>; | ||
export declare function getAuthDatas(email: string): Promise<AuthData>; |
@@ -12,7 +12,5 @@ "use strict"; | ||
const tableStructure = [ | ||
{ name: "id", type: "string" }, | ||
{ name: "email", type: "string" }, | ||
{ name: "access_token", type: "string" }, | ||
]; | ||
const defaultValues = [{ id: "1", access_token: "0" }]; | ||
const searchPayload = { id: "1" }; | ||
async function createDb() { | ||
@@ -22,6 +20,2 @@ try { | ||
await table.createAsync(dbName, tableName, tableStructure); | ||
const response = await table.selectAsync(dbName, tableName, searchPayload); | ||
if (response.message === "[]" || response.message === "table is empty") { | ||
await table.insertAsync(dbName, tableName, defaultValues); | ||
} | ||
return true; | ||
@@ -34,5 +28,15 @@ } | ||
exports.createDb = createDb; | ||
async function updateLoginDatas(updatePayload) { | ||
async function updateLoginDatas(email, updatePayload) { | ||
try { | ||
await table.updateAsync(dbName, tableName, searchPayload, updatePayload); | ||
const userExistsResponse = await getAuthDatas(email); | ||
if ((userExistsResponse === null || userExistsResponse === void 0 ? void 0 : userExistsResponse.token) !== "0") { | ||
await table.updateAsync(dbName, tableName, { | ||
email: email, | ||
}, updatePayload); | ||
} | ||
else { | ||
const newUser = { email, access_token: updatePayload.access_token }; | ||
const createUserResponse = await table.insertAsync(dbName, tableName, [newUser]); | ||
return createUserResponse.success; | ||
} | ||
return true; | ||
@@ -45,5 +49,7 @@ } | ||
exports.updateLoginDatas = updateLoginDatas; | ||
async function getAuthDatas() { | ||
async function getAuthDatas(email) { | ||
try { | ||
const response = await table.selectAsync(dbName, tableName, searchPayload); | ||
const response = await table.selectAsync(dbName, tableName, { | ||
email: email, | ||
}); | ||
const { access_token } = JSON.parse(response.message)[0]; | ||
@@ -50,0 +56,0 @@ return { |
import { Credentials } from "../types/auth"; | ||
declare function facebookLogin(credentials: Credentials): Promise<void>; | ||
declare function facebookLogin(credentials: Credentials): Promise<boolean>; | ||
export default facebookLogin; |
@@ -18,3 +18,3 @@ "use strict"; | ||
}; | ||
async function checkConsoleForToken(message) { | ||
async function checkConsoleForToken(email, message) { | ||
if (message.includes("access_token")) { | ||
@@ -24,44 +24,50 @@ const accessToken = message | ||
.split("&data_access_expiration_time")[0]; | ||
await (0, db_1.updateLoginDatas)({ access_token: accessToken }); | ||
await (0, db_1.updateLoginDatas)(email, { access_token: accessToken }); | ||
} | ||
} | ||
async function facebookLogin(credentials) { | ||
await (0, db_1.createDb)(); | ||
const browser = await puppeteer_1.default.launch({ | ||
headless: true, | ||
args: ["--no-sandbox", "--disable-setuid-sandbox"], | ||
}); | ||
const page = await browser.newPage(); | ||
console.log("login in please wait..."); | ||
const login = async () => { | ||
await page.goto(const_1.facebookUrl, { | ||
waitUntil: "networkidle2", | ||
try { | ||
await (0, db_1.createDb)(); | ||
const browser = await puppeteer_1.default.launch({ | ||
headless: false, | ||
args: ["--no-sandbox", "--disable-setuid-sandbox"], | ||
}); | ||
page.on("console", async (message) => { | ||
await checkConsoleForToken(message.text()); | ||
}); | ||
// bypass cookie alert | ||
await page.keyboard.press("Enter"); | ||
await delay(1000); | ||
// fill form | ||
await page.waitForSelector("#email"); | ||
await page.type("#email", credentials.email); | ||
await page.type("#pass", credentials.password); | ||
await delay(500); | ||
// login | ||
await page.click("#loginbutton"); | ||
await page.waitForNavigation(); | ||
}; | ||
const getToken = async () => { | ||
await page.goto(const_1.facebookAuthUrl, { | ||
waitUntil: "networkidle2", | ||
}); | ||
// bypass already logged | ||
await page.click('[role="button"]'); | ||
await page.waitForNavigation(); | ||
}; | ||
await login(); | ||
await getToken(); | ||
await browser.close(); | ||
const page = await browser.newPage(); | ||
console.log("login in please wait..."); | ||
const login = async () => { | ||
await page.goto(const_1.facebookUrl, { | ||
waitUntil: "networkidle2", | ||
}); | ||
page.on("console", async (message) => { | ||
await checkConsoleForToken(credentials.email, message.text()); | ||
}); | ||
// bypass cookie alert | ||
await page.keyboard.press("Enter"); | ||
await delay(1000); | ||
// fill form | ||
await page.waitForSelector("#email"); | ||
await page.type("#email", credentials.email); | ||
await page.type("#pass", credentials.password); | ||
await delay(500); | ||
// login | ||
await page.click("#loginbutton"); | ||
await page.waitForNavigation(); | ||
}; | ||
const getToken = async () => { | ||
await page.goto(const_1.facebookAuthUrl, { | ||
waitUntil: "networkidle2", | ||
}); | ||
// bypass already logged | ||
await page.click('[role="button"]'); | ||
await page.waitForNavigation(); | ||
}; | ||
await login(); | ||
await getToken(); | ||
await browser.close(); | ||
return true; | ||
} | ||
catch (error) { | ||
return false; | ||
} | ||
} | ||
exports.default = facebookLogin; |
@@ -6,5 +6,20 @@ import { getAuthDatas } from "../db/db"; | ||
async function withFacebook(credentials) { | ||
const hasFacebookToken = await getAuthDatas(credentials.email); | ||
if ((hasFacebookToken === null || hasFacebookToken === void 0 ? void 0 : hasFacebookToken.token) && hasFacebookToken.token !== "0") { | ||
const tokenIsValid = await loginProcess(credentials, true); | ||
if (tokenIsValid) { | ||
return true; | ||
} | ||
return loginProcess(credentials, false); | ||
} | ||
else { | ||
return loginProcess(credentials, false); | ||
} | ||
} | ||
async function loginProcess(credentials, withToken) { | ||
try { | ||
await facebookLogin(credentials); | ||
const authData = await getAuthDatas(); | ||
if (!withToken) { | ||
await facebookLogin(credentials); | ||
} | ||
const authData = await getAuthDatas(credentials.email); | ||
const assertionString = `{"facebook_token":"${authData.token}","mobile_token":"","mobile_id":""}`; | ||
@@ -11,0 +26,0 @@ const datas = { |
import { StringMap } from "yajdb/dist/esm/types/operations"; | ||
import { AuthData } from "../types/auth"; | ||
export declare function createDb(): Promise<boolean>; | ||
export declare function updateLoginDatas(updatePayload: StringMap): Promise<boolean>; | ||
export declare function getAuthDatas(): Promise<AuthData>; | ||
export declare function updateLoginDatas(email: string, updatePayload: StringMap): Promise<boolean>; | ||
export declare function getAuthDatas(email: string): Promise<AuthData>; |
@@ -6,7 +6,5 @@ import yajdb from "yajdb"; | ||
const tableStructure = [ | ||
{ name: "id", type: "string" }, | ||
{ name: "email", type: "string" }, | ||
{ name: "access_token", type: "string" }, | ||
]; | ||
const defaultValues = [{ id: "1", access_token: "0" }]; | ||
const searchPayload = { id: "1" }; | ||
export async function createDb() { | ||
@@ -16,6 +14,2 @@ try { | ||
await table.createAsync(dbName, tableName, tableStructure); | ||
const response = await table.selectAsync(dbName, tableName, searchPayload); | ||
if (response.message === "[]" || response.message === "table is empty") { | ||
await table.insertAsync(dbName, tableName, defaultValues); | ||
} | ||
return true; | ||
@@ -27,5 +21,15 @@ } | ||
} | ||
export async function updateLoginDatas(updatePayload) { | ||
export async function updateLoginDatas(email, updatePayload) { | ||
try { | ||
await table.updateAsync(dbName, tableName, searchPayload, updatePayload); | ||
const userExistsResponse = await getAuthDatas(email); | ||
if ((userExistsResponse === null || userExistsResponse === void 0 ? void 0 : userExistsResponse.token) !== "0") { | ||
await table.updateAsync(dbName, tableName, { | ||
email: email, | ||
}, updatePayload); | ||
} | ||
else { | ||
const newUser = { email, access_token: updatePayload.access_token }; | ||
const createUserResponse = await table.insertAsync(dbName, tableName, [newUser]); | ||
return createUserResponse.success; | ||
} | ||
return true; | ||
@@ -37,5 +41,7 @@ } | ||
} | ||
export async function getAuthDatas() { | ||
export async function getAuthDatas(email) { | ||
try { | ||
const response = await table.selectAsync(dbName, tableName, searchPayload); | ||
const response = await table.selectAsync(dbName, tableName, { | ||
email: email, | ||
}); | ||
const { access_token } = JSON.parse(response.message)[0]; | ||
@@ -42,0 +48,0 @@ return { |
import { Credentials } from "../types/auth"; | ||
declare function facebookLogin(credentials: Credentials): Promise<void>; | ||
declare function facebookLogin(credentials: Credentials): Promise<boolean>; | ||
export default facebookLogin; |
@@ -13,3 +13,3 @@ import puppeteer from "puppeteer"; | ||
}; | ||
async function checkConsoleForToken(message) { | ||
async function checkConsoleForToken(email, message) { | ||
if (message.includes("access_token")) { | ||
@@ -19,44 +19,50 @@ const accessToken = message | ||
.split("&data_access_expiration_time")[0]; | ||
await updateLoginDatas({ access_token: accessToken }); | ||
await updateLoginDatas(email, { access_token: accessToken }); | ||
} | ||
} | ||
async function facebookLogin(credentials) { | ||
await createDb(); | ||
const browser = await puppeteer.launch({ | ||
headless: true, | ||
args: ["--no-sandbox", "--disable-setuid-sandbox"], | ||
}); | ||
const page = await browser.newPage(); | ||
console.log("login in please wait..."); | ||
const login = async () => { | ||
await page.goto(facebookUrl, { | ||
waitUntil: "networkidle2", | ||
try { | ||
await createDb(); | ||
const browser = await puppeteer.launch({ | ||
headless: false, | ||
args: ["--no-sandbox", "--disable-setuid-sandbox"], | ||
}); | ||
page.on("console", async (message) => { | ||
await checkConsoleForToken(message.text()); | ||
}); | ||
// bypass cookie alert | ||
await page.keyboard.press("Enter"); | ||
await delay(1000); | ||
// fill form | ||
await page.waitForSelector("#email"); | ||
await page.type("#email", credentials.email); | ||
await page.type("#pass", credentials.password); | ||
await delay(500); | ||
// login | ||
await page.click("#loginbutton"); | ||
await page.waitForNavigation(); | ||
}; | ||
const getToken = async () => { | ||
await page.goto(facebookAuthUrl, { | ||
waitUntil: "networkidle2", | ||
}); | ||
// bypass already logged | ||
await page.click('[role="button"]'); | ||
await page.waitForNavigation(); | ||
}; | ||
await login(); | ||
await getToken(); | ||
await browser.close(); | ||
const page = await browser.newPage(); | ||
console.log("login in please wait..."); | ||
const login = async () => { | ||
await page.goto(facebookUrl, { | ||
waitUntil: "networkidle2", | ||
}); | ||
page.on("console", async (message) => { | ||
await checkConsoleForToken(credentials.email, message.text()); | ||
}); | ||
// bypass cookie alert | ||
await page.keyboard.press("Enter"); | ||
await delay(1000); | ||
// fill form | ||
await page.waitForSelector("#email"); | ||
await page.type("#email", credentials.email); | ||
await page.type("#pass", credentials.password); | ||
await delay(500); | ||
// login | ||
await page.click("#loginbutton"); | ||
await page.waitForNavigation(); | ||
}; | ||
const getToken = async () => { | ||
await page.goto(facebookAuthUrl, { | ||
waitUntil: "networkidle2", | ||
}); | ||
// bypass already logged | ||
await page.click('[role="button"]'); | ||
await page.waitForNavigation(); | ||
}; | ||
await login(); | ||
await getToken(); | ||
await browser.close(); | ||
return true; | ||
} | ||
catch (error) { | ||
return false; | ||
} | ||
} | ||
export default facebookLogin; |
@@ -6,4 +6,4 @@ const happnApi = require("./dist/cjs").default; | ||
const facebookCredentials = { | ||
email: "email@gmail.com", | ||
password: "12345", | ||
email: "facebook@gmail.com ", | ||
password: "facebook", | ||
}; | ||
@@ -10,0 +10,0 @@ |
{ | ||
"name": "happn-api", | ||
"description": "happn api wrapper for nodejs", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"author": "christophe bellec", | ||
@@ -6,0 +6,0 @@ "homepage": "https://github.com/christophe77/happn-api", |
@@ -8,6 +8,24 @@ import { Credentials } from "../types/auth"; | ||
async function withFacebook(credentials: Credentials): Promise<boolean> { | ||
const hasFacebookToken = await getAuthDatas(credentials.email); | ||
if (hasFacebookToken?.token && hasFacebookToken.token !== "0") { | ||
const tokenIsValid = await loginProcess(credentials, true); | ||
if (tokenIsValid) { | ||
return true; | ||
} | ||
return loginProcess(credentials, false); | ||
} else { | ||
return loginProcess(credentials, false); | ||
} | ||
} | ||
async function loginProcess( | ||
credentials: Credentials, | ||
withToken: boolean | ||
): Promise<boolean> { | ||
try { | ||
await facebookLogin(credentials); | ||
const authData = await getAuthDatas(); | ||
if (!withToken) { | ||
await facebookLogin(credentials); | ||
} | ||
const authData = await getAuthDatas(credentials.email); | ||
const assertionString = `{"facebook_token":"${authData.token}","mobile_token":"","mobile_id":""}`; | ||
@@ -14,0 +32,0 @@ const datas = { |
@@ -9,7 +9,5 @@ import yajdb from "yajdb"; | ||
const tableStructure = [ | ||
{ name: "id", type: "string" }, | ||
{ name: "email", type: "string" }, | ||
{ name: "access_token", type: "string" }, | ||
]; | ||
const defaultValues = [{ id: "1", access_token: "0" }]; | ||
const searchPayload = { id: "1" }; | ||
@@ -20,6 +18,2 @@ export async function createDb(): Promise<boolean> { | ||
await table.createAsync(dbName, tableName, tableStructure); | ||
const response = await table.selectAsync(dbName, tableName, searchPayload); | ||
if (response.message === "[]" || response.message === "table is empty") { | ||
await table.insertAsync(dbName, tableName, defaultValues); | ||
} | ||
return true; | ||
@@ -30,7 +24,23 @@ } catch { | ||
} | ||
export async function updateLoginDatas( | ||
email: string, | ||
updatePayload: StringMap | ||
): Promise<boolean> { | ||
try { | ||
await table.updateAsync(dbName, tableName, searchPayload, updatePayload); | ||
const userExistsResponse = await getAuthDatas(email); | ||
if (userExistsResponse?.token !== "0") { | ||
await table.updateAsync( | ||
dbName, | ||
tableName, | ||
{ | ||
email: email, | ||
}, | ||
updatePayload | ||
); | ||
}else{ | ||
const newUser = {email, access_token : updatePayload.access_token}; | ||
const createUserResponse = await table.insertAsync(dbName, tableName, [newUser]); | ||
return createUserResponse.success; | ||
} | ||
return true; | ||
@@ -41,5 +51,7 @@ } catch { | ||
} | ||
export async function getAuthDatas(): Promise<AuthData> { | ||
export async function getAuthDatas(email: string): Promise<AuthData> { | ||
try { | ||
const response = await table.selectAsync(dbName, tableName, searchPayload); | ||
const response = await table.selectAsync(dbName, tableName, { | ||
email: email, | ||
}); | ||
const { access_token } = JSON.parse(response.message)[0]; | ||
@@ -46,0 +58,0 @@ return { |
@@ -16,3 +16,3 @@ import puppeteer from "puppeteer"; | ||
async function checkConsoleForToken(message: string) { | ||
async function checkConsoleForToken(email: string, message: string) { | ||
if (message.includes("access_token")) { | ||
@@ -22,44 +22,49 @@ const accessToken = message | ||
.split("&data_access_expiration_time")[0]; | ||
await updateLoginDatas({ access_token: accessToken }); | ||
await updateLoginDatas(email, { access_token: accessToken }); | ||
} | ||
} | ||
async function facebookLogin(credentials: Credentials) { | ||
await createDb(); | ||
const browser = await puppeteer.launch({ | ||
headless: true, | ||
args: ["--no-sandbox", "--disable-setuid-sandbox"], | ||
}); | ||
const page = await browser.newPage(); | ||
console.log("login in please wait...") | ||
const login = async () => { | ||
await page.goto(facebookUrl, { | ||
waitUntil: "networkidle2", | ||
async function facebookLogin(credentials: Credentials): Promise<boolean> { | ||
try { | ||
await createDb(); | ||
const browser = await puppeteer.launch({ | ||
headless: false, | ||
args: ["--no-sandbox", "--disable-setuid-sandbox"], | ||
}); | ||
page.on("console", async (message) => { | ||
await checkConsoleForToken(message.text()); | ||
}); | ||
// bypass cookie alert | ||
await page.keyboard.press("Enter"); | ||
await delay(1000); | ||
// fill form | ||
await page.waitForSelector("#email"); | ||
await page.type("#email", credentials.email); | ||
await page.type("#pass", credentials.password); | ||
await delay(500); | ||
// login | ||
await page.click("#loginbutton"); | ||
await page.waitForNavigation(); | ||
}; | ||
const getToken = async () => { | ||
await page.goto(facebookAuthUrl, { | ||
waitUntil: "networkidle2", | ||
}); | ||
// bypass already logged | ||
await page.click('[role="button"]'); | ||
await page.waitForNavigation(); | ||
}; | ||
await login(); | ||
await getToken(); | ||
await browser.close(); | ||
const page = await browser.newPage(); | ||
console.log("login in please wait..."); | ||
const login = async () => { | ||
await page.goto(facebookUrl, { | ||
waitUntil: "networkidle2", | ||
}); | ||
page.on("console", async (message) => { | ||
await checkConsoleForToken(credentials.email, message.text()); | ||
}); | ||
// bypass cookie alert | ||
await page.keyboard.press("Enter"); | ||
await delay(1000); | ||
// fill form | ||
await page.waitForSelector("#email"); | ||
await page.type("#email", credentials.email); | ||
await page.type("#pass", credentials.password); | ||
await delay(500); | ||
// login | ||
await page.click("#loginbutton"); | ||
await page.waitForNavigation(); | ||
}; | ||
const getToken = async () => { | ||
await page.goto(facebookAuthUrl, { | ||
waitUntil: "networkidle2", | ||
}); | ||
// bypass already logged | ||
await page.click('[role="button"]'); | ||
await page.waitForNavigation(); | ||
}; | ||
await login(); | ||
await getToken(); | ||
await browser.close(); | ||
return true; | ||
} catch (error) { | ||
return false; | ||
} | ||
} | ||
export default facebookLogin; |
70681
1848