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