@01.software/sdk 0.1.0-dev.260109.7cf07c9 → 0.1.0-dev.260119.0a66443

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/core/collection/query-builder.ts","../src/core/collection/base.ts","../src/core/internal/utils/index.ts","../src/core/internal/errors/index.ts","../src/core/collection/collections-api.ts","../src/core/collection/const.ts","../src/core/query/get-query-client.ts","../src/core/query/UnifiedQuery.ts","../src/core/client/client.ts","../src/core/api/api-client.ts","../src/core/client/client.server.ts","../src/core/webhook/index.tsx","../src/utils/order/generateOrderNumber.ts","../src/utils/types.ts","../src/utils/order/formatOrderName.ts","../src/components/RichTextContent/index.tsx","../src/core/client/types.ts"],"sourcesContent":["// Types\nexport type * from './payload-types'\n\n// Core\nexport * from './core'\n\n// Utils\nexport * from './utils'\n\n// Components\nexport * from './components'\n\n// Type Utilities\nexport type {\n DeepPartial,\n ExtractArrayType,\n ApiSuccessResponse,\n ApiErrorResponse,\n DebugConfig,\n RetryConfig,\n ErrorLogger,\n} from './core/client/types'\n\nexport { isSuccessResponse, isErrorResponse } from './core/client/types'\n\n// Errors\nexport type { SDKError } from './core/internal/errors'\nexport {\n NetworkError,\n ValidationError,\n ApiError,\n ConfigError,\n TimeoutError,\n isSDKError,\n isNetworkError,\n isValidationError,\n isApiError,\n isConfigError,\n isTimeoutError,\n} from './core/internal/errors'\n","import type { ApiQueryOptions, ApiResponse, Collection } from '../client/types'\nimport type { CollectionsApi } from './collections-api'\nimport type { CollectionType } from './types'\n\nexport class CollectionQueryBuilder<T extends Collection> {\n constructor(\n private api: CollectionsApi,\n private collection: T,\n ) {}\n\n async find(options?: ApiQueryOptions): Promise<ApiResponse<CollectionType<T>[]>> {\n return this.api.requestGet<CollectionType<T>[]>(\n `/api/${String(this.collection)}`,\n options,\n ) as Promise<ApiResponse<CollectionType<T>[]>>\n }\n\n async findById(\n id: number | string,\n options?: ApiQueryOptions,\n ): Promise<ApiResponse<CollectionType<T>>> {\n return this.api.requestGet<CollectionType<T>>(\n `/api/${String(this.collection)}/${String(id)}`,\n options,\n ) as Promise<ApiResponse<CollectionType<T>>>\n }\n\n async create(data: Partial<CollectionType<T>>): Promise<ApiResponse<CollectionType<T>>> {\n return this.api.requestPost<CollectionType<T>>(\n `/api/${String(this.collection)}`,\n data,\n ) as Promise<ApiResponse<CollectionType<T>>>\n }\n\n async update(\n id: number | string,\n data: Partial<CollectionType<T>>,\n ): Promise<ApiResponse<CollectionType<T>>> {\n return this.api.requestPatch<CollectionType<T>>(\n `/api/${String(this.collection)}/${String(id)}`,\n data,\n ) as Promise<ApiResponse<CollectionType<T>>>\n }\n\n async remove(id: number | string): Promise<ApiResponse<void>> {\n return this.api.requestDelete<void>(\n `/api/${String(this.collection)}/${String(id)}`,\n )\n }\n}\n","import { stringify } from 'qs-esm'\nimport { _fetch, type FetchOptions } from '../internal/utils'\nimport type { ApiResponse, PaginationMeta, ApiQueryOptions } from '../client/types'\nimport { createApiError, createValidationError } from '../internal/errors'\n\nexport class BaseApiClient {\n protected clientKey: string\n protected secretKey?: string\n protected defaultOptions: FetchOptions\n\n constructor(clientKey: string, secretKey?: string) {\n if (!clientKey) {\n throw createValidationError('clientKey는 필수입니다.')\n }\n\n this.clientKey = clientKey\n this.secretKey = secretKey\n this.defaultOptions = { clientKey, secretKey }\n }\n\n protected async get<T = unknown>(\n endpoint: string,\n options?: ApiQueryOptions,\n ): Promise<ApiResponse<T>> {\n const url = this.buildUrl(endpoint, options)\n const response = await _fetch(url, { ...this.defaultOptions, method: 'GET' })\n return this.parseResponse<T>(response)\n }\n\n protected async post<T = unknown>(\n endpoint: string,\n data?: unknown,\n options?: FetchOptions,\n ): Promise<ApiResponse<T>> {\n const response = await _fetch(endpoint, {\n ...this.defaultOptions,\n ...options,\n method: 'POST',\n body: data ? JSON.stringify(data) : undefined,\n })\n return this.parseResponse<T>(response)\n }\n\n protected async patch<T = unknown>(\n endpoint: string,\n data?: unknown,\n options?: FetchOptions,\n ): Promise<ApiResponse<T>> {\n const response = await _fetch(endpoint, {\n ...this.defaultOptions,\n ...options,\n method: 'PATCH',\n body: data ? JSON.stringify(data) : undefined,\n })\n return this.parseResponse<T>(response)\n }\n\n protected async delete<T = unknown>(\n endpoint: string,\n options?: FetchOptions,\n ): Promise<ApiResponse<T>> {\n const response = await _fetch(endpoint, {\n ...this.defaultOptions,\n ...options,\n method: 'DELETE',\n })\n return this.parseResponse<T>(response)\n }\n\n protected buildUrl(endpoint: string, options?: ApiQueryOptions): string {\n if (!options) return endpoint\n const queryString = stringify(options, { addQueryPrefix: true })\n return queryString ? `${endpoint}${queryString}` : endpoint\n }\n\n protected async parseResponse<T>(response: Response): Promise<ApiResponse<T>> {\n const contentType = response.headers.get('content-type')\n\n try {\n if (contentType?.includes('application/json')) {\n const jsonData = await response.json()\n\n if (jsonData.docs !== undefined) {\n const pagination: PaginationMeta = {\n page: jsonData.page || 1,\n limit: jsonData.limit || 20,\n totalDocs: jsonData.totalDocs || 0,\n totalPages: jsonData.totalPages || 0,\n hasNextPage: jsonData.hasNextPage || false,\n hasPrevPage: jsonData.hasPrevPage || false,\n }\n return { data: jsonData.docs, success: true, pagination }\n }\n\n return { data: jsonData, success: true }\n }\n\n const textData = await response.text()\n return { data: textData as T, success: true }\n } catch (error) {\n throw createApiError('응답 파싱에 실패했습니다.', response.status, {\n contentType,\n error: error instanceof Error ? error.message : error,\n })\n }\n }\n}\n","import { SignJWT } from 'jose'\nimport { createNetworkError, TimeoutError, NetworkError } from '../errors'\nimport type { DebugConfig, RetryConfig } from '../../client/types'\n\nconst API_URL = process.env.SOFTWARE_API_URL || 'https://stg.01.software'\n\nconst DEFAULT_TIMEOUT = 30000\nconst DEFAULT_RETRYABLE_STATUSES = [408, 429, 500, 502, 503, 504]\n\nexport interface FetchOptions extends RequestInit {\n clientKey?: string\n secretKey?: string\n timeout?: number\n baseUrl?: string\n debug?: boolean | DebugConfig\n retry?: RetryConfig\n}\n\nexport async function createServerToken(\n clientKey: string,\n secretKey: string,\n): Promise<string> {\n if (!clientKey || !secretKey) {\n throw new Error('clientKey와 secretKey는 필수입니다.')\n }\n\n const secret = new TextEncoder().encode(secretKey)\n return new SignJWT({ clientKey })\n .setProtectedHeader({ alg: 'HS256' })\n .setIssuedAt()\n .setExpirationTime('1h')\n .sign(secret)\n}\n\nfunction debugLog(\n debug: boolean | DebugConfig | undefined,\n type: 'request' | 'response' | 'error',\n message: string,\n data?: unknown,\n) {\n if (!debug) return\n\n const shouldLog =\n debug === true ||\n (type === 'request' && (debug as DebugConfig).logRequests) ||\n (type === 'response' && (debug as DebugConfig).logResponses) ||\n (type === 'error' && (debug as DebugConfig).logErrors)\n\n if (shouldLog) {\n console.group(`[SDK ${type.toUpperCase()}] ${message}`)\n if (data) console.log(data)\n console.groupEnd()\n }\n}\n\nfunction getErrorSuggestion(status: number): string | undefined {\n if (status === 401) return '인증 정보를 확인해주세요.'\n if (status === 404) return '요청한 리소스를 찾을 수 없습니다.'\n if (status >= 500)\n return '서버 오류가 발생했습니다. 잠시 후 다시 시도해주세요.'\n return undefined\n}\n\nasync function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport async function _fetch(\n url: string,\n options?: FetchOptions,\n): Promise<Response> {\n const {\n clientKey,\n secretKey,\n timeout = DEFAULT_TIMEOUT,\n baseUrl = API_URL,\n debug,\n retry,\n ...requestInit\n } = options || {}\n\n const retryConfig = {\n maxRetries: retry?.maxRetries ?? 3,\n retryableStatuses: retry?.retryableStatuses ?? DEFAULT_RETRYABLE_STATUSES,\n retryDelay:\n retry?.retryDelay ??\n ((attempt: number) => Math.min(1000 * 2 ** attempt, 10000)),\n }\n\n let lastError: Error | undefined\n\n for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {\n try {\n const headers = new Headers(requestInit.headers)\n\n if (clientKey) {\n headers.set('X-Client-Key', clientKey)\n }\n\n if (secretKey && clientKey) {\n const token = await createServerToken(clientKey, secretKey)\n headers.set('Authorization', `Bearer ${token}`)\n }\n\n if (!headers.has('Content-Type') && requestInit.body) {\n headers.set('Content-Type', 'application/json')\n }\n\n debugLog(debug, 'request', url, {\n method: requestInit.method || 'GET',\n headers: Object.fromEntries(headers.entries()),\n attempt: attempt + 1,\n })\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeout)\n\n const response = await fetch(`${baseUrl}${url}`, {\n ...requestInit,\n headers,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n debugLog(debug, 'response', url, {\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n })\n\n if (!response.ok) {\n const error = createNetworkError(\n `HTTP ${response.status}: ${response.statusText}`,\n response.status,\n { url, method: requestInit.method || 'GET', attempt: attempt + 1 },\n `요청이 실패했습니다 (상태 코드: ${response.status})`,\n getErrorSuggestion(response.status),\n )\n\n if (\n attempt < retryConfig.maxRetries &&\n retryConfig.retryableStatuses.includes(response.status)\n ) {\n lastError = error\n const retryDelay = retryConfig.retryDelay(attempt)\n debugLog(debug, 'error', `재시도 대기 중... (${retryDelay}ms)`, error)\n await delay(retryDelay)\n continue\n }\n\n throw error\n }\n\n return response\n } catch (error) {\n debugLog(debug, 'error', url, error)\n\n if (error instanceof Error && error.name === 'AbortError') {\n const timeoutError = new TimeoutError(\n `요청이 ${timeout}ms 후 타임아웃되었습니다.`,\n { url, timeout, attempt: attempt + 1 },\n '요청 시간이 초과되었습니다.',\n '네트워크 연결을 확인하거나 잠시 후 다시 시도해주세요.',\n )\n\n if (attempt < retryConfig.maxRetries) {\n lastError = timeoutError\n await delay(retryConfig.retryDelay(attempt))\n continue\n }\n\n throw timeoutError\n }\n\n if (error instanceof TypeError) {\n const networkError = createNetworkError(\n '네트워크 연결에 실패했습니다.',\n undefined,\n { url, originalError: error.message, attempt: attempt + 1 },\n '네트워크 연결에 실패했습니다.',\n '인터넷 연결을 확인하고 다시 시도해주세요.',\n )\n\n if (attempt < retryConfig.maxRetries) {\n lastError = networkError\n await delay(retryConfig.retryDelay(attempt))\n continue\n }\n\n throw networkError\n }\n\n if (error instanceof NetworkError || error instanceof TimeoutError) {\n if (\n attempt < retryConfig.maxRetries &&\n error.status &&\n retryConfig.retryableStatuses.includes(error.status)\n ) {\n lastError = error\n await delay(retryConfig.retryDelay(attempt))\n continue\n }\n\n throw error\n }\n\n const unknownError = createNetworkError(\n error instanceof Error\n ? error.message\n : '알 수 없는 네트워크 에러가 발생했습니다.',\n undefined,\n { url, originalError: error, attempt: attempt + 1 },\n '알 수 없는 오류가 발생했습니다.',\n '잠시 후 다시 시도해주세요.',\n )\n\n if (attempt < retryConfig.maxRetries) {\n lastError = unknownError\n await delay(retryConfig.retryDelay(attempt))\n continue\n }\n\n throw unknownError\n }\n }\n\n throw lastError!\n}\n","// ============================================================================\n// Error Classes\n// ============================================================================\n\nexport class SDKError extends Error {\n readonly code: string\n readonly status?: number\n readonly details?: unknown\n readonly userMessage?: string\n readonly suggestion?: string\n\n constructor(\n code: string,\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super(message)\n this.name = 'SDKError'\n this.code = code\n this.status = status\n this.details = details\n this.userMessage = userMessage\n this.suggestion = suggestion\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, SDKError)\n }\n }\n\n getUserMessage(): string {\n return this.userMessage || this.message\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n status: this.status,\n details: this.details,\n userMessage: this.userMessage,\n suggestion: this.suggestion,\n }\n }\n}\n\nexport class NetworkError extends SDKError {\n constructor(\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('NETWORK_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'NetworkError'\n }\n}\n\nexport class ValidationError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('VALIDATION_ERROR', message, 400, details, userMessage, suggestion)\n this.name = 'ValidationError'\n }\n}\n\nexport class ApiError extends SDKError {\n constructor(\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('API_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'ApiError'\n }\n}\n\nexport class ConfigError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('CONFIG_ERROR', message, undefined, details, userMessage, suggestion)\n this.name = 'ConfigError'\n }\n}\n\nexport class TimeoutError extends SDKError {\n constructor(\n message = '요청이 시간 초과되었습니다.',\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('TIMEOUT_ERROR', message, 408, details, userMessage, suggestion)\n this.name = 'TimeoutError'\n }\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isSDKError(error: unknown): error is SDKError {\n return error instanceof SDKError\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n return error instanceof ValidationError\n}\n\nexport function isApiError(error: unknown): error is ApiError {\n return error instanceof ApiError\n}\n\nexport function isConfigError(error: unknown): error is ConfigError {\n return error instanceof ConfigError\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\nexport const createNetworkError = (\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new NetworkError(message, status, details, userMessage, suggestion)\n\nexport const createValidationError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new ValidationError(message, details, userMessage, suggestion)\n\nexport const createApiError = (\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new ApiError(message, status, details, userMessage, suggestion)\n\nexport const createConfigError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new ConfigError(message, details, userMessage, suggestion)\n\nexport const createTimeoutError = (\n message?: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new TimeoutError(message, details, userMessage, suggestion)\n","import { BaseApiClient } from './base'\nimport type { ApiQueryOptions, ApiResponse, Collection } from '../client/types'\nimport { CollectionQueryBuilder } from './query-builder'\n\nexport class CollectionsApi extends BaseApiClient {\n constructor(clientKey: string, secretKey?: string) {\n super(clientKey, secretKey)\n }\n\n from<T extends Collection>(collection: T): CollectionQueryBuilder<T> {\n return new CollectionQueryBuilder(this, collection)\n }\n\n requestGet<T = unknown>(\n endpoint: string,\n options?: ApiQueryOptions,\n ): Promise<ApiResponse<T>> {\n return this.get<T>(endpoint, options)\n }\n\n requestPost<T = unknown>(\n endpoint: string,\n data?: unknown,\n ): Promise<ApiResponse<T>> {\n return this.post<T>(endpoint, data)\n }\n\n requestPatch<T = unknown>(\n endpoint: string,\n data?: unknown,\n ): Promise<ApiResponse<T>> {\n return this.patch<T>(endpoint, data)\n }\n\n requestDelete<T = unknown>(endpoint: string): Promise<ApiResponse<T>> {\n return this.delete<T>(endpoint)\n }\n}\n","export const COLLECTIONS = [\n 'tenants',\n 'products',\n 'product-variants',\n 'product-options',\n 'product-categories',\n 'product-tags',\n 'product-images',\n 'orders',\n 'order-products',\n 'returns',\n 'return-products',\n 'transactions',\n 'links',\n 'link-images',\n 'playlists',\n 'playlist-images',\n 'musics',\n 'posts',\n 'post-categories',\n 'post-tags',\n 'post-images',\n 'documents',\n 'document-images',\n 'entities',\n 'entity-categories',\n 'entity-tags',\n 'entity-images',\n 'nodes',\n 'galleries',\n 'gallery-images',\n 'forms',\n] as const\n","import { isServer, QueryClient, defaultShouldDehydrateQuery } from '@tanstack/react-query'\n\nfunction makeQueryClient() {\n return new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: Number.POSITIVE_INFINITY,\n refetchOnWindowFocus: false,\n },\n dehydrate: {\n shouldDehydrateQuery: (query) =>\n defaultShouldDehydrateQuery(query) || query.state.status === 'pending',\n shouldRedactErrors: () => false,\n },\n },\n })\n}\n\nlet browserQueryClient: QueryClient | undefined\n\nexport function getQueryClient() {\n if (isServer) {\n return makeQueryClient()\n }\n if (!browserQueryClient) {\n browserQueryClient = makeQueryClient()\n }\n return browserQueryClient\n}\n","import {\n QueryClient,\n useQuery,\n useInfiniteQuery,\n keepPreviousData,\n} from '@tanstack/react-query'\nimport type { Collection, ApiQueryOptions, ApiQueryReactOptions } from '../client/types'\nimport { CollectionsApi, type CollectionType } from '../collection'\n\nexport interface UnifiedQueryOptions {\n brandKey?: string\n brandSecret?: string\n baseUrl?: string\n}\n\nconst DEFAULT_PAGE_SIZE = 20\n\nexport class UnifiedQueryClient {\n private queryClient: QueryClient\n private collectionsApi: CollectionsApi\n\n constructor(queryClient: QueryClient, options?: UnifiedQueryOptions) {\n this.queryClient = queryClient\n this.collectionsApi = new CollectionsApi(\n options?.brandKey || '',\n options?.brandSecret,\n )\n }\n\n // ===== Query Hooks =====\n\n useCollection<T extends Collection>(\n collection: T,\n queryOptions?: ApiQueryOptions,\n reactQueryOptions?: ApiQueryReactOptions,\n ) {\n return useQuery({\n queryKey: [collection, 'list', queryOptions],\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).find(queryOptions)\n return response.data\n },\n placeholderData: reactQueryOptions?.keepPreviousData ? keepPreviousData : undefined,\n })\n }\n\n useCollectionSingle<T extends Collection>(\n collection: T,\n queryOptions?: Omit<ApiQueryOptions, 'limit'>,\n reactQueryOptions?: ApiQueryReactOptions,\n ) {\n return useQuery({\n queryKey: [collection, 'detail', queryOptions],\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).find(queryOptions)\n return response.data?.[0] ?? null\n },\n placeholderData: reactQueryOptions?.keepPreviousData ? keepPreviousData : undefined,\n })\n }\n\n useCollectionInfinite<T extends Collection>(\n collection: T,\n queryOptions?: Omit<ApiQueryOptions, 'page'>,\n reactQueryOptions?: ApiQueryReactOptions,\n ) {\n const pageSize = queryOptions?.limit || DEFAULT_PAGE_SIZE\n\n return useInfiniteQuery({\n queryKey: [collection, 'list', 'infinite', queryOptions],\n queryFn: async ({ pageParam = 1 }) => {\n const response = await this.collectionsApi\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response.data ?? []\n },\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: CollectionType<T>[],\n _pages: CollectionType<T>[][],\n lastPageParams: number,\n ) => {\n if (!Array.isArray(lastPage) || lastPage.length < pageSize) return null\n return lastPageParams + 1\n },\n select: (data) => data.pages.flatMap((page) => page),\n placeholderData: reactQueryOptions?.keepPreviousData ? keepPreviousData : undefined,\n })\n }\n\n useById<T extends Collection>(\n collection: T,\n id: string | number,\n queryOptions?: ApiQueryOptions,\n reactQueryOptions?: ApiQueryReactOptions,\n ) {\n return useQuery({\n queryKey: [collection, 'detail', id],\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).findById(id, queryOptions)\n return response.data ?? null\n },\n placeholderData: reactQueryOptions?.keepPreviousData ? keepPreviousData : undefined,\n })\n }\n\n // ===== Prefetch Methods =====\n\n async prefetchCollection<T extends Collection>(\n collection: T,\n queryOptions?: ApiQueryOptions,\n ) {\n return this.queryClient.prefetchQuery({\n queryKey: [collection, 'list', queryOptions],\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).find(queryOptions)\n return response.data\n },\n })\n }\n\n async prefetchCollectionSingle<T extends Collection>(\n collection: T,\n queryOptions?: Omit<ApiQueryOptions, 'limit'>,\n ) {\n return this.queryClient.prefetchQuery({\n queryKey: [collection, 'detail', queryOptions],\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).find(queryOptions)\n return response.data?.[0] ?? null\n },\n })\n }\n\n async prefetchCollectionInfinite<T extends Collection>(\n collection: T,\n queryOptions?: Omit<ApiQueryOptions, 'page'>,\n ) {\n const pageSize = queryOptions?.limit || DEFAULT_PAGE_SIZE\n\n return this.queryClient.prefetchInfiniteQuery({\n queryKey: [collection, 'list', 'infinite', queryOptions],\n queryFn: async ({ pageParam = 1 }) => {\n const response = await this.collectionsApi\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response.data ?? []\n },\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: CollectionType<T>[],\n _allPages: CollectionType<T>[][],\n lastPageParams: number,\n ) => {\n if (!Array.isArray(lastPage) || lastPage.length < pageSize) return null\n return lastPageParams + 1\n },\n pages: 2,\n })\n }\n\n async prefetchById<T extends Collection>(\n collection: T,\n id: string | number,\n queryOptions?: ApiQueryOptions,\n ) {\n return this.queryClient.prefetchQuery({\n queryKey: [collection, 'detail', id],\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).findById(id, queryOptions)\n return response.data ?? null\n },\n })\n }\n\n // ===== Cache Methods =====\n\n invalidateQueries(collection: Collection, operation?: string) {\n const queryKey = operation ? [collection, operation] : [collection]\n return this.queryClient.invalidateQueries({ queryKey })\n }\n\n getQueryData<T>(\n collection: Collection,\n operation: string,\n ...params: (string | number)[]\n ): T | undefined {\n const queryKey = [collection, operation, ...params.filter((p) => p !== undefined)]\n return this.queryClient.getQueryData<T>(queryKey)\n }\n\n setQueryData<T>(\n collection: Collection,\n operation: string,\n data: T,\n ...params: (string | number)[]\n ) {\n const queryKey = [collection, operation, ...params.filter((p) => p !== undefined)]\n return this.queryClient.setQueryData<T>(queryKey, data)\n }\n}\n","import type { QueryClient } from '@tanstack/react-query'\nimport type { Config } from '../../payload-types'\nimport { CollectionsApi, CollectionQueryBuilder } from '../collection'\nimport { getQueryClient } from '../query/get-query-client'\nimport { UnifiedQueryClient } from '../query/UnifiedQuery'\nimport type {\n ClientBrowserConfig,\n ClientState,\n ClientMetadata,\n Collection,\n} from './types'\n\nexport default class BrowserClient<_Database = Config> {\n query: UnifiedQueryClient\n collections: CollectionsApi\n queryClient: QueryClient\n\n protected state: ClientState\n protected config: ClientBrowserConfig\n\n constructor(options: ClientBrowserConfig) {\n if (!options.clientKey) {\n throw new Error('clientKey is required.')\n }\n\n this.config = { ...options }\n\n const metadata: ClientMetadata = {\n timestamp: Date.now(),\n userAgent:\n typeof window !== 'undefined' ? window.navigator?.userAgent : 'Node.js',\n }\n\n this.state = { metadata }\n this.queryClient = getQueryClient()\n\n this.query = new UnifiedQueryClient(this.queryClient, {\n brandKey: this.config.clientKey,\n })\n\n this.collections = new CollectionsApi(this.config.clientKey)\n }\n\n from<T extends Collection>(collection: T): CollectionQueryBuilder<T> {\n return this.collections.from(collection)\n }\n\n getState(): ClientState {\n return { ...this.state }\n }\n}\n\nexport function createBrowserClient(options: ClientBrowserConfig): BrowserClient {\n return new BrowserClient(options)\n}\n","import type { Order, OrderProduct, Transaction } from '../../payload-types'\nimport { _fetch } from '../internal/utils'\nimport { createApiError } from '../internal/errors'\n\nexport interface ApiClientOptions {\n clientKey: string\n secretKey: string\n baseUrl?: string\n}\n\nexport type CreateOrderParams = {\n paymentId: string\n orderNumber: string\n email: string\n shippingAddress: Order['shippingAddress']\n orderProducts: Omit<\n OrderProduct,\n 'id' | 'brand' | 'createdAt' | 'updatedAt' | 'order' | 'status'\n >[]\n totalAmount: number\n}\n\nexport type UpdateOrderParams = {\n orderNumber: string\n status: Order['status']\n}\n\nexport type UpdateTransactionParams = {\n paymentId: string\n status: Transaction['status']\n paymentMethod: Transaction['paymentMethod']\n receiptUrl: Transaction['receiptUrl']\n}\n\nexport class ApiClient {\n private readonly clientKey: string\n private readonly secretKey: string\n private readonly baseUrl?: string\n\n constructor(options: ApiClientOptions) {\n if (!options.clientKey) {\n throw new Error('clientKey is required.')\n }\n if (!options.secretKey) {\n throw new Error('secretKey is required.')\n }\n\n this.clientKey = options.clientKey\n this.secretKey = options.secretKey\n this.baseUrl = options.baseUrl\n }\n\n private async request<T>(endpoint: string, body: unknown): Promise<T> {\n const response = await _fetch(endpoint, {\n method: 'POST',\n clientKey: this.clientKey,\n secretKey: this.secretKey,\n baseUrl: this.baseUrl,\n body: JSON.stringify(body),\n })\n\n const data = await response.json()\n\n if (data.error) {\n throw createApiError(\n data.error,\n response.status,\n data,\n data.error,\n '요청 처리 중 오류가 발생했습니다.',\n )\n }\n\n return data as T\n }\n\n createOrder(params: CreateOrderParams): Promise<Order> {\n return this.request<Order>('/api/orders/create', params)\n }\n\n updateOrder(params: UpdateOrderParams): Promise<Order> {\n return this.request<Order>('/api/orders/update', params)\n }\n\n updateTransaction(params: UpdateTransactionParams): Promise<Transaction> {\n return this.request<Transaction>('/api/transactions/update', params)\n }\n}\n","import type { Config } from '../../payload-types'\nimport { ApiClient } from '../api'\nimport { CollectionsApi, CollectionQueryBuilder } from '../collection'\nimport type {\n ClientServerConfig,\n ClientState,\n ClientMetadata,\n Collection,\n ClientBrowserConfig,\n} from './types'\n\nexport default class ServerClient<_Database = Config> {\n api: ApiClient\n collections: CollectionsApi\n\n protected state: ClientState\n protected config: ClientServerConfig\n\n constructor(options: ClientServerConfig) {\n if (!options.clientKey) {\n throw new Error('clientKey is required.')\n }\n if (!options.secretKey) {\n throw new Error('secretKey is required.')\n }\n\n this.config = { ...options }\n\n const metadata: ClientMetadata = {\n timestamp: Date.now(),\n userAgent:\n typeof window !== 'undefined' ? window.navigator?.userAgent : 'Node.js',\n }\n\n this.state = { metadata }\n\n this.api = new ApiClient({\n clientKey: this.config.clientKey,\n secretKey: this.config.secretKey,\n })\n\n this.collections = new CollectionsApi(\n this.config.clientKey,\n this.config.secretKey,\n )\n }\n\n from<T extends Collection>(collection: T): CollectionQueryBuilder<T> {\n return this.collections.from(collection)\n }\n\n getState(): ClientState {\n return { ...this.state }\n }\n\n getConfig(): ClientBrowserConfig {\n const { secretKey: _, ...safeConfig } = this.config\n return safeConfig\n }\n}\n\nexport function createServerClient(options: ClientServerConfig): ServerClient {\n return new ServerClient(options)\n}\n","import type { Collection } from '../client/types'\nimport type { CollectionType } from '../collection/types'\n\nexport type WebhookOperation = 'create' | 'update'\n\nexport interface WebhookEvent<T extends Collection = Collection> {\n collection: T\n operation: WebhookOperation\n data: CollectionType<T>\n}\n\nexport type WebhookHandler<T extends Collection = Collection> = (\n event: WebhookEvent<T>,\n) => Promise<void> | void\n\nexport function isValidWebhookEvent(data: unknown): data is WebhookEvent {\n if (typeof data !== 'object' || data === null) return false\n const obj = data as Record<string, unknown>\n return (\n typeof obj.collection === 'string' &&\n (obj.operation === 'create' || obj.operation === 'update') &&\n typeof obj.data === 'object' &&\n obj.data !== null\n )\n}\n\nexport async function handleWebhook<T extends Collection = Collection>(\n request: Request,\n handler: WebhookHandler<T>,\n): Promise<Response> {\n try {\n const body = await request.json()\n\n if (!isValidWebhookEvent(body)) {\n return new Response(\n JSON.stringify({ error: 'Invalid webhook event format' }),\n { status: 400, headers: { 'Content-Type': 'application/json' } },\n )\n }\n\n await handler(body as WebhookEvent<T>)\n\n return new Response(\n JSON.stringify({ success: true, message: 'Webhook processed' }),\n { status: 200, headers: { 'Content-Type': 'application/json' } },\n )\n } catch (error) {\n console.error('Webhook processing error:', error)\n\n return new Response(\n JSON.stringify({\n error: 'Internal server error',\n message: error instanceof Error ? error.message : 'Unknown error',\n }),\n { status: 500, headers: { 'Content-Type': 'application/json' } },\n )\n }\n}\n\nexport function createTypedWebhookHandler<T extends Collection>(\n collection: T,\n handler: (event: WebhookEvent<T>) => Promise<void> | void,\n): WebhookHandler<T> {\n return async (event: WebhookEvent<T>) => {\n if (event.collection !== collection) {\n throw new Error(`Expected collection \"${collection}\", got \"${event.collection}\"`)\n }\n return handler(event)\n }\n}\n","export const generateOrderNumber = () => {\n // YYMMDDRRRRRR\n const year = new Date().getFullYear().toString().slice(-2)\n const month = new Date().getMonth().toString().padStart(2, '0')\n const day = new Date().getDate().toString().padStart(2, '0')\n const random = Math.floor(Math.random() * 1000000)\n .toString()\n .padStart(6, '0')\n\n return `${year}${month}${day}${random}`\n}\n","export const objectFor = <T>(data: T | number | null | undefined) => {\n if (typeof data === 'number') {\n return null\n }\n\n return data\n}\n","import { ProductOption } from '../../payload-types'\nimport { objectFor } from '../types'\n\nexport const formatOrderName = (options: ProductOption[]) => {\n const optionLength = options.length\n\n return optionLength === 1\n ? objectFor(options?.[0]?.product)?.title || ''\n : `${objectFor(options.at(0)?.product)?.title} 외 ${optionLength - 1}건`\n}\n","'use client'\n\nimport React from 'react'\nimport {\n SerializedBlockNode,\n SerializedLinkNode,\n} from '@payloadcms/richtext-lexical'\nimport {\n SerializedEditorState,\n SerializedLexicalNode,\n} from '@payloadcms/richtext-lexical/lexical'\nimport {\n defaultJSXConverters,\n JSXConverter,\n LinkJSXConverter,\n RichText,\n} from '@payloadcms/richtext-lexical/react'\n\nexport type RichTextData = SerializedEditorState<SerializedLexicalNode>\n\nexport interface RichTextContentProps {\n data: RichTextData\n className?: string\n internalDocToHref?: (args: { linkNode: SerializedLinkNode }) => string\n blocks?: {\n Iframe?: JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n url: string\n }>\n >\n Player?: JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n url: string\n }>\n >\n }\n}\n\nexport function RichTextContent({\n data,\n className,\n internalDocToHref,\n blocks,\n}: RichTextContentProps) {\n return (\n <RichText\n data={data}\n className={className}\n converters={{\n ...defaultJSXConverters,\n ...LinkJSXConverter({\n internalDocToHref,\n }),\n blocks: blocks\n ? (blocks as Record<\n string,\n JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n }>\n >\n >)\n : undefined,\n }}\n />\n )\n}\n","import type { Sort, Where } from 'payload'\nimport type { Config } from '../../payload-types'\nimport type { SDKError } from '../internal/errors'\n\n// ============================================================================\n// Client Configuration\n// ============================================================================\n\nexport interface ClientBrowserConfig {\n clientKey: string\n}\n\nexport interface ClientServerConfig extends ClientBrowserConfig {\n secretKey: string\n}\n\nexport interface ClientMetadata {\n userAgent?: string\n timestamp: number\n}\n\nexport interface ClientState {\n metadata: ClientMetadata\n}\n\n// ============================================================================\n// API Response Types\n// ============================================================================\n\nexport interface PaginationMeta {\n page: number\n limit: number\n totalDocs: number\n totalPages: number\n hasNextPage: boolean\n hasPrevPage: boolean\n}\n\nexport interface ApiSuccessResponse<T = unknown> {\n data: T\n success: true\n message?: string\n pagination?: PaginationMeta\n}\n\nexport interface ApiErrorResponse {\n data: null\n success: false\n error: {\n code: string\n message: string\n details?: unknown\n }\n}\n\nexport type ApiResponse<T = unknown> = ApiSuccessResponse<T> | ApiErrorResponse\n\n// ============================================================================\n// Query Options\n// ============================================================================\n\nexport interface ApiQueryOptions {\n page?: number\n limit?: number\n sort?: Sort\n where?: Where\n}\n\nexport interface ApiQueryReactOptions {\n keepPreviousData?: boolean\n}\n\n// ============================================================================\n// Debug & Retry Configuration\n// ============================================================================\n\nexport interface DebugConfig {\n logRequests?: boolean\n logResponses?: boolean\n logErrors?: boolean\n}\n\nexport interface RetryConfig {\n maxRetries?: number\n retryableStatuses?: number[]\n retryDelay?: (attempt: number) => number\n}\n\nexport interface ErrorLogger {\n log(error: SDKError | Error, context?: Record<string, unknown>): void\n}\n\n// ============================================================================\n// Collection Types\n// ============================================================================\n\nexport type Collection = keyof Config['collections']\n\n// ============================================================================\n// Type Utilities\n// ============================================================================\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]\n}\n\nexport type ExtractArrayType<T> = T extends (infer U)[] ? U : never\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isSuccessResponse<T>(\n response: ApiResponse<T>,\n): response is ApiSuccessResponse<T> {\n return response.success === true\n}\n\nexport function isErrorResponse(\n response: ApiResponse<unknown>,\n): response is ApiErrorResponse {\n return response.success === false\n}\n"],"mappings":"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","names":["import_react_query","import_react","React"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/core/collection/query-builder.ts","../src/core/collection/base.ts","../src/core/internal/utils/index.ts","../src/core/internal/errors/index.ts","../src/core/client/types.ts","../src/core/collection/collections-api.ts","../src/core/collection/const.ts","../src/core/query/get-query-client.ts","../src/core/query/UnifiedQuery.ts","../src/core/client/client.ts","../src/core/api/api-client.ts","../src/core/client/client.server.ts","../src/core/webhook/index.tsx","../src/utils/order/generateOrderNumber.ts","../src/utils/types.ts","../src/utils/order/formatOrderName.ts","../src/components/RichTextContent/index.tsx"],"sourcesContent":["// Types\nexport type * from './payload-types'\n\n// Core\nexport * from './core'\n\n// Utils\nexport * from './utils'\n\n// Components\nexport * from './components'\n\n// Type Utilities\nexport type {\n DeepPartial,\n ExtractArrayType,\n ApiSuccessResponse,\n ApiErrorResponse,\n DebugConfig,\n RetryConfig,\n ErrorLogger,\n} from './core/client/types'\n\nexport { isSuccessResponse, isErrorResponse } from './core/client/types'\n\n// Errors\nexport type { SDKError } from './core/internal/errors'\nexport {\n NetworkError,\n ValidationError,\n ApiError,\n ConfigError,\n TimeoutError,\n isSDKError,\n isNetworkError,\n isValidationError,\n isApiError,\n isConfigError,\n isTimeoutError,\n} from './core/internal/errors'\n\n// JWT Utilities\nexport type { JwtPayload } from './core/internal/utils'\nexport {\n createServerToken,\n verifyServerToken,\n decodeServerToken,\n} from './core/internal/utils'\n\n// API Key Utilities\nexport { createApiKey, parseApiKey } from './core/internal/utils'\n","import type { ApiQueryOptions, ApiResponse, Collection } from '../client/types'\nimport type { CollectionsApi } from './collections-api'\nimport type { CollectionType } from './types'\n\nexport class CollectionQueryBuilder<T extends Collection> {\n constructor(\n private api: CollectionsApi,\n private collection: T,\n ) {}\n\n async find(options?: ApiQueryOptions): Promise<ApiResponse<CollectionType<T>[]>> {\n return this.api.requestGet<CollectionType<T>[]>(\n `/api/${String(this.collection)}`,\n options,\n ) as Promise<ApiResponse<CollectionType<T>[]>>\n }\n\n async findById(\n id: number | string,\n options?: ApiQueryOptions,\n ): Promise<ApiResponse<CollectionType<T>>> {\n return this.api.requestGet<CollectionType<T>>(\n `/api/${String(this.collection)}/${String(id)}`,\n options,\n ) as Promise<ApiResponse<CollectionType<T>>>\n }\n\n async create(data: Partial<CollectionType<T>>): Promise<ApiResponse<CollectionType<T>>> {\n return this.api.requestPost<CollectionType<T>>(\n `/api/${String(this.collection)}`,\n data,\n ) as Promise<ApiResponse<CollectionType<T>>>\n }\n\n async update(\n id: number | string,\n data: Partial<CollectionType<T>>,\n ): Promise<ApiResponse<CollectionType<T>>> {\n return this.api.requestPatch<CollectionType<T>>(\n `/api/${String(this.collection)}/${String(id)}`,\n data,\n ) as Promise<ApiResponse<CollectionType<T>>>\n }\n\n async remove(id: number | string): Promise<ApiResponse<void>> {\n return this.api.requestDelete<void>(\n `/api/${String(this.collection)}/${String(id)}`,\n )\n }\n}\n","import { stringify } from 'qs-esm'\nimport { _fetch, type FetchOptions } from '../internal/utils'\nimport type { ApiResponse, PaginationMeta, ApiQueryOptions } from '../client/types'\nimport { createApiError, createValidationError } from '../internal/errors'\n\nexport class BaseApiClient {\n protected clientKey: string\n protected secretKey?: string\n protected baseUrl?: string\n protected defaultOptions: FetchOptions\n\n constructor(clientKey: string, secretKey?: string, baseUrl?: string) {\n if (!clientKey) {\n throw createValidationError('clientKey는 필수입니다.')\n }\n\n this.clientKey = clientKey\n this.secretKey = secretKey\n this.baseUrl = baseUrl\n this.defaultOptions = { clientKey, secretKey, baseUrl }\n }\n\n protected async get<T = unknown>(\n endpoint: string,\n options?: ApiQueryOptions,\n ): Promise<ApiResponse<T>> {\n const url = this.buildUrl(endpoint, options)\n const response = await _fetch(url, { ...this.defaultOptions, method: 'GET' })\n return this.parseResponse<T>(response)\n }\n\n protected async post<T = unknown>(\n endpoint: string,\n data?: unknown,\n options?: FetchOptions,\n ): Promise<ApiResponse<T>> {\n const response = await _fetch(endpoint, {\n ...this.defaultOptions,\n ...options,\n method: 'POST',\n body: data ? JSON.stringify(data) : undefined,\n })\n return this.parseResponse<T>(response)\n }\n\n protected async patch<T = unknown>(\n endpoint: string,\n data?: unknown,\n options?: FetchOptions,\n ): Promise<ApiResponse<T>> {\n const response = await _fetch(endpoint, {\n ...this.defaultOptions,\n ...options,\n method: 'PATCH',\n body: data ? JSON.stringify(data) : undefined,\n })\n return this.parseResponse<T>(response)\n }\n\n protected async delete<T = unknown>(\n endpoint: string,\n options?: FetchOptions,\n ): Promise<ApiResponse<T>> {\n const response = await _fetch(endpoint, {\n ...this.defaultOptions,\n ...options,\n method: 'DELETE',\n })\n return this.parseResponse<T>(response)\n }\n\n protected buildUrl(endpoint: string, options?: ApiQueryOptions): string {\n if (!options) return endpoint\n const queryString = stringify(options, { addQueryPrefix: true })\n return queryString ? `${endpoint}${queryString}` : endpoint\n }\n\n protected async parseResponse<T>(response: Response): Promise<ApiResponse<T>> {\n const contentType = response.headers.get('content-type')\n\n try {\n if (contentType?.includes('application/json')) {\n const jsonData = await response.json()\n\n if (jsonData.docs !== undefined) {\n const pagination: PaginationMeta = {\n page: jsonData.page || 1,\n limit: jsonData.limit || 20,\n totalDocs: jsonData.totalDocs || 0,\n totalPages: jsonData.totalPages || 0,\n hasNextPage: jsonData.hasNextPage || false,\n hasPrevPage: jsonData.hasPrevPage || false,\n }\n return { data: jsonData.docs, success: true, pagination }\n }\n\n return { data: jsonData, success: true }\n }\n\n const textData = await response.text()\n return { data: textData as T, success: true }\n } catch (error) {\n throw createApiError('응답 파싱에 실패했습니다.', response.status, {\n contentType,\n error: error instanceof Error ? error.message : error,\n })\n }\n }\n}\n","import { SignJWT, jwtVerify, decodeJwt } from 'jose'\nimport { createNetworkError, TimeoutError, NetworkError } from '../errors'\nimport type { DebugConfig, RetryConfig } from '../../client/types'\nimport { API_URLS } from '../../client/types'\n\nconst DEFAULT_TIMEOUT = 30000\nconst DEFAULT_RETRYABLE_STATUSES = [408, 429, 500, 502, 503, 504]\n\nexport interface FetchOptions extends RequestInit {\n clientKey?: string\n secretKey?: string\n timeout?: number\n baseUrl?: string\n debug?: boolean | DebugConfig\n retry?: RetryConfig\n}\n\nexport interface JwtPayload {\n clientKey: string\n iat?: number\n exp?: number\n}\n\n/**\n * Creates a JWT token for server-side authentication.\n * The token is valid for 1 hour by default.\n *\n * @param clientKey - Client API key\n * @param secretKey - Secret key used for signing\n * @param expiresIn - Token expiration time (default: '1h')\n * @returns Promise<string> JWT token\n *\n * @example\n * ```typescript\n * const token = await createServerToken('client-key', 'secret-key')\n * // Use in Authorization header: `Bearer ${token}`\n * ```\n */\nexport async function createServerToken(\n clientKey: string,\n secretKey: string,\n expiresIn: string = '1h',\n): Promise<string> {\n if (!clientKey || !secretKey) {\n throw new Error('clientKey와 secretKey는 필수입니다.')\n }\n\n const secret = new TextEncoder().encode(secretKey)\n return new SignJWT({ clientKey })\n .setProtectedHeader({ alg: 'HS256' })\n .setIssuedAt()\n .setExpirationTime(expiresIn)\n .sign(secret)\n}\n\n/**\n * Verifies a JWT token and returns the payload.\n *\n * @param token - JWT token to verify\n * @param secretKey - Secret key used for verification\n * @returns Promise<JwtPayload> Verified payload containing clientKey\n * @throws Error if token is invalid or expired\n *\n * @example\n * ```typescript\n * const payload = await verifyServerToken(token, 'secret-key')\n * console.log(payload.clientKey)\n * ```\n */\nexport async function verifyServerToken(\n token: string,\n secretKey: string,\n): Promise<JwtPayload> {\n if (!token || !secretKey) {\n throw new Error('token과 secretKey는 필수입니다.')\n }\n\n const secret = new TextEncoder().encode(secretKey)\n const { payload } = await jwtVerify(token, secret, {\n algorithms: ['HS256'],\n })\n\n if (!payload.clientKey || typeof payload.clientKey !== 'string') {\n throw new Error('Invalid token payload: clientKey is missing')\n }\n\n return {\n clientKey: payload.clientKey as string,\n iat: payload.iat,\n exp: payload.exp,\n }\n}\n\n/**\n * Decodes a JWT token without verification.\n * WARNING: Use this only when you need to inspect token contents.\n * Always use verifyServerToken for authentication.\n *\n * @param token - JWT token to decode\n * @returns JwtPayload Decoded payload (unverified)\n *\n * @example\n * ```typescript\n * const payload = decodeServerToken(token)\n * console.log(payload.clientKey) // Unverified!\n * ```\n */\nexport function decodeServerToken(token: string): JwtPayload {\n if (!token) {\n throw new Error('token은 필수입니다.')\n }\n\n const payload = decodeJwt(token)\n\n if (!payload.clientKey || typeof payload.clientKey !== 'string') {\n throw new Error('Invalid token payload: clientKey is missing')\n }\n\n return {\n clientKey: payload.clientKey as string,\n iat: payload.iat,\n exp: payload.exp,\n }\n}\n\n// ============================================================================\n// API Key Utilities\n// ============================================================================\n\n/**\n * Creates a Base64-encoded API key from clientKey and secretKey.\n * Use this for MCP server authentication.\n *\n * @param clientKey - Client API key\n * @param secretKey - Secret key\n * @returns Base64-encoded API key\n *\n * @example\n * ```typescript\n * const apiKey = createApiKey('client-key', 'secret-key')\n * // Use in x-api-key header\n * ```\n */\nexport function createApiKey(clientKey: string, secretKey: string): string {\n if (!clientKey || !secretKey) {\n throw new Error('clientKey와 secretKey는 필수입니다.')\n }\n\n // Browser와 Node.js 모두 지원\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(`${clientKey}:${secretKey}`).toString('base64')\n }\n return btoa(`${clientKey}:${secretKey}`)\n}\n\n/**\n * Parses a Base64-encoded API key to extract clientKey and secretKey.\n *\n * @param apiKey - Base64-encoded API key\n * @returns Object containing clientKey and secretKey\n * @throws Error if API key is invalid\n *\n * @example\n * ```typescript\n * const { clientKey, secretKey } = parseApiKey(apiKey)\n * ```\n */\nexport function parseApiKey(apiKey: string): {\n clientKey: string\n secretKey: string\n} {\n if (!apiKey) {\n throw new Error('apiKey는 필수입니다.')\n }\n\n try {\n let decoded: string\n if (typeof Buffer !== 'undefined') {\n decoded = Buffer.from(apiKey, 'base64').toString('utf-8')\n } else {\n decoded = atob(apiKey)\n }\n\n const colonIndex = decoded.indexOf(':')\n if (colonIndex === -1) {\n throw new Error('Invalid format')\n }\n\n const clientKey = decoded.substring(0, colonIndex)\n const secretKey = decoded.substring(colonIndex + 1)\n\n if (!clientKey || !secretKey) {\n throw new Error('Invalid format')\n }\n\n return { clientKey, secretKey }\n } catch {\n throw new Error('Invalid API key. Expected Base64 encoded \"clientKey:secretKey\"')\n }\n}\n\nfunction debugLog(\n debug: boolean | DebugConfig | undefined,\n type: 'request' | 'response' | 'error',\n message: string,\n data?: unknown,\n) {\n if (!debug) return\n\n const shouldLog =\n debug === true ||\n (type === 'request' && (debug as DebugConfig).logRequests) ||\n (type === 'response' && (debug as DebugConfig).logResponses) ||\n (type === 'error' && (debug as DebugConfig).logErrors)\n\n if (shouldLog) {\n console.group(`[SDK ${type.toUpperCase()}] ${message}`)\n if (data) console.log(data)\n console.groupEnd()\n }\n}\n\nfunction getErrorSuggestion(status: number): string | undefined {\n if (status === 401) return '인증 정보를 확인해주세요.'\n if (status === 404) return '요청한 리소스를 찾을 수 없습니다.'\n if (status >= 500)\n return '서버 오류가 발생했습니다. 잠시 후 다시 시도해주세요.'\n return undefined\n}\n\nasync function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport async function _fetch(\n url: string,\n options?: FetchOptions,\n): Promise<Response> {\n const {\n clientKey,\n secretKey,\n timeout = DEFAULT_TIMEOUT,\n baseUrl = API_URLS.production,\n debug,\n retry,\n ...requestInit\n } = options || {}\n\n const retryConfig = {\n maxRetries: retry?.maxRetries ?? 3,\n retryableStatuses: retry?.retryableStatuses ?? DEFAULT_RETRYABLE_STATUSES,\n retryDelay:\n retry?.retryDelay ??\n ((attempt: number) => Math.min(1000 * 2 ** attempt, 10000)),\n }\n\n let lastError: Error | undefined\n\n for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {\n try {\n const headers = new Headers(requestInit.headers)\n\n if (clientKey) {\n headers.set('X-Client-Key', clientKey)\n }\n\n if (secretKey && clientKey) {\n const token = await createServerToken(clientKey, secretKey)\n headers.set('Authorization', `Bearer ${token}`)\n }\n\n if (!headers.has('Content-Type') && requestInit.body) {\n headers.set('Content-Type', 'application/json')\n }\n\n debugLog(debug, 'request', url, {\n method: requestInit.method || 'GET',\n headers: Object.fromEntries(headers.entries()),\n attempt: attempt + 1,\n })\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeout)\n\n const response = await fetch(`${baseUrl}${url}`, {\n ...requestInit,\n headers,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n debugLog(debug, 'response', url, {\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n })\n\n if (!response.ok) {\n const error = createNetworkError(\n `HTTP ${response.status}: ${response.statusText}`,\n response.status,\n { url, method: requestInit.method || 'GET', attempt: attempt + 1 },\n `요청이 실패했습니다 (상태 코드: ${response.status})`,\n getErrorSuggestion(response.status),\n )\n\n if (\n attempt < retryConfig.maxRetries &&\n retryConfig.retryableStatuses.includes(response.status)\n ) {\n lastError = error\n const retryDelay = retryConfig.retryDelay(attempt)\n debugLog(debug, 'error', `재시도 대기 중... (${retryDelay}ms)`, error)\n await delay(retryDelay)\n continue\n }\n\n throw error\n }\n\n return response\n } catch (error) {\n debugLog(debug, 'error', url, error)\n\n if (error instanceof Error && error.name === 'AbortError') {\n const timeoutError = new TimeoutError(\n `요청이 ${timeout}ms 후 타임아웃되었습니다.`,\n { url, timeout, attempt: attempt + 1 },\n '요청 시간이 초과되었습니다.',\n '네트워크 연결을 확인하거나 잠시 후 다시 시도해주세요.',\n )\n\n if (attempt < retryConfig.maxRetries) {\n lastError = timeoutError\n await delay(retryConfig.retryDelay(attempt))\n continue\n }\n\n throw timeoutError\n }\n\n if (error instanceof TypeError) {\n const networkError = createNetworkError(\n '네트워크 연결에 실패했습니다.',\n undefined,\n { url, originalError: error.message, attempt: attempt + 1 },\n '네트워크 연결에 실패했습니다.',\n '인터넷 연결을 확인하고 다시 시도해주세요.',\n )\n\n if (attempt < retryConfig.maxRetries) {\n lastError = networkError\n await delay(retryConfig.retryDelay(attempt))\n continue\n }\n\n throw networkError\n }\n\n if (error instanceof NetworkError || error instanceof TimeoutError) {\n if (\n attempt < retryConfig.maxRetries &&\n error.status &&\n retryConfig.retryableStatuses.includes(error.status)\n ) {\n lastError = error\n await delay(retryConfig.retryDelay(attempt))\n continue\n }\n\n throw error\n }\n\n const unknownError = createNetworkError(\n error instanceof Error\n ? error.message\n : '알 수 없는 네트워크 에러가 발생했습니다.',\n undefined,\n { url, originalError: error, attempt: attempt + 1 },\n '알 수 없는 오류가 발생했습니다.',\n '잠시 후 다시 시도해주세요.',\n )\n\n if (attempt < retryConfig.maxRetries) {\n lastError = unknownError\n await delay(retryConfig.retryDelay(attempt))\n continue\n }\n\n throw unknownError\n }\n }\n\n throw lastError!\n}\n","// ============================================================================\n// Error Classes\n// ============================================================================\n\nexport class SDKError extends Error {\n readonly code: string\n readonly status?: number\n readonly details?: unknown\n readonly userMessage?: string\n readonly suggestion?: string\n\n constructor(\n code: string,\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super(message)\n this.name = 'SDKError'\n this.code = code\n this.status = status\n this.details = details\n this.userMessage = userMessage\n this.suggestion = suggestion\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, SDKError)\n }\n }\n\n getUserMessage(): string {\n return this.userMessage || this.message\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n status: this.status,\n details: this.details,\n userMessage: this.userMessage,\n suggestion: this.suggestion,\n }\n }\n}\n\nexport class NetworkError extends SDKError {\n constructor(\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('NETWORK_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'NetworkError'\n }\n}\n\nexport class ValidationError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('VALIDATION_ERROR', message, 400, details, userMessage, suggestion)\n this.name = 'ValidationError'\n }\n}\n\nexport class ApiError extends SDKError {\n constructor(\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('API_ERROR', message, status, details, userMessage, suggestion)\n this.name = 'ApiError'\n }\n}\n\nexport class ConfigError extends SDKError {\n constructor(\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('CONFIG_ERROR', message, undefined, details, userMessage, suggestion)\n this.name = 'ConfigError'\n }\n}\n\nexport class TimeoutError extends SDKError {\n constructor(\n message = '요청이 시간 초과되었습니다.',\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n ) {\n super('TIMEOUT_ERROR', message, 408, details, userMessage, suggestion)\n this.name = 'TimeoutError'\n }\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isSDKError(error: unknown): error is SDKError {\n return error instanceof SDKError\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n return error instanceof ValidationError\n}\n\nexport function isApiError(error: unknown): error is ApiError {\n return error instanceof ApiError\n}\n\nexport function isConfigError(error: unknown): error is ConfigError {\n return error instanceof ConfigError\n}\n\nexport function isTimeoutError(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\nexport const createNetworkError = (\n message: string,\n status?: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new NetworkError(message, status, details, userMessage, suggestion)\n\nexport const createValidationError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new ValidationError(message, details, userMessage, suggestion)\n\nexport const createApiError = (\n message: string,\n status: number,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new ApiError(message, status, details, userMessage, suggestion)\n\nexport const createConfigError = (\n message: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new ConfigError(message, details, userMessage, suggestion)\n\nexport const createTimeoutError = (\n message?: string,\n details?: unknown,\n userMessage?: string,\n suggestion?: string,\n) => new TimeoutError(message, details, userMessage, suggestion)\n","import type { Sort, Where } from 'payload'\nimport type { SDKError } from '../internal/errors'\nimport type { Collection, PublicCollection } from '../collection/const'\n\nexport type { Collection, PublicCollection }\n\n// ============================================================================\n// Environment & API URL Configuration\n// ============================================================================\n\nexport type Environment = 'local' | 'development' | 'staging' | 'production'\n\nexport const API_URLS: Record<Environment, string> = {\n local: 'http://localhost:3000',\n development: 'https://dev.01.software',\n staging: 'https://stg.01.software',\n production: 'https://api.01.software',\n}\n\n/**\n * 환경에 맞는 API URL을 반환합니다.\n * 우선순위: baseUrl > environment > 환경변수 > 기본값(production)\n */\nexport function resolveApiUrl(config?: { baseUrl?: string; environment?: Environment }): string {\n // 1. 직접 지정된 baseUrl이 있으면 사용\n if (config?.baseUrl) {\n return config.baseUrl.replace(/\\/$/, '') // trailing slash 제거\n }\n\n // 2. 환경변수로 지정된 URL이 있으면 사용\n const envUrl = process.env.SOFTWARE_API_URL || process.env.NEXT_PUBLIC_SOFTWARE_API_URL\n if (envUrl) {\n return envUrl.replace(/\\/$/, '')\n }\n\n // 3. environment 설정이 있으면 사용\n if (config?.environment) {\n return API_URLS[config.environment]\n }\n\n // 4. 기본값: production\n return API_URLS.production\n}\n\n// ============================================================================\n// Client Configuration\n// ============================================================================\n\nexport interface ClientBrowserConfig {\n clientKey: string\n /**\n * API 환경 설정.\n * - 'local': localhost:3000\n * - 'development': dev.01.software\n * - 'staging': stg.01.software\n * - 'production': api.01.software\n *\n * baseUrl이 설정되면 이 값은 무시됩니다.\n * @default 'production'\n */\n environment?: Environment\n /**\n * 커스텀 API URL. 설정 시 environment 값은 무시됩니다.\n * @example 'https://my-custom-api.example.com'\n */\n baseUrl?: string\n}\n\nexport interface ClientServerConfig extends ClientBrowserConfig {\n secretKey: string\n}\n\nexport interface ClientMetadata {\n userAgent?: string\n timestamp: number\n}\n\nexport interface ClientState {\n metadata: ClientMetadata\n}\n\n// ============================================================================\n// API Response Types\n// ============================================================================\n\nexport interface PaginationMeta {\n page: number\n limit: number\n totalDocs: number\n totalPages: number\n hasNextPage: boolean\n hasPrevPage: boolean\n}\n\nexport interface ApiSuccessResponse<T = unknown> {\n data: T\n success: true\n message?: string\n pagination?: PaginationMeta\n}\n\nexport interface ApiErrorResponse {\n data: null\n success: false\n error: {\n code: string\n message: string\n details?: unknown\n }\n}\n\nexport type ApiResponse<T = unknown> = ApiSuccessResponse<T> | ApiErrorResponse\n\n// ============================================================================\n// Query Options\n// ============================================================================\n\nexport interface ApiQueryOptions {\n page?: number\n limit?: number\n sort?: Sort\n where?: Where\n}\n\nexport interface ApiQueryReactOptions {\n keepPreviousData?: boolean\n}\n\n// ============================================================================\n// Debug & Retry Configuration\n// ============================================================================\n\nexport interface DebugConfig {\n logRequests?: boolean\n logResponses?: boolean\n logErrors?: boolean\n}\n\nexport interface RetryConfig {\n maxRetries?: number\n retryableStatuses?: number[]\n retryDelay?: (attempt: number) => number\n}\n\nexport interface ErrorLogger {\n log(error: SDKError | Error, context?: Record<string, unknown>): void\n}\n\n// ============================================================================\n// Collection Types (re-exported from collection/const)\n// ============================================================================\n\n// ============================================================================\n// Type Utilities\n// ============================================================================\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]\n}\n\nexport type ExtractArrayType<T> = T extends (infer U)[] ? U : never\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isSuccessResponse<T>(\n response: ApiResponse<T>,\n): response is ApiSuccessResponse<T> {\n return response.success === true\n}\n\nexport function isErrorResponse(\n response: ApiResponse<unknown>,\n): response is ApiErrorResponse {\n return response.success === false\n}\n","import { BaseApiClient } from './base'\nimport type { ApiQueryOptions, ApiResponse, Collection } from '../client/types'\nimport { CollectionQueryBuilder } from './query-builder'\n\nexport class CollectionsApi extends BaseApiClient {\n constructor(clientKey: string, secretKey?: string, baseUrl?: string) {\n super(clientKey, secretKey, baseUrl)\n }\n\n from<T extends Collection>(collection: T): CollectionQueryBuilder<T> {\n return new CollectionQueryBuilder(this, collection)\n }\n\n requestGet<T = unknown>(\n endpoint: string,\n options?: ApiQueryOptions,\n ): Promise<ApiResponse<T>> {\n return this.get<T>(endpoint, options)\n }\n\n requestPost<T = unknown>(\n endpoint: string,\n data?: unknown,\n ): Promise<ApiResponse<T>> {\n return this.post<T>(endpoint, data)\n }\n\n requestPatch<T = unknown>(\n endpoint: string,\n data?: unknown,\n ): Promise<ApiResponse<T>> {\n return this.patch<T>(endpoint, data)\n }\n\n requestDelete<T = unknown>(endpoint: string): Promise<ApiResponse<T>> {\n return this.delete<T>(endpoint)\n }\n}\n","import type { Config } from '../../payload-types'\n\n/**\n * Collection type derived from Payload Config.\n * This ensures type safety and automatic synchronization with payload-types.ts\n */\nexport type Collection = keyof Config['collections']\n\n/**\n * Internal Payload collections that should not be exposed via SDK.\n */\nconst INTERNAL_COLLECTIONS = [\n 'users',\n 'payload-kv',\n 'payload-locked-documents',\n 'payload-preferences',\n 'payload-migrations',\n] as const\n\ntype InternalCollection = (typeof INTERNAL_COLLECTIONS)[number]\n\n/**\n * Public collections available for SDK access.\n * Excludes internal Payload system collections.\n */\nexport type PublicCollection = Exclude<Collection, InternalCollection>\n\n/**\n * Array of all public collection names for runtime use (e.g., Zod enum validation).\n * This is derived from Config to ensure type safety.\n */\nexport const COLLECTIONS = [\n 'tenants',\n 'tenant-metadata',\n 'tenant-logos',\n 'tenant-og-images',\n 'products',\n 'product-variants',\n 'product-options',\n 'product-categories',\n 'product-tags',\n 'product-images',\n 'brands',\n 'brand-logos',\n 'orders',\n 'order-products',\n 'returns',\n 'return-products',\n 'transactions',\n 'documents',\n 'document-categories',\n 'document-images',\n 'posts',\n 'post-categories',\n 'post-tags',\n 'post-images',\n 'playlists',\n 'playlist-images',\n 'musics',\n 'galleries',\n 'gallery-images',\n 'forms',\n 'form-submissions',\n 'media',\n] as const satisfies readonly PublicCollection[]\n","import { isServer, QueryClient, defaultShouldDehydrateQuery } from '@tanstack/react-query'\n\nfunction makeQueryClient() {\n return new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: Number.POSITIVE_INFINITY,\n refetchOnWindowFocus: false,\n },\n dehydrate: {\n shouldDehydrateQuery: (query) =>\n defaultShouldDehydrateQuery(query) || query.state.status === 'pending',\n shouldRedactErrors: () => false,\n },\n },\n })\n}\n\nlet browserQueryClient: QueryClient | undefined\n\nexport function getQueryClient() {\n if (isServer) {\n return makeQueryClient()\n }\n if (!browserQueryClient) {\n browserQueryClient = makeQueryClient()\n }\n return browserQueryClient\n}\n","import {\n QueryClient,\n useQuery as useQueryOriginal,\n useSuspenseQuery as useSuspenseQueryOriginal,\n useInfiniteQuery as useInfiniteQueryOriginal,\n useSuspenseInfiniteQuery as useSuspenseInfiniteQueryOriginal,\n} from '@tanstack/react-query'\nimport type { Collection, ApiQueryOptions } from '../client/types'\nimport { CollectionsApi, type CollectionType } from '../collection'\n\nexport interface UnifiedQueryOptions {\n clientKey?: string\n baseUrl?: string\n}\n\n// ============================================================================\n// Query Key Helpers\n// ============================================================================\n\nexport function collectionKeys<T extends Collection>(collection: T) {\n return {\n all: [collection] as const,\n lists: () => [collection, 'list'] as const,\n list: (options?: ApiQueryOptions) => [collection, 'list', options] as const,\n details: () => [collection, 'detail'] as const,\n detail: (id: string | number, options?: ApiQueryOptions) => [collection, 'detail', id, options] as const,\n infinites: () => [collection, 'infinite'] as const,\n infinite: (options?: Omit<ApiQueryOptions, 'page'>) => [collection, 'infinite', options] as const,\n }\n}\n\n// ============================================================================\n// Query Params Types\n// ============================================================================\n\nexport interface CollectionQueryParams<T extends Collection> {\n collection: T\n options?: ApiQueryOptions\n}\n\nexport interface CollectionDetailQueryParams<T extends Collection> {\n collection: T\n id: string | number\n options?: ApiQueryOptions\n}\n\nexport interface CollectionInfiniteQueryParams<T extends Collection> {\n collection: T\n options?: Omit<ApiQueryOptions, 'page'>\n pageSize?: number\n}\n\n// ============================================================================\n// UnifiedQueryClient\n// ============================================================================\n\nconst DEFAULT_PAGE_SIZE = 20\n\nexport class UnifiedQueryClient {\n private queryClient: QueryClient\n private collectionsApi: CollectionsApi\n\n constructor(queryClient: QueryClient, options?: UnifiedQueryOptions) {\n this.queryClient = queryClient\n this.collectionsApi = new CollectionsApi(options?.clientKey || '', undefined, options?.baseUrl)\n }\n\n // ===== useQuery =====\n useQuery<T extends Collection>(\n params: CollectionQueryParams<T>,\n options?: {\n enabled?: boolean\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean\n refetchInterval?: number | false\n retry?: boolean | number\n }\n ) {\n const { collection, options: queryOptions } = params\n\n return useQueryOriginal({\n queryKey: collectionKeys(collection).list(queryOptions),\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).find(queryOptions)\n return response.data ?? []\n },\n ...options,\n })\n }\n\n // ===== useSuspenseQuery =====\n useSuspenseQuery<T extends Collection>(\n params: CollectionQueryParams<T>,\n options?: {\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean\n refetchInterval?: number | false\n retry?: boolean | number\n }\n ) {\n const { collection, options: queryOptions } = params\n\n return useSuspenseQueryOriginal({\n queryKey: collectionKeys(collection).list(queryOptions),\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).find(queryOptions)\n return response.data ?? []\n },\n ...options,\n })\n }\n\n // ===== useQueryById =====\n useQueryById<T extends Collection>(\n params: CollectionDetailQueryParams<T>,\n options?: {\n enabled?: boolean\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean\n refetchInterval?: number | false\n retry?: boolean | number\n }\n ) {\n const { collection, id, options: queryOptions } = params\n\n return useQueryOriginal({\n queryKey: collectionKeys(collection).detail(id, queryOptions),\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).findById(id, queryOptions)\n return response.data ?? null\n },\n ...options,\n })\n }\n\n // ===== useSuspenseQueryById =====\n useSuspenseQueryById<T extends Collection>(\n params: CollectionDetailQueryParams<T>,\n options?: {\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean\n refetchInterval?: number | false\n retry?: boolean | number\n }\n ) {\n const { collection, id, options: queryOptions } = params\n\n return useSuspenseQueryOriginal({\n queryKey: collectionKeys(collection).detail(id, queryOptions),\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).findById(id, queryOptions)\n return response.data ?? null\n },\n ...options,\n })\n }\n\n // ===== useInfiniteQuery =====\n useInfiniteQuery<T extends Collection>(\n params: CollectionInfiniteQueryParams<T>,\n options?: {\n enabled?: boolean\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean\n retry?: boolean | number\n }\n ) {\n const { collection, options: queryOptions, pageSize = DEFAULT_PAGE_SIZE } = params\n\n return useInfiniteQueryOriginal({\n queryKey: collectionKeys(collection).infinite(queryOptions),\n queryFn: async ({ pageParam }) => {\n const response = await this.collectionsApi\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response.data ?? []\n },\n initialPageParam: 1,\n getNextPageParam: (lastPage: CollectionType<T>[], _allPages: CollectionType<T>[][], lastPageParam: number) => {\n if (!Array.isArray(lastPage) || lastPage.length < pageSize) return undefined\n return lastPageParam + 1\n },\n ...options,\n })\n }\n\n // ===== useSuspenseInfiniteQuery =====\n useSuspenseInfiniteQuery<T extends Collection>(\n params: CollectionInfiniteQueryParams<T>,\n options?: {\n staleTime?: number\n gcTime?: number\n refetchOnWindowFocus?: boolean\n refetchOnMount?: boolean\n retry?: boolean | number\n }\n ) {\n const { collection, options: queryOptions, pageSize = DEFAULT_PAGE_SIZE } = params\n\n return useSuspenseInfiniteQueryOriginal({\n queryKey: collectionKeys(collection).infinite(queryOptions),\n queryFn: async ({ pageParam }) => {\n const response = await this.collectionsApi\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response.data ?? []\n },\n initialPageParam: 1,\n getNextPageParam: (lastPage: CollectionType<T>[], _allPages: CollectionType<T>[][], lastPageParam: number) => {\n if (!Array.isArray(lastPage) || lastPage.length < pageSize) return undefined\n return lastPageParam + 1\n },\n ...options,\n })\n }\n\n // ===== prefetchQuery =====\n async prefetchQuery<T extends Collection>(\n params: CollectionQueryParams<T>,\n options?: {\n staleTime?: number\n }\n ) {\n const { collection, options: queryOptions } = params\n\n return this.queryClient.prefetchQuery({\n queryKey: collectionKeys(collection).list(queryOptions),\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).find(queryOptions)\n return response.data ?? []\n },\n ...options,\n })\n }\n\n // ===== prefetchQueryById =====\n async prefetchQueryById<T extends Collection>(\n params: CollectionDetailQueryParams<T>,\n options?: {\n staleTime?: number\n }\n ) {\n const { collection, id, options: queryOptions } = params\n\n return this.queryClient.prefetchQuery({\n queryKey: collectionKeys(collection).detail(id, queryOptions),\n queryFn: async () => {\n const response = await this.collectionsApi.from(collection).findById(id, queryOptions)\n return response.data ?? null\n },\n ...options,\n })\n }\n\n // ===== prefetchInfiniteQuery =====\n async prefetchInfiniteQuery<T extends Collection>(\n params: CollectionInfiniteQueryParams<T>,\n options?: { pages?: number; staleTime?: number }\n ) {\n const { collection, options: queryOptions, pageSize = DEFAULT_PAGE_SIZE } = params\n\n return this.queryClient.prefetchInfiniteQuery({\n queryKey: collectionKeys(collection).infinite(queryOptions),\n queryFn: async ({ pageParam }) => {\n const response = await this.collectionsApi\n .from(collection)\n .find({ ...queryOptions, page: pageParam, limit: pageSize })\n return response.data ?? []\n },\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: CollectionType<T>[],\n _allPages: CollectionType<T>[][],\n lastPageParam: number,\n ) => {\n if (!Array.isArray(lastPage) || lastPage.length < pageSize) return undefined\n return lastPageParam + 1\n },\n pages: options?.pages ?? 1,\n staleTime: options?.staleTime,\n })\n }\n\n // ===== Cache Utilities =====\n\n invalidateQueries<T extends Collection>(collection: T, type?: 'list' | 'detail' | 'infinite') {\n const queryKey = type ? [collection, type] : [collection]\n return this.queryClient.invalidateQueries({ queryKey })\n }\n\n getQueryData<T extends Collection>(\n collection: T,\n type: 'list',\n options?: ApiQueryOptions\n ): CollectionType<T>[] | undefined\n getQueryData<T extends Collection>(\n collection: T,\n type: 'detail',\n id: string | number,\n options?: ApiQueryOptions\n ): CollectionType<T> | null | undefined\n getQueryData<T extends Collection>(\n collection: T,\n type: 'list' | 'detail',\n idOrOptions?: string | number | ApiQueryOptions,\n options?: ApiQueryOptions\n ) {\n if (type === 'list') {\n return this.queryClient.getQueryData(collectionKeys(collection).list(idOrOptions as ApiQueryOptions))\n }\n return this.queryClient.getQueryData(collectionKeys(collection).detail(idOrOptions as string | number, options))\n }\n\n setQueryData<T extends Collection>(\n collection: T,\n type: 'list',\n data: CollectionType<T>[],\n options?: ApiQueryOptions\n ): void\n setQueryData<T extends Collection>(\n collection: T,\n type: 'detail',\n id: string | number,\n data: CollectionType<T> | null,\n options?: ApiQueryOptions\n ): void\n setQueryData<T extends Collection>(\n collection: T,\n type: 'list' | 'detail',\n dataOrId: CollectionType<T>[] | string | number,\n dataOrOptions?: CollectionType<T> | null | ApiQueryOptions,\n options?: ApiQueryOptions\n ) {\n if (type === 'list') {\n this.queryClient.setQueryData(\n collectionKeys(collection).list(dataOrOptions as ApiQueryOptions),\n dataOrId as CollectionType<T>[]\n )\n } else {\n this.queryClient.setQueryData(\n collectionKeys(collection).detail(dataOrId as string | number, options),\n dataOrOptions as CollectionType<T> | null\n )\n }\n }\n\n}\n","import type { QueryClient } from '@tanstack/react-query'\nimport type { Config } from '../../payload-types'\nimport { CollectionsApi, CollectionQueryBuilder } from '../collection'\nimport { getQueryClient } from '../query/get-query-client'\nimport { UnifiedQueryClient } from '../query/UnifiedQuery'\nimport {\n resolveApiUrl,\n type ClientBrowserConfig,\n type ClientState,\n type ClientMetadata,\n type Collection,\n} from './types'\n\nexport default class BrowserClient<_Database = Config> {\n query: UnifiedQueryClient\n collections: CollectionsApi\n queryClient: QueryClient\n\n protected state: ClientState\n protected config: ClientBrowserConfig\n protected baseUrl: string\n\n constructor(options: ClientBrowserConfig) {\n if (!options.clientKey) {\n throw new Error('clientKey is required.')\n }\n\n this.config = { ...options }\n this.baseUrl = resolveApiUrl(options)\n\n const metadata: ClientMetadata = {\n timestamp: Date.now(),\n userAgent:\n typeof window !== 'undefined' ? window.navigator?.userAgent : 'Node.js',\n }\n\n this.state = { metadata }\n this.queryClient = getQueryClient()\n\n this.query = new UnifiedQueryClient(this.queryClient, {\n clientKey: this.config.clientKey,\n baseUrl: this.baseUrl,\n })\n\n this.collections = new CollectionsApi(this.config.clientKey, undefined, this.baseUrl)\n }\n\n from<T extends Collection>(collection: T): CollectionQueryBuilder<T> {\n return this.collections.from(collection)\n }\n\n getState(): ClientState {\n return { ...this.state }\n }\n}\n\nexport function createBrowserClient(\n options: ClientBrowserConfig,\n): BrowserClient {\n return new BrowserClient(options)\n}\n","import type { Order, OrderProduct, Transaction } from '../../payload-types'\nimport { _fetch } from '../internal/utils'\nimport { createApiError } from '../internal/errors'\n\nexport interface ApiClientOptions {\n clientKey: string\n secretKey: string\n baseUrl?: string\n}\n\nexport type CreateOrderParams = {\n paymentId: string\n orderNumber: string\n email: string\n shippingAddress: Order['shippingAddress']\n orderProducts: Omit<\n OrderProduct,\n 'id' | 'brand' | 'createdAt' | 'updatedAt' | 'order' | 'status'\n >[]\n totalAmount: number\n}\n\nexport type UpdateOrderParams = {\n orderNumber: string\n status: Order['status']\n}\n\nexport type UpdateTransactionParams = {\n paymentId: string\n status: Transaction['status']\n paymentMethod: Transaction['paymentMethod']\n receiptUrl: Transaction['receiptUrl']\n}\n\nexport class ApiClient {\n private readonly clientKey: string\n private readonly secretKey: string\n private readonly baseUrl?: string\n\n constructor(options: ApiClientOptions) {\n if (!options.clientKey) {\n throw new Error('clientKey is required.')\n }\n if (!options.secretKey) {\n throw new Error('secretKey is required.')\n }\n\n this.clientKey = options.clientKey\n this.secretKey = options.secretKey\n this.baseUrl = options.baseUrl\n }\n\n private async request<T>(endpoint: string, body: unknown): Promise<T> {\n const response = await _fetch(endpoint, {\n method: 'POST',\n clientKey: this.clientKey,\n secretKey: this.secretKey,\n baseUrl: this.baseUrl,\n body: JSON.stringify(body),\n })\n\n const data = await response.json()\n\n if (data.error) {\n throw createApiError(\n data.error,\n response.status,\n data,\n data.error,\n '요청 처리 중 오류가 발생했습니다.',\n )\n }\n\n return data as T\n }\n\n createOrder(params: CreateOrderParams): Promise<Order> {\n return this.request<Order>('/api/orders/create', params)\n }\n\n updateOrder(params: UpdateOrderParams): Promise<Order> {\n return this.request<Order>('/api/orders/update', params)\n }\n\n updateTransaction(params: UpdateTransactionParams): Promise<Transaction> {\n return this.request<Transaction>('/api/transactions/update', params)\n }\n}\n","import type { Config } from '../../payload-types'\nimport { ApiClient } from '../api'\nimport { CollectionsApi, CollectionQueryBuilder } from '../collection'\nimport {\n resolveApiUrl,\n type ClientServerConfig,\n type ClientState,\n type ClientMetadata,\n type Collection,\n type ClientBrowserConfig,\n} from './types'\n\nexport default class ServerClient<_Database = Config> {\n api: ApiClient\n collections: CollectionsApi\n\n protected state: ClientState\n protected config: ClientServerConfig\n protected baseUrl: string\n\n constructor(options: ClientServerConfig) {\n if (!options.clientKey) {\n throw new Error('clientKey is required.')\n }\n if (!options.secretKey) {\n throw new Error('secretKey is required.')\n }\n\n this.config = { ...options }\n this.baseUrl = resolveApiUrl(options)\n\n const metadata: ClientMetadata = {\n timestamp: Date.now(),\n userAgent:\n typeof window !== 'undefined' ? window.navigator?.userAgent : 'Node.js',\n }\n\n this.state = { metadata }\n\n this.api = new ApiClient({\n clientKey: this.config.clientKey,\n secretKey: this.config.secretKey,\n baseUrl: this.baseUrl,\n })\n\n this.collections = new CollectionsApi(\n this.config.clientKey,\n this.config.secretKey,\n this.baseUrl,\n )\n }\n\n from<T extends Collection>(collection: T): CollectionQueryBuilder<T> {\n return this.collections.from(collection)\n }\n\n getState(): ClientState {\n return { ...this.state }\n }\n\n getConfig(): ClientBrowserConfig {\n const { secretKey: _, ...safeConfig } = this.config\n return safeConfig\n }\n}\n\nexport function createServerClient(options: ClientServerConfig): ServerClient {\n return new ServerClient(options)\n}\n","import type { Collection } from '../client/types'\nimport type { CollectionType } from '../collection/types'\n\nexport type WebhookOperation = 'create' | 'update'\n\nexport interface WebhookEvent<T extends Collection = Collection> {\n collection: T\n operation: WebhookOperation\n data: CollectionType<T>\n}\n\nexport type WebhookHandler<T extends Collection = Collection> = (\n event: WebhookEvent<T>,\n) => Promise<void> | void\n\nexport function isValidWebhookEvent(data: unknown): data is WebhookEvent {\n if (typeof data !== 'object' || data === null) return false\n const obj = data as Record<string, unknown>\n return (\n typeof obj.collection === 'string' &&\n (obj.operation === 'create' || obj.operation === 'update') &&\n typeof obj.data === 'object' &&\n obj.data !== null\n )\n}\n\nexport async function handleWebhook<T extends Collection = Collection>(\n request: Request,\n handler: WebhookHandler<T>,\n): Promise<Response> {\n try {\n const body = await request.json()\n\n if (!isValidWebhookEvent(body)) {\n return new Response(\n JSON.stringify({ error: 'Invalid webhook event format' }),\n { status: 400, headers: { 'Content-Type': 'application/json' } },\n )\n }\n\n await handler(body as WebhookEvent<T>)\n\n return new Response(\n JSON.stringify({ success: true, message: 'Webhook processed' }),\n { status: 200, headers: { 'Content-Type': 'application/json' } },\n )\n } catch (error) {\n console.error('Webhook processing error:', error)\n\n return new Response(\n JSON.stringify({\n error: 'Internal server error',\n message: error instanceof Error ? error.message : 'Unknown error',\n }),\n { status: 500, headers: { 'Content-Type': 'application/json' } },\n )\n }\n}\n\nexport function createTypedWebhookHandler<T extends Collection>(\n collection: T,\n handler: (event: WebhookEvent<T>) => Promise<void> | void,\n): WebhookHandler<T> {\n return async (event: WebhookEvent<T>) => {\n if (event.collection !== collection) {\n throw new Error(`Expected collection \"${collection}\", got \"${event.collection}\"`)\n }\n return handler(event)\n }\n}\n","export const generateOrderNumber = () => {\n // YYMMDDRRRRRR\n const year = new Date().getFullYear().toString().slice(-2)\n const month = new Date().getMonth().toString().padStart(2, '0')\n const day = new Date().getDate().toString().padStart(2, '0')\n const random = Math.floor(Math.random() * 1000000)\n .toString()\n .padStart(6, '0')\n\n return `${year}${month}${day}${random}`\n}\n","export const objectFor = <T>(data: T | number | null | undefined) => {\n if (typeof data === 'number') {\n return null\n }\n\n return data\n}\n","import { ProductOption } from '../../payload-types'\nimport { objectFor } from '../types'\n\nexport const formatOrderName = (options: ProductOption[]) => {\n const optionLength = options.length\n\n return optionLength === 1\n ? objectFor(options?.[0]?.product)?.title || ''\n : `${objectFor(options.at(0)?.product)?.title} 외 ${optionLength - 1}건`\n}\n","'use client'\n\nimport React from 'react'\nimport {\n SerializedBlockNode,\n SerializedLinkNode,\n} from '@payloadcms/richtext-lexical'\nimport {\n SerializedEditorState,\n SerializedLexicalNode,\n} from '@payloadcms/richtext-lexical/lexical'\nimport {\n defaultJSXConverters,\n JSXConverter,\n LinkJSXConverter,\n RichText,\n} from '@payloadcms/richtext-lexical/react'\n\nexport type RichTextData = SerializedEditorState<SerializedLexicalNode>\n\nexport interface RichTextContentProps {\n data: RichTextData\n className?: string\n internalDocToHref?: (args: { linkNode: SerializedLinkNode }) => string\n blocks?: {\n Iframe?: JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n url: string\n }>\n >\n Player?: JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n url: string\n }>\n >\n }\n}\n\nexport function RichTextContent({\n data,\n className,\n internalDocToHref,\n blocks,\n}: RichTextContentProps) {\n return (\n <RichText\n data={data}\n className={className}\n converters={{\n ...defaultJSXConverters,\n ...LinkJSXConverter({\n internalDocToHref,\n }),\n blocks: blocks\n ? (blocks as Record<\n string,\n JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n }>\n >\n >)\n : undefined,\n }}\n />\n )\n}\n"],"mappings":"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","names":["import_react_query","useQueryOriginal","useSuspenseQueryOriginal","useInfiniteQueryOriginal","useSuspenseInfiniteQueryOriginal","_a","import_react","React"]}