import type { AuthStateValue } from "../../shared/auth-messages"; import type { MarketRecord } from "./types"; export interface BatchPayload { authors: Array<{ authorId: string; authorName: string; authorUid?: string; }>; batchName: string; createdAt: string; creatorName: string; logtoUserId: string; resource: string; } export function createBatchPayload(options: { authState: AuthStateValue; batchName: string; createdAt: string; records: MarketRecord[]; }): BatchPayload { const logtoUserId = options.authState.userInfo?.sub?.trim(); if (!logtoUserId) { throw new Error("batch submit user id unavailable"); } const resource = options.authState.resource?.trim(); if (!resource) { throw new Error("batch submit resource unavailable"); } const batchName = options.batchName.trim(); if (!batchName) { throw new Error("batch submit batch name is required"); } return { authors: options.records.map((record) => ({ authorId: record.authorId, authorName: record.authorName, ...(record.coreUserId ? { authorUid: record.coreUserId } : {}) })), batchName, createdAt: options.createdAt, creatorName: options.authState.userInfo?.name ?? options.authState.userInfo?.username ?? logtoUserId, logtoUserId, resource }; }