@ddunigma/node 5.0.0 → 6.0.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 (66) hide show
  1. package/CHANGELOG.md +234 -0
  2. package/README.md +32 -166
  3. package/ROADMAP.md +92 -0
  4. package/dist/BrowserAdapter-A6RBN4N3.js +1 -0
  5. package/dist/BrowserAdapter-NWASGV3D.cjs +1 -0
  6. package/dist/NodeAdapter-4R7CNTHP.cjs +1 -0
  7. package/dist/NodeAdapter-YP22CLUP.js +1 -0
  8. package/dist/ObfuscationLayer-4rCOCRWH.d.cts +89 -0
  9. package/dist/ObfuscationLayer-DTlA723P.d.ts +89 -0
  10. package/dist/{ObfuscationLayer-BDr-0s1M.d.ts → WebStreams-C16QV2Dz.d.ts} +43 -101
  11. package/dist/{ObfuscationLayer-BgL73E5F.d.cts → WebStreams-CY9E19f5.d.cts} +43 -101
  12. package/dist/browser.cjs +1 -2
  13. package/dist/browser.d.cts +28 -24
  14. package/dist/browser.d.ts +28 -24
  15. package/dist/browser.js +1 -2
  16. package/dist/chunk-6N7QYPEJ.js +1 -0
  17. package/dist/chunk-6ZYMNHFT.js +1 -0
  18. package/dist/chunk-76X5J2OF.cjs +1 -0
  19. package/dist/chunk-7EPVCA2F.js +1 -0
  20. package/dist/chunk-7KUEHTG2.js +1 -0
  21. package/dist/chunk-BCUBYE76.cjs +1 -0
  22. package/dist/chunk-BDP7E7K3.cjs +1 -0
  23. package/dist/chunk-EI7MMDWY.js +1 -0
  24. package/dist/chunk-HUUB5BUS.cjs +1 -0
  25. package/dist/chunk-IZK7KCU7.js +1 -0
  26. package/dist/chunk-JBUTKSCC.cjs +9 -0
  27. package/dist/chunk-JY2ZPBJK.cjs +1 -0
  28. package/dist/chunk-LCOYWJWO.cjs +1 -0
  29. package/dist/chunk-Q6SCBUV2.js +1 -0
  30. package/dist/chunk-VW2SZR2Z.js +9 -0
  31. package/dist/chunk-ZTGECGM2.cjs +1 -0
  32. package/dist/{errors-DNICpo4L.d.cts → core-BsIwjJK-.d.cts} +137 -74
  33. package/dist/{errors-DNICpo4L.d.ts → core-BsIwjJK-.d.ts} +137 -74
  34. package/dist/core.cjs +1 -2
  35. package/dist/core.d.cts +1 -40
  36. package/dist/core.d.ts +1 -40
  37. package/dist/core.js +1 -2
  38. package/dist/index.cjs +1 -2
  39. package/dist/index.d.cts +36 -83
  40. package/dist/index.d.ts +36 -83
  41. package/dist/index.js +1 -2
  42. package/dist/secure.browser.cjs +1 -0
  43. package/dist/secure.browser.d.cts +19 -0
  44. package/dist/secure.browser.d.ts +19 -0
  45. package/dist/secure.browser.js +1 -0
  46. package/dist/secure.cjs +1 -0
  47. package/dist/secure.d.cts +111 -0
  48. package/dist/secure.d.ts +111 -0
  49. package/dist/secure.js +1 -0
  50. package/docs/REFERENCE.md +242 -0
  51. package/package.json +58 -17
  52. package/dist/BrowserAdapter-HORDDCOE.js +0 -2
  53. package/dist/BrowserAdapter-PB4J6FHX.cjs +0 -2
  54. package/dist/NodeAdapter-5FBNCJSG.js +0 -2
  55. package/dist/NodeAdapter-EQ73FGEJ.cjs +0 -2
  56. package/dist/chunk-5NSHXTMN.cjs +0 -2
  57. package/dist/chunk-7RWUNW5S.js +0 -2
  58. package/dist/chunk-AMOZHHMB.cjs +0 -2
  59. package/dist/chunk-CQATQOBZ.js +0 -2
  60. package/dist/chunk-HTZT725P.js +0 -10
  61. package/dist/chunk-HZJ7PU7X.cjs +0 -2
  62. package/dist/chunk-KS6PRP5Y.js +0 -2
  63. package/dist/chunk-OQXMQIE3.js +0 -2
  64. package/dist/chunk-UMA4JEN4.cjs +0 -10
  65. package/dist/chunk-WCXD5LRF.cjs +0 -2
  66. package/dist/wasm/codec.wasm +0 -0
@@ -0,0 +1,89 @@
1
+ import { O as ObfuscationLayer } from './core-BsIwjJK-.cjs';
2
+
3
+ /**
4
+ * Runtime detection helpers with no platform-specific imports.
5
+ *
6
+ * @module adapters/runtime
7
+ */
8
+ /** 감지된 런타임 환경 식별자 */
9
+ type RuntimeId = "node" | "browser" | "edge" | "deno" | "bun" | "unknown";
10
+ /**
11
+ * 현재 JavaScript 런타임 환경을 감지합니다.
12
+ *
13
+ * 감지는 순수하게 globalThis 검사에 기반하며 Node.js 내장 모듈을 임포트하지 않습니다.
14
+ */
15
+ declare function detectRuntime(): RuntimeId;
16
+
17
+ /**
18
+ * 한글 음절 난독화 레이어 구현.
19
+ *
20
+ * 암호화된 charset 인코딩 문자열을 결정론적 전단사 매핑을 사용하여
21
+ * 자연스러운 한국어 음절 블록으로 변환합니다. 매핑은 다음을 보장합니다:
22
+ * - 모든 출력 문자가 유효한 한국어 음절 블록 (U+AC00–U+D7A3)
23
+ * - 단일 문자 빈도가 기대 균등 빈도의 3배를 초과하지 않음
24
+ * - 출력 길이 <= 입력 길이의 1.5배 (실제로는 1:1 매핑)
25
+ *
26
+ * 플랫폼 독립적: Node.js 임포트 없음.
27
+ *
28
+ * @module obfuscation/ObfuscationLayer
29
+ */
30
+
31
+ /**
32
+ * 한글 음절 매핑을 사용하여 ObfuscationLayer 인터페이스를 구현합니다.
33
+ *
34
+ * 입력 알파벳(인코더가 사용하는 charset 문자)이 주어지면,
35
+ * 이 레이어는 각 문자를 결정론적으로 한글 음절에 매핑합니다.
36
+ * 매핑은 전단사(가역적)이며 위치에 따라 각 문자의 할당된 음절 범위를
37
+ * 순환하여 출력 빈도를 균등하게 분배합니다.
38
+ */
39
+ declare class HangulObfuscationLayer implements ObfuscationLayer {
40
+ private readonly config;
41
+ /**
42
+ * 새 HangulObfuscationLayer를 생성합니다.
43
+ *
44
+ * @param alphabet - 완전한 입력 알파벳 (charset 문자 + 패딩 문자).
45
+ * 인코딩된 문자열에 나타날 수 있는 모든 고유 문자.
46
+ */
47
+ constructor(alphabet: string[]);
48
+ /**
49
+ * 암호화된 charset 인코딩 문자열을 한글 음절로 변환합니다.
50
+ *
51
+ * 각 입력 문자는 할당된 범위의 한글 음절에 매핑됩니다.
52
+ * 문자열 내 위치가 범위 내 어떤 음절을 사용할지 결정하여
53
+ * 균등한 빈도 분포를 보장합니다.
54
+ *
55
+ * @param input - 암호화된 charset 인코딩 문자열
56
+ * @returns 한글 음절 블록 문자열 (U+AC00–U+D7A3)
57
+ * @throws 입력에 알파벳에 없는 문자가 포함된 경우 에러
58
+ */
59
+ obfuscate(input: string): string;
60
+ /**
61
+ * 난독화를 역변환하여 원본 charset 인코딩 문자열을 복원합니다.
62
+ *
63
+ * 각 한글 음절이 어떤 문자의 범위에 속하는지 판별하여
64
+ * 원래 문자로 매핑합니다.
65
+ *
66
+ * @param input - 난독화된 한글 음절 문자열
67
+ * @returns 원본 charset 인코딩 문자열
68
+ * @throws 입력에 유효한 한글 음절 범위 밖의 문자가 포함되거나
69
+ * 알파벳 문자에 매핑되지 않는 문자가 포함된 경우 에러
70
+ */
71
+ deobfuscate(input: string): string;
72
+ }
73
+ /**
74
+ * Ddu64 인코더 출력과 호환되는 ObfuscationLayer를 생성합니다.
75
+ *
76
+ * charset/패딩 외에 footer 마커(ELYSIA/GRISEO/ENC/V3/V4)와 숫자(0-9)까지 알파벳에
77
+ * 포함하므로, 압축/암호화/파이프라인 마커가 붙은 실제 인코더 출력도 안전하게
78
+ * deobfuscate할 수 있습니다.
79
+ *
80
+ * 일반적으로는 `Ddu64`의 `obfuscate` 옵션을 쓰는 것으로 충분하며, 이 헬퍼는 인코더와
81
+ * 동일한 난독화 매핑을 외부에서 재현해야 할 때 사용합니다.
82
+ *
83
+ * @param charSet - 인코딩에 사용되는 charset 문자
84
+ * @param paddingChar - 패딩 문자
85
+ * @returns 인코더 호환 ObfuscationLayer 인스턴스
86
+ */
87
+ declare function createEncoderObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;
88
+
89
+ export { HangulObfuscationLayer as H, createEncoderObfuscationLayer as c, detectRuntime as d };
@@ -0,0 +1,89 @@
1
+ import { O as ObfuscationLayer } from './core-BsIwjJK-.js';
2
+
3
+ /**
4
+ * Runtime detection helpers with no platform-specific imports.
5
+ *
6
+ * @module adapters/runtime
7
+ */
8
+ /** 감지된 런타임 환경 식별자 */
9
+ type RuntimeId = "node" | "browser" | "edge" | "deno" | "bun" | "unknown";
10
+ /**
11
+ * 현재 JavaScript 런타임 환경을 감지합니다.
12
+ *
13
+ * 감지는 순수하게 globalThis 검사에 기반하며 Node.js 내장 모듈을 임포트하지 않습니다.
14
+ */
15
+ declare function detectRuntime(): RuntimeId;
16
+
17
+ /**
18
+ * 한글 음절 난독화 레이어 구현.
19
+ *
20
+ * 암호화된 charset 인코딩 문자열을 결정론적 전단사 매핑을 사용하여
21
+ * 자연스러운 한국어 음절 블록으로 변환합니다. 매핑은 다음을 보장합니다:
22
+ * - 모든 출력 문자가 유효한 한국어 음절 블록 (U+AC00–U+D7A3)
23
+ * - 단일 문자 빈도가 기대 균등 빈도의 3배를 초과하지 않음
24
+ * - 출력 길이 <= 입력 길이의 1.5배 (실제로는 1:1 매핑)
25
+ *
26
+ * 플랫폼 독립적: Node.js 임포트 없음.
27
+ *
28
+ * @module obfuscation/ObfuscationLayer
29
+ */
30
+
31
+ /**
32
+ * 한글 음절 매핑을 사용하여 ObfuscationLayer 인터페이스를 구현합니다.
33
+ *
34
+ * 입력 알파벳(인코더가 사용하는 charset 문자)이 주어지면,
35
+ * 이 레이어는 각 문자를 결정론적으로 한글 음절에 매핑합니다.
36
+ * 매핑은 전단사(가역적)이며 위치에 따라 각 문자의 할당된 음절 범위를
37
+ * 순환하여 출력 빈도를 균등하게 분배합니다.
38
+ */
39
+ declare class HangulObfuscationLayer implements ObfuscationLayer {
40
+ private readonly config;
41
+ /**
42
+ * 새 HangulObfuscationLayer를 생성합니다.
43
+ *
44
+ * @param alphabet - 완전한 입력 알파벳 (charset 문자 + 패딩 문자).
45
+ * 인코딩된 문자열에 나타날 수 있는 모든 고유 문자.
46
+ */
47
+ constructor(alphabet: string[]);
48
+ /**
49
+ * 암호화된 charset 인코딩 문자열을 한글 음절로 변환합니다.
50
+ *
51
+ * 각 입력 문자는 할당된 범위의 한글 음절에 매핑됩니다.
52
+ * 문자열 내 위치가 범위 내 어떤 음절을 사용할지 결정하여
53
+ * 균등한 빈도 분포를 보장합니다.
54
+ *
55
+ * @param input - 암호화된 charset 인코딩 문자열
56
+ * @returns 한글 음절 블록 문자열 (U+AC00–U+D7A3)
57
+ * @throws 입력에 알파벳에 없는 문자가 포함된 경우 에러
58
+ */
59
+ obfuscate(input: string): string;
60
+ /**
61
+ * 난독화를 역변환하여 원본 charset 인코딩 문자열을 복원합니다.
62
+ *
63
+ * 각 한글 음절이 어떤 문자의 범위에 속하는지 판별하여
64
+ * 원래 문자로 매핑합니다.
65
+ *
66
+ * @param input - 난독화된 한글 음절 문자열
67
+ * @returns 원본 charset 인코딩 문자열
68
+ * @throws 입력에 유효한 한글 음절 범위 밖의 문자가 포함되거나
69
+ * 알파벳 문자에 매핑되지 않는 문자가 포함된 경우 에러
70
+ */
71
+ deobfuscate(input: string): string;
72
+ }
73
+ /**
74
+ * Ddu64 인코더 출력과 호환되는 ObfuscationLayer를 생성합니다.
75
+ *
76
+ * charset/패딩 외에 footer 마커(ELYSIA/GRISEO/ENC/V3/V4)와 숫자(0-9)까지 알파벳에
77
+ * 포함하므로, 압축/암호화/파이프라인 마커가 붙은 실제 인코더 출력도 안전하게
78
+ * deobfuscate할 수 있습니다.
79
+ *
80
+ * 일반적으로는 `Ddu64`의 `obfuscate` 옵션을 쓰는 것으로 충분하며, 이 헬퍼는 인코더와
81
+ * 동일한 난독화 매핑을 외부에서 재현해야 할 때 사용합니다.
82
+ *
83
+ * @param charSet - 인코딩에 사용되는 charset 문자
84
+ * @param paddingChar - 패딩 문자
85
+ * @returns 인코더 호환 ObfuscationLayer 인스턴스
86
+ */
87
+ declare function createEncoderObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;
88
+
89
+ export { HangulObfuscationLayer as H, createEncoderObfuscationLayer as c, detectRuntime as d };
@@ -1,4 +1,4 @@
1
- import { P as PlatformAdapter, y as KeyDerivationOptions, D as Ddu64Core, u as DduOptions, O as ObfuscationLayer } from './errors-DNICpo4L.js';
1
+ import { P as PlatformAdapter, I as KeyDerivationOptions, D as Ddu64Core, F as DduSecureConstructorOptions, H as DduStreamOptions } from './core-BsIwjJK-.js';
2
2
 
3
3
  /**
4
4
  * 브라우저 플랫폼 어댑터 구현.
@@ -19,11 +19,8 @@ import { P as PlatformAdapter, y as KeyDerivationOptions, D as Ddu64Core, u as D
19
19
  * - 런타임이 지원하는 경우 Brotli 압축
20
20
  */
21
21
  declare class BrowserAdapter implements PlatformAdapter {
22
- readonly supportsSyncCrypto = false;
23
- readonly supportsSyncCompression = false;
24
22
  readonly runtime: "browser" | "edge" | "deno" | "bun";
25
23
  constructor(runtime?: "browser" | "edge" | "deno" | "bun");
26
- get supportsBrotli(): boolean;
27
24
  /**
28
25
  * UTF-8 키 문자열에서 SHA-256을 통해 256비트 키를 파생합니다.
29
26
  * UTF-8 인코딩된 키에 SubtleCrypto.digest('SHA-256', ...)를 사용합니다.
@@ -77,18 +74,37 @@ declare class BrowserAdapter implements PlatformAdapter {
77
74
  }
78
75
 
79
76
  /**
80
- * Runtime detection helpers with no platform-specific imports.
77
+ * Browser 전용 secure Ddu64 래퍼.
81
78
  *
82
- * @module adapters/runtime
79
+ * Ddu64Core를 확장하여 압축/암호화/체크섬(배터리 포함)을 지원합니다:
80
+ * - BrowserAdapter 자동 주입 (WebCrypto/CompressionStream) → 비동기 압축/암호화/체크섬
81
+ * - HangulObfuscationLayer 자동 주입 → 한글 난독화 사용 가능
82
+ *
83
+ * Node.js 내장 모듈을 정적으로 import하지 않으므로 브라우저 번들에 crypto/zlib가
84
+ * 끌려오지 않습니다. 구 `Ddu64Browser`의 배터리 동작을 계승합니다.
85
+ *
86
+ * @module Ddu64SecureBrowser
83
87
  */
84
- /** 감지된 런타임 환경 식별자 */
85
- type RuntimeId = "node" | "browser" | "edge" | "deno" | "bun" | "unknown";
88
+
86
89
  /**
87
- * 현재 JavaScript 런타임 환경을 감지합니다.
90
+ * Browser 전용 secure Ddu64 인코더/디코더.
91
+ *
92
+ * Ddu64Core를 래핑하여 자동 BrowserAdapter 주입(WebCrypto/CompressionStream 기반
93
+ * 압축/암호화/체크섬)을 제공합니다. 동기 압축/암호화 메서드는 지원하지 않으며
94
+ * `encodeAsync`/`decodeAsync` 계열을 사용해야 합니다.
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * import { Ddu64SecureBrowser } from '@ddunigma/node/secure';
88
99
  *
89
- * 감지는 순수하게 globalThis 검사에 기반하며 Node.js 내장 모듈을 임포트하지 않습니다.
100
+ * const encoder = new Ddu64SecureBrowser(undefined, undefined, { encryptionKey: 'key' });
101
+ * const encoded = await encoder.encodeAsync('Hello', { compress: true });
102
+ * const decoded = await encoder.decodeAsync(encoded);
103
+ * ```
90
104
  */
91
- declare function detectRuntime(): RuntimeId;
105
+ declare class Ddu64SecureBrowser extends Ddu64Core {
106
+ constructor(dduChar?: string[] | string | DduSecureConstructorOptions, paddingChar?: string, dduOptions?: DduSecureConstructorOptions);
107
+ }
92
108
 
93
109
  /**
94
110
  * ddunigma Web Streams API 구현.
@@ -101,6 +117,13 @@ declare function detectRuntime(): RuntimeId;
101
117
  * - 인코딩: 압축/암호화/체크섬 비활성화 + 2의 제곱수 charset에서 청크 단위 출력
102
118
  * - 디코딩: footer의 압축/암호화 마커를 최종 신뢰하기 위해 payload를 축적 후 처리
103
119
  *
120
+ * 메타데이터 의미 주의:
121
+ * 스트림 헤더의 압축 플래그(D/B/N)는 압축이 "요청"되었는지를 기록하고, 페이로드 footer는
122
+ * 실제로 압축이 "적용"되었는지를 기록합니다. 작은/비압축성 데이터는 압축 결과가 원본보다
123
+ * 커서 적용되지 않을 수 있으므로 헤더가 D/B여도 footer엔 압축 마커가 없을 수 있습니다.
124
+ * 디코더는 항상 footer를 권위 있는 소스로 신뢰하므로 라운드트립은 정상이며, 헤더 플래그는
125
+ * 어디까지나 "요청" 힌트로만 해석해야 합니다.
126
+ *
104
127
  * 스트림 헤더 형식: [pad]DDS1[D|B|N][1|0][pad]
105
128
  * D=deflate, B=brotli, N=없음 (압축), 1/0 (암호화).
106
129
  *
@@ -114,11 +137,16 @@ declare function detectRuntime(): RuntimeId;
114
137
  * 압축/암호화/체크섬이 비활성화되고 charset이 2의 제곱수일 때 각 청크를 즉시 인코딩합니다.
115
138
  * 그 외에는 전체 데이터를 축적한 후 flush에서 처리합니다.
116
139
  *
140
+ * 암호화 정책: 스트림 암호화 여부는 **인코더가 키를 보유했는지로만** 결정됩니다
141
+ * (`encryptionKey` 설정 시 항상 암호화). 스트림 옵션 타입(`DduStreamOptions`)에는 `encrypt`가
142
+ * 노출되지 않으며, 내부 옵션으로 `encrypt: false`를 주더라도 키가 있으면 무시되고 암호화됩니다.
143
+ * 평문 스트림이 필요하면 키 없는 인코더 인스턴스를 사용하세요.
144
+ *
117
145
  * @param encoder - 인코딩에 사용할 Ddu64Core 인스턴스
118
- * @param options - 인코딩 옵션 (compress, encrypt, compressionAlgorithm 등)
146
+ * @param options - 인코딩 옵션 (compress, compressionAlgorithm 등)
119
147
  * @returns TransformStream<Uint8Array, string>
120
148
  */
121
- declare function createReadableEncodeStream(encoder: Ddu64Core, options?: DduOptions): TransformStream<Uint8Array, string>;
149
+ declare function createReadableEncodeStream(encoder: Ddu64Core, options?: DduStreamOptions): TransformStream<Uint8Array, string>;
122
150
  /**
123
151
  * charset 인코딩 문자열을 바이너리 데이터로 역변환하는
124
152
  * Web Streams API TransformStream을 생성합니다.
@@ -130,92 +158,6 @@ declare function createReadableEncodeStream(encoder: Ddu64Core, options?: DduOpt
130
158
  * @param options - 디코딩 옵션
131
159
  * @returns TransformStream<string, Uint8Array>
132
160
  */
133
- declare function createReadableDecodeStream(encoder: Ddu64Core, options?: DduOptions): TransformStream<string, Uint8Array>;
134
-
135
- /**
136
- * 한글 음절 난독화 레이어 구현.
137
- *
138
- * 암호화된 charset 인코딩 문자열을 결정론적 전단사 매핑을 사용하여
139
- * 자연스러운 한국어 음절 블록으로 변환합니다. 매핑은 다음을 보장합니다:
140
- * - 모든 출력 문자가 유효한 한국어 음절 블록 (U+AC00–U+D7A3)
141
- * - 단일 문자 빈도가 기대 균등 빈도의 3배를 초과하지 않음
142
- * - 출력 길이 <= 입력 길이의 1.5배 (실제로는 1:1 매핑)
143
- *
144
- * 플랫폼 독립적: Node.js 임포트 없음.
145
- *
146
- * @module obfuscation/ObfuscationLayer
147
- */
148
-
149
- /**
150
- * 한글 음절 매핑을 사용하여 ObfuscationLayer 인터페이스를 구현합니다.
151
- *
152
- * 입력 알파벳(인코더가 사용하는 charset 문자)이 주어지면,
153
- * 이 레이어는 각 문자를 결정론적으로 한글 음절에 매핑합니다.
154
- * 매핑은 전단사(가역적)이며 위치에 따라 각 문자의 할당된 음절 범위를
155
- * 순환하여 출력 빈도를 균등하게 분배합니다.
156
- */
157
- declare class HangulObfuscationLayer implements ObfuscationLayer {
158
- private readonly config;
159
- /**
160
- * 새 HangulObfuscationLayer를 생성합니다.
161
- *
162
- * @param alphabet - 완전한 입력 알파벳 (charset 문자 + 패딩 문자).
163
- * 인코딩된 문자열에 나타날 수 있는 모든 고유 문자.
164
- */
165
- constructor(alphabet: string[]);
166
- /**
167
- * 암호화된 charset 인코딩 문자열을 한글 음절로 변환합니다.
168
- *
169
- * 각 입력 문자는 할당된 범위의 한글 음절에 매핑됩니다.
170
- * 문자열 내 위치가 범위 내 어떤 음절을 사용할지 결정하여
171
- * 균등한 빈도 분포를 보장합니다.
172
- *
173
- * @param input - 암호화된 charset 인코딩 문자열
174
- * @returns 한글 음절 블록 문자열 (U+AC00–U+D7A3)
175
- * @throws 입력에 알파벳에 없는 문자가 포함된 경우 에러
176
- */
177
- obfuscate(input: string): string;
178
- /**
179
- * 난독화를 역변환하여 원본 charset 인코딩 문자열을 복원합니다.
180
- *
181
- * 각 한글 음절이 어떤 문자의 범위에 속하는지 판별하여
182
- * 원래 문자로 매핑합니다.
183
- *
184
- * @param input - 난독화된 한글 음절 문자열
185
- * @returns 원본 charset 인코딩 문자열
186
- * @throws 입력에 유효한 한글 음절 범위 밖의 문자가 포함되거나
187
- * 알파벳 문자에 매핑되지 않는 문자가 포함된 경우 에러
188
- */
189
- deobfuscate(input: string): string;
190
- }
191
- /**
192
- * 주어진 charset 설정에 대한 ObfuscationLayer를 생성합니다.
193
- *
194
- * @deprecated 인코더 출력과 호환되지 않습니다(charset/패딩만 포함, footer 마커·숫자 미포함).
195
- * 인코더 출력을 deobfuscate하려면 `createEncoderObfuscationLayer`를, 일반 난독화는 `Ddu64`의
196
- * `obfuscate` 옵션을 사용하세요. 이 함수는 다음 메이저에서 제거될 수 있습니다.
197
- *
198
- * charset 문자와 패딩 문자로부터 알파벳을 구성한 후 한글 난독화 레이어를 생성합니다.
199
- *
200
- * @param charSet - 인코딩에 사용되는 charset 문자
201
- * @param paddingChar - 패딩 문자
202
- * @returns ObfuscationLayer 인스턴스
203
- */
204
- declare function createObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;
205
- /**
206
- * Ddu64 인코더 출력과 호환되는 ObfuscationLayer를 생성합니다.
207
- *
208
- * `createObfuscationLayer`와 달리 charset/패딩 외에 footer 마커
209
- * (ELYSIA/GRISEO/ENC/V3/V4)와 숫자(0-9)까지 알파벳에 포함하므로, 압축/암호화/파이프라인
210
- * 마커가 붙은 실제 인코더 출력도 안전하게 deobfuscate할 수 있습니다.
211
- *
212
- * 일반적으로는 `Ddu64`의 `obfuscate` 옵션을 쓰는 것으로 충분하며, 이 헬퍼는 인코더와
213
- * 동일한 난독화 매핑을 외부에서 재현해야 할 때 사용합니다.
214
- *
215
- * @param charSet - 인코딩에 사용되는 charset 문자
216
- * @param paddingChar - 패딩 문자
217
- * @returns 인코더 호환 ObfuscationLayer 인스턴스
218
- */
219
- declare function createEncoderObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;
161
+ declare function createReadableDecodeStream(encoder: Ddu64Core, options?: DduStreamOptions): TransformStream<string, Uint8Array>;
220
162
 
221
- export { BrowserAdapter as B, HangulObfuscationLayer as H, createObfuscationLayer as a, createReadableDecodeStream as b, createEncoderObfuscationLayer as c, createReadableEncodeStream as d, detectRuntime as e };
163
+ export { BrowserAdapter as B, Ddu64SecureBrowser as D, createReadableEncodeStream as a, createReadableDecodeStream as c };
@@ -1,4 +1,4 @@
1
- import { P as PlatformAdapter, y as KeyDerivationOptions, D as Ddu64Core, u as DduOptions, O as ObfuscationLayer } from './errors-DNICpo4L.cjs';
1
+ import { P as PlatformAdapter, I as KeyDerivationOptions, D as Ddu64Core, F as DduSecureConstructorOptions, H as DduStreamOptions } from './core-BsIwjJK-.cjs';
2
2
 
3
3
  /**
4
4
  * 브라우저 플랫폼 어댑터 구현.
@@ -19,11 +19,8 @@ import { P as PlatformAdapter, y as KeyDerivationOptions, D as Ddu64Core, u as D
19
19
  * - 런타임이 지원하는 경우 Brotli 압축
20
20
  */
21
21
  declare class BrowserAdapter implements PlatformAdapter {
22
- readonly supportsSyncCrypto = false;
23
- readonly supportsSyncCompression = false;
24
22
  readonly runtime: "browser" | "edge" | "deno" | "bun";
25
23
  constructor(runtime?: "browser" | "edge" | "deno" | "bun");
26
- get supportsBrotli(): boolean;
27
24
  /**
28
25
  * UTF-8 키 문자열에서 SHA-256을 통해 256비트 키를 파생합니다.
29
26
  * UTF-8 인코딩된 키에 SubtleCrypto.digest('SHA-256', ...)를 사용합니다.
@@ -77,18 +74,37 @@ declare class BrowserAdapter implements PlatformAdapter {
77
74
  }
78
75
 
79
76
  /**
80
- * Runtime detection helpers with no platform-specific imports.
77
+ * Browser 전용 secure Ddu64 래퍼.
81
78
  *
82
- * @module adapters/runtime
79
+ * Ddu64Core를 확장하여 압축/암호화/체크섬(배터리 포함)을 지원합니다:
80
+ * - BrowserAdapter 자동 주입 (WebCrypto/CompressionStream) → 비동기 압축/암호화/체크섬
81
+ * - HangulObfuscationLayer 자동 주입 → 한글 난독화 사용 가능
82
+ *
83
+ * Node.js 내장 모듈을 정적으로 import하지 않으므로 브라우저 번들에 crypto/zlib가
84
+ * 끌려오지 않습니다. 구 `Ddu64Browser`의 배터리 동작을 계승합니다.
85
+ *
86
+ * @module Ddu64SecureBrowser
83
87
  */
84
- /** 감지된 런타임 환경 식별자 */
85
- type RuntimeId = "node" | "browser" | "edge" | "deno" | "bun" | "unknown";
88
+
86
89
  /**
87
- * 현재 JavaScript 런타임 환경을 감지합니다.
90
+ * Browser 전용 secure Ddu64 인코더/디코더.
91
+ *
92
+ * Ddu64Core를 래핑하여 자동 BrowserAdapter 주입(WebCrypto/CompressionStream 기반
93
+ * 압축/암호화/체크섬)을 제공합니다. 동기 압축/암호화 메서드는 지원하지 않으며
94
+ * `encodeAsync`/`decodeAsync` 계열을 사용해야 합니다.
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * import { Ddu64SecureBrowser } from '@ddunigma/node/secure';
88
99
  *
89
- * 감지는 순수하게 globalThis 검사에 기반하며 Node.js 내장 모듈을 임포트하지 않습니다.
100
+ * const encoder = new Ddu64SecureBrowser(undefined, undefined, { encryptionKey: 'key' });
101
+ * const encoded = await encoder.encodeAsync('Hello', { compress: true });
102
+ * const decoded = await encoder.decodeAsync(encoded);
103
+ * ```
90
104
  */
91
- declare function detectRuntime(): RuntimeId;
105
+ declare class Ddu64SecureBrowser extends Ddu64Core {
106
+ constructor(dduChar?: string[] | string | DduSecureConstructorOptions, paddingChar?: string, dduOptions?: DduSecureConstructorOptions);
107
+ }
92
108
 
93
109
  /**
94
110
  * ddunigma Web Streams API 구현.
@@ -101,6 +117,13 @@ declare function detectRuntime(): RuntimeId;
101
117
  * - 인코딩: 압축/암호화/체크섬 비활성화 + 2의 제곱수 charset에서 청크 단위 출력
102
118
  * - 디코딩: footer의 압축/암호화 마커를 최종 신뢰하기 위해 payload를 축적 후 처리
103
119
  *
120
+ * 메타데이터 의미 주의:
121
+ * 스트림 헤더의 압축 플래그(D/B/N)는 압축이 "요청"되었는지를 기록하고, 페이로드 footer는
122
+ * 실제로 압축이 "적용"되었는지를 기록합니다. 작은/비압축성 데이터는 압축 결과가 원본보다
123
+ * 커서 적용되지 않을 수 있으므로 헤더가 D/B여도 footer엔 압축 마커가 없을 수 있습니다.
124
+ * 디코더는 항상 footer를 권위 있는 소스로 신뢰하므로 라운드트립은 정상이며, 헤더 플래그는
125
+ * 어디까지나 "요청" 힌트로만 해석해야 합니다.
126
+ *
104
127
  * 스트림 헤더 형식: [pad]DDS1[D|B|N][1|0][pad]
105
128
  * D=deflate, B=brotli, N=없음 (압축), 1/0 (암호화).
106
129
  *
@@ -114,11 +137,16 @@ declare function detectRuntime(): RuntimeId;
114
137
  * 압축/암호화/체크섬이 비활성화되고 charset이 2의 제곱수일 때 각 청크를 즉시 인코딩합니다.
115
138
  * 그 외에는 전체 데이터를 축적한 후 flush에서 처리합니다.
116
139
  *
140
+ * 암호화 정책: 스트림 암호화 여부는 **인코더가 키를 보유했는지로만** 결정됩니다
141
+ * (`encryptionKey` 설정 시 항상 암호화). 스트림 옵션 타입(`DduStreamOptions`)에는 `encrypt`가
142
+ * 노출되지 않으며, 내부 옵션으로 `encrypt: false`를 주더라도 키가 있으면 무시되고 암호화됩니다.
143
+ * 평문 스트림이 필요하면 키 없는 인코더 인스턴스를 사용하세요.
144
+ *
117
145
  * @param encoder - 인코딩에 사용할 Ddu64Core 인스턴스
118
- * @param options - 인코딩 옵션 (compress, encrypt, compressionAlgorithm 등)
146
+ * @param options - 인코딩 옵션 (compress, compressionAlgorithm 등)
119
147
  * @returns TransformStream<Uint8Array, string>
120
148
  */
121
- declare function createReadableEncodeStream(encoder: Ddu64Core, options?: DduOptions): TransformStream<Uint8Array, string>;
149
+ declare function createReadableEncodeStream(encoder: Ddu64Core, options?: DduStreamOptions): TransformStream<Uint8Array, string>;
122
150
  /**
123
151
  * charset 인코딩 문자열을 바이너리 데이터로 역변환하는
124
152
  * Web Streams API TransformStream을 생성합니다.
@@ -130,92 +158,6 @@ declare function createReadableEncodeStream(encoder: Ddu64Core, options?: DduOpt
130
158
  * @param options - 디코딩 옵션
131
159
  * @returns TransformStream<string, Uint8Array>
132
160
  */
133
- declare function createReadableDecodeStream(encoder: Ddu64Core, options?: DduOptions): TransformStream<string, Uint8Array>;
134
-
135
- /**
136
- * 한글 음절 난독화 레이어 구현.
137
- *
138
- * 암호화된 charset 인코딩 문자열을 결정론적 전단사 매핑을 사용하여
139
- * 자연스러운 한국어 음절 블록으로 변환합니다. 매핑은 다음을 보장합니다:
140
- * - 모든 출력 문자가 유효한 한국어 음절 블록 (U+AC00–U+D7A3)
141
- * - 단일 문자 빈도가 기대 균등 빈도의 3배를 초과하지 않음
142
- * - 출력 길이 <= 입력 길이의 1.5배 (실제로는 1:1 매핑)
143
- *
144
- * 플랫폼 독립적: Node.js 임포트 없음.
145
- *
146
- * @module obfuscation/ObfuscationLayer
147
- */
148
-
149
- /**
150
- * 한글 음절 매핑을 사용하여 ObfuscationLayer 인터페이스를 구현합니다.
151
- *
152
- * 입력 알파벳(인코더가 사용하는 charset 문자)이 주어지면,
153
- * 이 레이어는 각 문자를 결정론적으로 한글 음절에 매핑합니다.
154
- * 매핑은 전단사(가역적)이며 위치에 따라 각 문자의 할당된 음절 범위를
155
- * 순환하여 출력 빈도를 균등하게 분배합니다.
156
- */
157
- declare class HangulObfuscationLayer implements ObfuscationLayer {
158
- private readonly config;
159
- /**
160
- * 새 HangulObfuscationLayer를 생성합니다.
161
- *
162
- * @param alphabet - 완전한 입력 알파벳 (charset 문자 + 패딩 문자).
163
- * 인코딩된 문자열에 나타날 수 있는 모든 고유 문자.
164
- */
165
- constructor(alphabet: string[]);
166
- /**
167
- * 암호화된 charset 인코딩 문자열을 한글 음절로 변환합니다.
168
- *
169
- * 각 입력 문자는 할당된 범위의 한글 음절에 매핑됩니다.
170
- * 문자열 내 위치가 범위 내 어떤 음절을 사용할지 결정하여
171
- * 균등한 빈도 분포를 보장합니다.
172
- *
173
- * @param input - 암호화된 charset 인코딩 문자열
174
- * @returns 한글 음절 블록 문자열 (U+AC00–U+D7A3)
175
- * @throws 입력에 알파벳에 없는 문자가 포함된 경우 에러
176
- */
177
- obfuscate(input: string): string;
178
- /**
179
- * 난독화를 역변환하여 원본 charset 인코딩 문자열을 복원합니다.
180
- *
181
- * 각 한글 음절이 어떤 문자의 범위에 속하는지 판별하여
182
- * 원래 문자로 매핑합니다.
183
- *
184
- * @param input - 난독화된 한글 음절 문자열
185
- * @returns 원본 charset 인코딩 문자열
186
- * @throws 입력에 유효한 한글 음절 범위 밖의 문자가 포함되거나
187
- * 알파벳 문자에 매핑되지 않는 문자가 포함된 경우 에러
188
- */
189
- deobfuscate(input: string): string;
190
- }
191
- /**
192
- * 주어진 charset 설정에 대한 ObfuscationLayer를 생성합니다.
193
- *
194
- * @deprecated 인코더 출력과 호환되지 않습니다(charset/패딩만 포함, footer 마커·숫자 미포함).
195
- * 인코더 출력을 deobfuscate하려면 `createEncoderObfuscationLayer`를, 일반 난독화는 `Ddu64`의
196
- * `obfuscate` 옵션을 사용하세요. 이 함수는 다음 메이저에서 제거될 수 있습니다.
197
- *
198
- * charset 문자와 패딩 문자로부터 알파벳을 구성한 후 한글 난독화 레이어를 생성합니다.
199
- *
200
- * @param charSet - 인코딩에 사용되는 charset 문자
201
- * @param paddingChar - 패딩 문자
202
- * @returns ObfuscationLayer 인스턴스
203
- */
204
- declare function createObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;
205
- /**
206
- * Ddu64 인코더 출력과 호환되는 ObfuscationLayer를 생성합니다.
207
- *
208
- * `createObfuscationLayer`와 달리 charset/패딩 외에 footer 마커
209
- * (ELYSIA/GRISEO/ENC/V3/V4)와 숫자(0-9)까지 알파벳에 포함하므로, 압축/암호화/파이프라인
210
- * 마커가 붙은 실제 인코더 출력도 안전하게 deobfuscate할 수 있습니다.
211
- *
212
- * 일반적으로는 `Ddu64`의 `obfuscate` 옵션을 쓰는 것으로 충분하며, 이 헬퍼는 인코더와
213
- * 동일한 난독화 매핑을 외부에서 재현해야 할 때 사용합니다.
214
- *
215
- * @param charSet - 인코딩에 사용되는 charset 문자
216
- * @param paddingChar - 패딩 문자
217
- * @returns 인코더 호환 ObfuscationLayer 인스턴스
218
- */
219
- declare function createEncoderObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;
161
+ declare function createReadableDecodeStream(encoder: Ddu64Core, options?: DduStreamOptions): TransformStream<string, Uint8Array>;
220
162
 
221
- export { BrowserAdapter as B, HangulObfuscationLayer as H, createObfuscationLayer as a, createReadableDecodeStream as b, createEncoderObfuscationLayer as c, createReadableEncodeStream as d, detectRuntime as e };
163
+ export { BrowserAdapter as B, Ddu64SecureBrowser as D, createReadableEncodeStream as a, createReadableDecodeStream as c };
package/dist/browser.cjs CHANGED
@@ -1,2 +1 @@
1
- 'use strict';var chunkWCXD5LRF_cjs=require('./chunk-WCXD5LRF.cjs'),chunkUMA4JEN4_cjs=require('./chunk-UMA4JEN4.cjs'),chunkAMOZHHMB_cjs=require('./chunk-AMOZHHMB.cjs');require('./chunk-5NSHXTMN.cjs');var e=class extends chunkUMA4JEN4_cjs.C{constructor(n,s,a){let r=chunkUMA4JEN4_cjs.B(n,s,a),u={...r.dduOptions,...r.dduChar!==void 0?{dduChar:r.dduChar}:{},...r.paddingChar!==void 0?{paddingChar:r.paddingChar}:{},adapter:r.dduOptions?.adapter??new chunkAMOZHHMB_cjs.a};super(u);}};async function F(){return new chunkAMOZHHMB_cjs.a}Object.defineProperty(exports,"createReadableDecodeStream",{enumerable:true,get:function(){return chunkWCXD5LRF_cjs.c}});Object.defineProperty(exports,"createReadableEncodeStream",{enumerable:true,get:function(){return chunkWCXD5LRF_cjs.b}});Object.defineProperty(exports,"detectRuntime",{enumerable:true,get:function(){return chunkWCXD5LRF_cjs.a}});Object.defineProperty(exports,"CharsetBuilder",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.D}});Object.defineProperty(exports,"Ddu64AdapterError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.w}});Object.defineProperty(exports,"Ddu64CharsetError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.u}});Object.defineProperty(exports,"Ddu64ChecksumError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.t}});Object.defineProperty(exports,"Ddu64CompressionError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.p}});Object.defineProperty(exports,"Ddu64Core",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.C}});Object.defineProperty(exports,"Ddu64DecodeError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.o}});Object.defineProperty(exports,"Ddu64DecompressionError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.q}});Object.defineProperty(exports,"Ddu64DecryptionError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.s}});Object.defineProperty(exports,"Ddu64EncodeError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.n}});Object.defineProperty(exports,"Ddu64EncryptionError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.r}});Object.defineProperty(exports,"Ddu64Error",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.m}});Object.defineProperty(exports,"Ddu64ErrorCode",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.l}});Object.defineProperty(exports,"Ddu64LimitError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.v}});Object.defineProperty(exports,"Ddu64ObfuscationError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.x}});Object.defineProperty(exports,"Ddu64StreamError",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.y}});Object.defineProperty(exports,"DduSetSymbol",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.a}});Object.defineProperty(exports,"HangulObfuscationLayer",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.e}});Object.defineProperty(exports,"createEncoderObfuscationLayer",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.g}});Object.defineProperty(exports,"createObfuscationLayer",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.f}});Object.defineProperty(exports,"getWasmCodec",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.i}});Object.defineProperty(exports,"getWasmCodecSync",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.j}});Object.defineProperty(exports,"isDdu64Error",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.z}});Object.defineProperty(exports,"preloadWasm",{enumerable:true,get:function(){return chunkUMA4JEN4_cjs.h}});Object.defineProperty(exports,"BrowserAdapter",{enumerable:true,get:function(){return chunkAMOZHHMB_cjs.a}});exports.Ddu64=e;exports.Ddu64Browser=e;exports.getAdapter=F;//# sourceMappingURL=browser.cjs.map
2
- //# sourceMappingURL=browser.cjs.map
1
+ 'use strict';var chunkBDP7E7K3_cjs=require('./chunk-BDP7E7K3.cjs'),chunkJBUTKSCC_cjs=require('./chunk-JBUTKSCC.cjs'),chunkZTGECGM2_cjs=require('./chunk-ZTGECGM2.cjs'),chunkBCUBYE76_cjs=require('./chunk-BCUBYE76.cjs');var t=class extends chunkJBUTKSCC_cjs.i{static{chunkBCUBYE76_cjs.a(this,"Ddu64Browser");}constructor(r,o,i){let e=chunkJBUTKSCC_cjs.b(r,o,i),a={...e.dduOptions,...e.dduChar!==void 0?{dduChar:e.dduChar}:{},...e.paddingChar!==void 0?{paddingChar:e.paddingChar}:{},obfuscationLayerFactory:e.dduOptions?.obfuscationLayerFactory??(p=>new chunkBDP7E7K3_cjs.a(p))};super(a);}encode(r,o){return super.encode(r,o)}encodeAsync(r,o){return super.encodeAsync(r,o)}decode(r,o){return super.decode(r,o)}decodeAsync(r,o){return super.decodeAsync(r,o)}decodeToUint8Array(r,o){return super.decodeToUint8Array(r,o)}decodeToUint8ArrayAsync(r,o){return super.decodeToUint8ArrayAsync(r,o)}getStats(r,o){return super.getStats(r,o)}getStatsAsync(r,o){return super.getStatsAsync(r,o)}};Object.defineProperty(exports,"HangulObfuscationLayer",{enumerable:true,get:function(){return chunkBDP7E7K3_cjs.a}});Object.defineProperty(exports,"createEncoderObfuscationLayer",{enumerable:true,get:function(){return chunkBDP7E7K3_cjs.b}});Object.defineProperty(exports,"detectRuntime",{enumerable:true,get:function(){return chunkBDP7E7K3_cjs.c}});Object.defineProperty(exports,"CharsetBuilder",{enumerable:true,get:function(){return chunkJBUTKSCC_cjs.j}});Object.defineProperty(exports,"Ddu64Core",{enumerable:true,get:function(){return chunkJBUTKSCC_cjs.i}});Object.defineProperty(exports,"DduSetSymbol",{enumerable:true,get:function(){return chunkJBUTKSCC_cjs.a}});Object.defineProperty(exports,"Ddu64AdapterError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.m}});Object.defineProperty(exports,"Ddu64CharsetError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.j}});Object.defineProperty(exports,"Ddu64ChecksumError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.i}});Object.defineProperty(exports,"Ddu64CompressionError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.e}});Object.defineProperty(exports,"Ddu64DecodeError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.d}});Object.defineProperty(exports,"Ddu64DecompressionError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.f}});Object.defineProperty(exports,"Ddu64DecryptionError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.h}});Object.defineProperty(exports,"Ddu64EncodeError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.c}});Object.defineProperty(exports,"Ddu64EncryptionError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.g}});Object.defineProperty(exports,"Ddu64Error",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.b}});Object.defineProperty(exports,"Ddu64ErrorCode",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.a}});Object.defineProperty(exports,"Ddu64InvalidInputError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.k}});Object.defineProperty(exports,"Ddu64LimitError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.l}});Object.defineProperty(exports,"Ddu64ObfuscationError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.n}});Object.defineProperty(exports,"Ddu64StreamError",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.o}});Object.defineProperty(exports,"isDdu64Error",{enumerable:true,get:function(){return chunkZTGECGM2_cjs.p}});exports.Ddu64=t;exports.Ddu64Browser=t;
@@ -1,34 +1,38 @@
1
- import { B as BrowserAdapter } from './ObfuscationLayer-BgL73E5F.cjs';
2
- export { H as HangulObfuscationLayer, c as createEncoderObfuscationLayer, a as createObfuscationLayer, b as createReadableDecodeStream, d as createReadableEncodeStream, e as detectRuntime } from './ObfuscationLayer-BgL73E5F.cjs';
3
- import { D as Ddu64Core, a as DduConstructorOptions } from './errors-DNICpo4L.cjs';
4
- export { C as CharSetConfig, b as CharSetInfo, c as CharsetBuilder, d as Ddu64AdapterError, e as Ddu64CharsetError, f as Ddu64ChecksumError, g as Ddu64CompressionError, h as Ddu64DecodeError, i as Ddu64DecompressionError, j as Ddu64DecryptionError, k as Ddu64EncodeError, l as Ddu64EncryptionError, m as Ddu64Error, n as Ddu64ErrorCode, o as Ddu64ErrorOptions, p as Ddu64LimitError, q as Ddu64ObfuscationError, r as Ddu64Operation, s as Ddu64StreamError, t as DduEncodeStats, u as DduOptions, v as DduProgressInfo, w as DduSetSymbol, x as DduTextEncoding, E as EncodingProfile, K as KeyDerivationAlgorithm, y as KeyDerivationOptions, O as ObfuscationLayer, P as PlatformAdapter, W as WasmCodec, z as isDdu64Error } from './errors-DNICpo4L.cjs';
5
- export { getWasmCodec, getWasmCodecSync, preloadWasm } from './core.cjs';
1
+ import { D as Ddu64Core, a as DduBaseConstructorOptions, b as DduBaseOptions, c as DduEncodeStats } from './core-BsIwjJK-.cjs';
2
+ export { C as CharSetConfig, d as CharSetInfo, e as CharsetBuilder, f as Ddu64AdapterError, g as Ddu64CharsetError, h as Ddu64ChecksumError, i as Ddu64CompressionError, j as Ddu64DecodeError, k as Ddu64DecompressionError, l as Ddu64DecryptionError, m as Ddu64EncodeError, n as Ddu64EncryptionError, o as Ddu64Error, p as Ddu64ErrorCode, q as Ddu64ErrorOptions, r as Ddu64InvalidInputError, s as Ddu64LimitError, t as Ddu64ObfuscationError, u as Ddu64Operation, v as Ddu64StreamError, w as DduProgressInfo, x as DduSetSymbol, y as DduSetSymbolInput, E as EncodingProfile, O as ObfuscationLayer, z as isDdu64Error } from './core-BsIwjJK-.cjs';
3
+ export { H as HangulObfuscationLayer, c as createEncoderObfuscationLayer, d as detectRuntime } from './ObfuscationLayer-4rCOCRWH.cjs';
6
4
 
7
5
  /**
8
- * Browser-optimized Ddu64 wrapper.
6
+ * Browser 전용 기본(lean) Ddu64 래퍼.
9
7
  *
10
- * Injects BrowserAdapter by default so async compression/encryption works
11
- * without importing Node.js built-ins into browser bundles.
8
+ * Ddu64Core를 확장하여 인코딩 + 한글 난독화(라이브러리 주목적)를 제공합니다:
9
+ * - HangulObfuscationLayer 자동 주입 없는 한글 난독화 사용 가능
10
+ *
11
+ * 6.0: 어댑터(BrowserAdapter)를 주입하지 않습니다. 압축/암호화/체크섬/스트림이 필요하면
12
+ * secure 진입점(`@ddunigma/node/secure`)의 `Ddu64SecureBrowser`를 사용하세요.
13
+ * Node.js 내장 모듈도, WebCrypto/CompressionStream 어댑터도 정적 import하지 않습니다.
12
14
  *
13
15
  * @module Ddu64Browser
14
16
  */
15
17
 
16
18
  declare class Ddu64Browser extends Ddu64Core {
17
- constructor(dduChar?: string[] | string | DduConstructorOptions, paddingChar?: string, dduOptions?: DduConstructorOptions);
19
+ constructor(dduChar?: string[] | string | DduBaseConstructorOptions, paddingChar?: string, dduOptions?: DduBaseConstructorOptions);
20
+ /** @group Sync */
21
+ encode(input: Uint8Array | string, options?: DduBaseOptions): string;
22
+ /** @group Async */
23
+ encodeAsync(input: Uint8Array | string, options?: DduBaseOptions): Promise<string>;
24
+ /** @group Sync */
25
+ decode(input: string, options?: DduBaseOptions): string;
26
+ /** @group Async */
27
+ decodeAsync(input: string, options?: DduBaseOptions): Promise<string>;
28
+ /** @group Sync */
29
+ decodeToUint8Array(input: string, options?: DduBaseOptions): Uint8Array;
30
+ /** @group Async */
31
+ decodeToUint8ArrayAsync(input: string, options?: DduBaseOptions): Promise<Uint8Array>;
32
+ /** @group Introspection */
33
+ getStats(input: Uint8Array | string, options?: DduBaseOptions): DduEncodeStats;
34
+ /** @group Introspection */
35
+ getStatsAsync(input: Uint8Array | string, options?: DduBaseOptions): Promise<DduEncodeStats>;
18
36
  }
19
37
 
20
- /**
21
- * 브라우저 최적화 진입점.
22
- *
23
- * 인코딩, 디코딩, CharsetBuilder, Web Streams, BrowserAdapter를 내보냅니다.
24
- *
25
- * Node.js 내장 모듈을 직접 임포트하지 않도록 BrowserAdapter 기반 구성만
26
- * 포함합니다.
27
- *
28
- * @module browser
29
- * @packageDocumentation
30
- */
31
-
32
- declare function getAdapter(): Promise<BrowserAdapter>;
33
-
34
- export { BrowserAdapter, Ddu64Browser as Ddu64, Ddu64Browser, Ddu64Core, DduConstructorOptions, getAdapter };
38
+ export { Ddu64Browser as Ddu64, Ddu64Browser, Ddu64Core, DduBaseConstructorOptions, DduBaseOptions, DduEncodeStats };