import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose"; import { HydratedDocument } from "mongoose"; import type { FanavaranClientKey } from "src/core/config/fanavaran-client.config"; /** * Shared Fanavaran authenticationToken per tenant. * Survives process restarts / multi-instance so we do not Login on every request. */ @Schema({ collection: "fanavaranAuthTokens", timestamps: true }) export class FanavaranAuthToken { @Prop({ type: String, required: true, unique: true, index: true }) clientKey: FanavaranClientKey; @Prop({ type: String, required: true }) authenticationToken: string; /** * Fingerprint of auth config used when this token was minted * (appName/secret/user/pass/corp/contract/location). Mismatch → re-login. */ @Prop({ type: String, required: false }) authFingerprint?: string; /** When this token should be refreshed (Asia/Tehran midnight). */ @Prop({ type: Date, required: true, index: true }) expiresAt: Date; } export type FanavaranAuthTokenDocument = HydratedDocument; export const FanavaranAuthTokenSchema = SchemaFactory.createForClass(FanavaranAuthToken);