// otp-account.js // Copyright (C) 2024 DTP Technologies, LLC // All Rights Reserved 'use strict'; import mongoose from 'mongoose'; const Schema = mongoose.Schema; var OtpBackupTokenSchema = new Schema({ token: { type: String, required: true }, claimed: { type: Date }, }); const OtpAccountSchema = new Schema({ created: { type: Date, default: Date.now, required: true, index: -1 }, user: { type: Schema.ObjectId, required: true, index: 1, ref: 'User' }, service: { type: String, required: true, index: 1 }, secret: { type: String, required: true, select: false }, algorithm: { type: String, required: true }, step: { type: Number, default: 30, required: true, min: 15 }, digits: { type: Number, default: 6, required: true, min: 6 }, backupTokens: { type: [OtpBackupTokenSchema], select: false }, lastVerification: { type: Date }, lastVerificationIp: { type: String }, }); OtpAccountSchema.index({ user: 1, service: 1, }, { unique: true, name: 'otp_user_svc_uniq_idx', }); export default mongoose.model('OtpAccount', OtpAccountSchema);