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
JavaScript
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