@bitblit/ratchet-common 4.0.80-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/dist/cjs/2d/line-2d.js +2 -0
- package/dist/cjs/2d/plane-2d.js +2 -0
- package/dist/cjs/2d/point-2d.js +2 -0
- package/dist/cjs/2d/poly-line-2d.js +2 -0
- package/dist/cjs/2d/ratchet-2d.js +250 -0
- package/dist/cjs/build/build-information.js +2 -0
- package/dist/cjs/build/ratchet-common-info.js +18 -0
- package/dist/cjs/histogram/histogram-entry.js +2 -0
- package/dist/cjs/histogram/histogram.js +54 -0
- package/dist/cjs/index.js +74 -0
- package/dist/cjs/jwt/common-jwt-token.js +2 -0
- package/dist/cjs/jwt/expired-jwt-handling.js +9 -0
- package/dist/cjs/jwt/jwt-ratchet-like.js +2 -0
- package/dist/cjs/jwt/jwt-ratchet.js +164 -0
- package/dist/cjs/jwt/jwt-token-base.js +2 -0
- package/dist/cjs/lang/array-ratchet.js +87 -0
- package/dist/cjs/lang/base64-ratchet.js +49 -0
- package/dist/cjs/lang/boolean-ratchet.js +49 -0
- package/dist/cjs/lang/composite-last-success-provider.js +28 -0
- package/dist/cjs/lang/date-ratchet.js +33 -0
- package/dist/cjs/lang/duration-ratchet.js +46 -0
- package/dist/cjs/lang/enum-ratchet.js +34 -0
- package/dist/cjs/lang/error-ratchet.js +49 -0
- package/dist/cjs/lang/expiring-object.js +68 -0
- package/dist/cjs/lang/geolocation-ratchet.js +267 -0
- package/dist/cjs/lang/global-ratchet.js +48 -0
- package/dist/cjs/lang/key-value.js +6 -0
- package/dist/cjs/lang/last-success-provider.js +2 -0
- package/dist/cjs/lang/map-ratchet.js +168 -0
- package/dist/cjs/lang/no.js +8 -0
- package/dist/cjs/lang/number-ratchet.js +156 -0
- package/dist/cjs/lang/parsed-url.js +2 -0
- package/dist/cjs/lang/promise-ratchet.js +142 -0
- package/dist/cjs/lang/require-ratchet.js +60 -0
- package/dist/cjs/lang/stop-watch.js +117 -0
- package/dist/cjs/lang/string-ratchet.js +195 -0
- package/dist/cjs/lang/time-zone-ratchet.js +80 -0
- package/dist/cjs/lang/timeout-token.js +19 -0
- package/dist/cjs/lang/transform-ratchet.js +70 -0
- package/dist/cjs/logger/classic-single-line-log-message-formatter.js +18 -0
- package/dist/cjs/logger/log-message-builder.js +51 -0
- package/dist/cjs/logger/log-message-format-type.js +9 -0
- package/dist/cjs/logger/log-message-formatter.js +2 -0
- package/dist/cjs/logger/log-message-processor.js +2 -0
- package/dist/cjs/logger/log-message.js +2 -0
- package/dist/cjs/logger/log-snapshot.js +2 -0
- package/dist/cjs/logger/logger-instance.js +207 -0
- package/dist/cjs/logger/logger-level-name.js +12 -0
- package/dist/cjs/logger/logger-meta.js +2 -0
- package/dist/cjs/logger/logger-options.js +2 -0
- package/dist/cjs/logger/logger-output-function.js +9 -0
- package/dist/cjs/logger/logger-ring-buffer.js +76 -0
- package/dist/cjs/logger/logger-util.js +49 -0
- package/dist/cjs/logger/logger.js +139 -0
- package/dist/cjs/logger/none-log-message-formatter.js +9 -0
- package/dist/cjs/logger/structured-json-log-message-formatter.js +24 -0
- package/dist/cjs/network/browser-local-ip-provider.js +25 -0
- package/dist/cjs/network/fixed-local-ip-provider.js +12 -0
- package/dist/cjs/network/local-ip-provider.js +2 -0
- package/dist/cjs/network/network-ratchet.js +106 -0
- package/dist/cjs/stream/buffer-writable.js +20 -0
- package/dist/cjs/stream/stream-ratchet.js +72 -0
- package/dist/cjs/stream/string-writable.js +18 -0
- package/dist/cjs/third-party/google/google-recaptcha-ratchet.js +33 -0
- package/dist/cjs/third-party/twilio/twilio-ratchet.js +75 -0
- package/dist/cjs/transform/built-in-transforms.js +195 -0
- package/dist/cjs/transform/transform-rule.js +2 -0
- package/dist/cjs/tx/transaction-configuration.js +2 -0
- package/dist/cjs/tx/transaction-final-state.js +9 -0
- package/dist/cjs/tx/transaction-ratchet.js +80 -0
- package/dist/cjs/tx/transaction-result.js +2 -0
- package/dist/cjs/tx/transaction-step.js +2 -0
- package/dist/es/2d/line-2d.js +1 -0
- package/dist/es/2d/plane-2d.js +1 -0
- package/dist/es/2d/point-2d.js +1 -0
- package/dist/es/2d/poly-line-2d.js +1 -0
- package/dist/es/2d/ratchet-2d.js +245 -0
- package/dist/es/build/build-information.js +1 -0
- package/dist/es/build/ratchet-common-info.js +14 -0
- package/dist/es/histogram/histogram-entry.js +1 -0
- package/dist/es/histogram/histogram.js +50 -0
- package/dist/es/index.js +71 -0
- package/dist/es/jwt/common-jwt-token.js +1 -0
- package/dist/es/jwt/expired-jwt-handling.js +6 -0
- package/dist/es/jwt/jwt-ratchet-like.js +1 -0
- package/dist/es/jwt/jwt-ratchet.js +159 -0
- package/dist/es/jwt/jwt-token-base.js +1 -0
- package/dist/es/lang/array-ratchet.js +83 -0
- package/dist/es/lang/base64-ratchet.js +45 -0
- package/dist/es/lang/boolean-ratchet.js +45 -0
- package/dist/es/lang/composite-last-success-provider.js +24 -0
- package/dist/es/lang/date-ratchet.js +29 -0
- package/dist/es/lang/duration-ratchet.js +42 -0
- package/dist/es/lang/enum-ratchet.js +30 -0
- package/dist/es/lang/error-ratchet.js +44 -0
- package/dist/es/lang/expiring-object.js +63 -0
- package/dist/es/lang/geolocation-ratchet.js +263 -0
- package/dist/es/lang/global-ratchet.js +43 -0
- package/dist/es/lang/key-value.js +2 -0
- package/dist/es/lang/last-success-provider.js +1 -0
- package/dist/es/lang/map-ratchet.js +164 -0
- package/dist/es/lang/no.js +4 -0
- package/dist/es/lang/number-ratchet.js +152 -0
- package/dist/es/lang/parsed-url.js +1 -0
- package/dist/es/lang/promise-ratchet.js +138 -0
- package/dist/es/lang/require-ratchet.js +56 -0
- package/dist/es/lang/stop-watch.js +113 -0
- package/dist/es/lang/string-ratchet.js +191 -0
- package/dist/es/lang/time-zone-ratchet.js +76 -0
- package/dist/es/lang/timeout-token.js +15 -0
- package/dist/es/lang/transform-ratchet.js +66 -0
- package/dist/es/logger/classic-single-line-log-message-formatter.js +13 -0
- package/dist/es/logger/log-message-builder.js +47 -0
- package/dist/es/logger/log-message-format-type.js +6 -0
- package/dist/es/logger/log-message-formatter.js +1 -0
- package/dist/es/logger/log-message-processor.js +1 -0
- package/dist/es/logger/log-message.js +1 -0
- package/dist/es/logger/log-snapshot.js +1 -0
- package/dist/es/logger/logger-instance.js +201 -0
- package/dist/es/logger/logger-level-name.js +9 -0
- package/dist/es/logger/logger-meta.js +1 -0
- package/dist/es/logger/logger-options.js +1 -0
- package/dist/es/logger/logger-output-function.js +6 -0
- package/dist/es/logger/logger-ring-buffer.js +72 -0
- package/dist/es/logger/logger-util.js +44 -0
- package/dist/es/logger/logger.js +134 -0
- package/dist/es/logger/none-log-message-formatter.js +5 -0
- package/dist/es/logger/structured-json-log-message-formatter.js +19 -0
- package/dist/es/network/browser-local-ip-provider.js +21 -0
- package/dist/es/network/fixed-local-ip-provider.js +8 -0
- package/dist/es/network/local-ip-provider.js +1 -0
- package/dist/es/network/network-ratchet.js +102 -0
- package/dist/es/stream/buffer-writable.js +16 -0
- package/dist/es/stream/stream-ratchet.js +68 -0
- package/dist/es/stream/string-writable.js +14 -0
- package/dist/es/third-party/google/google-recaptcha-ratchet.js +28 -0
- package/dist/es/third-party/twilio/twilio-ratchet.js +70 -0
- package/dist/es/transform/built-in-transforms.js +191 -0
- package/dist/es/transform/transform-rule.js +1 -0
- package/dist/es/tx/transaction-configuration.js +1 -0
- package/dist/es/tx/transaction-final-state.js +6 -0
- package/dist/es/tx/transaction-ratchet.js +76 -0
- package/dist/es/tx/transaction-result.js +1 -0
- package/dist/es/tx/transaction-step.js +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.es.tsbuildinfo +1 -0
- package/dist/tsconfig.types.tsbuildinfo +1 -0
- package/dist/types/2d/line-2d.d.ts +5 -0
- package/dist/types/2d/plane-2d.d.ts +6 -0
- package/dist/types/2d/point-2d.d.ts +4 -0
- package/dist/types/2d/poly-line-2d.d.ts +4 -0
- package/dist/types/2d/ratchet-2d.d.ts +37 -0
- package/dist/types/build/build-information.d.ts +8 -0
- package/dist/types/build/ratchet-common-info.d.ts +5 -0
- package/dist/types/histogram/histogram-entry.d.ts +4 -0
- package/dist/types/histogram/histogram.d.ts +15 -0
- package/dist/types/index.d.ts +74 -0
- package/dist/types/jwt/common-jwt-token.d.ts +17 -0
- package/dist/types/jwt/expired-jwt-handling.d.ts +5 -0
- package/dist/types/jwt/jwt-ratchet-like.d.ts +18 -0
- package/dist/types/jwt/jwt-ratchet.d.ts +39 -0
- package/dist/types/jwt/jwt-token-base.d.ts +13 -0
- package/dist/types/lang/array-ratchet.d.ts +30 -0
- package/dist/types/lang/base64-ratchet.d.ts +10 -0
- package/dist/types/lang/boolean-ratchet.d.ts +7 -0
- package/dist/types/lang/composite-last-success-provider.d.ts +8 -0
- package/dist/types/lang/date-ratchet.d.ts +11 -0
- package/dist/types/lang/duration-ratchet.d.ts +7 -0
- package/dist/types/lang/enum-ratchet.d.ts +12 -0
- package/dist/types/lang/error-ratchet.d.ts +6 -0
- package/dist/types/lang/expiring-object.d.ts +20 -0
- package/dist/types/lang/geolocation-ratchet.d.ts +40 -0
- package/dist/types/lang/global-ratchet.d.ts +6 -0
- package/dist/types/lang/key-value.d.ts +4 -0
- package/dist/types/lang/last-success-provider.d.ts +4 -0
- package/dist/types/lang/map-ratchet.d.ts +15 -0
- package/dist/types/lang/no.d.ts +3 -0
- package/dist/types/lang/number-ratchet.d.ts +20 -0
- package/dist/types/lang/parsed-url.d.ts +10 -0
- package/dist/types/lang/promise-ratchet.d.ts +32 -0
- package/dist/types/lang/require-ratchet.d.ts +11 -0
- package/dist/types/lang/stop-watch.d.ts +17 -0
- package/dist/types/lang/string-ratchet.d.ts +27 -0
- package/dist/types/lang/time-zone-ratchet.d.ts +50 -0
- package/dist/types/lang/timeout-token.d.ts +9 -0
- package/dist/types/lang/transform-ratchet.d.ts +7 -0
- package/dist/types/logger/classic-single-line-log-message-formatter.d.ts +6 -0
- package/dist/types/logger/log-message-builder.d.ts +14 -0
- package/dist/types/logger/log-message-format-type.d.ts +5 -0
- package/dist/types/logger/log-message-formatter.d.ts +5 -0
- package/dist/types/logger/log-message-processor.d.ts +5 -0
- package/dist/types/logger/log-message.d.ts +8 -0
- package/dist/types/logger/log-snapshot.d.ts +5 -0
- package/dist/types/logger/logger-instance.d.ts +46 -0
- package/dist/types/logger/logger-level-name.d.ts +8 -0
- package/dist/types/logger/logger-meta.d.ts +6 -0
- package/dist/types/logger/logger-options.d.ts +13 -0
- package/dist/types/logger/logger-output-function.d.ts +5 -0
- package/dist/types/logger/logger-ring-buffer.d.ts +18 -0
- package/dist/types/logger/logger-util.d.ts +8 -0
- package/dist/types/logger/logger.d.ts +52 -0
- package/dist/types/logger/none-log-message-formatter.d.ts +6 -0
- package/dist/types/logger/structured-json-log-message-formatter.d.ts +6 -0
- package/dist/types/network/browser-local-ip-provider.d.ts +7 -0
- package/dist/types/network/fixed-local-ip-provider.d.ts +6 -0
- package/dist/types/network/local-ip-provider.d.ts +4 -0
- package/dist/types/network/network-ratchet.d.ts +9 -0
- package/dist/types/stream/buffer-writable.d.ts +9 -0
- package/dist/types/stream/stream-ratchet.d.ts +12 -0
- package/dist/types/stream/string-writable.d.ts +8 -0
- package/dist/types/third-party/google/google-recaptcha-ratchet.d.ts +4 -0
- package/dist/types/third-party/twilio/twilio-ratchet.d.ts +15 -0
- package/dist/types/transform/built-in-transforms.d.ts +18 -0
- package/dist/types/transform/transform-rule.d.ts +3 -0
- package/dist/types/tx/transaction-configuration.d.ts +7 -0
- package/dist/types/tx/transaction-final-state.d.ts +5 -0
- package/dist/types/tx/transaction-ratchet.d.ts +6 -0
- package/dist/types/tx/transaction-result.d.ts +9 -0
- package/dist/types/tx/transaction-step.d.ts +5 -0
- package/package.json +65 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Ratchet2d = void 0;
|
|
4
|
+
const boolean_ratchet_1 = require("../lang/boolean-ratchet");
|
|
5
|
+
class Ratchet2d {
|
|
6
|
+
constructor() { }
|
|
7
|
+
static translateToOriginVector(points) {
|
|
8
|
+
let rval = null;
|
|
9
|
+
if (Ratchet2d.validPoints(points)) {
|
|
10
|
+
rval = {
|
|
11
|
+
x: null,
|
|
12
|
+
y: null,
|
|
13
|
+
};
|
|
14
|
+
points.forEach((p) => {
|
|
15
|
+
rval.x = rval.x === null || p.x < rval.x ? p.x : rval.x;
|
|
16
|
+
rval.y = rval.y === null || p.y < rval.y ? p.y : rval.y;
|
|
17
|
+
});
|
|
18
|
+
rval.x *= -1;
|
|
19
|
+
rval.y *= -1;
|
|
20
|
+
}
|
|
21
|
+
return rval;
|
|
22
|
+
}
|
|
23
|
+
static minimalContainingPlane(points) {
|
|
24
|
+
let rval = null;
|
|
25
|
+
if (Ratchet2d.validPoints(points)) {
|
|
26
|
+
rval = {
|
|
27
|
+
width: 0,
|
|
28
|
+
height: 0,
|
|
29
|
+
};
|
|
30
|
+
points.forEach((p) => {
|
|
31
|
+
rval.width = Math.max(rval.width, p.x + 1);
|
|
32
|
+
rval.height = Math.max(rval.height, p.y + 1);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return rval;
|
|
36
|
+
}
|
|
37
|
+
static scaleVector(src, dst) {
|
|
38
|
+
let rval = null;
|
|
39
|
+
if (Ratchet2d.validPlane(src) && Ratchet2d.validPlane(dst)) {
|
|
40
|
+
rval = {
|
|
41
|
+
x: dst.width / src.width,
|
|
42
|
+
y: dst.height / src.height,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return rval;
|
|
46
|
+
}
|
|
47
|
+
static samePoint(p1, p2) {
|
|
48
|
+
return !!p1 && !!p2 && p1.x === p2.x && p1.y === p2.y;
|
|
49
|
+
}
|
|
50
|
+
static atLeastOneDimensionShared(p1, p2) {
|
|
51
|
+
return !!p1 && !!p2 && (p1.x === p2.x || p1.y === p2.y);
|
|
52
|
+
}
|
|
53
|
+
static validPlane(plane) {
|
|
54
|
+
return !!plane && !!plane.height && !!plane.width;
|
|
55
|
+
}
|
|
56
|
+
static validLine(line) {
|
|
57
|
+
return !!line && Ratchet2d.validPoint(line.p1) && Ratchet2d.validPoint(line.p2) && !Ratchet2d.samePoint(line.p1, line.p2);
|
|
58
|
+
}
|
|
59
|
+
static validLines(lines) {
|
|
60
|
+
return !!lines && boolean_ratchet_1.BooleanRatchet.allTrue(lines.map((l) => Ratchet2d.validLine(l)));
|
|
61
|
+
}
|
|
62
|
+
static validPolyLine(pline) {
|
|
63
|
+
var _a;
|
|
64
|
+
return !!pline && ((_a = pline.pts) === null || _a === void 0 ? void 0 : _a.length) > 1 && boolean_ratchet_1.BooleanRatchet.allTrue(pline.pts.map((p) => Ratchet2d.validPoint(p)));
|
|
65
|
+
}
|
|
66
|
+
static polyLineToLines(pline) {
|
|
67
|
+
let rval = null;
|
|
68
|
+
if (Ratchet2d.validPolyLine(pline)) {
|
|
69
|
+
rval = [];
|
|
70
|
+
for (let i = 1; i < pline.pts.length; i++) {
|
|
71
|
+
rval.push({ p1: pline.pts[i - 1], p2: pline.pts[i] });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return rval;
|
|
75
|
+
}
|
|
76
|
+
static lastPointOnPolyLine(polyLine) {
|
|
77
|
+
return Ratchet2d.validPolyLine(polyLine) ? polyLine.pts[polyLine.pts.length - 1] : null;
|
|
78
|
+
}
|
|
79
|
+
static lineToPolyLine(line) {
|
|
80
|
+
return Ratchet2d.validLine(line) ? { pts: [line.p1, line.p2] } : null;
|
|
81
|
+
}
|
|
82
|
+
static linesToPolyLines(lines) {
|
|
83
|
+
let rval = null;
|
|
84
|
+
if (Ratchet2d.validLines(lines)) {
|
|
85
|
+
rval = [];
|
|
86
|
+
let currentPLine = Ratchet2d.lineToPolyLine(lines[0]);
|
|
87
|
+
for (let i = 1; i < lines.length; i++) {
|
|
88
|
+
if (Ratchet2d.samePoint(Ratchet2d.lastPointOnPolyLine(currentPLine), lines[i].p1)) {
|
|
89
|
+
currentPLine.pts.push(lines[i].p2);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
rval.push(currentPLine);
|
|
93
|
+
currentPLine = Ratchet2d.lineToPolyLine(lines[i]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
rval.push(currentPLine);
|
|
97
|
+
}
|
|
98
|
+
return rval;
|
|
99
|
+
}
|
|
100
|
+
static validPoint(pt) {
|
|
101
|
+
return !!pt && pt.x != null && pt.x != undefined && pt.y !== null && pt.y !== undefined;
|
|
102
|
+
}
|
|
103
|
+
static validPoints(pt) {
|
|
104
|
+
return (!!pt &&
|
|
105
|
+
boolean_ratchet_1.BooleanRatchet.allTrue(pt.map((p) => Ratchet2d.validPoint(p)), false));
|
|
106
|
+
}
|
|
107
|
+
static planeContainsPoint(pt, plane) {
|
|
108
|
+
return Ratchet2d.validPlane(plane) && Ratchet2d.validPoint(pt) && pt.x >= 0 && pt.x < plane.width && pt.y >= 0 && pt.y < plane.height;
|
|
109
|
+
}
|
|
110
|
+
static planeContainsPoints(pt, plane) {
|
|
111
|
+
return pt && pt.map((p) => Ratchet2d.planeContainsPoint(p, plane)).reduce((a, i) => a && i, true);
|
|
112
|
+
}
|
|
113
|
+
static linesToPoints(lines) {
|
|
114
|
+
let rval = null;
|
|
115
|
+
if (Ratchet2d.validLines(lines)) {
|
|
116
|
+
rval = lines.map((l) => [l.p1, l.p2]).flat();
|
|
117
|
+
}
|
|
118
|
+
return rval;
|
|
119
|
+
}
|
|
120
|
+
static pointsToLines(points) {
|
|
121
|
+
let rval = null;
|
|
122
|
+
if (Ratchet2d.validPoints(points)) {
|
|
123
|
+
if (points.length % 2 == 0) {
|
|
124
|
+
rval = [];
|
|
125
|
+
for (let i = 0; i < points.length; i += 2) {
|
|
126
|
+
rval.push({ p1: points[i], p2: points[i + 1] });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
throw new Error('Cannot convert non-even array of points into lines');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return rval;
|
|
134
|
+
}
|
|
135
|
+
static rotateRightAboutOrigin90Degrees(points, times = 1) {
|
|
136
|
+
let rval = null;
|
|
137
|
+
let translate = { x: 0, y: 0 };
|
|
138
|
+
if (Ratchet2d.validPoints(points)) {
|
|
139
|
+
rval = Object.assign([], points);
|
|
140
|
+
translate = Ratchet2d.translateToOriginVector(rval);
|
|
141
|
+
rval = Ratchet2d.translate(rval, translate);
|
|
142
|
+
let plane = Ratchet2d.minimalContainingPlane(rval);
|
|
143
|
+
rval = Ratchet2d.xToY(rval);
|
|
144
|
+
plane = { width: plane.height, height: plane.width };
|
|
145
|
+
translate = { x: translate.y * -1, y: translate.x * -1 };
|
|
146
|
+
rval = Ratchet2d.mirrorPointsOnPlane(rval, plane, true, false);
|
|
147
|
+
rval = Ratchet2d.translate(rval, translate);
|
|
148
|
+
}
|
|
149
|
+
const timesToRotate = times > 4 ? times % 4 : times;
|
|
150
|
+
if (timesToRotate > 1) {
|
|
151
|
+
rval = Ratchet2d.rotateRightAboutOrigin90Degrees(rval, timesToRotate - 1);
|
|
152
|
+
}
|
|
153
|
+
return rval;
|
|
154
|
+
}
|
|
155
|
+
static planeContainsLines(lines, plane) {
|
|
156
|
+
return lines && Ratchet2d.planeContainsPoints(lines.map((l) => [l.p1, l.p2]).flat(), plane);
|
|
157
|
+
}
|
|
158
|
+
static planeContainsPolyLine(pline, plane) {
|
|
159
|
+
return Ratchet2d.planeContainsLines(Ratchet2d.polyLineToLines(pline), plane);
|
|
160
|
+
}
|
|
161
|
+
static planeContainsLine(line, plane) {
|
|
162
|
+
return (Ratchet2d.validPlane(plane) &&
|
|
163
|
+
Ratchet2d.validLine(line) &&
|
|
164
|
+
Ratchet2d.planeContainsPoint(line.p1, plane) &&
|
|
165
|
+
Ratchet2d.planeContainsPoint(line.p2, plane));
|
|
166
|
+
}
|
|
167
|
+
static xToY(points) {
|
|
168
|
+
let rval = null;
|
|
169
|
+
if (Ratchet2d.validPoints(points)) {
|
|
170
|
+
rval = points.map((p) => {
|
|
171
|
+
const next = { x: p.y, y: p.x };
|
|
172
|
+
return next;
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return rval;
|
|
176
|
+
}
|
|
177
|
+
static translate(points, xlate) {
|
|
178
|
+
let rval = null;
|
|
179
|
+
if (Ratchet2d.validPoints(points) && Ratchet2d.validPoint(xlate)) {
|
|
180
|
+
rval = points.map((p) => {
|
|
181
|
+
const next = {
|
|
182
|
+
x: p.x + xlate.x,
|
|
183
|
+
y: p.y + xlate.y,
|
|
184
|
+
};
|
|
185
|
+
return next;
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
return rval;
|
|
189
|
+
}
|
|
190
|
+
static mirrorPointsOnPlane(points, src, mirrorX, mirrorY) {
|
|
191
|
+
let rval = null;
|
|
192
|
+
if (Ratchet2d.validPoints(points) && Ratchet2d.validPlane(src)) {
|
|
193
|
+
if (mirrorX || mirrorY) {
|
|
194
|
+
rval = points.map((p) => {
|
|
195
|
+
const next = {
|
|
196
|
+
x: mirrorX ? src.width - 1 - p.x : p.x,
|
|
197
|
+
y: mirrorY ? src.height - 1 - p.y : p.y,
|
|
198
|
+
};
|
|
199
|
+
return next;
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
rval = Object.assign([], points);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return rval;
|
|
207
|
+
}
|
|
208
|
+
static transformPointsToNewPlane(points, src, dst) {
|
|
209
|
+
let rval = null;
|
|
210
|
+
if (Ratchet2d.validPoints(points) && Ratchet2d.validPlane(src) && Ratchet2d.validPlane(dst)) {
|
|
211
|
+
const scale = Ratchet2d.scaleVector(src, dst);
|
|
212
|
+
rval = points.map((p) => {
|
|
213
|
+
const next = { x: p.x * scale.x, y: p.y * scale.y };
|
|
214
|
+
return next;
|
|
215
|
+
});
|
|
216
|
+
rval = Ratchet2d.mirrorPointsOnPlane(rval, dst, dst.rightToLeft !== src.rightToLeft, dst.topToBottom !== src.topToBottom);
|
|
217
|
+
}
|
|
218
|
+
return rval;
|
|
219
|
+
}
|
|
220
|
+
static transformPointToNewPlane(point, src, dst) {
|
|
221
|
+
const tmp = Ratchet2d.transformPointsToNewPlane([point], src, dst);
|
|
222
|
+
return tmp.length === 1 ? tmp[0] : null;
|
|
223
|
+
}
|
|
224
|
+
static transformLines(lines, src, dst) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
static fitCurve(curveDef, inputX) {
|
|
228
|
+
curveDef.sort((a, b) => {
|
|
229
|
+
return a.x - b.x;
|
|
230
|
+
});
|
|
231
|
+
if (inputX <= curveDef[0].x) {
|
|
232
|
+
return curveDef[0].y;
|
|
233
|
+
}
|
|
234
|
+
else if (inputX >= curveDef[curveDef.length - 1].x) {
|
|
235
|
+
return curveDef[curveDef.length - 1].y;
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
let idx = 0;
|
|
239
|
+
while (curveDef[idx + 1].x < inputX) {
|
|
240
|
+
idx++;
|
|
241
|
+
}
|
|
242
|
+
const xSpread = curveDef[idx + 1].x - curveDef[idx].x;
|
|
243
|
+
const ySpread = curveDef[idx + 1].y - curveDef[idx].y;
|
|
244
|
+
const pct = (inputX - curveDef[idx].x) / xSpread;
|
|
245
|
+
const yAdd = pct * ySpread;
|
|
246
|
+
return curveDef[idx].y + yAdd;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
exports.Ratchet2d = Ratchet2d;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RatchetInfo = void 0;
|
|
4
|
+
class RatchetInfo {
|
|
5
|
+
constructor() { }
|
|
6
|
+
static buildInformation() {
|
|
7
|
+
const val = {
|
|
8
|
+
version: '80',
|
|
9
|
+
hash: '10fcb761c2fa4186df89e527e948f5780a4e14ac',
|
|
10
|
+
branch: 'alpha-2023-03-12-2',
|
|
11
|
+
tag: 'alpha-2023-03-12-2',
|
|
12
|
+
timeBuiltISO: '2023-03-12T20:00:51-0700',
|
|
13
|
+
notes: '',
|
|
14
|
+
};
|
|
15
|
+
return val;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.RatchetInfo = RatchetInfo;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Histogram = void 0;
|
|
4
|
+
class Histogram {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.entries = [];
|
|
7
|
+
}
|
|
8
|
+
update(val, addValue = 1) {
|
|
9
|
+
if (val) {
|
|
10
|
+
const entry = this.entries.find((e) => e.item === val);
|
|
11
|
+
if (entry) {
|
|
12
|
+
entry.count += addValue;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
this.entries.push({
|
|
16
|
+
item: val,
|
|
17
|
+
count: addValue,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
sort() {
|
|
23
|
+
this.entries.sort((a, b) => {
|
|
24
|
+
let rval = b.count - a.count;
|
|
25
|
+
if (rval === 0) {
|
|
26
|
+
rval = String(b.item).localeCompare(String(a.item));
|
|
27
|
+
}
|
|
28
|
+
return rval;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
sortKeys() {
|
|
32
|
+
this.entries.sort((a, b) => String(b.item).localeCompare(String(a.item)));
|
|
33
|
+
}
|
|
34
|
+
reverse() {
|
|
35
|
+
this.entries.reverse();
|
|
36
|
+
}
|
|
37
|
+
getEntries() {
|
|
38
|
+
return this.entries;
|
|
39
|
+
}
|
|
40
|
+
getTotalCount() {
|
|
41
|
+
let rval = 0;
|
|
42
|
+
this.entries.forEach((h) => (rval += h.count));
|
|
43
|
+
return rval;
|
|
44
|
+
}
|
|
45
|
+
countForValue(val) {
|
|
46
|
+
const entry = this.entries.find((test) => test.item === val);
|
|
47
|
+
return entry ? entry.count : 0;
|
|
48
|
+
}
|
|
49
|
+
percentForValue(val) {
|
|
50
|
+
const total = this.getTotalCount();
|
|
51
|
+
return total === 0 ? 0 : this.countForValue(val) / total;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.Histogram = Histogram;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./2d/line-2d"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./2d/plane-2d"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./2d/point-2d"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./2d/poly-line-2d"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./2d/ratchet-2d"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./build/build-information"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./build/ratchet-common-info"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./histogram/histogram-entry"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./histogram/histogram"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./jwt/common-jwt-token"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./jwt/expired-jwt-handling"), exports);
|
|
15
|
+
tslib_1.__exportStar(require("./jwt/jwt-ratchet-like"), exports);
|
|
16
|
+
tslib_1.__exportStar(require("./jwt/jwt-ratchet"), exports);
|
|
17
|
+
tslib_1.__exportStar(require("./jwt/jwt-token-base"), exports);
|
|
18
|
+
tslib_1.__exportStar(require("./lang/array-ratchet"), exports);
|
|
19
|
+
tslib_1.__exportStar(require("./lang/base64-ratchet"), exports);
|
|
20
|
+
tslib_1.__exportStar(require("./lang/boolean-ratchet"), exports);
|
|
21
|
+
tslib_1.__exportStar(require("./lang/composite-last-success-provider"), exports);
|
|
22
|
+
tslib_1.__exportStar(require("./lang/date-ratchet"), exports);
|
|
23
|
+
tslib_1.__exportStar(require("./lang/duration-ratchet"), exports);
|
|
24
|
+
tslib_1.__exportStar(require("./lang/enum-ratchet"), exports);
|
|
25
|
+
tslib_1.__exportStar(require("./lang/error-ratchet"), exports);
|
|
26
|
+
tslib_1.__exportStar(require("./lang/expiring-object"), exports);
|
|
27
|
+
tslib_1.__exportStar(require("./lang/geolocation-ratchet"), exports);
|
|
28
|
+
tslib_1.__exportStar(require("./lang/global-ratchet"), exports);
|
|
29
|
+
tslib_1.__exportStar(require("./lang/key-value"), exports);
|
|
30
|
+
tslib_1.__exportStar(require("./lang/last-success-provider"), exports);
|
|
31
|
+
tslib_1.__exportStar(require("./lang/map-ratchet"), exports);
|
|
32
|
+
tslib_1.__exportStar(require("./lang/no"), exports);
|
|
33
|
+
tslib_1.__exportStar(require("./lang/number-ratchet"), exports);
|
|
34
|
+
tslib_1.__exportStar(require("./lang/parsed-url"), exports);
|
|
35
|
+
tslib_1.__exportStar(require("./lang/promise-ratchet"), exports);
|
|
36
|
+
tslib_1.__exportStar(require("./lang/require-ratchet"), exports);
|
|
37
|
+
tslib_1.__exportStar(require("./lang/stop-watch"), exports);
|
|
38
|
+
tslib_1.__exportStar(require("./lang/string-ratchet"), exports);
|
|
39
|
+
tslib_1.__exportStar(require("./lang/time-zone-ratchet"), exports);
|
|
40
|
+
tslib_1.__exportStar(require("./lang/timeout-token"), exports);
|
|
41
|
+
tslib_1.__exportStar(require("./lang/transform-ratchet"), exports);
|
|
42
|
+
tslib_1.__exportStar(require("./logger/classic-single-line-log-message-formatter"), exports);
|
|
43
|
+
tslib_1.__exportStar(require("./logger/log-message-builder"), exports);
|
|
44
|
+
tslib_1.__exportStar(require("./logger/log-message-format-type"), exports);
|
|
45
|
+
tslib_1.__exportStar(require("./logger/log-message-formatter"), exports);
|
|
46
|
+
tslib_1.__exportStar(require("./logger/log-message-processor"), exports);
|
|
47
|
+
tslib_1.__exportStar(require("./logger/log-message"), exports);
|
|
48
|
+
tslib_1.__exportStar(require("./logger/log-snapshot"), exports);
|
|
49
|
+
tslib_1.__exportStar(require("./logger/logger-instance"), exports);
|
|
50
|
+
tslib_1.__exportStar(require("./logger/logger-level-name"), exports);
|
|
51
|
+
tslib_1.__exportStar(require("./logger/logger-meta"), exports);
|
|
52
|
+
tslib_1.__exportStar(require("./logger/logger-options"), exports);
|
|
53
|
+
tslib_1.__exportStar(require("./logger/logger-output-function"), exports);
|
|
54
|
+
tslib_1.__exportStar(require("./logger/logger-ring-buffer"), exports);
|
|
55
|
+
tslib_1.__exportStar(require("./logger/logger-util"), exports);
|
|
56
|
+
tslib_1.__exportStar(require("./logger/logger"), exports);
|
|
57
|
+
tslib_1.__exportStar(require("./logger/none-log-message-formatter"), exports);
|
|
58
|
+
tslib_1.__exportStar(require("./logger/structured-json-log-message-formatter"), exports);
|
|
59
|
+
tslib_1.__exportStar(require("./network/browser-local-ip-provider"), exports);
|
|
60
|
+
tslib_1.__exportStar(require("./network/fixed-local-ip-provider"), exports);
|
|
61
|
+
tslib_1.__exportStar(require("./network/local-ip-provider"), exports);
|
|
62
|
+
tslib_1.__exportStar(require("./network/network-ratchet"), exports);
|
|
63
|
+
tslib_1.__exportStar(require("./stream/buffer-writable"), exports);
|
|
64
|
+
tslib_1.__exportStar(require("./stream/stream-ratchet"), exports);
|
|
65
|
+
tslib_1.__exportStar(require("./stream/string-writable"), exports);
|
|
66
|
+
tslib_1.__exportStar(require("./third-party/google/google-recaptcha-ratchet"), exports);
|
|
67
|
+
tslib_1.__exportStar(require("./third-party/twilio/twilio-ratchet"), exports);
|
|
68
|
+
tslib_1.__exportStar(require("./transform/built-in-transforms"), exports);
|
|
69
|
+
tslib_1.__exportStar(require("./transform/transform-rule"), exports);
|
|
70
|
+
tslib_1.__exportStar(require("./tx/transaction-configuration"), exports);
|
|
71
|
+
tslib_1.__exportStar(require("./tx/transaction-final-state"), exports);
|
|
72
|
+
tslib_1.__exportStar(require("./tx/transaction-ratchet"), exports);
|
|
73
|
+
tslib_1.__exportStar(require("./tx/transaction-result"), exports);
|
|
74
|
+
tslib_1.__exportStar(require("./tx/transaction-step"), exports);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExpiredJwtHandling = void 0;
|
|
4
|
+
var ExpiredJwtHandling;
|
|
5
|
+
(function (ExpiredJwtHandling) {
|
|
6
|
+
ExpiredJwtHandling[ExpiredJwtHandling["RETURN_NULL"] = 0] = "RETURN_NULL";
|
|
7
|
+
ExpiredJwtHandling[ExpiredJwtHandling["THROW_EXCEPTION"] = 1] = "THROW_EXCEPTION";
|
|
8
|
+
ExpiredJwtHandling[ExpiredJwtHandling["ADD_FLAG"] = 2] = "ADD_FLAG";
|
|
9
|
+
})(ExpiredJwtHandling = exports.ExpiredJwtHandling || (exports.ExpiredJwtHandling = {}));
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JwtRatchet = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const jsonwebtoken_1 = tslib_1.__importDefault(require("jsonwebtoken"));
|
|
6
|
+
const require_ratchet_1 = require("../lang/require-ratchet");
|
|
7
|
+
const logger_1 = require("../logger/logger");
|
|
8
|
+
const string_ratchet_1 = require("../lang/string-ratchet");
|
|
9
|
+
const duration_ratchet_1 = require("../lang/duration-ratchet");
|
|
10
|
+
const logger_level_name_1 = require("../logger/logger-level-name");
|
|
11
|
+
const expired_jwt_handling_1 = require("./expired-jwt-handling");
|
|
12
|
+
class JwtRatchet {
|
|
13
|
+
constructor(_encryptionKeyPromise, _decryptKeysPromise, _jtiGenerator = string_ratchet_1.StringRatchet.createType4Guid, _decryptOnlyKeyUseLogLevel = logger_level_name_1.LoggerLevelName.info, _parseFailureLogLevel = logger_level_name_1.LoggerLevelName.debug) {
|
|
14
|
+
this._encryptionKeyPromise = _encryptionKeyPromise;
|
|
15
|
+
this._decryptKeysPromise = _decryptKeysPromise;
|
|
16
|
+
this._jtiGenerator = _jtiGenerator;
|
|
17
|
+
this._decryptOnlyKeyUseLogLevel = _decryptOnlyKeyUseLogLevel;
|
|
18
|
+
this._parseFailureLogLevel = _parseFailureLogLevel;
|
|
19
|
+
require_ratchet_1.RequireRatchet.notNullOrUndefined(_encryptionKeyPromise, 'encryptionKeyPromise');
|
|
20
|
+
}
|
|
21
|
+
get encryptionKeyPromise() {
|
|
22
|
+
return this._encryptionKeyPromise;
|
|
23
|
+
}
|
|
24
|
+
get decryptKeysPromise() {
|
|
25
|
+
return this._decryptKeysPromise;
|
|
26
|
+
}
|
|
27
|
+
get jtiGenerator() {
|
|
28
|
+
return this._jtiGenerator;
|
|
29
|
+
}
|
|
30
|
+
get decryptOnlyKeyUseLogLevel() {
|
|
31
|
+
return this._decryptOnlyKeyUseLogLevel;
|
|
32
|
+
}
|
|
33
|
+
get parseFailureLogLevel() {
|
|
34
|
+
return this._parseFailureLogLevel;
|
|
35
|
+
}
|
|
36
|
+
static hasExpiredFlag(ob) {
|
|
37
|
+
return ob && ob[JwtRatchet.EXPIRED_FLAG_NAME] === true;
|
|
38
|
+
}
|
|
39
|
+
static async invalidSafeDecode(payloadString, decryptKey, logLevel = logger_level_name_1.LoggerLevelName.silly) {
|
|
40
|
+
let rval = null;
|
|
41
|
+
try {
|
|
42
|
+
rval = jsonwebtoken_1.default.verify(payloadString, decryptKey, { ignoreExpiration: true });
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
logger_1.Logger.logByLevel(logLevel, 'Caught %s - ignoring', err);
|
|
46
|
+
}
|
|
47
|
+
return rval;
|
|
48
|
+
}
|
|
49
|
+
static async secondsRemainingUntilExpiration(payloadString) {
|
|
50
|
+
let rval = null;
|
|
51
|
+
if (string_ratchet_1.StringRatchet.trimToNull(payloadString)) {
|
|
52
|
+
const output = await JwtRatchet.decodeTokenNoVerify(payloadString);
|
|
53
|
+
const nowSecond = Math.floor(Date.now() / 1000);
|
|
54
|
+
if (output.exp) {
|
|
55
|
+
const expSeconds = output.exp > nowSecond * 100 ? Math.floor(output.exp / 1000) : output.exp;
|
|
56
|
+
rval = Math.max(0, expSeconds - nowSecond);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return rval;
|
|
60
|
+
}
|
|
61
|
+
static async msRemainingUntilExpiration(payloadString) {
|
|
62
|
+
const secs = await JwtRatchet.secondsRemainingUntilExpiration(payloadString);
|
|
63
|
+
let rval = null;
|
|
64
|
+
if (secs !== null && secs !== undefined) {
|
|
65
|
+
rval = secs * 1000;
|
|
66
|
+
}
|
|
67
|
+
return rval;
|
|
68
|
+
}
|
|
69
|
+
async decodeToken(payloadString, expiredHandling = expired_jwt_handling_1.ExpiredJwtHandling.RETURN_NULL) {
|
|
70
|
+
const encKeys = await this.encryptionKeyArray();
|
|
71
|
+
let decKeys = Object.assign([], encKeys);
|
|
72
|
+
if (this.decryptKeysPromise) {
|
|
73
|
+
decKeys = decKeys.concat(await this.decryptKeysPromise);
|
|
74
|
+
}
|
|
75
|
+
const keysTried = [];
|
|
76
|
+
let payload = null;
|
|
77
|
+
for (let i = 0; i < decKeys.length && !payload; i++) {
|
|
78
|
+
keysTried.push(string_ratchet_1.StringRatchet.obscure(decKeys[i], 1, 1));
|
|
79
|
+
const logLevel = i === decKeys.length - 1 && this.parseFailureLogLevel ? this.parseFailureLogLevel : logger_level_name_1.LoggerLevelName.silly;
|
|
80
|
+
payload = await JwtRatchet.invalidSafeDecode(payloadString, decKeys[i], logLevel);
|
|
81
|
+
if (payload && i >= encKeys.length) {
|
|
82
|
+
logger_1.Logger.logByLevel(this.decryptOnlyKeyUseLogLevel, 'Used old key to decode token : %s', string_ratchet_1.StringRatchet.obscure(decKeys[i], 2));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (payload) {
|
|
86
|
+
const nowSeconds = Math.floor(Date.now() / 1000);
|
|
87
|
+
const expSeconds = (payload === null || payload === void 0 ? void 0 : payload.exp) && payload.exp > nowSeconds * 100 ? Math.floor(payload.exp / 1000) : payload === null || payload === void 0 ? void 0 : payload.exp;
|
|
88
|
+
const nbfSeconds = (payload === null || payload === void 0 ? void 0 : payload.nbf) && payload.nbf > nowSeconds * 100 ? Math.floor(payload.nbf / 1000) : payload === null || payload === void 0 ? void 0 : payload.nbf;
|
|
89
|
+
if ((expSeconds && nowSeconds >= expSeconds) || (nbfSeconds && nowSeconds <= nbfSeconds)) {
|
|
90
|
+
const age = nowSeconds - expSeconds;
|
|
91
|
+
logger_1.Logger.debug('JWT token expired or before NBF : on %d, %s ago', payload.exp, duration_ratchet_1.DurationRatchet.formatMsDuration(age * 1000));
|
|
92
|
+
switch (expiredHandling) {
|
|
93
|
+
case expired_jwt_handling_1.ExpiredJwtHandling.THROW_EXCEPTION:
|
|
94
|
+
throw new Error('JWT Token was expired');
|
|
95
|
+
case expired_jwt_handling_1.ExpiredJwtHandling.ADD_FLAG:
|
|
96
|
+
payload[JwtRatchet.EXPIRED_FLAG_NAME] = true;
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
payload = null;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
logger_1.Logger.warn('Unable to parse a payload (Tried %j) from : %s', keysTried, payloadString);
|
|
106
|
+
}
|
|
107
|
+
return payload;
|
|
108
|
+
}
|
|
109
|
+
async encryptionKeyArray() {
|
|
110
|
+
const encKey = await this.encryptionKeyPromise;
|
|
111
|
+
const rval = Array.isArray(encKey) ? encKey : [encKey];
|
|
112
|
+
if (rval.length < 1) {
|
|
113
|
+
throw new Error('Cannot create JwtRatchet with empty encryption key set');
|
|
114
|
+
}
|
|
115
|
+
return rval;
|
|
116
|
+
}
|
|
117
|
+
async selectRandomEncryptionKey() {
|
|
118
|
+
const encKey = await this.encryptionKeyArray();
|
|
119
|
+
const rval = encKey[Math.floor(Math.random() * encKey.length)];
|
|
120
|
+
return rval;
|
|
121
|
+
}
|
|
122
|
+
async createTokenString(payload, expirationSeconds, overrideEncryptionKey) {
|
|
123
|
+
const encKey = string_ratchet_1.StringRatchet.trimToNull(overrideEncryptionKey)
|
|
124
|
+
? string_ratchet_1.StringRatchet.trimToNull(overrideEncryptionKey)
|
|
125
|
+
: await this.selectRandomEncryptionKey();
|
|
126
|
+
require_ratchet_1.RequireRatchet.notNullOrUndefined(payload, 'payload');
|
|
127
|
+
payload.jti = this.jtiGenerator ? this.jtiGenerator() : null;
|
|
128
|
+
if (expirationSeconds) {
|
|
129
|
+
const nowSeconds = Math.floor(Date.now() / 1000);
|
|
130
|
+
const expires = nowSeconds + expirationSeconds;
|
|
131
|
+
logger_1.Logger.debug('Forcing expiration to %d', expires);
|
|
132
|
+
payload.exp = expires;
|
|
133
|
+
}
|
|
134
|
+
const token = jsonwebtoken_1.default.sign(payload, encKey);
|
|
135
|
+
return token;
|
|
136
|
+
}
|
|
137
|
+
async refreshJWTString(tokenString, allowExpired, expirationSeconds) {
|
|
138
|
+
const handling = allowExpired ? expired_jwt_handling_1.ExpiredJwtHandling.ADD_FLAG : expired_jwt_handling_1.ExpiredJwtHandling.THROW_EXCEPTION;
|
|
139
|
+
const payload = await this.decodeToken(tokenString, handling);
|
|
140
|
+
const originalDurationSeconds = payload.exp && payload.iat ? payload.exp - payload.iat : null;
|
|
141
|
+
const newExpirationSeconds = expirationSeconds || originalDurationSeconds;
|
|
142
|
+
JwtRatchet.removeJwtFields(payload);
|
|
143
|
+
JwtRatchet.removeExpiredFlag(payload);
|
|
144
|
+
const token = await this.createTokenString(payload, newExpirationSeconds);
|
|
145
|
+
return token;
|
|
146
|
+
}
|
|
147
|
+
static decodeTokenNoVerify(token) {
|
|
148
|
+
return jsonwebtoken_1.default.decode(token);
|
|
149
|
+
}
|
|
150
|
+
static removeJwtFields(ob) {
|
|
151
|
+
if (ob) {
|
|
152
|
+
['iss', 'sub', 'aud', 'exp', 'nbf', 'iat', 'jti'].forEach((k) => {
|
|
153
|
+
delete ob[k];
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
static removeExpiredFlag(ob) {
|
|
158
|
+
if (ob) {
|
|
159
|
+
delete ob[JwtRatchet.EXPIRED_FLAG_NAME];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.JwtRatchet = JwtRatchet;
|
|
164
|
+
JwtRatchet.EXPIRED_FLAG_NAME = '__jwtServiceExpiredFlag';
|