UNPKG

@bitblit/ratchet-warden-common

Version:

Typescript library to simplify using simplewebauthn and secondary auth methods over GraphQL

188 lines 6.77 kB
import { RequireRatchet } from "@bitblit/ratchet-common/lang/require-ratchet"; import { Logger } from "@bitblit/ratchet-common/logger/logger"; import { ErrorRatchet } from "@bitblit/ratchet-common/lang/error-ratchet"; import { StringRatchet } from "@bitblit/ratchet-common/lang/string-ratchet"; import { WardenLoginRequestType } from "../common/model/warden-login-request-type"; export class WardenClient { commandSender; jwtProvider; constructor(commandSender, jwtProvider) { this.commandSender = commandSender; this.jwtProvider = jwtProvider; RequireRatchet.notNullOrUndefined(commandSender, 'commandSender'); RequireRatchet.notNullOrUndefined(jwtProvider, 'jwtProvider'); } async exchangeCommand(cmd, returnErrors) { const asString = JSON.stringify(cmd); const resp = await this.commandSender.sendCommand(asString, this.jwtProvider.fetchCurrentLoggedInJwtToken()); const parsed = JSON.parse(resp); if (parsed?.error && !returnErrors) { ErrorRatchet.throwFormattedErr('%s', parsed.error); } return parsed; } async createAccount(contact, sendCode, label, tags) { const cmd = { createAccount: { contact: contact, sendCode: sendCode, label: label, tags: tags, }, }; const rval = await this.exchangeCommand(cmd); return rval.createAccount; } async sendMagicLinkRaw(smlCmd) { if (smlCmd) { const cmd = { sendMagicLink: smlCmd, }; const rval = await this.exchangeCommand(cmd); return rval.sendMagicLink; } else { Logger.warn('Skipping magic link command - none supplied'); return false; } } async sendMagicLinkByUserId(userId, landingUrl, contactType, meta) { const cmd = { contactLookup: { userId: userId, contactType: contactType, }, landingUrl: landingUrl, meta: meta, }; return this.sendMagicLinkRaw(cmd); } async sendMagicLink(contact, landingUrl, meta) { const cmd = { contact: contact, landingUrl: landingUrl, meta: meta, }; return this.sendMagicLinkRaw(cmd); } async generateWebAuthnAuthenticationChallengeForUserId(userId) { const cmd = { generateWebAuthnAuthenticationChallengeForUserId: userId, }; const rval = await this.exchangeCommand(cmd); const parsed = JSON.parse(rval.generateWebAuthnAuthenticationChallengeForUserId.dataAsJson); return parsed; } async exportWebAuthnRegistrationEntryForLoggedInUser(origin) { const cmd = { exportWebAuthnRegistrationEntryForLoggedInUser: origin, }; const rval = await this.exchangeCommand(cmd); return rval.exportWebAuthnRegistrationEntryForLoggedInUser; } async importWebAuthnRegistrationEntryForLoggedInUser(token) { const cmd = { importWebAuthnRegistrationEntryForLoggedInUser: token, }; const rval = await this.exchangeCommand(cmd); return rval.importWebAuthnRegistrationEntryForLoggedInUser; } async generateWebAuthnRegistrationChallengeForLoggedInUser() { const cmd = { generateWebAuthnRegistrationChallengeForLoggedInUser: true, }; const rval = await this.exchangeCommand(cmd); const parsed = JSON.parse(rval.generateWebAuthnRegistrationChallengeForLoggedInUser.dataAsJson); return parsed; } async removeWebAuthnRegistration(userId, credId) { const cmd = { removeWebAuthnRegistration: { userId: userId, credentialId: credId, }, }; const rval = await this.exchangeCommand(cmd); return rval.removeWebAuthnRegistration; } async removeWebAuthnRegistrationFromLoggedInUser(input) { const cmd = { removeWebAuthnRegistrationFromLoggedInUser: input, }; const rval = await this.exchangeCommand(cmd); return rval.removeWebAuthnRegistrationFromLoggedInUser; } async removeContactFromLoggedInUser(input) { const cmd = { removeContactFromLoggedInUser: input, }; const rval = await this.exchangeCommand(cmd); return rval.removeContactFromLoggedInUser; } async sendExpiringValidationToken(contact) { const cmd = { sendExpiringValidationToken: contact, }; const rval = await this.exchangeCommand(cmd); return rval.sendExpiringValidationToken; } async addContactToLoggedInUser(contact) { const cmd = { addContactToLoggedInUser: contact, }; const rval = await this.exchangeCommand(cmd); return rval.addContactToLoggedInUser; } async addWebAuthnRegistrationToLoggedInUser(applicationName, deviceLabel, data) { const inCmd = { webAuthn: { dataAsJson: JSON.stringify(data), }, applicationName: applicationName, deviceLabel: deviceLabel, }; const cmd = { addWebAuthnRegistrationToLoggedInUser: inCmd, }; const rval = await this.exchangeCommand(cmd); return rval.addWebAuthnRegistrationToLoggedInUser; } async performLoginCmd(login) { const loginCmd = { performLogin: login, }; const cmdResponse = await this.exchangeCommand(loginCmd); return cmdResponse.performLogin; } async refreshJwtToken(oldJwtToken) { let rval = null; if (StringRatchet.trimToNull(oldJwtToken)) { try { const resp = await this.exchangeCommand({ refreshJwtToken: oldJwtToken }); rval = resp.refreshJwtToken; } catch (err) { Logger.error('JwtRefresh Failed : %s', err); } } return rval; } async executeExpiringTokenBasedLogin(contact, expiringToken) { let rval = null; try { const loginCmd = { type: WardenLoginRequestType.ExpiringToken, contact: contact, expiringToken: expiringToken, }; rval = await this.performLoginCmd(loginCmd); if (rval?.jwtToken) { } } catch (err) { Logger.error('ExpiringToken login Failed : %s', err); } return rval; } } //# sourceMappingURL=warden-client.js.map