@withwiz/cms-kit 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.ko.md +4 -2
  2. package/README.md +4 -2
  3. package/dist/{chunk-JMWXVXK5.js → chunk-25GMHPCW.js} +12 -4
  4. package/dist/chunk-25GMHPCW.js.map +1 -0
  5. package/dist/{chunk-5JUIMXNF.js → chunk-2VHNZWH2.js} +3 -3
  6. package/dist/{chunk-5JUIMXNF.js.map → chunk-2VHNZWH2.js.map} +1 -1
  7. package/dist/{chunk-BWKKHCDG.mjs → chunk-3UXX27N5.mjs} +44 -3
  8. package/dist/{chunk-BWKKHCDG.mjs.map → chunk-3UXX27N5.mjs.map} +1 -1
  9. package/dist/{chunk-T7EVFD4G.mjs → chunk-47DPXAO6.mjs} +2 -2
  10. package/dist/{chunk-4W3X7OKF.js → chunk-5Z5XUR2K.js} +48 -27
  11. package/dist/chunk-5Z5XUR2K.js.map +1 -0
  12. package/dist/{chunk-LDFE33ML.mjs → chunk-7F5YFG2W.mjs} +10 -2
  13. package/dist/chunk-7F5YFG2W.mjs.map +1 -0
  14. package/dist/{chunk-CGVFB23E.mjs → chunk-A557FA2K.mjs} +24 -19
  15. package/dist/{chunk-CGVFB23E.mjs.map → chunk-A557FA2K.mjs.map} +1 -1
  16. package/dist/{chunk-OBNALAMG.mjs → chunk-BG4C5KZO.mjs} +2 -2
  17. package/dist/{chunk-DCIF4XJL.js → chunk-EPVV6655.js} +10 -10
  18. package/dist/{chunk-DCIF4XJL.js.map → chunk-EPVV6655.js.map} +1 -1
  19. package/dist/{chunk-LF5LOI7K.mjs → chunk-FCWUNCGA.mjs} +3 -3
  20. package/dist/{chunk-YEQFKOWD.mjs → chunk-GQJNLE34.mjs} +2 -2
  21. package/dist/{chunk-W4FWIZ2Y.js → chunk-HVB72GT3.js} +3 -3
  22. package/dist/{chunk-W4FWIZ2Y.js.map → chunk-HVB72GT3.js.map} +1 -1
  23. package/dist/{chunk-KWKV2GAH.js → chunk-J32BTYJZ.js} +4 -4
  24. package/dist/{chunk-KWKV2GAH.js.map → chunk-J32BTYJZ.js.map} +1 -1
  25. package/dist/{chunk-C5WFZJM4.js → chunk-JPIQU2C4.js} +6 -6
  26. package/dist/{chunk-C5WFZJM4.js.map → chunk-JPIQU2C4.js.map} +1 -1
  27. package/dist/{chunk-FEPGJ7WN.mjs → chunk-MN27HJKW.mjs} +3 -3
  28. package/dist/{chunk-ZULSFSDG.mjs → chunk-MWX5B4DP.mjs} +3 -3
  29. package/dist/{chunk-FCCCG5Z7.mjs → chunk-MXXC4U3D.mjs} +2 -2
  30. package/dist/{chunk-5RDMODGV.mjs → chunk-N7LMNP4W.mjs} +2 -2
  31. package/dist/{chunk-YY7K5CXX.js → chunk-OHJISVGC.js} +5 -5
  32. package/dist/{chunk-YY7K5CXX.js.map → chunk-OHJISVGC.js.map} +1 -1
  33. package/dist/{chunk-EM4MQEWV.mjs → chunk-SN3XOMF6.mjs} +45 -24
  34. package/dist/chunk-SN3XOMF6.mjs.map +1 -0
  35. package/dist/{chunk-BE7JDL64.js → chunk-TKOFGRU4.js} +11 -11
  36. package/dist/{chunk-BE7JDL64.js.map → chunk-TKOFGRU4.js.map} +1 -1
  37. package/dist/{chunk-EG6NVPP2.js → chunk-UVZD7GHG.js} +44 -3
  38. package/dist/chunk-UVZD7GHG.js.map +1 -0
  39. package/dist/{chunk-6EZ3QE5N.js → chunk-Y3YYIJYG.js} +3 -3
  40. package/dist/{chunk-6EZ3QE5N.js.map → chunk-Y3YYIJYG.js.map} +1 -1
  41. package/dist/{chunk-OYJRR3G2.js → chunk-ZMXNPYFS.js} +25 -20
  42. package/dist/chunk-ZMXNPYFS.js.map +1 -0
  43. package/dist/components/AdminManagerBase.js +5 -5
  44. package/dist/components/AdminManagerBase.mjs +4 -4
  45. package/dist/components/AdminShell.d.mts +1 -1
  46. package/dist/components/AdminShell.d.ts +1 -1
  47. package/dist/components/AdminShell.js +4 -4
  48. package/dist/components/AdminShell.mjs +3 -3
  49. package/dist/components/index.d.mts +1 -1
  50. package/dist/components/index.d.ts +1 -1
  51. package/dist/components/index.js +8 -8
  52. package/dist/components/index.mjs +7 -7
  53. package/dist/hooks/index.js +5 -5
  54. package/dist/hooks/index.mjs +4 -4
  55. package/dist/hooks/useImageDropZone.js +4 -4
  56. package/dist/hooks/useImageDropZone.mjs +3 -3
  57. package/dist/{index-00a40-FQ.d.ts → index-Cce8FHtI.d.mts} +38 -1
  58. package/dist/{index-00a40-FQ.d.mts → index-Cce8FHtI.d.ts} +38 -1
  59. package/dist/index.d.mts +1 -1
  60. package/dist/index.d.ts +1 -1
  61. package/dist/index.js +19 -13
  62. package/dist/index.js.map +1 -1
  63. package/dist/index.mjs +18 -12
  64. package/dist/infrastructure/index.js +3 -3
  65. package/dist/infrastructure/index.mjs +2 -2
  66. package/dist/infrastructure/middleware/index.js +3 -3
  67. package/dist/infrastructure/middleware/index.mjs +2 -2
  68. package/dist/infrastructure/middleware/wrappers.js +3 -3
  69. package/dist/infrastructure/middleware/wrappers.mjs +2 -2
  70. package/dist/services/index.js +5 -5
  71. package/dist/services/index.mjs +4 -4
  72. package/dist/utils/admin-fetch.js +3 -3
  73. package/dist/utils/admin-fetch.mjs +2 -2
  74. package/dist/utils/html-sanitizer.js +3 -3
  75. package/dist/utils/html-sanitizer.mjs +2 -2
  76. package/dist/utils/index.d.mts +1 -1
  77. package/dist/utils/index.d.ts +1 -1
  78. package/dist/utils/index.js +13 -7
  79. package/dist/utils/index.js.map +1 -1
  80. package/dist/utils/index.mjs +12 -6
  81. package/dist/utils/jwt.js +3 -3
  82. package/dist/utils/jwt.mjs +2 -2
  83. package/dist/utils/r2-helpers.js +4 -4
  84. package/dist/utils/r2-helpers.mjs +3 -3
  85. package/dist/utils/r2-storage.js +3 -3
  86. package/dist/utils/r2-storage.mjs +2 -2
  87. package/package.json +4 -4
  88. package/dist/chunk-4W3X7OKF.js.map +0 -1
  89. package/dist/chunk-EG6NVPP2.js.map +0 -1
  90. package/dist/chunk-EM4MQEWV.mjs.map +0 -1
  91. package/dist/chunk-JMWXVXK5.js.map +0 -1
  92. package/dist/chunk-LDFE33ML.mjs.map +0 -1
  93. package/dist/chunk-OYJRR3G2.js.map +0 -1
  94. /package/dist/{chunk-T7EVFD4G.mjs.map → chunk-47DPXAO6.mjs.map} +0 -0
  95. /package/dist/{chunk-OBNALAMG.mjs.map → chunk-BG4C5KZO.mjs.map} +0 -0
  96. /package/dist/{chunk-LF5LOI7K.mjs.map → chunk-FCWUNCGA.mjs.map} +0 -0
  97. /package/dist/{chunk-YEQFKOWD.mjs.map → chunk-GQJNLE34.mjs.map} +0 -0
  98. /package/dist/{chunk-FEPGJ7WN.mjs.map → chunk-MN27HJKW.mjs.map} +0 -0
  99. /package/dist/{chunk-ZULSFSDG.mjs.map → chunk-MWX5B4DP.mjs.map} +0 -0
  100. /package/dist/{chunk-FCCCG5Z7.mjs.map → chunk-MXXC4U3D.mjs.map} +0 -0
  101. /package/dist/{chunk-5RDMODGV.mjs.map → chunk-N7LMNP4W.mjs.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/uni4love/project/workspace/211-withwiz/node-packages/withwiz-cms-kit/dist/chunk-ZMXNPYFS.js","../src/utils/html-sanitizer.ts"],"names":[],"mappings":"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","file":"/Users/uni4love/project/workspace/211-withwiz/node-packages/withwiz-cms-kit/dist/chunk-ZMXNPYFS.js","sourcesContent":[null,"/**\n * 서버사이드 HTML 새니타이저 (spec.md §4.6 / Sprint 1 S1).\n *\n * 위험한 요소(script, iframe, object 등)와 이벤트 핸들러 속성을 제거하면서\n * 블록 에디터가 사용하는 안전한 HTML 구조를 보존한다.\n *\n * - 1차(기본): `isomorphic-dompurify` (실제 jsdom+DOMPurify DOM/parser\n * allowlist 새니타이저 — 손수 만든 regex 가 아님). 동적으로 로드한다.\n * - fallback: regex 기반 새니타이저는 *방어 심층(defense-in-depth)* 으로만\n * 남겨둔다 (optional dep 미설치 시). 더 이상 1차 경로가 아니다.\n * - `createSanitizer(config)` 로 신뢰 iframe origin 을 주입할 수 있다.\n *\n * `sanitizeHtmlContent` 는 하위 호환을 위해 기본 안전 설정으로 동작한다\n * (I1 — 동일 이름, 동일 `string|null|undefined → string|null` 시그니처).\n * 기본 신뢰 iframe origin 은 §5 config boundary 를 통해 consumer 가\n * override 할 수 있고, 미설정 시 현재 YouTube/Vimeo 집합이 그대로 쓰인다\n * (unconfigured 동작 불변 — I3 보호).\n *\n * `../../withwiz-blog-core/src/utils/html-sanitizer.ts` 와 *메커니즘 동일*\n * (`createSanitizer` factory + `tryLoadDomPurify()` 동적 require +\n * `uponSanitizeElement` iframe-origin hook + regex defense-in-depth fallback).\n */\n\nimport { resolveTrustedIframeOrigins } from '../config';\n\n// ── 정규식 패턴 (defense-in-depth fallback 전용) ──\n\n/** 항상 제거할 태그 (내용 포함) */\nconst STRIP_TAGS_WITH_CONTENT =\n /(<\\s*\\/?\\s*(script|object|embed|applet|form|input|textarea|select|button)\\b[^>]*>)/gi;\n\n/** 신뢰되지 않는 iframe 매칭 */\nconst UNTRUSTED_IFRAME = /<\\s*iframe\\b[^>]*>[\\s\\S]*?<\\s*\\/\\s*iframe\\s*>/gi;\n\n/** script/style 태그 사이 콘텐츠 */\nconst STRIP_TAG_CONTENT = /<\\s*(script|style)\\b[^>]*>[\\s\\S]*?<\\s*\\/\\s*\\1\\s*>/gi;\n\n/** 이벤트 핸들러 속성 (onclick, onerror, onload 등) */\nconst EVENT_HANDLER_ATTRS = /\\s+on\\w+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]*)/gi;\n\n/** 위험한 URL 프로토콜 (href/src 속성 내) */\nconst DANGEROUS_PROTOCOL =\n /(href|src|action)\\s*=\\s*[\"']\\s*(javascript|vbscript|data\\s*:(?!image\\/))[^\"']*[\"']/gi;\n\n// ── 설정 인터페이스 ──\n\n/** 새니타이저 설정 */\nexport interface SanitizerConfig {\n /**\n * 신뢰할 수 있는 iframe origin 목록 (prefix 매칭).\n * 미지정 시 §5 config boundary 의 기본값(YouTube/Vimeo) 사용.\n */\n trustedIframeOrigins?: readonly string[];\n /** DOMPurify 사용 시 허용할 태그 화이트리스트. */\n allowedTags?: string[];\n /** DOMPurify 사용 시 허용할 속성 화이트리스트. */\n allowedAttributes?: Record<string, string[]>;\n}\n\n// ── DOMPurify 동적 로딩 (선택적 / 실제 사용되는 1차 경로) ──\n\ntype DOMPurifyLike = {\n sanitize: (dirty: string, options?: Record<string, unknown>) => string;\n};\n\nlet cachedDomPurify: DOMPurifyLike | null | undefined;\n\n/**\n * 선택적 의존성 `isomorphic-dompurify` (실제 DOM allowlist 새니타이저) 를\n * 동기적으로 로드한다. 설치되지 않았거나 로드 실패 시에만 null 을 반환하고,\n * 호출자는 regex defense-in-depth fallback 을 쓴다.\n */\nfunction tryLoadDomPurify(): DOMPurifyLike | null {\n if (cachedDomPurify !== undefined) return cachedDomPurify;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const mod = require('isomorphic-dompurify') as unknown;\n const candidate =\n (mod as { default?: DOMPurifyLike }).default ?? (mod as DOMPurifyLike);\n if (candidate && typeof candidate.sanitize === 'function') {\n cachedDomPurify = candidate;\n return candidate;\n }\n } catch {\n // 모듈 미설치 — regex fallback 사용\n }\n cachedDomPurify = null;\n return null;\n}\n\n// ── 정규식 기반 새니타이저 (defense-in-depth fallback) ──\n\nfunction regexSanitize(html: string, trustedOrigins: readonly string[]): string {\n let result = html;\n\n // 1. script/style 태그 사이 콘텐츠 제거\n result = result.replace(STRIP_TAG_CONTENT, '');\n\n // 2. 위험한 태그 제거\n result = result.replace(STRIP_TAGS_WITH_CONTENT, '');\n\n // 2b. 신뢰되지 않는 iframe 제거 (신뢰 origin 유지)\n result = result.replace(UNTRUSTED_IFRAME, (match) => {\n const srcMatch = match.match(/\\bsrc\\s*=\\s*[\"']([^\"']+)[\"']/i);\n if (srcMatch) {\n const src = srcMatch[1].trim();\n if (trustedOrigins.some((origin) => src.startsWith(origin))) {\n return match;\n }\n }\n return '';\n });\n\n // 3. 이벤트 핸들러 속성 제거\n result = result.replace(EVENT_HANDLER_ATTRS, '');\n\n // 4. 위험한 URL 프로토콜 무력화\n result = result.replace(DANGEROUS_PROTOCOL, '$1=\"\"');\n\n return result;\n}\n\n// ── DOMPurify 기반 새니타이저 (1차 경로) ──\n\nfunction dompurifySanitize(\n html: string,\n purify: DOMPurifyLike,\n trustedOrigins: readonly string[],\n config: SanitizerConfig,\n): string {\n const options: Record<string, unknown> = {\n // iframe 은 hook 에서 origin 검증 후 허용\n ADD_TAGS: ['iframe'],\n ADD_ATTR: ['allowfullscreen', 'frameborder', 'allow'],\n FORBID_TAGS: [\n 'script',\n 'object',\n 'embed',\n 'applet',\n 'form',\n 'input',\n 'textarea',\n 'select',\n 'button',\n 'style',\n ],\n FORBID_ATTR: [\n 'onerror',\n 'onload',\n 'onclick',\n 'onmouseover',\n 'onfocus',\n 'onblur',\n ],\n };\n\n if (config.allowedTags) options.ALLOWED_TAGS = config.allowedTags;\n if (config.allowedAttributes) {\n const flat = new Set<string>();\n for (const attrs of Object.values(config.allowedAttributes)) {\n for (const a of attrs) flat.add(a);\n }\n options.ALLOWED_ATTR = Array.from(flat);\n }\n\n ensureIframeHook(purify);\n // sanitize 는 동기이므로 호출 동안만 활성 origin 을 노출한다.\n activeTrustedOrigins = trustedOrigins;\n try {\n return purify.sanitize(html, options);\n } finally {\n activeTrustedOrigins = null;\n }\n}\n\ntype DOMPurifyWithHooks = DOMPurifyLike & {\n addHook?: (hook: string, cb: (node: Element) => void) => void;\n};\n\n/**\n * 현재 sanitize 호출이 신뢰하는 iframe origin. 호출 밖(null)에서는 훅이\n * 아무것도 하지 않는다 — consumer 가 같은 DOMPurify 인스턴스를 직접 쓸 때\n * 우리 정책이 끼어들지 않도록.\n */\nlet activeTrustedOrigins: readonly string[] | null = null;\n\n/** 인스턴스별로 훅을 1회만 등록했는지 추적. */\nconst hookedInstances = new WeakSet<object>();\n\n/**\n * iframe origin 검증 훅을 인스턴스당 한 번만 등록한다.\n *\n * 이전 구현은 호출마다 addHook/removeHook 을 반복했는데, DOMPurify 의\n * `removeHook('uponSanitizeElement')` 는 *같은 종류의 훅을 모두* 제거하므로\n * consumer 가 공유 인스턴스에 등록한 훅까지 지워 버렸다. 이제 우리 훅은\n * 한 번 등록된 뒤 그대로 남고, consumer 훅도 건드리지 않는다.\n */\nfunction ensureIframeHook(purify: DOMPurifyLike): void {\n const p = purify as DOMPurifyWithHooks;\n if (typeof p.addHook !== 'function') return;\n if (hookedInstances.has(p)) return;\n hookedInstances.add(p);\n p.addHook('uponSanitizeElement', (node) => {\n const origins = activeTrustedOrigins;\n if (!origins) return;\n if (node.nodeName && node.nodeName.toLowerCase() === 'iframe') {\n const src = (node as Element).getAttribute?.('src') ?? '';\n const trusted = origins.some((origin) => src.startsWith(origin));\n if (!trusted) {\n (node as Element).remove?.();\n }\n }\n });\n}\n\n// ── Public API ──\n\n/**\n * 새니타이저 팩토리.\n *\n * DOMPurify(isomorphic-dompurify) 가 설치되어 있으면 그것을 *1차* 로 사용하고,\n * 없을 때만 regex defense-in-depth fallback 으로 동작한다.\n *\n * @example\n * const sanitize = createSanitizer({\n * trustedIframeOrigins: ['https://www.youtube.com/', 'https://www.loom.com/'],\n * });\n * const safe = sanitize(userHtml);\n */\nexport function createSanitizer(\n config: SanitizerConfig = {},\n): (html: string | null | undefined) => string | null {\n return function sanitize(html: string | null | undefined): string | null {\n if (!html) return html as string | null;\n // 신뢰 origin 은 point-of-use 에서 §5 boundary 를 통해 해석한다\n // (lazy — import 시점에 config 가 없어도 throw 하지 않음).\n const trustedOrigins =\n config.trustedIframeOrigins ?? resolveTrustedIframeOrigins();\n const purify = tryLoadDomPurify();\n if (purify) {\n return dompurifySanitize(html, purify, trustedOrigins, config);\n }\n return regexSanitize(html, trustedOrigins);\n };\n}\n\n/**\n * 리치 HTML 콘텐츠에서 위험한 요소와 속성을 제거한다.\n * 기본 안전 설정으로 동작한다 (하위 호환, I1). 호스트별 신뢰 origin 확장은\n * `createSanitizer({ trustedIframeOrigins: [...] })` 또는 §5\n * `setCmsConfig({ sanitizer: { trustedIframeOrigins } })` 로 한다.\n */\nexport function sanitizeHtmlContent(\n html: string | null | undefined,\n): string | null {\n return defaultSanitize(html);\n}\n\n/** 모듈 로드 시점에 1회 만들어지는 기본 새니타이저 (실행은 lazy). */\nconst defaultSanitize = createSanitizer();\n"]}
@@ -2,12 +2,12 @@
2
2
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
3
3
 
4
4
 
5
- var _chunkDCIF4XJLjs = require('../chunk-DCIF4XJL.js');
6
- require('../chunk-5JUIMXNF.js');
7
- require('../chunk-KWKV2GAH.js');
8
- require('../chunk-EG6NVPP2.js');
5
+ var _chunkEPVV6655js = require('../chunk-EPVV6655.js');
6
+ require('../chunk-2VHNZWH2.js');
7
+ require('../chunk-J32BTYJZ.js');
8
+ require('../chunk-UVZD7GHG.js');
9
9
  require('../chunk-DGUM43GV.js');
10
10
 
11
11
 
12
- exports.default = _chunkDCIF4XJLjs.AdminManagerBase;
12
+ exports.default = _chunkEPVV6655js.AdminManagerBase;
13
13
  //# sourceMappingURL=AdminManagerBase.js.map
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import {
3
3
  AdminManagerBase
4
- } from "../chunk-ZULSFSDG.mjs";
5
- import "../chunk-FCCCG5Z7.mjs";
6
- import "../chunk-T7EVFD4G.mjs";
7
- import "../chunk-BWKKHCDG.mjs";
4
+ } from "../chunk-MWX5B4DP.mjs";
5
+ import "../chunk-MXXC4U3D.mjs";
6
+ import "../chunk-47DPXAO6.mjs";
7
+ import "../chunk-3UXX27N5.mjs";
8
8
  import "../chunk-BJTO5JO5.mjs";
9
9
  export {
10
10
  AdminManagerBase as default
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { d as CmsNavItem } from '../index-00a40-FQ.mjs';
2
+ import { d as CmsNavItem } from '../index-Cce8FHtI.mjs';
3
3
 
4
4
  /**
5
5
  * AdminShell props (spec.md §4.1 / Sprint 1 C1/C2).
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { d as CmsNavItem } from '../index-00a40-FQ.js';
2
+ import { d as CmsNavItem } from '../index-Cce8FHtI.js';
3
3
 
4
4
  /**
5
5
  * AdminShell props (spec.md §4.1 / Sprint 1 C1/C2).
@@ -2,11 +2,11 @@
2
2
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
3
3
 
4
4
 
5
- var _chunkC5WFZJM4js = require('../chunk-C5WFZJM4.js');
6
- require('../chunk-KWKV2GAH.js');
7
- require('../chunk-EG6NVPP2.js');
5
+ var _chunkJPIQU2C4js = require('../chunk-JPIQU2C4.js');
6
+ require('../chunk-J32BTYJZ.js');
7
+ require('../chunk-UVZD7GHG.js');
8
8
  require('../chunk-DGUM43GV.js');
9
9
 
10
10
 
11
- exports.default = _chunkC5WFZJM4js.AdminShell;
11
+ exports.default = _chunkJPIQU2C4js.AdminShell;
12
12
  //# sourceMappingURL=AdminShell.js.map
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import {
3
3
  AdminShell
4
- } from "../chunk-FEPGJ7WN.mjs";
5
- import "../chunk-T7EVFD4G.mjs";
6
- import "../chunk-BWKKHCDG.mjs";
4
+ } from "../chunk-MN27HJKW.mjs";
5
+ import "../chunk-47DPXAO6.mjs";
6
+ import "../chunk-3UXX27N5.mjs";
7
7
  import "../chunk-BJTO5JO5.mjs";
8
8
  export {
9
9
  AdminShell as default
@@ -5,7 +5,7 @@ export { AdminManagerConfig, DetailPreviewSlotProps, EditFormSlotProps, FilterSl
5
5
  export { default as ToggleSwitch } from './ToggleSwitch.mjs';
6
6
  export { ResizableImage } from './ResizableImage.mjs';
7
7
  import * as react_jsx_runtime from 'react/jsx-runtime';
8
- import '../index-00a40-FQ.mjs';
8
+ import '../index-Cce8FHtI.mjs';
9
9
  import 'react';
10
10
  import '@tiptap/core';
11
11
 
@@ -5,7 +5,7 @@ export { AdminManagerConfig, DetailPreviewSlotProps, EditFormSlotProps, FilterSl
5
5
  export { default as ToggleSwitch } from './ToggleSwitch.js';
6
6
  export { ResizableImage } from './ResizableImage.js';
7
7
  import * as react_jsx_runtime from 'react/jsx-runtime';
8
- import '../index-00a40-FQ.js';
8
+ import '../index-Cce8FHtI.js';
9
9
  import 'react';
10
10
  import '@tiptap/core';
11
11
 
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
3
3
 
4
- var _chunk6EZ3QE5Njs = require('../chunk-6EZ3QE5N.js');
4
+ var _chunkY3YYIJYGjs = require('../chunk-Y3YYIJYG.js');
5
5
 
6
6
 
7
- var _chunkDCIF4XJLjs = require('../chunk-DCIF4XJL.js');
7
+ var _chunkEPVV6655js = require('../chunk-EPVV6655.js');
8
8
  require('../chunk-D2VDTRXO.js');
9
9
 
10
10
 
11
- var _chunkC5WFZJM4js = require('../chunk-C5WFZJM4.js');
11
+ var _chunkJPIQU2C4js = require('../chunk-JPIQU2C4.js');
12
12
 
13
13
 
14
14
  var _chunkMUHFEEYWjs = require('../chunk-MUHFEEYW.js');
@@ -18,11 +18,11 @@ var _chunkZFORODOXjs = require('../chunk-ZFORODOX.js');
18
18
 
19
19
 
20
20
  var _chunkVZZ3RU3Qjs = require('../chunk-VZZ3RU3Q.js');
21
- require('../chunk-5JUIMXNF.js');
22
- require('../chunk-YY7K5CXX.js');
21
+ require('../chunk-2VHNZWH2.js');
22
+ require('../chunk-OHJISVGC.js');
23
23
  require('../chunk-S7GOXCRM.js');
24
- require('../chunk-KWKV2GAH.js');
25
- require('../chunk-EG6NVPP2.js');
24
+ require('../chunk-J32BTYJZ.js');
25
+ require('../chunk-UVZD7GHG.js');
26
26
  require('../chunk-DGUM43GV.js');
27
27
 
28
28
 
@@ -31,5 +31,5 @@ require('../chunk-DGUM43GV.js');
31
31
 
32
32
 
33
33
 
34
- exports.AdminManagerBase = _chunkDCIF4XJLjs.AdminManagerBase; exports.AdminShell = _chunkC5WFZJM4js.AdminShell; exports.ImageDropUpload = _chunk6EZ3QE5Njs.ImageDropUpload; exports.JsonLd = _chunkMUHFEEYWjs.JsonLd; exports.ResizableImage = _chunkZFORODOXjs.ResizableImage; exports.ToggleSwitch = _chunkVZZ3RU3Qjs.ToggleSwitch;
34
+ exports.AdminManagerBase = _chunkEPVV6655js.AdminManagerBase; exports.AdminShell = _chunkJPIQU2C4js.AdminShell; exports.ImageDropUpload = _chunkY3YYIJYGjs.ImageDropUpload; exports.JsonLd = _chunkMUHFEEYWjs.JsonLd; exports.ResizableImage = _chunkZFORODOXjs.ResizableImage; exports.ToggleSwitch = _chunkVZZ3RU3Qjs.ToggleSwitch;
35
35
  //# sourceMappingURL=index.js.map
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  import {
3
3
  ImageDropUpload
4
- } from "../chunk-OBNALAMG.mjs";
4
+ } from "../chunk-BG4C5KZO.mjs";
5
5
  import {
6
6
  AdminManagerBase
7
- } from "../chunk-ZULSFSDG.mjs";
7
+ } from "../chunk-MWX5B4DP.mjs";
8
8
  import "../chunk-6ES4W2DL.mjs";
9
9
  import {
10
10
  AdminShell
11
- } from "../chunk-FEPGJ7WN.mjs";
11
+ } from "../chunk-MN27HJKW.mjs";
12
12
  import {
13
13
  JsonLd
14
14
  } from "../chunk-3Y2TQCHU.mjs";
@@ -18,11 +18,11 @@ import {
18
18
  import {
19
19
  ToggleSwitch
20
20
  } from "../chunk-SMV5D5LO.mjs";
21
- import "../chunk-FCCCG5Z7.mjs";
22
- import "../chunk-LF5LOI7K.mjs";
21
+ import "../chunk-MXXC4U3D.mjs";
22
+ import "../chunk-FCWUNCGA.mjs";
23
23
  import "../chunk-J5N76ASB.mjs";
24
- import "../chunk-T7EVFD4G.mjs";
25
- import "../chunk-BWKKHCDG.mjs";
24
+ import "../chunk-47DPXAO6.mjs";
25
+ import "../chunk-3UXX27N5.mjs";
26
26
  import "../chunk-BJTO5JO5.mjs";
27
27
  export {
28
28
  AdminManagerBase,
@@ -7,13 +7,13 @@ var _chunkU6PVJKTBjs = require('../chunk-U6PVJKTB.js');
7
7
 
8
8
 
9
9
 
10
- var _chunk5JUIMXNFjs = require('../chunk-5JUIMXNF.js');
10
+ var _chunk2VHNZWH2js = require('../chunk-2VHNZWH2.js');
11
11
 
12
12
 
13
- var _chunkYY7K5CXXjs = require('../chunk-YY7K5CXX.js');
13
+ var _chunkOHJISVGCjs = require('../chunk-OHJISVGC.js');
14
14
  require('../chunk-S7GOXCRM.js');
15
- require('../chunk-KWKV2GAH.js');
16
- require('../chunk-EG6NVPP2.js');
15
+ require('../chunk-J32BTYJZ.js');
16
+ require('../chunk-UVZD7GHG.js');
17
17
  require('../chunk-DGUM43GV.js');
18
18
 
19
19
 
@@ -21,5 +21,5 @@ require('../chunk-DGUM43GV.js');
21
21
 
22
22
 
23
23
 
24
- exports.useAdminForm = _chunk5JUIMXNFjs.useAdminForm; exports.useAdminList = _chunk5JUIMXNFjs.useAdminList; exports.useImageDropZone = _chunkYY7K5CXXjs.useImageDropZone; exports.useScrollReveal = _chunkU6PVJKTBjs.useScrollReveal; exports.useScrollRevealAll = _chunkU6PVJKTBjs.useScrollRevealAll;
24
+ exports.useAdminForm = _chunk2VHNZWH2js.useAdminForm; exports.useAdminList = _chunk2VHNZWH2js.useAdminList; exports.useImageDropZone = _chunkOHJISVGCjs.useImageDropZone; exports.useScrollReveal = _chunkU6PVJKTBjs.useScrollReveal; exports.useScrollRevealAll = _chunkU6PVJKTBjs.useScrollRevealAll;
25
25
  //# sourceMappingURL=index.js.map
@@ -7,13 +7,13 @@ import {
7
7
  import {
8
8
  useAdminForm,
9
9
  useAdminList
10
- } from "../chunk-FCCCG5Z7.mjs";
10
+ } from "../chunk-MXXC4U3D.mjs";
11
11
  import {
12
12
  useImageDropZone
13
- } from "../chunk-LF5LOI7K.mjs";
13
+ } from "../chunk-FCWUNCGA.mjs";
14
14
  import "../chunk-J5N76ASB.mjs";
15
- import "../chunk-T7EVFD4G.mjs";
16
- import "../chunk-BWKKHCDG.mjs";
15
+ import "../chunk-47DPXAO6.mjs";
16
+ import "../chunk-3UXX27N5.mjs";
17
17
  import "../chunk-BJTO5JO5.mjs";
18
18
  export {
19
19
  useAdminForm,
@@ -2,12 +2,12 @@
2
2
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
3
3
 
4
4
 
5
- var _chunkYY7K5CXXjs = require('../chunk-YY7K5CXX.js');
5
+ var _chunkOHJISVGCjs = require('../chunk-OHJISVGC.js');
6
6
  require('../chunk-S7GOXCRM.js');
7
- require('../chunk-KWKV2GAH.js');
8
- require('../chunk-EG6NVPP2.js');
7
+ require('../chunk-J32BTYJZ.js');
8
+ require('../chunk-UVZD7GHG.js');
9
9
  require('../chunk-DGUM43GV.js');
10
10
 
11
11
 
12
- exports.useImageDropZone = _chunkYY7K5CXXjs.useImageDropZone;
12
+ exports.useImageDropZone = _chunkOHJISVGCjs.useImageDropZone;
13
13
  //# sourceMappingURL=useImageDropZone.js.map
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import {
3
3
  useImageDropZone
4
- } from "../chunk-LF5LOI7K.mjs";
4
+ } from "../chunk-FCWUNCGA.mjs";
5
5
  import "../chunk-J5N76ASB.mjs";
6
- import "../chunk-T7EVFD4G.mjs";
7
- import "../chunk-BWKKHCDG.mjs";
6
+ import "../chunk-47DPXAO6.mjs";
7
+ import "../chunk-3UXX27N5.mjs";
8
8
  import "../chunk-BJTO5JO5.mjs";
9
9
  export {
10
10
  useImageDropZone
@@ -132,5 +132,42 @@ declare function setCmsConfig(config: CmsConfig): void;
132
132
  declare function resetCmsConfig(): void;
133
133
  /** 현재 병합된 raw 설정 (디버깅/테스트 용). */
134
134
  declare function getCmsConfig(): CmsConfig;
135
+ /**
136
+ * 미주입 시 사용되는 고정 identity. 모든 비로그인 요청이 이 하나의 버킷을
137
+ * 공유하므로, 이 값이 실제 rate-limit 키로 쓰이면 한 클라이언트가 전체
138
+ * 사용자를 잠글 수 있다(self-DoS). 그래서 `resolveRateLimitEnabled` 는
139
+ * 추출기가 주입되지 않은 동안 rate-limit 자체를 비활성화한다(아래 참조).
140
+ */
141
+ declare const SHARED_ANON_IDENTITY = "cms-kit:shared-anon";
142
+ /** identityExtractor 주입 여부. */
143
+ declare function hasIdentityExtractor(): boolean;
144
+ /** `createForwardedIdentityExtractor` 옵션 */
145
+ interface ForwardedIdentityOptions {
146
+ /**
147
+ * 요청이 거치는 신뢰 프록시(hop) 수. `x-forwarded-for` 는 각 프록시가 값을
148
+ * 뒤에 덧붙이므로, 마지막 N 번째 값이 첫 신뢰 프록시가 본 클라이언트 주소다.
149
+ * 기본 1 (단일 리버스 프록시/로드밸런서).
150
+ */
151
+ trustedHops?: number;
152
+ /**
153
+ * `x-forwarded-for` 가 없을 때 순서대로 확인할 헤더 이름 목록.
154
+ * 기본 `['x-real-ip']`. 프록시가 덮어쓰는 헤더만 지정해야 한다.
155
+ */
156
+ fallbackHeaders?: readonly string[];
157
+ }
158
+ /**
159
+ * 신뢰 프록시 수를 아는 consumer 용 identity 추출기 팩토리.
160
+ *
161
+ * `x-forwarded-for` 의 값들 중 클라이언트가 조작할 수 없는 위치(뒤에서
162
+ * `trustedHops` 번째)를 사용한다. 값이 부족하면(프록시를 거치지 않은 직접
163
+ * 요청 등) 마지막 값을, 헤더가 전혀 없으면 fallback 헤더를, 그것도 없으면
164
+ * 고정 식별자를 돌려준다.
165
+ *
166
+ * @example
167
+ * setCmsConfig({
168
+ * rateLimit: { identityExtractor: createForwardedIdentityExtractor({ trustedHops: 1 }) },
169
+ * });
170
+ */
171
+ declare function createForwardedIdentityExtractor(options?: ForwardedIdentityOptions): CmsIdentityExtractor;
135
172
 
136
- export { type CmsBrandConfig as C, JWT_SECRET_MIN_LENGTH as J, type CmsConfig as a, type CmsIdentityExtractor as b, type CmsJwtConfig as c, type CmsNavItem as d, type CmsR2CredentialsConfig as e, type CmsRateLimitConfig as f, type CmsRouteConfig as g, type CmsSanitizerConfig as h, type CmsStorageConfig as i, getCmsConfig as j, resetCmsConfig as r, setCmsConfig as s };
173
+ export { type CmsBrandConfig as C, type ForwardedIdentityOptions as F, JWT_SECRET_MIN_LENGTH as J, SHARED_ANON_IDENTITY as S, type CmsConfig as a, type CmsIdentityExtractor as b, type CmsJwtConfig as c, type CmsNavItem as d, type CmsR2CredentialsConfig as e, type CmsRateLimitConfig as f, type CmsRouteConfig as g, type CmsSanitizerConfig as h, type CmsStorageConfig as i, createForwardedIdentityExtractor as j, getCmsConfig as k, hasIdentityExtractor as l, resetCmsConfig as r, setCmsConfig as s };
@@ -132,5 +132,42 @@ declare function setCmsConfig(config: CmsConfig): void;
132
132
  declare function resetCmsConfig(): void;
133
133
  /** 현재 병합된 raw 설정 (디버깅/테스트 용). */
134
134
  declare function getCmsConfig(): CmsConfig;
135
+ /**
136
+ * 미주입 시 사용되는 고정 identity. 모든 비로그인 요청이 이 하나의 버킷을
137
+ * 공유하므로, 이 값이 실제 rate-limit 키로 쓰이면 한 클라이언트가 전체
138
+ * 사용자를 잠글 수 있다(self-DoS). 그래서 `resolveRateLimitEnabled` 는
139
+ * 추출기가 주입되지 않은 동안 rate-limit 자체를 비활성화한다(아래 참조).
140
+ */
141
+ declare const SHARED_ANON_IDENTITY = "cms-kit:shared-anon";
142
+ /** identityExtractor 주입 여부. */
143
+ declare function hasIdentityExtractor(): boolean;
144
+ /** `createForwardedIdentityExtractor` 옵션 */
145
+ interface ForwardedIdentityOptions {
146
+ /**
147
+ * 요청이 거치는 신뢰 프록시(hop) 수. `x-forwarded-for` 는 각 프록시가 값을
148
+ * 뒤에 덧붙이므로, 마지막 N 번째 값이 첫 신뢰 프록시가 본 클라이언트 주소다.
149
+ * 기본 1 (단일 리버스 프록시/로드밸런서).
150
+ */
151
+ trustedHops?: number;
152
+ /**
153
+ * `x-forwarded-for` 가 없을 때 순서대로 확인할 헤더 이름 목록.
154
+ * 기본 `['x-real-ip']`. 프록시가 덮어쓰는 헤더만 지정해야 한다.
155
+ */
156
+ fallbackHeaders?: readonly string[];
157
+ }
158
+ /**
159
+ * 신뢰 프록시 수를 아는 consumer 용 identity 추출기 팩토리.
160
+ *
161
+ * `x-forwarded-for` 의 값들 중 클라이언트가 조작할 수 없는 위치(뒤에서
162
+ * `trustedHops` 번째)를 사용한다. 값이 부족하면(프록시를 거치지 않은 직접
163
+ * 요청 등) 마지막 값을, 헤더가 전혀 없으면 fallback 헤더를, 그것도 없으면
164
+ * 고정 식별자를 돌려준다.
165
+ *
166
+ * @example
167
+ * setCmsConfig({
168
+ * rateLimit: { identityExtractor: createForwardedIdentityExtractor({ trustedHops: 1 }) },
169
+ * });
170
+ */
171
+ declare function createForwardedIdentityExtractor(options?: ForwardedIdentityOptions): CmsIdentityExtractor;
135
172
 
136
- export { type CmsBrandConfig as C, JWT_SECRET_MIN_LENGTH as J, type CmsConfig as a, type CmsIdentityExtractor as b, type CmsJwtConfig as c, type CmsNavItem as d, type CmsR2CredentialsConfig as e, type CmsRateLimitConfig as f, type CmsRouteConfig as g, type CmsSanitizerConfig as h, type CmsStorageConfig as i, getCmsConfig as j, resetCmsConfig as r, setCmsConfig as s };
173
+ export { type CmsBrandConfig as C, type ForwardedIdentityOptions as F, JWT_SECRET_MIN_LENGTH as J, SHARED_ANON_IDENTITY as S, type CmsConfig as a, type CmsIdentityExtractor as b, type CmsJwtConfig as c, type CmsNavItem as d, type CmsR2CredentialsConfig as e, type CmsRateLimitConfig as f, type CmsRouteConfig as g, type CmsSanitizerConfig as h, type CmsStorageConfig as i, createForwardedIdentityExtractor as j, getCmsConfig as k, hasIdentityExtractor as l, resetCmsConfig as r, setCmsConfig as s };
package/dist/index.d.mts CHANGED
@@ -23,7 +23,7 @@ export { collectR2Keys, deleteR2Keys, extractR2KeysFromHtml } from './utils/r2-h
23
23
  export { IMAGE_VARIANT_SIZES, VariantSize, getVariantUrl } from './utils/image-variant-utils.mjs';
24
24
  export { getJWTManager } from './utils/jwt.mjs';
25
25
  export { adminFetch, getAuthHeaders, refreshAccessToken } from './utils/admin-fetch.mjs';
26
- export { C as CmsBrandConfig, a as CmsConfig, b as CmsIdentityExtractor, c as CmsJwtConfig, d as CmsNavItem, e as CmsR2CredentialsConfig, f as CmsRateLimitConfig, g as CmsRouteConfig, h as CmsSanitizerConfig, i as CmsStorageConfig, J as JWT_SECRET_MIN_LENGTH, j as getCmsConfig, r as resetCmsConfig, s as setCmsConfig } from './index-00a40-FQ.mjs';
26
+ export { C as CmsBrandConfig, a as CmsConfig, b as CmsIdentityExtractor, c as CmsJwtConfig, d as CmsNavItem, e as CmsR2CredentialsConfig, f as CmsRateLimitConfig, g as CmsRouteConfig, h as CmsSanitizerConfig, i as CmsStorageConfig, F as ForwardedIdentityOptions, J as JWT_SECRET_MIN_LENGTH, S as SHARED_ANON_IDENTITY, j as createForwardedIdentityExtractor, k as getCmsConfig, l as hasIdentityExtractor, r as resetCmsConfig, s as setCmsConfig } from './index-Cce8FHtI.mjs';
27
27
  export { optionalUrlSchema, slugSchema } from './validators/shared.mjs';
28
28
  export { IApiContext, IUser, TApiHandler } from '@withwiz/toolkit/next/middleware/types';
29
29
  import 'react/jsx-runtime';
package/dist/index.d.ts CHANGED
@@ -23,7 +23,7 @@ export { collectR2Keys, deleteR2Keys, extractR2KeysFromHtml } from './utils/r2-h
23
23
  export { IMAGE_VARIANT_SIZES, VariantSize, getVariantUrl } from './utils/image-variant-utils.js';
24
24
  export { getJWTManager } from './utils/jwt.js';
25
25
  export { adminFetch, getAuthHeaders, refreshAccessToken } from './utils/admin-fetch.js';
26
- export { C as CmsBrandConfig, a as CmsConfig, b as CmsIdentityExtractor, c as CmsJwtConfig, d as CmsNavItem, e as CmsR2CredentialsConfig, f as CmsRateLimitConfig, g as CmsRouteConfig, h as CmsSanitizerConfig, i as CmsStorageConfig, J as JWT_SECRET_MIN_LENGTH, j as getCmsConfig, r as resetCmsConfig, s as setCmsConfig } from './index-00a40-FQ.js';
26
+ export { C as CmsBrandConfig, a as CmsConfig, b as CmsIdentityExtractor, c as CmsJwtConfig, d as CmsNavItem, e as CmsR2CredentialsConfig, f as CmsRateLimitConfig, g as CmsRouteConfig, h as CmsSanitizerConfig, i as CmsStorageConfig, F as ForwardedIdentityOptions, J as JWT_SECRET_MIN_LENGTH, S as SHARED_ANON_IDENTITY, j as createForwardedIdentityExtractor, k as getCmsConfig, l as hasIdentityExtractor, r as resetCmsConfig, s as setCmsConfig } from './index-Cce8FHtI.js';
27
27
  export { optionalUrlSchema, slugSchema } from './validators/shared.js';
28
28
  export { IApiContext, IUser, TApiHandler } from '@withwiz/toolkit/next/middleware/types';
29
29
  import 'react/jsx-runtime';
package/dist/index.js CHANGED
@@ -5,14 +5,14 @@
5
5
  var _chunk7SWW3ZINjs = require('./chunk-7SWW3ZIN.js');
6
6
 
7
7
 
8
- var _chunk6EZ3QE5Njs = require('./chunk-6EZ3QE5N.js');
8
+ var _chunkY3YYIJYGjs = require('./chunk-Y3YYIJYG.js');
9
9
 
10
10
 
11
- var _chunkDCIF4XJLjs = require('./chunk-DCIF4XJL.js');
11
+ var _chunkEPVV6655js = require('./chunk-EPVV6655.js');
12
12
  require('./chunk-D2VDTRXO.js');
13
13
 
14
14
 
15
- var _chunkC5WFZJM4js = require('./chunk-C5WFZJM4.js');
15
+ var _chunkJPIQU2C4js = require('./chunk-JPIQU2C4.js');
16
16
 
17
17
 
18
18
  var _chunkMUHFEEYWjs = require('./chunk-MUHFEEYW.js');
@@ -30,17 +30,17 @@ var _chunkU6PVJKTBjs = require('./chunk-U6PVJKTB.js');
30
30
 
31
31
 
32
32
 
33
- var _chunk5JUIMXNFjs = require('./chunk-5JUIMXNF.js');
33
+ var _chunk2VHNZWH2js = require('./chunk-2VHNZWH2.js');
34
34
 
35
35
 
36
- var _chunkYY7K5CXXjs = require('./chunk-YY7K5CXX.js');
36
+ var _chunkOHJISVGCjs = require('./chunk-OHJISVGC.js');
37
37
  require('./chunk-MUQYK5EO.js');
38
38
 
39
39
 
40
40
 
41
41
 
42
42
 
43
- var _chunkJMWXVXK5js = require('./chunk-JMWXVXK5.js');
43
+ var _chunk25GMHPCWjs = require('./chunk-25GMHPCW.js');
44
44
 
45
45
 
46
46
 
@@ -62,7 +62,7 @@ var _chunkBHN2SRZCjs = require('./chunk-BHN2SRZC.js');
62
62
  var _chunk2REYWBQ6js = require('./chunk-2REYWBQ6.js');
63
63
 
64
64
 
65
- var _chunkW4FWIZ2Yjs = require('./chunk-W4FWIZ2Y.js');
65
+ var _chunkHVB72GT3js = require('./chunk-HVB72GT3.js');
66
66
 
67
67
 
68
68
  var _chunkR5GGIVD4js = require('./chunk-R5GGIVD4.js');
@@ -84,12 +84,12 @@ var _chunkS7GOXCRMjs = require('./chunk-S7GOXCRM.js');
84
84
 
85
85
 
86
86
 
87
- var _chunkKWKV2GAHjs = require('./chunk-KWKV2GAH.js');
87
+ var _chunkJ32BTYJZjs = require('./chunk-J32BTYJZ.js');
88
88
 
89
89
 
90
90
 
91
91
 
92
- var _chunk4W3X7OKFjs = require('./chunk-4W3X7OKF.js');
92
+ var _chunk5Z5XUR2Kjs = require('./chunk-5Z5XUR2K.js');
93
93
 
94
94
 
95
95
 
@@ -99,17 +99,20 @@ var _chunkHXVWBFCNjs = require('./chunk-HXVWBFCN.js');
99
99
 
100
100
 
101
101
 
102
- var _chunkBE7JDL64js = require('./chunk-BE7JDL64.js');
102
+ var _chunkTKOFGRU4js = require('./chunk-TKOFGRU4.js');
103
103
 
104
104
 
105
105
 
106
- var _chunkOYJRR3G2js = require('./chunk-OYJRR3G2.js');
106
+ var _chunkZMXNPYFSjs = require('./chunk-ZMXNPYFS.js');
107
107
 
108
108
 
109
109
 
110
110
 
111
111
 
112
- var _chunkEG6NVPP2js = require('./chunk-EG6NVPP2.js');
112
+
113
+
114
+
115
+ var _chunkUVZD7GHGjs = require('./chunk-UVZD7GHG.js');
113
116
  require('./chunk-DGUM43GV.js');
114
117
 
115
118
 
@@ -165,5 +168,8 @@ require('./chunk-DGUM43GV.js');
165
168
 
166
169
 
167
170
 
168
- exports.AdminManagerBase = _chunkDCIF4XJLjs.AdminManagerBase; exports.AdminShell = _chunkC5WFZJM4js.AdminShell; exports.DEFAULT_LIMIT = _chunkPLVG7AW3js.DEFAULT_LIMIT; exports.DEFAULT_PAGE = _chunkPLVG7AW3js.DEFAULT_PAGE; exports.IMAGE_VARIANT_SIZES = _chunkHXVWBFCNjs.IMAGE_VARIANT_SIZES; exports.ImageDropUpload = _chunk6EZ3QE5Njs.ImageDropUpload; exports.JWT_SECRET_MIN_LENGTH = _chunkEG6NVPP2js.JWT_SECRET_MIN_LENGTH; exports.JsonLd = _chunkMUHFEEYWjs.JsonLd; exports.NextApiResponse = _chunkBHN2SRZCjs.NextApiResponse; exports.ResizableImage = _chunkZFORODOXjs.ResizableImage; exports.ToggleSwitch = _chunkVZZ3RU3Qjs.ToggleSwitch; exports.adminFetch = _chunkKWKV2GAHjs.adminFetch; exports.buildPaginatedResult = _chunkS6UUSM7Sjs.buildPaginatedResult; exports.cn = _chunkBHN2SRZCjs.cn; exports.collectR2Keys = _chunk4W3X7OKFjs.collectR2Keys; exports.createSanitizer = _chunkOYJRR3G2js.createSanitizer; exports.deleteFromR2 = _chunkBE7JDL64js.deleteFromR2; exports.deleteR2Keys = _chunk4W3X7OKFjs.deleteR2Keys; exports.extractR2KeysFromHtml = _chunk4W3X7OKFjs.extractR2KeysFromHtml; exports.formatDate = _chunkE5YUAOJIjs.formatDate; exports.formatDateTime = _chunkE5YUAOJIjs.formatDateTime; exports.generateImageVariants = _chunk2REYWBQ6js.generateImageVariants; exports.getAuthHeaders = _chunkKWKV2GAHjs.getAuthHeaders; exports.getCmsConfig = _chunkEG6NVPP2js.getCmsConfig; exports.getJWTManager = _chunkW4FWIZ2Yjs.getJWTManager; exports.getRouteParam = _chunkR5GGIVD4js.getRouteParam; exports.getVariantUrl = _chunkHXVWBFCNjs.getVariantUrl; exports.isR2Enabled = _chunkBE7JDL64js.isR2Enabled; exports.optionalUrlSchema = _chunk7SWW3ZINjs.optionalUrlSchema; exports.parseSortKey = _chunkDSORCGJKjs.parseSortKey; exports.parseSortParam = _chunkPLVG7AW3js.parseSortParam; exports.prisma = _chunkOLEYNPW6js.prisma; exports.refreshAccessToken = _chunkKWKV2GAHjs.refreshAccessToken; exports.resetCmsConfig = _chunkEG6NVPP2js.resetCmsConfig; exports.resizeImageIfNeeded = _chunkS7GOXCRMjs.resizeImageIfNeeded; exports.sanitizeHtmlContent = _chunkOYJRR3G2js.sanitizeHtmlContent; exports.setCmsConfig = _chunkEG6NVPP2js.setCmsConfig; exports.slugSchema = _chunk7SWW3ZINjs.slugSchema; exports.toLocalDatetime = _chunkE5YUAOJIjs.toLocalDatetime; exports.uploadImageWithVariants = _chunkBE7JDL64js.uploadImageWithVariants; exports.uploadToR2 = _chunkBE7JDL64js.uploadToR2; exports.useAdminForm = _chunk5JUIMXNFjs.useAdminForm; exports.useAdminList = _chunk5JUIMXNFjs.useAdminList; exports.useImageDropZone = _chunkYY7K5CXXjs.useImageDropZone; exports.useScrollReveal = _chunkU6PVJKTBjs.useScrollReveal; exports.useScrollRevealAll = _chunkU6PVJKTBjs.useScrollRevealAll; exports.validateAndParse = _chunkDSORCGJKjs.validateAndParse; exports.validateIds = _chunkDSORCGJKjs.validateIds; exports.validateImageSize = _chunkS7GOXCRMjs.validateImageSize; exports.withAdminApi = _chunkJMWXVXK5js.withAdminApi; exports.withAuthApi = _chunkJMWXVXK5js.withAuthApi; exports.withCustomApi = _chunkJMWXVXK5js.withCustomApi; exports.withPublicApi = _chunkJMWXVXK5js.withPublicApi;
171
+
172
+
173
+
174
+ exports.AdminManagerBase = _chunkEPVV6655js.AdminManagerBase; exports.AdminShell = _chunkJPIQU2C4js.AdminShell; exports.DEFAULT_LIMIT = _chunkPLVG7AW3js.DEFAULT_LIMIT; exports.DEFAULT_PAGE = _chunkPLVG7AW3js.DEFAULT_PAGE; exports.IMAGE_VARIANT_SIZES = _chunkHXVWBFCNjs.IMAGE_VARIANT_SIZES; exports.ImageDropUpload = _chunkY3YYIJYGjs.ImageDropUpload; exports.JWT_SECRET_MIN_LENGTH = _chunkUVZD7GHGjs.JWT_SECRET_MIN_LENGTH; exports.JsonLd = _chunkMUHFEEYWjs.JsonLd; exports.NextApiResponse = _chunkBHN2SRZCjs.NextApiResponse; exports.ResizableImage = _chunkZFORODOXjs.ResizableImage; exports.SHARED_ANON_IDENTITY = _chunkUVZD7GHGjs.SHARED_ANON_IDENTITY; exports.ToggleSwitch = _chunkVZZ3RU3Qjs.ToggleSwitch; exports.adminFetch = _chunkJ32BTYJZjs.adminFetch; exports.buildPaginatedResult = _chunkS6UUSM7Sjs.buildPaginatedResult; exports.cn = _chunkBHN2SRZCjs.cn; exports.collectR2Keys = _chunk5Z5XUR2Kjs.collectR2Keys; exports.createForwardedIdentityExtractor = _chunkUVZD7GHGjs.createForwardedIdentityExtractor; exports.createSanitizer = _chunkZMXNPYFSjs.createSanitizer; exports.deleteFromR2 = _chunkTKOFGRU4js.deleteFromR2; exports.deleteR2Keys = _chunk5Z5XUR2Kjs.deleteR2Keys; exports.extractR2KeysFromHtml = _chunk5Z5XUR2Kjs.extractR2KeysFromHtml; exports.formatDate = _chunkE5YUAOJIjs.formatDate; exports.formatDateTime = _chunkE5YUAOJIjs.formatDateTime; exports.generateImageVariants = _chunk2REYWBQ6js.generateImageVariants; exports.getAuthHeaders = _chunkJ32BTYJZjs.getAuthHeaders; exports.getCmsConfig = _chunkUVZD7GHGjs.getCmsConfig; exports.getJWTManager = _chunkHVB72GT3js.getJWTManager; exports.getRouteParam = _chunkR5GGIVD4js.getRouteParam; exports.getVariantUrl = _chunkHXVWBFCNjs.getVariantUrl; exports.hasIdentityExtractor = _chunkUVZD7GHGjs.hasIdentityExtractor; exports.isR2Enabled = _chunkTKOFGRU4js.isR2Enabled; exports.optionalUrlSchema = _chunk7SWW3ZINjs.optionalUrlSchema; exports.parseSortKey = _chunkDSORCGJKjs.parseSortKey; exports.parseSortParam = _chunkPLVG7AW3js.parseSortParam; exports.prisma = _chunkOLEYNPW6js.prisma; exports.refreshAccessToken = _chunkJ32BTYJZjs.refreshAccessToken; exports.resetCmsConfig = _chunkUVZD7GHGjs.resetCmsConfig; exports.resizeImageIfNeeded = _chunkS7GOXCRMjs.resizeImageIfNeeded; exports.sanitizeHtmlContent = _chunkZMXNPYFSjs.sanitizeHtmlContent; exports.setCmsConfig = _chunkUVZD7GHGjs.setCmsConfig; exports.slugSchema = _chunk7SWW3ZINjs.slugSchema; exports.toLocalDatetime = _chunkE5YUAOJIjs.toLocalDatetime; exports.uploadImageWithVariants = _chunkTKOFGRU4js.uploadImageWithVariants; exports.uploadToR2 = _chunkTKOFGRU4js.uploadToR2; exports.useAdminForm = _chunk2VHNZWH2js.useAdminForm; exports.useAdminList = _chunk2VHNZWH2js.useAdminList; exports.useImageDropZone = _chunkOHJISVGCjs.useImageDropZone; exports.useScrollReveal = _chunkU6PVJKTBjs.useScrollReveal; exports.useScrollRevealAll = _chunkU6PVJKTBjs.useScrollRevealAll; exports.validateAndParse = _chunkDSORCGJKjs.validateAndParse; exports.validateIds = _chunkDSORCGJKjs.validateIds; exports.validateImageSize = _chunkS7GOXCRMjs.validateImageSize; exports.withAdminApi = _chunk25GMHPCWjs.withAdminApi; exports.withAuthApi = _chunk25GMHPCWjs.withAuthApi; exports.withCustomApi = _chunk25GMHPCWjs.withCustomApi; exports.withPublicApi = _chunk25GMHPCWjs.withPublicApi;
169
175
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/uni4love/project/workspace/211-withwiz/node-packages/withwiz-cms-kit/dist/index.js"],"names":[],"mappings":"AAAA,wGAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,i/FAAC","file":"/Users/uni4love/project/workspace/211-withwiz/node-packages/withwiz-cms-kit/dist/index.js"}
1
+ {"version":3,"sources":["/Users/uni4love/project/workspace/211-withwiz/node-packages/withwiz-cms-kit/dist/index.js"],"names":[],"mappings":"AAAA,wGAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,2tGAAC","file":"/Users/uni4love/project/workspace/211-withwiz/node-packages/withwiz-cms-kit/dist/index.js"}
package/dist/index.mjs CHANGED
@@ -5,14 +5,14 @@ import {
5
5
  } from "./chunk-2SYUEQ6J.mjs";
6
6
  import {
7
7
  ImageDropUpload
8
- } from "./chunk-OBNALAMG.mjs";
8
+ } from "./chunk-BG4C5KZO.mjs";
9
9
  import {
10
10
  AdminManagerBase
11
- } from "./chunk-ZULSFSDG.mjs";
11
+ } from "./chunk-MWX5B4DP.mjs";
12
12
  import "./chunk-6ES4W2DL.mjs";
13
13
  import {
14
14
  AdminShell
15
- } from "./chunk-FEPGJ7WN.mjs";
15
+ } from "./chunk-MN27HJKW.mjs";
16
16
  import {
17
17
  JsonLd
18
18
  } from "./chunk-3Y2TQCHU.mjs";
@@ -30,17 +30,17 @@ import {
30
30
  import {
31
31
  useAdminForm,
32
32
  useAdminList
33
- } from "./chunk-FCCCG5Z7.mjs";
33
+ } from "./chunk-MXXC4U3D.mjs";
34
34
  import {
35
35
  useImageDropZone
36
- } from "./chunk-LF5LOI7K.mjs";
36
+ } from "./chunk-FCWUNCGA.mjs";
37
37
  import "./chunk-AXR56AUD.mjs";
38
38
  import {
39
39
  withAdminApi,
40
40
  withAuthApi,
41
41
  withCustomApi,
42
42
  withPublicApi
43
- } from "./chunk-LDFE33ML.mjs";
43
+ } from "./chunk-7F5YFG2W.mjs";
44
44
  import {
45
45
  DEFAULT_LIMIT,
46
46
  DEFAULT_PAGE,
@@ -62,7 +62,7 @@ import {
62
62
  } from "./chunk-3ILEMZAL.mjs";
63
63
  import {
64
64
  getJWTManager
65
- } from "./chunk-5RDMODGV.mjs";
65
+ } from "./chunk-N7LMNP4W.mjs";
66
66
  import {
67
67
  getRouteParam
68
68
  } from "./chunk-TUQ2CVAK.mjs";
@@ -84,12 +84,12 @@ import {
84
84
  adminFetch,
85
85
  getAuthHeaders,
86
86
  refreshAccessToken
87
- } from "./chunk-T7EVFD4G.mjs";
87
+ } from "./chunk-47DPXAO6.mjs";
88
88
  import {
89
89
  collectR2Keys,
90
90
  deleteR2Keys,
91
91
  extractR2KeysFromHtml
92
- } from "./chunk-EM4MQEWV.mjs";
92
+ } from "./chunk-SN3XOMF6.mjs";
93
93
  import {
94
94
  IMAGE_VARIANT_SIZES,
95
95
  getVariantUrl
@@ -99,17 +99,20 @@ import {
99
99
  isR2Enabled,
100
100
  uploadImageWithVariants,
101
101
  uploadToR2
102
- } from "./chunk-YEQFKOWD.mjs";
102
+ } from "./chunk-GQJNLE34.mjs";
103
103
  import {
104
104
  createSanitizer,
105
105
  sanitizeHtmlContent
106
- } from "./chunk-CGVFB23E.mjs";
106
+ } from "./chunk-A557FA2K.mjs";
107
107
  import {
108
108
  JWT_SECRET_MIN_LENGTH,
109
+ SHARED_ANON_IDENTITY,
110
+ createForwardedIdentityExtractor,
109
111
  getCmsConfig,
112
+ hasIdentityExtractor,
110
113
  resetCmsConfig,
111
114
  setCmsConfig
112
- } from "./chunk-BWKKHCDG.mjs";
115
+ } from "./chunk-3UXX27N5.mjs";
113
116
  import "./chunk-BJTO5JO5.mjs";
114
117
  export {
115
118
  AdminManagerBase,
@@ -122,11 +125,13 @@ export {
122
125
  JsonLd,
123
126
  NextApiResponse,
124
127
  ResizableImage,
128
+ SHARED_ANON_IDENTITY,
125
129
  ToggleSwitch,
126
130
  adminFetch,
127
131
  buildPaginatedResult,
128
132
  cn,
129
133
  collectR2Keys,
134
+ createForwardedIdentityExtractor,
130
135
  createSanitizer,
131
136
  deleteFromR2,
132
137
  deleteR2Keys,
@@ -139,6 +144,7 @@ export {
139
144
  getJWTManager,
140
145
  getRouteParam,
141
146
  getVariantUrl,
147
+ hasIdentityExtractor,
142
148
  isR2Enabled,
143
149
  optionalUrlSchema,
144
150
  parseSortKey,