@bitblit/ratchet-warden-common
Version:
Typescript library to simplify using simplewebauthn and secondary auth methods over GraphQL
188 lines • 6.77 kB
JavaScript
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