@sasjs/utils 3.7.3 → 3.7.4
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.
- package/package.json +1 -1
- package/utils/base64.js +22 -2
- package/utils/base64.js.map +1 -1
package/package.json
CHANGED
package/utils/base64.js
CHANGED
|
@@ -11,15 +11,35 @@ const PREFIX_HEX_LENGTH = 200;
|
|
|
11
11
|
const randomHexPrefix = () => Array.from(crypto.getRandomValues(new Uint8Array(PREFIX_HEX_LENGTH / 2)))
|
|
12
12
|
.map((byte) => byte.toString(16).padStart(2, '0'))
|
|
13
13
|
.join('');
|
|
14
|
+
// Buffer does not exist in a browser, and this module is reachable from the
|
|
15
|
+
// package root, so the encoding uses the platform globals instead. TextEncoder
|
|
16
|
+
// and TextDecoder carry the UTF-8 step: btoa is latin1, so encoding a password
|
|
17
|
+
// through it directly corrupts anything non-ASCII. The binary string is built
|
|
18
|
+
// in chunks because spreading a whole byte array into String.fromCharCode
|
|
19
|
+
// overflows the call stack on long input.
|
|
20
|
+
const CHUNK_SIZE = 0x8000;
|
|
21
|
+
const toBase64 = (bytes) => {
|
|
22
|
+
let binary = '';
|
|
23
|
+
for (let offset = 0; offset < bytes.length; offset += CHUNK_SIZE) {
|
|
24
|
+
binary += String.fromCharCode(...bytes.subarray(offset, offset + CHUNK_SIZE));
|
|
25
|
+
}
|
|
26
|
+
return btoa(binary);
|
|
27
|
+
};
|
|
28
|
+
const fromBase64 = (str) => {
|
|
29
|
+
// Buffer ignores whitespace when decoding base64 and atob does not, so a
|
|
30
|
+
// wrapped or padded stored value still decodes.
|
|
31
|
+
const binary = atob(str.replace(/\s/g, ''));
|
|
32
|
+
return new TextDecoder().decode(Uint8Array.from(binary, (char) => char.charCodeAt(0)));
|
|
33
|
+
};
|
|
14
34
|
const encodeToBase64 = (str) => {
|
|
15
|
-
const encodedPassword =
|
|
35
|
+
const encodedPassword = toBase64(new TextEncoder().encode(randomHexPrefix() + str));
|
|
16
36
|
return PREFIX + encodedPassword;
|
|
17
37
|
};
|
|
18
38
|
exports.encodeToBase64 = encodeToBase64;
|
|
19
39
|
const decodeFromBase64 = (str) => {
|
|
20
40
|
if (str.startsWith(PREFIX)) {
|
|
21
41
|
str = str.replace(/^{sasjs_encoded}/, '');
|
|
22
|
-
const decodedPassword =
|
|
42
|
+
const decodedPassword = fromBase64(str);
|
|
23
43
|
return decodedPassword.substring(200);
|
|
24
44
|
}
|
|
25
45
|
return str;
|
package/utils/base64.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":";;;AAAA,MAAM,MAAM,GAAG,iBAAiB,CAAA;AAChC,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAE7B,iFAAiF;AACjF,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,sEAAsE;AACtE,MAAM,eAAe,GAAG,GAAW,EAAE,CACnC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC;KACtE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KACjD,IAAI,CAAC,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":";;;AAAA,MAAM,MAAM,GAAG,iBAAiB,CAAA;AAChC,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAE7B,iFAAiF;AACjF,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,sEAAsE;AACtE,MAAM,eAAe,GAAG,GAAW,EAAE,CACnC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC;KACtE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KACjD,IAAI,CAAC,EAAE,CAAC,CAAA;AAEb,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,0EAA0E;AAC1E,0CAA0C;AAC1C,MAAM,UAAU,GAAG,MAAM,CAAA;AAEzB,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAU,EAAE;IAC7C,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,EAAE;QAChE,MAAM,IAAI,MAAM,CAAC,YAAY,CAC3B,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAC/C,CAAA;KACF;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;IACzC,yEAAyE;IACzE,gDAAgD;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;IAE3C,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAC7B,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACtD,CAAA;AACH,CAAC,CAAA;AAEM,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE;IAC5C,MAAM,eAAe,GAAG,QAAQ,CAC9B,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,GAAG,CAAC,CAClD,CAAA;IACD,OAAO,MAAM,GAAG,eAAe,CAAA;AACjC,CAAC,CAAA;AALY,QAAA,cAAc,kBAK1B;AAEM,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,EAAE;IAC9C,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC1B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;QACzC,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;QACvC,OAAO,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;KACtC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAPY,QAAA,gBAAgB,oBAO5B"}
|