aidol 2.11.0 → 2.13.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.
- package/dist/components/common/ActivityBadge.d.ts +8 -0
- package/dist/components/common/ActivityBadge.d.ts.map +1 -0
- package/dist/components/common/CompanionAvatar.d.ts +11 -0
- package/dist/components/common/CompanionAvatar.d.ts.map +1 -0
- package/dist/components/common/index.d.ts +3 -0
- package/dist/components/common/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/i18n/translations.d.ts +54 -0
- package/dist/i18n/translations.d.ts.map +1 -1
- package/dist/index.cjs +42 -42
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +147 -147
- package/dist/index.js.map +1 -1
- package/dist/lib/activity.d.ts +7 -0
- package/dist/lib/activity.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/repositories/AIdolRepository.ts","../src/repositories/ChatroomRepository.ts","../src/repositories/CompanionRelationshipRepository.ts","../src/repositories/CompanionRepository.ts","../src/repositories/HighlightRepository.ts","../src/repositories/LeadsRepository.ts","../src/repositories/LocalChatroomIdsRepository.ts","../src/lib/koreanParticle.ts","../src/i18n/translations.ts"],"sourcesContent":["import { BaseCrudRepository } from \"@aioia/core\";\n\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\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 })) as { data: unknown };\n return aidolCreateResponseSchema.parse(raw.data);\n }\n\n async getMy(fetchOptions?: RequestInit): Promise<{ data: AIdol[] }> {\n const url = this.apiService.buildUrl(`${this.resource}/my`);\n const raw = (await this.apiService.request(url, fetchOptions)) as {\n data: unknown[];\n total: number;\n };\n return { data: aidolSchema.array().parse(raw.data) };\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 { CompanionRelationship } from \"../schemas\";\nimport { companionRelationshipSchema } from \"../schemas\";\n\nexport class CompanionRelationshipRepository extends BaseCrudRepository<CompanionRelationship> {\n readonly resource = \"companion-relationships\";\n\n protected getDataSchema() {\n return companionRelationshipSchema;\n }\n\n async getByFromCompanionId(fromCompanionId: string) {\n return this.getList({\n filters: [\n { field: \"from_companion_id\", operator: \"eq\", value: fromCompanionId },\n ],\n });\n }\n\n async deleteOne(params: {\n id: string | number;\n }): Promise<{ data: CompanionRelationship }> {\n const url = `${this.apiService.buildUrl(this.resource)}/${params.id}`;\n await this.apiService.request(url, { method: \"DELETE\" });\n return { data: {} as CompanionRelationship };\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 getByAidolId(aidolId: string) {\n return this.getList({\n filters: [{ field: \"aidol_id\", operator: \"eq\", value: aidolId }],\n });\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\";\n\nimport type { AIdolHighlight, HighlightMessage } from \"../schemas\";\nimport { aidolHighlightSchema, highlightMessageSchema } from \"../schemas\";\n\nexport class HighlightRepository extends BaseCrudRepository<AIdolHighlight> {\n readonly resource = \"aidol-highlights\";\n\n protected getDataSchema() {\n return aidolHighlightSchema;\n }\n\n async getByAidolId(aidolId: string) {\n return this.getList({\n filters: [{ field: \"aidol_id\", operator: \"eq\", value: aidolId }],\n });\n }\n\n async getMessages(\n highlightId: string,\n fetchOptions?: RequestInit,\n ): Promise<{ data: HighlightMessage[] }> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${highlightId}/messages`,\n );\n const raw = await this.apiService.request(url, fetchOptions);\n return { data: highlightMessageSchema.array().parse(raw) };\n }\n}\n","import { z } from \"zod\";\n\nimport 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 const wrapped = z.object({ data: leadResponseSchema }).parse(response);\n return wrapped.data;\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// words: 조사 적용 대상 단어\n// withFinalConsonant: 받침이 있을 때 사용할 조사\n// withoutFinalConsonant: 받침이 없을 때 사용할 조사\n// 예: getParticle(\"민준\", \"과\", \"와\") => \"과\"\nexport function getParticle(\n word: string,\n withFinalConsonant: string,\n withoutFinalConsonant: string,\n): string {\n if (!word) return withoutFinalConsonant;\n\n const lastChar = word.charAt(word.length - 1);\n const code = lastChar.charCodeAt(0);\n\n // 한글 유니코드 범위 = 0xAC00 ~ 0xD7A3\n if (code < 0xac00 || code > 0xd7a3) {\n return withoutFinalConsonant;\n }\n\n // 받침 여부 (code - 0xAC00) % 28 !== 0 이면 받침 있음\n const finalConsonantIndex = (code - 0xac00) % 28;\n\n // '로/으로' 예외 처리\n if (withFinalConsonant === \"으로\" && withoutFinalConsonant === \"로\") {\n return finalConsonantIndex === 0 || finalConsonantIndex === 8\n ? \"로\"\n : \"으로\"; // 8 = ㄹ\n }\n\n return finalConsonantIndex === 0 ? withoutFinalConsonant : withFinalConsonant;\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":["AIdolRepository","BaseCrudRepository","aidolSchema","variables","url","raw","aidolCreateResponseSchema","fetchOptions","request","rawResponse","imageGenerationResponseSchema","generateResponseSchema","z","ChatroomRepository","chatroomSchema","chatroomId","options","params","queryString","messageSchema","content","companionId","CompanionRelationshipRepository","companionRelationshipSchema","fromCompanionId","CompanionRepository","companionSchema","aidolId","HighlightRepository","aidolHighlightSchema","highlightId","highlightMessageSchema","LeadsRepository","apiService","response","leadResponseSchema","STORAGE_KEY","schema","readStorage","stored","parsed","result","error","writeStorage","data","LocalChatroomIdsRepository","getParticle","word","withFinalConsonant","withoutFinalConsonant","code","finalConsonantIndex","AIDOL_NS","aidolTranslations","en","es","id","ja","ko","th","tl","vi","zh"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/repositories/AIdolRepository.ts","../src/repositories/ChatroomRepository.ts","../src/repositories/CompanionRelationshipRepository.ts","../src/repositories/CompanionRepository.ts","../src/repositories/HighlightRepository.ts","../src/repositories/LeadsRepository.ts","../src/repositories/LocalChatroomIdsRepository.ts","../src/lib/koreanParticle.ts","../src/i18n/translations.ts"],"sourcesContent":["import { BaseCrudRepository } from \"@aioia/core\";\n\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\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 })) as { data: unknown };\n return aidolCreateResponseSchema.parse(raw.data);\n }\n\n async getMy(fetchOptions?: RequestInit): Promise<{ data: AIdol[] }> {\n const url = this.apiService.buildUrl(\"me/aidols\");\n const raw = (await this.apiService.request(url, fetchOptions)) as {\n data: unknown[];\n total: number;\n };\n return { data: aidolSchema.array().parse(raw.data) };\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 { CompanionRelationship } from \"../schemas\";\nimport { companionRelationshipSchema } from \"../schemas\";\n\nexport class CompanionRelationshipRepository extends BaseCrudRepository<CompanionRelationship> {\n readonly resource = \"companion-relationships\";\n\n protected getDataSchema() {\n return companionRelationshipSchema;\n }\n\n async getByFromCompanionId(fromCompanionId: string) {\n return this.getList({\n filters: [\n { field: \"from_companion_id\", operator: \"eq\", value: fromCompanionId },\n ],\n });\n }\n\n async deleteOne(params: {\n id: string | number;\n }): Promise<{ data: CompanionRelationship }> {\n const url = `${this.apiService.buildUrl(this.resource)}/${params.id}`;\n await this.apiService.request(url, { method: \"DELETE\" });\n return { data: {} as CompanionRelationship };\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 getByAidolId(aidolId: string) {\n return this.getList({\n filters: [{ field: \"aidol_id\", operator: \"eq\", value: aidolId }],\n });\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\";\n\nimport type { AIdolHighlight, HighlightMessage } from \"../schemas\";\nimport { aidolHighlightSchema, highlightMessageSchema } from \"../schemas\";\n\nexport class HighlightRepository extends BaseCrudRepository<AIdolHighlight> {\n readonly resource = \"aidol-highlights\";\n\n protected getDataSchema() {\n return aidolHighlightSchema;\n }\n\n async getByAidolId(aidolId: string) {\n return this.getList({\n filters: [{ field: \"aidol_id\", operator: \"eq\", value: aidolId }],\n });\n }\n\n async getMessages(\n highlightId: string,\n fetchOptions?: RequestInit,\n ): Promise<{ data: HighlightMessage[] }> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${highlightId}/messages`,\n );\n const raw = await this.apiService.request(url, fetchOptions);\n return { data: highlightMessageSchema.array().parse(raw) };\n }\n}\n","import { z } from \"zod\";\n\nimport 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 const wrapped = z.object({ data: leadResponseSchema }).parse(response);\n return wrapped.data;\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// words: 조사 적용 대상 단어\n// withFinalConsonant: 받침이 있을 때 사용할 조사\n// withoutFinalConsonant: 받침이 없을 때 사용할 조사\n// 예: getParticle(\"민준\", \"과\", \"와\") => \"과\"\nexport function getParticle(\n word: string,\n withFinalConsonant: string,\n withoutFinalConsonant: string,\n): string {\n if (!word) return withoutFinalConsonant;\n\n const lastChar = word.charAt(word.length - 1);\n const code = lastChar.charCodeAt(0);\n\n // 한글 유니코드 범위 = 0xAC00 ~ 0xD7A3\n if (code < 0xac00 || code > 0xd7a3) {\n return withoutFinalConsonant;\n }\n\n // 받침 여부 (code - 0xAC00) % 28 !== 0 이면 받침 있음\n const finalConsonantIndex = (code - 0xac00) % 28;\n\n // '로/으로' 예외 처리\n if (withFinalConsonant === \"으로\" && withoutFinalConsonant === \"로\") {\n return finalConsonantIndex === 0 || finalConsonantIndex === 8\n ? \"로\"\n : \"으로\"; // 8 = ㄹ\n }\n\n return finalConsonantIndex === 0 ? withoutFinalConsonant : withFinalConsonant;\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":["AIdolRepository","BaseCrudRepository","aidolSchema","variables","url","raw","aidolCreateResponseSchema","fetchOptions","request","rawResponse","imageGenerationResponseSchema","generateResponseSchema","z","ChatroomRepository","chatroomSchema","chatroomId","options","params","queryString","messageSchema","content","companionId","CompanionRelationshipRepository","companionRelationshipSchema","fromCompanionId","CompanionRepository","companionSchema","aidolId","HighlightRepository","aidolHighlightSchema","highlightId","highlightMessageSchema","LeadsRepository","apiService","response","leadResponseSchema","STORAGE_KEY","schema","readStorage","stored","parsed","result","error","writeStorage","data","LocalChatroomIdsRepository","getParticle","word","withFinalConsonant","withoutFinalConsonant","code","finalConsonantIndex","AIDOL_NS","aidolTranslations","en","es","id","ja","ko","th","tl","vi","zh"],"mappings":"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"}
|