feat(sdk): add initial browser and server authentication SDK exports

This commit is contained in:
2026-05-13 23:11:56 +00:00
commit cb41ec6e6f
22 changed files with 10964 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
import * as plugins from './plugins.js';
import type { IIdpSdkAccount, TIdpAccountAuthSource, TIdpAccountRole, TIdpAccountStatus } from './interfaces.js';
let activeSmartdataDb: plugins.smartdata.SmartdataDb | null = null;
export const setAccountDocSmartdataDb = (smartdataDbArg: plugins.smartdata.SmartdataDb) => {
activeSmartdataDb = smartdataDbArg;
};
const getDb = () => {
if (!activeSmartdataDb) {
throw new Error('IdpSdkAccountDoc has no SmartdataDb configured');
}
return activeSmartdataDb;
};
@plugins.smartdata.Collection(() => getDb())
export class IdpSdkAccountDoc extends plugins.smartdata.SmartDataDbDoc<IdpSdkAccountDoc, IdpSdkAccountDoc> {
@plugins.smartdata.unI()
@plugins.smartdata.svDb()
public id!: string;
@plugins.smartdata.svDb()
public email!: string;
@plugins.smartdata.svDb()
public emailNormalized!: string;
@plugins.smartdata.svDb()
public name: string = '';
@plugins.smartdata.svDb()
public role!: TIdpAccountRole;
@plugins.smartdata.svDb()
public status!: TIdpAccountStatus;
@plugins.smartdata.svDb()
public authSources!: TIdpAccountAuthSource[];
@plugins.smartdata.svDb()
public passwordHash?: string;
@plugins.smartdata.svDb()
public idpSubject?: string;
@plugins.smartdata.svDb()
public createdAt!: number;
@plugins.smartdata.svDb()
public updatedAt!: number;
@plugins.smartdata.svDb()
public lastLoginAt?: number;
public toAccount(): IIdpSdkAccount {
return {
id: this.id,
email: this.email,
emailNormalized: this.emailNormalized,
name: this.name,
role: this.role,
status: this.status,
authSources: this.authSources || [],
passwordHash: this.passwordHash,
idpSubject: this.idpSubject,
createdAt: this.createdAt,
updatedAt: this.updatedAt,
lastLoginAt: this.lastLoginAt,
};
}
public static async findById(idArg: string): Promise<IdpSdkAccountDoc | null> {
return IdpSdkAccountDoc.getInstance({ id: idArg });
}
public static async findByEmailNormalized(emailNormalizedArg: string): Promise<IdpSdkAccountDoc | null> {
return IdpSdkAccountDoc.getInstance({ emailNormalized: emailNormalizedArg });
}
public static async findAdmins(): Promise<IdpSdkAccountDoc[]> {
return IdpSdkAccountDoc.getInstances({ role: 'admin', status: 'active' });
}
}