{"version":3,"sources":["../src/http-core/next/redirect401.ts","../src/http-core/types.ts","../src/http-core/utils.ts","../src/http-core/next/ssr-cache.ts"],"names":["from"],"mappings":"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","file":"next.cjs","sourcesContent":["// http-core/next/redirect401.ts\r\nexport const redirectToUnauthorizedOnServer401 = async () => {\r\n\tconst { headers } = await import(\"next/headers\");\r\n\tconst { redirect } = await import(\"next/navigation\");\r\n\r\n\tconst h = await headers();\r\n\tconst pageUrl = h.get(\"x-page-url\") || \"/\";\r\n\tconst redirectUri = encodeURIComponent(pageUrl);\r\n\r\n\tredirect(`/unauthorized?redirect_uri=${redirectUri}&logout=true`);\r\n};\r\n","// http-core/@types/types.ts\r\nexport type OpenApiPathsLike = object;\r\n\r\nexport interface ServiceArguments<\r\n\tPaths extends OpenApiPathsLike,\r\n\tTPath extends keyof Paths,\r\n\tTMethod extends keyof Paths[TPath] & string,\r\n\tR,\r\n> {\r\n\turl: TPath;\r\n\tmethod: TMethod;\r\n\r\n\tpathVariable?: Paths[TPath][TMethod] extends {\r\n\t\tparameters: { path: infer P };\r\n\t}\r\n\t\t? P | undefined\r\n\t\t: Record<string, unknown> | undefined;\r\n\r\n\tqueryString?: Paths[TPath][TMethod] extends {\r\n\t\tparameters: { query: infer Q };\r\n\t}\r\n\t\t? Q | undefined\r\n\t\t: Record<string, unknown> | undefined;\r\n\r\n\tbody?: Paths[TPath][TMethod] extends {\r\n\t\trequestBody: { content: { \"application/json\": infer B } };\r\n\t}\r\n\t\t? B | undefined\r\n\t\t: unknown;\r\n\r\n\t/** response.ok 여부와 상관없이 Response를 직접 파싱하고 싶을 때 */\r\n\tresultInterceptor?: (response: Response) => Promise<R>;\r\n\r\n\t/** per-request headers */\r\n\theaders?: Readonly<Record<string, string>>;\r\n}\r\n\r\nexport interface CacheForService<CacheName extends string = string> {\r\n\tcacheTime: number;\r\n\tcacheSize?: number;\r\n\tcacheName: CacheName;\r\n}\r\n\r\n/** 코어가 던지는 표준 에러 (401 포함) */\r\nexport class HttpResponseError<Args = unknown> extends Error {\r\n\tpublic readonly name = \"HttpResponseError\";\r\n\tconstructor(\r\n\t\tpublic readonly response: Response,\r\n\t\tpublic readonly args: Args,\r\n\t\tpublic readonly data?: unknown,\r\n\t\tmessage?: string,\r\n\t) {\r\n\t\tsuper(message ?? `HTTP ${response.status} / ${response.statusText}`);\r\n\t}\r\n\r\n\tget status() {\r\n\t\treturn this.response.status;\r\n\t}\r\n}\r\n\r\nexport const isHttpResponseError = (e: unknown): e is HttpResponseError<any> =>\r\n\te instanceof HttpResponseError;\r\n","// http-core/utils.ts\r\nexport const replacePathVariable = (\r\n\ttemplate: string,\r\n\trecord: Record<string, string | number | boolean | null | undefined>,\r\n): string => {\r\n\treturn template.replace(/\\{(.*?)\\}/g, (_, key) => {\r\n\t\tconst value = record[key];\r\n\t\treturn value != null ? String(encodeURIComponent(value)) : `{${key}}`;\r\n\t});\r\n};\r\n\r\nexport const toQueryString = (\r\n\trecord: Record<\r\n\t\tstring,\r\n\t\t| string\r\n\t\t| string[]\r\n\t\t| number\r\n\t\t| number[]\r\n\t\t| boolean\r\n\t\t| boolean[]\r\n\t\t| null\r\n\t\t| undefined\r\n\t>,\r\n): string => {\r\n\tconst qs = Object.entries(record).reduce((query, [key, value]) => {\r\n\t\tif (value == null) return query;\r\n\t\tlet pair = \"\";\r\n\t\tif (Array.isArray(value)) {\r\n\t\t\tpair = value\r\n\t\t\t\t.map(\r\n\t\t\t\t\t(item) =>\r\n\t\t\t\t\t\t`${encodeURIComponent(key)}=${encodeURIComponent(String(item))}`,\r\n\t\t\t\t)\r\n\t\t\t\t.join(\"&\");\r\n\t\t} else {\r\n\t\t\tpair = `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`;\r\n\t\t}\r\n\t\treturn query ? `${query}&${pair}` : pair;\r\n\t}, \"\");\r\n\r\n\treturn `?${qs}`;\r\n};\r\n\r\nexport const stableStringify = (obj: any) => {\r\n\tif (!obj) return \"{}\";\r\n\tif (typeof obj !== \"object\") return JSON.stringify(obj);\r\n\tconst allKeys = new Set<string>();\r\n\tJSON.stringify(obj, (k, v) => (allKeys.add(k), v));\r\n\tconst keys = Array.from(allKeys).sort();\r\n\treturn JSON.stringify(obj, keys);\r\n};\r\n\r\nexport const joinUrl = (baseUrl: string, path: string) => {\r\n\tconst b = baseUrl.replace(/\\/+$/, \"\");\r\n\tconst p = path.replace(/^\\/+/, \"\");\r\n\treturn `${b}/${p}`;\r\n};\r\n","// http-core//next/ssr-cache.ts\r\nimport { from, Observable } from \"rxjs\";\r\nimport type {\r\n\tCacheForService,\r\n\tOpenApiPathsLike,\r\n\tServiceArguments,\r\n} from \"../types\";\r\nimport { HttpResponseError } from \"../types\";\r\nimport {\r\n\tjoinUrl,\r\n\treplacePathVariable,\r\n\tstableStringify,\r\n\ttoQueryString,\r\n} from \"../utils\";\r\n\r\nconst normalizeBodyAndHeaders = (\r\n\tbody: any,\r\n\theaders: Record<string, string>,\r\n) => {\r\n\tif (typeof FormData !== \"undefined\" && body instanceof FormData) {\r\n\t\tconst next = { ...headers };\r\n\t\tdelete next[\"Content-Type\"];\r\n\t\treturn { body, headers: next };\r\n\t}\r\n\tif (body != null) return { body: JSON.stringify(body), headers };\r\n\treturn { body, headers };\r\n};\r\n\r\nconst parseErrorBody = async (res: Response) => {\r\n\ttry {\r\n\t\treturn await res.json();\r\n\t} catch {\r\n\t\ttry {\r\n\t\t\treturn await res.text();\r\n\t\t} catch {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const callApiSsrCache = <\r\n\tPaths extends OpenApiPathsLike,\r\n\tR,\r\n\tCacheName extends string = string,\r\n\tTPath extends keyof Paths = keyof Paths,\r\n\tTMethod extends keyof Paths[TPath] & string = keyof Paths[TPath] & string,\r\n>(opts: {\r\n\tbaseUrl: string;\r\n\tserviceArguments: ServiceArguments<Paths, TPath, TMethod, R>;\r\n\tcacheForService: CacheForService<CacheName>;\r\n\r\n\t/** SSR에서 기본 헤더를 만들고 싶으면(예: 쿠키 Authorization) */\r\n\theadersProvider?: () =>\r\n\t\t| Promise<Record<string, string>>\r\n\t\t| Record<string, string>;\r\n\r\n\t/** 401 redirect 핸들러 */\r\n\tonServer401?: () => void | Promise<void>;\r\n}): Observable<R> => {\r\n\tconst run = async () => {\r\n\t\tconst {\r\n\t\t\tbaseUrl,\r\n\t\t\tserviceArguments,\r\n\t\t\tcacheForService,\r\n\t\t\theadersProvider,\r\n\t\t\tonServer401,\r\n\t\t} = opts;\r\n\r\n\t\tlet url = serviceArguments.pathVariable\r\n\t\t\t? replacePathVariable(\r\n\t\t\t\t\tString(serviceArguments.url),\r\n\t\t\t\t\tserviceArguments.pathVariable as any,\r\n\t\t\t\t)\r\n\t\t\t: String(serviceArguments.url);\r\n\r\n\t\turl =\r\n\t\t\turl +\r\n\t\t\t((serviceArguments.queryString &&\r\n\t\t\t\ttoQueryString(serviceArguments.queryString as any)) ||\r\n\t\t\t\t\"\");\r\n\r\n\t\tconst baseHeaders = headersProvider ? await headersProvider() : {};\r\n\t\tconst merged: Record<string, string> = {\r\n\t\t\t...baseHeaders,\r\n\t\t\t...(serviceArguments.headers || {}),\r\n\t\t};\r\n\r\n\t\t// Cache-Control 있으면 Authorization 제거(기존 정책 유지)\r\n\t\tif (merged[\"Cache-Control\"]) delete merged[\"Authorization\"];\r\n\r\n\t\tconst { body, headers } = normalizeBodyAndHeaders(\r\n\t\t\tserviceArguments.body,\r\n\t\t\tmerged,\r\n\t\t);\r\n\t\tconst fullUrl = joinUrl(baseUrl, url);\r\n\r\n\t\t// Data Cache 조건(기존과 동일한 철학): GET + cacheTime > 0\r\n\t\tconst isGet = String(serviceArguments.method).toUpperCase() === \"GET\";\r\n\t\tconst allowDataCache = isGet && cacheForService.cacheTime > 0;\r\n\r\n\t\tconst doFetch = async (\r\n\t\t\tcacheMode: \"no-store\" | \"force-cache\",\r\n\t\t\trevalidateSeconds?: number,\r\n\t\t) => {\r\n\t\t\tconst init: RequestInit & { next?: { revalidate?: number } } = {\r\n\t\t\t\tmethod: serviceArguments.method as any,\r\n\t\t\t\theaders,\r\n\t\t\t\tbody,\r\n\t\t\t\tcache: cacheMode,\r\n\t\t\t};\r\n\t\t\tif (cacheMode === \"force-cache\" && revalidateSeconds != null) {\r\n\t\t\t\tinit.next = { revalidate: revalidateSeconds };\r\n\t\t\t}\r\n\r\n\t\t\tconst res = await fetch(fullUrl, init);\r\n\r\n\t\t\tif (serviceArguments.resultInterceptor) {\r\n\t\t\t\treturn serviceArguments.resultInterceptor(res);\r\n\t\t\t}\r\n\r\n\t\t\tif (!res.ok) {\r\n\t\t\t\tif (res.status === 401 && onServer401) {\r\n\t\t\t\t\tawait Promise.resolve(onServer401()); // redirect() throws\r\n\t\t\t\t}\r\n\t\t\t\tconst data = await parseErrorBody(res);\r\n\t\t\t\tif (\r\n\t\t\t\t\tdata &&\r\n\t\t\t\t\ttypeof data === \"object\" &&\r\n\t\t\t\t\t(data as any).resultType\r\n\t\t\t\t)\r\n\t\t\t\t\tthrow data;\r\n\r\n\t\t\t\tthrow new HttpResponseError(\r\n\t\t\t\t\tres,\r\n\t\t\t\t\tserviceArguments,\r\n\t\t\t\t\tdata,\r\n\t\t\t\t\t(data as any)?.message ?? `HTTP ${res.status}`,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\treturn (await res.json()) as R;\r\n\t\t};\r\n\r\n\t\tif (allowDataCache) {\r\n\t\t\tconst { unstable_cache } = await import(\"next/cache\");\r\n\t\t\tconst revalidateSeconds = Math.max(\r\n\t\t\t\t1,\r\n\t\t\t\tMath.ceil(cacheForService.cacheTime / 1000),\r\n\t\t\t);\r\n\r\n\t\t\tconst key =\r\n\t\t\t\tcacheForService.cacheName +\r\n\t\t\t\t\"=\" +\r\n\t\t\t\tString(serviceArguments.method) +\r\n\t\t\t\tString(serviceArguments.url) +\r\n\t\t\t\tstableStringify(serviceArguments.queryString) +\r\n\t\t\t\tstableStringify(serviceArguments.pathVariable) +\r\n\t\t\t\tstableStringify(serviceArguments.body);\r\n\r\n\t\t\tconst cached = unstable_cache(\r\n\t\t\t\t() => doFetch(\"force-cache\", revalidateSeconds),\r\n\t\t\t\t[key],\r\n\t\t\t\t{\r\n\t\t\t\t\trevalidate: revalidateSeconds,\r\n\t\t\t\t\ttags: [cacheForService.cacheName],\r\n\t\t\t\t},\r\n\t\t\t);\r\n\r\n\t\t\treturn cached();\r\n\t\t}\r\n\r\n\t\treturn doFetch(\"no-store\");\r\n\t};\r\n\r\n\treturn from(run());\r\n};\r\n"]}