UNPKG

@j2blasco/ts-auth

Version:

TypeScript authentication abstraction library that eliminates vendor lock-in and provides mock-free testing for both frontend and backend authentication systems

103 lines (102 loc) 4.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AuthBackendTesting = void 0; const ts_result_1 = require("@j2blasco/ts-result"); const rxjs_1 = require("rxjs"); const uuid_1 = require("uuid"); class AuthBackendTesting { constructor() { } changePassword(args) { const { uid, newPassword } = args; const user = this.registeredUsers.find((u) => u.uid === uid); if (!user) { return Promise.resolve(ts_result_1.resultError.unknown('User not found')); } user.password = newPassword; return Promise.resolve((0, ts_result_1.resultSuccessVoid)()); } sendResetPasswordEmail(_args) { throw new Error('Method not implemented.'); } registeredUsers = new Array(); getUidFromIdToken(idToken) { const user = this.registeredUsers.find((u) => u.idToken === idToken); if (!user) { return Promise.resolve(ts_result_1.resultError.unknown('User not found')); } return Promise.resolve((0, ts_result_1.resultSuccess)(user.uid)); } onUserCreated$ = new rxjs_1.Subject(); onUserDeleted$ = new rxjs_1.Subject(); async signInWithEmailAndPassword(args) { const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!regex.test(args.email)) { return Promise.resolve(ts_result_1.resultError.withCode('invalid-email')); } const user = this.registeredUsers.find((u) => u.email === args.email); if (!user) { return Promise.resolve(ts_result_1.resultError.withCode('user-not-found')); } if (user.password !== args.password) { return Promise.resolve(ts_result_1.resultError.withCode('wrong-password')); } return Promise.resolve((0, ts_result_1.resultSuccess)({ uid: user.uid, refreshToken: user.refreshToken, idToken: user.idToken, })); } async signInWithRefreshToken(refreshToken) { // Find the user with the matching refresh token const user = this.registeredUsers.find((u) => u.refreshToken === refreshToken); if (!user) { return Promise.resolve(ts_result_1.resultError.unknown('Invalid refresh token')); } // Generate a new idToken for this session const newIdToken = (0, uuid_1.v4)(); user.idToken = newIdToken; return Promise.resolve((0, ts_result_1.resultSuccess)({ idToken: newIdToken, uid: user.uid, })); } async signUpWithEmailPassword(_args) { const uid = (0, uuid_1.v4)(); const idToken = (0, uuid_1.v4)(); const refreshToken = (0, uuid_1.v4)(); this.registeredUsers.push({ idToken, uid, email: _args.email, password: _args.password, refreshToken, }); this.onUserCreated$.next({ uid }); return Promise.resolve((0, ts_result_1.resultSuccess)({ uid })); } async changeEmail(_args) { const user = this.registeredUsers.find((u) => u.uid === _args.uid); if (!user) { return Promise.resolve(ts_result_1.resultError.unknown('User not found')); } user.email = _args.newEmail; return Promise.resolve((0, ts_result_1.resultSuccess)(undefined)); } async deleteUser(_args) { const index = this.registeredUsers.findIndex((u) => u.uid === _args.uid); if (index === -1) { return Promise.resolve(ts_result_1.resultError.unknown('User not found')); } this.registeredUsers.splice(index, 1); this.onUserDeleted$.next({ uid: _args.uid }); return Promise.resolve((0, ts_result_1.resultSuccess)(undefined)); } getUidByEmail(email) { const user = this.registeredUsers.find((u) => u.email === email); if (!user) { return Promise.resolve(ts_result_1.resultError.withCode('email-not-found')); } return Promise.resolve((0, ts_result_1.resultSuccess)({ uid: user.uid })); } } exports.AuthBackendTesting = AuthBackendTesting;