aidol 2.2.0 → 2.4.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/BottomNavigation.d.ts +7 -0
- package/dist/components/BottomNavigation.d.ts.map +1 -0
- package/dist/components/group/ChemistryContent.d.ts +12 -0
- package/dist/components/group/ChemistryContent.d.ts.map +1 -0
- package/dist/components/group/ChemistryRelationCard.d.ts.map +1 -1
- package/dist/components/group/MemberProfileCard.d.ts.map +1 -1
- package/dist/components/group/index.d.ts +1 -0
- package/dist/components/group/index.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/i18n/translations.d.ts +126 -54
- package/dist/i18n/translations.d.ts.map +1 -1
- package/dist/index.cjs +55 -55
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +286 -277
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../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":["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 {\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 { 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 * 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","CompanionRepository","companionSchema","aidolId","LeadsRepository","apiService","response","leadResponseSchema","STORAGE_KEY","schema","readStorage","stored","parsed","result","error","writeStorage","data","LocalChatroomIdsRepository","AIDOL_NS","aidolTranslations","en","es","id","ja","ko","th","tl","vi","zh"],"mappings":";;;;AAeO,MAAMA,WAAwBC,EAA0B;AAAA,EAAxD,cAAA;AAAA,UAAA,GAAA,SAAA,GACL,KAAS,WAAW;AAAA,EAAA;AAAA,EAEV,gBAAgB;AACxB,WAAOC;AAAA,EACT;AAAA,EAEA,MAAM,YAAYC,GAAsD;AACtE,UAAMC,IAAM,KAAK,WAAW,SAAS,KAAK,QAAQ,GAC5CC,IAAO,MAAM,KAAK,WAAW,QAAQD,GAAK;AAAA,MAC9C,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,MAC3B,MAAM,KAAK,UAAUD,CAAS;AAAA,IAAA,CAC/B;AACD,WAAOG,EAA0B,MAAMD,EAAI,IAAI;AAAA,EACjD;AAAA,EAEA,MAAM,MAAME,GAAwD;AAClE,UAAMH,IAAM,KAAK,WAAW,SAAS,GAAG,KAAK,QAAQ,KAAK,GACpDC,IAAO,MAAM,KAAK,WAAW,QAAQD,GAAKG,CAAY;AAI5D,WAAO,EAAE,MAAML,EAAY,MAAA,EAAQ,MAAMG,EAAI,IAAI,EAAA;AAAA,EACnD;AAAA,EAEA,MAAM,cACJG,GACAD,GACkC;AAClC,UAAMH,IAAM,KAAK,WAAW,SAAS,GAAG,KAAK,QAAQ,SAAS,GACxDK,IAAc,MAAM,KAAK,WAAW,QAAQL,GAAK;AAAA,MACrD,GAAGG;AAAA,MACH,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAAA;AAAA,MAElB,MAAM,KAAK,UAAUC,CAAO;AAAA,IAAA,CAC7B;AAED,WAAO,KAAK,iBAAiBC,GAAaC,CAA6B;AAAA,EACzE;AACF;AC5CA,MAAMC,IAAyBC,EAAE,OAAO;AAAA,EACtC,WAAWA,EAAE,OAAA;AAAA,EACb,SAASA,EAAE,OAAA;AACb,CAAC;AAWM,MAAMC,WAA2BZ,EAA6B;AAAA,EAA9D,cAAA;AAAA,UAAA,GAAA,SAAA,GACL,KAAS,WAAW;AAAA,EAAA;AAAA,EAEV,gBAAgB;AACxB,WAAOa;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YACJC,GACAC,GACAT,GACoB;AACpB,UAAMU,IAAS,IAAI,gBAAA;AACnB,IAAID,GAAS,UAAU,UACrBC,EAAO,IAAI,SAASD,EAAQ,MAAM,UAAU,GAE1CA,GAAS,WAAW,UACtBC,EAAO,IAAI,UAAUD,EAAQ,OAAO,UAAU;AAGhD,UAAME,IAAcD,EAAO,SAAA,GACrBb,IAAM,KAAK,WAAW;AAAA,MAC1B,GAAG,KAAK,QAAQ,IAAIW,CAAU,YAAYG,IAAc,IAAIA,CAAW,KAAK,EAAE;AAAA,IAAA,GAG1ET,IAAc,MAAM,KAAK,WAAW,QAAQL,GAAKG,CAAY;AACnE,WAAO,KAAK,iBAAiBE,GAAaG,EAAE,MAAMO,CAAa,CAAC;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,YACJJ,GACAK,GACAb,GACkB;AAClB,UAAMH,IAAM,KAAK,WAAW;AAAA,MAC1B,GAAG,KAAK,QAAQ,IAAIW,CAAU;AAAA,IAAA,GAG1BN,IAAc,MAAM,KAAK,WAAW,QAAQL,GAAK;AAAA,MACrD,GAAGG;AAAA,MACH,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,MAC3B,MAAM,KAAK,UAAU,EAAE,SAAAa,GAAS,YAAY,QAAQ;AAAA,IAAA,CACrD;AAED,WAAO,KAAK,iBAAiBX,GAAaU,CAAa;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBACJJ,GACAM,GACAd,GAC2B;AAC3B,UAAMH,IAAM,KAAK,WAAW;AAAA,MAC1B,GAAG,KAAK,QAAQ,IAAIW,CAAU,eAAeM,CAAW;AAAA,IAAA,GAGpDZ,IAAc,MAAM,KAAK,WAAW,QAAQL,GAAK;AAAA,MACrD,GAAGG;AAAA,MACH,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,IAAmB,CAC/C;AAED,WAAO,KAAK,iBAAiBE,GAAaE,CAAsB;AAAA,EAClE;AACF;ACpGO,MAAMW,WAA4BrB,EAA8B;AAAA,EAAhE,cAAA;AAAA,UAAA,GAAA,SAAA,GACL,KAAS,WAAW;AAAA,EAAA;AAAA,EAEV,gBAAgB;AACxB,WAAOsB;AAAA,EACT;AAAA,EAEA,MAAM,aAAaC,GAAiB;AAClC,WAAO,KAAK,QAAQ;AAAA,MAClB,SAAS,CAAC,EAAE,OAAO,YAAY,UAAU,MAAM,OAAOA,EAAA,CAAS;AAAA,IAAA,CAChE;AAAA,EACH;AAAA,EAEA,MAAM,cACJhB,GACAD,GACkC;AAClC,UAAMH,IAAM,KAAK,WAAW,SAAS,GAAG,KAAK,QAAQ,SAAS,GACxDK,IAAc,MAAM,KAAK,WAAW,QAAQL,GAAK;AAAA,MACrD,GAAGG;AAAA,MACH,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAAA;AAAA,MAElB,MAAM,KAAK,UAAUC,CAAO;AAAA,IAAA,CAC7B;AAED,WAAO,KAAK,iBAAiBC,GAAaC,CAA6B;AAAA,EACzE;AACF;ACjCO,MAAMe,GAAgB;AAAA,EAG3B,YAA6BC,GAAwB;AAAxB,SAAA,aAAAA,GAF7B,KAAiB,WAAW;AAAA,EAE0B;AAAA,EAEtD,MAAM,OAAOlB,GAA6C;AACxD,UAAMJ,IAAM,KAAK,WAAW,SAAS,KAAK,QAAQ,GAC5CuB,IAAW,MAAM,KAAK,WAAW,QAAQvB,GAAK;AAAA,MAClD,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,MAC3B,MAAM,KAAK,UAAUI,CAAO;AAAA,IAAA,CAC7B;AAGD,WADgBI,EAAE,OAAO,EAAE,MAAMgB,EAAA,CAAoB,EAAE,MAAMD,CAAQ,EACtD;AAAA,EACjB;AACF;ACpBA,MAAME,IAAc,sBACdC,IAASlB,EAAE,OAAOA,EAAE,UAAUA,EAAE,QAAQ,GAExCmB,IAAc,MAA8B;AAChD,MAAI,OAAO,SAAW,IAAa,QAAO,CAAA;AAE1C,QAAMC,IAAS,aAAa,QAAQH,CAAW;AAC/C,MAAI,CAACG,EAAQ,QAAO,CAAA;AAEpB,MAAI;AACF,UAAMC,IAAS,KAAK,MAAMD,CAAM,GAC1BE,IAASJ,EAAO,UAAUG,CAAM;AACtC,WAAIC,EAAO,UACFA,EAAO,QAEhB,QAAQ,KAAK,sDAAsD,GAC5D,CAAA;AAAA,EACT,SAASC,GAAO;AACd,QAAIA,aAAiB;AACnB,qBAAQ,KAAK,yDAAyD,GAC/D,CAAA;AAET,UAAMA;AAAA,EACR;AACF,GAEMC,IAAe,CAACC,MAAuC;AAC3D,MAAI,OAAO,SAAW;AACpB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGJ,eAAa,QAAQR,GAAa,KAAK,UAAUQ,CAAI,CAAC;AACxD,GAMaC,KAA6B;AAAA,EACxC,cAAcjB,GAAoC;AAEhD,WADaU,EAAA,EACDV,CAAW,KAAK;AAAA,EAC9B;AAAA,EAEA,cAAcA,GAAqBN,GAA0B;AAC3D,UAAMsB,IAAON,EAAA;AACb,IAAAM,EAAKhB,CAAW,IAAIN,GACpBqB,EAAaC,CAAI;AAAA,EACnB;AAAA,EAEA,iBAAiBhB,GAA2B;AAC1C,UAAMgB,IAAON,EAAA;AACb,WAAOM,EAAKhB,CAAW,GACvBe,EAAaC,CAAI;AAAA,EACnB;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCxCaE,KAAW,SAcXC,KAAoB;AAAA,EAC/B,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AAAA,EACA,IAAAC;AACF;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../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":["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 {\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 { 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 * 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","CompanionRepository","companionSchema","aidolId","LeadsRepository","apiService","response","leadResponseSchema","STORAGE_KEY","schema","readStorage","stored","parsed","result","error","writeStorage","data","LocalChatroomIdsRepository","AIDOL_NS","aidolTranslations","en","es","id","ja","ko","th","tl","vi","zh"],"mappings":"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"}
|