@shellicar/core-config 2.1.4 → 2.1.5

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 (115) hide show
  1. package/CHANGELOG.md +102 -0
  2. package/README.md +166 -3
  3. package/dist/cjs/EncryptedValue.cjs +8 -1
  4. package/dist/cjs/EncryptedValue.cjs.map +1 -1
  5. package/dist/cjs/SecureConnectionString.cjs +11 -1
  6. package/dist/cjs/SecureConnectionString.cjs.map +1 -1
  7. package/dist/cjs/SecureString.cjs +10 -1
  8. package/dist/cjs/SecureString.cjs.map +1 -1
  9. package/dist/cjs/SecureURL.cjs +11 -1
  10. package/dist/cjs/SecureURL.cjs.map +1 -1
  11. package/dist/cjs/chunks/chunk-BDMFGBTR.cjs +59 -0
  12. package/dist/cjs/chunks/chunk-BDMFGBTR.cjs.map +1 -0
  13. package/dist/cjs/chunks/chunk-FOL2TBBQ.cjs +7 -0
  14. package/dist/cjs/chunks/chunk-FOL2TBBQ.cjs.map +1 -0
  15. package/dist/cjs/chunks/chunk-GGWBGRR3.cjs +29 -0
  16. package/dist/cjs/chunks/chunk-GGWBGRR3.cjs.map +1 -0
  17. package/dist/cjs/chunks/chunk-K6RFKD55.cjs +41 -0
  18. package/dist/cjs/chunks/chunk-K6RFKD55.cjs.map +1 -0
  19. package/dist/cjs/chunks/chunk-PO2PS4VB.cjs +34 -0
  20. package/dist/cjs/chunks/chunk-PO2PS4VB.cjs.map +1 -0
  21. package/dist/cjs/chunks/chunk-R4H4GKFW.cjs +82 -0
  22. package/dist/cjs/chunks/chunk-R4H4GKFW.cjs.map +1 -0
  23. package/dist/cjs/chunks/chunk-SRMLZGCX.cjs +71 -0
  24. package/dist/cjs/chunks/chunk-SRMLZGCX.cjs.map +1 -0
  25. package/dist/cjs/chunks/chunk-X6BO6XFB.cjs +7 -0
  26. package/dist/cjs/chunks/chunk-X6BO6XFB.cjs.map +1 -0
  27. package/dist/cjs/chunks/chunk-YK25AWXL.cjs +48 -0
  28. package/dist/cjs/chunks/chunk-YK25AWXL.cjs.map +1 -0
  29. package/dist/cjs/createFactory.cjs +17 -1
  30. package/dist/cjs/createFactory.cjs.map +1 -1
  31. package/dist/cjs/defaults.cjs +8 -1
  32. package/dist/cjs/defaults.cjs.map +1 -1
  33. package/dist/cjs/hash.cjs +8 -1
  34. package/dist/cjs/hash.cjs.map +1 -1
  35. package/dist/cjs/index.cjs +30 -1
  36. package/dist/cjs/index.cjs.map +1 -1
  37. package/dist/cjs/interfaces.cjs +14 -1
  38. package/dist/cjs/interfaces.cjs.map +1 -1
  39. package/dist/cjs/types.cjs +15 -1
  40. package/dist/cjs/types.cjs.map +1 -1
  41. package/dist/esm/EncryptedValue.js +8 -1
  42. package/dist/esm/EncryptedValue.js.map +1 -1
  43. package/dist/esm/SecureConnectionString.js +11 -1
  44. package/dist/esm/SecureConnectionString.js.map +1 -1
  45. package/dist/esm/SecureString.js +10 -1
  46. package/dist/esm/SecureString.js.map +1 -1
  47. package/dist/esm/SecureURL.js +11 -1
  48. package/dist/esm/SecureURL.js.map +1 -1
  49. package/dist/esm/chunks/chunk-2L4YGJ3C.js +71 -0
  50. package/dist/esm/chunks/chunk-2L4YGJ3C.js.map +1 -0
  51. package/dist/esm/chunks/chunk-GOUAOFCH.js +7 -0
  52. package/dist/esm/chunks/chunk-GOUAOFCH.js.map +1 -0
  53. package/dist/esm/chunks/chunk-GWYWZHV2.js +7 -0
  54. package/dist/esm/chunks/chunk-GWYWZHV2.js.map +1 -0
  55. package/dist/esm/chunks/chunk-KM6K7D2J.js +41 -0
  56. package/dist/esm/chunks/chunk-KM6K7D2J.js.map +1 -0
  57. package/dist/esm/chunks/chunk-TRDZS6YE.js +34 -0
  58. package/dist/esm/chunks/chunk-TRDZS6YE.js.map +1 -0
  59. package/dist/esm/chunks/chunk-UDMHV6JX.js +82 -0
  60. package/dist/esm/chunks/chunk-UDMHV6JX.js.map +1 -0
  61. package/dist/esm/chunks/chunk-UJTGIE6R.js +59 -0
  62. package/dist/esm/chunks/chunk-UJTGIE6R.js.map +1 -0
  63. package/dist/esm/chunks/chunk-UOGVVT4U.js +29 -0
  64. package/dist/esm/chunks/chunk-UOGVVT4U.js.map +1 -0
  65. package/dist/esm/chunks/chunk-VIUQA4IN.js +48 -0
  66. package/dist/esm/chunks/chunk-VIUQA4IN.js.map +1 -0
  67. package/dist/esm/createFactory.js +17 -1
  68. package/dist/esm/createFactory.js.map +1 -1
  69. package/dist/esm/defaults.js +8 -1
  70. package/dist/esm/defaults.js.map +1 -1
  71. package/dist/esm/hash.js +8 -1
  72. package/dist/esm/hash.js.map +1 -1
  73. package/dist/esm/index.js +30 -1
  74. package/dist/esm/index.js.map +1 -1
  75. package/dist/esm/interfaces.js +14 -1
  76. package/dist/esm/interfaces.js.map +1 -1
  77. package/dist/esm/types.js +15 -1
  78. package/dist/esm/types.js.map +1 -1
  79. package/package.json +11 -10
  80. package/dist/cjs/chunk-7PP3CDDK.cjs +0 -1
  81. package/dist/cjs/chunk-7PP3CDDK.cjs.map +0 -1
  82. package/dist/cjs/chunk-FKX4J4Q2.cjs +0 -1
  83. package/dist/cjs/chunk-FKX4J4Q2.cjs.map +0 -1
  84. package/dist/cjs/chunk-J7CRMQ5Z.cjs +0 -1
  85. package/dist/cjs/chunk-J7CRMQ5Z.cjs.map +0 -1
  86. package/dist/cjs/chunk-JS7CWWUD.cjs +0 -1
  87. package/dist/cjs/chunk-JS7CWWUD.cjs.map +0 -1
  88. package/dist/cjs/chunk-JVM3GGW6.cjs +0 -1
  89. package/dist/cjs/chunk-JVM3GGW6.cjs.map +0 -1
  90. package/dist/cjs/chunk-PK6SKIKE.cjs +0 -1
  91. package/dist/cjs/chunk-PK6SKIKE.cjs.map +0 -1
  92. package/dist/cjs/chunk-VQ2XCAJT.cjs +0 -1
  93. package/dist/cjs/chunk-VQ2XCAJT.cjs.map +0 -1
  94. package/dist/cjs/chunk-WZWXGAJN.cjs +0 -1
  95. package/dist/cjs/chunk-WZWXGAJN.cjs.map +0 -1
  96. package/dist/cjs/chunk-XVDIOMZD.cjs +0 -1
  97. package/dist/cjs/chunk-XVDIOMZD.cjs.map +0 -1
  98. package/dist/esm/chunk-7QVYU63E.js +0 -1
  99. package/dist/esm/chunk-7QVYU63E.js.map +0 -1
  100. package/dist/esm/chunk-CGPJ25IS.js +0 -1
  101. package/dist/esm/chunk-CGPJ25IS.js.map +0 -1
  102. package/dist/esm/chunk-FUGQ3OFQ.js +0 -1
  103. package/dist/esm/chunk-FUGQ3OFQ.js.map +0 -1
  104. package/dist/esm/chunk-GJXVQ2LL.js +0 -1
  105. package/dist/esm/chunk-GJXVQ2LL.js.map +0 -1
  106. package/dist/esm/chunk-JAXX5FG7.js +0 -1
  107. package/dist/esm/chunk-JAXX5FG7.js.map +0 -1
  108. package/dist/esm/chunk-NWPDBO55.js +0 -1
  109. package/dist/esm/chunk-NWPDBO55.js.map +0 -1
  110. package/dist/esm/chunk-S3UXVGVK.js +0 -1
  111. package/dist/esm/chunk-S3UXVGVK.js.map +0 -1
  112. package/dist/esm/chunk-TGJY6ZQ7.js +0 -1
  113. package/dist/esm/chunk-TGJY6ZQ7.js.map +0 -1
  114. package/dist/esm/chunk-XICVVAG4.js +0 -1
  115. package/dist/esm/chunk-XICVVAG4.js.map +0 -1
@@ -0,0 +1,82 @@
1
+ import {
2
+ SecureString
3
+ } from "./chunk-UJTGIE6R.js";
4
+ import {
5
+ ISecureURL
6
+ } from "./chunk-TRDZS6YE.js";
7
+ import {
8
+ __name
9
+ } from "./chunk-GOUAOFCH.js";
10
+
11
+ // src/SecureURL.ts
12
+ import util from "node:util";
13
+ var SecureURL = class _SecureURL extends ISecureURL {
14
+ static {
15
+ __name(this, "SecureURL");
16
+ }
17
+ #encryptedValue;
18
+ #password;
19
+ get secretValue() {
20
+ return new URL(this.#encryptedValue.getValue());
21
+ }
22
+ constructor(value, config) {
23
+ super();
24
+ this.#encryptedValue = config.encryptionProvider.encrypt(value.href);
25
+ this.#password = SecureString.from(value.password || null, config);
26
+ }
27
+ static factory(config) {
28
+ return (value) => _SecureURL.from(value, config);
29
+ }
30
+ static from(value, config) {
31
+ if (value === null) {
32
+ return null;
33
+ }
34
+ if (value === void 0) {
35
+ return void 0;
36
+ }
37
+ return new _SecureURL(value, config);
38
+ }
39
+ toString() {
40
+ const originalUrl = this.secretValue;
41
+ const newUrl = new URL(originalUrl.href);
42
+ if (this.#password !== null) {
43
+ newUrl.password = this.#password.toString();
44
+ }
45
+ return newUrl.href;
46
+ }
47
+ toJSON() {
48
+ const originalUrl = this.secretValue;
49
+ const newUrl = new URL(originalUrl.href);
50
+ newUrl.password = "";
51
+ const searchParams = new URLSearchParams(newUrl.searchParams);
52
+ newUrl.search = "";
53
+ let password;
54
+ if (this.#password !== null) {
55
+ password = this.#password.toString();
56
+ }
57
+ const result = {
58
+ href: newUrl.href
59
+ };
60
+ if (password !== void 0) {
61
+ result.password = password;
62
+ }
63
+ if (searchParams.size > 0) {
64
+ result.searchParams = Object.fromEntries(searchParams);
65
+ }
66
+ return result;
67
+ }
68
+ [util.inspect.custom](depth, options, inspect) {
69
+ if (depth < 0) {
70
+ return "[SecureURL]";
71
+ }
72
+ const newOptions = Object.assign({}, options, {
73
+ depth: options.depth == null ? null : options.depth - 1
74
+ });
75
+ return inspect(this.toJSON(), newOptions);
76
+ }
77
+ };
78
+
79
+ export {
80
+ SecureURL
81
+ };
82
+ //# sourceMappingURL=chunk-UDMHV6JX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/SecureURL.ts"],"sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport { ISecureURL } from './interfaces';\nimport { SecureString } from './SecureString';\nimport type { IEncryptedValue, InspectFunction, SecureConfig } from './types';\n\ntype UrlObject = {\n href: string;\n password?: string;\n searchParams?: Record<string, string>;\n};\n\nexport class SecureURL extends ISecureURL {\n readonly #encryptedValue: IEncryptedValue;\n readonly #password: SecureString | null;\n\n public get secretValue(): URL {\n return new URL(this.#encryptedValue.getValue());\n }\n\n private constructor(value: URL, config: SecureConfig) {\n super();\n this.#encryptedValue = config.encryptionProvider.encrypt(value.href);\n this.#password = SecureString.from(value.password || null, config);\n }\n\n static factory(config: SecureConfig): (value: URL) => ISecureURL {\n return (value: URL) => SecureURL.from(value, config);\n }\n\n public static from<T extends URL | null | undefined>(value: T, config: SecureConfig): T extends URL ? SecureURL : T {\n if (value === null) {\n return null as T extends URL ? SecureURL : T;\n }\n if (value === undefined) {\n return undefined as T extends URL ? SecureURL : T;\n }\n return new SecureURL(value, config) as T extends URL ? SecureURL : T;\n }\n\n override toString(): string {\n const originalUrl = this.secretValue;\n const newUrl = new URL(originalUrl.href);\n if (this.#password !== null) {\n newUrl.password = this.#password.toString();\n }\n return newUrl.href;\n }\n\n override toJSON(): UrlObject {\n const originalUrl = this.secretValue;\n const newUrl = new URL(originalUrl.href);\n newUrl.password = '';\n\n const searchParams = new URLSearchParams(newUrl.searchParams);\n newUrl.search = '';\n\n let password: string | undefined;\n if (this.#password !== null) {\n password = this.#password.toString();\n }\n\n const result: UrlObject = {\n href: newUrl.href,\n };\n if (password !== undefined) {\n result.password = password;\n }\n if (searchParams.size > 0) {\n result.searchParams = Object.fromEntries(searchParams);\n }\n return result;\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureURL]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,UAAmC;AAWnC,IAAM,YAAN,MAAM,mBAAkB,WAAW;AAAA,EAX1C,OAW0C;AAAA;AAAA;AAAA,EAC/B;AAAA,EACA;AAAA,EAET,IAAW,cAAmB;AAC5B,WAAO,IAAI,IAAI,KAAK,gBAAgB,SAAS,CAAC;AAAA,EAChD;AAAA,EAEQ,YAAY,OAAY,QAAsB;AACpD,UAAM;AACN,SAAK,kBAAkB,OAAO,mBAAmB,QAAQ,MAAM,IAAI;AACnE,SAAK,YAAY,aAAa,KAAK,MAAM,YAAY,MAAM,MAAM;AAAA,EACnE;AAAA,EAEA,OAAO,QAAQ,QAAkD;AAC/D,WAAO,CAAC,UAAe,WAAU,KAAK,OAAO,MAAM;AAAA,EACrD;AAAA,EAEA,OAAc,KAAuC,OAAU,QAAqD;AAClH,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,IACT;AACA,QAAI,UAAU,QAAW;AACvB,aAAO;AAAA,IACT;AACA,WAAO,IAAI,WAAU,OAAO,MAAM;AAAA,EACpC;AAAA,EAES,WAAmB;AAC1B,UAAM,cAAc,KAAK;AACzB,UAAM,SAAS,IAAI,IAAI,YAAY,IAAI;AACvC,QAAI,KAAK,cAAc,MAAM;AAC3B,aAAO,WAAW,KAAK,UAAU,SAAS;AAAA,IAC5C;AACA,WAAO,OAAO;AAAA,EAChB;AAAA,EAES,SAAoB;AAC3B,UAAM,cAAc,KAAK;AACzB,UAAM,SAAS,IAAI,IAAI,YAAY,IAAI;AACvC,WAAO,WAAW;AAElB,UAAM,eAAe,IAAI,gBAAgB,OAAO,YAAY;AAC5D,WAAO,SAAS;AAEhB,QAAI;AACJ,QAAI,KAAK,cAAc,MAAM;AAC3B,iBAAW,KAAK,UAAU,SAAS;AAAA,IACrC;AAEA,UAAM,SAAoB;AAAA,MACxB,MAAM,OAAO;AAAA,IACf;AACA,QAAI,aAAa,QAAW;AAC1B,aAAO,WAAW;AAAA,IACpB;AACA,QAAI,aAAa,OAAO,GAAG;AACzB,aAAO,eAAe,OAAO,YAAY,YAAY;AAAA,IACvD;AACA,WAAO;AAAA,EACT;AAAA,EACA,CAAU,KAAK,QAAQ,MAAM,EAAE,OAAe,SAAyB,SAAkC;AACvG,QAAI,QAAQ,GAAG;AACb,aAAO;AAAA,IACT;AACA,UAAM,aAAa,OAAO,OAAO,CAAC,GAAG,SAAS;AAAA,MAC5C,OAAO,QAAQ,SAAS,OAAO,OAAO,QAAQ,QAAQ;AAAA,IACxD,CAAC;AACD,WAAO,QAAQ,KAAK,OAAO,GAAG,UAAU;AAAA,EAC1C;AACF;","names":[]}
@@ -0,0 +1,59 @@
1
+ import {
2
+ ISecureString
3
+ } from "./chunk-TRDZS6YE.js";
4
+ import {
5
+ hash
6
+ } from "./chunk-UOGVVT4U.js";
7
+ import {
8
+ __name
9
+ } from "./chunk-GOUAOFCH.js";
10
+
11
+ // src/SecureString.ts
12
+ import util from "node:util";
13
+ var SecureString = class _SecureString extends ISecureString {
14
+ static {
15
+ __name(this, "SecureString");
16
+ }
17
+ #encryptedValue;
18
+ #hash;
19
+ get secretValue() {
20
+ return this.#encryptedValue.getValue();
21
+ }
22
+ constructor(value, config) {
23
+ super();
24
+ this.#encryptedValue = config.encryptionProvider.encrypt(value);
25
+ this.#hash = hash(value, config.secret);
26
+ }
27
+ static factory(config) {
28
+ return (value) => _SecureString.from(value, config);
29
+ }
30
+ static from(value, config) {
31
+ if (value === null) {
32
+ return null;
33
+ }
34
+ if (value === void 0) {
35
+ return void 0;
36
+ }
37
+ return new _SecureString(value, config);
38
+ }
39
+ toString() {
40
+ return this.#hash;
41
+ }
42
+ toJSON() {
43
+ return this.toString();
44
+ }
45
+ [util.inspect.custom](depth, options, inspect) {
46
+ if (depth < 0) {
47
+ return "[SecureString]";
48
+ }
49
+ const newOptions = Object.assign({}, options, {
50
+ depth: options.depth == null ? null : options.depth - 1
51
+ });
52
+ return inspect(this.toJSON(), newOptions);
53
+ }
54
+ };
55
+
56
+ export {
57
+ SecureString
58
+ };
59
+ //# sourceMappingURL=chunk-UJTGIE6R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/SecureString.ts"],"sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport { hash } from './hash';\nimport { ISecureString } from './interfaces';\nimport type { IEncryptedValue, InspectFunction, SecureConfig } from './types';\n\nexport class SecureString extends ISecureString {\n readonly #encryptedValue: IEncryptedValue;\n readonly #hash: string;\n\n public get secretValue(): string {\n return this.#encryptedValue.getValue();\n }\n\n private constructor(value: string, config: SecureConfig) {\n super();\n this.#encryptedValue = config.encryptionProvider.encrypt(value);\n this.#hash = hash(value, config.secret);\n }\n\n static factory(config: SecureConfig): (value: string) => SecureString {\n return (value: string) => SecureString.from(value, config);\n }\n\n public static from<T extends string | null | undefined>(value: T, config: SecureConfig): T extends string ? SecureString : T {\n if (value === null) {\n return null as T extends string ? SecureString : T;\n }\n if (value === undefined) {\n return undefined as T extends string ? SecureString : T;\n }\n return new SecureString(value, config) as T extends string ? SecureString : T;\n }\n\n public override toString() {\n return this.#hash;\n }\n public override toJSON() {\n return this.toString();\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureString]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,UAAmC;AAKnC,IAAM,eAAN,MAAM,sBAAqB,cAAc;AAAA,EALhD,OAKgD;AAAA;AAAA;AAAA,EACrC;AAAA,EACA;AAAA,EAET,IAAW,cAAsB;AAC/B,WAAO,KAAK,gBAAgB,SAAS;AAAA,EACvC;AAAA,EAEQ,YAAY,OAAe,QAAsB;AACvD,UAAM;AACN,SAAK,kBAAkB,OAAO,mBAAmB,QAAQ,KAAK;AAC9D,SAAK,QAAQ,KAAK,OAAO,OAAO,MAAM;AAAA,EACxC;AAAA,EAEA,OAAO,QAAQ,QAAuD;AACpE,WAAO,CAAC,UAAkB,cAAa,KAAK,OAAO,MAAM;AAAA,EAC3D;AAAA,EAEA,OAAc,KAA0C,OAAU,QAA2D;AAC3H,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,IACT;AACA,QAAI,UAAU,QAAW;AACvB,aAAO;AAAA,IACT;AACA,WAAO,IAAI,cAAa,OAAO,MAAM;AAAA,EACvC;AAAA,EAEgB,WAAW;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EACgB,SAAS;AACvB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EACA,CAAU,KAAK,QAAQ,MAAM,EAAE,OAAe,SAAyB,SAAkC;AACvG,QAAI,QAAQ,GAAG;AACb,aAAO;AAAA,IACT;AACA,UAAM,aAAa,OAAO,OAAO,CAAC,GAAG,SAAS;AAAA,MAC5C,OAAO,QAAQ,SAAS,OAAO,OAAO,QAAQ,QAAQ;AAAA,IACxD,CAAC;AACD,WAAO,QAAQ,KAAK,OAAO,GAAG,UAAU;AAAA,EAC1C;AACF;","names":[]}
@@ -0,0 +1,29 @@
1
+ import {
2
+ __name
3
+ } from "./chunk-GOUAOFCH.js";
4
+
5
+ // src/hash.ts
6
+ import { createHash, createHmac } from "node:crypto";
7
+ var algorithms = {
8
+ sha256: /* @__PURE__ */ __name(() => ({
9
+ hash: /* @__PURE__ */ __name((x) => createHash("sha256").update(x).digest("hex"), "hash"),
10
+ prefix: "sha256"
11
+ }), "sha256"),
12
+ hs256: /* @__PURE__ */ __name((secret) => ({
13
+ hash: /* @__PURE__ */ __name((x) => createHmac("sha256", secret).update(x).digest("hex"), "hash"),
14
+ prefix: "hs256"
15
+ }), "hs256")
16
+ };
17
+ var getAlgorithm = /* @__PURE__ */ __name((secret) => {
18
+ return secret == null ? algorithms.sha256() : algorithms.hs256(secret);
19
+ }, "getAlgorithm");
20
+ var hash = /* @__PURE__ */ __name((input, secret) => {
21
+ const alg = getAlgorithm(secret);
22
+ const hash2 = alg.hash(input);
23
+ return `${alg.prefix}:${hash2}`;
24
+ }, "hash");
25
+
26
+ export {
27
+ hash
28
+ };
29
+ //# sourceMappingURL=chunk-UOGVVT4U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hash.ts"],"sourcesContent":["import { createHash, createHmac } from 'node:crypto';\n\ntype HashAlgorithm = {\n hash: (x: string) => string;\n prefix: string;\n};\n\nconst algorithms = {\n sha256: () => ({\n hash: (x: string) => createHash('sha256').update(x).digest('hex'),\n prefix: 'sha256',\n }),\n hs256: (secret: string) => ({\n hash: (x: string) => createHmac('sha256', secret).update(x).digest('hex'),\n prefix: 'hs256',\n }),\n} as const;\n\nconst getAlgorithm = (secret: string | null): HashAlgorithm => {\n return secret == null ? algorithms.sha256() : algorithms.hs256(secret);\n};\n\nexport const hash = (input: string, secret: string | null) => {\n const alg = getAlgorithm(secret);\n const hash = alg.hash(input);\n return `${alg.prefix}:${hash}`;\n};\n"],"mappings":";;;;;AAAA,SAAS,YAAY,kBAAkB;AAOvC,IAAM,aAAa;AAAA,EACjB,QAAQ,8BAAO;AAAA,IACb,MAAM,wBAAC,MAAc,WAAW,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,GAA1D;AAAA,IACN,QAAQ;AAAA,EACV,IAHQ;AAAA,EAIR,OAAO,wBAAC,YAAoB;AAAA,IAC1B,MAAM,wBAAC,MAAc,WAAW,UAAU,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,GAAlE;AAAA,IACN,QAAQ;AAAA,EACV,IAHO;AAIT;AAEA,IAAM,eAAe,wBAAC,WAAyC;AAC7D,SAAO,UAAU,OAAO,WAAW,OAAO,IAAI,WAAW,MAAM,MAAM;AACvE,GAFqB;AAId,IAAM,OAAO,wBAAC,OAAe,WAA0B;AAC5D,QAAM,MAAM,aAAa,MAAM;AAC/B,QAAMA,QAAO,IAAI,KAAK,KAAK;AAC3B,SAAO,GAAG,IAAI,MAAM,IAAIA,KAAI;AAC9B,GAJoB;","names":["hash"]}
@@ -0,0 +1,48 @@
1
+ import {
2
+ __name
3
+ } from "./chunk-GOUAOFCH.js";
4
+
5
+ // src/EncryptedValue.ts
6
+ import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
7
+ var EncryptedValue = class {
8
+ static {
9
+ __name(this, "EncryptedValue");
10
+ }
11
+ encryptedData;
12
+ iv;
13
+ authTag;
14
+ key;
15
+ constructor(value) {
16
+ this.key = randomBytes(32);
17
+ this.iv = randomBytes(16);
18
+ const cipher = createCipheriv("aes-256-gcm", this.key, this.iv);
19
+ const encryptedChunks = [];
20
+ encryptedChunks.push(cipher.update(value, "utf8"));
21
+ encryptedChunks.push(cipher.final());
22
+ this.encryptedData = Buffer.concat(encryptedChunks);
23
+ this.authTag = cipher.getAuthTag();
24
+ }
25
+ getValue() {
26
+ const decipher = createDecipheriv("aes-256-gcm", this.key, this.iv);
27
+ decipher.setAuthTag(this.authTag);
28
+ try {
29
+ const decryptedChunks = [];
30
+ decryptedChunks.push(decipher.update(this.encryptedData));
31
+ decryptedChunks.push(decipher.final());
32
+ return Buffer.concat(decryptedChunks).toString("utf8");
33
+ } catch (_) {
34
+ throw new Error("Failed to decrypt value: Invalid key or corrupted data");
35
+ }
36
+ }
37
+ toString() {
38
+ return "[EncryptedValue]";
39
+ }
40
+ toJSON() {
41
+ return { type: "EncryptedValue", encrypted: true };
42
+ }
43
+ };
44
+
45
+ export {
46
+ EncryptedValue
47
+ };
48
+ //# sourceMappingURL=chunk-VIUQA4IN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/EncryptedValue.ts"],"sourcesContent":["import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto';\n\nexport class EncryptedValue {\n private readonly encryptedData: Buffer;\n private readonly iv: Buffer;\n private readonly authTag: Buffer;\n private readonly key: Buffer;\n\n public constructor(value: string) {\n this.key = randomBytes(32);\n this.iv = randomBytes(16);\n\n const cipher = createCipheriv('aes-256-gcm', this.key, this.iv);\n\n const encryptedChunks: Buffer[] = [];\n encryptedChunks.push(cipher.update(value, 'utf8'));\n encryptedChunks.push(cipher.final());\n\n this.encryptedData = Buffer.concat(encryptedChunks);\n this.authTag = cipher.getAuthTag();\n }\n\n public getValue(): string {\n const decipher = createDecipheriv('aes-256-gcm', this.key, this.iv);\n decipher.setAuthTag(this.authTag);\n\n try {\n const decryptedChunks: Buffer[] = [];\n decryptedChunks.push(decipher.update(this.encryptedData));\n decryptedChunks.push(decipher.final());\n\n return Buffer.concat(decryptedChunks).toString('utf8');\n } catch (_) {\n // Hide internal error details\n throw new Error('Failed to decrypt value: Invalid key or corrupted data');\n }\n }\n\n public toString(): string {\n return '[EncryptedValue]';\n }\n\n public toJSON(): object {\n return { type: 'EncryptedValue', encrypted: true };\n }\n}\n"],"mappings":";;;;;AAAA,SAAS,gBAAgB,kBAAkB,mBAAmB;AAEvD,IAAM,iBAAN,MAAqB;AAAA,EAF5B,OAE4B;AAAA;AAAA;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEV,YAAY,OAAe;AAChC,SAAK,MAAM,YAAY,EAAE;AACzB,SAAK,KAAK,YAAY,EAAE;AAExB,UAAM,SAAS,eAAe,eAAe,KAAK,KAAK,KAAK,EAAE;AAE9D,UAAM,kBAA4B,CAAC;AACnC,oBAAgB,KAAK,OAAO,OAAO,OAAO,MAAM,CAAC;AACjD,oBAAgB,KAAK,OAAO,MAAM,CAAC;AAEnC,SAAK,gBAAgB,OAAO,OAAO,eAAe;AAClD,SAAK,UAAU,OAAO,WAAW;AAAA,EACnC;AAAA,EAEO,WAAmB;AACxB,UAAM,WAAW,iBAAiB,eAAe,KAAK,KAAK,KAAK,EAAE;AAClE,aAAS,WAAW,KAAK,OAAO;AAEhC,QAAI;AACF,YAAM,kBAA4B,CAAC;AACnC,sBAAgB,KAAK,SAAS,OAAO,KAAK,aAAa,CAAC;AACxD,sBAAgB,KAAK,SAAS,MAAM,CAAC;AAErC,aAAO,OAAO,OAAO,eAAe,EAAE,SAAS,MAAM;AAAA,IACvD,SAAS,GAAG;AAEV,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AAAA,EACF;AAAA,EAEO,WAAmB;AACxB,WAAO;AAAA,EACT;AAAA,EAEO,SAAiB;AACtB,WAAO,EAAE,MAAM,kBAAkB,WAAW,KAAK;AAAA,EACnD;AACF;","names":[]}
@@ -1 +1,17 @@
1
- export{createFactory,defaultEncryptionProvider}from"./chunk-NWPDBO55.js";import"./chunk-CGPJ25IS.js";import"./chunk-S3UXVGVK.js";import"./chunk-TGJY6ZQ7.js";import"./chunk-JAXX5FG7.js";import"./chunk-XICVVAG4.js";import"./chunk-FUGQ3OFQ.js";import"./chunk-GJXVQ2LL.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=createFactory.js.map
1
+ import {
2
+ createFactory,
3
+ defaultEncryptionProvider
4
+ } from "./chunks/chunk-KM6K7D2J.js";
5
+ import "./chunks/chunk-VIUQA4IN.js";
6
+ import "./chunks/chunk-2L4YGJ3C.js";
7
+ import "./chunks/chunk-UDMHV6JX.js";
8
+ import "./chunks/chunk-UJTGIE6R.js";
9
+ import "./chunks/chunk-TRDZS6YE.js";
10
+ import "./chunks/chunk-GWYWZHV2.js";
11
+ import "./chunks/chunk-UOGVVT4U.js";
12
+ import "./chunks/chunk-GOUAOFCH.js";
13
+ export {
14
+ createFactory,
15
+ defaultEncryptionProvider
16
+ };
17
+ //# sourceMappingURL=createFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"createFactory.js"}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +1,8 @@
1
- export{defaultSecureKeys}from"./chunk-FUGQ3OFQ.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=defaults.js.map
1
+ import {
2
+ defaultSecureKeys
3
+ } from "./chunks/chunk-GWYWZHV2.js";
4
+ import "./chunks/chunk-GOUAOFCH.js";
5
+ export {
6
+ defaultSecureKeys
7
+ };
8
+ //# sourceMappingURL=defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"defaults.js"}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/esm/hash.js CHANGED
@@ -1 +1,8 @@
1
- export{hash}from"./chunk-GJXVQ2LL.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=hash.js.map
1
+ import {
2
+ hash
3
+ } from "./chunks/chunk-UOGVVT4U.js";
4
+ import "./chunks/chunk-GOUAOFCH.js";
5
+ export {
6
+ hash
7
+ };
8
+ //# sourceMappingURL=hash.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"hash.js"}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/esm/index.js CHANGED
@@ -1 +1,30 @@
1
- export{createFactory}from"./chunk-NWPDBO55.js";export{EncryptedValue}from"./chunk-CGPJ25IS.js";import"./chunk-S3UXVGVK.js";import"./chunk-TGJY6ZQ7.js";import"./chunk-JAXX5FG7.js";export{ISecureConnectionString,ISecureFactory,ISecureString,ISecureURL}from"./chunk-XICVVAG4.js";export{defaultSecureKeys}from"./chunk-FUGQ3OFQ.js";import"./chunk-GJXVQ2LL.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=index.js.map
1
+ import {
2
+ createFactory
3
+ } from "./chunks/chunk-KM6K7D2J.js";
4
+ import {
5
+ EncryptedValue
6
+ } from "./chunks/chunk-VIUQA4IN.js";
7
+ import "./chunks/chunk-2L4YGJ3C.js";
8
+ import "./chunks/chunk-UDMHV6JX.js";
9
+ import "./chunks/chunk-UJTGIE6R.js";
10
+ import {
11
+ ISecureConnectionString,
12
+ ISecureFactory,
13
+ ISecureString,
14
+ ISecureURL
15
+ } from "./chunks/chunk-TRDZS6YE.js";
16
+ import {
17
+ defaultSecureKeys
18
+ } from "./chunks/chunk-GWYWZHV2.js";
19
+ import "./chunks/chunk-UOGVVT4U.js";
20
+ import "./chunks/chunk-GOUAOFCH.js";
21
+ export {
22
+ EncryptedValue,
23
+ ISecureConnectionString,
24
+ ISecureFactory,
25
+ ISecureString,
26
+ ISecureURL,
27
+ createFactory,
28
+ defaultSecureKeys
29
+ };
30
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +1,14 @@
1
- export{ISecureConnectionString,ISecureFactory,ISecureString,ISecureURL}from"./chunk-XICVVAG4.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=interfaces.js.map
1
+ import {
2
+ ISecureConnectionString,
3
+ ISecureFactory,
4
+ ISecureString,
5
+ ISecureURL
6
+ } from "./chunks/chunk-TRDZS6YE.js";
7
+ import "./chunks/chunk-GOUAOFCH.js";
8
+ export {
9
+ ISecureConnectionString,
10
+ ISecureFactory,
11
+ ISecureString,
12
+ ISecureURL
13
+ };
14
+ //# sourceMappingURL=interfaces.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"interfaces.js"}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/esm/types.js CHANGED
@@ -1 +1,15 @@
1
- import{__name as s}from"./chunk-7QVYU63E.js";var t=class{static{s(this,"BaseObject")}};export{t as BaseObject};//# sourceMappingURL=types.js.map
1
+ import {
2
+ __name
3
+ } from "./chunks/chunk-GOUAOFCH.js";
4
+
5
+ // src/types.ts
6
+ import "node:util";
7
+ var BaseObject = class {
8
+ static {
9
+ __name(this, "BaseObject");
10
+ }
11
+ };
12
+ export {
13
+ BaseObject
14
+ };
15
+ //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types.ts"],"names":[],"mappings":";AAIO,IAAe,aAAf,MAA0B;AAAA,EAJjC;AAIiC,IAAA,MAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AAAA;AAIjC","file":"types.js","sourcesContent":["import util, { type InspectOptions } from 'node:util';\n\nexport type InspectFunction = typeof util.inspect;\n\nexport abstract class BaseObject {\n public abstract toString(): string;\n public abstract toJSON(): string | object;\n public abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;\n}\n\nexport type SecureKeys = readonly string[];\n\nexport interface IEncryptedValue {\n getValue(): string;\n toString(): string;\n toJSON(): object;\n}\n\nexport interface IEncryptionProvider {\n encrypt(value: string): IEncryptedValue;\n}\n\nexport interface SecureConfig {\n secret: string | null;\n encryptionProvider: IEncryptionProvider;\n secretKeys: SecureKeys;\n}\n"]}
1
+ {"version":3,"sources":["../../src/types.ts"],"sourcesContent":["import util, { type InspectOptions } from 'node:util';\n\nexport type InspectFunction = typeof util.inspect;\n\nexport abstract class BaseObject {\n public abstract toString(): string;\n public abstract toJSON(): string | object;\n public abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;\n}\n\nexport type SecureKeys = readonly string[];\n\nexport interface IEncryptedValue {\n getValue(): string;\n toString(): string;\n toJSON(): object;\n}\n\nexport interface IEncryptionProvider {\n encrypt(value: string): IEncryptedValue;\n}\n\nexport interface SecureConfig {\n secret: string | null;\n encryptionProvider: IEncryptionProvider;\n secretKeys: SecureKeys;\n}\n"],"mappings":";;;;;AAAA,OAA0C;AAInC,IAAe,aAAf,MAA0B;AAAA,EAJjC,OAIiC;AAAA;AAAA;AAIjC;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shellicar/core-config",
3
3
  "private": false,
4
- "version": "2.1.4",
4
+ "version": "2.1.5",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": "Stephen Hellicar",
@@ -17,12 +17,13 @@
17
17
  ],
18
18
  "repository": {
19
19
  "type": "git",
20
- "url": "git+https://github.com/shellicar/core-config.git"
20
+ "url": "git+https://github.com/shellicar/ecosystem.git",
21
+ "directory": "packages/core-config"
21
22
  },
22
23
  "bugs": {
23
- "url": "https://github.com/shellicar/core-config/issues"
24
+ "url": "https://github.com/shellicar/ecosystem/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22pkg%3A%20core-config%22"
24
25
  },
25
- "homepage": "https://github.com/shellicar/core-config#readme",
26
+ "homepage": "https://github.com/shellicar/ecosystem/tree/main/packages/core-config#readme",
26
27
  "publishConfig": {
27
28
  "access": "public"
28
29
  },
@@ -53,18 +54,18 @@
53
54
  "*.md"
54
55
  ],
55
56
  "devDependencies": {
56
- "@shellicar/build-clean": "^1.2.3",
57
57
  "@tsconfig/node20": "^20.1.9",
58
- "@types/node": "^25.3.2",
59
- "terser": "^5.46.0",
58
+ "@types/node": "^25.6.0",
59
+ "terser": "^5.46.1",
60
60
  "tsup": "^8.5.1",
61
61
  "typescript": "^5.9.3",
62
- "vitest": "^4.0.18"
62
+ "vitest": "^4.1.4",
63
+ "@shellicar/typescript-config": "^1.0.0"
63
64
  },
64
65
  "scripts": {
65
66
  "build": "tsup-node",
66
- "dev": "tsup-node --watch",
67
67
  "test": "vitest run",
68
- "type-check": "tsc -p tsconfig.check.json"
68
+ "type-check": "tsc -p tsconfig.check.json",
69
+ "watch": "tsup-node --watch"
69
70
  }
70
71
  }
@@ -1 +0,0 @@
1
- "use strict";var e=require("./chunk-FKX4J4Q2.cjs"),r=require("./chunk-J7CRMQ5Z.cjs"),c=require("./chunk-VQ2XCAJT.cjs"),n=require("./chunk-XVDIOMZD.cjs"),t=require("./chunk-JS7CWWUD.cjs"),u=require("./chunk-PK6SKIKE.cjs"),i={encrypt:u.__name(r=>new e.EncryptedValue(r),"encrypt")},s=u.__name(e=>{const u={secret:e?.secret??null,encryptionProvider:e?.encryptionProvider??i,secretKeys:e?.secretKeys??t.defaultSecureKeys};return{string:n.SecureString.factory(u),connectionString:r.SecureConnectionString.factory(u),url:c.SecureURL.factory(u)}},"createFactory");exports.createFactory=s,exports.defaultEncryptionProvider=i;//# sourceMappingURL=chunk-7PP3CDDK.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/createFactory.ts"],"names":["__name","EncryptedValue","defaultSecureKeys","SecureString","SecureConnectionString","SecureURL"],"mappings":";AAQO,IAAM,yBAAA,GAAiD;AAAA,EAC5D,yBAASA,wBAAA,CAAA,CAAC,KAAA,KAAkB,IAAIC,gCAAA,CAAe,KAAK,CAAA,EAA3C,SAAA;AACX;AAEO,IAAM,aAAA,6CAAiB,OAAA,KAAoD;AAChF,EAAA,MAAM,MAAA,GAAuB;AAAA,IAC3B,MAAA,EAAQ,SAAS,MAAA,IAAU,IAAA;AAAA,IAC3B,kBAAA,EAAoB,SAAS,kBAAA,IAAsB,yBAAA;AAAA,IACnD,UAAA,EAAY,SAAS,UAAA,IAAcC;AAAA,GACrC;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQC,8BAAA,CAAa,OAAA,CAAQ,MAAM,CAAA;AAAA,IACnC,gBAAA,EAAkBC,wCAAA,CAAuB,OAAA,CAAQ,MAAM,CAAA;AAAA,IACvD,GAAA,EAAKC,2BAAA,CAAU,OAAA,CAAQ,MAAM;AAAA,GAC/B;AACF,CAAA,EAZ6B,eAAA","file":"chunk-7PP3CDDK.cjs","sourcesContent":["import { defaultSecureKeys } from './defaults';\nimport { EncryptedValue } from './EncryptedValue';\nimport type { ISecureFactory } from './interfaces';\nimport { SecureConnectionString } from './SecureConnectionString';\nimport { SecureString } from './SecureString';\nimport { SecureURL } from './SecureURL';\nimport type { IEncryptionProvider, SecureConfig } from './types';\n\nexport const defaultEncryptionProvider: IEncryptionProvider = {\n encrypt: (value: string) => new EncryptedValue(value),\n};\n\nexport const createFactory = (options?: Partial<SecureConfig>): ISecureFactory => {\n const config: SecureConfig = {\n secret: options?.secret ?? null,\n encryptionProvider: options?.encryptionProvider ?? defaultEncryptionProvider,\n secretKeys: options?.secretKeys ?? defaultSecureKeys,\n };\n\n return {\n string: SecureString.factory(config),\n connectionString: SecureConnectionString.factory(config),\n url: SecureURL.factory(config),\n };\n};\n"]}
@@ -1 +0,0 @@
1
- "use strict";var t=require("./chunk-PK6SKIKE.cjs"),e=require("node:crypto"),r=class{static{t.__name(this,"EncryptedValue")}encryptedData;iv;authTag;key;constructor(t){this.key=e.randomBytes(32),this.iv=e.randomBytes(16);const r=e.createCipheriv("aes-256-gcm",this.key,this.iv),a=[];a.push(r.update(t,"utf8")),a.push(r.final()),this.encryptedData=Buffer.concat(a),this.authTag=r.getAuthTag()}getValue(){const t=e.createDecipheriv("aes-256-gcm",this.key,this.iv);t.setAuthTag(this.authTag);try{const e=[];return e.push(t.update(this.encryptedData)),e.push(t.final()),Buffer.concat(e).toString("utf8")}catch(t){throw new Error("Failed to decrypt value: Invalid key or corrupted data")}}toString(){return"[EncryptedValue]"}toJSON(){return{type:"EncryptedValue",encrypted:!0}}};exports.EncryptedValue=r;//# sourceMappingURL=chunk-FKX4J4Q2.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/EncryptedValue.ts"],"names":["__name","randomBytes","createCipheriv","createDecipheriv"],"mappings":"sGAEO,IAAM,iBAAN,MAAqB;AAAA,EAF5B;AAE4B,IAAAA,wBAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA;AAAA,EACT,aAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EAEV,YAAY,KAAA,EAAe;AAChC,IAAA,IAAA,CAAK,GAAA,GAAMC,wBAAY,EAAE,CAAA;AACzB,IAAA,IAAA,CAAK,EAAA,GAAKA,wBAAY,EAAE,CAAA;AAExB,IAAA,MAAM,SAASC,0BAAA,CAAe,aAAA,EAAe,IAAA,CAAK,GAAA,EAAK,KAAK,EAAE,CAAA;AAE9D,IAAA,MAAM,kBAA4B,EAAC;AACnC,IAAA,eAAA,CAAgB,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,MAAM,CAAC,CAAA;AACjD,IAAA,eAAA,CAAgB,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA;AAEnC,IAAA,IAAA,CAAK,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA;AAClD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,UAAA,EAAW;AAAA,EACnC;AAAA,EAEO,QAAA,GAAmB;AACxB,IAAA,MAAM,WAAWC,4BAAA,CAAiB,aAAA,EAAe,IAAA,CAAK,GAAA,EAAK,KAAK,EAAE,CAAA;AAClE,IAAA,QAAA,CAAS,UAAA,CAAW,KAAK,OAAO,CAAA;AAEhC,IAAA,IAAI;AACF,MAAA,MAAM,kBAA4B,EAAC;AACnC,MAAA,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,aAAa,CAAC,CAAA;AACxD,MAAA,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,CAAA;AAErC,MAAA,OAAO,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA,CAAE,SAAS,MAAM,CAAA;AAAA,IACvD,SAAS,CAAA,EAAG;AAEV,MAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,IAC1E;AAAA,EACF;AAAA,EAEO,QAAA,GAAmB;AACxB,IAAA,OAAO,kBAAA;AAAA,EACT;AAAA,EAEO,MAAA,GAAiB;AACtB,IAAA,OAAO,EAAE,IAAA,EAAM,gBAAA,EAAkB,SAAA,EAAW,IAAA,EAAK;AAAA,EACnD;AACF","file":"chunk-FKX4J4Q2.cjs","sourcesContent":["import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto';\n\nexport class EncryptedValue {\n private readonly encryptedData: Buffer;\n private readonly iv: Buffer;\n private readonly authTag: Buffer;\n private readonly key: Buffer;\n\n public constructor(value: string) {\n this.key = randomBytes(32);\n this.iv = randomBytes(16);\n\n const cipher = createCipheriv('aes-256-gcm', this.key, this.iv);\n\n const encryptedChunks: Buffer[] = [];\n encryptedChunks.push(cipher.update(value, 'utf8'));\n encryptedChunks.push(cipher.final());\n\n this.encryptedData = Buffer.concat(encryptedChunks);\n this.authTag = cipher.getAuthTag();\n }\n\n public getValue(): string {\n const decipher = createDecipheriv('aes-256-gcm', this.key, this.iv);\n decipher.setAuthTag(this.authTag);\n\n try {\n const decryptedChunks: Buffer[] = [];\n decryptedChunks.push(decipher.update(this.encryptedData));\n decryptedChunks.push(decipher.final());\n\n return Buffer.concat(decryptedChunks).toString('utf8');\n } catch (_) {\n // Hide internal error details\n throw new Error('Failed to decrypt value: Invalid key or corrupted data');\n }\n }\n\n public toString(): string {\n return '[EncryptedValue]';\n }\n\n public toJSON(): object {\n return { type: 'EncryptedValue', encrypted: true };\n }\n}\n"]}
@@ -1 +0,0 @@
1
- "use strict";var e=require("./chunk-XVDIOMZD.cjs"),t=require("./chunk-JVM3GGW6.cjs"),r=require("./chunk-PK6SKIKE.cjs");function n(e){return e&&e.__esModule?e:{default:e}}var i=n(require("node:util")),c=class n extends t.ISecureConnectionString{static{r.__name(this,"SecureConnectionString")}#e;#t;get secretValue(){return this.#e.getValue()}constructor(e,t){super(),this.#e=t.encryptionProvider.encrypt(e),this.#t=this.parseConnectionString(e,t.secretKeys.map(e=>e.toLocaleLowerCase()),t)}parseConnectionString(t,r,n){return t.split(";").filter(Boolean).map(t=>{const[i,c]=t.split("="),o=c??"",u=r.includes(i.toLocaleLowerCase())?e.SecureString.from(o,n):o;return[i,u]})}static factory(e){return t=>n.from(t,e)}static from(e,t){return null===e?null:void 0!==e?new n(e,t):void 0}toString(){return this.#t.map(([e,t])=>`${e}=${t}`).join(";")}toJSON(){return Object.fromEntries(this.#t)}[i.default.inspect.custom](e,t,r){if(e<0)return"[SecureConnectionString]";const n=Object.assign({},t,{depth:null==t.depth?null:t.depth-1});return r(this.toJSON(),n)}};exports.SecureConnectionString=c;//# sourceMappingURL=chunk-J7CRMQ5Z.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/SecureConnectionString.ts"],"names":["ISecureConnectionString","__name","value","SecureString","util"],"mappings":"uTAKO,IAAM,sBAAA,GAAN,MAAM,uBAAA,SAA+BA,yCAAA,CAAwB;AAAA,EALpE;AAKoE,IAAAC,wBAAA,CAAA,IAAA,EAAA,wBAAA,CAAA;AAAA;AAAA,EACzD,eAAA;AAAA,EACA,KAAA;AAAA,EAET,IAAW,WAAA,GAAsB;AAC/B,IAAA,OAAO,IAAA,CAAK,gBAAgB,QAAA,EAAS;AAAA,EACvC;AAAA,EAEQ,WAAA,CAAY,OAAe,MAAA,EAAsB;AACvD,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA,CAAO,kBAAA,CAAmB,OAAA,CAAQ,KAAK,CAAA;AAC9D,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,qBAAA;AAAA,MAChB,KAAA;AAAA,MACA,OAAO,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,mBAAmB,CAAA;AAAA,MAClD;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,qBAAA,CAAsB,KAAA,EAAe,UAAA,EAAwB,MAAA,EAAyD;AAC5H,IAAA,OAAO,KAAA,CACJ,MAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,MAAA,MAAM,CAAC,GAAA,EAAKC,MAAK,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AACnC,MAAA,MAAM,IAAIA,MAAAA,IAAS,EAAA;AACnB,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,QAAA,CAAS,GAAA,CAAI,iBAAA,EAAmB,CAAA,GAAIC,8BAAA,CAAa,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,GAAI,CAAA;AAC1F,MAAA,OAAO,CAAC,KAAK,GAAG,CAAA;AAAA,IAClB,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,OAAO,QAAQ,MAAA,EAAiE;AAC9E,IAAA,OAAO,CAAC,KAAA,KAAkB,uBAAA,CAAuB,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,EACrE;AAAA,EAEA,OAAc,IAAA,CAA0C,KAAA,EAAU,MAAA,EAAqE;AACrI,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAI,uBAAA,CAAuB,KAAA,EAAO,MAAM,CAAA;AAAA,EACjD;AAAA,EAEgB,QAAA,GAAmB;AACjC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EACrE;AAAA,EAEgB,MAAA,GAAiB;AAC/B,IAAA,OAAO,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA;AAAA,EACtC;AAAA,EAEA,CAAiBC,qBAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,CAAE,KAAA,EAAe,SAAyB,OAAA,EAAkC;AAC9G,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,OAAO,0BAAA;AAAA,IACT;AACA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,IAAI,OAAA,EAAS;AAAA,MAC5C,OAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,GAAO,IAAA,GAAO,QAAQ,KAAA,GAAQ;AAAA,KACvD,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAO,EAAG,UAAU,CAAA;AAAA,EAC1C;AACF","file":"chunk-J7CRMQ5Z.cjs","sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport { ISecureConnectionString } from './interfaces';\nimport { SecureString } from './SecureString';\nimport type { IEncryptedValue, InspectFunction, SecureConfig, SecureKeys } from './types';\n\nexport class SecureConnectionString extends ISecureConnectionString {\n readonly #encryptedValue: IEncryptedValue;\n readonly #data: [string, string | SecureString][];\n\n public get secretValue(): string {\n return this.#encryptedValue.getValue();\n }\n\n private constructor(value: string, config: SecureConfig) {\n super();\n this.#encryptedValue = config.encryptionProvider.encrypt(value);\n this.#data = this.parseConnectionString(\n value,\n config.secretKeys.map((x) => x.toLocaleLowerCase()),\n config,\n );\n }\n\n private parseConnectionString(value: string, secretKeys: SecureKeys, config: SecureConfig): [string, string | SecureString][] {\n return value\n .split(';')\n .filter(Boolean)\n .map((pair) => {\n const [key, value] = pair.split('=');\n const v = value ?? '';\n const val = secretKeys.includes(key.toLocaleLowerCase()) ? SecureString.from(v, config) : v;\n return [key, val];\n });\n }\n\n static factory(config: SecureConfig): (value: string) => SecureConnectionString {\n return (value: string) => SecureConnectionString.from(value, config);\n }\n\n public static from<T extends string | null | undefined>(value: T, config: SecureConfig): T extends string ? SecureConnectionString : T {\n if (value === null) {\n return null as T extends string ? SecureConnectionString : T;\n }\n if (value === undefined) {\n return undefined as T extends string ? SecureConnectionString : T;\n }\n return new SecureConnectionString(value, config) as T extends string ? SecureConnectionString : T;\n }\n\n public override toString(): string {\n return this.#data.map(([key, value]) => `${key}=${value}`).join(';');\n }\n\n public override toJSON(): object {\n return Object.fromEntries(this.#data);\n }\n\n public override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureConnectionString]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n"]}
@@ -1 +0,0 @@
1
- "use strict";exports.defaultSecureKeys=["AccessKey","SharedAccessKey","Password","AccountKey","Secret","SecretKey","ApiKey","Token","Key","MasterKey","PrimaryKey","SecondaryKey"];//# sourceMappingURL=chunk-JS7CWWUD.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/defaults.ts"],"names":[],"mappings":";AAEO,IAAM,iBAAA,GAAoB,CAAC,WAAA,EAAa,iBAAA,EAAmB,UAAA,EAAY,YAAA,EAAc,QAAA,EAAU,WAAA,EAAa,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,cAAc,cAAc","file":"chunk-JS7CWWUD.cjs","sourcesContent":["import type { SecureKeys } from './types';\n\nexport const defaultSecureKeys = ['AccessKey', 'SharedAccessKey', 'Password', 'AccountKey', 'Secret', 'SecretKey', 'ApiKey', 'Token', 'Key', 'MasterKey', 'PrimaryKey', 'SecondaryKey'] as const satisfies SecureKeys;\n"]}
@@ -1 +0,0 @@
1
- "use strict";var e=require("./chunk-PK6SKIKE.cjs"),t=class{static{e.__name(this,"ISecureString")}},c=class{static{e.__name(this,"ISecureConnectionString")}},s=class{static{e.__name(this,"ISecureURL")}},r=class{static{e.__name(this,"ISecureFactory")}};exports.ISecureConnectionString=c,exports.ISecureFactory=r,exports.ISecureString=t,exports.ISecureURL=s;//# sourceMappingURL=chunk-JVM3GGW6.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/interfaces.ts"],"names":["__name"],"mappings":";AAGO,IAAe,gBAAf,MAAmD;AAAA,EAH1D;AAG0D,IAAAA,wBAAA,CAAA,IAAA,EAAA,eAAA,CAAA;AAAA;AAK1D;AAEO,IAAe,0BAAf,MAA6D;AAAA,EAVpE;AAUoE,IAAAA,wBAAA,CAAA,IAAA,EAAA,yBAAA,CAAA;AAAA;AAKpE;AAEO,IAAe,aAAf,MAAgD;AAAA,EAjBvD;AAiBuD,IAAAA,wBAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AAAA;AAKvD;AAEO,IAAe,iBAAf,MAA8B;AAAA,EAxBrC;AAwBqC,IAAAA,wBAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA;AAIrC","file":"chunk-JVM3GGW6.cjs","sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport type { BaseObject, InspectFunction } from './types';\n\nexport abstract class ISecureString implements BaseObject {\n public abstract toString(): string;\n public abstract toJSON(): string | object;\n public abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;\n public abstract get secretValue(): string;\n}\n\nexport abstract class ISecureConnectionString implements BaseObject {\n public abstract toString(): string;\n public abstract toJSON(): string | object;\n public abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;\n public abstract get secretValue(): string;\n}\n\nexport abstract class ISecureURL implements BaseObject {\n public abstract toString(): string;\n public abstract toJSON(): object;\n public abstract [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string;\n public abstract get secretValue(): URL;\n}\n\nexport abstract class ISecureFactory {\n public abstract string(value: string): ISecureString;\n public abstract connectionString(value: string, secretKeys?: readonly string[]): ISecureConnectionString;\n public abstract url(value: URL): ISecureURL;\n}\n"]}
@@ -1 +0,0 @@
1
- "use strict";var e=Object.defineProperty;exports.__name=(r,a)=>e(r,"name",{value:a,configurable:!0});//# sourceMappingURL=chunk-PK6SKIKE.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-PK6SKIKE.cjs"}
@@ -1 +0,0 @@
1
- "use strict";var e=require("./chunk-XVDIOMZD.cjs"),r=require("./chunk-JVM3GGW6.cjs"),t=require("./chunk-PK6SKIKE.cjs");function s(e){return e&&e.__esModule?e:{default:e}}var n=s(require("node:util")),u=class s extends r.ISecureURL{static{t.__name(this,"SecureURL")}#e;#r;get secretValue(){return new URL(this.#e.getValue())}constructor(r,t){super(),this.#e=t.encryptionProvider.encrypt(r.href),this.#r=e.SecureString.from(r.password||null,t)}static factory(e){return r=>s.from(r,e)}static from(e,r){return null===e?null:void 0!==e?new s(e,r):void 0}toString(){const e=this.secretValue,r=new URL(e.href);return null!==this.#r&&(r.password=this.#r.toString()),r.href}toJSON(){const e=this.secretValue,r=new URL(e.href);r.password="";const t=new URLSearchParams(r.searchParams);let s;r.search="",null!==this.#r&&(s=this.#r.toString());const n={href:r.href};return void 0!==s&&(n.password=s),t.size>0&&(n.searchParams=Object.fromEntries(t)),n}[n.default.inspect.custom](e,r,t){if(e<0)return"[SecureURL]";const s=Object.assign({},r,{depth:null==r.depth?null:r.depth-1});return t(this.toJSON(),s)}};exports.SecureURL=u;//# sourceMappingURL=chunk-VQ2XCAJT.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/SecureURL.ts"],"names":["ISecureURL","__name","SecureString","util"],"mappings":"uTAWO,IAAM,SAAA,GAAN,MAAM,UAAA,SAAkBA,4BAAA,CAAW;AAAA,EAX1C;AAW0C,IAAAC,wBAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA;AAAA,EAC/B,eAAA;AAAA,EACA,SAAA;AAAA,EAET,IAAW,WAAA,GAAmB;AAC5B,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA;AAAA,EAChD;AAAA,EAEQ,WAAA,CAAY,OAAY,MAAA,EAAsB;AACpD,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA,CAAO,kBAAA,CAAmB,OAAA,CAAQ,MAAM,IAAI,CAAA;AACnE,IAAA,IAAA,CAAK,YAAYC,8BAAA,CAAa,IAAA,CAAK,KAAA,CAAM,QAAA,IAAY,MAAM,MAAM,CAAA;AAAA,EACnE;AAAA,EAEA,OAAO,QAAQ,MAAA,EAAkD;AAC/D,IAAA,OAAO,CAAC,KAAA,KAAe,UAAA,CAAU,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,EACrD;AAAA,EAEA,OAAc,IAAA,CAAuC,KAAA,EAAU,MAAA,EAAqD;AAClH,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAI,UAAA,CAAU,KAAA,EAAO,MAAM,CAAA;AAAA,EACpC;AAAA,EAES,QAAA,GAAmB;AAC1B,IAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AACzB,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,WAAA,CAAY,IAAI,CAAA;AACvC,IAAA,IAAI,IAAA,CAAK,cAAc,IAAA,EAAM;AAC3B,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,QAAA,EAAS;AAAA,IAC5C;AACA,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB;AAAA,EAES,MAAA,GAAoB;AAC3B,IAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AACzB,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,WAAA,CAAY,IAAI,CAAA;AACvC,IAAA,MAAA,CAAO,QAAA,GAAW,EAAA;AAElB,IAAA,MAAM,YAAA,GAAe,IAAI,eAAA,CAAgB,MAAA,CAAO,YAAY,CAAA;AAC5D,IAAA,MAAA,CAAO,MAAA,GAAS,EAAA;AAEhB,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,IAAA,CAAK,cAAc,IAAA,EAAM;AAC3B,MAAA,QAAA,GAAW,IAAA,CAAK,UAAU,QAAA,EAAS;AAAA,IACrC;AAEA,IAAA,MAAM,MAAA,GAAoB;AAAA,MACxB,MAAM,MAAA,CAAO;AAAA,KACf;AACA,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,MAAA,CAAO,QAAA,GAAW,QAAA;AAAA,IACpB;AACA,IAAA,IAAI,YAAA,CAAa,OAAO,CAAA,EAAG;AACzB,MAAA,MAAA,CAAO,YAAA,GAAe,MAAA,CAAO,WAAA,CAAY,YAAY,CAAA;AAAA,IACvD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EACA,CAAUC,qBAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,CAAE,KAAA,EAAe,SAAyB,OAAA,EAAkC;AACvG,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,OAAO,aAAA;AAAA,IACT;AACA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,IAAI,OAAA,EAAS;AAAA,MAC5C,OAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,GAAO,IAAA,GAAO,QAAQ,KAAA,GAAQ;AAAA,KACvD,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAO,EAAG,UAAU,CAAA;AAAA,EAC1C;AACF","file":"chunk-VQ2XCAJT.cjs","sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport { ISecureURL } from './interfaces';\nimport { SecureString } from './SecureString';\nimport type { IEncryptedValue, InspectFunction, SecureConfig } from './types';\n\ntype UrlObject = {\n href: string;\n password?: string;\n searchParams?: Record<string, string>;\n};\n\nexport class SecureURL extends ISecureURL {\n readonly #encryptedValue: IEncryptedValue;\n readonly #password: SecureString | null;\n\n public get secretValue(): URL {\n return new URL(this.#encryptedValue.getValue());\n }\n\n private constructor(value: URL, config: SecureConfig) {\n super();\n this.#encryptedValue = config.encryptionProvider.encrypt(value.href);\n this.#password = SecureString.from(value.password || null, config);\n }\n\n static factory(config: SecureConfig): (value: URL) => ISecureURL {\n return (value: URL) => SecureURL.from(value, config);\n }\n\n public static from<T extends URL | null | undefined>(value: T, config: SecureConfig): T extends URL ? SecureURL : T {\n if (value === null) {\n return null as T extends URL ? SecureURL : T;\n }\n if (value === undefined) {\n return undefined as T extends URL ? SecureURL : T;\n }\n return new SecureURL(value, config) as T extends URL ? SecureURL : T;\n }\n\n override toString(): string {\n const originalUrl = this.secretValue;\n const newUrl = new URL(originalUrl.href);\n if (this.#password !== null) {\n newUrl.password = this.#password.toString();\n }\n return newUrl.href;\n }\n\n override toJSON(): UrlObject {\n const originalUrl = this.secretValue;\n const newUrl = new URL(originalUrl.href);\n newUrl.password = '';\n\n const searchParams = new URLSearchParams(newUrl.searchParams);\n newUrl.search = '';\n\n let password: string | undefined;\n if (this.#password !== null) {\n password = this.#password.toString();\n }\n\n const result: UrlObject = {\n href: newUrl.href,\n };\n if (password !== undefined) {\n result.password = password;\n }\n if (searchParams.size > 0) {\n result.searchParams = Object.fromEntries(searchParams);\n }\n return result;\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureURL]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n"]}
@@ -1 +0,0 @@
1
- "use strict";var h=require("./chunk-PK6SKIKE.cjs"),e=require("node:crypto"),a={sha256:h.__name(()=>({hash:h.__name(h=>e.createHash("sha256").update(h).digest("hex"),"hash"),prefix:"sha256"}),"sha256"),hs256:h.__name(a=>({hash:h.__name(h=>e.createHmac("sha256",a).update(h).digest("hex"),"hash"),prefix:"hs256"}),"hs256")},s=h.__name(h=>null==h?a.sha256():a.hs256(h),"getAlgorithm"),r=h.__name((h,e)=>{const a=s(e),r=a.hash(h);return`${a.prefix}:${r}`},"hash");exports.hash=r;//# sourceMappingURL=chunk-WZWXGAJN.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/hash.ts"],"names":["__name","createHash","createHmac","hash"],"mappings":"sGAOA,IAAM,UAAA,GAAa;AAAA,EACjB,wBAAQA,wBAAA,CAAA,OAAO;AAAA,IACb,IAAA,kBAAMA,wBAAA,CAAA,CAAC,CAAA,KAAcC,sBAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAA1D,MAAA,CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV,CAAA,EAHQ,QAAA,CAAA;AAAA,EAIR,KAAA,4CAAQ,MAAA,MAAoB;AAAA,IAC1B,IAAA,kBAAMD,wBAAA,CAAA,CAAC,CAAA,KAAcE,sBAAA,CAAW,QAAA,EAAU,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAlE,MAAA,CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV,CAAA,EAHO,OAAA;AAIT,CAAA;AAEA,IAAM,YAAA,6CAAgB,MAAA,KAAyC;AAC7D,EAAA,OAAO,UAAU,IAAA,GAAO,UAAA,CAAW,QAAO,GAAI,UAAA,CAAW,MAAM,MAAM,CAAA;AACvE,CAAA,EAFqB,cAAA,CAAA;AAId,IAAM,IAAA,mBAAOF,wBAAA,CAAA,CAAC,KAAA,EAAe,MAAA,KAA0B;AAC5D,EAAA,MAAM,GAAA,GAAM,aAAa,MAAM,CAAA;AAC/B,EAAA,MAAMG,KAAAA,GAAO,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,EAAA,OAAO,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,CAAA,EAAIA,KAAI,CAAA,CAAA;AAC9B,CAAA,EAJoB,MAAA","file":"chunk-WZWXGAJN.cjs","sourcesContent":["import { createHash, createHmac } from 'node:crypto';\n\ntype HashAlgorithm = {\n hash: (x: string) => string;\n prefix: string;\n};\n\nconst algorithms = {\n sha256: () => ({\n hash: (x: string) => createHash('sha256').update(x).digest('hex'),\n prefix: 'sha256',\n }),\n hs256: (secret: string) => ({\n hash: (x: string) => createHmac('sha256', secret).update(x).digest('hex'),\n prefix: 'hs256',\n }),\n} as const;\n\nconst getAlgorithm = (secret: string | null): HashAlgorithm => {\n return secret == null ? algorithms.sha256() : algorithms.hs256(secret);\n};\n\nexport const hash = (input: string, secret: string | null) => {\n const alg = getAlgorithm(secret);\n const hash = alg.hash(input);\n return `${alg.prefix}:${hash}`;\n};\n"]}
@@ -1 +0,0 @@
1
- "use strict";var e=require("./chunk-JVM3GGW6.cjs"),t=require("./chunk-WZWXGAJN.cjs"),r=require("./chunk-PK6SKIKE.cjs");function n(e){return e&&e.__esModule?e:{default:e}}var u=n(require("node:util")),s=class n extends e.ISecureString{static{r.__name(this,"SecureString")}#e;#t;get secretValue(){return this.#e.getValue()}constructor(e,r){super(),this.#e=r.encryptionProvider.encrypt(e),this.#t=t.hash(e,r.secret)}static factory(e){return t=>n.from(t,e)}static from(e,t){return null===e?null:void 0!==e?new n(e,t):void 0}toString(){return this.#t}toJSON(){return this.toString()}[u.default.inspect.custom](e,t,r){if(e<0)return"[SecureString]";const n=Object.assign({},t,{depth:null==t.depth?null:t.depth-1});return r(this.toJSON(),n)}};exports.SecureString=s;//# sourceMappingURL=chunk-XVDIOMZD.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/SecureString.ts"],"names":["ISecureString","__name","hash","util"],"mappings":"uTAKO,IAAM,YAAA,GAAN,MAAM,aAAA,SAAqBA,+BAAA,CAAc;AAAA,EALhD;AAKgD,IAAAC,wBAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAAA;AAAA,EACrC,eAAA;AAAA,EACA,KAAA;AAAA,EAET,IAAW,WAAA,GAAsB;AAC/B,IAAA,OAAO,IAAA,CAAK,gBAAgB,QAAA,EAAS;AAAA,EACvC;AAAA,EAEQ,WAAA,CAAY,OAAe,MAAA,EAAsB;AACvD,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA,CAAO,kBAAA,CAAmB,OAAA,CAAQ,KAAK,CAAA;AAC9D,IAAA,IAAA,CAAK,KAAA,GAAQC,sBAAA,CAAK,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA;AAAA,EACxC;AAAA,EAEA,OAAO,QAAQ,MAAA,EAAuD;AACpE,IAAA,OAAO,CAAC,KAAA,KAAkB,aAAA,CAAa,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,EAC3D;AAAA,EAEA,OAAc,IAAA,CAA0C,KAAA,EAAU,MAAA,EAA2D;AAC3H,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAI,aAAA,CAAa,KAAA,EAAO,MAAM,CAAA;AAAA,EACvC;AAAA,EAEgB,QAAA,GAAW;AACzB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACgB,MAAA,GAAS;AACvB,IAAA,OAAO,KAAK,QAAA,EAAS;AAAA,EACvB;AAAA,EACA,CAAUC,qBAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,CAAE,KAAA,EAAe,SAAyB,OAAA,EAAkC;AACvG,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,OAAO,gBAAA;AAAA,IACT;AACA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,IAAI,OAAA,EAAS;AAAA,MAC5C,OAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,GAAO,IAAA,GAAO,QAAQ,KAAA,GAAQ;AAAA,KACvD,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAO,EAAG,UAAU,CAAA;AAAA,EAC1C;AACF","file":"chunk-XVDIOMZD.cjs","sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport { hash } from './hash';\nimport { ISecureString } from './interfaces';\nimport type { IEncryptedValue, InspectFunction, SecureConfig } from './types';\n\nexport class SecureString extends ISecureString {\n readonly #encryptedValue: IEncryptedValue;\n readonly #hash: string;\n\n public get secretValue(): string {\n return this.#encryptedValue.getValue();\n }\n\n private constructor(value: string, config: SecureConfig) {\n super();\n this.#encryptedValue = config.encryptionProvider.encrypt(value);\n this.#hash = hash(value, config.secret);\n }\n\n static factory(config: SecureConfig): (value: string) => SecureString {\n return (value: string) => SecureString.from(value, config);\n }\n\n public static from<T extends string | null | undefined>(value: T, config: SecureConfig): T extends string ? SecureString : T {\n if (value === null) {\n return null as T extends string ? SecureString : T;\n }\n if (value === undefined) {\n return undefined as T extends string ? SecureString : T;\n }\n return new SecureString(value, config) as T extends string ? SecureString : T;\n }\n\n public override toString() {\n return this.#hash;\n }\n public override toJSON() {\n return this.toString();\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureString]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n"]}
@@ -1 +0,0 @@
1
- var e=Object.defineProperty,r=(r,a)=>e(r,"name",{value:a,configurable:!0});export{r as __name};//# sourceMappingURL=chunk-7QVYU63E.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-7QVYU63E.js"}
@@ -1 +0,0 @@
1
- import{__name as t}from"./chunk-7QVYU63E.js";import{randomBytes as e,createCipheriv as a,createDecipheriv as r}from"node:crypto";var c=class{static{t(this,"EncryptedValue")}encryptedData;iv;authTag;key;constructor(t){this.key=e(32),this.iv=e(16);const r=a("aes-256-gcm",this.key,this.iv),c=[];c.push(r.update(t,"utf8")),c.push(r.final()),this.encryptedData=Buffer.concat(c),this.authTag=r.getAuthTag()}getValue(){const t=r("aes-256-gcm",this.key,this.iv);t.setAuthTag(this.authTag);try{const e=[];return e.push(t.update(this.encryptedData)),e.push(t.final()),Buffer.concat(e).toString("utf8")}catch(t){throw new Error("Failed to decrypt value: Invalid key or corrupted data")}}toString(){return"[EncryptedValue]"}toJSON(){return{type:"EncryptedValue",encrypted:!0}}};export{c as EncryptedValue};//# sourceMappingURL=chunk-CGPJ25IS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/EncryptedValue.ts"],"names":[],"mappings":"+GAEO,IAAM,iBAAN,MAAqB;AAAA,EAF5B;AAE4B,IAAA,MAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA;AAAA,EACT,aAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EAEV,YAAY,KAAA,EAAe;AAChC,IAAA,IAAA,CAAK,GAAA,GAAM,YAAY,EAAE,CAAA;AACzB,IAAA,IAAA,CAAK,EAAA,GAAK,YAAY,EAAE,CAAA;AAExB,IAAA,MAAM,SAAS,cAAA,CAAe,aAAA,EAAe,IAAA,CAAK,GAAA,EAAK,KAAK,EAAE,CAAA;AAE9D,IAAA,MAAM,kBAA4B,EAAC;AACnC,IAAA,eAAA,CAAgB,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,MAAM,CAAC,CAAA;AACjD,IAAA,eAAA,CAAgB,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA;AAEnC,IAAA,IAAA,CAAK,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA;AAClD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,UAAA,EAAW;AAAA,EACnC;AAAA,EAEO,QAAA,GAAmB;AACxB,IAAA,MAAM,WAAW,gBAAA,CAAiB,aAAA,EAAe,IAAA,CAAK,GAAA,EAAK,KAAK,EAAE,CAAA;AAClE,IAAA,QAAA,CAAS,UAAA,CAAW,KAAK,OAAO,CAAA;AAEhC,IAAA,IAAI;AACF,MAAA,MAAM,kBAA4B,EAAC;AACnC,MAAA,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,aAAa,CAAC,CAAA;AACxD,MAAA,eAAA,CAAgB,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,CAAA;AAErC,MAAA,OAAO,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA,CAAE,SAAS,MAAM,CAAA;AAAA,IACvD,SAAS,CAAA,EAAG;AAEV,MAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,IAC1E;AAAA,EACF;AAAA,EAEO,QAAA,GAAmB;AACxB,IAAA,OAAO,kBAAA;AAAA,EACT;AAAA,EAEO,MAAA,GAAiB;AACtB,IAAA,OAAO,EAAE,IAAA,EAAM,gBAAA,EAAkB,SAAA,EAAW,IAAA,EAAK;AAAA,EACnD;AACF","file":"chunk-CGPJ25IS.js","sourcesContent":["import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto';\n\nexport class EncryptedValue {\n private readonly encryptedData: Buffer;\n private readonly iv: Buffer;\n private readonly authTag: Buffer;\n private readonly key: Buffer;\n\n public constructor(value: string) {\n this.key = randomBytes(32);\n this.iv = randomBytes(16);\n\n const cipher = createCipheriv('aes-256-gcm', this.key, this.iv);\n\n const encryptedChunks: Buffer[] = [];\n encryptedChunks.push(cipher.update(value, 'utf8'));\n encryptedChunks.push(cipher.final());\n\n this.encryptedData = Buffer.concat(encryptedChunks);\n this.authTag = cipher.getAuthTag();\n }\n\n public getValue(): string {\n const decipher = createDecipheriv('aes-256-gcm', this.key, this.iv);\n decipher.setAuthTag(this.authTag);\n\n try {\n const decryptedChunks: Buffer[] = [];\n decryptedChunks.push(decipher.update(this.encryptedData));\n decryptedChunks.push(decipher.final());\n\n return Buffer.concat(decryptedChunks).toString('utf8');\n } catch (_) {\n // Hide internal error details\n throw new Error('Failed to decrypt value: Invalid key or corrupted data');\n }\n }\n\n public toString(): string {\n return '[EncryptedValue]';\n }\n\n public toJSON(): object {\n return { type: 'EncryptedValue', encrypted: true };\n }\n}\n"]}
@@ -1 +0,0 @@
1
- var e=["AccessKey","SharedAccessKey","Password","AccountKey","Secret","SecretKey","ApiKey","Token","Key","MasterKey","PrimaryKey","SecondaryKey"];export{e as defaultSecureKeys};//# sourceMappingURL=chunk-FUGQ3OFQ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/defaults.ts"],"names":[],"mappings":";AAEO,IAAM,iBAAA,GAAoB,CAAC,WAAA,EAAa,iBAAA,EAAmB,UAAA,EAAY,YAAA,EAAc,QAAA,EAAU,WAAA,EAAa,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,cAAc,cAAc","file":"chunk-FUGQ3OFQ.js","sourcesContent":["import type { SecureKeys } from './types';\n\nexport const defaultSecureKeys = ['AccessKey', 'SharedAccessKey', 'Password', 'AccountKey', 'Secret', 'SecretKey', 'ApiKey', 'Token', 'Key', 'MasterKey', 'PrimaryKey', 'SecondaryKey'] as const satisfies SecureKeys;\n"]}
@@ -1 +0,0 @@
1
- import{__name as h}from"./chunk-7QVYU63E.js";import{createHmac as s,createHash as a}from"node:crypto";var e={sha256:h(()=>({hash:h(h=>a("sha256").update(h).digest("hex"),"hash"),prefix:"sha256"}),"sha256"),hs256:h(a=>({hash:h(h=>s("sha256",a).update(h).digest("hex"),"hash"),prefix:"hs256"}),"hs256")},r=h(h=>null==h?e.sha256():e.hs256(h),"getAlgorithm"),t=h((h,s)=>{const a=r(s),e=a.hash(h);return`${a.prefix}:${e}`},"hash");export{t as hash};//# sourceMappingURL=chunk-GJXVQ2LL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/hash.ts"],"names":["hash"],"mappings":"yFAOA,IAAM,UAAA,GAAa;AAAA,EACjB,wBAAQ,MAAA,CAAA,OAAO;AAAA,IACb,IAAA,kBAAM,MAAA,CAAA,CAAC,CAAA,KAAc,UAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAA1D,MAAA,CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV,CAAA,EAHQ,QAAA,CAAA;AAAA,EAIR,KAAA,0BAAQ,MAAA,MAAoB;AAAA,IAC1B,IAAA,kBAAM,MAAA,CAAA,CAAC,CAAA,KAAc,UAAA,CAAW,QAAA,EAAU,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAlE,MAAA,CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV,CAAA,EAHO,OAAA;AAIT,CAAA;AAEA,IAAM,YAAA,2BAAgB,MAAA,KAAyC;AAC7D,EAAA,OAAO,UAAU,IAAA,GAAO,UAAA,CAAW,QAAO,GAAI,UAAA,CAAW,MAAM,MAAM,CAAA;AACvE,CAAA,EAFqB,cAAA,CAAA;AAId,IAAM,IAAA,mBAAO,MAAA,CAAA,CAAC,KAAA,EAAe,MAAA,KAA0B;AAC5D,EAAA,MAAM,GAAA,GAAM,aAAa,MAAM,CAAA;AAC/B,EAAA,MAAMA,KAAAA,GAAO,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,EAAA,OAAO,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,CAAA,EAAIA,KAAI,CAAA,CAAA;AAC9B,CAAA,EAJoB,MAAA","file":"chunk-GJXVQ2LL.js","sourcesContent":["import { createHash, createHmac } from 'node:crypto';\n\ntype HashAlgorithm = {\n hash: (x: string) => string;\n prefix: string;\n};\n\nconst algorithms = {\n sha256: () => ({\n hash: (x: string) => createHash('sha256').update(x).digest('hex'),\n prefix: 'sha256',\n }),\n hs256: (secret: string) => ({\n hash: (x: string) => createHmac('sha256', secret).update(x).digest('hex'),\n prefix: 'hs256',\n }),\n} as const;\n\nconst getAlgorithm = (secret: string | null): HashAlgorithm => {\n return secret == null ? algorithms.sha256() : algorithms.hs256(secret);\n};\n\nexport const hash = (input: string, secret: string | null) => {\n const alg = getAlgorithm(secret);\n const hash = alg.hash(input);\n return `${alg.prefix}:${hash}`;\n};\n"]}
@@ -1 +0,0 @@
1
- import{ISecureString as t}from"./chunk-XICVVAG4.js";import{hash as r}from"./chunk-GJXVQ2LL.js";import{__name as e}from"./chunk-7QVYU63E.js";import n from"node:util";var s=class s extends t{static{e(this,"SecureString")}#t;#r;get secretValue(){return this.#t.getValue()}constructor(t,e){super(),this.#t=e.encryptionProvider.encrypt(t),this.#r=r(t,e.secret)}static factory(t){return r=>s.from(r,t)}static from(t,r){return null===t?null:void 0!==t?new s(t,r):void 0}toString(){return this.#r}toJSON(){return this.toString()}[n.inspect.custom](t,r,e){if(t<0)return"[SecureString]";const n=Object.assign({},r,{depth:null==r.depth?null:r.depth-1});return e(this.toJSON(),n)}};export{s as SecureString};//# sourceMappingURL=chunk-JAXX5FG7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/SecureString.ts"],"names":[],"mappings":"4JAKO,IAAM,YAAA,GAAN,MAAM,aAAA,SAAqB,aAAA,CAAc;AAAA,EALhD;AAKgD,IAAA,MAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAAA;AAAA,EACrC,eAAA;AAAA,EACA,KAAA;AAAA,EAET,IAAW,WAAA,GAAsB;AAC/B,IAAA,OAAO,IAAA,CAAK,gBAAgB,QAAA,EAAS;AAAA,EACvC;AAAA,EAEQ,WAAA,CAAY,OAAe,MAAA,EAAsB;AACvD,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA,CAAO,kBAAA,CAAmB,OAAA,CAAQ,KAAK,CAAA;AAC9D,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,EAAO,MAAA,CAAO,MAAM,CAAA;AAAA,EACxC;AAAA,EAEA,OAAO,QAAQ,MAAA,EAAuD;AACpE,IAAA,OAAO,CAAC,KAAA,KAAkB,aAAA,CAAa,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,EAC3D;AAAA,EAEA,OAAc,IAAA,CAA0C,KAAA,EAAU,MAAA,EAA2D;AAC3H,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAI,aAAA,CAAa,KAAA,EAAO,MAAM,CAAA;AAAA,EACvC;AAAA,EAEgB,QAAA,GAAW;AACzB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EACgB,MAAA,GAAS;AACvB,IAAA,OAAO,KAAK,QAAA,EAAS;AAAA,EACvB;AAAA,EACA,CAAU,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,CAAE,KAAA,EAAe,SAAyB,OAAA,EAAkC;AACvG,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,OAAO,gBAAA;AAAA,IACT;AACA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,IAAI,OAAA,EAAS;AAAA,MAC5C,OAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,GAAO,IAAA,GAAO,QAAQ,KAAA,GAAQ;AAAA,KACvD,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAO,EAAG,UAAU,CAAA;AAAA,EAC1C;AACF","file":"chunk-JAXX5FG7.js","sourcesContent":["import util, { type InspectOptions } from 'node:util';\nimport { hash } from './hash';\nimport { ISecureString } from './interfaces';\nimport type { IEncryptedValue, InspectFunction, SecureConfig } from './types';\n\nexport class SecureString extends ISecureString {\n readonly #encryptedValue: IEncryptedValue;\n readonly #hash: string;\n\n public get secretValue(): string {\n return this.#encryptedValue.getValue();\n }\n\n private constructor(value: string, config: SecureConfig) {\n super();\n this.#encryptedValue = config.encryptionProvider.encrypt(value);\n this.#hash = hash(value, config.secret);\n }\n\n static factory(config: SecureConfig): (value: string) => SecureString {\n return (value: string) => SecureString.from(value, config);\n }\n\n public static from<T extends string | null | undefined>(value: T, config: SecureConfig): T extends string ? SecureString : T {\n if (value === null) {\n return null as T extends string ? SecureString : T;\n }\n if (value === undefined) {\n return undefined as T extends string ? SecureString : T;\n }\n return new SecureString(value, config) as T extends string ? SecureString : T;\n }\n\n public override toString() {\n return this.#hash;\n }\n public override toJSON() {\n return this.toString();\n }\n override [util.inspect.custom](depth: number, options: InspectOptions, inspect: InspectFunction): string {\n if (depth < 0) {\n return '[SecureString]';\n }\n const newOptions = Object.assign({}, options, {\n depth: options.depth == null ? null : options.depth - 1,\n });\n return inspect(this.toJSON(), newOptions);\n }\n}\n"]}