{"version":3,"sources":["../../../src/utilities/authProviders.ts"],"sourcesContent":["import axios from 'axios'\nimport jwt from 'jsonwebtoken'\nimport jwksClient from 'jwks-rsa'\n\nimport { EquippedError } from '../errors'\n\nexport const signinWithGoogle = async (idToken: string) => {\n\tconst authUrl = `https://oauth2.googleapis.com/tokeninfo?id_token=${idToken}`\n\tconst { data } = await axios.get(authUrl).catch((err) => {\n\t\tthrow new EquippedError('Failed to sign in with google', { idToken }, err)\n\t})\n\tdata.first_name = data.given_name\n\tdata.last_name = data.family_name\n\treturn data as {\n\t\temail: string\n\t\temail_verified: 'true' | 'false'\n\t\tfirst_name: string\n\t\tlast_name: string\n\t\tpicture: string\n\t\tsub: string\n\t} & Record<string, any>\n}\n\nexport const signinWithApple = async (idToken: string) => {\n\ttry {\n\t\tconst APPLE_BASE = 'https://appleid.apple.com'\n\t\tconst json = jwt.decode(idToken, { complete: true })\n\t\tif (!json?.header) throw new EquippedError('Missing JWT header', { idToken, json })\n\t\tconst { kid, alg } = json.header\n\t\tconst publicKey = await jwksClient({ jwksUri: `${APPLE_BASE}/auth/keys`, cache: true })\n\t\t\t.getSigningKey(kid)\n\t\t\t.then((key) => key.getPublicKey())\n\t\t\t.catch(() => null)\n\t\tif (!publicKey) throw new EquippedError('no publicKey', { idToken, publicKey, json })\n\t\tconst data = jwt.verify(idToken, publicKey, { algorithms: [alg as any] }) as Record<string, any>\n\t\tif (!data) throw new EquippedError('no data', { idToken, data })\n\t\tif (data.iss !== APPLE_BASE) throw new EquippedError('iss doesnt match', { idToken, data })\n\t\tif (data.exp * 1000 < Date.now()) throw new EquippedError('expired idToken', { idToken, data })\n\t\t// TODO: Find out how to get profile data from api\n\t\treturn data as {\n\t\t\temail?: string\n\t\t\tsub: string\n\t\t\temail_verified?: 'true' | 'false'\n\t\t\tis_private_email?: 'true' | 'false'\n\t\t} & Record<string, any>\n\t} catch (err) {\n\t\tthrow new EquippedError('Failed to sign in with apple', { idToken }, err)\n\t}\n}\n\nexport const signinWithFacebook = async (accessToken: string, fields = [] as string[]) => {\n\tfields = [...new Set([...fields, 'name', 'picture', 'email'])]\n\tconst { data } = await axios\n\t\t.request({\n\t\t\tmethod: 'get',\n\t\t\turl: 'https://graph.facebook.com/v15.0/me',\n\t\t\tparams: {\n\t\t\t\tfields: fields.join(','),\n\t\t\t\taccess_token: accessToken,\n\t\t\t},\n\t\t})\n\t\t.catch((err) => {\n\t\t\tthrow new EquippedError('Failed to sign in with facebook', { accessToken, fields }, err)\n\t\t})\n\tconst isValidData = fields.every((key) => key in data)\n\tif (!isValidData) throw new EquippedError('Incomplete scope for access token', { accessToken, fields, data })\n\tdata.email_verified = 'true'\n\treturn data as {\n\t\tid: string\n\t\temail: string\n\t\temail_verified: 'true' | 'false'\n\t\tname: string\n\t\tpicture: {\n\t\t\tdata: { height: number; is_silhouette: boolean; url: string; width: number }\n\t\t}\n\t} & Record<string, any>\n}\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,OAAO,SAAS;AAChB,OAAO,gBAAgB;AAEvB,SAAS,qBAAqB;AAEvB,MAAM,mBAAmB,OAAO,YAAoB;AAC1D,QAAM,UAAU,oDAAoD,OAAO;AAC3E,QAAM,EAAE,KAAK,IAAI,MAAM,MAAM,IAAI,OAAO,EAAE,MAAM,CAAC,QAAQ;AACxD,UAAM,IAAI,cAAc,iCAAiC,EAAE,QAAQ,GAAG,GAAG;AAAA,EAC1E,CAAC;AACD,OAAK,aAAa,KAAK;AACvB,OAAK,YAAY,KAAK;AACtB,SAAO;AAQR;AAEO,MAAM,kBAAkB,OAAO,YAAoB;AACzD,MAAI;AACH,UAAM,aAAa;AACnB,UAAM,OAAO,IAAI,OAAO,SAAS,EAAE,UAAU,KAAK,CAAC;AACnD,QAAI,CAAC,MAAM,OAAQ,OAAM,IAAI,cAAc,sBAAsB,EAAE,SAAS,KAAK,CAAC;AAClF,UAAM,EAAE,KAAK,IAAI,IAAI,KAAK;AAC1B,UAAM,YAAY,MAAM,WAAW,EAAE,SAAS,GAAG,UAAU,cAAc,OAAO,KAAK,CAAC,EACpF,cAAc,GAAG,EACjB,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC,EAChC,MAAM,MAAM,IAAI;AAClB,QAAI,CAAC,UAAW,OAAM,IAAI,cAAc,gBAAgB,EAAE,SAAS,WAAW,KAAK,CAAC;AACpF,UAAM,OAAO,IAAI,OAAO,SAAS,WAAW,EAAE,YAAY,CAAC,GAAU,EAAE,CAAC;AACxE,QAAI,CAAC,KAAM,OAAM,IAAI,cAAc,WAAW,EAAE,SAAS,KAAK,CAAC;AAC/D,QAAI,KAAK,QAAQ,WAAY,OAAM,IAAI,cAAc,oBAAoB,EAAE,SAAS,KAAK,CAAC;AAC1F,QAAI,KAAK,MAAM,MAAO,KAAK,IAAI,EAAG,OAAM,IAAI,cAAc,mBAAmB,EAAE,SAAS,KAAK,CAAC;AAE9F,WAAO;AAAA,EAMR,SAAS,KAAK;AACb,UAAM,IAAI,cAAc,gCAAgC,EAAE,QAAQ,GAAG,GAAG;AAAA,EACzE;AACD;AAEO,MAAM,qBAAqB,OAAO,aAAqB,SAAS,CAAC,MAAkB;AACzF,WAAS,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,QAAQ,QAAQ,WAAW,OAAO,CAAC,CAAC;AAC7D,QAAM,EAAE,KAAK,IAAI,MAAM,MACrB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,MACP,QAAQ,OAAO,KAAK,GAAG;AAAA,MACvB,cAAc;AAAA,IACf;AAAA,EACD,CAAC,EACA,MAAM,CAAC,QAAQ;AACf,UAAM,IAAI,cAAc,mCAAmC,EAAE,aAAa,OAAO,GAAG,GAAG;AAAA,EACxF,CAAC;AACF,QAAM,cAAc,OAAO,MAAM,CAAC,QAAQ,OAAO,IAAI;AACrD,MAAI,CAAC,YAAa,OAAM,IAAI,cAAc,qCAAqC,EAAE,aAAa,QAAQ,KAAK,CAAC;AAC5G,OAAK,iBAAiB;AACtB,SAAO;AASR;","names":[]}