aidol 2.16.1 → 2.17.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/client.cjs.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/components/inbox/InboxBlock.d.ts +14 -0
- package/dist/components/inbox/InboxBlock.d.ts.map +1 -0
- package/dist/components/inbox/index.d.ts +2 -0
- package/dist/components/inbox/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 +108 -0
- package/dist/i18n/translations.d.ts.map +1 -1
- package/dist/index.cjs +109 -64
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +454 -364
- package/dist/index.js.map +1 -1
- package/dist/lib/date.d.ts +12 -0
- package/dist/lib/date.d.ts.map +1 -1
- package/dist/relationship-B3AClL0U.js.map +1 -1
- package/dist/relationship-BP7mIOjL.mjs.map +1 -1
- package/dist/repositories/ChatroomRepository.d.ts +22 -0
- package/dist/repositories/ChatroomRepository.d.ts.map +1 -1
- package/dist/repositories/LocalChatroomIdsRepository.d.ts +2 -0
- package/dist/repositories/LocalChatroomIdsRepository.d.ts.map +1 -1
- package/dist/repositories/index.d.ts +1 -1
- package/dist/repositories/index.d.ts.map +1 -1
- package/dist/schemas/chatroom.d.ts +1 -0
- package/dist/schemas/chatroom.d.ts.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/constants/companion.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/${this.resource}`);\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","/** Maximum number of members per aidol group */\nexport const MAX_MEMBERS = 25;\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport { MAX_MEMBERS } from \"../constants/companion\";\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 pagination: { pageSize: MAX_MEMBERS },\n filters: [\n { field: \"fromCompanionId\", 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 { MAX_MEMBERS } from \"../constants/companion\";\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 /** PUBLISHED 상태의 멤버만 최대 MAX_MEMBERS명까지 조회 */\n async getByAidolId(aidolId: string) {\n return this.getList({\n pagination: { pageSize: MAX_MEMBERS },\n filters: [\n { field: \"aidolId\", operator: \"eq\", value: aidolId },\n { field: \"status\", operator: \"eq\", value: \"PUBLISHED\" },\n ],\n });\n }\n\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const trimmed = request.prompt.trim();\n if (!trimmed) {\n throw new Error(\"promptEmpty\");\n }\n if (trimmed.length > 200) {\n throw new Error(\"promptTooLong\");\n }\n\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: \"aidolId\", 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","MAX_MEMBERS","CompanionRelationshipRepository","companionRelationshipSchema","fromCompanionId","CompanionRepository","companionSchema","aidolId","trimmed","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.js","sources":["../src/repositories/AIdolRepository.ts","../src/repositories/ChatroomRepository.ts","../src/constants/companion.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/${this.resource}`);\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 * Schema for \"my chatrooms\" list item (GET /me/chatrooms response)\n */\nconst lastMessageSchema = z.object({\n content: z.string(),\n createdAt: z.string(),\n});\n\nconst myChatroomItemSchema = z.object({\n id: z.string(),\n companionId: z.string(),\n lastMessage: lastMessageSchema.nullable(),\n});\n\nexport interface MyChatroomLastMessage {\n content: string;\n createdAt: string;\n}\n\nexport interface MyChatroomItem {\n id: string;\n companionId: string;\n lastMessage: MyChatroomLastMessage | null;\n}\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 /**\n * Generate initial AI response for an empty chatroom\n * POST /chatrooms/{id}/companions/{companionId}/initial-response\n *\n * Only works for chatrooms with no messages.\n * Returns 409 Conflict if the chatroom already has messages.\n */\n async generateInitialResponse(\n chatroomId: string,\n companionId: string,\n fetchOptions?: RequestInit,\n ): Promise<GenerateResponse> {\n const url = this.apiService.buildUrl(\n `${this.resource}/${chatroomId}/companions/${companionId}/initial-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 /**\n * Get the current user's chatroom list\n * GET /me/chatrooms\n */\n async getMyChatrooms(fetchOptions?: RequestInit): Promise<MyChatroomItem[]> {\n const url = this.apiService.buildUrl(`me/${this.resource}`);\n const raw = (await this.apiService.request(url, fetchOptions)) as {\n data: unknown[];\n };\n return myChatroomItemSchema.array().parse(raw.data);\n }\n}\n","/** Maximum number of members per aidol group */\nexport const MAX_MEMBERS = 25;\n","import { BaseCrudRepository } from \"@aioia/core\";\n\nimport { MAX_MEMBERS } from \"../constants/companion\";\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 pagination: { pageSize: MAX_MEMBERS },\n filters: [\n { field: \"fromCompanionId\", 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 { MAX_MEMBERS } from \"../constants/companion\";\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 /** PUBLISHED 상태의 멤버만 최대 MAX_MEMBERS명까지 조회 */\n async getByAidolId(aidolId: string) {\n return this.getList({\n pagination: { pageSize: MAX_MEMBERS },\n filters: [\n { field: \"aidolId\", operator: \"eq\", value: aidolId },\n { field: \"status\", operator: \"eq\", value: \"PUBLISHED\" },\n ],\n });\n }\n\n async generateImage(\n request: ImageGenerationRequest,\n fetchOptions?: RequestInit,\n ): Promise<ImageGenerationResponse> {\n const trimmed = request.prompt.trim();\n if (!trimmed) {\n throw new Error(\"promptEmpty\");\n }\n if (trimmed.length > 200) {\n throw new Error(\"promptTooLong\");\n }\n\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: \"aidolId\", 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 /** Returns the full { companionId → chatroomId } map from localStorage. */\n getAll(): Record<string, string> {\n return readStorage();\n },\n\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","lastMessageSchema","z","myChatroomItemSchema","generateResponseSchema","ChatroomRepository","chatroomSchema","chatroomId","options","params","queryString","messageSchema","content","companionId","MAX_MEMBERS","CompanionRelationshipRepository","companionRelationshipSchema","fromCompanionId","CompanionRepository","companionSchema","aidolId","trimmed","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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"}
|
package/dist/lib/date.d.ts
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
export declare const formatDate: (dateStr: string) => string;
|
|
2
|
+
export interface RelativeTime {
|
|
3
|
+
key: string;
|
|
4
|
+
params?: Record<string, string | number>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Returns an i18n key + params for relative time display.
|
|
8
|
+
* - < 1 min → chat.time.justNow
|
|
9
|
+
* - < 60 min → chat.time.minutesAgo { count }
|
|
10
|
+
* - < 24 hours → chat.time.hoursAgo { count }
|
|
11
|
+
* - >= 24 hours → chat.time.absolute { month, day, time }
|
|
12
|
+
*/
|
|
13
|
+
export declare const getRelativeTime: (dateStr: string, now?: Date) => RelativeTime | null;
|
|
2
14
|
export declare const getDaysSince: (dateStr: string) => number;
|
|
3
15
|
//# sourceMappingURL=date.d.ts.map
|
package/dist/lib/date.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/lib/date.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,WAOzC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,WAM3C,CAAC"}
|
|
1
|
+
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/lib/date.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,WAOzC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,MAAM,EACf,MAAK,IAAiB,KACrB,YAAY,GAAG,IAyBjB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,WAM3C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship-B3AClL0U.js","sources":["../src/schemas/aidol.ts","../src/schemas/chatroom.ts","../src/schemas/companion.ts","../src/schemas/companion-relationship.ts","../src/schemas/highlight.ts","../src/schemas/lead.ts","../src/constants/relationship.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 aidolStatusSchema = z.enum([\"DRAFT\", \"PUBLISHED\"]);\nexport type AIdolStatus = z.infer<typeof aidolStatusSchema>;\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 status: aidolStatusSchema,\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 status: AIdolStatus;\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 status?: AIdolStatus;\n}\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 companionId: z.string(),\n name: z.string(),\n language: z.string(),\n lastMessage: z\n .object({\n content: z.string(),\n createdAt: z.string(),\n })\n .nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Chatroom extends BaseRecord {\n id: string;\n companionId: string;\n name: string;\n language: string;\n lastMessage: {\n content: string;\n createdAt: string;\n } | null;\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 enum MessageStatus {\n SENDING = \"SENDING\",\n SENT = \"SENT\",\n ERROR = \"ERROR\",\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 companionId: z.string().optional(),\n anonymousId: z.string().optional(),\n});\n\nexport interface Message extends BaseRecord {\n id: string;\n senderType: SenderType;\n content: string;\n createdAt: string;\n companionId?: string;\n anonymousId?: string;\n status?: MessageStatus;\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 \"MAIN_VOCAL\",\n \"SUB_VOCAL\",\n \"MAIN_DANCER\",\n \"SUB_DANCER\",\n \"MAIN_RAPPER\",\n \"SUB_RAPPER\",\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 type Status = \"DRAFT\" | \"PUBLISHED\";\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 \"MAIN_VOCAL\",\n \"SUB_VOCAL\",\n \"MAIN_DANCER\",\n \"SUB_DANCER\",\n \"MAIN_RAPPER\",\n \"SUB_RAPPER\",\n ])\n .nullable()\n .optional(),\n mbti: z.string().nullable().optional(),\n gender: z.enum([\"MALE\", \"FEMALE\"]).nullable().optional(),\n status: z.enum([\"DRAFT\", \"PUBLISHED\"]),\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 status: Status;\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 status?: Status;\n mbtiEnergy?: number;\n mbtiPerception?: number;\n mbtiJudgment?: number;\n mbtiLifestyle?: number;\n}\n","/**\n * Companion Relationship schemas\n * Matches backend aidol/schemas/companion_relationship.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n/**\n * CompanionRelationship schema\n * Matches backend CompanionRelationship (aidol/schemas/companion_relationship.py)\n */\nexport const companionRelationshipSchema = z.object({\n id: z.string(),\n fromCompanionId: z.string().nullable().optional(),\n toCompanionId: z.string().nullable().optional(),\n intimacy: z.number().nullable().optional(),\n nickname: z.string().nullable().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface CompanionRelationship extends BaseRecord {\n id: string;\n fromCompanionId?: string | null;\n toCompanionId?: string | null;\n intimacy?: number | null;\n nickname?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CompanionRelationshipCreate {\n fromCompanionId: string;\n toCompanionId: string;\n intimacy?: number;\n nickname?: string;\n}\n","/**\n * AIdol Highlight schemas\n * Matches backend aidol/schemas/highlight.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// HighlightMessage\n// ---------------------------------------------------------------------------\n\nexport interface HighlightMessage {\n id: string;\n highlightId: string;\n companionId: string | null;\n sequence: number;\n content: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const highlightMessageSchema = z.object({\n id: z.string(),\n highlightId: z.string(),\n companionId: z.string().nullable(),\n sequence: z.number(),\n content: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n}) satisfies z.ZodType<HighlightMessage>;\n\n// ---------------------------------------------------------------------------\n// AIdolHighlight\n// ---------------------------------------------------------------------------\n\nexport const aidolHighlightSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n title: z.string(),\n thumbnailUrl: z.string(),\n subtitle: z.string(),\n isPremium: z.boolean(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface AIdolHighlight extends BaseRecord {\n id: string;\n aidolId?: string | null;\n title: string;\n thumbnailUrl: string;\n subtitle: string;\n isPremium: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\n// 내그룹의 하이라이트 섹션 표현이 달라서 따로 정의\nexport interface MyGroupHighlightSection {\n title: string;\n subtitle: string;\n items: AIdolHighlight[];\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 email: z.string(),\n});\n\nexport type LeadResponse = z.infer<typeof leadResponseSchema>;\n","/** 관계 유형 → 친밀도 매핑 */\nexport const RELATIONSHIP_TYPE_TO_INTIMACY = {\n awkward: 15,\n polite: 30,\n friendly: 45,\n tikitaka: 60,\n trust: 70,\n emotional: 80,\n bestFriend: 90,\n inseparable: 100,\n} as const;\n\n/** 관계 유형 타입 (위 객체에서 자동 추론) */\nexport type RelationshipType = keyof typeof RELATIONSHIP_TYPE_TO_INTIMACY;\n\n/** 친밀도 → 관계 유형 매핑 (위 객체에서 파생) */\nexport const INTIMACY_TO_RELATIONSHIP_TYPE = Object.fromEntries(\n Object.entries(RELATIONSHIP_TYPE_TO_INTIMACY).map(([type, intimacy]) => [\n intimacy,\n type,\n ]),\n) as Record<number, RelationshipType>;\n"],"names":["aidolStatusSchema","z","aidolSchema","aidolCreateResponseSchema","imageGenerationDataSchema","imageGenerationResponseSchema","chatroomSchema","SenderType","MessageStatus","messageSchema","isUser","message","isCompanion","POSITIONS","companionStatsSchema","companionSchema","companionRelationshipSchema","highlightMessageSchema","aidolHighlightSchema","leadResponseSchema","RELATIONSHIP_TYPE_TO_INTIMACY","INTIMACY_TO_RELATIONSHIP_TYPE","type","intimacy"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"relationship-B3AClL0U.js","sources":["../src/schemas/aidol.ts","../src/schemas/chatroom.ts","../src/schemas/companion.ts","../src/schemas/companion-relationship.ts","../src/schemas/highlight.ts","../src/schemas/lead.ts","../src/constants/relationship.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 aidolStatusSchema = z.enum([\"DRAFT\", \"PUBLISHED\"]);\nexport type AIdolStatus = z.infer<typeof aidolStatusSchema>;\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 status: aidolStatusSchema,\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 status: AIdolStatus;\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 status?: AIdolStatus;\n}\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 companionId: z.string(),\n name: z.string(),\n language: z.string(),\n lastMessage: z\n .object({\n content: z.string(),\n createdAt: z.string(),\n })\n .nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Chatroom extends BaseRecord {\n id: string;\n companionId: string;\n name: string;\n language: string;\n lastMessage: {\n content: string;\n createdAt: string;\n } | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ChatroomCreate {\n companionId: string;\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 enum MessageStatus {\n SENDING = \"SENDING\",\n SENT = \"SENT\",\n ERROR = \"ERROR\",\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 companionId: z.string().optional(),\n anonymousId: z.string().optional(),\n});\n\nexport interface Message extends BaseRecord {\n id: string;\n senderType: SenderType;\n content: string;\n createdAt: string;\n companionId?: string;\n anonymousId?: string;\n status?: MessageStatus;\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 \"MAIN_VOCAL\",\n \"SUB_VOCAL\",\n \"MAIN_DANCER\",\n \"SUB_DANCER\",\n \"MAIN_RAPPER\",\n \"SUB_RAPPER\",\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 type Status = \"DRAFT\" | \"PUBLISHED\";\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 \"MAIN_VOCAL\",\n \"SUB_VOCAL\",\n \"MAIN_DANCER\",\n \"SUB_DANCER\",\n \"MAIN_RAPPER\",\n \"SUB_RAPPER\",\n ])\n .nullable()\n .optional(),\n mbti: z.string().nullable().optional(),\n gender: z.enum([\"MALE\", \"FEMALE\"]).nullable().optional(),\n status: z.enum([\"DRAFT\", \"PUBLISHED\"]),\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 status: Status;\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 status?: Status;\n mbtiEnergy?: number;\n mbtiPerception?: number;\n mbtiJudgment?: number;\n mbtiLifestyle?: number;\n}\n","/**\n * Companion Relationship schemas\n * Matches backend aidol/schemas/companion_relationship.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n/**\n * CompanionRelationship schema\n * Matches backend CompanionRelationship (aidol/schemas/companion_relationship.py)\n */\nexport const companionRelationshipSchema = z.object({\n id: z.string(),\n fromCompanionId: z.string().nullable().optional(),\n toCompanionId: z.string().nullable().optional(),\n intimacy: z.number().nullable().optional(),\n nickname: z.string().nullable().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface CompanionRelationship extends BaseRecord {\n id: string;\n fromCompanionId?: string | null;\n toCompanionId?: string | null;\n intimacy?: number | null;\n nickname?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CompanionRelationshipCreate {\n fromCompanionId: string;\n toCompanionId: string;\n intimacy?: number;\n nickname?: string;\n}\n","/**\n * AIdol Highlight schemas\n * Matches backend aidol/schemas/highlight.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// HighlightMessage\n// ---------------------------------------------------------------------------\n\nexport interface HighlightMessage {\n id: string;\n highlightId: string;\n companionId: string | null;\n sequence: number;\n content: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const highlightMessageSchema = z.object({\n id: z.string(),\n highlightId: z.string(),\n companionId: z.string().nullable(),\n sequence: z.number(),\n content: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n}) satisfies z.ZodType<HighlightMessage>;\n\n// ---------------------------------------------------------------------------\n// AIdolHighlight\n// ---------------------------------------------------------------------------\n\nexport const aidolHighlightSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n title: z.string(),\n thumbnailUrl: z.string(),\n subtitle: z.string(),\n isPremium: z.boolean(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface AIdolHighlight extends BaseRecord {\n id: string;\n aidolId?: string | null;\n title: string;\n thumbnailUrl: string;\n subtitle: string;\n isPremium: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\n// 내그룹의 하이라이트 섹션 표현이 달라서 따로 정의\nexport interface MyGroupHighlightSection {\n title: string;\n subtitle: string;\n items: AIdolHighlight[];\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 email: z.string(),\n});\n\nexport type LeadResponse = z.infer<typeof leadResponseSchema>;\n","/** 관계 유형 → 친밀도 매핑 */\nexport const RELATIONSHIP_TYPE_TO_INTIMACY = {\n awkward: 15,\n polite: 30,\n friendly: 45,\n tikitaka: 60,\n trust: 70,\n emotional: 80,\n bestFriend: 90,\n inseparable: 100,\n} as const;\n\n/** 관계 유형 타입 (위 객체에서 자동 추론) */\nexport type RelationshipType = keyof typeof RELATIONSHIP_TYPE_TO_INTIMACY;\n\n/** 친밀도 → 관계 유형 매핑 (위 객체에서 파생) */\nexport const INTIMACY_TO_RELATIONSHIP_TYPE = Object.fromEntries(\n Object.entries(RELATIONSHIP_TYPE_TO_INTIMACY).map(([type, intimacy]) => [\n intimacy,\n type,\n ]),\n) as Record<number, RelationshipType>;\n"],"names":["aidolStatusSchema","z","aidolSchema","aidolCreateResponseSchema","imageGenerationDataSchema","imageGenerationResponseSchema","chatroomSchema","SenderType","MessageStatus","messageSchema","isUser","message","isCompanion","POSITIONS","companionStatsSchema","companionSchema","companionRelationshipSchema","highlightMessageSchema","aidolHighlightSchema","leadResponseSchema","RELATIONSHIP_TYPE_TO_INTIMACY","INTIMACY_TO_RELATIONSHIP_TYPE","type","intimacy"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship-BP7mIOjL.mjs","sources":["../src/schemas/aidol.ts","../src/schemas/chatroom.ts","../src/schemas/companion.ts","../src/schemas/companion-relationship.ts","../src/schemas/highlight.ts","../src/schemas/lead.ts","../src/constants/relationship.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 aidolStatusSchema = z.enum([\"DRAFT\", \"PUBLISHED\"]);\nexport type AIdolStatus = z.infer<typeof aidolStatusSchema>;\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 status: aidolStatusSchema,\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 status: AIdolStatus;\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 status?: AIdolStatus;\n}\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 companionId: z.string(),\n name: z.string(),\n language: z.string(),\n lastMessage: z\n .object({\n content: z.string(),\n createdAt: z.string(),\n })\n .nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Chatroom extends BaseRecord {\n id: string;\n companionId: string;\n name: string;\n language: string;\n lastMessage: {\n content: string;\n createdAt: string;\n } | null;\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 enum MessageStatus {\n SENDING = \"SENDING\",\n SENT = \"SENT\",\n ERROR = \"ERROR\",\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 companionId: z.string().optional(),\n anonymousId: z.string().optional(),\n});\n\nexport interface Message extends BaseRecord {\n id: string;\n senderType: SenderType;\n content: string;\n createdAt: string;\n companionId?: string;\n anonymousId?: string;\n status?: MessageStatus;\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 \"MAIN_VOCAL\",\n \"SUB_VOCAL\",\n \"MAIN_DANCER\",\n \"SUB_DANCER\",\n \"MAIN_RAPPER\",\n \"SUB_RAPPER\",\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 type Status = \"DRAFT\" | \"PUBLISHED\";\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 \"MAIN_VOCAL\",\n \"SUB_VOCAL\",\n \"MAIN_DANCER\",\n \"SUB_DANCER\",\n \"MAIN_RAPPER\",\n \"SUB_RAPPER\",\n ])\n .nullable()\n .optional(),\n mbti: z.string().nullable().optional(),\n gender: z.enum([\"MALE\", \"FEMALE\"]).nullable().optional(),\n status: z.enum([\"DRAFT\", \"PUBLISHED\"]),\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 status: Status;\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 status?: Status;\n mbtiEnergy?: number;\n mbtiPerception?: number;\n mbtiJudgment?: number;\n mbtiLifestyle?: number;\n}\n","/**\n * Companion Relationship schemas\n * Matches backend aidol/schemas/companion_relationship.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n/**\n * CompanionRelationship schema\n * Matches backend CompanionRelationship (aidol/schemas/companion_relationship.py)\n */\nexport const companionRelationshipSchema = z.object({\n id: z.string(),\n fromCompanionId: z.string().nullable().optional(),\n toCompanionId: z.string().nullable().optional(),\n intimacy: z.number().nullable().optional(),\n nickname: z.string().nullable().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface CompanionRelationship extends BaseRecord {\n id: string;\n fromCompanionId?: string | null;\n toCompanionId?: string | null;\n intimacy?: number | null;\n nickname?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CompanionRelationshipCreate {\n fromCompanionId: string;\n toCompanionId: string;\n intimacy?: number;\n nickname?: string;\n}\n","/**\n * AIdol Highlight schemas\n * Matches backend aidol/schemas/highlight.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// HighlightMessage\n// ---------------------------------------------------------------------------\n\nexport interface HighlightMessage {\n id: string;\n highlightId: string;\n companionId: string | null;\n sequence: number;\n content: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const highlightMessageSchema = z.object({\n id: z.string(),\n highlightId: z.string(),\n companionId: z.string().nullable(),\n sequence: z.number(),\n content: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n}) satisfies z.ZodType<HighlightMessage>;\n\n// ---------------------------------------------------------------------------\n// AIdolHighlight\n// ---------------------------------------------------------------------------\n\nexport const aidolHighlightSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n title: z.string(),\n thumbnailUrl: z.string(),\n subtitle: z.string(),\n isPremium: z.boolean(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface AIdolHighlight extends BaseRecord {\n id: string;\n aidolId?: string | null;\n title: string;\n thumbnailUrl: string;\n subtitle: string;\n isPremium: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\n// 내그룹의 하이라이트 섹션 표현이 달라서 따로 정의\nexport interface MyGroupHighlightSection {\n title: string;\n subtitle: string;\n items: AIdolHighlight[];\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 email: z.string(),\n});\n\nexport type LeadResponse = z.infer<typeof leadResponseSchema>;\n","/** 관계 유형 → 친밀도 매핑 */\nexport const RELATIONSHIP_TYPE_TO_INTIMACY = {\n awkward: 15,\n polite: 30,\n friendly: 45,\n tikitaka: 60,\n trust: 70,\n emotional: 80,\n bestFriend: 90,\n inseparable: 100,\n} as const;\n\n/** 관계 유형 타입 (위 객체에서 자동 추론) */\nexport type RelationshipType = keyof typeof RELATIONSHIP_TYPE_TO_INTIMACY;\n\n/** 친밀도 → 관계 유형 매핑 (위 객체에서 파생) */\nexport const INTIMACY_TO_RELATIONSHIP_TYPE = Object.fromEntries(\n Object.entries(RELATIONSHIP_TYPE_TO_INTIMACY).map(([type, intimacy]) => [\n intimacy,\n type,\n ]),\n) as Record<number, RelationshipType>;\n"],"names":["aidolStatusSchema","z","aidolSchema","aidolCreateResponseSchema","imageGenerationDataSchema","imageGenerationResponseSchema","chatroomSchema","SenderType","MessageStatus","messageSchema","isUser","message","isCompanion","POSITIONS","companionStatsSchema","companionSchema","companionRelationshipSchema","highlightMessageSchema","aidolHighlightSchema","leadResponseSchema","RELATIONSHIP_TYPE_TO_INTIMACY","INTIMACY_TO_RELATIONSHIP_TYPE","type","intimacy"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"relationship-BP7mIOjL.mjs","sources":["../src/schemas/aidol.ts","../src/schemas/chatroom.ts","../src/schemas/companion.ts","../src/schemas/companion-relationship.ts","../src/schemas/highlight.ts","../src/schemas/lead.ts","../src/constants/relationship.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 aidolStatusSchema = z.enum([\"DRAFT\", \"PUBLISHED\"]);\nexport type AIdolStatus = z.infer<typeof aidolStatusSchema>;\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 status: aidolStatusSchema,\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 status: AIdolStatus;\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 status?: AIdolStatus;\n}\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 companionId: z.string(),\n name: z.string(),\n language: z.string(),\n lastMessage: z\n .object({\n content: z.string(),\n createdAt: z.string(),\n })\n .nullable(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface Chatroom extends BaseRecord {\n id: string;\n companionId: string;\n name: string;\n language: string;\n lastMessage: {\n content: string;\n createdAt: string;\n } | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ChatroomCreate {\n companionId: string;\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 enum MessageStatus {\n SENDING = \"SENDING\",\n SENT = \"SENT\",\n ERROR = \"ERROR\",\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 companionId: z.string().optional(),\n anonymousId: z.string().optional(),\n});\n\nexport interface Message extends BaseRecord {\n id: string;\n senderType: SenderType;\n content: string;\n createdAt: string;\n companionId?: string;\n anonymousId?: string;\n status?: MessageStatus;\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 \"MAIN_VOCAL\",\n \"SUB_VOCAL\",\n \"MAIN_DANCER\",\n \"SUB_DANCER\",\n \"MAIN_RAPPER\",\n \"SUB_RAPPER\",\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 type Status = \"DRAFT\" | \"PUBLISHED\";\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 \"MAIN_VOCAL\",\n \"SUB_VOCAL\",\n \"MAIN_DANCER\",\n \"SUB_DANCER\",\n \"MAIN_RAPPER\",\n \"SUB_RAPPER\",\n ])\n .nullable()\n .optional(),\n mbti: z.string().nullable().optional(),\n gender: z.enum([\"MALE\", \"FEMALE\"]).nullable().optional(),\n status: z.enum([\"DRAFT\", \"PUBLISHED\"]),\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 status: Status;\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 status?: Status;\n mbtiEnergy?: number;\n mbtiPerception?: number;\n mbtiJudgment?: number;\n mbtiLifestyle?: number;\n}\n","/**\n * Companion Relationship schemas\n * Matches backend aidol/schemas/companion_relationship.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n/**\n * CompanionRelationship schema\n * Matches backend CompanionRelationship (aidol/schemas/companion_relationship.py)\n */\nexport const companionRelationshipSchema = z.object({\n id: z.string(),\n fromCompanionId: z.string().nullable().optional(),\n toCompanionId: z.string().nullable().optional(),\n intimacy: z.number().nullable().optional(),\n nickname: z.string().nullable().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface CompanionRelationship extends BaseRecord {\n id: string;\n fromCompanionId?: string | null;\n toCompanionId?: string | null;\n intimacy?: number | null;\n nickname?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CompanionRelationshipCreate {\n fromCompanionId: string;\n toCompanionId: string;\n intimacy?: number;\n nickname?: string;\n}\n","/**\n * AIdol Highlight schemas\n * Matches backend aidol/schemas/highlight.py definitions\n */\n\nimport type { BaseRecord } from \"@aioia/core\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// HighlightMessage\n// ---------------------------------------------------------------------------\n\nexport interface HighlightMessage {\n id: string;\n highlightId: string;\n companionId: string | null;\n sequence: number;\n content: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const highlightMessageSchema = z.object({\n id: z.string(),\n highlightId: z.string(),\n companionId: z.string().nullable(),\n sequence: z.number(),\n content: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n}) satisfies z.ZodType<HighlightMessage>;\n\n// ---------------------------------------------------------------------------\n// AIdolHighlight\n// ---------------------------------------------------------------------------\n\nexport const aidolHighlightSchema = z.object({\n id: z.string(),\n aidolId: z.string().nullable().optional(),\n title: z.string(),\n thumbnailUrl: z.string(),\n subtitle: z.string(),\n isPremium: z.boolean(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport interface AIdolHighlight extends BaseRecord {\n id: string;\n aidolId?: string | null;\n title: string;\n thumbnailUrl: string;\n subtitle: string;\n isPremium: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\n// 내그룹의 하이라이트 섹션 표현이 달라서 따로 정의\nexport interface MyGroupHighlightSection {\n title: string;\n subtitle: string;\n items: AIdolHighlight[];\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 email: z.string(),\n});\n\nexport type LeadResponse = z.infer<typeof leadResponseSchema>;\n","/** 관계 유형 → 친밀도 매핑 */\nexport const RELATIONSHIP_TYPE_TO_INTIMACY = {\n awkward: 15,\n polite: 30,\n friendly: 45,\n tikitaka: 60,\n trust: 70,\n emotional: 80,\n bestFriend: 90,\n inseparable: 100,\n} as const;\n\n/** 관계 유형 타입 (위 객체에서 자동 추론) */\nexport type RelationshipType = keyof typeof RELATIONSHIP_TYPE_TO_INTIMACY;\n\n/** 친밀도 → 관계 유형 매핑 (위 객체에서 파생) */\nexport const INTIMACY_TO_RELATIONSHIP_TYPE = Object.fromEntries(\n Object.entries(RELATIONSHIP_TYPE_TO_INTIMACY).map(([type, intimacy]) => [\n intimacy,\n type,\n ]),\n) as Record<number, RelationshipType>;\n"],"names":["aidolStatusSchema","z","aidolSchema","aidolCreateResponseSchema","imageGenerationDataSchema","imageGenerationResponseSchema","chatroomSchema","SenderType","MessageStatus","messageSchema","isUser","message","isCompanion","POSITIONS","companionStatsSchema","companionSchema","companionRelationshipSchema","highlightMessageSchema","aidolHighlightSchema","leadResponseSchema","RELATIONSHIP_TYPE_TO_INTIMACY","INTIMACY_TO_RELATIONSHIP_TYPE","type","intimacy"],"mappings":";AAcO,MAAMA,IAAoBC,EAAE,KAAK,CAAC,SAAS,WAAW,CAAC,GAGjDC,IAAcD,EAAE,OAAO;AAAA,EAClC,IAAIA,EAAE,OAAA;AAAA,EACN,MAAMA,EAAE,OAAA,EAAS,SAAA;AAAA,EACjB,OAAOA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC7B,UAAUA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAChC,SAASA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC/B,iBAAiBA,EAAE,OAAA,EAAS,SAAA;AAAA,EAC5B,QAAQD;AAAA,EACR,WAAWC,EAAE,OAAA;AAAA,EACb,WAAWA,EAAE,OAAA;AACf,CAAC,GAkBYE,IAA4BF,EAAE,OAAO;AAAA,EAChD,IAAIA,EAAE,OAAA;AACR,CAAC;AA8B2CA,EAAE,OAAO;AAAA,EACnD,QAAQA,EAAE,OAAA,EAAS,IAAI,GAAG;AAC5B,CAAC;AASM,MAAMG,IAA4BH,EAAE,OAAO;AAAA,EAChD,UAAUA,EAAE,OAAA;AAAA,EACZ,OAAOA,EAAE,OAAA;AAAA,EACT,QAAQA,EAAE,OAAA;AAAA,EACV,QAAQA,EAAE,OAAA;AACZ,CAAC,GAOYI,IAAgCJ,EAAE,OAAO;AAAA,EACpD,MAAMG;AACR,CAAC,GC1FYE,IAAiBL,EAAE,OAAO;AAAA,EACrC,IAAIA,EAAE,OAAA;AAAA,EACN,aAAaA,EAAE,OAAA;AAAA,EACf,MAAMA,EAAE,OAAA;AAAA,EACR,UAAUA,EAAE,OAAA;AAAA,EACZ,aAAaA,EACV,OAAO;AAAA,IACN,SAASA,EAAE,OAAA;AAAA,IACX,WAAWA,EAAE,OAAA;AAAA,EAAO,CACrB,EACA,SAAA;AAAA,EACH,WAAWA,EAAE,OAAA;AAAA,EACb,WAAWA,EAAE,OAAA;AACf,CAAC;AAyBM,IAAKM,sBAAAA,OACVA,EAAA,OAAO,QACPA,EAAA,YAAY,aAFFA,IAAAA,KAAA,CAAA,CAAA,GAKAC,sBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,OAAO,QACPA,EAAA,QAAQ,SAHEA,IAAAA,KAAA,CAAA,CAAA;AAML,MAAMC,IAAgBR,EAAE,OAAO;AAAA,EACpC,IAAIA,EAAE,OAAA;AAAA,EACN,YAAYA,EAAE,WAAWM,CAAU;AAAA,EACnC,SAASN,EAAE,OAAA;AAAA,EACX,WAAWA,EAAE,OAAA;AAAA,EACb,aAAaA,EAAE,OAAA,EAAS,SAAA;AAAA,EACxB,aAAaA,EAAE,OAAA,EAAS,SAAA;AAC1B,CAAC,GAeYS,IAAS,CAACC,MACdA,EAAQ,eAAe,QAMnBC,IAAc,CAACD,MACnBA,EAAQ,eAAe,aCnFnBE,IAAY;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAmBMC,IAAuBb,EAAE,OAAO;AAAA,EACpC,OAAOA,EAAE,OAAA;AAAA,EACT,OAAOA,EAAE,OAAA;AAAA,EACT,KAAKA,EAAE,OAAA;AAAA,EACP,QAAQA,EAAE,OAAA;AAAA,EACV,SAASA,EAAE,OAAA;AAAA,EACX,OAAOA,EAAE,OAAA;AACX,CAAC,GAKYc,IAAkBd,EAAE,OAAO;AAAA,EACtC,IAAIA,EAAE,OAAA;AAAA,EACN,SAASA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC/B,MAAMA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC5B,WAAWA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EACjC,mBAAmBA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EACzC,OAAOA,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE,SAAA,EAAW,SAAA;AAAA,EAC/C,UAAUA,EACP,KAAK;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD,EACA,SAAA,EACA,SAAA;AAAA,EACH,MAAMA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC5B,QAAQA,EAAE,KAAK,CAAC,QAAQ,QAAQ,CAAC,EAAE,SAAA,EAAW,SAAA;AAAA,EAC9C,QAAQA,EAAE,KAAK,CAAC,SAAS,WAAW,CAAC;AAAA,EACrC,OAAOa,EAAqB,SAAA;AAAA,EAC5B,WAAWb,EAAE,OAAA;AAAA,EACb,WAAWA,EAAE,OAAA;AACf,CAAC,GC1DYe,IAA8Bf,EAAE,OAAO;AAAA,EAClD,IAAIA,EAAE,OAAA;AAAA,EACN,iBAAiBA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EACvC,eAAeA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EACrC,UAAUA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAChC,UAAUA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAChC,WAAWA,EAAE,OAAA;AAAA,EACb,WAAWA,EAAE,OAAA;AACf,CAAC,GCEYgB,IAAyBhB,EAAE,OAAO;AAAA,EAC7C,IAAIA,EAAE,OAAA;AAAA,EACN,aAAaA,EAAE,OAAA;AAAA,EACf,aAAaA,EAAE,OAAA,EAAS,SAAA;AAAA,EACxB,UAAUA,EAAE,OAAA;AAAA,EACZ,SAASA,EAAE,OAAA;AAAA,EACX,WAAWA,EAAE,OAAA;AAAA,EACb,WAAWA,EAAE,OAAA;AACf,CAAC,GAMYiB,IAAuBjB,EAAE,OAAO;AAAA,EAC3C,IAAIA,EAAE,OAAA;AAAA,EACN,SAASA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC/B,OAAOA,EAAE,OAAA;AAAA,EACT,cAAcA,EAAE,OAAA;AAAA,EAChB,UAAUA,EAAE,OAAA;AAAA,EACZ,WAAWA,EAAE,QAAA;AAAA,EACb,WAAWA,EAAE,OAAA;AAAA,EACb,WAAWA,EAAE,OAAA;AACf,CAAC,GC3BYkB,IAAqBlB,EAAE,OAAO;AAAA,EACzC,OAAOA,EAAE,OAAA;AACX,CAAC,GCnBYmB,IAAgC;AAAA,EAC3C,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,aAAa;AACf,GAMaC,IAAgC,OAAO;AAAA,EAClD,OAAO,QAAQD,CAA6B,EAAE,IAAI,CAAC,CAACE,GAAMC,CAAQ,MAAM;AAAA,IACtEA;AAAA,IACAD;AAAA,EAAA,CACD;AACH;"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { BaseCrudRepository } from '@aioia/core';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { Chatroom, Message } from '../schemas';
|
|
4
|
+
export interface MyChatroomLastMessage {
|
|
5
|
+
content: string;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
}
|
|
8
|
+
export interface MyChatroomItem {
|
|
9
|
+
id: string;
|
|
10
|
+
companionId: string;
|
|
11
|
+
lastMessage: MyChatroomLastMessage | null;
|
|
12
|
+
}
|
|
4
13
|
export interface GenerateResponse {
|
|
5
14
|
messageId: string;
|
|
6
15
|
content: string;
|
|
@@ -75,5 +84,18 @@ export declare class ChatroomRepository extends BaseCrudRepository<Chatroom> {
|
|
|
75
84
|
* POST /chatrooms/{id}/companions/{companionId}/response
|
|
76
85
|
*/
|
|
77
86
|
generateResponse(chatroomId: string, companionId: string, fetchOptions?: RequestInit): Promise<GenerateResponse>;
|
|
87
|
+
/**
|
|
88
|
+
* Generate initial AI response for an empty chatroom
|
|
89
|
+
* POST /chatrooms/{id}/companions/{companionId}/initial-response
|
|
90
|
+
*
|
|
91
|
+
* Only works for chatrooms with no messages.
|
|
92
|
+
* Returns 409 Conflict if the chatroom already has messages.
|
|
93
|
+
*/
|
|
94
|
+
generateInitialResponse(chatroomId: string, companionId: string, fetchOptions?: RequestInit): Promise<GenerateResponse>;
|
|
95
|
+
/**
|
|
96
|
+
* Get the current user's chatroom list
|
|
97
|
+
* GET /me/chatrooms
|
|
98
|
+
*/
|
|
99
|
+
getMyChatrooms(fetchOptions?: RequestInit): Promise<MyChatroomItem[]>;
|
|
78
100
|
}
|
|
79
101
|
//# sourceMappingURL=ChatroomRepository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatroomRepository.d.ts","sourceRoot":"","sources":["../../src/repositories/ChatroomRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,OAAO,EACb,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatroomRepository.d.ts","sourceRoot":"","sources":["../../src/repositories/ChatroomRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,OAAO,EACb,MAAM,YAAY,CAAC;AAgBpB,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC3C;AAUD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB,CAAC,QAAQ,CAAC;IAClE,QAAQ,CAAC,QAAQ,eAAe;IAEhC,SAAS,CAAC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIvB;;;OAGG;IACG,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAC7C,YAAY,CAAC,EAAE,WAAW,GACzB,OAAO,CAAC,OAAO,EAAE,CAAC;IAkBrB;;;;;;;;;OASG;IACG,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,WAAW,GACzB,OAAO,CAAC,OAAO,CAAC;IAenB;;;OAGG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,WAAW,GACzB,OAAO,CAAC,gBAAgB,CAAC;IAc5B;;;;;;OAMG;IACG,uBAAuB,CAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,WAAW,GACzB,OAAO,CAAC,gBAAgB,CAAC;IAc5B;;;OAGG;IACG,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAO5E"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* Maps companionId to chatroomId for persistence across sessions.
|
|
4
4
|
*/
|
|
5
5
|
export declare const LocalChatroomIdsRepository: {
|
|
6
|
+
/** Returns the full { companionId → chatroomId } map from localStorage. */
|
|
7
|
+
getAll(): Record<string, string>;
|
|
6
8
|
getChatroomId(companionId: string): string | null;
|
|
7
9
|
setChatroomId(companionId: string, chatroomId: string): void;
|
|
8
10
|
removeChatroomId(companionId: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalChatroomIdsRepository.d.ts","sourceRoot":"","sources":["../../src/repositories/LocalChatroomIdsRepository.ts"],"names":[],"mappings":"AAqCA;;;GAGG;AACH,eAAO,MAAM,0BAA0B;+
|
|
1
|
+
{"version":3,"file":"LocalChatroomIdsRepository.d.ts","sourceRoot":"","sources":["../../src/repositories/LocalChatroomIdsRepository.ts"],"names":[],"mappings":"AAqCA;;;GAGG;AACH,eAAO,MAAM,0BAA0B;IACrC,2EAA2E;cACjE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;+BAIL,MAAM,GAAG,MAAM,GAAG,IAAI;+BAKtB,MAAM,cAAc,MAAM,GAAG,IAAI;kCAM9B,MAAM,GAAG,IAAI;CAK5C,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { AIdolRepository } from './AIdolRepository';
|
|
2
2
|
export { ChatroomRepository } from './ChatroomRepository';
|
|
3
|
-
export type { GenerateResponse } from './ChatroomRepository';
|
|
3
|
+
export type { GenerateResponse, MyChatroomItem, MyChatroomLastMessage, } from './ChatroomRepository';
|
|
4
4
|
export { CompanionRelationshipRepository } from './CompanionRelationshipRepository';
|
|
5
5
|
export { CompanionRepository } from './CompanionRepository';
|
|
6
6
|
export { HighlightRepository } from './HighlightRepository';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatroom.d.ts","sourceRoot":"","sources":["../../src/schemas/chatroom.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAazB,CAAC;AAEH,MAAM,WAAW,QAAS,SAAQ,UAAU;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,SAAS,cAAc;CACxB;AAED,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;EAOxB,CAAC;AAEH,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,OAAO,KAAG,OAEzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,OAAO,KAAG,OAE9C,CAAC"}
|
|
1
|
+
{"version":3,"file":"chatroom.d.ts","sourceRoot":"","sources":["../../src/schemas/chatroom.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAazB,CAAC;AAEH,MAAM,WAAW,QAAS,SAAQ,UAAU;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,SAAS,cAAc;CACxB;AAED,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;EAOxB,CAAC;AAEH,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,OAAO,KAAG,OAEzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,OAAO,KAAG,OAE9C,CAAC"}
|