UNPKG

ngx-appkey-webauthn

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.0.

1,520 lines (1,512 loc) 32 kB
import * as i0 from '@angular/core'; import { Injectable, Component } from '@angular/core'; var list = [ { code: "AB", name: "Abkhazian" }, { code: "AA", name: "Afar" }, { code: "AF", name: "Afrikaans" }, { code: "AK", name: "Akan" }, { code: "SQ", name: "Albanian" }, { code: "AM", name: "Amharic" }, { code: "AR", name: "Arabic" }, { code: "AN", name: "Aragonese" }, { code: "HY", name: "Armenian" }, { code: "AS", name: "Assamese" }, { code: "AV", name: "Avaric" }, { code: "AE", name: "Avestan" }, { code: "AY", name: "Aymara" }, { code: "AZ", name: "Azerbaijani" }, { code: "BM", name: "Bambara" }, { code: "BA", name: "Bashkir" }, { code: "EU", name: "Basque" }, { code: "BE", name: "Belarusian" }, { code: "BN", name: "Bengali" }, { code: "BI", name: "Bislama" }, { code: "BS", name: "Bosnian" }, { code: "BR", name: "Breton" }, { code: "BG", name: "Bulgarian" }, { code: "MY", name: "Burmese" }, { code: "CA", name: "Catalan" }, { code: "CH", name: "Chamorro" }, { code: "CE", name: "Chechen" }, { code: "NY", name: "Chichewa" }, { code: "ZH", name: "Chinese" }, { code: "CU", name: "Slavonic" }, { code: "CV", name: "Chuvash" }, { code: "KW", name: "Cornish" }, { code: "CO", name: "Corsican" }, { code: "CR", name: "Cree" }, { code: "HR", name: "Croatian" }, { code: "CS", name: "Czech" }, { code: "DA", name: "Danish" }, { code: "DV", name: "Divehi" }, { code: "NL", name: "DutCH" }, { code: "DZ", name: "Dzongkha" }, { code: "EN", name: "English" }, { code: "EO", name: "Esperanto" }, { code: "ET", name: "Estonian" }, { code: "EE", name: "Ewe" }, { code: "FO", name: "Faroese" }, { code: "FJ", name: "Fijian" }, { code: "FI", name: "Finnish" }, { code: "FR", name: "French" }, { code: "FT", name: "WesternFrisian" }, { code: "FF", name: "Fulah" }, { code: "GD", name: "Gaelic" }, { code: "GL", name: "Galician" }, { code: "LG", name: "Ganda" }, { code: "KA", name: "Georgian" }, { code: "DE", name: "German" }, { code: "EL", name: "Greek" }, { code: "KL", name: "Kalaallisut" }, { code: "GN", name: "Guarani" }, { code: "GU", name: "Gujarati" }, { code: "HT", name: "Haitian" }, { code: "HA", name: "Hausa" }, { code: "HE", name: "Hebrew" }, { code: "HZ", name: "Herero" }, { code: "HI", name: "Hindi" }, { code: "HO", name: "Hiri" }, { code: "HU", name: "Hungarian" }, { code: "IS", name: "Icelandic" }, { code: "IO", name: "Ido" }, { code: "IG", name: "Igbo" }, { code: "ID", name: "Indonesian" }, { code: "IA", name: "Interlingua" }, { code: "IE", name: "Interlingue" }, { code: "IU", name: "Inuktitut" }, { code: "IK", name: "Inupiaq" }, { code: "GA", name: "Irish" }, { code: "IT", name: "Italian" }, { code: "JA", name: "Japanese" }, { code: "JV", name: "Javanese" }, { code: "KN", name: "Kannada" }, { code: "KR", name: "Kanuri" }, { code: "KS", name: "Kashmiri" }, { code: "KK", name: "Kazakh" }, { code: "KM", name: "Khmer" }, { code: "KI", name: "Kikuyu" }, { code: "RW", name: "Kinyarwanda" }, { code: "KY", name: "Kirghiz" }, { code: "KV", name: "Komi" }, { code: "KG", name: "Kongo" }, { code: "KO", name: "Korean" }, { code: "KJ", name: "Kuanyama" }, { code: "KU", name: "Kurdish" }, { code: "LO", name: "Lao" }, { code: "LA", name: "Latin" }, { code: "LV", name: "Latvian" }, { code: "LI", name: "Limburgan" }, { code: "LN", name: "Lingala" }, { code: "LT", name: "Lithuanian" }, { code: "LU", name: "Luba" }, { code: "LB", name: "Luxembourgish" }, { code: "MK", name: "Macedonian" }, { code: "MG", name: "Malagasy" }, { code: "MS", name: "Malay" }, { code: "ML", name: "Malayalam" }, { code: "MT", name: "Maltese" }, { code: "GV", name: "Manx" }, { code: "MI", name: "Maori" }, { code: "MR", name: "Marathi" }, { code: "MH", name: "Marshallese" }, { code: "MN", name: "Mongolian" }, { code: "NA", name: "Nauru" }, { code: "NV", name: "Navajo" }, { code: "ND", name: "North-Ndebele" }, { code: "NR", name: "South-Ndebele" }, { code: "NG", name: "Ndonga" }, { code: "NE", name: "Nepali" }, { code: "NO", name: "Norwegian" }, { code: "NB", name: "Bokmal-Norwegian" }, { code: "NN", name: "Nynorsk-Norwegian" }, { code: "LI", name: "Sichuan" }, { code: "OC", name: "Occitan" }, { code: "OJ", name: "Ojibwa" }, { code: "OR", name: "Oriya" }, { code: "OM", name: "Oromo" }, { code: "OS", name: "Ossetian" }, { code: "PI", name: "Pali" }, { code: "PS", name: "Pashto" }, { code: "FA", name: "Persian" }, { code: "PL", name: "Polish" }, { code: "PT", name: "Portuguese" }, { code: "PA", name: "Punjabi" }, { code: "QU", name: "Quechua" }, { code: "RO", name: "Romanian" }, { code: "RM", name: "Romansh" }, { code: "RN", name: "Rundi" }, { code: "RU", name: "Russian" }, { code: "SE", name: "Sami-Northern" }, { code: "SM", name: "Samoan" }, { code: "SG", name: "Sango" }, { code: "SA", name: "Sanskrit" }, { code: "SC", name: "Sardinian" }, { code: "SR", name: "Serbian" }, { code: "SN", name: "Shona" }, { code: "SD", name: "Sindhi" }, { code: "SI", name: "Sinhala" }, { code: "SK", name: "Slovak" }, { code: "SL", name: "Slovenian" }, { code: "SO", name: "Somali" }, { code: "ST", name: "Sotho-Southern" }, { code: "EW", name: "Spanish" }, { code: "SU", name: "Sundanese" }, { code: "SW", name: "Swahili" }, { code: "SS", name: "Swati" }, { code: "SV", name: "Swedish" }, { code: "TL", name: "Tagalog" }, { code: "TY", name: "Tahitian" }, { code: "TG", name: "Tajik" }, { code: "TA", name: "Tamil" }, { code: "TT", name: "Tatar" }, { code: "TE", name: "Telugu" }, { code: "TH", name: "Thai" }, { code: "BO", name: "Tibetan" }, { code: "TI", name: "Tigrinya" }, { code: "TO", name: "Tonga" }, { code: "TS", name: "Tsonga" }, { code: "TN", name: "Tswana" }, { code: "TR", name: "Turkish" }, { code: "TK", name: "Turkmen" }, { code: "TW", name: "Twi" }, { code: "UG", name: "Uighur" }, { code: "UK", name: "Ukrainian" }, { code: "UR", name: "Urdu" }, { code: "UZ", name: "Uzbek" }, { code: "VE", name: "Venda" }, { code: "VI", name: "Viet" }, { code: "VO", name: "Volapük" }, { code: "WA", name: "Walloon" }, { code: "CY", name: "Welsh" }, { code: "WO", name: "Wolof" }, { code: "XH", name: "Xhosa" }, { code: "YI", name: "Yiddish" }, { code: "YO", name: "Yoruba" }, { code: "ZA", name: "Zhuang" }, { code: "ZU", name: "Zulu" } ]; var localeData = { list: list }; class User { appUserId = ""; displayName = ""; handle = ""; status = ""; userName = ""; authenticators; appId = ""; 'access-token' = ""; jwt = ""; createdAt = ""; updatedAt = ""; } class NgxAppkeyWebauthnService { localeList = localeData.list; appLocales = []; user = new User(); apiConfig = {}; constructor() { } async configure(config) { if (!config || !config.appToken) { throw ("invalid api config for app token"); } this.apiConfig = config; } async getApp() { return await this.apiRequest("GET", "appuser/app"); } /** * * @param { * handle :string, * displayName :string, * locale? :string * } * @returns */ async loginAnonymous(data) { return new Promise((resolve, reject) => { try { let valid = data.handle && data.handle.startsWith("ANON_"); if (!valid) { let error = { message: "Invalid login anonymous data" }; reject(error); return; } this.apiRequest('POST', 'appuser/loginAnonymous', data).then(result => { if (result.code) reject(result); else { resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * https://w3c.github.io/webauthn/#dictdef-registrationresponsejson * @param * handle: string, * { * * id: Base64URLString; * rawId: Base64URLString; * response: { * clientDataJSON: Base64URLString; * attestationObject: Base64URLString; * authenticatorData?: Base64URLString; * }; * authenticatorAttachment?: string; * type: string; * } attestation * @returns */ loginAnonymousComplete(handle, attestation) { return new Promise((resolve, reject) => { try { let valid = handle && attestation.id && attestation.rawId && attestation.response && attestation.response.clientDataJSON && attestation.response.attestationObject && attestation.type; if (!valid) { reject({ message: "Invalid data" }); return; } this.apiRequest('POST', 'appuser/loginAnonymousComplete', attestation).then(result => { if (result.code) reject(result); else { this.user = result; resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * @param { * handle :string, * displayName :string, * locale? :string * } * @returns */ async signup(data) { return new Promise((resolve, reject) => { try { let valid = data.handle && data.displayName; if (!valid) { let error = { message: "invalid signup data" }; reject(error); } data.handle = data.handle.toLowerCase(); this.apiRequest('POST', 'appuser/signup', data).then(result => { if (result.code) reject(result); else { resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * https://w3c.github.io/webauthn/#dictdef-registrationresponsejson * @param * handle: string, * { * * id: Base64URLString; * rawId: Base64URLString; * response: { * clientDataJSON: Base64URLString; * attestationObject: Base64URLString; * authenticatorData?: Base64URLString; * }; * authenticatorAttachment?: string; * type: string; * } attestation * @returns */ signupConfirm(handle, attestation) { return new Promise((resolve, reject) => { try { let valid = handle && attestation.id && attestation.rawId && attestation.response && attestation.response.clientDataJSON && attestation.response.attestationObject && attestation.type; if (!valid) { reject({ message: "invalid attestation" }); return; } attestation.handle = handle.toLowerCase(); this.apiRequest('POST', 'appuser/signupConfirm', attestation).then(result => { if (result.code) reject(result); else { resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * @param { handle:string, code:string} data * @returns */ signupComplete(data) { return new Promise((resolve, reject) => { try { let valid = data.code; if (!valid) { reject({ message: "invalid singup data" }); return; } this.apiRequest('POST', 'appuser/signupComplete', data).then(result => { if (result.code) reject(result); else { this.user = result; resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * @param {handle:string} data * * @returns */ login(data) { return new Promise((resolve, reject) => { try { let valid = data.handle; if (!valid) { reject({ message: "invalid login data" }); return; } this.logout(); data.handle = data.handle.toLowerCase(); this.apiRequest('POST', 'appuser/login', data).then(result => { if (result.code) reject(result); else { resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * https://w3c.github.io/webauthn/#dictdef-authenticationresponsejson * @param * handle:string, * { * id: Base64URLString; * rawId: Base64URLString; * response: { * clientDataJSON:Base64URLString, * authenticatorData:Base64URLString, * signature:Base64URLString, * userHandle?: Base64URLString * }; * authenticatorAttachment?: string; * type: string; * } assertion * * @returns */ loginComplete(handle, assertion) { return new Promise((resolve, reject) => { try { let valid = handle && assertion.id && assertion.rawId && assertion.response.clientDataJSON && assertion.response.authenticatorData && assertion.response.signature && assertion.type; if (!valid) { reject({ message: "invalid assertion" }); return; } assertion.handle = handle.toLowerCase(); this.apiRequest('POST', 'appuser/loginComplete', assertion).then(result => { if (result && result['access-token']) { this.user = result; resolve(result); } else reject(result); }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * @param {token:string, provider:string} data * * @returns */ socialLogin(data) { return new Promise((resolve, reject) => { try { let valid = data.token && data.provider; if (!valid) { reject({ message: "invalid data" }); return; } let that = this; this.apiRequest('POST', 'appuser/socialLogin', data).then(result => { if (result && result['access-token']) { that.user = result; resolve(result); } else reject(result); }); } catch (error) { reject(error); } }); } /** * * @param {token:string, provider:string, handle:string} data * * @returns */ socialSignup(data) { return new Promise((resolve, reject) => { try { let valid = data.token && data.provider && data.handle; if (!valid) { reject({ message: "invalid data" }); return; } this.logout(); let that = this; this.apiRequest('POST', 'appuser/socialSignup', data).then(result => { if (result && result['access-token']) { that.user = result; resolve(result); } else reject(result); }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * @param {handle:string} data * * @returns */ verify(data) { return new Promise((resolve, reject) => { try { let valid = data.handle; if (!valid) { reject({ message: "invalid data" }); return; } data.handle = data.handle.toLowerCase(); this.apiRequest('POST', 'appuser/verify', data).then(result => { if (result.code) reject(result); else { resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * https://w3c.github.io/webauthn/#dictdef-authenticationresponsejson * @param * handle:string, * { * id: Base64URLString; * rawId: Base64URLString; * response: { * clientDataJSON:Base64URLString, * authenticatorData:Base64URLString, * signature:Base64URLString, * userHandle?: Base64URLString * }; * authenticatorAttachment?: string; * type: string * } assertion * * @returns */ verifyComplete(handle, assertion) { return new Promise((resolve, reject) => { try { let valid = handle && assertion.id && assertion.rawId && assertion.response.clientDataJSON && assertion.response.authenticatorData && assertion.response.signature && assertion.type; if (!valid) { reject({ message: "invalid assertion" }); return; } assertion.handle = handle.toLowerCase(); let that = this; this.apiRequest('POST', 'appuser/verifyComplete', assertion).then(result => { if (result && result['access-token']) { that.user = result; resolve(result); } else reject(result); }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * @param {token:string, provider:string} data * @returns */ verifySocialAccount(data) { return new Promise((resolve, reject) => { try { let valid = data.token && data.provider; if (!valid) { reject({ message: "invalid data" }); return; } let that = this; this.apiRequest('POST', 'appuser/verifySocialAccount', data).then(result => { if (result && result['access-token']) { that.user = result; resolve(result); } else reject(result); }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } logout() { this.user = new User(); } /** * * @returns application user */ getAppUser() { return new Promise((resolve, reject) => { try { this.apiRequest('GET', 'appuser/user').then(result => { if (result.code) reject(result); else { this.user = result; resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * @param {locale:string} data * @returns */ setLocale(data) { return new Promise((resolve, reject) => { try { let valid = data.locale; if (!valid) { reject({ message: "invalid data" }); return; } this.apiRequest('POST', 'appuser/setLocale', data).then(result => { if (result == true) resolve(result); else reject(result); }).catch((error) => reject(error)); } catch (error) { resolve(error); } }); } /** * * @param {displayName:string} data * @returns */ updateProfile(data) { return new Promise((resolve, reject) => { try { let valid = data.displayName; if (!valid) { reject({ message: "invalid data" }); return; } this.apiRequest('POST', 'appuser/updateProfile', data).then(result => { if (result.code) resolve(result); else reject(result); }).catch((error) => reject(error)); } catch (error) { } }); } /** * * @param {userName:string} data * @returns */ setUserName(data) { return new Promise((resolve, reject) => { try { if (!data.userName) { reject({ message: "invalid data" }); return; } data.userName = data.userName.toLowerCase(); this.apiRequest('POST', 'appuser/setUserName', data).then(result => { if (result.code) reject(result); else resolve(result); }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * @param {userName:string} data * @returns */ userNameAvailable(data) { return new Promise((resolve, reject) => { try { if (!data.userName) { reject({ message: "invalid data" }); return; } data.userName = data.userName.toLowerCase(); this.apiRequest('GET', `appuser/userNameAvailable?userName=${data.userName}`).then(result => { if (result.code) reject(result); else resolve(result); }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * * @returns */ deleteAccount() { return new Promise((resolve, reject) => { try { this.apiRequest('POST', 'appuser/deleteAccount', {}).then(result => { if (result.code) reject(result); else resolve(result); }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * * @returns challenge */ addPasskey(data = {}) { return new Promise((resolve, reject) => { try { this.apiRequest('POST', 'appuser/addPasskey', data).then(result => { if (result.code) reject(result); else resolve(result); }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * https://w3c.github.io/webauthn/#dictdef-registrationresponsejson * @param * { * * id: Base64URLString; * rawId: Base64URLString; * response: { * clientDataJSON: Base64URLString; * attestationObject: Base64URLString; * authenticatorData?: Base64URLString; * }; * authenticatorAttachment?: string; * type: string; * } attestation * @returns */ addPasskeyComplete(attestation) { return new Promise((resolve, reject) => { try { let valid = attestation.id && attestation.rawId && attestation.response && attestation.response.clientDataJSON && attestation.response.attestationObject && attestation.type; if (!valid) { reject({ message: "invalid attestation" }); return; } this.apiRequest('POST', 'appuser/addPasskeyComplete', attestation).then(result => { if (result.code) reject(result); else { this.user = result; resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * @param {keyId:string, keyName:string} data * @returns user */ updatePasskey(data) { return new Promise((resolve, reject) => { try { this.apiRequest('POST', 'appuser/updatePasskey', data).then(result => { if (result.code) reject(result); else { this.user = result; resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } /** * * @param {keyId:string} data * @returns user */ removePasskey(data) { return new Promise((resolve, reject) => { try { this.apiRequest('POST', 'appuser/removePasskey', data).then(result => { if (result.code) reject(result); else { this.user = result; resolve(result); } }).catch((error) => reject(error)); } catch (error) { reject(error); } }); } async apiRequest(method, endpoint, data) { try { if (!this.apiConfig.appToken) { console.log("apiRequest this.apiConfig ", this.apiConfig); throw ("invalid api config for app token"); } let options = { method: method ? method : 'POST', headers: { 'Content-Type': 'application/json', } }; if (this.user && this.user['access-token'] != "") options.headers['access-token'] = this.user['access-token']; else if (data && data['access-token']) options.headers['access-token'] = data['access-token']; else if (data && data.signupToken) options.headers['signup-token'] = data.signupToken; else options.headers['app-token'] = this.apiConfig.appToken; if (data && method == "POST" || method == "PUT") options.body = JSON.stringify(data); const response = await fetch(`${this.apiConfig.apiUrl}/api/${endpoint}`, options); let result = await response.json(); console.log(`apiRequest path: ${endpoint} - result: `, result); // if (response.status !== 200) return { error: result } // else return result return result; } catch (error) { console.log(`apiRequest error:`, error); return error; } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxAppkeyWebauthnService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxAppkeyWebauthnService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxAppkeyWebauthnService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [] }); class NgxAppkeyWebauthnComponent { static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxAppkeyWebauthnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NgxAppkeyWebauthnComponent, isStandalone: true, selector: "lib-ngx-appkey-webauthn", ngImport: i0, template: ` <p> ngx-appkey-webauthn works! </p> `, isInline: true, styles: [""] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxAppkeyWebauthnComponent, decorators: [{ type: Component, args: [{ selector: 'lib-ngx-appkey-webauthn', standalone: true, imports: [], template: ` <p> ngx-appkey-webauthn works! </p> ` }] }] }); /* * Public API Surface of ngx-appkey-webauthn */ /** * Generated bundle index. Do not edit. */ export { NgxAppkeyWebauthnComponent, NgxAppkeyWebauthnService }; //# sourceMappingURL=ngx-appkey-webauthn.mjs.map