{"version":3,"file":"CredentialManagementAPIHelpers.js","sourceRoot":"","sources":["../../TS/CredentialManagementAPIHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { IJSModule } from \"./IJSModule.js\";\r\n\r\nexport class CredentialManagementAPIHelpers implements IJSModule {\r\n private ASSEMBLYNAME;\r\n\r\n public serviceName: string;\r\n\r\n public initialize(): boolean {\r\n this.ASSEMBLYNAME = 'SPCW';\r\n this.serviceName = 'CredentialManagementAPIHelpers';\r\n\r\n window['CredentialManagementAPI'] = this;\r\n\r\n return true;\r\n }\r\n\r\n private componentInstanceObj = null;\r\n\r\n public passComponentInstance(obj: object) {\r\n this.componentInstanceObj = obj;\r\n }\r\n\r\n //CJ - test this and see if this could work\r\n public async storeString(nameKey: string, value: string) {\r\n // Check if the browser supports password credentials (and the Credential Management API)\r\n\r\n console.log(\"P1\");\r\n\r\n // CJ - what is the max password length?\r\n if (\"PasswordCredential\" in window) {\r\n // Persist access information in the local credentials store\r\n let cred = new PasswordCredential(\r\n {\r\n id: \"CONNECT\",\r\n password: value,\r\n name: nameKey\r\n });\r\n\r\n window[\"TestCred\"] = cred;\r\n\r\n console.log(\"P2\");\r\n console.log(cred.password);\r\n console.log(cred.name);\r\n\r\n await navigator.credentials.store(cred).catch(ex => {\r\n console.log(`Error storing credentials ${ex}`)\r\n });\r\n\r\n console.log(`Credentials stored for ${nameKey}`);\r\n }\r\n }\r\n\r\n public async getInfo(): Promise {\r\n console.log(\"G1\");\r\n\r\n let data = await navigator.credentials.get({ password: true });\r\n\r\n console.log(\"G2\");\r\n console.log(data);\r\n\r\n if (!data) {\r\n //TODO: show error\r\n console.log('No credentials in store.');\r\n return;\r\n }\r\n\r\n console.log(\"G3\");\r\n\r\n let cred = data as PasswordCredential;\r\n\r\n console.log(\"G4\");\r\n\r\n console.log(`Info retrieved - ${cred.id}, ${cred.password}`);\r\n\r\n return cred.password; // { email: cred.id, password: cred.password, accountKey: cred.name, iconURL: cred.iconURL };\r\n }\r\n\r\n\r\n //TODO: VM - provide some type for it\r\n public async store(cred: any) {\r\n let user = {\r\n accountKey: cred.accountKey.trim(),\r\n email: cred.email.trim(),\r\n password: cred.password.trim(),\r\n iconURL: cred.iconURL.trim()\r\n };\r\n\r\n const callRegister = (user) => {\r\n return new Promise((resolve, reject) => {\r\n\r\n //VM - any client validation before saving?\r\n if (!user.email) {\r\n return reject(new Error('username too short'));\r\n }\r\n\r\n if (!user.password) {\r\n return reject(new Error('password too short'));\r\n }\r\n\r\n resolve(user);\r\n })\r\n }\r\n\r\n // Send the user data to the server for registration.\r\n let registeredUser;\r\n try {\r\n registeredUser = await callRegister(user);\r\n } catch (e) {\r\n //TODO: show error\r\n console.error(e);\r\n return;\r\n }\r\n\r\n // Check if the browser supports password credentials (and the Credential Management API)\r\n if (\"PasswordCredential\" in window) {\r\n // Persist access information in the local credentials store\r\n let cred = new PasswordCredential({\r\n id: registeredUser.email,\r\n password: registeredUser.password,\r\n name: registeredUser.accountKey,\r\n iconURL: registeredUser.iconURL\r\n });\r\n\r\n await navigator.credentials.store(cred);\r\n\r\n console.log(`Credentials stored for ${registeredUser.email}`);\r\n }\r\n }\r\n\r\n public async login(): Promise {\r\n // Check if the browser supports password credentials (and the Credential Management API)\r\n if (\"PasswordCredential\" in window) {\r\n let data = await navigator.credentials.get({\r\n password: true,\r\n //federated: {\r\n // providers: ['https://accounts.google.com']\r\n //},\r\n //mediation: 'silent'\r\n mediation: 'optional'\r\n });\r\n\r\n if (!data) {\r\n //TODO: show error\r\n console.log('No credentials in store.');\r\n return null;\r\n }\r\n\r\n let cred = data as PasswordCredential;\r\n\r\n console.log(`You are now logged in as ${cred.id}.`);\r\n\r\n return { email: cred.id, password: cred.password, accountKey: cred.name, iconURL: cred.iconURL };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n"]}