aidol 0.13.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/lib/assertResourceId.ts","../src/repositories/AIdolRepository.ts","../src/repositories/ChatroomRepository.ts","../src/repositories/CompanionRepository.ts","../src/repositories/LeadsRepository.ts","../src/repositories/LocalChatroomIdsRepository.ts","../src/i18n/translations.ts"],"sourcesContent":["const UUID_RE =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Validates that a resource ID is a well-formed UUID.\n * Prevents client-side path traversal when IDs are interpolated into URLs.\n */\nexport function assertResourceId(id: string | number): void {\n if (typeof id !== \"string\" || !UUID_RE.test(id)) {\n throw new Error(`Invalid resource ID: ${String(id)}`);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport { assertResourceId } from \"../lib/assertResourceId\";\nimport type {\n AIdol,\n AIdolCreate,\n AIdolCreateResponse,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport {\n aidolCreateResponseSchema,\n aidolSchema,\n imageGenerationResponseSchema,\n} from \"../schemas\";\n\n/** Backend returns unwrapped responses — overrides wrap raw JSON in { data } */\nexport class AIdolRepository extends BaseCrudRepository<AIdol> {\n readonly resource = \"aidols\";\n\n protected getDataSchema() {\n return aidolSchema;\n }\n\n async createAIdol(variables: AIdolCreate): Promise<AIdolCreateResponse> {\n const url = this.apiService.buildUrl(this.resource);\n const raw = await this.apiService.request(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(variables),\n });\n return aidolCreateResponseSchema.parse(raw);\n }\n\n async getOne(\n params: { id: string | number },\n fetchOptions?: RequestInit,\n ): Promise<{ data: AIdol }> {\n assertResourceId(params.id);\n const url = `${this.apiService.buildUrl(this.resource)}/${params.id}`;\n const raw = await this.apiService.request(url, fetchOptions);\n return { data: aidolSchema.parse(raw) };\n }\n\n async update<TVariables = Record<string, unknown>>(params: {\n id: string | number;\n variables: TVariables;\n }): Promise<{ data: AIdol }> {\n assertResourceId(params.id);\n const url = `${this.apiService.buildUrl(this.resource)}/${params.id}`;\n const raw = await this.apiService.request(url, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(params.variables),\n });\n return { data: aidolSchema.parse(raw) };\n }\n\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nimport {\n chatroomSchema,\n messageSchema,\n type Chatroom,\n type Message,\n} from \"../schemas\";\n\n/**\n * Response schema for generate AI response endpoint\n */\nconst generateResponseSchema = z.object({\n messageId: z.string(),\n content: z.string(),\n});\n\nexport interface GenerateResponse {\n messageId: string;\n content: string;\n}\n\n/**\n * Repository for Chatroom entities\n * Handles chatroom CRUD and message operations\n */\nexport class ChatroomRepository extends BaseCrudRepository<Chatroom> {\n readonly resource = \"chatrooms\";\n\n protected getDataSchema() {\n return chatroomSchema;\n }\n\n /**\n * Get messages from a chatroom\n * GET /chatrooms/{id}/messages\n */\n async getMessages(\n chatroomId: string,\n options?: { limit?: number; offset?: number },\n fetchOptions?: RequestInit,\n ): Promise<Message[]> {\n const params = new URLSearchParams();\n if (options?.limit !== undefined) {\n params.set(\"limit\", options.limit.toString());\n }\n if (options?.offset !== undefined) {\n params.set(\"offset\", options.offset.toString());\n }\n\n const queryString = params.toString();\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/messages${queryString ? `?${queryString}` : \"\"}`,\n );\n\n const rawResponse = await this.apiService.request(url, fetchOptions);\n return this.validateResponse(rawResponse, z.array(messageSchema));\n }\n\n /**\n * Send a message to a chatroom\n * POST /chatrooms/{id}/messages\n *\n * ClaimToken is automatically sent via httpOnly cookie.\n *\n * @param chatroomId - The chatroom ID\n * @param content - The message content\n * @param fetchOptions - Optional fetch options\n */\n async sendMessage(\n chatroomId: string,\n content: string,\n fetchOptions?: RequestInit,\n ): Promise<Message> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/messages`,\n );\n\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ content, senderType: \"user\" }),\n });\n\n return this.validateResponse(rawResponse, messageSchema);\n }\n\n /**\n * Generate AI response for a chatroom with a specific companion\n * POST /chatrooms/{id}/companions/{companionId}/response\n */\n async generateResponse(\n chatroomId: string,\n companionId: string,\n fetchOptions?: RequestInit,\n ): Promise<GenerateResponse> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/companions/${companionId}/response`,\n );\n\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n return this.validateResponse(rawResponse, generateResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type {\n Companion,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport { companionSchema, imageGenerationResponseSchema } from \"../schemas\";\n\n/** CRUD operations use BaseCrudRepository (wrapped { data: T } responses) */\nexport class CompanionRepository extends BaseCrudRepository<Companion> {\n readonly resource = \"companions\";\n\n protected getDataSchema() {\n return companionSchema;\n }\n\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import type { LeadRequest, LeadResponse } from \"@/schemas\";\nimport { leadResponseSchema } from \"@/schemas\";\nimport type { ApiService } from \"@/services/ApiService\";\n\nexport class LeadsRepository {\n private readonly resource = \"leads\";\n\n constructor(private readonly apiService: ApiService) {}\n\n async create(request: LeadRequest): Promise<LeadResponse> {\n const url = this.apiService.buildUrl(this.resource);\n const response = await this.apiService.request(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(request),\n });\n\n return leadResponseSchema.parse(response);\n }\n}\n","import { z } from \"zod\";\n\nconst STORAGE_KEY = \"aidol_chatroom_ids\";\nconst schema = z.record(z.string(), z.string());\n\nconst readStorage = (): Record<string, string> => {\n if (typeof window === \"undefined\") return {};\n\n const stored = localStorage.getItem(STORAGE_KEY);\n if (!stored) return {};\n\n try {\n const parsed = JSON.parse(stored);\n const result = schema.safeParse(parsed);\n if (result.success) {\n return result.data;\n }\n console.warn(`[LocalChatroomIdsRepository] Invalid data, resetting`);\n return {};\n } catch (error) {\n if (error instanceof SyntaxError) {\n console.warn(`[LocalChatroomIdsRepository] Failed to parse, resetting`);\n return {};\n }\n throw error;\n }\n};\n\nconst writeStorage = (data: Record<string, string>): void => {\n if (typeof window === \"undefined\") {\n throw new Error(\n \"LocalChatroomIdsRepository write operations can only be called on the client side.\",\n );\n }\n localStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n};\n\n/**\n * Repository for managing chatroom IDs in localStorage.\n * Maps companionId to chatroomId for persistence across sessions.\n */\nexport const LocalChatroomIdsRepository = {\n getChatroomId(companionId: string): string | null {\n const data = readStorage();\n return data[companionId] ?? null;\n },\n\n setChatroomId(companionId: string, chatroomId: string): void {\n const data = readStorage();\n data[companionId] = chatroomId;\n writeStorage(data);\n },\n\n removeChatroomId(companionId: string): void {\n const data = readStorage();\n delete data[companionId];\n writeStorage(data);\n },\n};\n","/**\n * Server-safe exports for aidol translations.\n *\n * This module exports only JSON resources and constants,\n * avoiding React-specific code that would break SSR.\n */\n\nimport en from \"./locales/en/aidol.json\";\nimport es from \"./locales/es/aidol.json\";\nimport id from \"./locales/id/aidol.json\";\nimport ja from \"./locales/ja/aidol.json\";\nimport ko from \"./locales/ko/aidol.json\";\nimport th from \"./locales/th/aidol.json\";\nimport tl from \"./locales/tl/aidol.json\";\nimport vi from \"./locales/vi/aidol.json\";\nimport zh from \"./locales/zh/aidol.json\";\n\n/** AIdol namespace */\nexport const AIDOL_NS = \"aidol\";\n\n/**\n * Translation resources for the aidol namespace.\n * Use with i18next.addResourceBundle(lang, 'aidol', translations)\n *\n * @example\n * import { aidolTranslations, AIDOL_NS } from 'aidol/locale';\n *\n * // Add to existing i18n instance\n * Object.entries(aidolTranslations).forEach(([lang, resources]) => {\n * i18n.addResourceBundle(lang, AIDOL_NS, resources);\n * });\n */\nexport const aidolTranslations = {\n en,\n es,\n id,\n ja,\n ko,\n th,\n tl,\n vi,\n zh,\n};\n"],"names":["UUID_RE","assertResourceId","id","AIdolRepository","BaseCrudRepository","aidolSchema","variables","url","raw","aidolCreateResponseSchema","params","fetchOptions","request","rawResponse","imageGenerationResponseSchema","generateResponseSchema","z","ChatroomRepository","chatroomSchema","chatroomId","options","queryString","messageSchema","content","companionId","CompanionRepository","companionSchema","LeadsRepository","apiService","response","leadResponseSchema","STORAGE_KEY","schema","readStorage","stored","parsed","result","error","writeStorage","data","LocalChatroomIdsRepository","AIDOL_NS","aidolTranslations","en","es","ja","ko","th","tl","vi","zh"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/lib/assertResourceId.ts","../src/repositories/AIdolRepository.ts","../src/repositories/ChatroomRepository.ts","../src/repositories/CompanionRepository.ts","../src/repositories/LeadsRepository.ts","../src/repositories/LocalChatroomIdsRepository.ts","../src/i18n/translations.ts"],"sourcesContent":["const UUID_RE =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Validates that a resource ID is a well-formed UUID.\n * Prevents client-side path traversal when IDs are interpolated into URLs.\n */\nexport function assertResourceId(id: string | number): void {\n if (typeof id !== \"string\" || !UUID_RE.test(id)) {\n throw new Error(`Invalid resource ID: ${String(id)}`);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport { assertResourceId } from \"../lib/assertResourceId\";\nimport type {\n AIdol,\n AIdolCreate,\n AIdolCreateResponse,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport {\n aidolCreateResponseSchema,\n aidolSchema,\n imageGenerationResponseSchema,\n} from \"../schemas\";\n\n/** Backend returns unwrapped responses — overrides wrap raw JSON in { data } */\nexport class AIdolRepository extends BaseCrudRepository<AIdol> {\n readonly resource = \"aidols\";\n\n protected getDataSchema() {\n return aidolSchema;\n }\n\n async createAIdol(variables: AIdolCreate): Promise<AIdolCreateResponse> {\n const url = this.apiService.buildUrl(this.resource);\n const raw = await this.apiService.request(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(variables),\n });\n return aidolCreateResponseSchema.parse(raw);\n }\n\n async getOne(\n params: { id: string | number },\n fetchOptions?: RequestInit,\n ): Promise<{ data: AIdol }> {\n assertResourceId(params.id);\n const url = `${this.apiService.buildUrl(this.resource)}/${params.id}`;\n const raw = await this.apiService.request(url, fetchOptions);\n return { data: aidolSchema.parse(raw) };\n }\n\n async update<TVariables = Record<string, unknown>>(params: {\n id: string | number;\n variables: TVariables;\n }): Promise<{ data: AIdol }> {\n assertResourceId(params.id);\n const url = `${this.apiService.buildUrl(this.resource)}/${params.id}`;\n const raw = await this.apiService.request(url, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(params.variables),\n });\n return { data: aidolSchema.parse(raw) };\n }\n\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nimport {\n chatroomSchema,\n messageSchema,\n type Chatroom,\n type Message,\n} from \"../schemas\";\n\n/**\n * Response schema for generate AI response endpoint\n */\nconst generateResponseSchema = z.object({\n messageId: z.string(),\n content: z.string(),\n});\n\nexport interface GenerateResponse {\n messageId: string;\n content: string;\n}\n\n/**\n * Repository for Chatroom entities\n * Handles chatroom CRUD and message operations\n */\nexport class ChatroomRepository extends BaseCrudRepository<Chatroom> {\n readonly resource = \"chatrooms\";\n\n protected getDataSchema() {\n return chatroomSchema;\n }\n\n /**\n * Get messages from a chatroom\n * GET /chatrooms/{id}/messages\n */\n async getMessages(\n chatroomId: string,\n options?: { limit?: number; offset?: number },\n fetchOptions?: RequestInit,\n ): Promise<Message[]> {\n const params = new URLSearchParams();\n if (options?.limit !== undefined) {\n params.set(\"limit\", options.limit.toString());\n }\n if (options?.offset !== undefined) {\n params.set(\"offset\", options.offset.toString());\n }\n\n const queryString = params.toString();\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/messages${queryString ? `?${queryString}` : \"\"}`,\n );\n\n const rawResponse = await this.apiService.request(url, fetchOptions);\n return this.validateResponse(rawResponse, z.array(messageSchema));\n }\n\n /**\n * Send a message to a chatroom\n * POST /chatrooms/{id}/messages\n *\n * Anonymous ID is automatically sent via httpOnly cookie.\n *\n * @param chatroomId - The chatroom ID\n * @param content - The message content\n * @param fetchOptions - Optional fetch options\n */\n async sendMessage(\n chatroomId: string,\n content: string,\n fetchOptions?: RequestInit,\n ): Promise<Message> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/messages`,\n );\n\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ content, senderType: \"user\" }),\n });\n\n return this.validateResponse(rawResponse, messageSchema);\n }\n\n /**\n * Generate AI response for a chatroom with a specific companion\n * POST /chatrooms/{id}/companions/{companionId}/response\n */\n async generateResponse(\n chatroomId: string,\n companionId: string,\n fetchOptions?: RequestInit,\n ): Promise<GenerateResponse> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/companions/${companionId}/response`,\n );\n\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n return this.validateResponse(rawResponse, generateResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type {\n Companion,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport { companionSchema, imageGenerationResponseSchema } from \"../schemas\";\n\n/** CRUD operations use BaseCrudRepository (wrapped { data: T } responses) */\nexport class CompanionRepository extends BaseCrudRepository<Companion> {\n readonly resource = \"companions\";\n\n protected getDataSchema() {\n return companionSchema;\n }\n\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import type { LeadRequest, LeadResponse } from \"@/schemas\";\nimport { leadResponseSchema } from \"@/schemas\";\nimport type { ApiService } from \"@/services/ApiService\";\n\nexport class LeadsRepository {\n private readonly resource = \"leads\";\n\n constructor(private readonly apiService: ApiService) {}\n\n async create(request: LeadRequest): Promise<LeadResponse> {\n const url = this.apiService.buildUrl(this.resource);\n const response = await this.apiService.request(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(request),\n });\n\n return leadResponseSchema.parse(response);\n }\n}\n","import { z } from \"zod\";\n\nconst STORAGE_KEY = \"aidol_chatroom_ids\";\nconst schema = z.record(z.string(), z.string());\n\nconst readStorage = (): Record<string, string> => {\n if (typeof window === \"undefined\") return {};\n\n const stored = localStorage.getItem(STORAGE_KEY);\n if (!stored) return {};\n\n try {\n const parsed = JSON.parse(stored);\n const result = schema.safeParse(parsed);\n if (result.success) {\n return result.data;\n }\n console.warn(`[LocalChatroomIdsRepository] Invalid data, resetting`);\n return {};\n } catch (error) {\n if (error instanceof SyntaxError) {\n console.warn(`[LocalChatroomIdsRepository] Failed to parse, resetting`);\n return {};\n }\n throw error;\n }\n};\n\nconst writeStorage = (data: Record<string, string>): void => {\n if (typeof window === \"undefined\") {\n throw new Error(\n \"LocalChatroomIdsRepository write operations can only be called on the client side.\",\n );\n }\n localStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n};\n\n/**\n * Repository for managing chatroom IDs in localStorage.\n * Maps companionId to chatroomId for persistence across sessions.\n */\nexport const LocalChatroomIdsRepository = {\n getChatroomId(companionId: string): string | null {\n const data = readStorage();\n return data[companionId] ?? null;\n },\n\n setChatroomId(companionId: string, chatroomId: string): void {\n const data = readStorage();\n data[companionId] = chatroomId;\n writeStorage(data);\n },\n\n removeChatroomId(companionId: string): void {\n const data = readStorage();\n delete data[companionId];\n writeStorage(data);\n },\n};\n","/**\n * Server-safe exports for aidol translations.\n *\n * This module exports only JSON resources and constants,\n * avoiding React-specific code that would break SSR.\n */\n\nimport en from \"./locales/en/aidol.json\";\nimport es from \"./locales/es/aidol.json\";\nimport id from \"./locales/id/aidol.json\";\nimport ja from \"./locales/ja/aidol.json\";\nimport ko from \"./locales/ko/aidol.json\";\nimport th from \"./locales/th/aidol.json\";\nimport tl from \"./locales/tl/aidol.json\";\nimport vi from \"./locales/vi/aidol.json\";\nimport zh from \"./locales/zh/aidol.json\";\n\n/** AIdol namespace */\nexport const AIDOL_NS = \"aidol\";\n\n/**\n * Translation resources for the aidol namespace.\n * Use with i18next.addResourceBundle(lang, 'aidol', translations)\n *\n * @example\n * import { aidolTranslations, AIDOL_NS } from 'aidol/locale';\n *\n * // Add to existing i18n instance\n * Object.entries(aidolTranslations).forEach(([lang, resources]) => {\n * i18n.addResourceBundle(lang, AIDOL_NS, resources);\n * });\n */\nexport const aidolTranslations = {\n en,\n es,\n id,\n ja,\n ko,\n th,\n tl,\n vi,\n zh,\n};\n"],"names":["UUID_RE","assertResourceId","id","AIdolRepository","BaseCrudRepository","aidolSchema","variables","url","raw","aidolCreateResponseSchema","params","fetchOptions","request","rawResponse","imageGenerationResponseSchema","generateResponseSchema","z","ChatroomRepository","chatroomSchema","chatroomId","options","queryString","messageSchema","content","companionId","CompanionRepository","companionSchema","LeadsRepository","apiService","response","leadResponseSchema","STORAGE_KEY","schema","readStorage","stored","parsed","result","error","writeStorage","data","LocalChatroomIdsRepository","AIDOL_NS","aidolTranslations","en","es","ja","ko","th","tl","vi","zh"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -75,7 +75,7 @@ class pn extends c {
75
75
  * Send a message to a chatroom
76
76
  * POST /chatrooms/{id}/messages
77
77
  *
78
- * ClaimToken is automatically sent via httpOnly cookie.
78
+ * Anonymous ID is automatically sent via httpOnly cookie.
79
79
  *
80
80
  * @param chatroomId - The chatroom ID
81
81
  * @param content - The message content
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/lib/assertResourceId.ts","../src/repositories/AIdolRepository.ts","../src/repositories/ChatroomRepository.ts","../src/repositories/CompanionRepository.ts","../src/repositories/LeadsRepository.ts","../src/repositories/LocalChatroomIdsRepository.ts","../src/i18n/translations.ts"],"sourcesContent":["const UUID_RE =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Validates that a resource ID is a well-formed UUID.\n * Prevents client-side path traversal when IDs are interpolated into URLs.\n */\nexport function assertResourceId(id: string | number): void {\n if (typeof id !== \"string\" || !UUID_RE.test(id)) {\n throw new Error(`Invalid resource ID: ${String(id)}`);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport { assertResourceId } from \"../lib/assertResourceId\";\nimport type {\n AIdol,\n AIdolCreate,\n AIdolCreateResponse,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport {\n aidolCreateResponseSchema,\n aidolSchema,\n imageGenerationResponseSchema,\n} from \"../schemas\";\n\n/** Backend returns unwrapped responses — overrides wrap raw JSON in { data } */\nexport class AIdolRepository extends BaseCrudRepository<AIdol> {\n readonly resource = \"aidols\";\n\n protected getDataSchema() {\n return aidolSchema;\n }\n\n async createAIdol(variables: AIdolCreate): Promise<AIdolCreateResponse> {\n const url = this.apiService.buildUrl(this.resource);\n const raw = await this.apiService.request(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(variables),\n });\n return aidolCreateResponseSchema.parse(raw);\n }\n\n async getOne(\n params: { id: string | number },\n fetchOptions?: RequestInit,\n ): Promise<{ data: AIdol }> {\n assertResourceId(params.id);\n const url = `${this.apiService.buildUrl(this.resource)}/${params.id}`;\n const raw = await this.apiService.request(url, fetchOptions);\n return { data: aidolSchema.parse(raw) };\n }\n\n async update<TVariables = Record<string, unknown>>(params: {\n id: string | number;\n variables: TVariables;\n }): Promise<{ data: AIdol }> {\n assertResourceId(params.id);\n const url = `${this.apiService.buildUrl(this.resource)}/${params.id}`;\n const raw = await this.apiService.request(url, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(params.variables),\n });\n return { data: aidolSchema.parse(raw) };\n }\n\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nimport {\n chatroomSchema,\n messageSchema,\n type Chatroom,\n type Message,\n} from \"../schemas\";\n\n/**\n * Response schema for generate AI response endpoint\n */\nconst generateResponseSchema = z.object({\n messageId: z.string(),\n content: z.string(),\n});\n\nexport interface GenerateResponse {\n messageId: string;\n content: string;\n}\n\n/**\n * Repository for Chatroom entities\n * Handles chatroom CRUD and message operations\n */\nexport class ChatroomRepository extends BaseCrudRepository<Chatroom> {\n readonly resource = \"chatrooms\";\n\n protected getDataSchema() {\n return chatroomSchema;\n }\n\n /**\n * Get messages from a chatroom\n * GET /chatrooms/{id}/messages\n */\n async getMessages(\n chatroomId: string,\n options?: { limit?: number; offset?: number },\n fetchOptions?: RequestInit,\n ): Promise<Message[]> {\n const params = new URLSearchParams();\n if (options?.limit !== undefined) {\n params.set(\"limit\", options.limit.toString());\n }\n if (options?.offset !== undefined) {\n params.set(\"offset\", options.offset.toString());\n }\n\n const queryString = params.toString();\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/messages${queryString ? `?${queryString}` : \"\"}`,\n );\n\n const rawResponse = await this.apiService.request(url, fetchOptions);\n return this.validateResponse(rawResponse, z.array(messageSchema));\n }\n\n /**\n * Send a message to a chatroom\n * POST /chatrooms/{id}/messages\n *\n * ClaimToken is automatically sent via httpOnly cookie.\n *\n * @param chatroomId - The chatroom ID\n * @param content - The message content\n * @param fetchOptions - Optional fetch options\n */\n async sendMessage(\n chatroomId: string,\n content: string,\n fetchOptions?: RequestInit,\n ): Promise<Message> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/messages`,\n );\n\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ content, senderType: \"user\" }),\n });\n\n return this.validateResponse(rawResponse, messageSchema);\n }\n\n /**\n * Generate AI response for a chatroom with a specific companion\n * POST /chatrooms/{id}/companions/{companionId}/response\n */\n async generateResponse(\n chatroomId: string,\n companionId: string,\n fetchOptions?: RequestInit,\n ): Promise<GenerateResponse> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/companions/${companionId}/response`,\n );\n\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n return this.validateResponse(rawResponse, generateResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type {\n Companion,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport { companionSchema, imageGenerationResponseSchema } from \"../schemas\";\n\n/** CRUD operations use BaseCrudRepository (wrapped { data: T } responses) */\nexport class CompanionRepository extends BaseCrudRepository<Companion> {\n readonly resource = \"companions\";\n\n protected getDataSchema() {\n return companionSchema;\n }\n\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import type { LeadRequest, LeadResponse } from \"@/schemas\";\nimport { leadResponseSchema } from \"@/schemas\";\nimport type { ApiService } from \"@/services/ApiService\";\n\nexport class LeadsRepository {\n private readonly resource = \"leads\";\n\n constructor(private readonly apiService: ApiService) {}\n\n async create(request: LeadRequest): Promise<LeadResponse> {\n const url = this.apiService.buildUrl(this.resource);\n const response = await this.apiService.request(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(request),\n });\n\n return leadResponseSchema.parse(response);\n }\n}\n","import { z } from \"zod\";\n\nconst STORAGE_KEY = \"aidol_chatroom_ids\";\nconst schema = z.record(z.string(), z.string());\n\nconst readStorage = (): Record<string, string> => {\n if (typeof window === \"undefined\") return {};\n\n const stored = localStorage.getItem(STORAGE_KEY);\n if (!stored) return {};\n\n try {\n const parsed = JSON.parse(stored);\n const result = schema.safeParse(parsed);\n if (result.success) {\n return result.data;\n }\n console.warn(`[LocalChatroomIdsRepository] Invalid data, resetting`);\n return {};\n } catch (error) {\n if (error instanceof SyntaxError) {\n console.warn(`[LocalChatroomIdsRepository] Failed to parse, resetting`);\n return {};\n }\n throw error;\n }\n};\n\nconst writeStorage = (data: Record<string, string>): void => {\n if (typeof window === \"undefined\") {\n throw new Error(\n \"LocalChatroomIdsRepository write operations can only be called on the client side.\",\n );\n }\n localStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n};\n\n/**\n * Repository for managing chatroom IDs in localStorage.\n * Maps companionId to chatroomId for persistence across sessions.\n */\nexport const LocalChatroomIdsRepository = {\n getChatroomId(companionId: string): string | null {\n const data = readStorage();\n return data[companionId] ?? null;\n },\n\n setChatroomId(companionId: string, chatroomId: string): void {\n const data = readStorage();\n data[companionId] = chatroomId;\n writeStorage(data);\n },\n\n removeChatroomId(companionId: string): void {\n const data = readStorage();\n delete data[companionId];\n writeStorage(data);\n },\n};\n","/**\n * Server-safe exports for aidol translations.\n *\n * This module exports only JSON resources and constants,\n * avoiding React-specific code that would break SSR.\n */\n\nimport en from \"./locales/en/aidol.json\";\nimport es from \"./locales/es/aidol.json\";\nimport id from \"./locales/id/aidol.json\";\nimport ja from \"./locales/ja/aidol.json\";\nimport ko from \"./locales/ko/aidol.json\";\nimport th from \"./locales/th/aidol.json\";\nimport tl from \"./locales/tl/aidol.json\";\nimport vi from \"./locales/vi/aidol.json\";\nimport zh from \"./locales/zh/aidol.json\";\n\n/** AIdol namespace */\nexport const AIDOL_NS = \"aidol\";\n\n/**\n * Translation resources for the aidol namespace.\n * Use with i18next.addResourceBundle(lang, 'aidol', translations)\n *\n * @example\n * import { aidolTranslations, AIDOL_NS } from 'aidol/locale';\n *\n * // Add to existing i18n instance\n * Object.entries(aidolTranslations).forEach(([lang, resources]) => {\n * i18n.addResourceBundle(lang, AIDOL_NS, resources);\n * });\n */\nexport const aidolTranslations = {\n en,\n es,\n id,\n ja,\n ko,\n th,\n tl,\n vi,\n zh,\n};\n"],"names":["UUID_RE","assertResourceId","id","AIdolRepository","BaseCrudRepository","aidolSchema","variables","url","raw","aidolCreateResponseSchema","params","fetchOptions","request","rawResponse","imageGenerationResponseSchema","generateResponseSchema","z","ChatroomRepository","chatroomSchema","chatroomId","options","queryString","messageSchema","content","companionId","CompanionRepository","companionSchema","LeadsRepository","apiService","response","leadResponseSchema","STORAGE_KEY","schema","readStorage","stored","parsed","result","error","writeStorage","data","LocalChatroomIdsRepository","AIDOL_NS","aidolTranslations","en","es","ja","ko","th","tl","vi","zh"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/lib/assertResourceId.ts","../src/repositories/AIdolRepository.ts","../src/repositories/ChatroomRepository.ts","../src/repositories/CompanionRepository.ts","../src/repositories/LeadsRepository.ts","../src/repositories/LocalChatroomIdsRepository.ts","../src/i18n/translations.ts"],"sourcesContent":["const UUID_RE =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n/**\n * Validates that a resource ID is a well-formed UUID.\n * Prevents client-side path traversal when IDs are interpolated into URLs.\n */\nexport function assertResourceId(id: string | number): void {\n if (typeof id !== \"string\" || !UUID_RE.test(id)) {\n throw new Error(`Invalid resource ID: ${String(id)}`);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport { assertResourceId } from \"../lib/assertResourceId\";\nimport type {\n AIdol,\n AIdolCreate,\n AIdolCreateResponse,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport {\n aidolCreateResponseSchema,\n aidolSchema,\n imageGenerationResponseSchema,\n} from \"../schemas\";\n\n/** Backend returns unwrapped responses — overrides wrap raw JSON in { data } */\nexport class AIdolRepository extends BaseCrudRepository<AIdol> {\n readonly resource = \"aidols\";\n\n protected getDataSchema() {\n return aidolSchema;\n }\n\n async createAIdol(variables: AIdolCreate): Promise<AIdolCreateResponse> {\n const url = this.apiService.buildUrl(this.resource);\n const raw = await this.apiService.request(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(variables),\n });\n return aidolCreateResponseSchema.parse(raw);\n }\n\n async getOne(\n params: { id: string | number },\n fetchOptions?: RequestInit,\n ): Promise<{ data: AIdol }> {\n assertResourceId(params.id);\n const url = `${this.apiService.buildUrl(this.resource)}/${params.id}`;\n const raw = await this.apiService.request(url, fetchOptions);\n return { data: aidolSchema.parse(raw) };\n }\n\n async update<TVariables = Record<string, unknown>>(params: {\n id: string | number;\n variables: TVariables;\n }): Promise<{ data: AIdol }> {\n assertResourceId(params.id);\n const url = `${this.apiService.buildUrl(this.resource)}/${params.id}`;\n const raw = await this.apiService.request(url, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(params.variables),\n });\n return { data: aidolSchema.parse(raw) };\n }\n\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nimport {\n chatroomSchema,\n messageSchema,\n type Chatroom,\n type Message,\n} from \"../schemas\";\n\n/**\n * Response schema for generate AI response endpoint\n */\nconst generateResponseSchema = z.object({\n messageId: z.string(),\n content: z.string(),\n});\n\nexport interface GenerateResponse {\n messageId: string;\n content: string;\n}\n\n/**\n * Repository for Chatroom entities\n * Handles chatroom CRUD and message operations\n */\nexport class ChatroomRepository extends BaseCrudRepository<Chatroom> {\n readonly resource = \"chatrooms\";\n\n protected getDataSchema() {\n return chatroomSchema;\n }\n\n /**\n * Get messages from a chatroom\n * GET /chatrooms/{id}/messages\n */\n async getMessages(\n chatroomId: string,\n options?: { limit?: number; offset?: number },\n fetchOptions?: RequestInit,\n ): Promise<Message[]> {\n const params = new URLSearchParams();\n if (options?.limit !== undefined) {\n params.set(\"limit\", options.limit.toString());\n }\n if (options?.offset !== undefined) {\n params.set(\"offset\", options.offset.toString());\n }\n\n const queryString = params.toString();\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/messages${queryString ? `?${queryString}` : \"\"}`,\n );\n\n const rawResponse = await this.apiService.request(url, fetchOptions);\n return this.validateResponse(rawResponse, z.array(messageSchema));\n }\n\n /**\n * Send a message to a chatroom\n * POST /chatrooms/{id}/messages\n *\n * Anonymous ID is automatically sent via httpOnly cookie.\n *\n * @param chatroomId - The chatroom ID\n * @param content - The message content\n * @param fetchOptions - Optional fetch options\n */\n async sendMessage(\n chatroomId: string,\n content: string,\n fetchOptions?: RequestInit,\n ): Promise<Message> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/messages`,\n );\n\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ content, senderType: \"user\" }),\n });\n\n return this.validateResponse(rawResponse, messageSchema);\n }\n\n /**\n * Generate AI response for a chatroom with a specific companion\n * POST /chatrooms/{id}/companions/{companionId}/response\n */\n async generateResponse(\n chatroomId: string,\n companionId: string,\n fetchOptions?: RequestInit,\n ): Promise<GenerateResponse> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/companions/${companionId}/response`,\n );\n\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n return this.validateResponse(rawResponse, generateResponseSchema);\n }\n}\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport type {\n Companion,\n ImageGenerationRequest,\n ImageGenerationResponse,\n} from \"../schemas\";\nimport { companionSchema, imageGenerationResponseSchema } from \"../schemas\";\n\n/** CRUD operations use BaseCrudRepository (wrapped { data: T } responses) */\nexport class CompanionRepository extends BaseCrudRepository<Companion> {\n readonly resource = \"companions\";\n\n protected getDataSchema() {\n return companionSchema;\n }\n\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const url = this.apiService.buildUrl(`${this.resource}/images`);\n const rawResponse = await this.apiService.request(url, {\n ...fetchOptions,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n return this.validateResponse(rawResponse, imageGenerationResponseSchema);\n }\n}\n","import type { LeadRequest, LeadResponse } from \"@/schemas\";\nimport { leadResponseSchema } from \"@/schemas\";\nimport type { ApiService } from \"@/services/ApiService\";\n\nexport class LeadsRepository {\n private readonly resource = \"leads\";\n\n constructor(private readonly apiService: ApiService) {}\n\n async create(request: LeadRequest): Promise<LeadResponse> {\n const url = this.apiService.buildUrl(this.resource);\n const response = await this.apiService.request(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(request),\n });\n\n return leadResponseSchema.parse(response);\n }\n}\n","import { z } from \"zod\";\n\nconst STORAGE_KEY = \"aidol_chatroom_ids\";\nconst schema = z.record(z.string(), z.string());\n\nconst readStorage = (): Record<string, string> => {\n if (typeof window === \"undefined\") return {};\n\n const stored = localStorage.getItem(STORAGE_KEY);\n if (!stored) return {};\n\n try {\n const parsed = JSON.parse(stored);\n const result = schema.safeParse(parsed);\n if (result.success) {\n return result.data;\n }\n console.warn(`[LocalChatroomIdsRepository] Invalid data, resetting`);\n return {};\n } catch (error) {\n if (error instanceof SyntaxError) {\n console.warn(`[LocalChatroomIdsRepository] Failed to parse, resetting`);\n return {};\n }\n throw error;\n }\n};\n\nconst writeStorage = (data: Record<string, string>): void => {\n if (typeof window === \"undefined\") {\n throw new Error(\n \"LocalChatroomIdsRepository write operations can only be called on the client side.\",\n );\n }\n localStorage.setItem(STORAGE_KEY, JSON.stringify(data));\n};\n\n/**\n * Repository for managing chatroom IDs in localStorage.\n * Maps companionId to chatroomId for persistence across sessions.\n */\nexport const LocalChatroomIdsRepository = {\n getChatroomId(companionId: string): string | null {\n const data = readStorage();\n return data[companionId] ?? null;\n },\n\n setChatroomId(companionId: string, chatroomId: string): void {\n const data = readStorage();\n data[companionId] = chatroomId;\n writeStorage(data);\n },\n\n removeChatroomId(companionId: string): void {\n const data = readStorage();\n delete data[companionId];\n writeStorage(data);\n },\n};\n","/**\n * Server-safe exports for aidol translations.\n *\n * This module exports only JSON resources and constants,\n * avoiding React-specific code that would break SSR.\n */\n\nimport en from \"./locales/en/aidol.json\";\nimport es from \"./locales/es/aidol.json\";\nimport id from \"./locales/id/aidol.json\";\nimport ja from \"./locales/ja/aidol.json\";\nimport ko from \"./locales/ko/aidol.json\";\nimport th from \"./locales/th/aidol.json\";\nimport tl from \"./locales/tl/aidol.json\";\nimport vi from \"./locales/vi/aidol.json\";\nimport zh from \"./locales/zh/aidol.json\";\n\n/** AIdol namespace */\nexport const AIDOL_NS = \"aidol\";\n\n/**\n * Translation resources for the aidol namespace.\n * Use with i18next.addResourceBundle(lang, 'aidol', translations)\n *\n * @example\n * import { aidolTranslations, AIDOL_NS } from 'aidol/locale';\n *\n * // Add to existing i18n instance\n * Object.entries(aidolTranslations).forEach(([lang, resources]) => {\n * i18n.addResourceBundle(lang, AIDOL_NS, resources);\n * });\n */\nexport const aidolTranslations = {\n en,\n es,\n id,\n ja,\n ko,\n th,\n tl,\n vi,\n zh,\n};\n"],"names":["UUID_RE","assertResourceId","id","AIdolRepository","BaseCrudRepository","aidolSchema","variables","url","raw","aidolCreateResponseSchema","params","fetchOptions","request","rawResponse","imageGenerationResponseSchema","generateResponseSchema","z","ChatroomRepository","chatroomSchema","chatroomId","options","queryString","messageSchema","content","companionId","CompanionRepository","companionSchema","LeadsRepository","apiService","response","leadResponseSchema","STORAGE_KEY","schema","readStorage","stored","parsed","result","error","writeStorage","data","LocalChatroomIdsRepository","AIDOL_NS","aidolTranslations","en","es","ja","ko","th","tl","vi","zh"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lead-Cci1Og19.js","sources":["../src/schemas/aidol.ts","../src/schemas/chatroom.ts","../src/schemas/companion.ts","../src/schemas/lead.ts"],"sourcesContent":["/**\n * AIdol (group) schemas\n * Matches backend aidol/schemas/aidol.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nimport type { Companion } from \"./companion\";\n\n/**\n * AIdol schema (public fields only, excludes claim_token)\n * Matches backend AIdolPublic (aidol/schemas/aidol.py)\n */\nexport const aidolSchema = z.object({\n id: z.string(),\n name: z.string().nullable(),\n email: z.string().nullable().optional(),\n greeting: z.string().nullable().optional(),\n concept: z.string().nullable().optional(),\n profileImageUrl: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface AIdol extends BaseRecord {\n id: string;\n name: string | null;\n email?: string | null;\n greeting?: string | null;\n concept?: string | null;\n profileImageUrl: string | null;\n createdAt: string;\n updatedAt: string;\n companions?: Companion[];\n}\n\n/**\n * Schema for AIdol creation response (backend returns only id)\n */\nexport const aidolCreateResponseSchema = z.object({\n id: z.string(),\n});\n\nexport type AIdolCreateResponse = z.infer<typeof aidolCreateResponseSchema>;\n\n/**\n * Schema for creating an AIdol group\n */\nexport interface AIdolCreate {\n name: string;\n concept?: string | null;\n profileImageUrl: string;\n}\n\n/**\n * Schema for updating an AIdol group\n */\nexport interface AIdolUpdate {\n name?: string;\n concept?: string | null;\n profileImageUrl?: string | null;\n}\n\n/**\n * Member draft schema for group creation form\n */\nexport const memberDraftSchema = z.object({\n name: z.string().min(1, \"creation.memberNameRequired\"),\n personality: z.string().optional(),\n systemPrompt: z.string().optional(),\n});\n\nexport type MemberDraft = z.infer<typeof memberDraftSchema>;\n\n/**\n * Group creation form schema (react-hook-form + zod)\n */\nexport const groupCreationSchema = z.object({\n groupName: z.string().min(1, \"creation.groupNameRequired\"),\n concept: z.string().optional(),\n profileImageUrl: z.string().min(1, \"creation.emblemRequired\"),\n members: z\n .array(memberDraftSchema)\n .min(1, \"creation.memberRequired\")\n .refine((members) => members.some((m) => m.name.trim() !== \"\"), {\n message: \"creation.memberRequired\",\n }),\n});\n\nexport type GroupCreationFormData = z.infer<typeof groupCreationSchema>;\n\n// ---------------------------------------------------------------------------\n// Image Generation\n// ---------------------------------------------------------------------------\n\n/**\n * Request schema for image generation\n */\nexport const imageGenerationRequestSchema = z.object({\n prompt: z.string().max(200),\n});\n\nexport type ImageGenerationRequest = z.infer<\n typeof imageGenerationRequestSchema\n>;\n\n/**\n * Image generation result data\n */\nexport const imageGenerationDataSchema = z.object({\n imageUrl: z.string(),\n width: z.number(),\n height: z.number(),\n format: z.string(),\n});\n\nexport type ImageGenerationData = z.infer<typeof imageGenerationDataSchema>;\n\n/**\n * Response schema for image generation\n */\nexport const imageGenerationResponseSchema = z.object({\n data: imageGenerationDataSchema,\n});\n\nexport type ImageGenerationResponse = z.infer<\n typeof imageGenerationResponseSchema\n>;\n","/**\n * Chatroom schemas\n * Matches backend aidol/schemas/chatroom.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n// =============================================================================\n// Chatroom Schemas\n// =============================================================================\n\nexport const chatroomSchema = z.object({\n id: z.string(),\n name: z.string(),\n language: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Chatroom extends BaseRecord {\n id: string;\n name: string;\n language: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ChatroomCreate {\n name: string;\n language?: string;\n}\n\n// =============================================================================\n// Message Schemas\n// =============================================================================\n\nexport enum SenderType {\n USER = \"user\",\n COMPANION = \"companion\",\n}\n\nexport const messageSchema = z.object({\n id: z.string(),\n senderType: z.nativeEnum(SenderType),\n content: z.string(),\n createdAt: z.string(),\n});\n\nexport interface Message extends BaseRecord {\n id: string;\n senderType: SenderType;\n content: string;\n createdAt: string;\n}\n\n/**\n * Type guard to check if message is from user\n */\nexport const isUser = (message: Message): boolean => {\n return message.senderType === SenderType.USER;\n};\n\n/**\n * Type guard to check if message is from companion\n */\nexport const isCompanion = (message: Message): boolean => {\n return message.senderType === SenderType.COMPANION;\n};\n","/**\n * Companion (member) schemas\n * Matches backend aidol/schemas/companion.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nexport const POSITIONS = [\n \"mainVocal\",\n \"subVocal\",\n \"mainDancer\",\n \"subDancer\",\n \"mainRapper\",\n \"subRapper\",\n] as const;\n\nexport type Position = (typeof POSITIONS)[number];\n\nexport type Gender = \"male\" | \"female\";\n\nexport type Grade = \"A\" | \"B\" | \"C\" | \"F\";\n\nexport interface CompanionStats {\n vocal: number;\n dance: number;\n rap: number;\n visual: number;\n stamina: number;\n charm: number;\n}\n\nconst companionStatsSchema = z.object({\n vocal: z.number(),\n dance: z.number(),\n rap: z.number(),\n visual: z.number(),\n stamina: z.number(),\n charm: z.number(),\n});\n\n/**\n * Companion schema (public fields only, excludes system_prompt)\n */\nexport const companionSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n biography: z.string().nullable().optional(),\n profilePictureUrl: z.string().nullable().optional(),\n grade: z.enum([\"A\", \"B\", \"C\", \"F\"]).nullable().optional(),\n position: z\n .enum([\n \"mainVocal\",\n \"subVocal\",\n \"mainDancer\",\n \"subDancer\",\n \"mainRapper\",\n \"subRapper\",\n ])\n .nullable()\n .optional(),\n mbti: z.string().nullable().optional(),\n gender: z.enum([\"male\", \"female\"]).nullable().optional(),\n stats: companionStatsSchema.optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Companion extends BaseRecord {\n id: string;\n aidolId?: string | null;\n name?: string | null;\n biography?: string | null;\n profilePictureUrl?: string | null;\n grade?: Grade | null;\n position?: Position | null;\n mbti?: string | null;\n gender?: Gender | null;\n stats?: CompanionStats;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Schema for creating a Companion\n * Includes systemPrompt for creation (excluded from response)\n */\nexport interface CompanionCreate {\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n\n/**\n * Schema for updating a Companion\n */\nexport interface CompanionUpdate {\n aidolId?: string | null;\n name?: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n position?: Position | null;\n gender?: Gender | null;\n mbtiEnergy?: number;\n mbtiPerception?: number;\n mbtiJudgment?: number;\n mbtiLifestyle?: number;\n}\n","/**\n * Lead schemas\n * Matches backend aidol/schemas/aidol_lead.py definitions\n */\n\nimport { z } from \"zod\";\n\n/**\n * Lead request schema\n */\nexport interface LeadRequest {\n aidolId: string;\n email: string;\n}\n\n/**\n * Lead response schema\n */\nexport const leadResponseSchema = z.object({\n aidolId: z.string(),\n email: z.string(),\n});\n\nexport type LeadResponse = z.infer<typeof leadResponseSchema>;\n"],"names":["aidolSchema","z","aidolCreateResponseSchema","memberDraftSchema","groupCreationSchema","members","m","imageGenerationDataSchema","imageGenerationResponseSchema","chatroomSchema","SenderType","messageSchema","isUser","message","isCompanion","POSITIONS","companionStatsSchema","companionSchema","leadResponseSchema"],"mappings":"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"}
1
+ {"version":3,"file":"lead-Cci1Og19.js","sources":["../src/schemas/aidol.ts","../src/schemas/chatroom.ts","../src/schemas/companion.ts","../src/schemas/lead.ts"],"sourcesContent":["/**\n * AIdol (group) schemas\n * Matches backend aidol/schemas/aidol.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nimport type { Companion } from \"./companion\";\n\n/**\n * AIdol schema (public fields only, excludes anonymous_id)\n * Matches backend AIdolPublic (aidol/schemas/aidol.py)\n */\nexport const aidolSchema = z.object({\n id: z.string(),\n name: z.string().nullable(),\n email: z.string().nullable().optional(),\n greeting: z.string().nullable().optional(),\n concept: z.string().nullable().optional(),\n profileImageUrl: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface AIdol extends BaseRecord {\n id: string;\n name: string | null;\n email?: string | null;\n greeting?: string | null;\n concept?: string | null;\n profileImageUrl: string | null;\n createdAt: string;\n updatedAt: string;\n companions?: Companion[];\n}\n\n/**\n * Schema for AIdol creation response (backend returns only id)\n */\nexport const aidolCreateResponseSchema = z.object({\n id: z.string(),\n});\n\nexport type AIdolCreateResponse = z.infer<typeof aidolCreateResponseSchema>;\n\n/**\n * Schema for creating an AIdol group\n */\nexport interface AIdolCreate {\n name: string;\n concept?: string | null;\n profileImageUrl: string;\n}\n\n/**\n * Schema for updating an AIdol group\n */\nexport interface AIdolUpdate {\n name?: string;\n concept?: string | null;\n profileImageUrl?: string | null;\n}\n\n/**\n * Member draft schema for group creation form\n */\nexport const memberDraftSchema = z.object({\n name: z.string().min(1, \"creation.memberNameRequired\"),\n personality: z.string().optional(),\n systemPrompt: z.string().optional(),\n});\n\nexport type MemberDraft = z.infer<typeof memberDraftSchema>;\n\n/**\n * Group creation form schema (react-hook-form + zod)\n */\nexport const groupCreationSchema = z.object({\n groupName: z.string().min(1, \"creation.groupNameRequired\"),\n concept: z.string().optional(),\n profileImageUrl: z.string().min(1, \"creation.emblemRequired\"),\n members: z\n .array(memberDraftSchema)\n .min(1, \"creation.memberRequired\")\n .refine((members) => members.some((m) => m.name.trim() !== \"\"), {\n message: \"creation.memberRequired\",\n }),\n});\n\nexport type GroupCreationFormData = z.infer<typeof groupCreationSchema>;\n\n// ---------------------------------------------------------------------------\n// Image Generation\n// ---------------------------------------------------------------------------\n\n/**\n * Request schema for image generation\n */\nexport const imageGenerationRequestSchema = z.object({\n prompt: z.string().max(200),\n});\n\nexport type ImageGenerationRequest = z.infer<\n typeof imageGenerationRequestSchema\n>;\n\n/**\n * Image generation result data\n */\nexport const imageGenerationDataSchema = z.object({\n imageUrl: z.string(),\n width: z.number(),\n height: z.number(),\n format: z.string(),\n});\n\nexport type ImageGenerationData = z.infer<typeof imageGenerationDataSchema>;\n\n/**\n * Response schema for image generation\n */\nexport const imageGenerationResponseSchema = z.object({\n data: imageGenerationDataSchema,\n});\n\nexport type ImageGenerationResponse = z.infer<\n typeof imageGenerationResponseSchema\n>;\n","/**\n * Chatroom schemas\n * Matches backend aidol/schemas/chatroom.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n// =============================================================================\n// Chatroom Schemas\n// =============================================================================\n\nexport const chatroomSchema = z.object({\n id: z.string(),\n name: z.string(),\n language: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Chatroom extends BaseRecord {\n id: string;\n name: string;\n language: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ChatroomCreate {\n name: string;\n language?: string;\n}\n\n// =============================================================================\n// Message Schemas\n// =============================================================================\n\nexport enum SenderType {\n USER = \"user\",\n COMPANION = \"companion\",\n}\n\nexport const messageSchema = z.object({\n id: z.string(),\n senderType: z.nativeEnum(SenderType),\n content: z.string(),\n createdAt: z.string(),\n});\n\nexport interface Message extends BaseRecord {\n id: string;\n senderType: SenderType;\n content: string;\n createdAt: string;\n}\n\n/**\n * Type guard to check if message is from user\n */\nexport const isUser = (message: Message): boolean => {\n return message.senderType === SenderType.USER;\n};\n\n/**\n * Type guard to check if message is from companion\n */\nexport const isCompanion = (message: Message): boolean => {\n return message.senderType === SenderType.COMPANION;\n};\n","/**\n * Companion (member) schemas\n * Matches backend aidol/schemas/companion.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nexport const POSITIONS = [\n \"mainVocal\",\n \"subVocal\",\n \"mainDancer\",\n \"subDancer\",\n \"mainRapper\",\n \"subRapper\",\n] as const;\n\nexport type Position = (typeof POSITIONS)[number];\n\nexport type Gender = \"male\" | \"female\";\n\nexport type Grade = \"A\" | \"B\" | \"C\" | \"F\";\n\nexport interface CompanionStats {\n vocal: number;\n dance: number;\n rap: number;\n visual: number;\n stamina: number;\n charm: number;\n}\n\nconst companionStatsSchema = z.object({\n vocal: z.number(),\n dance: z.number(),\n rap: z.number(),\n visual: z.number(),\n stamina: z.number(),\n charm: z.number(),\n});\n\n/**\n * Companion schema (public fields only, excludes system_prompt)\n */\nexport const companionSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n biography: z.string().nullable().optional(),\n profilePictureUrl: z.string().nullable().optional(),\n grade: z.enum([\"A\", \"B\", \"C\", \"F\"]).nullable().optional(),\n position: z\n .enum([\n \"mainVocal\",\n \"subVocal\",\n \"mainDancer\",\n \"subDancer\",\n \"mainRapper\",\n \"subRapper\",\n ])\n .nullable()\n .optional(),\n mbti: z.string().nullable().optional(),\n gender: z.enum([\"male\", \"female\"]).nullable().optional(),\n stats: companionStatsSchema.optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Companion extends BaseRecord {\n id: string;\n aidolId?: string | null;\n name?: string | null;\n biography?: string | null;\n profilePictureUrl?: string | null;\n grade?: Grade | null;\n position?: Position | null;\n mbti?: string | null;\n gender?: Gender | null;\n stats?: CompanionStats;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Schema for creating a Companion\n * Includes systemPrompt for creation (excluded from response)\n */\nexport interface CompanionCreate {\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n\n/**\n * Schema for updating a Companion\n */\nexport interface CompanionUpdate {\n aidolId?: string | null;\n name?: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n position?: Position | null;\n gender?: Gender | null;\n mbtiEnergy?: number;\n mbtiPerception?: number;\n mbtiJudgment?: number;\n mbtiLifestyle?: number;\n}\n","/**\n * Lead schemas\n * Matches backend aidol/schemas/aidol_lead.py definitions\n */\n\nimport { z } from \"zod\";\n\n/**\n * Lead request schema\n */\nexport interface LeadRequest {\n aidolId: string;\n email: string;\n}\n\n/**\n * Lead response schema\n */\nexport const leadResponseSchema = z.object({\n aidolId: z.string(),\n email: z.string(),\n});\n\nexport type LeadResponse = z.infer<typeof leadResponseSchema>;\n"],"names":["aidolSchema","z","aidolCreateResponseSchema","memberDraftSchema","groupCreationSchema","members","m","imageGenerationDataSchema","imageGenerationResponseSchema","chatroomSchema","SenderType","messageSchema","isUser","message","isCompanion","POSITIONS","companionStatsSchema","companionSchema","leadResponseSchema"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lead-ClwTF-uu.mjs","sources":["../src/schemas/aidol.ts","../src/schemas/chatroom.ts","../src/schemas/companion.ts","../src/schemas/lead.ts"],"sourcesContent":["/**\n * AIdol (group) schemas\n * Matches backend aidol/schemas/aidol.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nimport type { Companion } from \"./companion\";\n\n/**\n * AIdol schema (public fields only, excludes claim_token)\n * Matches backend AIdolPublic (aidol/schemas/aidol.py)\n */\nexport const aidolSchema = z.object({\n id: z.string(),\n name: z.string().nullable(),\n email: z.string().nullable().optional(),\n greeting: z.string().nullable().optional(),\n concept: z.string().nullable().optional(),\n profileImageUrl: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface AIdol extends BaseRecord {\n id: string;\n name: string | null;\n email?: string | null;\n greeting?: string | null;\n concept?: string | null;\n profileImageUrl: string | null;\n createdAt: string;\n updatedAt: string;\n companions?: Companion[];\n}\n\n/**\n * Schema for AIdol creation response (backend returns only id)\n */\nexport const aidolCreateResponseSchema = z.object({\n id: z.string(),\n});\n\nexport type AIdolCreateResponse = z.infer<typeof aidolCreateResponseSchema>;\n\n/**\n * Schema for creating an AIdol group\n */\nexport interface AIdolCreate {\n name: string;\n concept?: string | null;\n profileImageUrl: string;\n}\n\n/**\n * Schema for updating an AIdol group\n */\nexport interface AIdolUpdate {\n name?: string;\n concept?: string | null;\n profileImageUrl?: string | null;\n}\n\n/**\n * Member draft schema for group creation form\n */\nexport const memberDraftSchema = z.object({\n name: z.string().min(1, \"creation.memberNameRequired\"),\n personality: z.string().optional(),\n systemPrompt: z.string().optional(),\n});\n\nexport type MemberDraft = z.infer<typeof memberDraftSchema>;\n\n/**\n * Group creation form schema (react-hook-form + zod)\n */\nexport const groupCreationSchema = z.object({\n groupName: z.string().min(1, \"creation.groupNameRequired\"),\n concept: z.string().optional(),\n profileImageUrl: z.string().min(1, \"creation.emblemRequired\"),\n members: z\n .array(memberDraftSchema)\n .min(1, \"creation.memberRequired\")\n .refine((members) => members.some((m) => m.name.trim() !== \"\"), {\n message: \"creation.memberRequired\",\n }),\n});\n\nexport type GroupCreationFormData = z.infer<typeof groupCreationSchema>;\n\n// ---------------------------------------------------------------------------\n// Image Generation\n// ---------------------------------------------------------------------------\n\n/**\n * Request schema for image generation\n */\nexport const imageGenerationRequestSchema = z.object({\n prompt: z.string().max(200),\n});\n\nexport type ImageGenerationRequest = z.infer<\n typeof imageGenerationRequestSchema\n>;\n\n/**\n * Image generation result data\n */\nexport const imageGenerationDataSchema = z.object({\n imageUrl: z.string(),\n width: z.number(),\n height: z.number(),\n format: z.string(),\n});\n\nexport type ImageGenerationData = z.infer<typeof imageGenerationDataSchema>;\n\n/**\n * Response schema for image generation\n */\nexport const imageGenerationResponseSchema = z.object({\n data: imageGenerationDataSchema,\n});\n\nexport type ImageGenerationResponse = z.infer<\n typeof imageGenerationResponseSchema\n>;\n","/**\n * Chatroom schemas\n * Matches backend aidol/schemas/chatroom.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n// =============================================================================\n// Chatroom Schemas\n// =============================================================================\n\nexport const chatroomSchema = z.object({\n id: z.string(),\n name: z.string(),\n language: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Chatroom extends BaseRecord {\n id: string;\n name: string;\n language: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ChatroomCreate {\n name: string;\n language?: string;\n}\n\n// =============================================================================\n// Message Schemas\n// =============================================================================\n\nexport enum SenderType {\n USER = \"user\",\n COMPANION = \"companion\",\n}\n\nexport const messageSchema = z.object({\n id: z.string(),\n senderType: z.nativeEnum(SenderType),\n content: z.string(),\n createdAt: z.string(),\n});\n\nexport interface Message extends BaseRecord {\n id: string;\n senderType: SenderType;\n content: string;\n createdAt: string;\n}\n\n/**\n * Type guard to check if message is from user\n */\nexport const isUser = (message: Message): boolean => {\n return message.senderType === SenderType.USER;\n};\n\n/**\n * Type guard to check if message is from companion\n */\nexport const isCompanion = (message: Message): boolean => {\n return message.senderType === SenderType.COMPANION;\n};\n","/**\n * Companion (member) schemas\n * Matches backend aidol/schemas/companion.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nexport const POSITIONS = [\n \"mainVocal\",\n \"subVocal\",\n \"mainDancer\",\n \"subDancer\",\n \"mainRapper\",\n \"subRapper\",\n] as const;\n\nexport type Position = (typeof POSITIONS)[number];\n\nexport type Gender = \"male\" | \"female\";\n\nexport type Grade = \"A\" | \"B\" | \"C\" | \"F\";\n\nexport interface CompanionStats {\n vocal: number;\n dance: number;\n rap: number;\n visual: number;\n stamina: number;\n charm: number;\n}\n\nconst companionStatsSchema = z.object({\n vocal: z.number(),\n dance: z.number(),\n rap: z.number(),\n visual: z.number(),\n stamina: z.number(),\n charm: z.number(),\n});\n\n/**\n * Companion schema (public fields only, excludes system_prompt)\n */\nexport const companionSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n biography: z.string().nullable().optional(),\n profilePictureUrl: z.string().nullable().optional(),\n grade: z.enum([\"A\", \"B\", \"C\", \"F\"]).nullable().optional(),\n position: z\n .enum([\n \"mainVocal\",\n \"subVocal\",\n \"mainDancer\",\n \"subDancer\",\n \"mainRapper\",\n \"subRapper\",\n ])\n .nullable()\n .optional(),\n mbti: z.string().nullable().optional(),\n gender: z.enum([\"male\", \"female\"]).nullable().optional(),\n stats: companionStatsSchema.optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Companion extends BaseRecord {\n id: string;\n aidolId?: string | null;\n name?: string | null;\n biography?: string | null;\n profilePictureUrl?: string | null;\n grade?: Grade | null;\n position?: Position | null;\n mbti?: string | null;\n gender?: Gender | null;\n stats?: CompanionStats;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Schema for creating a Companion\n * Includes systemPrompt for creation (excluded from response)\n */\nexport interface CompanionCreate {\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n\n/**\n * Schema for updating a Companion\n */\nexport interface CompanionUpdate {\n aidolId?: string | null;\n name?: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n position?: Position | null;\n gender?: Gender | null;\n mbtiEnergy?: number;\n mbtiPerception?: number;\n mbtiJudgment?: number;\n mbtiLifestyle?: number;\n}\n","/**\n * Lead schemas\n * Matches backend aidol/schemas/aidol_lead.py definitions\n */\n\nimport { z } from \"zod\";\n\n/**\n * Lead request schema\n */\nexport interface LeadRequest {\n aidolId: string;\n email: string;\n}\n\n/**\n * Lead response schema\n */\nexport const leadResponseSchema = z.object({\n aidolId: z.string(),\n email: z.string(),\n});\n\nexport type LeadResponse = z.infer<typeof leadResponseSchema>;\n"],"names":["aidolSchema","z","aidolCreateResponseSchema","memberDraftSchema","groupCreationSchema","members","m","imageGenerationDataSchema","imageGenerationResponseSchema","chatroomSchema","SenderType","messageSchema","isUser","message","isCompanion","POSITIONS","companionStatsSchema","companionSchema","leadResponseSchema"],"mappings":"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"}
1
+ {"version":3,"file":"lead-ClwTF-uu.mjs","sources":["../src/schemas/aidol.ts","../src/schemas/chatroom.ts","../src/schemas/companion.ts","../src/schemas/lead.ts"],"sourcesContent":["/**\n * AIdol (group) schemas\n * Matches backend aidol/schemas/aidol.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nimport type { Companion } from \"./companion\";\n\n/**\n * AIdol schema (public fields only, excludes anonymous_id)\n * Matches backend AIdolPublic (aidol/schemas/aidol.py)\n */\nexport const aidolSchema = z.object({\n id: z.string(),\n name: z.string().nullable(),\n email: z.string().nullable().optional(),\n greeting: z.string().nullable().optional(),\n concept: z.string().nullable().optional(),\n profileImageUrl: z.string().nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface AIdol extends BaseRecord {\n id: string;\n name: string | null;\n email?: string | null;\n greeting?: string | null;\n concept?: string | null;\n profileImageUrl: string | null;\n createdAt: string;\n updatedAt: string;\n companions?: Companion[];\n}\n\n/**\n * Schema for AIdol creation response (backend returns only id)\n */\nexport const aidolCreateResponseSchema = z.object({\n id: z.string(),\n});\n\nexport type AIdolCreateResponse = z.infer<typeof aidolCreateResponseSchema>;\n\n/**\n * Schema for creating an AIdol group\n */\nexport interface AIdolCreate {\n name: string;\n concept?: string | null;\n profileImageUrl: string;\n}\n\n/**\n * Schema for updating an AIdol group\n */\nexport interface AIdolUpdate {\n name?: string;\n concept?: string | null;\n profileImageUrl?: string | null;\n}\n\n/**\n * Member draft schema for group creation form\n */\nexport const memberDraftSchema = z.object({\n name: z.string().min(1, \"creation.memberNameRequired\"),\n personality: z.string().optional(),\n systemPrompt: z.string().optional(),\n});\n\nexport type MemberDraft = z.infer<typeof memberDraftSchema>;\n\n/**\n * Group creation form schema (react-hook-form + zod)\n */\nexport const groupCreationSchema = z.object({\n groupName: z.string().min(1, \"creation.groupNameRequired\"),\n concept: z.string().optional(),\n profileImageUrl: z.string().min(1, \"creation.emblemRequired\"),\n members: z\n .array(memberDraftSchema)\n .min(1, \"creation.memberRequired\")\n .refine((members) => members.some((m) => m.name.trim() !== \"\"), {\n message: \"creation.memberRequired\",\n }),\n});\n\nexport type GroupCreationFormData = z.infer<typeof groupCreationSchema>;\n\n// ---------------------------------------------------------------------------\n// Image Generation\n// ---------------------------------------------------------------------------\n\n/**\n * Request schema for image generation\n */\nexport const imageGenerationRequestSchema = z.object({\n prompt: z.string().max(200),\n});\n\nexport type ImageGenerationRequest = z.infer<\n typeof imageGenerationRequestSchema\n>;\n\n/**\n * Image generation result data\n */\nexport const imageGenerationDataSchema = z.object({\n imageUrl: z.string(),\n width: z.number(),\n height: z.number(),\n format: z.string(),\n});\n\nexport type ImageGenerationData = z.infer<typeof imageGenerationDataSchema>;\n\n/**\n * Response schema for image generation\n */\nexport const imageGenerationResponseSchema = z.object({\n data: imageGenerationDataSchema,\n});\n\nexport type ImageGenerationResponse = z.infer<\n typeof imageGenerationResponseSchema\n>;\n","/**\n * Chatroom schemas\n * Matches backend aidol/schemas/chatroom.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n// =============================================================================\n// Chatroom Schemas\n// =============================================================================\n\nexport const chatroomSchema = z.object({\n id: z.string(),\n name: z.string(),\n language: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Chatroom extends BaseRecord {\n id: string;\n name: string;\n language: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ChatroomCreate {\n name: string;\n language?: string;\n}\n\n// =============================================================================\n// Message Schemas\n// =============================================================================\n\nexport enum SenderType {\n USER = \"user\",\n COMPANION = \"companion\",\n}\n\nexport const messageSchema = z.object({\n id: z.string(),\n senderType: z.nativeEnum(SenderType),\n content: z.string(),\n createdAt: z.string(),\n});\n\nexport interface Message extends BaseRecord {\n id: string;\n senderType: SenderType;\n content: string;\n createdAt: string;\n}\n\n/**\n * Type guard to check if message is from user\n */\nexport const isUser = (message: Message): boolean => {\n return message.senderType === SenderType.USER;\n};\n\n/**\n * Type guard to check if message is from companion\n */\nexport const isCompanion = (message: Message): boolean => {\n return message.senderType === SenderType.COMPANION;\n};\n","/**\n * Companion (member) schemas\n * Matches backend aidol/schemas/companion.py definitions (Public only for MVP)\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\nexport const POSITIONS = [\n \"mainVocal\",\n \"subVocal\",\n \"mainDancer\",\n \"subDancer\",\n \"mainRapper\",\n \"subRapper\",\n] as const;\n\nexport type Position = (typeof POSITIONS)[number];\n\nexport type Gender = \"male\" | \"female\";\n\nexport type Grade = \"A\" | \"B\" | \"C\" | \"F\";\n\nexport interface CompanionStats {\n vocal: number;\n dance: number;\n rap: number;\n visual: number;\n stamina: number;\n charm: number;\n}\n\nconst companionStatsSchema = z.object({\n vocal: z.number(),\n dance: z.number(),\n rap: z.number(),\n visual: z.number(),\n stamina: z.number(),\n charm: z.number(),\n});\n\n/**\n * Companion schema (public fields only, excludes system_prompt)\n */\nexport const companionSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n biography: z.string().nullable().optional(),\n profilePictureUrl: z.string().nullable().optional(),\n grade: z.enum([\"A\", \"B\", \"C\", \"F\"]).nullable().optional(),\n position: z\n .enum([\n \"mainVocal\",\n \"subVocal\",\n \"mainDancer\",\n \"subDancer\",\n \"mainRapper\",\n \"subRapper\",\n ])\n .nullable()\n .optional(),\n mbti: z.string().nullable().optional(),\n gender: z.enum([\"male\", \"female\"]).nullable().optional(),\n stats: companionStatsSchema.optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Companion extends BaseRecord {\n id: string;\n aidolId?: string | null;\n name?: string | null;\n biography?: string | null;\n profilePictureUrl?: string | null;\n grade?: Grade | null;\n position?: Position | null;\n mbti?: string | null;\n gender?: Gender | null;\n stats?: CompanionStats;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Schema for creating a Companion\n * Includes systemPrompt for creation (excluded from response)\n */\nexport interface CompanionCreate {\n aidolId?: string | null;\n name: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n}\n\n/**\n * Schema for updating a Companion\n */\nexport interface CompanionUpdate {\n aidolId?: string | null;\n name?: string;\n biography?: string | null;\n profilePictureUrl?: string | null;\n systemPrompt?: string | null;\n position?: Position | null;\n gender?: Gender | null;\n mbtiEnergy?: number;\n mbtiPerception?: number;\n mbtiJudgment?: number;\n mbtiLifestyle?: number;\n}\n","/**\n * Lead schemas\n * Matches backend aidol/schemas/aidol_lead.py definitions\n */\n\nimport { z } from \"zod\";\n\n/**\n * Lead request schema\n */\nexport interface LeadRequest {\n aidolId: string;\n email: string;\n}\n\n/**\n * Lead response schema\n */\nexport const leadResponseSchema = z.object({\n aidolId: z.string(),\n email: z.string(),\n});\n\nexport type LeadResponse = z.infer<typeof leadResponseSchema>;\n"],"names":["aidolSchema","z","aidolCreateResponseSchema","memberDraftSchema","groupCreationSchema","members","m","imageGenerationDataSchema","imageGenerationResponseSchema","chatroomSchema","SenderType","messageSchema","isUser","message","isCompanion","POSITIONS","companionStatsSchema","companionSchema","leadResponseSchema"],"mappings":"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"}
@@ -42,7 +42,7 @@ export declare class ChatroomRepository extends BaseCrudRepository<Chatroom> {
42
42
  * Send a message to a chatroom
43
43
  * POST /chatrooms/{id}/messages
44
44
  *
45
- * ClaimToken is automatically sent via httpOnly cookie.
45
+ * Anonymous ID is automatically sent via httpOnly cookie.
46
46
  *
47
47
  * @param chatroomId - The chatroom ID
48
48
  * @param content - The message content
@@ -2,7 +2,7 @@ import { BaseRecord } from '@aioia/core';
2
2
  import { z } from 'zod';
3
3
  import { Companion } from './companion';
4
4
  /**
5
- * AIdol schema (public fields only, excludes claim_token)
5
+ * AIdol schema (public fields only, excludes anonymous_id)
6
6
  * Matches backend AIdolPublic (aidol/schemas/aidol.py)
7
7
  */
8
8
  export declare const aidolSchema: z.ZodObject<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidol",
3
- "version": "0.13.0",
3
+ "version": "1.0.0",
4
4
  "description": "React components for AIdol - Create and chat with your own AI idol group",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",