3 const { common
} = require('@squeep/api-dingus');
7 * Recursively freeze an object.
11 const freezeDeep
= (o
) => {
13 Object
.getOwnPropertyNames(o
).forEach((prop
) => {
14 if (Object
.hasOwnProperty
.call(o
, prop
)
15 && ['object', 'function'].includes(typeof o
[prop
]) // eslint-disable-line security/detect-object-injection
16 && !Object
.isFrozen(o
[prop
])) { // eslint-disable-line security/detect-object-injection
17 return freezeDeep(o
[prop
]); // eslint-disable-line security/detect-object-injection
24 * Return a new object duplicating `o`, without the properties specified.
26 * @param {String[]} props
29 const omit
= (o
, props
) => {
30 return Object
.fromEntries(Object
.entries(o
).filter(([k
]) => !props
.includes(k
)));
34 * Helper to log mystery-box statistics.
35 * @param {ConsoleLike} logger
36 * @param {String} scope
39 const mysteryBoxLogger
= (logger
, scope
) => {
41 logger
.debug(scope
, `${s.packageName}@${s.packageVersion}:${s.method}`, omit(s
, [
50 * Hide sensitive part of an Authorization header.
51 * @param {String} authHeader
54 const obscureAuthorizationHeader
= (authHeader
) => {
58 const space
= authHeader
.indexOf(' ');
59 // This blurs entire string if no space found, because -1.
60 return authHeader
.slice(0, space
+ 1) + '*'.repeat(authHeader
.length
- (space
+ 1));
63 module
.exports
= Object
.assign(Object
.create(common
), {
66 obscureAuthorizationHeader
,