@bitblit/ratchet-common 4.0.128-alpha → 4.0.130-alpha
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/lib/2d/line-2d.js +2 -0
- package/lib/2d/line-2d.js.map +1 -0
- package/lib/2d/plane-2d.js +2 -0
- package/lib/2d/plane-2d.js.map +1 -0
- package/lib/2d/point-2d.js +2 -0
- package/lib/2d/point-2d.js.map +1 -0
- package/lib/2d/poly-line-2d.js +2 -0
- package/lib/2d/poly-line-2d.js.map +1 -0
- package/lib/2d/ratchet-2d.js +246 -0
- package/lib/2d/ratchet-2d.js.map +1 -0
- package/lib/2d/ratchet-2d.spec.js +118 -0
- package/lib/2d/ratchet-2d.spec.js.map +1 -0
- package/lib/build/build-information.js +2 -0
- package/lib/build/build-information.js.map +1 -0
- package/lib/build/ratchet-common-info.js +15 -0
- package/lib/build/ratchet-common-info.js.map +1 -0
- package/lib/histogram/histogram-entry.js +2 -0
- package/lib/histogram/histogram-entry.js.map +1 -0
- package/lib/histogram/histogram.js +49 -0
- package/lib/histogram/histogram.js.map +1 -0
- package/lib/histogram/histogram.spec.js +20 -0
- package/lib/histogram/histogram.spec.js.map +1 -0
- package/lib/index.js +74 -0
- package/lib/index.js.map +1 -0
- package/lib/jwt/common-jwt-token.js +2 -0
- package/lib/jwt/common-jwt-token.js.map +1 -0
- package/lib/jwt/expired-jwt-handling.js +7 -0
- package/lib/jwt/expired-jwt-handling.js.map +1 -0
- package/lib/jwt/jwt-ratchet-like.js +2 -0
- package/lib/jwt/jwt-ratchet-like.js.map +1 -0
- package/lib/jwt/jwt-ratchet.js +166 -0
- package/lib/jwt/jwt-ratchet.js.map +1 -0
- package/lib/jwt/jwt-ratchet.spec.js +50 -0
- package/lib/jwt/jwt-ratchet.spec.js.map +1 -0
- package/lib/jwt/jwt-token-base.js +2 -0
- package/lib/jwt/jwt-token-base.js.map +1 -0
- package/lib/lang/array-ratchet.js +84 -0
- package/lib/lang/array-ratchet.js.map +1 -0
- package/lib/lang/array-ratchet.spec.js +69 -0
- package/lib/lang/array-ratchet.spec.js.map +1 -0
- package/lib/lang/base64-ratchet.d.ts +1 -1
- package/lib/lang/base64-ratchet.js +46 -0
- package/lib/lang/base64-ratchet.js.map +1 -0
- package/lib/lang/base64-ratchet.spec.js +29 -0
- package/lib/lang/base64-ratchet.spec.js.map +1 -0
- package/lib/lang/boolean-ratchet.js +46 -0
- package/lib/lang/boolean-ratchet.js.map +1 -0
- package/lib/lang/boolean-ratchet.spec.js +82 -0
- package/lib/lang/boolean-ratchet.spec.js.map +1 -0
- package/lib/lang/composite-last-success-provider.js +27 -0
- package/lib/lang/composite-last-success-provider.js.map +1 -0
- package/lib/lang/composite-last-success-provider.spec.js +27 -0
- package/lib/lang/composite-last-success-provider.spec.js.map +1 -0
- package/lib/lang/date-ratchet.js +31 -0
- package/lib/lang/date-ratchet.js.map +1 -0
- package/lib/lang/date-ratchet.spec.js +22 -0
- package/lib/lang/date-ratchet.spec.js.map +1 -0
- package/lib/lang/duration-ratchet.js +43 -0
- package/lib/lang/duration-ratchet.js.map +1 -0
- package/lib/lang/duration-ratchet.spec.js +40 -0
- package/lib/lang/duration-ratchet.spec.js.map +1 -0
- package/lib/lang/enum-ratchet.js +31 -0
- package/lib/lang/enum-ratchet.js.map +1 -0
- package/lib/lang/enum-ratchet.spec.js +32 -0
- package/lib/lang/enum-ratchet.spec.js.map +1 -0
- package/lib/lang/error-ratchet.js +45 -0
- package/lib/lang/error-ratchet.js.map +1 -0
- package/lib/lang/error-ratchet.spec.js +21 -0
- package/lib/lang/error-ratchet.spec.js.map +1 -0
- package/lib/lang/esm-ratchet.js +18 -0
- package/lib/lang/esm-ratchet.js.map +1 -0
- package/lib/lang/expiring-object.js +73 -0
- package/lib/lang/expiring-object.js.map +1 -0
- package/lib/lang/expiring-object.spec.js +52 -0
- package/lib/lang/expiring-object.spec.js.map +1 -0
- package/lib/lang/geolocation-ratchet.js +264 -0
- package/lib/lang/geolocation-ratchet.js.map +1 -0
- package/lib/lang/geolocation-ratchet.spec.js +75 -0
- package/lib/lang/geolocation-ratchet.spec.js.map +1 -0
- package/lib/lang/global-ratchet.js +44 -0
- package/lib/lang/global-ratchet.js.map +1 -0
- package/lib/lang/global-ratchet.spec.js +15 -0
- package/lib/lang/global-ratchet.spec.js.map +1 -0
- package/lib/lang/key-value.js +5 -0
- package/lib/lang/key-value.js.map +1 -0
- package/lib/lang/last-success-provider.js +2 -0
- package/lib/lang/last-success-provider.js.map +1 -0
- package/lib/lang/map-ratchet.js +165 -0
- package/lib/lang/map-ratchet.js.map +1 -0
- package/lib/lang/map-ratchet.spec.js +91 -0
- package/lib/lang/map-ratchet.spec.js.map +1 -0
- package/lib/lang/no.js +5 -0
- package/lib/lang/no.js.map +1 -0
- package/lib/lang/no.spec.js +8 -0
- package/lib/lang/no.spec.js.map +1 -0
- package/lib/lang/number-ratchet.js +157 -0
- package/lib/lang/number-ratchet.js.map +1 -0
- package/lib/lang/number-ratchet.spec.js +119 -0
- package/lib/lang/number-ratchet.spec.js.map +1 -0
- package/lib/lang/parsed-url.js +2 -0
- package/lib/lang/parsed-url.js.map +1 -0
- package/lib/lang/promise-ratchet.js +139 -0
- package/lib/lang/promise-ratchet.js.map +1 -0
- package/lib/lang/promise-ratchet.spec.js +75 -0
- package/lib/lang/promise-ratchet.spec.js.map +1 -0
- package/lib/lang/require-ratchet.js +56 -0
- package/lib/lang/require-ratchet.js.map +1 -0
- package/lib/lang/require-ratchet.spec.js +81 -0
- package/lib/lang/require-ratchet.spec.js.map +1 -0
- package/lib/lang/stop-watch.js +115 -0
- package/lib/lang/stop-watch.js.map +1 -0
- package/lib/lang/string-ratchet.js +203 -0
- package/lib/lang/string-ratchet.js.map +1 -0
- package/lib/lang/string-ratchet.spec.js +159 -0
- package/lib/lang/string-ratchet.spec.js.map +1 -0
- package/lib/lang/time-zone-ratchet.js +79 -0
- package/lib/lang/time-zone-ratchet.js.map +1 -0
- package/lib/lang/time-zone-ratchet.spec.js +41 -0
- package/lib/lang/time-zone-ratchet.spec.js.map +1 -0
- package/lib/lang/timeout-token.js +18 -0
- package/lib/lang/timeout-token.js.map +1 -0
- package/lib/lang/timeout-token.spec.js +10 -0
- package/lib/lang/timeout-token.spec.js.map +1 -0
- package/lib/lang/transform-ratchet.js +67 -0
- package/lib/lang/transform-ratchet.js.map +1 -0
- package/lib/lang/transform-ratchet.spec.js +119 -0
- package/lib/lang/transform-ratchet.spec.js.map +1 -0
- package/lib/logger/classic-single-line-log-message-formatter.js +14 -0
- package/lib/logger/classic-single-line-log-message-formatter.js.map +1 -0
- package/lib/logger/log-message-builder.js +49 -0
- package/lib/logger/log-message-builder.js.map +1 -0
- package/lib/logger/log-message-format-type.js +7 -0
- package/lib/logger/log-message-format-type.js.map +1 -0
- package/lib/logger/log-message-formatter.js +2 -0
- package/lib/logger/log-message-formatter.js.map +1 -0
- package/lib/logger/log-message-processor.js +2 -0
- package/lib/logger/log-message-processor.js.map +1 -0
- package/lib/logger/log-message.js +2 -0
- package/lib/logger/log-message.js.map +1 -0
- package/lib/logger/log-snapshot.js +2 -0
- package/lib/logger/log-snapshot.js.map +1 -0
- package/lib/logger/logger-instance.js +209 -0
- package/lib/logger/logger-instance.js.map +1 -0
- package/lib/logger/logger-level-name.js +10 -0
- package/lib/logger/logger-level-name.js.map +1 -0
- package/lib/logger/logger-meta.js +2 -0
- package/lib/logger/logger-meta.js.map +1 -0
- package/lib/logger/logger-options.js +2 -0
- package/lib/logger/logger-options.js.map +1 -0
- package/lib/logger/logger-output-function.js +7 -0
- package/lib/logger/logger-output-function.js.map +1 -0
- package/lib/logger/logger-ring-buffer.js +72 -0
- package/lib/logger/logger-ring-buffer.js.map +1 -0
- package/lib/logger/logger-util.js +46 -0
- package/lib/logger/logger-util.js.map +1 -0
- package/lib/logger/logger-util.spec.js +10 -0
- package/lib/logger/logger-util.spec.js.map +1 -0
- package/lib/logger/logger.js +136 -0
- package/lib/logger/logger.js.map +1 -0
- package/lib/logger/logger.spec.js +135 -0
- package/lib/logger/logger.spec.js.map +1 -0
- package/lib/logger/none-log-message-formatter.js +6 -0
- package/lib/logger/none-log-message-formatter.js.map +1 -0
- package/lib/logger/structured-json-log-message-formatter.js +20 -0
- package/lib/logger/structured-json-log-message-formatter.js.map +1 -0
- package/lib/network/browser-local-ip-provider.js +22 -0
- package/lib/network/browser-local-ip-provider.js.map +1 -0
- package/lib/network/browser-local-ip-provider.spec.js +17 -0
- package/lib/network/browser-local-ip-provider.spec.js.map +1 -0
- package/lib/network/fixed-local-ip-provider.js +10 -0
- package/lib/network/fixed-local-ip-provider.js.map +1 -0
- package/lib/network/local-ip-provider.js +2 -0
- package/lib/network/local-ip-provider.js.map +1 -0
- package/lib/network/network-ratchet.js +104 -0
- package/lib/network/network-ratchet.js.map +1 -0
- package/lib/network/network-ratchet.spec.js +14 -0
- package/lib/network/network-ratchet.spec.js.map +1 -0
- package/lib/stream/buffer-writable.d.ts +2 -2
- package/lib/stream/buffer-writable.js +17 -0
- package/lib/stream/buffer-writable.js.map +1 -0
- package/lib/stream/multi-stream.d.ts +1 -1
- package/lib/stream/multi-stream.js +13 -0
- package/lib/stream/multi-stream.js.map +1 -0
- package/lib/stream/stream-ratchet.d.ts +2 -2
- package/lib/stream/stream-ratchet.js +69 -0
- package/lib/stream/stream-ratchet.js.map +1 -0
- package/lib/stream/stream-ratchet.spec.js +14 -0
- package/lib/stream/stream-ratchet.spec.js.map +1 -0
- package/lib/stream/string-writable.d.ts +1 -1
- package/lib/stream/string-writable.js +15 -0
- package/lib/stream/string-writable.js.map +1 -0
- package/lib/stream/string-writable.spec.js +13 -0
- package/lib/stream/string-writable.spec.js.map +1 -0
- package/lib/third-party/google/google-recaptcha-ratchet.js +30 -0
- package/lib/third-party/google/google-recaptcha-ratchet.js.map +1 -0
- package/lib/third-party/google/google-recaptcha-ratchet.spec.js +21 -0
- package/lib/third-party/google/google-recaptcha-ratchet.spec.js.map +1 -0
- package/lib/third-party/twilio/twilio-ratchet.js +75 -0
- package/lib/third-party/twilio/twilio-ratchet.js.map +1 -0
- package/lib/transform/built-in-transforms.js +192 -0
- package/lib/transform/built-in-transforms.js.map +1 -0
- package/lib/transform/transform-rule.js +2 -0
- package/lib/transform/transform-rule.js.map +1 -0
- package/lib/tx/transaction-configuration.js +2 -0
- package/lib/tx/transaction-configuration.js.map +1 -0
- package/lib/tx/transaction-final-state.js +7 -0
- package/lib/tx/transaction-final-state.js.map +1 -0
- package/lib/tx/transaction-ratchet.js +77 -0
- package/lib/tx/transaction-ratchet.js.map +1 -0
- package/lib/tx/transaction-ratchet.spec.js +131 -0
- package/lib/tx/transaction-ratchet.spec.js.map +1 -0
- package/lib/tx/transaction-result.js +2 -0
- package/lib/tx/transaction-result.js.map +1 -0
- package/lib/tx/transaction-step.js +2 -0
- package/lib/tx/transaction-step.js.map +1 -0
- package/package.json +3 -2
- package/lib/index.mjs +0 -4
- package/lib/index.mjs.map +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export var ExpiredJwtHandling;
|
|
2
|
+
(function (ExpiredJwtHandling) {
|
|
3
|
+
ExpiredJwtHandling[ExpiredJwtHandling["RETURN_NULL"] = 0] = "RETURN_NULL";
|
|
4
|
+
ExpiredJwtHandling[ExpiredJwtHandling["THROW_EXCEPTION"] = 1] = "THROW_EXCEPTION";
|
|
5
|
+
ExpiredJwtHandling[ExpiredJwtHandling["ADD_FLAG"] = 2] = "ADD_FLAG";
|
|
6
|
+
})(ExpiredJwtHandling || (ExpiredJwtHandling = {}));
|
|
7
|
+
//# sourceMappingURL=expired-jwt-handling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expired-jwt-handling.js","sourceRoot":"","sources":["../../src/jwt/expired-jwt-handling.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC5B,yEAAW,CAAA;IACX,iFAAe,CAAA;IACf,mEAAQ,CAAA;AACV,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,QAI7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-ratchet-like.js","sourceRoot":"","sources":["../../src/jwt/jwt-ratchet-like.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import jwt from 'jsonwebtoken';
|
|
2
|
+
import { RequireRatchet } from '../lang/require-ratchet.js';
|
|
3
|
+
import { Logger } from '../logger/logger.js';
|
|
4
|
+
import { StringRatchet } from '../lang/string-ratchet.js';
|
|
5
|
+
import { DurationRatchet } from '../lang/duration-ratchet.js';
|
|
6
|
+
import { LoggerLevelName } from '../logger/logger-level-name.js';
|
|
7
|
+
import { ExpiredJwtHandling } from './expired-jwt-handling.js';
|
|
8
|
+
class JwtRatchet {
|
|
9
|
+
_encryptionKeyPromise;
|
|
10
|
+
_decryptKeysPromise;
|
|
11
|
+
_jtiGenerator;
|
|
12
|
+
_decryptOnlyKeyUseLogLevel;
|
|
13
|
+
_parseFailureLogLevel;
|
|
14
|
+
static EXPIRED_FLAG_NAME = '__jwtServiceExpiredFlag';
|
|
15
|
+
constructor(_encryptionKeyPromise, _decryptKeysPromise, _jtiGenerator = StringRatchet.createType4Guid, _decryptOnlyKeyUseLogLevel = LoggerLevelName.info, _parseFailureLogLevel = LoggerLevelName.debug) {
|
|
16
|
+
this._encryptionKeyPromise = _encryptionKeyPromise;
|
|
17
|
+
this._decryptKeysPromise = _decryptKeysPromise;
|
|
18
|
+
this._jtiGenerator = _jtiGenerator;
|
|
19
|
+
this._decryptOnlyKeyUseLogLevel = _decryptOnlyKeyUseLogLevel;
|
|
20
|
+
this._parseFailureLogLevel = _parseFailureLogLevel;
|
|
21
|
+
RequireRatchet.notNullOrUndefined(_encryptionKeyPromise, 'encryptionKeyPromise');
|
|
22
|
+
}
|
|
23
|
+
get encryptionKeyPromise() {
|
|
24
|
+
return this._encryptionKeyPromise;
|
|
25
|
+
}
|
|
26
|
+
get decryptKeysPromise() {
|
|
27
|
+
return this._decryptKeysPromise;
|
|
28
|
+
}
|
|
29
|
+
get jtiGenerator() {
|
|
30
|
+
return this._jtiGenerator;
|
|
31
|
+
}
|
|
32
|
+
get decryptOnlyKeyUseLogLevel() {
|
|
33
|
+
return this._decryptOnlyKeyUseLogLevel;
|
|
34
|
+
}
|
|
35
|
+
get parseFailureLogLevel() {
|
|
36
|
+
return this._parseFailureLogLevel;
|
|
37
|
+
}
|
|
38
|
+
static hasExpiredFlag(ob) {
|
|
39
|
+
return ob && ob[JwtRatchet.EXPIRED_FLAG_NAME] === true;
|
|
40
|
+
}
|
|
41
|
+
static async invalidSafeDecode(payloadString, decryptKey, logLevel = LoggerLevelName.silly) {
|
|
42
|
+
let rval = null;
|
|
43
|
+
try {
|
|
44
|
+
rval = jwt.verify(payloadString, decryptKey, { ignoreExpiration: true });
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
Logger.logByLevel(logLevel, 'Caught %s - ignoring', err);
|
|
48
|
+
}
|
|
49
|
+
return rval;
|
|
50
|
+
}
|
|
51
|
+
static async secondsRemainingUntilExpiration(payloadString) {
|
|
52
|
+
let rval = null;
|
|
53
|
+
if (StringRatchet.trimToNull(payloadString)) {
|
|
54
|
+
const output = await JwtRatchet.decodeTokenNoVerify(payloadString);
|
|
55
|
+
const nowSecond = Math.floor(Date.now() / 1000);
|
|
56
|
+
if (output.exp) {
|
|
57
|
+
const expSeconds = output.exp > nowSecond * 100 ? Math.floor(output.exp / 1000) : output.exp;
|
|
58
|
+
rval = Math.max(0, expSeconds - nowSecond);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return rval;
|
|
62
|
+
}
|
|
63
|
+
static async msRemainingUntilExpiration(payloadString) {
|
|
64
|
+
const secs = await JwtRatchet.secondsRemainingUntilExpiration(payloadString);
|
|
65
|
+
let rval = null;
|
|
66
|
+
if (secs !== null && secs !== undefined) {
|
|
67
|
+
rval = secs * 1000;
|
|
68
|
+
}
|
|
69
|
+
return rval;
|
|
70
|
+
}
|
|
71
|
+
async decodeToken(payloadString, expiredHandling = ExpiredJwtHandling.RETURN_NULL) {
|
|
72
|
+
const encKeys = await this.encryptionKeyArray();
|
|
73
|
+
let decKeys = Object.assign([], encKeys);
|
|
74
|
+
if (this.decryptKeysPromise) {
|
|
75
|
+
decKeys = decKeys.concat(await this.decryptKeysPromise);
|
|
76
|
+
}
|
|
77
|
+
const keysTried = [];
|
|
78
|
+
let payload = null;
|
|
79
|
+
for (let i = 0; i < decKeys.length && !payload; i++) {
|
|
80
|
+
keysTried.push(StringRatchet.obscure(decKeys[i], 1, 1));
|
|
81
|
+
const logLevel = i === decKeys.length - 1 && this.parseFailureLogLevel ? this.parseFailureLogLevel : LoggerLevelName.silly;
|
|
82
|
+
payload = await JwtRatchet.invalidSafeDecode(payloadString, decKeys[i], logLevel);
|
|
83
|
+
if (payload && i >= encKeys.length) {
|
|
84
|
+
Logger.logByLevel(this.decryptOnlyKeyUseLogLevel, 'Used old key to decode token : %s', StringRatchet.obscure(decKeys[i], 2));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (payload) {
|
|
88
|
+
const nowSeconds = Math.floor(Date.now() / 1000);
|
|
89
|
+
const expSeconds = payload?.exp && payload.exp > nowSeconds * 100 ? Math.floor(payload.exp / 1000) : payload?.exp;
|
|
90
|
+
const nbfSeconds = payload?.nbf && payload.nbf > nowSeconds * 100 ? Math.floor(payload.nbf / 1000) : payload?.nbf;
|
|
91
|
+
if ((expSeconds && nowSeconds >= expSeconds) || (nbfSeconds && nowSeconds <= nbfSeconds)) {
|
|
92
|
+
const age = nowSeconds - expSeconds;
|
|
93
|
+
Logger.debug('JWT token expired or before NBF : on %d, %s ago', payload.exp, DurationRatchet.formatMsDuration(age * 1000));
|
|
94
|
+
switch (expiredHandling) {
|
|
95
|
+
case ExpiredJwtHandling.THROW_EXCEPTION:
|
|
96
|
+
throw new Error('JWT Token was expired');
|
|
97
|
+
case ExpiredJwtHandling.ADD_FLAG:
|
|
98
|
+
payload[JwtRatchet.EXPIRED_FLAG_NAME] = true;
|
|
99
|
+
break;
|
|
100
|
+
default:
|
|
101
|
+
payload = null;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
Logger.warn('Unable to parse a payload (Tried %j) from : %s', keysTried, payloadString);
|
|
108
|
+
}
|
|
109
|
+
return payload;
|
|
110
|
+
}
|
|
111
|
+
async encryptionKeyArray() {
|
|
112
|
+
const encKey = await this.encryptionKeyPromise;
|
|
113
|
+
const rval = Array.isArray(encKey) ? encKey : [encKey];
|
|
114
|
+
if (rval.length < 1) {
|
|
115
|
+
throw new Error('Cannot create JwtRatchet with empty encryption key set');
|
|
116
|
+
}
|
|
117
|
+
return rval;
|
|
118
|
+
}
|
|
119
|
+
async selectRandomEncryptionKey() {
|
|
120
|
+
const encKey = await this.encryptionKeyArray();
|
|
121
|
+
const rval = encKey[Math.floor(Math.random() * encKey.length)];
|
|
122
|
+
return rval;
|
|
123
|
+
}
|
|
124
|
+
async createTokenString(payload, expirationSeconds, overrideEncryptionKey) {
|
|
125
|
+
const encKey = StringRatchet.trimToNull(overrideEncryptionKey)
|
|
126
|
+
? StringRatchet.trimToNull(overrideEncryptionKey)
|
|
127
|
+
: await this.selectRandomEncryptionKey();
|
|
128
|
+
RequireRatchet.notNullOrUndefined(payload, 'payload');
|
|
129
|
+
payload.jti = this.jtiGenerator ? this.jtiGenerator() : null;
|
|
130
|
+
if (expirationSeconds) {
|
|
131
|
+
const nowSeconds = Math.floor(Date.now() / 1000);
|
|
132
|
+
const expires = nowSeconds + expirationSeconds;
|
|
133
|
+
Logger.debug('Forcing expiration to %d', expires);
|
|
134
|
+
payload.exp = expires;
|
|
135
|
+
}
|
|
136
|
+
const token = jwt.sign(payload, encKey);
|
|
137
|
+
return token;
|
|
138
|
+
}
|
|
139
|
+
async refreshJWTString(tokenString, allowExpired, expirationSeconds) {
|
|
140
|
+
const handling = allowExpired ? ExpiredJwtHandling.ADD_FLAG : ExpiredJwtHandling.THROW_EXCEPTION;
|
|
141
|
+
const payload = await this.decodeToken(tokenString, handling);
|
|
142
|
+
const originalDurationSeconds = payload.exp && payload.iat ? payload.exp - payload.iat : null;
|
|
143
|
+
const newExpirationSeconds = expirationSeconds || originalDurationSeconds;
|
|
144
|
+
JwtRatchet.removeJwtFields(payload);
|
|
145
|
+
JwtRatchet.removeExpiredFlag(payload);
|
|
146
|
+
const token = await this.createTokenString(payload, newExpirationSeconds);
|
|
147
|
+
return token;
|
|
148
|
+
}
|
|
149
|
+
static decodeTokenNoVerify(token) {
|
|
150
|
+
return jwt.decode(token);
|
|
151
|
+
}
|
|
152
|
+
static removeJwtFields(ob) {
|
|
153
|
+
if (ob) {
|
|
154
|
+
['iss', 'sub', 'aud', 'exp', 'nbf', 'iat', 'jti'].forEach((k) => {
|
|
155
|
+
delete ob[k];
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
static removeExpiredFlag(ob) {
|
|
160
|
+
if (ob) {
|
|
161
|
+
delete ob[JwtRatchet.EXPIRED_FLAG_NAME];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export { JwtRatchet };
|
|
166
|
+
//# sourceMappingURL=jwt-ratchet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-ratchet.js","sourceRoot":"","sources":["../../src/jwt/jwt-ratchet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { JwtRatchet } from './jwt-ratchet.js';
|
|
2
|
+
import { ExpiredJwtHandling } from './expired-jwt-handling.js';
|
|
3
|
+
describe('#jwtRatchet', function () {
|
|
4
|
+
it('should test expiration flag for a token with millisecond expiration', async () => {
|
|
5
|
+
const jwt = new JwtRatchet(Promise.resolve('test1234'), Promise.resolve([]));
|
|
6
|
+
const token1 = await jwt.createTokenString({ test: 1, exp: Date.now() - 100 }, null);
|
|
7
|
+
const output = await jwt.decodeToken(token1, ExpiredJwtHandling.ADD_FLAG);
|
|
8
|
+
expect(output).not.toBeNull();
|
|
9
|
+
expect(JwtRatchet.hasExpiredFlag(output)).toBeTruthy();
|
|
10
|
+
});
|
|
11
|
+
it('should test expiration calculation for a token', async () => {
|
|
12
|
+
const jwt = new JwtRatchet(Promise.resolve('test1234'), Promise.resolve([]));
|
|
13
|
+
const token1 = await jwt.createTokenString({ test: 1 }, 120);
|
|
14
|
+
const output = await JwtRatchet.secondsRemainingUntilExpiration(token1);
|
|
15
|
+
expect(output).not.toBeNull();
|
|
16
|
+
expect(output).toBeLessThan(121);
|
|
17
|
+
expect(output).toBeGreaterThan(115);
|
|
18
|
+
});
|
|
19
|
+
it('should test round-trip for a token', async () => {
|
|
20
|
+
const jwt = new JwtRatchet(Promise.resolve('test1234'), Promise.resolve([]));
|
|
21
|
+
const token1 = await jwt.createTokenString({ test: 1 }, 120);
|
|
22
|
+
const output = await jwt.decodeToken(token1);
|
|
23
|
+
expect(output).not.toBeNull();
|
|
24
|
+
expect(output['test']).toEqual(1);
|
|
25
|
+
});
|
|
26
|
+
it('should test round-trip for a token with array enc keys', async () => {
|
|
27
|
+
const jwt = new JwtRatchet(Promise.resolve(['test1234', 'test5678']), Promise.resolve([]));
|
|
28
|
+
const token1 = await jwt.createTokenString({ test: 1 }, 120);
|
|
29
|
+
const token2 = await jwt.createTokenString({ test: 1 }, 120);
|
|
30
|
+
const token3 = await jwt.createTokenString({ test: 1 }, 120);
|
|
31
|
+
const output1 = await jwt.decodeToken(token1);
|
|
32
|
+
const output2 = await jwt.decodeToken(token2);
|
|
33
|
+
const output3 = await jwt.decodeToken(token3);
|
|
34
|
+
expect(output1).not.toBeNull();
|
|
35
|
+
expect(output1['test']).toEqual(1);
|
|
36
|
+
expect(output2).not.toBeNull();
|
|
37
|
+
expect(output2['test']).toEqual(1);
|
|
38
|
+
expect(output3).not.toBeNull();
|
|
39
|
+
expect(output3['test']).toEqual(1);
|
|
40
|
+
});
|
|
41
|
+
it('should decode with a decode key', async () => {
|
|
42
|
+
const jwtOld = new JwtRatchet(Promise.resolve('oldKey'), Promise.resolve([]));
|
|
43
|
+
const jwtNew = new JwtRatchet(Promise.resolve('newKey'), Promise.resolve(['oldKey']));
|
|
44
|
+
const token1 = await jwtOld.createTokenString({ test: 1 }, 120);
|
|
45
|
+
const output = await jwtNew.decodeToken(token1);
|
|
46
|
+
expect(output).not.toBeNull();
|
|
47
|
+
expect(output['test']).toEqual(1);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=jwt-ratchet.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-ratchet.spec.js","sourceRoot":"","sources":["../../src/jwt/jwt-ratchet.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-token-base.js","sourceRoot":"","sources":["../../src/jwt/jwt-token-base.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { RequireRatchet } from './require-ratchet.js';
|
|
2
|
+
import { MapRatchet } from './map-ratchet.js';
|
|
3
|
+
export class ArrayRatchet {
|
|
4
|
+
static wrapElementsInArray(input) {
|
|
5
|
+
return input.map((i) => [i]);
|
|
6
|
+
}
|
|
7
|
+
static compareTwoArrays(ar1, ar2, fn) {
|
|
8
|
+
ar1.sort(fn);
|
|
9
|
+
ar2.sort(fn);
|
|
10
|
+
let id1 = 0;
|
|
11
|
+
let id2 = 0;
|
|
12
|
+
const rval = {
|
|
13
|
+
matching: [],
|
|
14
|
+
setOneOnly: [],
|
|
15
|
+
setTwoOnly: [],
|
|
16
|
+
};
|
|
17
|
+
while (id1 < ar1.length && id2 < ar2.length) {
|
|
18
|
+
const aVal = ar1[id1];
|
|
19
|
+
const pVal = ar2[id2];
|
|
20
|
+
const comp = fn(aVal, pVal);
|
|
21
|
+
if (comp === 0) {
|
|
22
|
+
rval.matching.push(aVal);
|
|
23
|
+
id1++;
|
|
24
|
+
id2++;
|
|
25
|
+
}
|
|
26
|
+
else if (comp < 0) {
|
|
27
|
+
rval.setOneOnly.push(aVal);
|
|
28
|
+
id1++;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
rval.setTwoOnly.push(pVal);
|
|
32
|
+
id2++;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (id1 < ar1.length - 1) {
|
|
36
|
+
rval.setOneOnly = rval.setOneOnly.concat(ar1.slice(id1));
|
|
37
|
+
}
|
|
38
|
+
if (id2 < ar2.length - 1) {
|
|
39
|
+
rval.setTwoOnly = rval.setTwoOnly.concat(ar2.slice(id2));
|
|
40
|
+
}
|
|
41
|
+
return rval;
|
|
42
|
+
}
|
|
43
|
+
static extractSubarrayFromSortedByNumberField(input, fieldDotPath, minInclusive, maxExclusive) {
|
|
44
|
+
if (!input || input.length === 0) {
|
|
45
|
+
return input;
|
|
46
|
+
}
|
|
47
|
+
let bottomIdx = minInclusive === null ? 0 : ArrayRatchet.findSplit(input, fieldDotPath, minInclusive) || 0;
|
|
48
|
+
const topIdx = maxExclusive === null ? input.length : ArrayRatchet.findSplit(input, fieldDotPath, maxExclusive);
|
|
49
|
+
const bottomValue = MapRatchet.findValueDotPath(input[bottomIdx], fieldDotPath);
|
|
50
|
+
if (bottomIdx === input.length - 1 && bottomValue < minInclusive) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
if (bottomIdx < input.length && bottomIdx < topIdx && bottomValue < minInclusive) {
|
|
54
|
+
bottomIdx++;
|
|
55
|
+
}
|
|
56
|
+
return input.slice(bottomIdx, topIdx + 1);
|
|
57
|
+
}
|
|
58
|
+
static findSplit(input, fieldDotPath, target) {
|
|
59
|
+
RequireRatchet.notNullOrUndefined(input);
|
|
60
|
+
RequireRatchet.notNullOrUndefined(fieldDotPath);
|
|
61
|
+
RequireRatchet.notNullOrUndefined(target);
|
|
62
|
+
if (input.length === 0 || MapRatchet.findValueDotPath(input[0], fieldDotPath) > target) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
let min = 0;
|
|
66
|
+
let max = input.length;
|
|
67
|
+
let rval = null;
|
|
68
|
+
while (rval === null) {
|
|
69
|
+
const curIdx = Math.floor((min + max) / 2);
|
|
70
|
+
const curVal = MapRatchet.findValueDotPath(input[curIdx], fieldDotPath);
|
|
71
|
+
if (min === max || min === max - 1) {
|
|
72
|
+
rval = min;
|
|
73
|
+
}
|
|
74
|
+
else if (curVal <= target) {
|
|
75
|
+
min = curIdx;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
max = curIdx;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return rval;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=array-ratchet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-ratchet.js","sourceRoot":"","sources":["../../src/lang/array-ratchet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ArrayRatchet } from './array-ratchet.js';
|
|
2
|
+
const sortedArr = [
|
|
3
|
+
{
|
|
4
|
+
n: 'test1',
|
|
5
|
+
v: 1,
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
n: 'test1',
|
|
9
|
+
v: 2,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
n: 'test1',
|
|
13
|
+
v: 4,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
n: 'test1',
|
|
17
|
+
v: 4,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
n: 'test1',
|
|
21
|
+
v: 7,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
n: 'test1',
|
|
25
|
+
v: 12,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
n: 'test1',
|
|
29
|
+
v: 25,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
n: 'test1',
|
|
33
|
+
v: 30,
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
describe('#extractSubarrayFromSortedByNumberField', function () {
|
|
37
|
+
it('should extract the subarray', function () {
|
|
38
|
+
const subArr1 = ArrayRatchet.extractSubarrayFromSortedByNumberField(sortedArr, 'v', 5, 14);
|
|
39
|
+
expect(subArr1.length).toEqual(2);
|
|
40
|
+
const subArr2 = ArrayRatchet.extractSubarrayFromSortedByNumberField(sortedArr, 'v', null, 4);
|
|
41
|
+
expect(subArr2.length).toEqual(4);
|
|
42
|
+
const subArr3 = ArrayRatchet.extractSubarrayFromSortedByNumberField(sortedArr, 'v', 7, null);
|
|
43
|
+
expect(subArr3.length).toEqual(4);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe('#compareTwoArrays', function () {
|
|
47
|
+
it('should create a match report', function () {
|
|
48
|
+
const arr1 = ['a', 'b', 'c'];
|
|
49
|
+
const arr2 = ['a', 'e', 'i', 'o', 'u'];
|
|
50
|
+
const report = ArrayRatchet.compareTwoArrays(arr1, arr2, (a, b) => a.localeCompare(b));
|
|
51
|
+
expect(report).toBeTruthy();
|
|
52
|
+
expect(report.setOneOnly.length).toEqual(2);
|
|
53
|
+
expect(report.setTwoOnly.length).toEqual(4);
|
|
54
|
+
expect(report.matching.length).toEqual(1);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe('#findSplit', function () {
|
|
58
|
+
it('should find the split', function () {
|
|
59
|
+
const split10 = ArrayRatchet.findSplit(sortedArr, 'v', 10);
|
|
60
|
+
const split4 = ArrayRatchet.findSplit(sortedArr, 'v', 4);
|
|
61
|
+
const split0 = ArrayRatchet.findSplit(sortedArr, 'v', 0);
|
|
62
|
+
const split32 = ArrayRatchet.findSplit(sortedArr, 'v', 32);
|
|
63
|
+
expect(split10).toEqual(4);
|
|
64
|
+
expect(split4).toEqual(3);
|
|
65
|
+
expect(split0).toEqual(null);
|
|
66
|
+
expect(split32).toEqual(7);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=array-ratchet.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-ratchet.spec.js","sourceRoot":"","sources":["../../src/lang/array-ratchet.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Logger } from '../logger/logger.js';
|
|
2
|
+
export class Base64Ratchet {
|
|
3
|
+
static safeObjectToBase64JSON(input) {
|
|
4
|
+
return !!input ? Base64Ratchet.generateBase64VersionOfString(JSON.stringify(input)) : null;
|
|
5
|
+
}
|
|
6
|
+
static safeBase64JSONParse(input) {
|
|
7
|
+
let rval = {};
|
|
8
|
+
try {
|
|
9
|
+
if (input) {
|
|
10
|
+
rval = JSON.parse(Base64Ratchet.base64StringToString(input));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
Logger.warn('Error parsing b64/json : %s as json, got %s', input, err, err);
|
|
15
|
+
rval = {};
|
|
16
|
+
}
|
|
17
|
+
return rval;
|
|
18
|
+
}
|
|
19
|
+
static generateBase64VersionOfBlob(blob) {
|
|
20
|
+
return new Promise(function (resolve, reject) {
|
|
21
|
+
if (!blob || blob.size == 0) {
|
|
22
|
+
reject('Wont convert null or non-blob or empty blob');
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const reader = new FileReader();
|
|
26
|
+
reader.onloadend = function () {
|
|
27
|
+
resolve(reader.result.toString());
|
|
28
|
+
};
|
|
29
|
+
reader.readAsDataURL(blob);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
static generateBase64VersionOfString(input) {
|
|
34
|
+
return Base64Ratchet.generateBase64VersionOfBuffer(Buffer.from(input));
|
|
35
|
+
}
|
|
36
|
+
static generateBase64VersionOfBuffer(input) {
|
|
37
|
+
return input.toString('base64');
|
|
38
|
+
}
|
|
39
|
+
static base64StringToBuffer(input) {
|
|
40
|
+
return Buffer.from(input, 'base64');
|
|
41
|
+
}
|
|
42
|
+
static base64StringToString(input, encoding = 'utf8') {
|
|
43
|
+
return Buffer.from(input, 'base64').toString(encoding);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=base64-ratchet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64-ratchet.js","sourceRoot":"","sources":["../../src/lang/base64-ratchet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,OAAO,aAAa;IAEjB,MAAM,CAAC,sBAAsB,CAAC,KAAU;QAC7C,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAAC,KAAa;QAC7C,IAAI,IAAI,GAAQ,EAAE,CAAC;QACnB,IAAI;YACF,IAAI,KAAK,EAAE;gBACT,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;aAC9D;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5E,IAAI,GAAG,EAAE,CAAC;SACX;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,2BAA2B,CAAC,IAAU;QAClD,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM;YAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE;gBAC3B,MAAM,CAAC,6CAA6C,CAAC,CAAC;aACvD;iBAAM;gBACL,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAChC,MAAM,CAAC,SAAS,GAAG;oBACjB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpC,CAAC,CAAC;gBACF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aAC5B;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,6BAA6B,CAAC,KAAa;QACvD,OAAO,aAAa,CAAC,6BAA6B,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;IAEM,MAAM,CAAC,6BAA6B,CAAC,KAAa;QAEvD,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,KAAa;QAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,KAAa,EAAE,WAA2B,MAAM;QACjF,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Base64Ratchet } from './base64-ratchet.js';
|
|
2
|
+
describe('#base64', function () {
|
|
3
|
+
it('should parse a buffer from base64', function () {
|
|
4
|
+
const result = Base64Ratchet.base64StringToBuffer('dGVzdHVzZXI6dGVzdHBhc3M=');
|
|
5
|
+
expect(result).toBeTruthy();
|
|
6
|
+
expect(result.length).toEqual(17);
|
|
7
|
+
});
|
|
8
|
+
it('should parse a string from base64', function () {
|
|
9
|
+
const result = Base64Ratchet.base64StringToString('dGVzdHVzZXI6dGVzdHBhc3M=');
|
|
10
|
+
expect(result).toBeTruthy();
|
|
11
|
+
expect(result.length).toEqual(17);
|
|
12
|
+
});
|
|
13
|
+
it('should round-trip a string', function () {
|
|
14
|
+
const testString = 'teststring';
|
|
15
|
+
const enc = Base64Ratchet.generateBase64VersionOfString(testString);
|
|
16
|
+
const result = Base64Ratchet.base64StringToString(enc);
|
|
17
|
+
expect(result).toBeTruthy();
|
|
18
|
+
expect(result).toEqual(testString);
|
|
19
|
+
});
|
|
20
|
+
it('should round-trip an object', function () {
|
|
21
|
+
const testOb = { a: 'teststring', b: 27 };
|
|
22
|
+
const enc = Base64Ratchet.safeObjectToBase64JSON(testOb);
|
|
23
|
+
const result = Base64Ratchet.safeBase64JSONParse(enc);
|
|
24
|
+
expect(result).toBeTruthy();
|
|
25
|
+
expect(result.a).toEqual(testOb.a);
|
|
26
|
+
expect(result.b).toEqual(testOb.b);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=base64-ratchet.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64-ratchet.spec.js","sourceRoot":"","sources":["../../src/lang/base64-ratchet.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,QAAQ,CAAC,SAAS,EAAE;IAClB,EAAE,CAAC,mCAAmC,EAAE;QACtC,MAAM,MAAM,GAAW,aAAa,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE;QACtC,MAAM,MAAM,GAAW,aAAa,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE;QAC/B,MAAM,UAAU,GAAW,YAAY,CAAC;QACxC,MAAM,GAAG,GAAW,aAAa,CAAC,6BAA6B,CAAC,UAAU,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAW,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE;QAChC,MAAM,MAAM,GAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAW,aAAa,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACjE,MAAM,MAAM,GAAQ,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { NumberRatchet } from './number-ratchet.js';
|
|
2
|
+
export class BooleanRatchet {
|
|
3
|
+
static allTrue(vals, emptyArraysReturn = false) {
|
|
4
|
+
let rval = null;
|
|
5
|
+
if (!!vals) {
|
|
6
|
+
if (vals.length > 0) {
|
|
7
|
+
rval = vals.reduce((a, i) => a && i, true);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
rval = emptyArraysReturn;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
rval = false;
|
|
15
|
+
}
|
|
16
|
+
return rval;
|
|
17
|
+
}
|
|
18
|
+
static anyTrue(vals, emptyArraysReturn = false) {
|
|
19
|
+
let rval = null;
|
|
20
|
+
if (!!vals) {
|
|
21
|
+
if (vals.length > 0) {
|
|
22
|
+
rval = vals.reduce((a, i) => a || i, false);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
rval = emptyArraysReturn;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
rval = false;
|
|
30
|
+
}
|
|
31
|
+
return rval;
|
|
32
|
+
}
|
|
33
|
+
static parseBool(val) {
|
|
34
|
+
return val === true || (val !== null && val !== undefined && typeof val === 'string' && val.toLowerCase() === 'true');
|
|
35
|
+
}
|
|
36
|
+
static intToBool(val) {
|
|
37
|
+
if (val === null || val === undefined) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return NumberRatchet.safeNumber(val) !== 0;
|
|
41
|
+
}
|
|
42
|
+
static boolToInt(val) {
|
|
43
|
+
return BooleanRatchet.parseBool(val) ? 1 : 0;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=boolean-ratchet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boolean-ratchet.js","sourceRoot":"","sources":["../../src/lang/boolean-ratchet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,OAAO,cAAc;IAClB,MAAM,CAAC,OAAO,CAAC,IAAe,EAAE,oBAA6B,KAAK;QACvE,IAAI,IAAI,GAAY,IAAI,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,EAAE;YACV,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;aAC5C;iBAAM;gBACL,IAAI,GAAG,iBAAiB,CAAC;aAC1B;SACF;aAAM;YAEL,IAAI,GAAG,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,IAAe,EAAE,oBAA6B,KAAK;QACvE,IAAI,IAAI,GAAY,IAAI,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,EAAE;YACV,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;aAC7C;iBAAM;gBACL,IAAI,GAAG,iBAAiB,CAAC;aAC1B;SACF;aAAM;YAEL,IAAI,GAAG,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAGM,MAAM,CAAC,SAAS,CAAC,GAAQ;QAC9B,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC;IACxH,CAAC;IAGM,MAAM,CAAC,SAAS,CAAC,GAAQ;QAC9B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;YACrC,OAAO,KAAK,CAAC;SACd;QACD,OAAO,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAGM,MAAM,CAAC,SAAS,CAAC,GAAQ;QAC9B,OAAO,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;CACF"}
|