UNPKG

edge-core-js

Version:

Edge account & wallet management library

186 lines (155 loc) 4.35 kB
import type { Cleaner } from 'cleaners' import { asArray, asDate, asNumber, asObject, asOptional, asString, asValue, uncleaner } from 'cleaners' import { asBase32, asBase64, asEdgeBox, asEdgeKeyBox, asEdgeSnrp, asRecovery2Auth } from './server-cleaners' import type { EdgeBox, EdgeKeyBox, EdgeSnrp } from './server-types' export interface EdgeRepoDump { [key: string]: EdgeBox } export interface EdgeVoucherDump { // Identity: loginId: Uint8Array voucherAuth: Uint8Array voucherId: string // Login capability: created: Date activates: Date // Automatically becomes approved on this date status: 'pending' | 'approved' | 'rejected' // Information about the login: ip: string ipDescription: string deviceDescription: string | undefined } export interface EdgeLoginDump { // Identity: appId: string created: Date loginId: Uint8Array // Nested logins: parentBox?: EdgeBox parentId?: Uint8Array // loginId // 2-factor login: otpKey?: Uint8Array otpResetAuth?: string otpResetDate?: Date otpTimeout?: number // Password login: passwordAuth?: Uint8Array passwordAuthBox?: EdgeBox passwordAuthSnrp?: EdgeSnrp passwordBox?: EdgeBox passwordKeySnrp?: EdgeSnrp // PIN v2 login: pin2Id?: Uint8Array // base64 pin2Auth?: Uint8Array pin2Box?: EdgeBox pin2KeyBox?: EdgeBox pin2TextBox?: EdgeBox // Recovery v2 login: recovery2Id?: Uint8Array // base64 recovery2Auth?: Uint8Array[] recovery2Box?: EdgeBox recovery2KeyBox?: EdgeBox question2Box?: EdgeBox // Secret-key login: loginAuth?: Uint8Array loginAuthBox?: EdgeBox // Username: userId?: Uint8Array userTextBox?: EdgeBox // Resources: children: EdgeLoginDump[] keyBoxes: EdgeKeyBox[] mnemonicBox?: EdgeBox rootKeyBox?: EdgeBox syncKeyBox?: EdgeBox vouchers: EdgeVoucherDump[] // Obsolete: pinBox?: EdgeBox pinId?: string pinKeyBox?: EdgeBox } export const asEdgeRepoDump: Cleaner<EdgeRepoDump> = asObject(asEdgeBox) export const asEdgeVoucherDump: Cleaner<EdgeVoucherDump> = asObject({ // Identity: loginId: asBase64, voucherAuth: asBase64, voucherId: asString, // Login capability: created: asDate, activates: asDate, // Automatically becomes approved on this date status: asValue('pending', 'approved', 'rejected'), // Information about the login: ip: asString, ipDescription: asString, deviceDescription: asOptional(asString) }) export const asEdgeLoginDump: Cleaner<EdgeLoginDump> = asObject({ // Identity: appId: asString, created: asOptional(asDate, () => new Date()), loginId: asBase64, // Nested logins: children: asOptional( asArray(raw => asEdgeLoginDump(raw)), () => [] ), parentBox: asOptional(asEdgeBox), parentId: (): Uint8Array | undefined => undefined, // 2-factor login: otpKey: asOptional(asBase32), otpResetAuth: asOptional(asString), otpResetDate: asOptional(asDate), otpTimeout: asOptional(asNumber), // Password login: passwordAuth: asOptional(asBase64), passwordAuthBox: asOptional(asEdgeBox), passwordAuthSnrp: asOptional(asEdgeSnrp), passwordBox: asOptional(asEdgeBox), passwordKeySnrp: asOptional(asEdgeSnrp), // PIN v2 login: pin2Id: asOptional(asBase64), pin2Auth: asOptional(asBase64), pin2Box: asOptional(asEdgeBox), pin2KeyBox: asOptional(asEdgeBox), pin2TextBox: asOptional(asEdgeBox), // Recovery v2 login: recovery2Id: asOptional(asBase64), recovery2Auth: asOptional(asRecovery2Auth), question2Box: asOptional(asEdgeBox), recovery2Box: asOptional(asEdgeBox), recovery2KeyBox: asOptional(asEdgeBox), // Secret-key login: loginAuth: asOptional(asBase64), loginAuthBox: asOptional(asEdgeBox), // Username: userId: asOptional(asBase64), userTextBox: asOptional(asEdgeBox), // Keys and assorted goodies: keyBoxes: asOptional(asArray(asEdgeKeyBox), () => []), mnemonicBox: asOptional(asEdgeBox), rootKeyBox: asOptional(asEdgeBox), syncKeyBox: asOptional(asEdgeBox), vouchers: asOptional(asArray(asEdgeVoucherDump), () => []), // Obsolete: pinBox: asOptional(asEdgeBox), pinId: asOptional(asString), pinKeyBox: asOptional(asEdgeBox) }) export const wasEdgeLoginDump = uncleaner<EdgeLoginDump>(asEdgeLoginDump) export const wasEdgeRepoDump = uncleaner<EdgeRepoDump>(asEdgeRepoDump)