samlesa 2.12.113 → 2.14.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.

Potentially problematic release.


This version of samlesa might be problematic. Click here for more details.

Files changed (145) hide show
  1. package/build/index.js +18 -54
  2. package/build/index.js.map +1 -1
  3. package/build/src/api.js +18 -24
  4. package/build/src/api.js.map +1 -1
  5. package/build/src/binding-post.js +337 -365
  6. package/build/src/binding-post.js.map +1 -1
  7. package/build/src/binding-redirect.js +312 -340
  8. package/build/src/binding-redirect.js.map +1 -1
  9. package/build/src/binding-simplesign.js +201 -229
  10. package/build/src/binding-simplesign.js.map +1 -1
  11. package/build/src/entity-idp.js +119 -127
  12. package/build/src/entity-idp.js.map +1 -1
  13. package/build/src/entity-sp.js +88 -96
  14. package/build/src/entity-sp.js.map +1 -1
  15. package/build/src/entity.js +193 -225
  16. package/build/src/entity.js.map +1 -1
  17. package/build/src/extractor.js +361 -369
  18. package/build/src/extractor.js.map +1 -1
  19. package/build/src/flow.js +313 -320
  20. package/build/src/flow.js.map +1 -1
  21. package/build/src/libsaml.js +693 -721
  22. package/build/src/libsaml.js.map +1 -1
  23. package/build/src/metadata-idp.js +119 -127
  24. package/build/src/metadata-idp.js.map +1 -1
  25. package/build/src/metadata-sp.js +223 -231
  26. package/build/src/metadata-sp.js.map +1 -1
  27. package/build/src/metadata.js +138 -166
  28. package/build/src/metadata.js.map +1 -1
  29. package/build/src/types.js +4 -11
  30. package/build/src/types.js.map +1 -1
  31. package/build/src/urn.js +204 -212
  32. package/build/src/urn.js.map +1 -1
  33. package/build/src/utility.js +277 -292
  34. package/build/src/utility.js.map +1 -1
  35. package/build/src/validator.js +24 -27
  36. package/build/src/validator.js.map +1 -1
  37. package/package.json +13 -7
  38. package/types/api.d.ts +15 -0
  39. package/types/api.d.ts.map +1 -0
  40. package/types/binding-post.d.ts +48 -0
  41. package/types/binding-post.d.ts.map +1 -0
  42. package/types/binding-redirect.d.ts +54 -0
  43. package/types/binding-redirect.d.ts.map +1 -0
  44. package/types/binding-simplesign.d.ts +41 -0
  45. package/types/binding-simplesign.d.ts.map +1 -0
  46. package/types/entity-idp.d.ts +38 -0
  47. package/types/entity-idp.d.ts.map +1 -0
  48. package/types/entity-sp.d.ts +38 -0
  49. package/types/entity-sp.d.ts.map +1 -0
  50. package/types/entity.d.ts +100 -0
  51. package/types/entity.d.ts.map +1 -0
  52. package/types/extractor.d.ts +26 -0
  53. package/types/extractor.d.ts.map +1 -0
  54. package/types/flow.d.ts +7 -0
  55. package/types/flow.d.ts.map +1 -0
  56. package/types/index.d.ts +11 -10
  57. package/types/index.d.ts.map +1 -0
  58. package/types/libsaml.d.ts +208 -0
  59. package/types/libsaml.d.ts.map +1 -0
  60. package/types/metadata-idp.d.ts +25 -0
  61. package/types/metadata-idp.d.ts.map +1 -0
  62. package/types/metadata-sp.d.ts +37 -0
  63. package/types/metadata-sp.d.ts.map +1 -0
  64. package/types/metadata.d.ts +58 -0
  65. package/types/metadata.d.ts.map +1 -0
  66. package/types/src/api.d.ts +15 -13
  67. package/types/src/api.d.ts.map +1 -0
  68. package/types/src/binding-post.d.ts +48 -47
  69. package/types/src/binding-post.d.ts.map +1 -0
  70. package/types/src/binding-redirect.d.ts +54 -53
  71. package/types/src/binding-redirect.d.ts.map +1 -0
  72. package/types/src/binding-simplesign.d.ts +41 -40
  73. package/types/src/binding-simplesign.d.ts.map +1 -0
  74. package/types/src/entity-idp.d.ts +38 -37
  75. package/types/src/entity-idp.d.ts.map +1 -0
  76. package/types/src/entity-sp.d.ts +38 -36
  77. package/types/src/entity-sp.d.ts.map +1 -0
  78. package/types/src/entity.d.ts +100 -101
  79. package/types/src/entity.d.ts.map +1 -0
  80. package/types/src/extractor.d.ts +26 -25
  81. package/types/src/extractor.d.ts.map +1 -0
  82. package/types/src/flow.d.ts +7 -6
  83. package/types/src/flow.d.ts.map +1 -0
  84. package/types/src/libsaml.d.ts +208 -209
  85. package/types/src/libsaml.d.ts.map +1 -0
  86. package/types/src/metadata-idp.d.ts +25 -24
  87. package/types/src/metadata-idp.d.ts.map +1 -0
  88. package/types/src/metadata-sp.d.ts +37 -36
  89. package/types/src/metadata-sp.d.ts.map +1 -0
  90. package/types/src/metadata.d.ts +58 -59
  91. package/types/src/metadata.d.ts.map +1 -0
  92. package/types/src/types.d.ts +128 -129
  93. package/types/src/types.d.ts.map +1 -0
  94. package/types/src/urn.d.ts +195 -194
  95. package/types/src/urn.d.ts.map +1 -0
  96. package/types/src/utility.d.ts +133 -134
  97. package/types/src/utility.d.ts.map +1 -0
  98. package/types/src/validator.d.ts +4 -3
  99. package/types/src/validator.d.ts.map +1 -0
  100. package/types/types.d.ts +128 -0
  101. package/types/types.d.ts.map +1 -0
  102. package/types/urn.d.ts +195 -0
  103. package/types/urn.d.ts.map +1 -0
  104. package/types/utility.d.ts +133 -0
  105. package/types/utility.d.ts.map +1 -0
  106. package/types/validator.d.ts +4 -0
  107. package/types/validator.d.ts.map +1 -0
  108. package/.editorconfig +0 -19
  109. package/.github/FUNDING.yml +0 -1
  110. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  111. package/.idea/modules.xml +0 -8
  112. package/.idea/samlify.iml +0 -12
  113. package/.idea/vcs.xml +0 -6
  114. package/.pre-commit.sh +0 -15
  115. package/.snyk +0 -8
  116. package/.travis.yml +0 -29
  117. package/Makefile +0 -25
  118. package/index.d.ts +0 -10
  119. package/index.js +0 -19
  120. package/index.js.map +0 -1
  121. package/index.ts +0 -28
  122. package/qodana.yaml +0 -29
  123. package/src/.idea/modules.xml +0 -8
  124. package/src/.idea/src.iml +0 -12
  125. package/src/.idea/vcs.xml +0 -6
  126. package/src/api.ts +0 -36
  127. package/src/binding-post.ts +0 -348
  128. package/src/binding-redirect.ts +0 -356
  129. package/src/binding-simplesign.ts +0 -238
  130. package/src/entity-idp.ts +0 -153
  131. package/src/entity-sp.ts +0 -114
  132. package/src/entity.ts +0 -243
  133. package/src/extractor.ts +0 -392
  134. package/src/flow.ts +0 -467
  135. package/src/libsaml.ts +0 -895
  136. package/src/metadata-idp.ts +0 -146
  137. package/src/metadata-sp.ts +0 -268
  138. package/src/metadata.ts +0 -166
  139. package/src/types.ts +0 -153
  140. package/src/urn.ts +0 -211
  141. package/src/utility.ts +0 -319
  142. package/src/validator.ts +0 -39
  143. package/tsconfig.json +0 -38
  144. package/tslint.json +0 -35
  145. package/types.d.ts +0 -2
@@ -1,293 +1,278 @@
1
- "use strict";
2
- /**
3
- * @file utility.ts
4
- * @author tngan
5
- * @desc Library for some common functions (e.g. de/inflation, en/decoding)
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.notEmpty = exports.castArrayOpt = exports.isNonEmptyArray = exports.readPrivateKey = exports.inflateString = exports.base64Decode = exports.isString = exports.get = exports.uniq = exports.last = exports.flattenDeep = exports.zipObject = void 0;
9
- const node_crypto_1 = require("node:crypto");
10
- const pako_1 = require("pako");
11
- const BASE64_STR = 'base64';
12
- /**
13
- * @desc Mimic lodash.zipObject
14
- * @param arr1 {string[]}
15
- * @param arr2 {[]}
16
- */
17
- function zipObject(arr1, arr2, skipDuplicated = true) {
18
- return arr1.reduce((res, l, i) => {
19
- if (skipDuplicated) {
20
- res[l] = arr2[i];
21
- return res;
22
- }
23
- // if key exists, aggregate with array in order to get rid of duplicate key
24
- if (res[l] !== undefined) {
25
- res[l] = Array.isArray(res[l])
26
- ? res[l].concat(arr2[i])
27
- : [res[l]].concat(arr2[i]);
28
- return res;
29
- }
30
- res[l] = arr2[i];
31
- return res;
32
- }, {});
33
- }
34
- exports.zipObject = zipObject;
35
- /**
36
- * @desc Alternative to lodash.flattenDeep
37
- * @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_flattendeep
38
- * @param input {[]}
39
- */
40
- function flattenDeep(input) {
41
- return Array.isArray(input)
42
- ? input.reduce((a, b) => a.concat(flattenDeep(b)), [])
43
- : [input];
44
- }
45
- exports.flattenDeep = flattenDeep;
46
- /**
47
- * @desc Alternative to lodash.last
48
- * @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_last
49
- * @param input {[]}
50
- */
51
- function last(input) {
52
- return input.slice(-1)[0];
53
- }
54
- exports.last = last;
55
- /**
56
- * @desc Alternative to lodash.uniq
57
- * @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_uniq
58
- * @param input {string[]}
59
- */
60
- function uniq(input) {
61
- const set = new Set(input);
62
- return [...set];
63
- }
64
- exports.uniq = uniq;
65
- /**
66
- * @desc Alternative to lodash.get
67
- * @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_get
68
- * @param obj
69
- * @param path
70
- * @param defaultValue
71
- */
72
- function get(obj, path, defaultValue) {
73
- return path.split('.')
74
- .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj);
75
- }
76
- exports.get = get;
77
- /**
78
- * @desc Check if the input is string
79
- * @param {any} input
80
- */
81
- function isString(input) {
82
- return typeof input === 'string';
83
- }
84
- exports.isString = isString;
85
- /**
86
- * @desc Encode string with base64 format
87
- * @param {string} message plain-text message
88
- * @return {string} base64 encoded string
89
- */
90
- function base64Encode(message) {
91
- return Buffer.from(message).toString(BASE64_STR);
92
- }
93
- /**
94
- * @desc Decode string from base64 format
95
- * @param {string} base64Message encoded string
96
- * @param {boolean} isBytes determine the return value type (True: bytes False: string)
97
- * @return {bytes/string} decoded bytes/string depends on isBytes, default is {string}
98
- */
99
- function base64Decode(base64Message, isBytes) {
100
- const bytes = Buffer.from(base64Message, BASE64_STR);
101
- return Boolean(isBytes) ? bytes : bytes.toString();
102
- }
103
- exports.base64Decode = base64Decode;
104
- /**
105
- * @desc Compress the string
106
- * @param {string} message
107
- * @return {string} compressed string
108
- */
109
- function deflateString(message) {
110
- const input = Array.prototype.map.call(message, char => char.charCodeAt(0));
111
- return Array.from((0, pako_1.deflate)(input, { raw: true }));
112
- }
113
- /**
114
- * @desc Decompress the compressed string
115
- * @param {string} compressedString
116
- * @return {string} decompressed string
117
- */
118
- function inflateString(compressedString) {
119
- const inputBuffer = Buffer.from(compressedString, BASE64_STR);
120
- const input = Array.prototype.map.call(inputBuffer.toString('binary'), char => char.charCodeAt(0));
121
- return Array.from((0, pako_1.inflate)(input, { raw: true }))
122
- .map((byte) => String.fromCharCode(byte))
123
- .join('');
124
- }
125
- exports.inflateString = inflateString;
126
- /**
127
- * @desc Abstract the normalizeCerString and normalizePemString
128
- * @param {buffer} File stream or string
129
- * @param {string} String for header and tail
130
- * @return {string} A formatted certificate string
131
- */
132
- function _normalizeCerString(bin, format) {
133
- return bin.toString().replace(/\n/g, '').replace(/\r/g, '').replace(`-----BEGIN ${format}-----`, '').replace(`-----END ${format}-----`, '').replace(/ /g, '').replace(/\t/g, '');
134
- }
135
- /**
136
- * @desc Parse the .cer to string format without line break, header and footer
137
- * @param {string} certString declares the certificate contents
138
- * @return {string} certificiate in string format
139
- */
140
- function normalizeCerString(certString) {
141
- return _normalizeCerString(certString, 'CERTIFICATE');
142
- }
143
- /**
144
- * @desc Normalize the string in .pem format without line break, header and footer
145
- * @param {string} pemString
146
- * @return {string} private key in string format
147
- */
148
- function normalizePemString(pemString) {
149
- return _normalizeCerString(pemString.toString(), 'RSA PRIVATE KEY');
150
- }
151
- /**
152
- * @desc Return the complete URL
153
- * @param {object} req HTTP request
154
- * @return {string} URL
155
- */
156
- function getFullURL(req) {
157
- return `${req.protocol}://${req.get('host')}${req.originalUrl}`;
158
- }
159
- /**
160
- * @desc Parse input string, return default value if it is undefined
161
- * @param {string/boolean}
162
- * @return {boolean}
163
- */
164
- function parseString(str, defaultValue = '') {
165
- return str || defaultValue;
166
- }
167
- /**
168
- * @desc Override the object by another object (rtl)
169
- * @param {object} default object
170
- * @param {object} object applied to the default object
171
- * @return {object} result object
172
- */
173
- function applyDefault(obj1, obj2) {
174
- return Object.assign({}, obj1, obj2);
175
- }
176
- /**
177
- * @desc Get public key in pem format from the certificate included in the metadata
178
- * @param {string} x509 certificate
179
- * @return {string} public key fetched from the certificate
180
- */
181
- function getPublicKeyPemFromCertificate(x509CertificateString) {
182
- const derBuffer = Buffer.from(x509CertificateString, 'base64');
183
- // 解析 X.509 证书
184
- const cert2 = new node_crypto_1.X509Certificate(derBuffer);
185
- const publicKeyObject = cert2.publicKey;
186
- // 3. 导出为 PEM 格式
187
- return publicKeyObject.export({
188
- type: 'spki',
189
- format: 'pem' // 输出 PEM 格式
190
- });
191
- }
192
- /*function getPublicKeyPemFromCertificate(x509Certificate: string): string {
193
- // 将 Base64 字符串转为 Buffer(DER 编码)
194
- const derBuffer = Buffer.from(x509Certificate, 'base64');
195
-
196
- // 解析 X.509 证书
197
- const cert = new X509Certificate(derBuffer);
198
-
199
- // 直接获取公钥的 PEM 格式
200
- console.log(cert.publicKey?.toString())
201
- console.log("这就是我的打印")
202
- return cert.publicKey?.toString();
203
- }*/
204
- /**
205
- * @desc Read private key from pem-formatted string
206
- * @param {string | Buffer} keyString pem-formatted string
207
- * @param {string} protected passphrase of the key
208
- * @return {string} string in pem format
209
- * If passphrase is used to protect the .pem content (recommend)
210
- */
211
- /**
212
- * PEM 头尾格式校验与修复
213
- */
214
- function validatePEMHeaders(pem, keyType) {
215
- const expectedHeader = `-----BEGIN ${keyType}-----`;
216
- const expectedFooter = `-----END ${keyType}-----`;
217
- // 自动修复不规范的 PEM 头尾
218
- return pem
219
- .replace(/-{5}.*PRIVATE KEY-{5}/g, '') // 清除已有头尾
220
- .replace(/(\r\n|\n|\r)/gm, '\n') // 统一换行符
221
- .trim() + // 清理空白
222
- `\n${expectedHeader}\n${pem}\n${expectedFooter}\n`;
223
- }
224
- function readPrivateKey(keyString, passphrase, isOutputString = true) {
225
- try {
226
- // 统一转换为字符串格式处理
227
- const pemKey = Buffer.isBuffer(keyString)
228
- ? keyString.toString('utf8')
229
- : keyString;
230
- // 创建私钥对象 (自动处理加密)
231
- const keyObject = (0, node_crypto_1.createPrivateKey)({
232
- key: pemKey,
233
- format: 'pem',
234
- passphrase: isString(passphrase) ? passphrase : undefined,
235
- encoding: 'utf8'
236
- });
237
- // 验证密钥类型为 RSA
238
- if (keyObject.asymmetricKeyType !== 'rsa') {
239
- throw new Error('仅支持 RSA 私钥类型');
240
- }
241
- // 强制转换为 PKCS#1 格式
242
- const exported = keyObject.export({
243
- type: 'pkcs1',
244
- format: 'pem' // 输出为 PEM 格式
245
- });
246
- return isOutputString ? String(exported) : Buffer.from(exported, 'utf8');
247
- }
248
- catch (error) {
249
- throw new Error(`私钥读取失败: ${error.message}`);
250
- }
251
- }
252
- exports.readPrivateKey = readPrivateKey;
253
- /**
254
- * @desc Inline syntax sugar
255
- */
256
- function convertToString(input, isOutputString) {
257
- return Boolean(isOutputString) ? String(input) : input;
258
- }
259
- /**
260
- * @desc Check if the input is an array with non-zero size
261
- */
262
- function isNonEmptyArray(a) {
263
- return Array.isArray(a) && a.length > 0;
264
- }
265
- exports.isNonEmptyArray = isNonEmptyArray;
266
- function castArrayOpt(a) {
267
- if (a === undefined)
268
- return [];
269
- return Array.isArray(a) ? a : [a];
270
- }
271
- exports.castArrayOpt = castArrayOpt;
272
- function notEmpty(value) {
273
- return value !== null && value !== undefined;
274
- }
275
- exports.notEmpty = notEmpty;
276
- const utility = {
277
- isString,
278
- base64Encode,
279
- base64Decode,
280
- deflateString,
281
- inflateString,
282
- normalizeCerString,
283
- normalizePemString,
284
- getFullURL,
285
- parseString,
286
- applyDefault,
287
- getPublicKeyPemFromCertificate,
288
- readPrivateKey,
289
- convertToString,
290
- isNonEmptyArray,
291
- };
292
- exports.default = utility;
1
+ /**
2
+ * @file utility.ts
3
+ * @author tngan
4
+ * @desc Library for some common functions (e.g. de/inflation, en/decoding)
5
+ */
6
+ import { X509Certificate, createPrivateKey } from 'node:crypto';
7
+ import { inflate, deflate } from 'pako';
8
+ const BASE64_STR = 'base64';
9
+ /**
10
+ * @desc Mimic lodash.zipObject
11
+ * @param arr1 {string[]}
12
+ * @param arr2 {[]}
13
+ */
14
+ export function zipObject(arr1, arr2, skipDuplicated = true) {
15
+ return arr1.reduce((res, l, i) => {
16
+ if (skipDuplicated) {
17
+ res[l] = arr2[i];
18
+ return res;
19
+ }
20
+ // if key exists, aggregate with array in order to get rid of duplicate key
21
+ if (res[l] !== undefined) {
22
+ res[l] = Array.isArray(res[l])
23
+ ? res[l].concat(arr2[i])
24
+ : [res[l]].concat(arr2[i]);
25
+ return res;
26
+ }
27
+ res[l] = arr2[i];
28
+ return res;
29
+ }, {});
30
+ }
31
+ /**
32
+ * @desc Alternative to lodash.flattenDeep
33
+ * @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_flattendeep
34
+ * @param input {[]}
35
+ */
36
+ export function flattenDeep(input) {
37
+ return Array.isArray(input)
38
+ ? input.reduce((a, b) => a.concat(flattenDeep(b)), [])
39
+ : [input];
40
+ }
41
+ /**
42
+ * @desc Alternative to lodash.last
43
+ * @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_last
44
+ * @param input {[]}
45
+ */
46
+ export function last(input) {
47
+ return input.slice(-1)[0];
48
+ }
49
+ /**
50
+ * @desc Alternative to lodash.uniq
51
+ * @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_uniq
52
+ * @param input {string[]}
53
+ */
54
+ export function uniq(input) {
55
+ const set = new Set(input);
56
+ return [...set];
57
+ }
58
+ /**
59
+ * @desc Alternative to lodash.get
60
+ * @reference https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_get
61
+ * @param obj
62
+ * @param path
63
+ * @param defaultValue
64
+ */
65
+ export function get(obj, path, defaultValue) {
66
+ return path.split('.')
67
+ .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj);
68
+ }
69
+ /**
70
+ * @desc Check if the input is string
71
+ * @param {any} input
72
+ */
73
+ export function isString(input) {
74
+ return typeof input === 'string';
75
+ }
76
+ /**
77
+ * @desc Encode string with base64 format
78
+ * @param {string} message plain-text message
79
+ * @return {string} base64 encoded string
80
+ */
81
+ function base64Encode(message) {
82
+ return Buffer.from(message).toString(BASE64_STR);
83
+ }
84
+ /**
85
+ * @desc Decode string from base64 format
86
+ * @param {string} base64Message encoded string
87
+ * @param {boolean} isBytes determine the return value type (True: bytes False: string)
88
+ * @return {bytes/string} decoded bytes/string depends on isBytes, default is {string}
89
+ */
90
+ export function base64Decode(base64Message, isBytes) {
91
+ const bytes = Buffer.from(base64Message, BASE64_STR);
92
+ return Boolean(isBytes) ? bytes : bytes.toString();
93
+ }
94
+ /**
95
+ * @desc Compress the string
96
+ * @param {string} message
97
+ * @return {string} compressed string
98
+ */
99
+ function deflateString(message) {
100
+ const input = Array.prototype.map.call(message, char => char.charCodeAt(0));
101
+ return Array.from(deflate(input, { raw: true }));
102
+ }
103
+ /**
104
+ * @desc Decompress the compressed string
105
+ * @param {string} compressedString
106
+ * @return {string} decompressed string
107
+ */
108
+ export function inflateString(compressedString) {
109
+ const inputBuffer = Buffer.from(compressedString, BASE64_STR);
110
+ const input = Array.prototype.map.call(inputBuffer.toString('binary'), char => char.charCodeAt(0));
111
+ return Array.from(inflate(input, { raw: true }))
112
+ .map((byte) => String.fromCharCode(byte))
113
+ .join('');
114
+ }
115
+ /**
116
+ * @desc Abstract the normalizeCerString and normalizePemString
117
+ * @param {buffer} File stream or string
118
+ * @param {string} String for header and tail
119
+ * @return {string} A formatted certificate string
120
+ */
121
+ function _normalizeCerString(bin, format) {
122
+ return bin.toString().replace(/\n/g, '').replace(/\r/g, '').replace(`-----BEGIN ${format}-----`, '').replace(`-----END ${format}-----`, '').replace(/ /g, '').replace(/\t/g, '');
123
+ }
124
+ /**
125
+ * @desc Parse the .cer to string format without line break, header and footer
126
+ * @param {string} certString declares the certificate contents
127
+ * @return {string} certificiate in string format
128
+ */
129
+ function normalizeCerString(certString) {
130
+ return _normalizeCerString(certString, 'CERTIFICATE');
131
+ }
132
+ /**
133
+ * @desc Normalize the string in .pem format without line break, header and footer
134
+ * @param {string} pemString
135
+ * @return {string} private key in string format
136
+ */
137
+ function normalizePemString(pemString) {
138
+ return _normalizeCerString(pemString.toString(), 'RSA PRIVATE KEY');
139
+ }
140
+ /**
141
+ * @desc Return the complete URL
142
+ * @param {object} req HTTP request
143
+ * @return {string} URL
144
+ */
145
+ function getFullURL(req) {
146
+ return `${req.protocol}://${req.get('host')}${req.originalUrl}`;
147
+ }
148
+ /**
149
+ * @desc Parse input string, return default value if it is undefined
150
+ * @param {string/boolean}
151
+ * @return {boolean}
152
+ */
153
+ function parseString(str, defaultValue = '') {
154
+ return str || defaultValue;
155
+ }
156
+ /**
157
+ * @desc Override the object by another object (rtl)
158
+ * @param {object} default object
159
+ * @param {object} object applied to the default object
160
+ * @return {object} result object
161
+ */
162
+ function applyDefault(obj1, obj2) {
163
+ return Object.assign({}, obj1, obj2);
164
+ }
165
+ /**
166
+ * @desc Get public key in pem format from the certificate included in the metadata
167
+ * @param {string} x509 certificate
168
+ * @return {string} public key fetched from the certificate
169
+ */
170
+ function getPublicKeyPemFromCertificate(x509CertificateString) {
171
+ const derBuffer = Buffer.from(x509CertificateString, 'base64');
172
+ // 解析 X.509 证书
173
+ const cert2 = new X509Certificate(derBuffer);
174
+ const publicKeyObject = cert2.publicKey;
175
+ // 3. 导出为 PEM 格式
176
+ return publicKeyObject.export({
177
+ type: 'spki', // 使用 Subject Public Key Info 结构
178
+ format: 'pem' // 输出 PEM 格式
179
+ });
180
+ }
181
+ /*function getPublicKeyPemFromCertificate(x509Certificate: string): string {
182
+ // Base64 字符串转为 Buffer(DER 编码)
183
+ const derBuffer = Buffer.from(x509Certificate, 'base64');
184
+
185
+ // 解析 X.509 证书
186
+ const cert = new X509Certificate(derBuffer);
187
+
188
+ // 直接获取公钥的 PEM 格式
189
+ console.log(cert.publicKey?.toString())
190
+ console.log("这就是我的打印")
191
+ return cert.publicKey?.toString();
192
+ }*/
193
+ /**
194
+ * @desc Read private key from pem-formatted string
195
+ * @param {string | Buffer} keyString pem-formatted string
196
+ * @param {string} protected passphrase of the key
197
+ * @return {string} string in pem format
198
+ * If passphrase is used to protect the .pem content (recommend)
199
+ */
200
+ /**
201
+ * PEM 头尾格式校验与修复
202
+ */
203
+ function validatePEMHeaders(pem, keyType) {
204
+ const expectedHeader = `-----BEGIN ${keyType}-----`;
205
+ const expectedFooter = `-----END ${keyType}-----`;
206
+ // 自动修复不规范的 PEM 头尾
207
+ return pem
208
+ .replace(/-{5}.*PRIVATE KEY-{5}/g, '') // 清除已有头尾
209
+ .replace(/(\r\n|\n|\r)/gm, '\n') // 统一换行符
210
+ .trim() + // 清理空白
211
+ `\n${expectedHeader}\n${pem}\n${expectedFooter}\n`;
212
+ }
213
+ export function readPrivateKey(keyString, passphrase, isOutputString = true) {
214
+ try {
215
+ // 统一转换为字符串格式处理
216
+ const pemKey = Buffer.isBuffer(keyString)
217
+ ? keyString.toString('utf8')
218
+ : keyString;
219
+ // 创建私钥对象 (自动处理加密)
220
+ const keyObject = createPrivateKey({
221
+ key: pemKey,
222
+ format: 'pem',
223
+ passphrase: isString(passphrase) ? passphrase : undefined,
224
+ encoding: 'utf8'
225
+ });
226
+ // 验证密钥类型为 RSA
227
+ if (keyObject.asymmetricKeyType !== 'rsa') {
228
+ throw new Error('仅支持 RSA 私钥类型');
229
+ }
230
+ // 强制转换为 PKCS#1 格式
231
+ const exported = keyObject.export({
232
+ type: 'pkcs1', // 明确指定 RSA 传统格式
233
+ format: 'pem' // 输出为 PEM 格式
234
+ });
235
+ return isOutputString ? String(exported) : Buffer.from(exported, 'utf8');
236
+ }
237
+ catch (error) {
238
+ throw new Error(`私钥读取失败: ${error.message}`);
239
+ }
240
+ }
241
+ /**
242
+ * @desc Inline syntax sugar
243
+ */
244
+ function convertToString(input, isOutputString) {
245
+ return Boolean(isOutputString) ? String(input) : input;
246
+ }
247
+ /**
248
+ * @desc Check if the input is an array with non-zero size
249
+ */
250
+ export function isNonEmptyArray(a) {
251
+ return Array.isArray(a) && a.length > 0;
252
+ }
253
+ export function castArrayOpt(a) {
254
+ if (a === undefined)
255
+ return [];
256
+ return Array.isArray(a) ? a : [a];
257
+ }
258
+ export function notEmpty(value) {
259
+ return value !== null && value !== undefined;
260
+ }
261
+ const utility = {
262
+ isString,
263
+ base64Encode,
264
+ base64Decode,
265
+ deflateString,
266
+ inflateString,
267
+ normalizeCerString,
268
+ normalizePemString,
269
+ getFullURL,
270
+ parseString,
271
+ applyDefault,
272
+ getPublicKeyPemFromCertificate,
273
+ readPrivateKey,
274
+ convertToString,
275
+ isNonEmptyArray,
276
+ };
277
+ export default utility;
293
278
  //# sourceMappingURL=utility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utility.js","sourceRoot":"","sources":["../../src/utility.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6CAA8D;AAG9D,+BAAsC;AAEtC,MAAM,UAAU,GAAG,QAAQ,CAAC;AAE5B;;;;GAIG;AACH,SAAgB,SAAS,CAAC,IAAc,EAAE,IAAW,EAAE,cAAc,GAAG,IAAI;IAC1E,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QAE/B,IAAI,cAAc,EAAE;YAClB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,GAAG,CAAC;SACZ;QACD,2EAA2E;QAC3E,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YACxB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,GAAG,CAAC;SACZ;QAED,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,GAAG,CAAC;IAEb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAnBD,8BAmBC;AAED;;;;GAIG;AACH,SAAgB,WAAW,CAAC,KAAY;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACd,CAAC;AAJD,kCAIC;AAED;;;;GAIG;AACH,SAAgB,IAAI,CAAC,KAAY;IAC/B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAFD,oBAEC;AAED;;;;GAIG;AACH,SAAgB,IAAI,CAAC,KAAe;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC;AAHD,oBAGC;AAED;;;;;;GAMG;AACH,SAAgB,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;SACnB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxE,CAAC;AAHD,kBAGC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,KAAU;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAFD,4BAEC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,OAA0B;IAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,OAAiB,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,aAAqB,EAAE,OAAiB;IACnE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AACrD,CAAC;AAHD,oCAGC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,KAAK,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,gBAAwB;IACpD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,KAAK,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,CAAC,CAAC;SAC3C,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SAChD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAND,sCAMC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,GAAoB,EAAE,MAAc;IAC/D,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,MAAM,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,MAAM,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnL,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,UAA2B;IACrD,OAAO,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,SAA0B;IACpD,OAAO,mBAAmB,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,GAAG;IACrB,OAAO,GAAG,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,EAAE;IACzC,OAAO,GAAG,IAAI,YAAY,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,IAAI,EAAE,IAAI;IAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,SAAS,8BAA8B,CAAC,qBAA6B;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IAC/D,cAAc;IACd,MAAM,KAAK,GAAG,IAAI,6BAAe,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAA;IACvC,gBAAgB;IAChB,OAAO,eAAe,CAAC,MAAM,CAAC;QAC5B,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,KAAK,CAAE,YAAY;KAC5B,CAAC,CAAC;AAEL,CAAC;AAGD;;;;;;;;;;;GAWG;AACH;;;;;;GAMG;AAEH;;GAEG;AACH,SAAS,kBAAkB,CAAC,GAAW,EAAE,OAAe;IACtD,MAAM,cAAc,GAAG,cAAc,OAAO,OAAO,CAAC;IACpD,MAAM,cAAc,GAAG,YAAY,OAAO,OAAO,CAAC;IAElD,kBAAkB;IAClB,OAAO,GAAG;SACL,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAE,SAAS;SAChD,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAO,QAAQ;SAC9C,IAAI,EAAE,GAAiC,OAAO;QACjD,KAAK,cAAc,KAAK,GAAG,KAAK,cAAc,IAAI,CAAC;AACvD,CAAC;AACD,SAAgB,cAAc,CAC5B,SAA0B,EAC1B,UAAmB,EACnB,iBAA0B,IAAI;IAE9B,IAAI;QACF,eAAe;QACf,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5B,CAAC,CAAC,SAAS,CAAC;QAEd,kBAAkB;QAClB,MAAM,SAAS,GAAG,IAAA,8BAAgB,EAAC;YACjC,GAAG,EAAE,MAAM;YACX,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YACzD,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,cAAc;QACd,IAAI,SAAS,CAAC,iBAAiB,KAAK,KAAK,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;SACjC;QAED,kBAAkB;QAClB,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,KAAK,CAAM,aAAa;SACjC,CAAW,CAAC;QAEb,OAAO,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;KAC1E;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;KAC7C;AACH,CAAC;AAlCD,wCAkCC;AAGD;;GAEG;AACH,SAAS,eAAe,CAAC,KAAK,EAAE,cAAc;IAC5C,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,CAAM;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1C,CAAC;AAFD,0CAEC;AAED,SAAgB,YAAY,CAAI,CAAW;IACzC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC;AAHD,oCAGC;AAED,SAAgB,QAAQ,CAAS,KAAgC;IAC/D,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAC/C,CAAC;AAFD,4BAEC;AAED,MAAM,OAAO,GAAG;IACd,QAAQ;IACR,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,UAAU;IACV,WAAW;IACX,YAAY;IACZ,8BAA8B;IAC9B,cAAc;IACd,eAAe;IACf,eAAe;CAChB,CAAC;AAEF,kBAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"utility.js","sourceRoot":"","sources":["../../src/utility.ts"],"names":[],"mappings":"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"}