@bitblit/ratchet-common 4.0.226-alpha → 4.0.232-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/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/package.json +3 -1
package/lib/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import t from"util";import e from"jsonwebtoken";import{DateTime as r}from"luxon";import{$enum as n}from"ts-enum-util";import s from"url";import o from"cross-fetch";var i,a,l,c,u;!function(t){t.error="error",t.warn="warn",t.info="info",t.verbose="verbose",t.debug="debug",t.silly="silly"}(i||(i={}));class g{_lastLogMessage={messageSource:"No message yet",timestamp:(new Date).getTime(),lvl:i.info};_buffer=[];_bufferIdx=0;_lastSnapshotIdx=0;_bufferSize;constructor(t){if(!t)throw new Error("Cannot create ring buffer of size 0");this._bufferSize=t}get currentIndex(){return this._bufferIdx}get lastSnapshotIdx(){return this._lastSnapshotIdx}set bufferSize(t){if(!t)throw new Error("Cannot create ring buffer of size 0");this._bufferSize=t,this.clearRingBuffer()}getMessages(t=null,e=!1,r=!1){let n=null;if(this._bufferIdx<this._bufferSize){const e=null==t?0:t;n=this._buffer.slice(e,this._bufferIdx)}else{n=[];const e=this._bufferIdx-this._bufferSize;for(let r=t?Math.max(t,e):e;r<this._bufferIdx;r++)n.push(this._buffer[r%this._bufferSize])}return e&&this.clearRingBuffer(),r&&(n=n.reverse()),n}takeSnapshot(){const t=Math.max(0,this._bufferIdx-this._bufferSize),e={messages:this.getMessages(this._lastSnapshotIdx),logMessagesTruncated:Math.max(0,t-this._lastSnapshotIdx)};return this._lastSnapshotIdx=this._bufferIdx,e}getLastLogMessage(){return Object.assign({},this._lastLogMessage)}clearRingBuffer(){this._buffer=[],this._bufferIdx=0,this._lastSnapshotIdx=0}addToRingBuffer(t){this._lastLogMessage=t,this._buffer[this._bufferIdx%this._bufferSize]=t,this._bufferIdx++}}!function(t){t.Console="Console",t.ConsoleNoDebug="ConsoleNoDebug",t.StdOut="StdOut"}(a||(a={}));class h{static LOG_LEVELS_IN_ORDER=[i.error,i.warn,i.info,i.verbose,i.debug,i.silly];static handlerFunctionMap(t=a.Console){const e=new Map;if(t===a.StdOut){if(!process?.stdout?.write)throw new Error("Cannot use standard out - process.stdout.write not found");const t=(t,e)=>process.stdout.write(t,"utf-8",e);e.set(i.error,t),e.set(i.warn,t),e.set(i.info,t),e.set(i.verbose,t),e.set(i.debug,t),e.set(i.silly,t)}else e.set(i.error,console.error),e.set(i.warn,console.warn),e.set(i.info,console.info),e.set(i.verbose,t===a.ConsoleNoDebug?console.log:console.debug),e.set(i.debug,t===a.ConsoleNoDebug?console.log:console.debug),e.set(i.silly,t===a.ConsoleNoDebug?console.log:console.debug);return e}static defaultHandlerFunction(){return console.info}static levelIsEnabled(t,e){const r=h.LOG_LEVELS_IN_ORDER.indexOf(t),n=h.LOG_LEVELS_IN_ORDER.indexOf(e);return r>-1&&n>-1&&n>=r}}!function(t){t.ClassicSingleLine="ClassicSingleLine",t.StructuredJson="StructuredJson",t.None="None"}(l||(l={}));class f{formatMessage(e,r){let n=null;return e&&(n="",n+=r.options.trace?r.options.trace+" ":"",n+="["+e.lvl+"] ",n+=t.format(e.messageSource,...e.subsVars)),n}}class d{formatMessage(t,e){return null}}class p{formatMessage(e,r){let n=null;if(e){const s=Object.assign({},r.options.globalVars||{},e.params||{});s.msg=t.format(e.messageSource,...e.subsVars),s.utcDateTime=new Date(e.timestamp).toISOString(),s.logLevel=e.lvl,r.options.trace&&(s.trace=r.options.trace),s.logName=r.loggerInstanceName,s.logId=r.loggerInstanceId,n=JSON.stringify(s)+"\n"}return n}}class m{static isNullOrUndefined(t){return null==t}static notNullOrUndefined(t,e="object"){if(m.isNullOrUndefined(t))throw new Error(e+" may not be null or undefined")}static notNullUndefinedOrOnlyWhitespaceString(t,e="string"){if(m.isNullOrUndefined(t)||""===t.trim())throw new Error(e+" may not be null or undefined or only whitespace string")}static notNullUndefinedOrEmptyArray(t,e="string"){if(m.isNullOrUndefined(t)||0===t.length)throw new Error(e+" may not be null or undefined or an empty array")}static equal(t,e,r="Values must be equal"){if(t!==e)throw new Error(r)}static true(t,e="Value must be true"){m.equal(t,!0,e)}static noNullOrUndefinedValuesInArray(t,e=null,r=null){if(m.notNullOrUndefined(t,"Source array may not be null"),null!==e&&t.length!==e)throw new Error(`Expected array of length ${e} but was ${t.length} ${r}`);for(let e=0;e<t.length;e++)if(m.isNullOrUndefined(t[e]))throw new Error(`Array index ${e} was null or undefined ${r}`)}static noNullOrUndefinedValuesInRestArgs(t,...e){if(m.notNullOrUndefined(e,"Source array may not be null"),null!==t&&e.length!==t)throw new Error(`Expected array of length ${t} but was ${e.length}`);for(let t=0;t<e.length;t++)if(m.isNullOrUndefined(e[t]))throw new Error(`Array index ${t} was null or undefined`)}static constructorArgumentsMatchLengthAndAreNonNull(){const t=Array.from(arguments),e=this.constructor.length;return m.noNullOrUndefinedValuesInArray(t,e)}}class y{static RFC_3986_RESERVED=["!","*","'","(",")",";",":","@","&","=","+","$",",","/","?","#","[","]","%"];static DIGITS="0123456789";static HEXITS=y.DIGITS+"ABCDEF";static UPPER_CASE_LATIN="ABCDEFGHIJKLMNOPQRSTUVWXYZ";static LOWER_CASE_LATIN="abcdefghijklmnopqrstuvwxyz";static CASE_INSENSITIVE_LATIN=y.UPPER_CASE_LATIN+y.LOWER_CASE_LATIN;static stringIsInGivenAlphabet(t,e){let r=!1;if(t&&e)for(let n=0;n<t.length&&!r;n++)r=e.includes(t.charAt(n));return r}static stringToUint8Array(t){return t?(new TextEncoder).encode(t):null}static uint8ArrayToString(t){return t?(new TextDecoder).decode(t):null}static attemptJsonParse(t){let e=null;if(y.trimToNull(t))try{e=JSON.parse(t)}catch(t){e=null}return e}static canParseAsJson(t){return!!y.attemptJsonParse(t)}static allUnique(t){let e=!0;if(t){const r=new Set;for(let n=0;n<t.length&&e;n++){const s=t.charAt(n);e=!r.has(s),r.add(s)}}return e}static allPermutationsOfLength(t,e){const r=[];if(t>0&&e&&e.length>0){m.true(y.allUnique(e),"Alphabet must be unique");const n=1===t?[""]:y.allPermutationsOfLength(t-1,e);for(let t=0;t<e.length;t++)n.forEach((n=>r.push(e.charAt(t)+n)))}return r}static createType4Guid(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(t){const e=16*Math.random()|0;return("x"==t?e:3&e|8).toString(16)}))}static createRandomHexString(t=10){let e="";for(let r=0;r<t;r++)e+=Math.floor(16*Math.random()).toString(16);return e}static canonicalize(t){let e=t?t.toLowerCase():"";return e=e.replace(" ","-"),y.RFC_3986_RESERVED.forEach((t=>{e=e.replace(t,"")})),e}static formatBytes(t,e=2){if(0==t)return"0 Bytes";const r=e||2,n=Math.floor(Math.log(t)/Math.log(1024));return parseFloat((t/Math.pow(1024,n)).toFixed(r))+" "+["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"][n]}static safeString(t){let e=null;if(null!=t){e="string"==typeof t?t:String(t)}return e}static stringContainsOnlyNumbers(t){return/^[0-9]+$/.test(t)}static stringContainsOnlyAlphanumeric(t){return/^[0-9a-zA-Z]+$/.test(t)}static stringContainsOnlyHex(t){return/^[0-9a-fA-F]+$/.test(t)}static stringContainsOnly(t,e){const r=t||"",n=e||"";let s=!0;for(let t=0;t<r.length&&s;t++)s=n.indexOf(r.charAt(t))>=0;return s}static obscure(t,e=2,r=2){if(!t)return t;const n=t.length;let s=e,o=r;for(;n>0&&n<s+o+1;)s=Math.max(0,s-1),o=Math.max(0,o-1);const i=n-(s+o);let a="";a+=t.substring(0,s);for(let t=0;t<i;t++)a+="*";return a+=t.substring(n-o),a}static leadingZeros(t,e){const r="00000000000000000000000000000000000000000000000000";let n=!1,s=String(t);if(s.startsWith("-")&&(n=!0,s=s.substring(1)),e>50)throw new Error("Cannot format number that large");let o=(r+s).slice(-1*e);return n&&(o="-"+o),o}static trimToEmpty(t){return(t?y.safeString(t):"").trim()}static trimToNull(t){const e=y.trimToEmpty(t);return e.length>0?e:null}static trimAllStringPropertiesToNullInPlace(t){return y.trimAllStringPropertiesInPlace(t,!1)}static trimAllStringPropertiesToEmptyInPlace(t){return y.trimAllStringPropertiesInPlace(t,!0)}static trimAllStringPropertiesInPlace(t,e){return Object.keys(t).forEach((r=>{const n=t[r];null!=n&&"string"==typeof n&&(t[r]=e?y.trimToEmpty(t[r]):y.trimToNull(t[r]))})),t}static stripNonNumeric(t){let e=t;if(null!=t&&!y.stringContainsOnlyNumbers(t)){e="";for(let r=0;r<t.length;r++){const n=t.charAt(r);(y.stringContainsOnlyNumbers(n)||0===r&&"-"===n)&&(e+=n)}}return e}static csvSafe(t){let e=y.trimToEmpty(y.safeString(t));return e.split('"').join('\\"'),-1===e.indexOf(",")&&-1===e.indexOf('"')&&-1===e.indexOf("'")||(e='"'+e+'"'),e}static stripNonAscii(t){return[...t].reduce(((t,e)=>e.charCodeAt(0)>127?t:t+e))}}class E{loggerInstanceName;_loggerMeta;_ringBuffer;_formatter;_level;_handlerFunctionMap;_options;constructor(t="default",e){this.loggerInstanceName=t,this.options=e}addPreProcessor(t){return t&&(this._options.preProcessors=this._options.preProcessors||[],this._options.preProcessors.push(t)),Object.assign([],this._options.preProcessors)}get ringBuffer(){return this._ringBuffer}dumpConfigurationIntoLog(){this.error("ERROR enabled"),this.warn("WARN enabled"),this.info("INFO enabled"),this.verbose("VERBOSE enabled"),this.debug("DEBUG enabled"),this.silly("SILLY enabled")}dumpOptionsIntoLog(){if(this.info("Options: %j",this.options),this?.options?.preProcessors?.length){const t=this.options.preProcessors.map((t=>y.trimToNull(t.label())||"Unlabelled"));this.info("Preprocessors: %j",t)}}changeRingBufferSize(t){this._ringBuffer=null,t&&(this._ringBuffer=new g(t),this._options.ringBufferSize=t)}updateTracePrefix(t){this._options.trace=t}get options(){return Object.assign({},this._options)}set options(t){switch(this._options=Object.assign({},t),this._options.ringBufferSize&&(this._ringBuffer=new g(this._options.ringBufferSize)),this._options.formatType){case l.None:this._formatter=new d;break;case l.StructuredJson:this._formatter=new p;break;default:this._formatter=new f}this._level=this._options.initialLevel,this._handlerFunctionMap=h.handlerFunctionMap(this._options.outputFunction);const e=this._loggerMeta?this._loggerMeta.loggerInstanceId:null;this._loggerMeta={options:this._options,loggerInstanceName:this.loggerInstanceName,loggerInstanceId:e||y.createRandomHexString(8)}}get level(){return this._level}set level(t){if(!t)throw new Error("Cannot set level to null/undefined");this._level=t}consoleLogPassThru(t,...e){if(h.levelIsEnabled(t,this._level)){let r=this._options.trace||"";r+="["+t+"] ",e.unshift(r);(this._handlerFunctionMap.get(t)||h.defaultHandlerFunction)(...e)}}createLogMessage(t,e,r,...n){return{lvl:t,timestamp:Date.now(),messageSource:r,subsVars:n,params:e}}formatMessage(t){return t?this._formatter.formatMessage(t,this._loggerMeta):null}formatMessages(t){return(t||[]).map((t=>this.formatMessage(t))).filter((t=>!!t))}recordMessageBuilder(t){return this.recordMessage(t.toMessage())}recordMessage(t){let e=null;if(h.levelIsEnabled(t.lvl,this._level)){let r=Object.assign({},t);if(this._options.preProcessors?.length)for(let t=0;t<this._options.preProcessors.length;t++)r=this._options.preProcessors[t].process(r);if(e=this.formatMessage(r),e){(this._handlerFunctionMap.get(r.lvl)||h.defaultHandlerFunction)(e),this._ringBuffer&&this._ringBuffer.addToRingBuffer(r)}}return e}error(t,...e){const r=this.createLogMessage(i.error,{},t,...e);return this.recordMessage(r)}errorP(...t){this.consoleLogPassThru(i.error,...t)}warn(t,...e){const r=this.createLogMessage(i.warn,{},t,...e);return this.recordMessage(r)}warnP(...t){this.consoleLogPassThru(i.warn,...t)}info(t,...e){const r=this.createLogMessage(i.info,{},t,...e);return this.recordMessage(r)}infoP(...t){this.consoleLogPassThru(i.info,...t)}verbose(t,...e){const r=this.createLogMessage(i.verbose,{},t,...e);return this.recordMessage(r)}verboseP(...t){this.consoleLogPassThru(i.verbose,...t)}debug(t,...e){const r=this.createLogMessage(i.debug,{},t,...e);return this.recordMessage(r)}debugP(...t){this.consoleLogPassThru(i.debug,...t)}silly(t,...e){const r=this.createLogMessage(i.silly,{},t,...e);return this.recordMessage(r)}sillyP(...t){this.consoleLogPassThru(i.silly,...t)}logByLevel(t,e,...r){const n=this.createLogMessage(t,{},e,...r);this.recordMessage(n)}importMessages(t,e="",r=!0){const n=e||"";t&&t.length>0&&(this.silly("Received import data : %d msgs",t.length),t.forEach((t=>{if(t.messageSource){let e=n;if(r){e+=" ("+String(new Date).substring(15,24)+") : ",e+=t.messageSource}this.logByLevel(t.lvl,e)}})))}}class w{static LOGGER_INSTANCES=new Map;static DEFAULT_OPTIONS={initialLevel:i.info,formatType:l.ClassicSingleLine,trace:null,globalVars:{},outputFunction:a.Console,ringBufferSize:0,preProcessors:[]};static applyDefaultsToOptions(t){const e=t||{};return e.initialLevel=e.initialLevel??w.DEFAULT_OPTIONS.initialLevel,e.formatType=e.formatType??w.DEFAULT_OPTIONS.formatType,e.trace=e.trace??w.DEFAULT_OPTIONS.trace,e.globalVars=e.globalVars??w.DEFAULT_OPTIONS.globalVars,e.outputFunction=e.outputFunction??w.DEFAULT_OPTIONS.outputFunction,e.ringBufferSize=e.ringBufferSize??w.DEFAULT_OPTIONS.ringBufferSize,e}static changeDefaultOptions(t,e){if(!t||!t.initialLevel||!t.formatType)throw new Error("Default options must be non-null, and provide initial level and format type");w.DEFAULT_OPTIONS=Object.assign({},t),e&&Array.from(w.LOGGER_INSTANCES.values()).forEach((e=>e.options=t))}static getLogger(t="default",e){let r=w.LOGGER_INSTANCES.get(t);if(!r){const n=w.applyDefaultsToOptions(e);r=new E(t,n),w.LOGGER_INSTANCES.set(t,r)}return r}static recordMessageBuilder(t){return w.getLogger().recordMessageBuilder(t)}static recordMessage(t){return w.getLogger().recordMessage(t)}static formatMessages(t){return w.getLogger().formatMessages(t)}static updateTracePrefix(t){return w.getLogger().updateTracePrefix(t)}static changeRingBufferSize(t){return w.getLogger().changeRingBufferSize(t)}static getRingBuffer(){return w.getLogger().ringBuffer}static dumpConfigurationIntoLog(){return w.getLogger().dumpConfigurationIntoLog()}static dumpOptionsIntoLog(){return w.getLogger().dumpOptionsIntoLog()}static getLevel(){return w.getLogger().level}static setLevel(t){w.getLogger().level=t}static getOptions(){return w.getLogger().options}static getMessages(t=null,e=!1,r=!1){const n=w.getLogger().ringBuffer;return n?n.getMessages(t,e,r):null}static consoleLogPassThru(t,...e){return w.getLogger().consoleLogPassThru(t,...e)}static error(t,...e){return w.getLogger().error(t,...e)}static errorP(...t){return w.getLogger().errorP(...t)}static warn(t,...e){return w.getLogger().warn(t,...e)}static warnP(...t){return w.getLogger().warnP(...t)}static info(t,...e){return w.getLogger().info(t,...e)}static infoP(...t){return w.getLogger().infoP(...t)}static verbose(t,...e){return w.getLogger().verbose(t,...e)}static verboseP(...t){return w.getLogger().verboseP(...t)}static debug(t,...e){return w.getLogger().debug(t,...e)}static debugP(...t){return w.getLogger().debugP(...t)}static silly(t,...e){return w.getLogger().silly(t,...e)}static sillyP(...t){return w.getLogger().sillyP(...t)}static takeSnapshot(){const t=w.getLogger().ringBuffer;return t?t.takeSnapshot():null}static logByLevel(t,e,...r){return w.getLogger().logByLevel(t,e,...r)}static importMessages(t,e="",r=!0){return w.getLogger().importMessages(t,e,r)}static getLastLogMessage(){const t=w.getLogger().ringBuffer;return t?t.getLastLogMessage():null}}class b{static MAX_LEADING_ZEROS_FORMAT_LENGTH=1e3;static toFixedDecimalNumber(t,e){const r=b.safeNumber(t);return null==r?r:b.safeNumber(r.toFixed(e))}static leadingZeros(t,e){const r=String(t);if(r.length<e){let t="0000";if(e>b.MAX_LEADING_ZEROS_FORMAT_LENGTH)throw"Cannot format number that large (max length is "+b.MAX_LEADING_ZEROS_FORMAT_LENGTH+")";for(;t.length<e;)t+=t;return(t+r).slice(-1*e)}return r}static between(t,e,r){const n=b.safeNumber(t),s=b.safeNumber(e),o=b.safeNumber(r);return n>=s&&n<=o||n>=o&&n<=s}static safeNumber(t,e=null,r){let n;if(null!=t){const r=typeof t;"number"==r?n=t:"string"==r?n=0===t.trim().length?e:Number.parseFloat(t):(w.warn("Value is of type %s, returning default",r),n=e),isNaN(n)&&(w.debug("Parsed string to NaN - using NaN value from param"),n=e)}else n=void 0===r?null:r?e:t;return n}static numberCSVToList(t){let e=null;return t&&(e=t.split(",").map((t=>b.safeNumber(t.trim()))),e=e.filter((t=>"number"==typeof t&&!isNaN(t)))),e}static fitToWindow(t,e,r){let n=t;if(null===t||null===e||null===r||e<0||r<0||t<0)throw new Error("All values must be non-null and larger than 0");const s=Math.min(e,r),o=Math.max(e,r),i=o-s;if(o===s)n=o;else{for(;n<s;)n+=i;for(;n>o;)n-=i}return n}static groupNumbersIntoContiguousRanges(t,e=3){m.notNullOrUndefined(t);const r=Object.assign([],t);r.sort(((t,e)=>t-e));const n=[],s=[];let o=0;for(let t=1;t<r.length;t++)if(r[t]===r[t-1]+1);else{if(o===t-1)n.push(r[t-1]);else{if(t-o<e)for(let e=o;e<t;e++)n.push(r[e]);else s.push({min:r[o],max:r[t-1]})}o=t}return{singles:n,ranges:s}}static distributeItemsEvenly(t,e){m.notNullOrUndefined(t,"items"),m.notNullOrUndefined(e,"buckets"),m.true(t>0&&t===Math.floor(t),"Items integer larger than 0"),m.true(e>0&&e===Math.floor(e),"Buckets integer larger than 0");const r=e/t,n=[];for(let t=0;t<e;t++)n.push(0);let s=0,o=t;for(;o>0;)n[Math.floor(s)%e]++,o--,s+=r;return n}static createRange(t,e,r=1){const n=[];let s=t;for(;s<e;)n.push(s),s+=r;return n}}class L{static allTrue(t,e=!1){let r=null;return r=!!t&&(t.length>0?t.reduce(((t,e)=>t&&e),!0):e),r}static anyTrue(t,e=!1){let r=null;return r=!!t&&(t.length>0?t.reduce(((t,e)=>t||e),!1):e),r}static parseBool(t){return!0===t||null!=t&&"string"==typeof t&&"true"===t.toLowerCase()}static intToBool(t){return null!=t&&0!==b.safeNumber(t)}static boolToInt(t){return L.parseBool(t)?1:0}}class T{constructor(){}static translateToOriginVector(t){let e=null;return T.validPoints(t)&&(e={x:null,y:null},t.forEach((t=>{e.x=null===e.x||t.x<e.x?t.x:e.x,e.y=null===e.y||t.y<e.y?t.y:e.y})),e.x*=-1,e.y*=-1),e}static minimalContainingPlane(t){let e=null;return T.validPoints(t)&&(e={width:0,height:0},t.forEach((t=>{e.width=Math.max(e.width,t.x+1),e.height=Math.max(e.height,t.y+1)}))),e}static scaleVector(t,e){let r=null;return T.validPlane(t)&&T.validPlane(e)&&(r={x:e.width/t.width,y:e.height/t.height}),r}static samePoint(t,e){return!!t&&!!e&&t.x===e.x&&t.y===e.y}static atLeastOneDimensionShared(t,e){return!(!t||!e||t.x!==e.x&&t.y!==e.y)}static validPlane(t){return!!t&&!!t.height&&!!t.width}static validLine(t){return!!t&&T.validPoint(t.p1)&&T.validPoint(t.p2)&&!T.samePoint(t.p1,t.p2)}static validLines(t){return!!t&&L.allTrue(t.map((t=>T.validLine(t))))}static validPolyLine(t){return!!t&&t.pts?.length>1&&L.allTrue(t.pts.map((t=>T.validPoint(t))))}static polyLineToLines(t){let e=null;if(T.validPolyLine(t)){e=[];for(let r=1;r<t.pts.length;r++)e.push({p1:t.pts[r-1],p2:t.pts[r]})}return e}static lastPointOnPolyLine(t){return T.validPolyLine(t)?t.pts[t.pts.length-1]:null}static lineToPolyLine(t){return T.validLine(t)?{pts:[t.p1,t.p2]}:null}static linesToPolyLines(t){let e=null;if(T.validLines(t)){e=[];let r=T.lineToPolyLine(t[0]);for(let n=1;n<t.length;n++)T.samePoint(T.lastPointOnPolyLine(r),t[n].p1)?r.pts.push(t[n].p2):(e.push(r),r=T.lineToPolyLine(t[n]));e.push(r)}return e}static validPoint(t){return!!t&&null!=t.x&&null!=t.x&&null!==t.y&&void 0!==t.y}static validPoints(t){return!!t&&L.allTrue(t.map((t=>T.validPoint(t))),!1)}static planeContainsPoint(t,e){return T.validPlane(e)&&T.validPoint(t)&&t.x>=0&&t.x<e.width&&t.y>=0&&t.y<e.height}static planeContainsPoints(t,e){return t&&t.map((t=>T.planeContainsPoint(t,e))).reduce(((t,e)=>t&&e),!0)}static linesToPoints(t){let e=null;return T.validLines(t)&&(e=t.map((t=>[t.p1,t.p2])).flat()),e}static pointsToLines(t){let e=null;if(T.validPoints(t)){if(t.length%2!=0)throw new Error("Cannot convert non-even array of points into lines");e=[];for(let r=0;r<t.length;r+=2)e.push({p1:t[r],p2:t[r+1]})}return e}static rotateRightAboutOrigin90Degrees(t,e=1){let r=null,n={x:0,y:0};if(T.validPoints(t)){r=Object.assign([],t),n=T.translateToOriginVector(r),r=T.translate(r,n);let e=T.minimalContainingPlane(r);r=T.xToY(r),e={width:e.height,height:e.width},n={x:-1*n.y,y:-1*n.x},r=T.mirrorPointsOnPlane(r,e,!0,!1),r=T.translate(r,n)}const s=e>4?e%4:e;return s>1&&(r=T.rotateRightAboutOrigin90Degrees(r,s-1)),r}static planeContainsLines(t,e){return t&&T.planeContainsPoints(t.map((t=>[t.p1,t.p2])).flat(),e)}static planeContainsPolyLine(t,e){return T.planeContainsLines(T.polyLineToLines(t),e)}static planeContainsLine(t,e){return T.validPlane(e)&&T.validLine(t)&&T.planeContainsPoint(t.p1,e)&&T.planeContainsPoint(t.p2,e)}static xToY(t){let e=null;return T.validPoints(t)&&(e=t.map((t=>({x:t.y,y:t.x})))),e}static translate(t,e){let r=null;return T.validPoints(t)&&T.validPoint(e)&&(r=t.map((t=>({x:t.x+e.x,y:t.y+e.y})))),r}static mirrorPointsOnPlane(t,e,r,n){let s=null;return T.validPoints(t)&&T.validPlane(e)&&(s=r||n?t.map((t=>({x:r?e.width-1-t.x:t.x,y:n?e.height-1-t.y:t.y}))):Object.assign([],t)),s}static transformPointsToNewPlane(t,e,r){let n=null;if(T.validPoints(t)&&T.validPlane(e)&&T.validPlane(r)){const s=T.scaleVector(e,r);n=t.map((t=>({x:t.x*s.x,y:t.y*s.y}))),n=T.mirrorPointsOnPlane(n,r,r.rightToLeft!==e.rightToLeft,r.topToBottom!==e.topToBottom)}return n}static transformPointToNewPlane(t,e,r){const n=T.transformPointsToNewPlane([t],e,r);return 1===n.length?n[0]:null}static transformLines(t,e,r){return null}static fitCurve(t,e){if(t.sort(((t,e)=>t.x-e.x)),e<=t[0].x)return t[0].y;if(e>=t[t.length-1].x)return t[t.length-1].y;{let r=0;for(;t[r+1].x<e;)r++;const n=t[r+1].x-t[r].x,s=t[r+1].y-t[r].y,o=(e-t[r].x)/n*s;return t[r].y+o}}}class S{constructor(){}static buildInformation(){return{version:"226",hash:"3756dbef763df895de882697478a5d8237fb4544",branch:"alpha-2023-09-22-1",tag:"alpha-2023-09-22-1",timeBuiltISO:"2023-09-22T17:32:41-0700",notes:"No notes"}}}class _{entries=[];update(t,e=1){if(t){const r=this.entries.find((e=>e.item===t));r?r.count+=e:this.entries.push({item:t,count:e})}}sort(){this.entries.sort(((t,e)=>{let r=e.count-t.count;return 0===r&&(r=String(e.item).localeCompare(String(t.item))),r}))}sortKeys(){this.entries.sort(((t,e)=>String(e.item).localeCompare(String(t.item))))}reverse(){this.entries.reverse()}getEntries(){return this.entries}getTotalCount(){let t=0;return this.entries.forEach((e=>t+=e.count)),t}countForValue(t){const e=this.entries.find((e=>e.item===t));return e?e.count:0}percentForValue(t){const e=this.getTotalCount();return 0===e?0:this.countForValue(t)/e}}!function(t){t[t.RETURN_NULL=0]="RETURN_NULL",t[t.THROW_EXCEPTION=1]="THROW_EXCEPTION",t[t.ADD_FLAG=2]="ADD_FLAG"}(c||(c={}));class O{static formatMsDuration(t,e=!1){const r=Math.floor(t%1e3),n=Math.floor(t/1e3)%60,s=Math.floor(t/6e4)%60,o=Math.floor(t/36e5)%24,i=Math.floor(t/864e5),a=b.leadingZeros;let l=a(o,2)+"h"+a(s,2)+"m";return l+=e?a(n,2)+"."+a(r,3)+"s":a(n,2)+"s",i>0&&(l=i+"d"+l),l}static colonFormatMsDuration(t,e=!1){const r=t%1e3,n=Math.floor(t/1e3)%60,s=Math.floor(t/6e4)%60,o=Math.floor(t/36e5),i=b.leadingZeros;let a=i(o,2)+":"+i(s,2)+":";return a+=e?i(n,2)+"."+i(r,3):i(n,2),a}static daysBetween(t,e){return r.fromJSDate(t).diff(r.fromJSDate(e)).days}static createSteps(t,e,n,s,o){let i=r.fromMillis(t).setZone(n);const a=r.fromMillis(e),l=[];for(;i<a;)l.push(i.toFormat(s)),i=i.plus(o);return l}}class M{_encryptionKeyPromise;_decryptKeysPromise;_jtiGenerator;_decryptOnlyKeyUseLogLevel;_parseFailureLogLevel;static EXPIRED_FLAG_NAME="__jwtServiceExpiredFlag";constructor(t,e,r=y.createType4Guid,n=i.info,s=i.debug){this._encryptionKeyPromise=t,this._decryptKeysPromise=e,this._jtiGenerator=r,this._decryptOnlyKeyUseLogLevel=n,this._parseFailureLogLevel=s,m.notNullOrUndefined(t,"encryptionKeyPromise")}get encryptionKeyPromise(){return this._encryptionKeyPromise}get decryptKeysPromise(){return this._decryptKeysPromise}get jtiGenerator(){return this._jtiGenerator}get decryptOnlyKeyUseLogLevel(){return this._decryptOnlyKeyUseLogLevel}get parseFailureLogLevel(){return this._parseFailureLogLevel}static hasExpiredFlag(t){return t&&!0===t[M.EXPIRED_FLAG_NAME]}static async invalidSafeDecode(t,r,n=i.silly){let s=null;try{s=e.verify(t,r,{ignoreExpiration:!0})}catch(t){w.logByLevel(n,"Caught %s - ignoring",t)}return s}static async secondsRemainingUntilExpiration(t){let e=null;if(y.trimToNull(t)){const r=await M.decodeTokenNoVerify(t),n=Math.floor(Date.now()/1e3);if(r.exp){const t=r.exp>100*n?Math.floor(r.exp/1e3):r.exp;e=Math.max(0,t-n)}}return e}static async msRemainingUntilExpiration(t){const e=await M.secondsRemainingUntilExpiration(t);let r=null;return null!=e&&(r=1e3*e),r}async decodeToken(t,e=c.RETURN_NULL){const r=await this.encryptionKeyArray();let n=Object.assign([],r);this.decryptKeysPromise&&(n=n.concat(await this.decryptKeysPromise));const s=[];let o=null;for(let e=0;e<n.length&&!o;e++){s.push(y.obscure(n[e],1,1));const a=e===n.length-1&&this.parseFailureLogLevel?this.parseFailureLogLevel:i.silly;o=await M.invalidSafeDecode(t,n[e],a),o&&e>=r.length&&w.logByLevel(this.decryptOnlyKeyUseLogLevel,"Used old key to decode token : %s",y.obscure(n[e],2))}if(o){const t=Math.floor(Date.now()/1e3),r=o?.exp&&o.exp>100*t?Math.floor(o.exp/1e3):o?.exp,n=o?.nbf&&o.nbf>100*t?Math.floor(o.nbf/1e3):o?.nbf;if(r&&t>=r||n&&t<=n){const n=t-r;switch(w.debug("JWT token expired or before NBF : on %d, %s ago",o.exp,O.formatMsDuration(1e3*n)),e){case c.THROW_EXCEPTION:throw new Error("JWT Token was expired");case c.ADD_FLAG:o[M.EXPIRED_FLAG_NAME]=!0;break;default:o=null}}}else w.warn("Unable to parse a payload (Tried %j) from : %s",s,t);return o}async encryptionKeyArray(){const t=await this.encryptionKeyPromise,e=Array.isArray(t)?t:[t];if(e.length<1)throw new Error("Cannot create JwtRatchet with empty encryption key set");return e}async selectRandomEncryptionKey(){const t=await this.encryptionKeyArray();return t[Math.floor(Math.random()*t.length)]}async createTokenString(t,r,n){const s=y.trimToNull(n)?y.trimToNull(n):await this.selectRandomEncryptionKey();if(m.notNullOrUndefined(t,"payload"),t.jti=this.jtiGenerator?this.jtiGenerator():null,r){const e=Math.floor(Date.now()/1e3)+r;w.debug("Forcing expiration to %d",e),t.exp=e}return e.sign(t,s)}async refreshJWTString(t,e,r){const n=e?c.ADD_FLAG:c.THROW_EXCEPTION,s=await this.decodeToken(t,n),o=s.exp&&s.iat?s.exp-s.iat:null,i=r||o;M.removeJwtFields(s),M.removeExpiredFlag(s);return await this.createTokenString(s,i)}static decodeTokenNoVerify(t){return e.decode(t)}static removeJwtFields(t){t&&["iss","sub","aud","exp","nbf","iat","jti"].forEach((e=>{delete t[e]}))}static removeExpiredFlag(t){t&&delete t[M.EXPIRED_FLAG_NAME]}}class x{static safeStringifyErr(t,e=!0){let r="ERR WAS NULL";if(t)if(t.message)r=t.message;else try{r=JSON.stringify(t)}catch(e){w.error("Failed to json stringify"),r=String(t)}return e&&w.error("%s",r,t),r}static asErr(t){let e=null;return t&&(e=t instanceof Error?t:new Error("Force-Cast to error : "+String(t))),e}static fErr(e,...r){const n=t.format(e,...r);return new Error(n)}static throwFormattedErr(t,...e){throw x.fErr(t,...e)}}class N{static expandNestedKeysToObjects(t,e="."){if(!e||1!==e.length)throw new Error("Invalid separator (must be single character)");const r={};return Object.keys(t).forEach((n=>{const s=n.split(e);let o=r;for(;s.length>1;)o[s[0]]=o[s[0]]||{},o=o[s[0]],s.splice(0,1);o[s[0]]=t[n]})),r}static mapByUniqueProperty(t,e){if(!t||!e)throw new Error("Neither input nor propName can be null");const r=new Map;return t.forEach((t=>{const n=t?t[e]:null;if(null==n)throw new Error("No value for "+e+" found in "+JSON.stringify(t));if(r.has(n))throw new Error("Multiple values found for "+n);r.set(n,t)})),r}static groupByProperty(t,e){if(!t||!e)throw new Error("Neither input nor propName can be null");const r=new Map;return t.forEach((t=>{const n=t?t[e]:null;if(null==n)throw x.fErr("No value for %s found in %j",e,t);r.has(n)||r.set(n,[]),r.get(n).push(t)})),r}static findValue(t,e){return e&&0!=e.length?t?N.findValue(t[e[0]],e.slice(1)):null:t}static findValueDotPath(t,e){return e&&0!=e.length?t?N.findValue(t,e.split(".")):null:t}static simpleDeepCompare(t,e){return null==t&&null==e||null!=t&&null!=e&&JSON.stringify(t)==JSON.stringify(e)}static toKeyValueList(t){const e=[];for(const r of Object.keys(t))e.push({key:r,value:t[r]});return e}static fromKeyValueList(t){const e={};return t.forEach((t=>e[t.key]=t.value)),e}static cleanup(t,e=!1,r=!0,n=!0,s=!0){if(null==t||"object"!=typeof t)return t;const o=JSON.parse(JSON.stringify(t));return Object.keys(o).forEach((t=>{if(o[t]&&"object"==typeof o[t])if(Array.isArray(o[t]))for(let e=0;e<o[t].length;e++)o[t][e]=N.cleanup(o[t][e]);else o[t]=N.cleanup(o[t]);else void 0===o[t]&&n||null===o[t]&&r||""===o[t]&&s||0===o[t]&&e?delete o[t]:o[t]=o[t]})),o}static extractValueFromMapIgnoreCase(t,e){let r=null;if(t&&e){const n=e.toLowerCase();Object.keys(t).forEach((s=>{if(s.toLowerCase()===n){const n=t[s];r&&w.warn("Multiple entries found for %s (replacing %s with %s",e,r,n),r=n}}))}return r}static safeCallFunction(t,e){let r=!1;if(t&&t[e]&&"function"==typeof t[e])try{t[e](),r=!0}catch(r){w.warn("Error calling %s on %s : %s",e,t,r,r)}return r}static caseInsensitiveAccess(t,e){let r=null;if(t&&e&&(r=t[e],!r)){const n=Object.keys(t).find((t=>t.toLowerCase()===e.toLowerCase()));n&&(r=t[n])}return r}}class P{static wrapElementsInArray(t){return t.map((t=>[t]))}static compareTwoArrays(t,e,r){t.sort(r),e.sort(r);let n=0,s=0;const o={matching:[],setOneOnly:[],setTwoOnly:[]};for(;n<t.length&&s<e.length;){const i=t[n],a=e[s],l=r(i,a);0===l?(o.matching.push(i),n++,s++):l<0?(o.setOneOnly.push(i),n++):(o.setTwoOnly.push(a),s++)}return n<t.length-1&&(o.setOneOnly=o.setOneOnly.concat(t.slice(n))),s<e.length-1&&(o.setTwoOnly=o.setTwoOnly.concat(e.slice(s))),o}static extractSubarrayFromSortedByNumberField(t,e,r,n){if(!t||0===t.length)return t;let s=null===r?0:P.findSplit(t,e,r)||0;const o=null===n?t.length:P.findSplit(t,e,n),i=N.findValueDotPath(t[s],e);return s===t.length-1&&i<r?[]:(s<t.length&&s<o&&i<r&&s++,t.slice(s,o+1))}static findSplit(t,e,r){if(m.notNullOrUndefined(t),m.notNullOrUndefined(e),m.notNullOrUndefined(r),0===t.length||N.findValueDotPath(t[0],e)>r)return null;let n=0,s=t.length,o=null;for(;null===o;){const i=Math.floor((n+s)/2),a=N.findValueDotPath(t[i],e);n===s||n===s-1?o=n:a<=r?n=i:s=i}return o}}class v{static UTF8_ENCODER=new TextEncoder;static UTF8_DECODER=new TextDecoder("utf-8");static safeObjectToBase64JSON(t){return t?v.generateBase64VersionOfString(JSON.stringify(t)):null}static safeBase64JSONParse(t){let e={};try{t&&(e=JSON.parse(v.base64StringToString(t)))}catch(r){w.warn("Error parsing b64/json : %s as json, got %s",t,r,r),e={}}return e}static generateBase64VersionOfBlob(t){return new Promise((function(e,r){if(t&&0!=t.size){const r=new FileReader;r.onloadend=function(){e(r.result.toString())},r.readAsDataURL(t)}else r("Wont convert null or non-blob or empty blob")}))}static generateBase64VersionOfString(t){return v.generateBase64VersionOfUint8Array(v.UTF8_ENCODER.encode(t))}static generateBase64VersionOfUint8Array(t){return btoa(v.UTF8_DECODER.decode(t))}static base64StringToUint8Array(t){return new Uint8Array(atob(t).split("").map((function(t){return t.charCodeAt(0)})))}static base64StringToString(t,e="utf8"){return new TextDecoder(e).decode(v.base64StringToUint8Array(t))}}class A{sources;mostRecent;constructor(t,e=!0){if(!t||0==t.length)throw Error("Cannot create composite provider with null/empty sources");this.sources=t,this.mostRecent=e}lastSuccess(){let t=null;return this.sources.forEach((e=>{const r=e.lastSuccess();null!=r&&(t=null==t||r>t&&this.mostRecent||r<t&&!this.mostRecent?r:t)})),t}}class I{static COMMON_US_DATE_FORMAT="MM/dd/yyyy";static DEFAULT_DATE_FORMAT="yyyy-MM-dd";static FULL_DATE_FORMAT="yyyy-MM-dd_HH_mm_ss";static PACIFIC_TIME_ZONE="America/Los_Angeles";static UTC_TIME_ZONE="etc/UTC";static formatFullDate(t){return r.fromJSDate(t).toFormat(I.FULL_DATE_FORMAT)}static formatDefaultDateOnly(t){return r.fromJSDate(t).toFormat(I.DEFAULT_DATE_FORMAT)}static parseDefaultDate(t){return r.fromFormat(t,I.DEFAULT_DATE_FORMAT).toJSDate()}static parseCommonUsDate(t){let e=null;if(t){let n=I.COMMON_US_DATE_FORMAT;2===t.indexOf("-")&&(n=n.split("/").join("-")),e=r.fromFormat(t,n).toJSDate()}return e}}class R{static listEnumKeys(t){return n(t).getValues()}static keyToEnum(t,e,r=!1){const s=n(t);let o=null;if(e&&(o=s.asValueOrDefault(e,null),!o&&!r)){const r=R.listEnumKeys(t).find((t=>t.toUpperCase()===e.toUpperCase()));r&&(o=s.asValueOrDefault(r,null))}return o}static parseCsvToEnumArray(t,e){return y.trimToEmpty(e).split(",").map((t=>t.trim())).map((e=>R.keyToEnum(t,e))).filter((t=>!!t))}}class C{static fetchDirName(t){if(!t)throw new Error("Need to provide root (should be import.meta.url)");return s.fileURLToPath(new URL(".",t))}static fetchFileName(t){if(!t)throw new Error("Need to provide root (should be import.meta.url)");return s.fileURLToPath(t)}}class F{_config;_cacheObject;_lastUpdatedEpochMS;_timeRemainingMS;constructor(t){this._config=Object.assign({},this.defaultConfig(),t||{}),this._config.overrideTimeRemainingMS&&this._config.timeToLiveMS&&x.throwFormattedErr("Cannot define both time to live and overrideTimeRemainingMS"),this._config.overrideTimeRemainingMS||this._config.timeToLiveMS||x.throwFormattedErr("Must define exactly one of timeToLiveMS or overrideTimeRemainingMS"),this._config.initialValue&&this.update(this._config.initialValue),this._timeRemainingMS=this._config.overrideTimeRemainingMS||this.defaultTimeRemainingMS}defaultConfig(){return{generator:null,initialValue:null,logLevel:i.debug,overrideTimeRemainingMS:null,timeToLiveMS:6e4}}async defaultTimeRemainingMS(t){let e=0;if(t){const r=(new Date).getTime()-t;e=Math.max(0,this._config.timeToLiveMS-r)}return e}update(t,e=!1){this._cacheObject=t,e||(this._lastUpdatedEpochMS=(new Date).getTime()),w.logByLevel(this._config.logLevel,"Updated cache value to %j",t)}async fetchCacheObjectTimeRemainingMS(){return this._timeRemainingMS(this._lastUpdatedEpochMS)}async fetch(){if(await this._timeRemainingMS(this._lastUpdatedEpochMS)||(this._cacheObject=null,this._lastUpdatedEpochMS=null),!this._cacheObject&&this._config.generator){const t=await this._config.generator();w.logByLevel(this._config.logLevel,"Auto call to generator returned %j",t),this.update(t)}return this._cacheObject}}class D{timeToLiveMS;generator;initialValue;logLevel;overrideTimeRemainingMS}class U{constructor(){}static distanceBetweenLocations(t,e,r,n,s="M"){const o=s?s.toUpperCase():"";if(-1===["M","K","N","F","E"].indexOf(o))throw new Error("Invalid unit");if(t==r&&e==n)return 0;{const s=Math.PI*t/180,i=Math.PI*r/180,a=e-n,l=Math.PI*a/180;let c=Math.sin(s)*Math.sin(i)+Math.cos(s)*Math.cos(i)*Math.cos(l);return c>1&&(c=1),c=Math.acos(c),c=180*c/Math.PI,c=60*c*1.1515,"F"===o&&(c*=5280),"K"===o&&(c*=1.609344),"E"===o&&(c*=1609.344),"N"===o&&(c*=.8684),c}}static distanceBetweenRatchetGeoLocations(t,e,r="M"){return U.distanceBetweenLocations(t.lat,t.lng,e.lat,e.lng,r)}static degreeOfLatLngInMiles(t=0){const e=t*Math.PI/180,r=Math.cos(e);return b.safeNumber((69.172*r).toFixed(4))}static milesInDegLatLng(t,e=0){m.notNullOrUndefined(t),m.true(t>=0);return t/U.degreeOfLatLngInMiles(e)}static centerOfBounds(t){return m.notNullOrUndefined(t),{lat:(t.extent.lat+t.origin.lat)/2,lng:(t.extent.lng+t.origin.lng)/2}}static calculateSplits(t,e,r){m.notNullOrUndefined(t),m.notNullOrUndefined(e),m.notNullOrUndefined(r),t.sort(((t,e)=>t.origin[r]-e.origin[r]));const n=t.map((t=>U.centerOfBounds(t))).map((t=>t[r])),s=[];for(let t=1;t<n.length;t++){const r=n[t]-n[t-1];s.length<e?(s.push({idx:t,size:r}),s.sort(((t,e)=>t.size-e.size))):r>s[0].size?(s[0]={idx:t,size:r},s.sort(((t,e)=>t.size-e.size))):w.silly("Skipping, size : %d, %j",r,s)}return w.info("Splits at : %j",s),s.sort(((t,e)=>t.idx-e.idx)),s}static clusterGeoBounds(t,e=2,r=5){let n=null;if(e*r<2&&x.throwFormattedErr("Cannot set slices to less than 2 : %d x %d",e,r),t){n=[];const s=Object.assign([],t);s.sort(((t,e)=>t.origin.lng-e.origin.lng));const o=U.calculateSplits(t,r-1,"lng");o.sort(((t,e)=>t.idx-e.idx));for(let t=0;t<=o.length;t++){const r=0===t?0:o[t-1].idx,i=t===o.length?s.length:o[t].idx,a=s.slice(r,i);a.sort(((t,e)=>t.origin.lat-e.origin.lat));const l=U.calculateSplits(a,e-1,"lat");for(let t=0;t<=l.length;t++){const e=0==t?0:l[t-1].idx,r=t===l.length?a.length:l[t].idx,s=a.slice(e,r);n.push(U.combineBounds(s))}}w.info("New bounds : %j",n)}return n}static canonicalizeBounds(t,e=!1){m.notNullOrUndefined(t,"RatchetLocationBounds");const r=Math.min(t.extent.lat,t.origin.lat),n=Math.max(t.extent.lat,t.origin.lat),s=Math.min(t.extent.lng,t.origin.lng),o=Math.max(t.extent.lng,t.origin.lng);if(r<0&&n>0||r>0&&n<0||(r<0&&n>0||r>0&&n<0)){if(e)return t;throw new Error("Cannot canonicalize, bounds crosses over boundary")}return{origin:{lat:r,lng:s},extent:{lat:n,lng:o}}}static combineBounds(t){let e=null;return t&&t.length>0&&(e={origin:{lat:t.map((t=>t.origin.lat)).reduce(((t,e)=>Math.min(t,e))),lng:t.map((t=>t.origin.lng)).reduce(((t,e)=>Math.min(t,e)))},extent:{lat:t.map((t=>t.extent.lat)).reduce(((t,e)=>Math.max(t,e))),lng:t.map((t=>t.extent.lng)).reduce(((t,e)=>Math.max(t,e)))}}),e}static roundLocation(t,e){return{lat:b.safeNumber(t.lat.toFixed(e)),lng:b.safeNumber(t.lng.toFixed(e))}}static locationToBounds(t,e){const r=U.milesInDegLatLng(e,t.lat);return{origin:{lat:t.lat-r,lng:t.lng-r},extent:{lat:t.lat+r,lng:t.lng+r}}}static sameLocation(t,e){return!!t&&!!e&&t.lat===e.lat&&t.lng===e.lng}static pointInBounds(t,e){return!!t&&!!e&&b.between(t.lat,e.origin.lat,e.extent.lat)&&b.between(t.lng,e.origin.lng,e.extent.lng)}static pointInAnyBound(t,e,r=10){let n=!1;if(e.length>r){const r=U.buildRatchetLocationBoundsMap(e);n=U.pointInRatchetLocationBoundsMap(t,r)}else for(let r=0;r<e.length&&!n;r++)n=U.pointInBounds(t,e[r]);return n}static pointInRatchetLocationBoundsMap(t,e){let r=!1;const n=U.findRatchetLocationBoundsMapEntry(t,e);if(n){const e=n.bounds;for(let n=0;n<e.length&&!r;n++)r=U.pointInBounds(t,e[n])}return r}static findRatchetLocationBoundsMapEntry(t,e){let r=null;if(t.lat>=e.latOffset&&t.lat<=e.maxLat&&t.lng>=e.lngOffset&&t.lng<=e.maxLng){const n=Math.trunc(t.lat)-e.latOffset,s=Math.trunc(t.lng)-e.lngOffset;r=e.mapping[n][s]}return r}static buildRatchetLocationBoundsMap(t){const e=t.map((t=>t.origin.lat)).reduce(((t,e)=>Math.min(t,e))),r=t.map((t=>t.origin.lng)).reduce(((t,e)=>Math.min(t,e))),n=t.map((t=>t.extent.lat)).reduce(((t,e)=>Math.max(t,e))),s=t.map((t=>t.extent.lng)).reduce(((t,e)=>Math.max(t,e))),o=Math.trunc(e)-1,i=Math.trunc(r)-1,a=Math.trunc(n)-o+1,l=Math.trunc(s)-i+1,c=[];for(let t=0;t<a;t++){const e=[];for(let r=0;r<l;r++)e.push({lat:o+t,lng:i+r,bounds:[]});c.push(e)}return t.forEach((t=>{for(let e=Math.trunc(t.origin.lat);e<=Math.trunc(t.extent.lat);e++){const r=c[e-o];for(let e=Math.trunc(t.origin.lng);e<=Math.trunc(t.extent.lng);e++){r[e-i].bounds.push(t)}}})),{latOffset:o,lngOffset:i,maxLat:o+a,maxLng:i+l,mapping:c}}}class B{constructor(){}static fetchGlobalRecord(t){let e=null;if(process?.env?(w.silly("Using process.env as global"),e=process.env):global?.process?.env?(w.silly("Using global.process.env as global"),e=global.process.env):global&&(w.silly("Using process.env as global"),e=global),!e){if(!t)throw x.fErr("Could not find process.env OR global in scope");w.silly("Returning null as global"),e=null}return e}static fetchGlobalVar(t){m.notNullOrUndefined(t,"envVar");return B.fetchGlobalRecord()[t]}static setGlobalVar(t,e){m.notNullOrUndefined(t,"envVar"),m.notNullOrUndefined(e,"value");B.fetchGlobalRecord()[t]=e}}class j{key;value}class k{static op(...t){}}class V{title;timeoutMS;__timeoutTokenFlagField=!0;constructor(t,e){this.title=t,this.timeoutMS=e}writeToLog(t=i.warn){w.logByLevel(t,"Timed out after %d ms waiting for results of %s",this.timeoutMS,this.title)}static isTimeoutToken(t){return!!t&&!!t.__timeoutTokenFlagField}}class G{label;starts=new Map;ends=new Map;createTime=Date.now();constructor(t=y.createRandomHexString(4)){this.label=t}start(t){m.notNullUndefinedOrOnlyWhitespaceString(t,"name");const e=Date.now();return this.starts.set(y.trimToNull(t),e),e}stop(t){m.notNullUndefinedOrOnlyWhitespaceString(t,"name");const e=Date.now();return this.ends.set(y.trimToNull(t),e),e}reset(t){m.notNullUndefinedOrOnlyWhitespaceString(t,"name"),this.starts.delete(y.trimToNull(t)),this.ends.delete(y.trimToNull(t))}hasTimer(t){return m.notNullUndefinedOrOnlyWhitespaceString(t,"name"),this.starts.has(t)}log(t,e,r=i.info){w.logByLevel(r,this.dump(t,e))}logExpected(t,e,r,n=i.info){w.logByLevel(n,this.dumpExpected(t,e,r))}timerNames(){return Array.from(this.starts.keys())}dumpAll(t=", ",e){const r=this.timerNames().map((t=>this.dump(t,e)));let n="Overall: "+this.dump(null,e);return r.length>0&&(n+=t,n+=r.join(t)),n}dump(t,e){let r=this.label+" ";const n=y.trimToNull(t);if(n&&!this.hasTimer(n))r+="No such timer : "+n;else{const s=t?this.starts.get(n):this.createTime,o=t?this.ends.get(n):Date.now();r+=(n||"Default")+" ",s&&o?r+="completed in "+O.formatMsDuration(o-s,!e):s&&(r+="running for "+O.formatMsDuration(Date.now()-s,!e))}return r}dumpExpected(t,e,r){let n=this.label+" ";const s=y.trimToNull(e);if(s&&!this.hasTimer(s))n+="No such timer : "+s;else if(!t||t<=0)n+="Cannot generate output for 0 percent complete";else if(t>1)n+="Cannot generate output for percent > 1";else{n+=(s||"Default")+" ";const o=e?this.starts.get(s):this.createTime,i=e?this.ends.get(s):Date.now();if(o&&i)n+="completed in "+O.formatMsDuration(i-o,!r);else if(o){const e=Date.now()-o,s=e/t-e;n+="running for "+O.formatMsDuration(e,!r)+" approx "+O.formatMsDuration(s,!r)+" remaining"}}return n}expectedRemainingMS(t,e){let r=null;if(!t||t<=0);else if(t>1);else{const n=y.trimToNull(e),s=e?this.starts.get(n):this.createTime,o=e?this.ends.get(n):Date.now();if(s&&o)r=o-s;else if(s){const e=Date.now()-s;r=e/t-e}}return r}elapsedMS(t){let e=null;const r=y.trimToNull(t);if(r&&!this.hasTimer(r))e=null;else{const n=t?this.starts.get(r):this.createTime,s=t?this.ends.get(r):Date.now();n&&s?e=s-n:n&&(e=Date.now()-n)}return e}}class z{static resolveOnEvent(t,e,r=[],n=null){return t&&e&&0!==e.length&&t.on||Promise.reject("Cannot continue - missing source object or name, or the object is not an event source"),new Promise(((s,o)=>{e.forEach((e=>{t.on(e,(()=>{s(n)}))})),r&&r.forEach((e=>{t.on(e,(t=>{o(t)}))}))}))}static timeout(t,e,r){return Promise.race([t,z.createTimeoutPromise(e,r)])}static createTimeoutPromise(t,e){return new Promise(((r,n)=>{const s=setTimeout((()=>{clearTimeout(s);const n=new V(t,e);r(n)}),e)}))}static async wait(t){await z.createTimeoutPromise("Wait "+t,t),w.silly("Finished wait of %d ms",t)}static dumpResult(t,e=!1){w.info("Success, result was : \n\n%s\n\n",JSON.stringify(t)),process.exit(0)}static dumpError(t,e=!1){w.warn("Failure, err was : \n\n%s\n\n -- \n\n%s\n\n",JSON.stringify(t),String(t)),console.trace(),process.exit(1)}static logErrorAndReturnNull(t,e=!1){return w.warn("Failure, err was : \n\n%s\n\n -- \n\n%s\n\n",JSON.stringify(t),String(t)),null}static runPromiseAndDump(t){t.then(z.dumpResult).catch(z.dumpError)}static async waitFor(t,e,r,n,s="waitFor",o=0){if(null==e||r<50||n<1||o<0||"function"!=typeof t)return w.warn("%s: Invalid configuration for waitFor - exiting immediately",s),w.warn("ExpectedValue : %s ; interval: %d ; maxCycles: %d ; test : %s",e,r,n,typeof t),!1;let i=null;try{i=t(o)}catch(t){return w.warn("%s: Caught error while waiting, giving up",s),!1}return null===i?(w.debug("%s:CurVal was null - aborting",s),!1):i==e?(w.debug("%s:Found expected value",s),!0):o>n?(w.debug("%s:Exceeded max cycles, giving up",s),!1):(w.debug("%s : value not reached yet, waiting (count = %d of %d)",s,o,n),await z.wait(r),z.waitFor(t,e,r,n,s,o+1))}static async runBoundedParallel(t,e,r,n=1,s=i.debug){const o=new G;let a=[],l=e;w.logByLevel(s,"Processing %d total elements %d at a time",e.length,n);const c=r||this;let u=0;const g=l.length;for(;l.length>0;){const e=l.slice(0,Math.min(l.length,n));l=l.slice(e.length);const r=e.map((e=>t.apply(c,e))),i=await Promise.all(r);u+=r.length,a=a.concat(i);const h=u/g;w.logByLevel(s,"%d elements remain : %s",l.length,o.dumpExpected(h))}return o.log(),a}static async runBoundedParallelSingleParam(t,e,r,n=1,s=i.debug){const o=P.wrapElementsInArray(e);return z.runBoundedParallel(t,o,r,n,s)}static async asyncForEachSerial(t,e){for(let r=0;r<t.length;r++)await e(t[r],r,t)}static async asyncForEachParallel(t,e){const r=[];for(let n=0;n<t.length;n++)r.push(e(t[n],n,t));await Promise.all(r)}constructor(){}}class K{static PACIFIC=new K("America/Los_Angeles");timezone;constructor(t){if(!t)throw"Timezone cannot be null";this.timezone=t}currentHour(){return r.local().setZone(this.timezone).hour}toEpochSeconds(t){return Math.round(t.toMillis()/1e3)}startOfTodayEpochSeconds(){return this.toEpochSeconds(r.local().setZone(this.timezone).set({hour:0,minute:0,second:0,millisecond:0}))}startOfMatchingDayEpochSeconds(t){return this.toEpochSeconds(r.fromMillis(t).set({hour:0,minute:0,second:0,millisecond:0}))}startOfMatchingDayEpochMS(t){return 1e3*this.startOfMatchingDayEpochSeconds(t)}startOfCurrentHourEpochSeconds(){return this.toEpochSeconds(r.local().setZone(this.timezone).set({minute:0,second:0,millisecond:0}))}startOfCurrentMinuteEpochSeconds(){return this.toEpochSeconds(r.local().setZone(this.timezone).set({second:0,millisecond:0}))}startOfCurrentSecondEpochSeconds(){return this.toEpochSeconds(r.local().setZone(this.timezone).set({millisecond:0}))}startOfTodayEpochMS(){return r.local().setZone(this.timezone).set({hour:0,minute:0,second:0,millisecond:0}).toMillis()}dailySlotCount(t){return Math.ceil(864e5/t)}currentTimeSlotIdx(t){if(t<1)throw new Error("Cannot process with slot less than one ms wide");const e=this.startOfTodayEpochMS(),r=(new Date).getTime()-e;return Math.floor(r/t)}matchingTimeSlotIdx(t,e){if(e<1)throw new Error("Cannot process with slot less than one ms wide");const r=t-this.startOfMatchingDayEpochMS(t);return Math.floor(r/e)}startOfCurrentSlotEpochMS(t){return this.startOfTodayEpochMS()+this.currentTimeSlotIdx(t)*t}startOfMatchingSlotEpochMS(t,e){return this.startOfMatchingDayEpochMS(t)+this.matchingTimeSlotIdx(t,e)*e}}class W{constructor(){}static mergeArrays(t){let e=null;if(t?.length){let r=0;t.forEach((t=>{r+=t.length})),e=new Uint8Array(r);let n=0;t.forEach((t=>{e.set(t,n),n+=t.length}))}return e}}class H{constructor(){}static async webReadableStreamToUint8Array(t){const e=[],r=new WritableStream({write:async(t,r)=>("string"==typeof t?e.push(y.stringToUint8Array(t)):e.push(t),null),abort(t){x.throwFormattedErr("StringWebWritableStream failure : %s",t)}},{highWaterMark:3,size:()=>1});return await t.pipeTo(r),W.mergeArrays(e)}static async webReadableStreamToString(t){const e=await H.webReadableStreamToUint8Array(t);return(new TextDecoder).decode(e)}static stringToWebReadableStream(t){return new ReadableStream({start:e=>(t&&e.enqueue(t),e.close(),null)},{highWaterMark:t?t.length:null})}}class J{wrapped;constructor(t,e){if(!t)throw Error("Cannot set level to null/undefined");this.wrapped={lvl:t,timestamp:Date.now(),messageSource:e}}clone(){const t=new J(this.wrapped.lvl,this.wrapped.messageSource);return t.wrapped=Object.assign({},this.wrapped),t}level(t){if(!t)throw Error("Cannot set level to null/undefined");return this.wrapped.lvl=t,this}timestamp(t){if(!t)throw Error("Cannot set timestamp to null/undefined");return this.wrapped.timestamp=t,this}messageSource(t){return this.wrapped.messageSource=t,this}subVars(t){return this.wrapped.subsVars=t||[],this}params(t){return this.wrapped.params=t||{},this}p(t,e){return this.wrapped.params=this.wrapped.params||{},this.wrapped.params[t]=e,this}toMessage(){return Object.assign({},this.wrapped)}}class Z{static LOCAL_IP=null;static findLocalIp(t=!0){return w.info("Attempting to find local IP (V 2)"),Z.LOCAL_IP&&t?Promise.resolve(Z.LOCAL_IP):"undefined"!=typeof window?new Promise((function(t,e){try{const e=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(e){const r=new e({iceServers:[]}),n=Object.create(null);n["0.0.0.0"]=!1,r.createDataChannel("",{reliable:!1}),r.onicecandidate=function(e){e.candidate&&Z.grepSDP("a="+e.candidate.candidate,n,t)},r.createOffer((function(e){Z.grepSDP(e.sdp,n,t),r.setLocalDescription(e)}),(function(e){w.warn("Offer failed : %s",e),t(Z.updateLocalIP("FIND_UNSUPPORTED"))}))}else w.warn("IP Address find not supported on this device"),t(Z.updateLocalIP("FIND_UNSUPPORTED"))}catch(e){w.warn("Error finding local ip address : %s",e),t(Z.updateLocalIP("ERROR"))}})):(w.warn("Window not found, cannot calculate local ip"),Promise.resolve(Z.updateLocalIP("NO_WINDOW")))}static parseUrl(t){const e=t.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);return e&&{href:t,protocol:e[1],host:e[2],hostname:e[3],port:e[4],pathname:e[5],search:e[6],hash:e[7]}}static updateLocalIP(t){return Z.LOCAL_IP=t,Z.LOCAL_IP}static grepSDP(t,e,r){t.split("\r\n").forEach((function(t){if(~t.indexOf("a=candidate")){const n=t.split(" "),s=n[4];"host"===n[7]&&Z.updateAddressList(s,e,r)}else if(~t.indexOf("c=")){const n=t.split(" ")[2];Z.updateAddressList(n,e,r)}}))}static updateAddressList(t,e,r){if(t in e)return;e[t]=!0;const n=Object.keys(e).filter((function(t){return e[t]}));if(n&&1==n.length)r(Z.updateLocalIP(n[0]));else{const t=n.sort().join(",");w.warn("Multiple addresses found, returning sorted join : %s",t),r(Z.updateLocalIP(t))}}}class q{currentIp="UNSET";constructor(){Z.findLocalIp(!1).then((t=>{w.info("Setting local IP to %s",t),this.currentIp=t})).catch((t=>{w.warn("Unable to set current IP - leaving as UNSET : %s",t)}))}ready(){return"UNSET"!==this.currentIp}currentLocalIpAddress(){return this.currentIp}}class X{fixed;constructor(t){this.fixed=t}currentLocalIpAddress(){return this.fixed}}class $ extends Error{static RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY="__ratchetRestfulApiHttpErrorFlag";_httpStatusCode=500;_errors;_detailErrorCode;_endUserErrors;_details;_requestId;_wrappedError;constructor(...t){super($.combineErrorStringsWithDefault(t)),Object.setPrototypeOf(this,$.prototype),this._errors=t,this[$.RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY]=!0}static combineErrorStringsWithDefault(t,e="Internal Server Error"){return t&&t.length>0?t.join(","):e}setFormattedErrorMessage(e,...r){const n=t.format(e,...r);this.errors=[n]}withFormattedErrorMessage(t,...e){return this.setFormattedErrorMessage(t,...e),this}withHttpStatusCode(t){return this.httpStatusCode=t,this}withErrors(t){return this.errors=t,this}withDetailErrorCode(t){return this._detailErrorCode=t,this}withEndUserErrors(t){return this._endUserErrors=t,this}withDetails(t){return this._details=t,this}withRequestId(t){return this._requestId=t,this}withWrappedError(t){return this._wrappedError=t,this}isWrappedError(){return!!this._wrappedError}static wrapError(t){let e=null;return e=$.objectIsRestfulApiHttpError(t)?t:new $(t.message).withWrappedError(t).withHttpStatusCode(500),e}static objectIsRestfulApiHttpError(t){return t&&!0===t[$.RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY]}get httpStatusCode(){return this._httpStatusCode}get errors(){return this._errors}get detailErrorCode(){return this._detailErrorCode}get endUserErrors(){return this._endUserErrors}get details(){return this._details}get requestId(){return this._requestId}get wrappedError(){return this._wrappedError}set httpStatusCode(t){this._httpStatusCode=t||500}set errors(t){this._errors=t||["Internal Server Error"],this.message=$.combineErrorStringsWithDefault(this._errors)}set detailErrorCode(t){this._detailErrorCode=t}set endUserErrors(t){this._endUserErrors=t}set details(t){this._details=t}set requestId(t){this._requestId=t||"MISSING"}set wrappedError(t){this._wrappedError=t}static errorIsX0x(t,e){let r=!1;if(t&&$.objectIsRestfulApiHttpError(t)){const n=t,s=b.safeNumber(n.httpStatusCode),o=100*e;r=s>=o&&s<=o+99}return r}static errorIs40x(t){return $.errorIsX0x(t,4)}static errorIs50x(t){return $.errorIsX0x(t,5)}}class Y{static GOOGLE_VERIFY_URL="https://www.google.com/recaptcha/api/siteverify?secret={{KEY}}&response={{TOKEN}}";static async verifyRecaptchaToken(t,e,r=o){w.debug("Verifying recaptcha token : %s",e);let n=null;if(!y.safeString(e))return w.warn("Recaptcha validation error, no token passed : %s",e),n;w.info("Validating Recaptcha via Google API : %s",e);let s=Y.GOOGLE_VERIFY_URL;s=s.split("{{KEY}}").join(t),s=s.split("{{TOKEN}}").join(e);try{const t=await r(s),e=await t.json();n=e&&e.success}catch(t){w.error("Failed to read from google : %s",t),n=!1}return n}}class Q{accountSid;authToken;outBoundNumber;static TWILLIO_BASE_API_URL="https://api.twilio.com/2010-04-01";constructor(t,e,r){this.accountSid=t,this.authToken=e,this.outBoundNumber=r,m.notNullOrUndefined(t,"accountSid"),m.notNullOrUndefined(e,"authToken"),m.notNullOrUndefined(r,"outBoundNumber"),m.true(Q.isValidE164Number(r),"outBoundNumber invalid format")}static async sendMessageDirect(t,e,r,n,s){const o=new Q(t,e,r);return await o.sendMessage(n,s)}static generateTwilioBasicAuth(t,e){return"Basic "+v.generateBase64VersionOfString(t+":"+e)}async sendMessage(t,e){const r=[];if(m.notNullOrUndefined(t,"recipientPhoneNumbers"),m.notNullOrUndefined(y.trimToNull(e),"message"),m.true(t.length>0,"recipientPhoneNumbers non-empty"),t.forEach((t=>{m.true(Q.isValidE164Number(t),t+" is not valid")})),t&&t.length>0&&y.trimToNull(e)){w.info("Sending %s to %j",e,t);for(let n=0;n<t.length;n++){const s=t[n];if(w.info("To: %s",s),!Q.isValidE164Number(s))throw new Error("number must be E164 format!");const i="Body="+encodeURIComponent(e)+"&From="+encodeURIComponent(this.outBoundNumber)+"&To="+encodeURIComponent(s),a={method:"post",headers:{authorization:Q.generateTwilioBasicAuth(this.accountSid,this.authToken),"Content-Type":"application/x-www-form-urlencoded"},body:i},l=await o(Q.TWILLIO_BASE_API_URL+"/Accounts/"+this.accountSid+"/Messages.json",a),c=await l.json();w.debug("TwilioRatchet: For %s got %j",s,c),r.push(c)}}else w.warn("Not sending empty message / empty recipients");return r}static isValidE164Number(t){return/^\+?[1-9]\d{1,14}$/.test(t)}}class tt{static keysOnly(t){return{transform:(e,r,n)=>r?t.transform(e,r,n):e}}static valuesOnly(t){return{transform:(e,r,n)=>r?e:t.transform(e,r,n)}}static stringReplaceTransform(t,e){return{transform:(r,n,s)=>r==t?e:r}}static stripStringTransform(t){return{transform:(e,r,n)=>e==t?null:e}}static retainAll(t){return{transform:(e,r,n)=>-1==t.indexOf(e)?null:e}}static removeAll(t){return{transform:(e,r,n)=>t.indexOf(e)>-1?null:e}}static snakeToCamelCase(){return{transform(t,e,r){let n=t;return"string"==typeof t&&(n=t.replace(/_([a-z0-9])/gi,(function(t,e){return e.toUpperCase()}))),n}}}static stringToNumber(){return{transform(t,e,r){let n=t;if("string"==typeof t){const e=b.safeNumber(t);null!==e&&(n=e)}return n}}}static camelToSnakeCase(){return{transform(t,e,r){let n=t;return"string"==typeof t&&(n=t.replace(/\.?([A-Z]+)/g,(function(t,e){return"_"+e.toLowerCase()})).replace(/^_/,"")),n}}}static concatenateToNewField(t,e,r=!0){return{transform(n,s,o){if("object"==typeof n){let s="";e.forEach((t=>{if(null!=s){const e=n[t];s=null==e&&r?null:null==e?s:s+String(e)}})),null!=s&&(n[t]=s,e.forEach((t=>delete n[t])))}return n}}}static numberToBool(t){return{transform:(e,r,n)=>("object"==typeof e&&t.forEach((t=>{const r=e[t];if("number"==typeof r){const n=0!=r;e[t]=n}})),e)}}static boolToNumber(t){return{transform:(e,r,n)=>("object"==typeof e&&t.forEach((t=>{const r=e[t];if("boolean"==typeof r){const n=r?1:0;e[t]=n}})),e)}}static makeDuplicateField(t,e){return{transform(r,n,s){if("object"==typeof r){const n=r[t];null!=n&&(r[e]=n)}return r}}}static addField(t,e){return{transform:(r,n,s)=>("object"==typeof r&&(r[t]=e),r)}}static reformatDateFields(t,e,n){return{transform:(s,o,i)=>("object"==typeof s&&t.forEach((t=>{const o=s[t];if(null!=o)try{const i=r.fromFormat(o,e).toFormat(n);s[t]=i}catch(t){w.warn("Failed to reparse date %s in format %s : %s",o,e,t)}})),s)}}}class et{static transform(t,e=[]){return et.transformGeneric(t,e,!1,null)}static transformGeneric(t,e=[],r,n){let s=null;const o=typeof t;switch(o){case"undefined":case"symbol":case"function":s=t;break;case"number":case"string":case"boolean":s=et.applyTransformToPrimitive(t,e,r,n);break;case"object":s=et.applyTransformToObject(t,e,r,n);break;default:throw new Error("Unrecognized type "+o)}return s}static applyTransformToObject(t,e=[],r,n=null){w.silly("Tranform: %j, %s, %j",t,r,n);let s=null;return null!=t&&(Array.isArray(t)?(s=[],t.forEach((n=>{const o=et.transformGeneric(n,e,r,t);null!=o&&s.push(o)}))):(s={},Object.keys(t).forEach((r=>{const n=t[r],o=et.applyTransformToPrimitive(r,e,!0,t);if(null!=o){let r=et.transformGeneric(n,e,!1,t);r=et.applyTransformToPrimitive(r,e,!1,t),null!=r&&(s[o]=r)}})),s=et.applyTransformToPrimitive(s,e,!1,t))),s}static applyTransformToPrimitive(t,e=[],r,n){let s=t;return e.forEach((t=>{s=null==s?null:t.transform(s,r,n)})),s}}!function(t){t.Success="Success",t.RolledBack="RolledBack",t.RollbackFailed="RollbackFailed"}(u||(u={}));class rt{static async execute(t,e,r){m.notNullOrUndefined(t,"steps"),m.notNullOrUndefined(e,"initialContext"),m.true(t.length>0,"steps may not be empty");const n=Object.assign({},r||{});n.stepLogLevel=n.stepLogLevel||i.info;const s={finalContext:e,finalState:null},o=t.map(((t,e)=>t.name||"Step "+e));w.info("Beginning transaction of %d steps",t.length);let a=0;do{w.logByLevel(n.stepLogLevel,"Processing step %d of %d (%s)",a+1,t.length,o[a]);try{await t[a].execute(s.finalContext,a),a++}catch(t){w.error("Failure detected on step %d : %s : %s : Rolling back",a,o[a],t,t),s.error=t,s.errorStep=a}}while(!s.error&&a<t.length);if(s.error)do{w.logByLevel(n.stepLogLevel,"Rolling back step %d of %d (%s)",a+1,t.length,o[a]);try{t[a].rollback?await t[a].rollback(s.finalContext,a):w.info("Skipping - no rollback defined")}catch(t){w.error("Very bad - rollback code failed on step %d : %s : Aborting in invalid state: %s",a,o[a],t,t),s.rollbackError=t,s.rollbackErrorStep=a}a--}while(a>=0);if(s.finalState=s.rollbackError?u.RollbackFailed:s.error?u.RolledBack:u.Success,w.info("Transaction completed with status : %s",s.finalState),n?.executeAfterRollback&&s.finalState!==u.Success)try{w.info("Applying executeAfterRollback"),await n.executeAfterRollback(s)}catch(t){w.error("Very bad - failure in executeAfterRollback : %s",t,t)}if(n?.executeAfterRollbackFailure&&s.finalState!==u.Success)try{w.info("Applying executeAfterRollbackFailure"),await n.executeAfterRollbackFailure(s)}catch(t){w.error("Very bad - failure in executeAfterRollbackFailure : %s",t,t)}return s}}export{P as ArrayRatchet,v as Base64Ratchet,L as BooleanRatchet,q as BrowserLocalIpProvider,tt as BuiltInTransforms,f as ClassicSingleLineLogMessageFormatter,A as CompositeLastSuccessProvider,I as DateRatchet,O as DurationRatchet,R as EnumRatchet,x as ErrorRatchet,C as EsmRatchet,c as ExpiredJwtHandling,F as ExpiringObject,D as ExpiringObjectConfig,X as FixedLocalIpProvider,U as GeolocationRatchet,B as GlobalRatchet,Y as GoogleRecaptchaRatchet,_ as Histogram,M as JwtRatchet,j as KeyValue,J as LogMessageBuilder,l as LogMessageFormatType,w as Logger,E as LoggerInstance,i as LoggerLevelName,a as LoggerOutputFunction,g as LoggerRingBuffer,h as LoggerUtil,N as MapRatchet,Z as NetworkRatchet,k as No,d as NoneLogMessageFormatter,b as NumberRatchet,z as PromiseRatchet,T as Ratchet2d,S as RatchetInfo,m as RequireRatchet,$ as RestfulApiHttpError,G as StopWatch,y as StringRatchet,p as StructuredJsonLogMessageFormatter,K as TimeZoneRatchet,V as TimeoutToken,u as TransactionFinalState,rt as TransactionRatchet,et as TransformRatchet,Q as TwilioRatchet,W as Uint8ArrayRatchet,H as WebStreamRatchet};
|
|
1
|
+
import t from"util";import e from"jsonwebtoken";import{DateTime as r}from"luxon";import{Base64 as n}from"js-base64";import{$enum as s}from"ts-enum-util";import o from"url";import i from"cross-fetch";var a,l,c,u,g;!function(t){t.error="error",t.warn="warn",t.info="info",t.verbose="verbose",t.debug="debug",t.silly="silly"}(a||(a={}));class h{_lastLogMessage={messageSource:"No message yet",timestamp:(new Date).getTime(),lvl:a.info};_buffer=[];_bufferIdx=0;_lastSnapshotIdx=0;_bufferSize;constructor(t){if(!t)throw new Error("Cannot create ring buffer of size 0");this._bufferSize=t}get currentIndex(){return this._bufferIdx}get lastSnapshotIdx(){return this._lastSnapshotIdx}set bufferSize(t){if(!t)throw new Error("Cannot create ring buffer of size 0");this._bufferSize=t,this.clearRingBuffer()}getMessages(t=null,e=!1,r=!1){let n=null;if(this._bufferIdx<this._bufferSize){const e=null==t?0:t;n=this._buffer.slice(e,this._bufferIdx)}else{n=[];const e=this._bufferIdx-this._bufferSize;for(let r=t?Math.max(t,e):e;r<this._bufferIdx;r++)n.push(this._buffer[r%this._bufferSize])}return e&&this.clearRingBuffer(),r&&(n=n.reverse()),n}takeSnapshot(){const t=Math.max(0,this._bufferIdx-this._bufferSize),e={messages:this.getMessages(this._lastSnapshotIdx),logMessagesTruncated:Math.max(0,t-this._lastSnapshotIdx)};return this._lastSnapshotIdx=this._bufferIdx,e}getLastLogMessage(){return Object.assign({},this._lastLogMessage)}clearRingBuffer(){this._buffer=[],this._bufferIdx=0,this._lastSnapshotIdx=0}addToRingBuffer(t){this._lastLogMessage=t,this._buffer[this._bufferIdx%this._bufferSize]=t,this._bufferIdx++}}!function(t){t.Console="Console",t.ConsoleNoDebug="ConsoleNoDebug",t.StdOut="StdOut"}(l||(l={}));class f{static LOG_LEVELS_IN_ORDER=[a.error,a.warn,a.info,a.verbose,a.debug,a.silly];static handlerFunctionMap(t=l.Console){const e=new Map;if(t===l.StdOut){if(!process?.stdout?.write)throw new Error("Cannot use standard out - process.stdout.write not found");const t=(t,e)=>process.stdout.write(t,"utf-8",e);e.set(a.error,t),e.set(a.warn,t),e.set(a.info,t),e.set(a.verbose,t),e.set(a.debug,t),e.set(a.silly,t)}else e.set(a.error,console.error),e.set(a.warn,console.warn),e.set(a.info,console.info),e.set(a.verbose,t===l.ConsoleNoDebug?console.log:console.debug),e.set(a.debug,t===l.ConsoleNoDebug?console.log:console.debug),e.set(a.silly,t===l.ConsoleNoDebug?console.log:console.debug);return e}static defaultHandlerFunction(){return console.info}static levelIsEnabled(t,e){const r=f.LOG_LEVELS_IN_ORDER.indexOf(t),n=f.LOG_LEVELS_IN_ORDER.indexOf(e);return r>-1&&n>-1&&n>=r}}!function(t){t.ClassicSingleLine="ClassicSingleLine",t.StructuredJson="StructuredJson",t.None="None"}(c||(c={}));class d{formatMessage(e,r){let n=null;return e&&(n="",n+=r.options.trace?r.options.trace+" ":"",n+="["+e.lvl+"] ",n+=t.format(e.messageSource,...e.subsVars)),n}}class p{formatMessage(t,e){return null}}class m{formatMessage(e,r){let n=null;if(e){const s=Object.assign({},r.options.globalVars||{},e.params||{});s.msg=t.format(e.messageSource,...e.subsVars),s.utcDateTime=new Date(e.timestamp).toISOString(),s.logLevel=e.lvl,r.options.trace&&(s.trace=r.options.trace),s.logName=r.loggerInstanceName,s.logId=r.loggerInstanceId,n=JSON.stringify(s)+"\n"}return n}}class y{static isNullOrUndefined(t){return null==t}static notNullOrUndefined(t,e="object"){if(y.isNullOrUndefined(t))throw new Error(e+" may not be null or undefined")}static notNullUndefinedOrOnlyWhitespaceString(t,e="string"){if(y.isNullOrUndefined(t)||""===t.trim())throw new Error(e+" may not be null or undefined or only whitespace string")}static notNullUndefinedOrEmptyArray(t,e="string"){if(y.isNullOrUndefined(t)||0===t.length)throw new Error(e+" may not be null or undefined or an empty array")}static equal(t,e,r="Values must be equal"){if(t!==e)throw new Error(r)}static true(t,e="Value must be true"){y.equal(t,!0,e)}static noNullOrUndefinedValuesInArray(t,e=null,r=null){if(y.notNullOrUndefined(t,"Source array may not be null"),null!==e&&t.length!==e)throw new Error(`Expected array of length ${e} but was ${t.length} ${r}`);for(let e=0;e<t.length;e++)if(y.isNullOrUndefined(t[e]))throw new Error(`Array index ${e} was null or undefined ${r}`)}static noNullOrUndefinedValuesInRestArgs(t,...e){if(y.notNullOrUndefined(e,"Source array may not be null"),null!==t&&e.length!==t)throw new Error(`Expected array of length ${t} but was ${e.length}`);for(let t=0;t<e.length;t++)if(y.isNullOrUndefined(e[t]))throw new Error(`Array index ${t} was null or undefined`)}static constructorArgumentsMatchLengthAndAreNonNull(){const t=Array.from(arguments),e=this.constructor.length;return y.noNullOrUndefinedValuesInArray(t,e)}}class E{static RFC_3986_RESERVED=["!","*","'","(",")",";",":","@","&","=","+","$",",","/","?","#","[","]","%"];static DIGITS="0123456789";static HEXITS=E.DIGITS+"ABCDEF";static UPPER_CASE_LATIN="ABCDEFGHIJKLMNOPQRSTUVWXYZ";static LOWER_CASE_LATIN="abcdefghijklmnopqrstuvwxyz";static CASE_INSENSITIVE_LATIN=E.UPPER_CASE_LATIN+E.LOWER_CASE_LATIN;static stringIsInGivenAlphabet(t,e){let r=!1;if(t&&e)for(let n=0;n<t.length&&!r;n++)r=e.includes(t.charAt(n));return r}static stringToUint8Array(t){return t?(new TextEncoder).encode(t):null}static uint8ArrayToString(t){return t?(new TextDecoder).decode(t):null}static attemptJsonParse(t){let e=null;if(E.trimToNull(t))try{e=JSON.parse(t)}catch(t){e=null}return e}static canParseAsJson(t){return!!E.attemptJsonParse(t)}static allUnique(t){let e=!0;if(t){const r=new Set;for(let n=0;n<t.length&&e;n++){const s=t.charAt(n);e=!r.has(s),r.add(s)}}return e}static allPermutationsOfLength(t,e){const r=[];if(t>0&&e&&e.length>0){y.true(E.allUnique(e),"Alphabet must be unique");const n=1===t?[""]:E.allPermutationsOfLength(t-1,e);for(let t=0;t<e.length;t++)n.forEach((n=>r.push(e.charAt(t)+n)))}return r}static createType4Guid(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(t){const e=16*Math.random()|0;return("x"==t?e:3&e|8).toString(16)}))}static createRandomHexString(t=10){let e="";for(let r=0;r<t;r++)e+=Math.floor(16*Math.random()).toString(16);return e}static canonicalize(t){let e=t?t.toLowerCase():"";return e=e.replace(" ","-"),E.RFC_3986_RESERVED.forEach((t=>{e=e.replace(t,"")})),e}static formatBytes(t,e=2){if(0==t)return"0 Bytes";const r=e||2,n=Math.floor(Math.log(t)/Math.log(1024));return parseFloat((t/Math.pow(1024,n)).toFixed(r))+" "+["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"][n]}static safeString(t){let e=null;if(null!=t){e="string"==typeof t?t:String(t)}return e}static stringContainsOnlyNumbers(t){return/^[0-9]+$/.test(t)}static stringContainsOnlyAlphanumeric(t){return/^[0-9a-zA-Z]+$/.test(t)}static stringContainsOnlyHex(t){return/^[0-9a-fA-F]+$/.test(t)}static stringContainsOnly(t,e){const r=t||"",n=e||"";let s=!0;for(let t=0;t<r.length&&s;t++)s=n.indexOf(r.charAt(t))>=0;return s}static obscure(t,e=2,r=2){if(!t)return t;const n=t.length;let s=e,o=r;for(;n>0&&n<s+o+1;)s=Math.max(0,s-1),o=Math.max(0,o-1);const i=n-(s+o);let a="";a+=t.substring(0,s);for(let t=0;t<i;t++)a+="*";return a+=t.substring(n-o),a}static leadingZeros(t,e){const r="00000000000000000000000000000000000000000000000000";let n=!1,s=String(t);if(s.startsWith("-")&&(n=!0,s=s.substring(1)),e>50)throw new Error("Cannot format number that large");let o=(r+s).slice(-1*e);return n&&(o="-"+o),o}static trimToEmpty(t){return(t?E.safeString(t):"").trim()}static trimToNull(t){const e=E.trimToEmpty(t);return e.length>0?e:null}static trimAllStringPropertiesToNullInPlace(t){return E.trimAllStringPropertiesInPlace(t,!1)}static trimAllStringPropertiesToEmptyInPlace(t){return E.trimAllStringPropertiesInPlace(t,!0)}static trimAllStringPropertiesInPlace(t,e){return Object.keys(t).forEach((r=>{const n=t[r];null!=n&&"string"==typeof n&&(t[r]=e?E.trimToEmpty(t[r]):E.trimToNull(t[r]))})),t}static stripNonNumeric(t){let e=t;if(null!=t&&!E.stringContainsOnlyNumbers(t)){e="";for(let r=0;r<t.length;r++){const n=t.charAt(r);(E.stringContainsOnlyNumbers(n)||0===r&&"-"===n)&&(e+=n)}}return e}static csvSafe(t){let e=E.trimToEmpty(E.safeString(t));return e.split('"').join('\\"'),-1===e.indexOf(",")&&-1===e.indexOf('"')&&-1===e.indexOf("'")||(e='"'+e+'"'),e}static stripNonAscii(t){return[...t].reduce(((t,e)=>e.charCodeAt(0)>127?t:t+e))}}class b{loggerInstanceName;_loggerMeta;_ringBuffer;_formatter;_level;_handlerFunctionMap;_options;constructor(t="default",e){this.loggerInstanceName=t,this.options=e}addPreProcessor(t){return t&&(this._options.preProcessors=this._options.preProcessors||[],this._options.preProcessors.push(t)),Object.assign([],this._options.preProcessors)}get ringBuffer(){return this._ringBuffer}dumpConfigurationIntoLog(){this.error("ERROR enabled"),this.warn("WARN enabled"),this.info("INFO enabled"),this.verbose("VERBOSE enabled"),this.debug("DEBUG enabled"),this.silly("SILLY enabled")}dumpOptionsIntoLog(){if(this.info("Options: %j",this.options),this?.options?.preProcessors?.length){const t=this.options.preProcessors.map((t=>E.trimToNull(t.label())||"Unlabelled"));this.info("Preprocessors: %j",t)}}changeRingBufferSize(t){this._ringBuffer=null,t&&(this._ringBuffer=new h(t),this._options.ringBufferSize=t)}updateTracePrefix(t){this._options.trace=t}get options(){return Object.assign({},this._options)}set options(t){switch(this._options=Object.assign({},t),this._options.ringBufferSize&&(this._ringBuffer=new h(this._options.ringBufferSize)),this._options.formatType){case c.None:this._formatter=new p;break;case c.StructuredJson:this._formatter=new m;break;default:this._formatter=new d}this._level=this._options.initialLevel,this._handlerFunctionMap=f.handlerFunctionMap(this._options.outputFunction);const e=this._loggerMeta?this._loggerMeta.loggerInstanceId:null;this._loggerMeta={options:this._options,loggerInstanceName:this.loggerInstanceName,loggerInstanceId:e||E.createRandomHexString(8)}}get level(){return this._level}set level(t){if(!t)throw new Error("Cannot set level to null/undefined");this._level=t}consoleLogPassThru(t,...e){if(f.levelIsEnabled(t,this._level)){let r=this._options.trace||"";r+="["+t+"] ",e.unshift(r);(this._handlerFunctionMap.get(t)||f.defaultHandlerFunction)(...e)}}createLogMessage(t,e,r,...n){return{lvl:t,timestamp:Date.now(),messageSource:r,subsVars:n,params:e}}formatMessage(t){return t?this._formatter.formatMessage(t,this._loggerMeta):null}formatMessages(t){return(t||[]).map((t=>this.formatMessage(t))).filter((t=>!!t))}recordMessageBuilder(t){return this.recordMessage(t.toMessage())}recordMessage(t){let e=null;if(f.levelIsEnabled(t.lvl,this._level)){let r=Object.assign({},t);if(this._options.preProcessors?.length)for(let t=0;t<this._options.preProcessors.length;t++)r=this._options.preProcessors[t].process(r);if(e=this.formatMessage(r),e){(this._handlerFunctionMap.get(r.lvl)||f.defaultHandlerFunction)(e),this._ringBuffer&&this._ringBuffer.addToRingBuffer(r)}}return e}error(t,...e){const r=this.createLogMessage(a.error,{},t,...e);return this.recordMessage(r)}errorP(...t){this.consoleLogPassThru(a.error,...t)}warn(t,...e){const r=this.createLogMessage(a.warn,{},t,...e);return this.recordMessage(r)}warnP(...t){this.consoleLogPassThru(a.warn,...t)}info(t,...e){const r=this.createLogMessage(a.info,{},t,...e);return this.recordMessage(r)}infoP(...t){this.consoleLogPassThru(a.info,...t)}verbose(t,...e){const r=this.createLogMessage(a.verbose,{},t,...e);return this.recordMessage(r)}verboseP(...t){this.consoleLogPassThru(a.verbose,...t)}debug(t,...e){const r=this.createLogMessage(a.debug,{},t,...e);return this.recordMessage(r)}debugP(...t){this.consoleLogPassThru(a.debug,...t)}silly(t,...e){const r=this.createLogMessage(a.silly,{},t,...e);return this.recordMessage(r)}sillyP(...t){this.consoleLogPassThru(a.silly,...t)}logByLevel(t,e,...r){const n=this.createLogMessage(t,{},e,...r);this.recordMessage(n)}importMessages(t,e="",r=!0){const n=e||"";t&&t.length>0&&(this.silly("Received import data : %d msgs",t.length),t.forEach((t=>{if(t.messageSource){let e=n;if(r){e+=" ("+String(new Date).substring(15,24)+") : ",e+=t.messageSource}this.logByLevel(t.lvl,e)}})))}}class w{static LOGGER_INSTANCES=new Map;static DEFAULT_OPTIONS={initialLevel:a.info,formatType:c.ClassicSingleLine,trace:null,globalVars:{},outputFunction:l.Console,ringBufferSize:0,preProcessors:[]};static applyDefaultsToOptions(t){const e=t||{};return e.initialLevel=e.initialLevel??w.DEFAULT_OPTIONS.initialLevel,e.formatType=e.formatType??w.DEFAULT_OPTIONS.formatType,e.trace=e.trace??w.DEFAULT_OPTIONS.trace,e.globalVars=e.globalVars??w.DEFAULT_OPTIONS.globalVars,e.outputFunction=e.outputFunction??w.DEFAULT_OPTIONS.outputFunction,e.ringBufferSize=e.ringBufferSize??w.DEFAULT_OPTIONS.ringBufferSize,e}static changeDefaultOptions(t,e){if(!t||!t.initialLevel||!t.formatType)throw new Error("Default options must be non-null, and provide initial level and format type");w.DEFAULT_OPTIONS=Object.assign({},t),e&&Array.from(w.LOGGER_INSTANCES.values()).forEach((e=>e.options=t))}static getLogger(t="default",e){let r=w.LOGGER_INSTANCES.get(t);if(!r){const n=w.applyDefaultsToOptions(e);r=new b(t,n),w.LOGGER_INSTANCES.set(t,r)}return r}static recordMessageBuilder(t){return w.getLogger().recordMessageBuilder(t)}static recordMessage(t){return w.getLogger().recordMessage(t)}static formatMessages(t){return w.getLogger().formatMessages(t)}static updateTracePrefix(t){return w.getLogger().updateTracePrefix(t)}static changeRingBufferSize(t){return w.getLogger().changeRingBufferSize(t)}static getRingBuffer(){return w.getLogger().ringBuffer}static dumpConfigurationIntoLog(){return w.getLogger().dumpConfigurationIntoLog()}static dumpOptionsIntoLog(){return w.getLogger().dumpOptionsIntoLog()}static getLevel(){return w.getLogger().level}static setLevel(t){w.getLogger().level=t}static getOptions(){return w.getLogger().options}static getMessages(t=null,e=!1,r=!1){const n=w.getLogger().ringBuffer;return n?n.getMessages(t,e,r):null}static consoleLogPassThru(t,...e){return w.getLogger().consoleLogPassThru(t,...e)}static error(t,...e){return w.getLogger().error(t,...e)}static errorP(...t){return w.getLogger().errorP(...t)}static warn(t,...e){return w.getLogger().warn(t,...e)}static warnP(...t){return w.getLogger().warnP(...t)}static info(t,...e){return w.getLogger().info(t,...e)}static infoP(...t){return w.getLogger().infoP(...t)}static verbose(t,...e){return w.getLogger().verbose(t,...e)}static verboseP(...t){return w.getLogger().verboseP(...t)}static debug(t,...e){return w.getLogger().debug(t,...e)}static debugP(...t){return w.getLogger().debugP(...t)}static silly(t,...e){return w.getLogger().silly(t,...e)}static sillyP(...t){return w.getLogger().sillyP(...t)}static takeSnapshot(){const t=w.getLogger().ringBuffer;return t?t.takeSnapshot():null}static logByLevel(t,e,...r){return w.getLogger().logByLevel(t,e,...r)}static importMessages(t,e="",r=!0){return w.getLogger().importMessages(t,e,r)}static getLastLogMessage(){const t=w.getLogger().ringBuffer;return t?t.getLastLogMessage():null}}class L{static MAX_LEADING_ZEROS_FORMAT_LENGTH=1e3;static toFixedDecimalNumber(t,e){const r=L.safeNumber(t);return null==r?r:L.safeNumber(r.toFixed(e))}static leadingZeros(t,e){const r=String(t);if(r.length<e){let t="0000";if(e>L.MAX_LEADING_ZEROS_FORMAT_LENGTH)throw"Cannot format number that large (max length is "+L.MAX_LEADING_ZEROS_FORMAT_LENGTH+")";for(;t.length<e;)t+=t;return(t+r).slice(-1*e)}return r}static between(t,e,r){const n=L.safeNumber(t),s=L.safeNumber(e),o=L.safeNumber(r);return n>=s&&n<=o||n>=o&&n<=s}static safeNumber(t,e=null,r){let n;if(null!=t){const r=typeof t;"number"==r?n=t:"string"==r?n=0===t.trim().length?e:Number.parseFloat(t):(w.warn("Value is of type %s, returning default",r),n=e),isNaN(n)&&(w.debug("Parsed string to NaN - using NaN value from param"),n=e)}else n=void 0===r?null:r?e:t;return n}static numberCSVToList(t){let e=null;return t&&(e=t.split(",").map((t=>L.safeNumber(t.trim()))),e=e.filter((t=>"number"==typeof t&&!isNaN(t)))),e}static fitToWindow(t,e,r){let n=t;if(null===t||null===e||null===r||e<0||r<0||t<0)throw new Error("All values must be non-null and larger than 0");const s=Math.min(e,r),o=Math.max(e,r),i=o-s;if(o===s)n=o;else{for(;n<s;)n+=i;for(;n>o;)n-=i}return n}static groupNumbersIntoContiguousRanges(t,e=3){y.notNullOrUndefined(t);const r=Object.assign([],t);r.sort(((t,e)=>t-e));const n=[],s=[];let o=0;for(let t=1;t<r.length;t++)if(r[t]===r[t-1]+1);else{if(o===t-1)n.push(r[t-1]);else{if(t-o<e)for(let e=o;e<t;e++)n.push(r[e]);else s.push({min:r[o],max:r[t-1]})}o=t}return{singles:n,ranges:s}}static distributeItemsEvenly(t,e){y.notNullOrUndefined(t,"items"),y.notNullOrUndefined(e,"buckets"),y.true(t>0&&t===Math.floor(t),"Items integer larger than 0"),y.true(e>0&&e===Math.floor(e),"Buckets integer larger than 0");const r=e/t,n=[];for(let t=0;t<e;t++)n.push(0);let s=0,o=t;for(;o>0;)n[Math.floor(s)%e]++,o--,s+=r;return n}static createRange(t,e,r=1){const n=[];let s=t;for(;s<e;)n.push(s),s+=r;return n}}class T{static allTrue(t,e=!1){let r=null;return r=!!t&&(t.length>0?t.reduce(((t,e)=>t&&e),!0):e),r}static anyTrue(t,e=!1){let r=null;return r=!!t&&(t.length>0?t.reduce(((t,e)=>t||e),!1):e),r}static parseBool(t){return!0===t||null!=t&&"string"==typeof t&&"true"===t.toLowerCase()}static intToBool(t){return null!=t&&0!==L.safeNumber(t)}static boolToInt(t){return T.parseBool(t)?1:0}}class S{constructor(){}static translateToOriginVector(t){let e=null;return S.validPoints(t)&&(e={x:null,y:null},t.forEach((t=>{e.x=null===e.x||t.x<e.x?t.x:e.x,e.y=null===e.y||t.y<e.y?t.y:e.y})),e.x*=-1,e.y*=-1),e}static minimalContainingPlane(t){let e=null;return S.validPoints(t)&&(e={width:0,height:0},t.forEach((t=>{e.width=Math.max(e.width,t.x+1),e.height=Math.max(e.height,t.y+1)}))),e}static scaleVector(t,e){let r=null;return S.validPlane(t)&&S.validPlane(e)&&(r={x:e.width/t.width,y:e.height/t.height}),r}static samePoint(t,e){return!!t&&!!e&&t.x===e.x&&t.y===e.y}static atLeastOneDimensionShared(t,e){return!(!t||!e||t.x!==e.x&&t.y!==e.y)}static validPlane(t){return!!t&&!!t.height&&!!t.width}static validLine(t){return!!t&&S.validPoint(t.p1)&&S.validPoint(t.p2)&&!S.samePoint(t.p1,t.p2)}static validLines(t){return!!t&&T.allTrue(t.map((t=>S.validLine(t))))}static validPolyLine(t){return!!t&&t.pts?.length>1&&T.allTrue(t.pts.map((t=>S.validPoint(t))))}static polyLineToLines(t){let e=null;if(S.validPolyLine(t)){e=[];for(let r=1;r<t.pts.length;r++)e.push({p1:t.pts[r-1],p2:t.pts[r]})}return e}static lastPointOnPolyLine(t){return S.validPolyLine(t)?t.pts[t.pts.length-1]:null}static lineToPolyLine(t){return S.validLine(t)?{pts:[t.p1,t.p2]}:null}static linesToPolyLines(t){let e=null;if(S.validLines(t)){e=[];let r=S.lineToPolyLine(t[0]);for(let n=1;n<t.length;n++)S.samePoint(S.lastPointOnPolyLine(r),t[n].p1)?r.pts.push(t[n].p2):(e.push(r),r=S.lineToPolyLine(t[n]));e.push(r)}return e}static validPoint(t){return!!t&&null!=t.x&&null!=t.x&&null!==t.y&&void 0!==t.y}static validPoints(t){return!!t&&T.allTrue(t.map((t=>S.validPoint(t))),!1)}static planeContainsPoint(t,e){return S.validPlane(e)&&S.validPoint(t)&&t.x>=0&&t.x<e.width&&t.y>=0&&t.y<e.height}static planeContainsPoints(t,e){return t&&t.map((t=>S.planeContainsPoint(t,e))).reduce(((t,e)=>t&&e),!0)}static linesToPoints(t){let e=null;return S.validLines(t)&&(e=t.map((t=>[t.p1,t.p2])).flat()),e}static pointsToLines(t){let e=null;if(S.validPoints(t)){if(t.length%2!=0)throw new Error("Cannot convert non-even array of points into lines");e=[];for(let r=0;r<t.length;r+=2)e.push({p1:t[r],p2:t[r+1]})}return e}static rotateRightAboutOrigin90Degrees(t,e=1){let r=null,n={x:0,y:0};if(S.validPoints(t)){r=Object.assign([],t),n=S.translateToOriginVector(r),r=S.translate(r,n);let e=S.minimalContainingPlane(r);r=S.xToY(r),e={width:e.height,height:e.width},n={x:-1*n.y,y:-1*n.x},r=S.mirrorPointsOnPlane(r,e,!0,!1),r=S.translate(r,n)}const s=e>4?e%4:e;return s>1&&(r=S.rotateRightAboutOrigin90Degrees(r,s-1)),r}static planeContainsLines(t,e){return t&&S.planeContainsPoints(t.map((t=>[t.p1,t.p2])).flat(),e)}static planeContainsPolyLine(t,e){return S.planeContainsLines(S.polyLineToLines(t),e)}static planeContainsLine(t,e){return S.validPlane(e)&&S.validLine(t)&&S.planeContainsPoint(t.p1,e)&&S.planeContainsPoint(t.p2,e)}static xToY(t){let e=null;return S.validPoints(t)&&(e=t.map((t=>({x:t.y,y:t.x})))),e}static translate(t,e){let r=null;return S.validPoints(t)&&S.validPoint(e)&&(r=t.map((t=>({x:t.x+e.x,y:t.y+e.y})))),r}static mirrorPointsOnPlane(t,e,r,n){let s=null;return S.validPoints(t)&&S.validPlane(e)&&(s=r||n?t.map((t=>({x:r?e.width-1-t.x:t.x,y:n?e.height-1-t.y:t.y}))):Object.assign([],t)),s}static transformPointsToNewPlane(t,e,r){let n=null;if(S.validPoints(t)&&S.validPlane(e)&&S.validPlane(r)){const s=S.scaleVector(e,r);n=t.map((t=>({x:t.x*s.x,y:t.y*s.y}))),n=S.mirrorPointsOnPlane(n,r,r.rightToLeft!==e.rightToLeft,r.topToBottom!==e.topToBottom)}return n}static transformPointToNewPlane(t,e,r){const n=S.transformPointsToNewPlane([t],e,r);return 1===n.length?n[0]:null}static transformLines(t,e,r){return null}static fitCurve(t,e){if(t.sort(((t,e)=>t.x-e.x)),e<=t[0].x)return t[0].y;if(e>=t[t.length-1].x)return t[t.length-1].y;{let r=0;for(;t[r+1].x<e;)r++;const n=t[r+1].x-t[r].x,s=t[r+1].y-t[r].y,o=(e-t[r].x)/n*s;return t[r].y+o}}}class _{constructor(){}static buildInformation(){return{version:"232",hash:"bcce209de9712e649cb0c1ea207f3297337b39e3",branch:"alpha-2023-09-25-6",tag:"alpha-2023-09-25-6",timeBuiltISO:"2023-09-25T20:00:31-0700",notes:"No notes"}}}class O{entries=[];update(t,e=1){if(t){const r=this.entries.find((e=>e.item===t));r?r.count+=e:this.entries.push({item:t,count:e})}}sort(){this.entries.sort(((t,e)=>{let r=e.count-t.count;return 0===r&&(r=String(e.item).localeCompare(String(t.item))),r}))}sortKeys(){this.entries.sort(((t,e)=>String(e.item).localeCompare(String(t.item))))}reverse(){this.entries.reverse()}getEntries(){return this.entries}getTotalCount(){let t=0;return this.entries.forEach((e=>t+=e.count)),t}countForValue(t){const e=this.entries.find((e=>e.item===t));return e?e.count:0}percentForValue(t){const e=this.getTotalCount();return 0===e?0:this.countForValue(t)/e}}!function(t){t[t.RETURN_NULL=0]="RETURN_NULL",t[t.THROW_EXCEPTION=1]="THROW_EXCEPTION",t[t.ADD_FLAG=2]="ADD_FLAG"}(u||(u={}));class M{static formatMsDuration(t,e=!1){const r=Math.floor(t%1e3),n=Math.floor(t/1e3)%60,s=Math.floor(t/6e4)%60,o=Math.floor(t/36e5)%24,i=Math.floor(t/864e5),a=L.leadingZeros;let l=a(o,2)+"h"+a(s,2)+"m";return l+=e?a(n,2)+"."+a(r,3)+"s":a(n,2)+"s",i>0&&(l=i+"d"+l),l}static colonFormatMsDuration(t,e=!1){const r=t%1e3,n=Math.floor(t/1e3)%60,s=Math.floor(t/6e4)%60,o=Math.floor(t/36e5),i=L.leadingZeros;let a=i(o,2)+":"+i(s,2)+":";return a+=e?i(n,2)+"."+i(r,3):i(n,2),a}static daysBetween(t,e){return r.fromJSDate(t).diff(r.fromJSDate(e)).days}static createSteps(t,e,n,s,o){let i=r.fromMillis(t).setZone(n);const a=r.fromMillis(e),l=[];for(;i<a;)l.push(i.toFormat(s)),i=i.plus(o);return l}}class x{_encryptionKeyPromise;_decryptKeysPromise;_jtiGenerator;_decryptOnlyKeyUseLogLevel;_parseFailureLogLevel;static EXPIRED_FLAG_NAME="__jwtServiceExpiredFlag";constructor(t,e,r=E.createType4Guid,n=a.info,s=a.debug){this._encryptionKeyPromise=t,this._decryptKeysPromise=e,this._jtiGenerator=r,this._decryptOnlyKeyUseLogLevel=n,this._parseFailureLogLevel=s,y.notNullOrUndefined(t,"encryptionKeyPromise")}get encryptionKeyPromise(){return this._encryptionKeyPromise}get decryptKeysPromise(){return this._decryptKeysPromise}get jtiGenerator(){return this._jtiGenerator}get decryptOnlyKeyUseLogLevel(){return this._decryptOnlyKeyUseLogLevel}get parseFailureLogLevel(){return this._parseFailureLogLevel}static hasExpiredFlag(t){return t&&!0===t[x.EXPIRED_FLAG_NAME]}static async invalidSafeDecode(t,r,n=a.silly){let s=null;try{s=e.verify(t,r,{ignoreExpiration:!0})}catch(t){w.logByLevel(n,"Caught %s - ignoring",t)}return s}static async secondsRemainingUntilExpiration(t){let e=null;if(E.trimToNull(t)){const r=await x.decodeTokenNoVerify(t),n=Math.floor(Date.now()/1e3);if(r.exp){const t=r.exp>100*n?Math.floor(r.exp/1e3):r.exp;e=Math.max(0,t-n)}}return e}static async msRemainingUntilExpiration(t){const e=await x.secondsRemainingUntilExpiration(t);let r=null;return null!=e&&(r=1e3*e),r}async decodeToken(t,e=u.RETURN_NULL){const r=await this.encryptionKeyArray();let n=Object.assign([],r);this.decryptKeysPromise&&(n=n.concat(await this.decryptKeysPromise));const s=[];let o=null;for(let e=0;e<n.length&&!o;e++){s.push(E.obscure(n[e],1,1));const i=e===n.length-1&&this.parseFailureLogLevel?this.parseFailureLogLevel:a.silly;o=await x.invalidSafeDecode(t,n[e],i),o&&e>=r.length&&w.logByLevel(this.decryptOnlyKeyUseLogLevel,"Used old key to decode token : %s",E.obscure(n[e],2))}if(o){const t=Math.floor(Date.now()/1e3),r=o?.exp&&o.exp>100*t?Math.floor(o.exp/1e3):o?.exp,n=o?.nbf&&o.nbf>100*t?Math.floor(o.nbf/1e3):o?.nbf;if(r&&t>=r||n&&t<=n){const n=t-r;switch(w.debug("JWT token expired or before NBF : on %d, %s ago",o.exp,M.formatMsDuration(1e3*n)),e){case u.THROW_EXCEPTION:throw new Error("JWT Token was expired");case u.ADD_FLAG:o[x.EXPIRED_FLAG_NAME]=!0;break;default:o=null}}}else w.warn("Unable to parse a payload (Tried %j) from : %s",s,t);return o}async encryptionKeyArray(){const t=await this.encryptionKeyPromise,e=Array.isArray(t)?t:[t];if(e.length<1)throw new Error("Cannot create JwtRatchet with empty encryption key set");return e}async selectRandomEncryptionKey(){const t=await this.encryptionKeyArray();return t[Math.floor(Math.random()*t.length)]}async createTokenString(t,r,n){const s=E.trimToNull(n)?E.trimToNull(n):await this.selectRandomEncryptionKey();if(y.notNullOrUndefined(t,"payload"),t.jti=this.jtiGenerator?this.jtiGenerator():null,r){const e=Math.floor(Date.now()/1e3)+r;w.debug("Forcing expiration to %d",e),t.exp=e}return e.sign(t,s)}async refreshJWTString(t,e,r){const n=e?u.ADD_FLAG:u.THROW_EXCEPTION,s=await this.decodeToken(t,n),o=s.exp&&s.iat?s.exp-s.iat:null,i=r||o;x.removeJwtFields(s),x.removeExpiredFlag(s);return await this.createTokenString(s,i)}static decodeTokenNoVerify(t){return e.decode(t)}static removeJwtFields(t){t&&["iss","sub","aud","exp","nbf","iat","jti"].forEach((e=>{delete t[e]}))}static removeExpiredFlag(t){t&&delete t[x.EXPIRED_FLAG_NAME]}}class N{static safeStringifyErr(t,e=!0){let r="ERR WAS NULL";if(t)if(t.message)r=t.message;else try{r=JSON.stringify(t)}catch(e){w.error("Failed to json stringify"),r=String(t)}return e&&w.error("%s",r,t),r}static asErr(t){let e=null;return t&&(e=t instanceof Error?t:new Error("Force-Cast to error : "+String(t))),e}static fErr(e,...r){const n=t.format(e,...r);return new Error(n)}static throwFormattedErr(t,...e){throw N.fErr(t,...e)}}class P{static expandNestedKeysToObjects(t,e="."){if(!e||1!==e.length)throw new Error("Invalid separator (must be single character)");const r={};return Object.keys(t).forEach((n=>{const s=n.split(e);let o=r;for(;s.length>1;)o[s[0]]=o[s[0]]||{},o=o[s[0]],s.splice(0,1);o[s[0]]=t[n]})),r}static mapByUniqueProperty(t,e){if(!t||!e)throw new Error("Neither input nor propName can be null");const r=new Map;return t.forEach((t=>{const n=t?t[e]:null;if(null==n)throw new Error("No value for "+e+" found in "+JSON.stringify(t));if(r.has(n))throw new Error("Multiple values found for "+n);r.set(n,t)})),r}static groupByProperty(t,e){if(!t||!e)throw new Error("Neither input nor propName can be null");const r=new Map;return t.forEach((t=>{const n=t?t[e]:null;if(null==n)throw N.fErr("No value for %s found in %j",e,t);r.has(n)||r.set(n,[]),r.get(n).push(t)})),r}static findValue(t,e){return e&&0!=e.length?t?P.findValue(t[e[0]],e.slice(1)):null:t}static findValueDotPath(t,e){return e&&0!=e.length?t?P.findValue(t,e.split(".")):null:t}static simpleDeepCompare(t,e){return null==t&&null==e||null!=t&&null!=e&&JSON.stringify(t)==JSON.stringify(e)}static toKeyValueList(t){const e=[];for(const r of Object.keys(t))e.push({key:r,value:t[r]});return e}static fromKeyValueList(t){const e={};return t.forEach((t=>e[t.key]=t.value)),e}static cleanup(t,e=!1,r=!0,n=!0,s=!0){if(null==t||"object"!=typeof t)return t;const o=JSON.parse(JSON.stringify(t));return Object.keys(o).forEach((t=>{if(o[t]&&"object"==typeof o[t])if(Array.isArray(o[t]))for(let e=0;e<o[t].length;e++)o[t][e]=P.cleanup(o[t][e]);else o[t]=P.cleanup(o[t]);else void 0===o[t]&&n||null===o[t]&&r||""===o[t]&&s||0===o[t]&&e?delete o[t]:o[t]=o[t]})),o}static extractValueFromMapIgnoreCase(t,e){let r=null;if(t&&e){const n=e.toLowerCase();Object.keys(t).forEach((s=>{if(s.toLowerCase()===n){const n=t[s];r&&w.warn("Multiple entries found for %s (replacing %s with %s",e,r,n),r=n}}))}return r}static safeCallFunction(t,e){let r=!1;if(t&&t[e]&&"function"==typeof t[e])try{t[e](),r=!0}catch(r){w.warn("Error calling %s on %s : %s",e,t,r,r)}return r}static caseInsensitiveAccess(t,e){let r=null;if(t&&e&&(r=t[e],!r)){const n=Object.keys(t).find((t=>t.toLowerCase()===e.toLowerCase()));n&&(r=t[n])}return r}}class v{static wrapElementsInArray(t){return t.map((t=>[t]))}static compareTwoArrays(t,e,r){t.sort(r),e.sort(r);let n=0,s=0;const o={matching:[],setOneOnly:[],setTwoOnly:[]};for(;n<t.length&&s<e.length;){const i=t[n],a=e[s],l=r(i,a);0===l?(o.matching.push(i),n++,s++):l<0?(o.setOneOnly.push(i),n++):(o.setTwoOnly.push(a),s++)}return n<t.length-1&&(o.setOneOnly=o.setOneOnly.concat(t.slice(n))),s<e.length-1&&(o.setTwoOnly=o.setTwoOnly.concat(e.slice(s))),o}static extractSubarrayFromSortedByNumberField(t,e,r,n){if(!t||0===t.length)return t;let s=null===r?0:v.findSplit(t,e,r)||0;const o=null===n?t.length:v.findSplit(t,e,n),i=P.findValueDotPath(t[s],e);return s===t.length-1&&i<r?[]:(s<t.length&&s<o&&i<r&&s++,t.slice(s,o+1))}static findSplit(t,e,r){if(y.notNullOrUndefined(t),y.notNullOrUndefined(e),y.notNullOrUndefined(r),0===t.length||P.findValueDotPath(t[0],e)>r)return null;let n=0,s=t.length,o=null;for(;null===o;){const i=Math.floor((n+s)/2),a=P.findValueDotPath(t[i],e);n===s||n===s-1?o=n:a<=r?n=i:s=i}return o}}class A{static UTF8_ENCODER=new TextEncoder;static UTF8_DECODER=new TextDecoder("utf-8");static safeObjectToBase64JSON(t){return t?A.generateBase64VersionOfString(JSON.stringify(t)):null}static safeBase64JSONParse(t){let e={};try{t&&(e=JSON.parse(A.base64StringToString(t)))}catch(r){w.warn("Error parsing b64/json : %s as json, got %s",t,r,r),e={}}return e}static generateBase64VersionOfBlob(t){return new Promise((function(e,r){if(t&&0!=t.size){const r=new FileReader;r.onloadend=function(){e(r.result.toString())},r.readAsDataURL(t)}else r("Wont convert null or non-blob or empty blob")}))}static generateBase64VersionOfString(t){return A.generateBase64VersionOfUint8Array(A.UTF8_ENCODER.encode(t))}static generateBase64VersionOfUint8Array(t){return n.btoa(A.UTF8_DECODER.decode(t))}static base64StringToUint8Array(t){return new Uint8Array(n.atob(t).split("").map((function(t){return t.charCodeAt(0)})))}static base64StringToString(t,e="utf8"){return new TextDecoder(e).decode(A.base64StringToUint8Array(t))}}class I{sources;mostRecent;constructor(t,e=!0){if(!t||0==t.length)throw Error("Cannot create composite provider with null/empty sources");this.sources=t,this.mostRecent=e}lastSuccess(){let t=null;return this.sources.forEach((e=>{const r=e.lastSuccess();null!=r&&(t=null==t||r>t&&this.mostRecent||r<t&&!this.mostRecent?r:t)})),t}}class R{static COMMON_US_DATE_FORMAT="MM/dd/yyyy";static DEFAULT_DATE_FORMAT="yyyy-MM-dd";static FULL_DATE_FORMAT="yyyy-MM-dd_HH_mm_ss";static PACIFIC_TIME_ZONE="America/Los_Angeles";static UTC_TIME_ZONE="etc/UTC";static formatFullDate(t){return r.fromJSDate(t).toFormat(R.FULL_DATE_FORMAT)}static formatDefaultDateOnly(t){return r.fromJSDate(t).toFormat(R.DEFAULT_DATE_FORMAT)}static parseDefaultDate(t){return r.fromFormat(t,R.DEFAULT_DATE_FORMAT).toJSDate()}static parseCommonUsDate(t){let e=null;if(t){let n=R.COMMON_US_DATE_FORMAT;2===t.indexOf("-")&&(n=n.split("/").join("-")),e=r.fromFormat(t,n).toJSDate()}return e}}class C{static listEnumKeys(t){return s(t).getValues()}static keyToEnum(t,e,r=!1){const n=s(t);let o=null;if(e&&(o=n.asValueOrDefault(e,null),!o&&!r)){const r=C.listEnumKeys(t).find((t=>t.toUpperCase()===e.toUpperCase()));r&&(o=n.asValueOrDefault(r,null))}return o}static parseCsvToEnumArray(t,e){return E.trimToEmpty(e).split(",").map((t=>t.trim())).map((e=>C.keyToEnum(t,e))).filter((t=>!!t))}}class F{static fetchDirName(t){if(!t)throw new Error("Need to provide root (should be import.meta.url)");return o.fileURLToPath(new URL(".",t))}static fetchFileName(t){if(!t)throw new Error("Need to provide root (should be import.meta.url)");return o.fileURLToPath(t)}}class D{_config;_cacheObject;_lastUpdatedEpochMS;_timeRemainingMS;constructor(t){this._config=Object.assign({},this.defaultConfig(),t||{}),this._config.overrideTimeRemainingMS&&this._config.timeToLiveMS&&N.throwFormattedErr("Cannot define both time to live and overrideTimeRemainingMS"),this._config.overrideTimeRemainingMS||this._config.timeToLiveMS||N.throwFormattedErr("Must define exactly one of timeToLiveMS or overrideTimeRemainingMS"),this._config.initialValue&&this.update(this._config.initialValue),this._timeRemainingMS=this._config.overrideTimeRemainingMS||this.defaultTimeRemainingMS}defaultConfig(){return{generator:null,initialValue:null,logLevel:a.debug,overrideTimeRemainingMS:null,timeToLiveMS:6e4}}async defaultTimeRemainingMS(t){let e=0;if(t){const r=(new Date).getTime()-t;e=Math.max(0,this._config.timeToLiveMS-r)}return e}update(t,e=!1){this._cacheObject=t,e||(this._lastUpdatedEpochMS=(new Date).getTime()),w.logByLevel(this._config.logLevel,"Updated cache value to %j",t)}async fetchCacheObjectTimeRemainingMS(){return this._timeRemainingMS(this._lastUpdatedEpochMS)}async fetch(){if(await this._timeRemainingMS(this._lastUpdatedEpochMS)||(this._cacheObject=null,this._lastUpdatedEpochMS=null),!this._cacheObject&&this._config.generator){const t=await this._config.generator();w.logByLevel(this._config.logLevel,"Auto call to generator returned %j",t),this.update(t)}return this._cacheObject}}class U{timeToLiveMS;generator;initialValue;logLevel;overrideTimeRemainingMS}class B{constructor(){}static distanceBetweenLocations(t,e,r,n,s="M"){const o=s?s.toUpperCase():"";if(-1===["M","K","N","F","E"].indexOf(o))throw new Error("Invalid unit");if(t==r&&e==n)return 0;{const s=Math.PI*t/180,i=Math.PI*r/180,a=e-n,l=Math.PI*a/180;let c=Math.sin(s)*Math.sin(i)+Math.cos(s)*Math.cos(i)*Math.cos(l);return c>1&&(c=1),c=Math.acos(c),c=180*c/Math.PI,c=60*c*1.1515,"F"===o&&(c*=5280),"K"===o&&(c*=1.609344),"E"===o&&(c*=1609.344),"N"===o&&(c*=.8684),c}}static distanceBetweenRatchetGeoLocations(t,e,r="M"){return B.distanceBetweenLocations(t.lat,t.lng,e.lat,e.lng,r)}static degreeOfLatLngInMiles(t=0){const e=t*Math.PI/180,r=Math.cos(e);return L.safeNumber((69.172*r).toFixed(4))}static milesInDegLatLng(t,e=0){y.notNullOrUndefined(t),y.true(t>=0);return t/B.degreeOfLatLngInMiles(e)}static centerOfBounds(t){return y.notNullOrUndefined(t),{lat:(t.extent.lat+t.origin.lat)/2,lng:(t.extent.lng+t.origin.lng)/2}}static calculateSplits(t,e,r){y.notNullOrUndefined(t),y.notNullOrUndefined(e),y.notNullOrUndefined(r),t.sort(((t,e)=>t.origin[r]-e.origin[r]));const n=t.map((t=>B.centerOfBounds(t))).map((t=>t[r])),s=[];for(let t=1;t<n.length;t++){const r=n[t]-n[t-1];s.length<e?(s.push({idx:t,size:r}),s.sort(((t,e)=>t.size-e.size))):r>s[0].size?(s[0]={idx:t,size:r},s.sort(((t,e)=>t.size-e.size))):w.silly("Skipping, size : %d, %j",r,s)}return w.info("Splits at : %j",s),s.sort(((t,e)=>t.idx-e.idx)),s}static clusterGeoBounds(t,e=2,r=5){let n=null;if(e*r<2&&N.throwFormattedErr("Cannot set slices to less than 2 : %d x %d",e,r),t){n=[];const s=Object.assign([],t);s.sort(((t,e)=>t.origin.lng-e.origin.lng));const o=B.calculateSplits(t,r-1,"lng");o.sort(((t,e)=>t.idx-e.idx));for(let t=0;t<=o.length;t++){const r=0===t?0:o[t-1].idx,i=t===o.length?s.length:o[t].idx,a=s.slice(r,i);a.sort(((t,e)=>t.origin.lat-e.origin.lat));const l=B.calculateSplits(a,e-1,"lat");for(let t=0;t<=l.length;t++){const e=0==t?0:l[t-1].idx,r=t===l.length?a.length:l[t].idx,s=a.slice(e,r);n.push(B.combineBounds(s))}}w.info("New bounds : %j",n)}return n}static canonicalizeBounds(t,e=!1){y.notNullOrUndefined(t,"RatchetLocationBounds");const r=Math.min(t.extent.lat,t.origin.lat),n=Math.max(t.extent.lat,t.origin.lat),s=Math.min(t.extent.lng,t.origin.lng),o=Math.max(t.extent.lng,t.origin.lng);if(r<0&&n>0||r>0&&n<0||(r<0&&n>0||r>0&&n<0)){if(e)return t;throw new Error("Cannot canonicalize, bounds crosses over boundary")}return{origin:{lat:r,lng:s},extent:{lat:n,lng:o}}}static combineBounds(t){let e=null;return t&&t.length>0&&(e={origin:{lat:t.map((t=>t.origin.lat)).reduce(((t,e)=>Math.min(t,e))),lng:t.map((t=>t.origin.lng)).reduce(((t,e)=>Math.min(t,e)))},extent:{lat:t.map((t=>t.extent.lat)).reduce(((t,e)=>Math.max(t,e))),lng:t.map((t=>t.extent.lng)).reduce(((t,e)=>Math.max(t,e)))}}),e}static roundLocation(t,e){return{lat:L.safeNumber(t.lat.toFixed(e)),lng:L.safeNumber(t.lng.toFixed(e))}}static locationToBounds(t,e){const r=B.milesInDegLatLng(e,t.lat);return{origin:{lat:t.lat-r,lng:t.lng-r},extent:{lat:t.lat+r,lng:t.lng+r}}}static sameLocation(t,e){return!!t&&!!e&&t.lat===e.lat&&t.lng===e.lng}static pointInBounds(t,e){return!!t&&!!e&&L.between(t.lat,e.origin.lat,e.extent.lat)&&L.between(t.lng,e.origin.lng,e.extent.lng)}static pointInAnyBound(t,e,r=10){let n=!1;if(e.length>r){const r=B.buildRatchetLocationBoundsMap(e);n=B.pointInRatchetLocationBoundsMap(t,r)}else for(let r=0;r<e.length&&!n;r++)n=B.pointInBounds(t,e[r]);return n}static pointInRatchetLocationBoundsMap(t,e){let r=!1;const n=B.findRatchetLocationBoundsMapEntry(t,e);if(n){const e=n.bounds;for(let n=0;n<e.length&&!r;n++)r=B.pointInBounds(t,e[n])}return r}static findRatchetLocationBoundsMapEntry(t,e){let r=null;if(t.lat>=e.latOffset&&t.lat<=e.maxLat&&t.lng>=e.lngOffset&&t.lng<=e.maxLng){const n=Math.trunc(t.lat)-e.latOffset,s=Math.trunc(t.lng)-e.lngOffset;r=e.mapping[n][s]}return r}static buildRatchetLocationBoundsMap(t){const e=t.map((t=>t.origin.lat)).reduce(((t,e)=>Math.min(t,e))),r=t.map((t=>t.origin.lng)).reduce(((t,e)=>Math.min(t,e))),n=t.map((t=>t.extent.lat)).reduce(((t,e)=>Math.max(t,e))),s=t.map((t=>t.extent.lng)).reduce(((t,e)=>Math.max(t,e))),o=Math.trunc(e)-1,i=Math.trunc(r)-1,a=Math.trunc(n)-o+1,l=Math.trunc(s)-i+1,c=[];for(let t=0;t<a;t++){const e=[];for(let r=0;r<l;r++)e.push({lat:o+t,lng:i+r,bounds:[]});c.push(e)}return t.forEach((t=>{for(let e=Math.trunc(t.origin.lat);e<=Math.trunc(t.extent.lat);e++){const r=c[e-o];for(let e=Math.trunc(t.origin.lng);e<=Math.trunc(t.extent.lng);e++){r[e-i].bounds.push(t)}}})),{latOffset:o,lngOffset:i,maxLat:o+a,maxLng:i+l,mapping:c}}}class j{constructor(){}static fetchGlobalRecord(t){let e=null;if(process?.env?(w.silly("Using process.env as global"),e=process.env):global?.process?.env?(w.silly("Using global.process.env as global"),e=global.process.env):global&&(w.silly("Using process.env as global"),e=global),!e){if(!t)throw N.fErr("Could not find process.env OR global in scope");w.silly("Returning null as global"),e=null}return e}static fetchGlobalVar(t){y.notNullOrUndefined(t,"envVar");return j.fetchGlobalRecord()[t]}static setGlobalVar(t,e){y.notNullOrUndefined(t,"envVar"),y.notNullOrUndefined(e,"value");j.fetchGlobalRecord()[t]=e}}class k{key;value}class V{static op(...t){}}class G{title;timeoutMS;__timeoutTokenFlagField=!0;constructor(t,e){this.title=t,this.timeoutMS=e}writeToLog(t=a.warn){w.logByLevel(t,"Timed out after %d ms waiting for results of %s",this.timeoutMS,this.title)}static isTimeoutToken(t){return!!t&&!!t.__timeoutTokenFlagField}}class z{label;starts=new Map;ends=new Map;createTime=Date.now();constructor(t=E.createRandomHexString(4)){this.label=t}start(t){y.notNullUndefinedOrOnlyWhitespaceString(t,"name");const e=Date.now();return this.starts.set(E.trimToNull(t),e),e}stop(t){y.notNullUndefinedOrOnlyWhitespaceString(t,"name");const e=Date.now();return this.ends.set(E.trimToNull(t),e),e}reset(t){y.notNullUndefinedOrOnlyWhitespaceString(t,"name"),this.starts.delete(E.trimToNull(t)),this.ends.delete(E.trimToNull(t))}hasTimer(t){return y.notNullUndefinedOrOnlyWhitespaceString(t,"name"),this.starts.has(t)}log(t,e,r=a.info){w.logByLevel(r,this.dump(t,e))}logExpected(t,e,r,n=a.info){w.logByLevel(n,this.dumpExpected(t,e,r))}timerNames(){return Array.from(this.starts.keys())}dumpAll(t=", ",e){const r=this.timerNames().map((t=>this.dump(t,e)));let n="Overall: "+this.dump(null,e);return r.length>0&&(n+=t,n+=r.join(t)),n}dump(t,e){let r=this.label+" ";const n=E.trimToNull(t);if(n&&!this.hasTimer(n))r+="No such timer : "+n;else{const s=t?this.starts.get(n):this.createTime,o=t?this.ends.get(n):Date.now();r+=(n||"Default")+" ",s&&o?r+="completed in "+M.formatMsDuration(o-s,!e):s&&(r+="running for "+M.formatMsDuration(Date.now()-s,!e))}return r}dumpExpected(t,e,r){let n=this.label+" ";const s=E.trimToNull(e);if(s&&!this.hasTimer(s))n+="No such timer : "+s;else if(!t||t<=0)n+="Cannot generate output for 0 percent complete";else if(t>1)n+="Cannot generate output for percent > 1";else{n+=(s||"Default")+" ";const o=e?this.starts.get(s):this.createTime,i=e?this.ends.get(s):Date.now();if(o&&i)n+="completed in "+M.formatMsDuration(i-o,!r);else if(o){const e=Date.now()-o,s=e/t-e;n+="running for "+M.formatMsDuration(e,!r)+" approx "+M.formatMsDuration(s,!r)+" remaining"}}return n}expectedRemainingMS(t,e){let r=null;if(!t||t<=0);else if(t>1);else{const n=E.trimToNull(e),s=e?this.starts.get(n):this.createTime,o=e?this.ends.get(n):Date.now();if(s&&o)r=o-s;else if(s){const e=Date.now()-s;r=e/t-e}}return r}elapsedMS(t){let e=null;const r=E.trimToNull(t);if(r&&!this.hasTimer(r))e=null;else{const n=t?this.starts.get(r):this.createTime,s=t?this.ends.get(r):Date.now();n&&s?e=s-n:n&&(e=Date.now()-n)}return e}}class K{static resolveOnEvent(t,e,r=[],n=null){return t&&e&&0!==e.length&&t.on||Promise.reject("Cannot continue - missing source object or name, or the object is not an event source"),new Promise(((s,o)=>{e.forEach((e=>{t.on(e,(()=>{s(n)}))})),r&&r.forEach((e=>{t.on(e,(t=>{o(t)}))}))}))}static timeout(t,e,r){return Promise.race([t,K.createTimeoutPromise(e,r)])}static createTimeoutPromise(t,e){return new Promise(((r,n)=>{const s=setTimeout((()=>{clearTimeout(s);const n=new G(t,e);r(n)}),e)}))}static async wait(t){await K.createTimeoutPromise("Wait "+t,t),w.silly("Finished wait of %d ms",t)}static dumpResult(t,e=!1){w.info("Success, result was : \n\n%s\n\n",JSON.stringify(t)),process.exit(0)}static dumpError(t,e=!1){w.warn("Failure, err was : \n\n%s\n\n -- \n\n%s\n\n",JSON.stringify(t),String(t)),console.trace(),process.exit(1)}static logErrorAndReturnNull(t,e=!1){return w.warn("Failure, err was : \n\n%s\n\n -- \n\n%s\n\n",JSON.stringify(t),String(t)),null}static runPromiseAndDump(t){t.then(K.dumpResult).catch(K.dumpError)}static async waitFor(t,e,r,n,s="waitFor",o=0){if(null==e||r<50||n<1||o<0||"function"!=typeof t)return w.warn("%s: Invalid configuration for waitFor - exiting immediately",s),w.warn("ExpectedValue : %s ; interval: %d ; maxCycles: %d ; test : %s",e,r,n,typeof t),!1;let i=null;try{i=t(o)}catch(t){return w.warn("%s: Caught error while waiting, giving up",s),!1}return null===i?(w.debug("%s:CurVal was null - aborting",s),!1):i==e?(w.debug("%s:Found expected value",s),!0):o>n?(w.debug("%s:Exceeded max cycles, giving up",s),!1):(w.debug("%s : value not reached yet, waiting (count = %d of %d)",s,o,n),await K.wait(r),K.waitFor(t,e,r,n,s,o+1))}static async runBoundedParallel(t,e,r,n=1,s=a.debug){const o=new z;let i=[],l=e;w.logByLevel(s,"Processing %d total elements %d at a time",e.length,n);const c=r||this;let u=0;const g=l.length;for(;l.length>0;){const e=l.slice(0,Math.min(l.length,n));l=l.slice(e.length);const r=e.map((e=>t.apply(c,e))),a=await Promise.all(r);u+=r.length,i=i.concat(a);const h=u/g;w.logByLevel(s,"%d elements remain : %s",l.length,o.dumpExpected(h))}return o.log(),i}static async runBoundedParallelSingleParam(t,e,r,n=1,s=a.debug){const o=v.wrapElementsInArray(e);return K.runBoundedParallel(t,o,r,n,s)}static async asyncForEachSerial(t,e){for(let r=0;r<t.length;r++)await e(t[r],r,t)}static async asyncForEachParallel(t,e){const r=[];for(let n=0;n<t.length;n++)r.push(e(t[n],n,t));await Promise.all(r)}constructor(){}}class W{static PACIFIC=new W("America/Los_Angeles");timezone;constructor(t){if(!t)throw"Timezone cannot be null";this.timezone=t}currentHour(){return r.local().setZone(this.timezone).hour}toEpochSeconds(t){return Math.round(t.toMillis()/1e3)}startOfTodayEpochSeconds(){return this.toEpochSeconds(r.local().setZone(this.timezone).set({hour:0,minute:0,second:0,millisecond:0}))}startOfMatchingDayEpochSeconds(t){return this.toEpochSeconds(r.fromMillis(t).set({hour:0,minute:0,second:0,millisecond:0}))}startOfMatchingDayEpochMS(t){return 1e3*this.startOfMatchingDayEpochSeconds(t)}startOfCurrentHourEpochSeconds(){return this.toEpochSeconds(r.local().setZone(this.timezone).set({minute:0,second:0,millisecond:0}))}startOfCurrentMinuteEpochSeconds(){return this.toEpochSeconds(r.local().setZone(this.timezone).set({second:0,millisecond:0}))}startOfCurrentSecondEpochSeconds(){return this.toEpochSeconds(r.local().setZone(this.timezone).set({millisecond:0}))}startOfTodayEpochMS(){return r.local().setZone(this.timezone).set({hour:0,minute:0,second:0,millisecond:0}).toMillis()}dailySlotCount(t){return Math.ceil(864e5/t)}currentTimeSlotIdx(t){if(t<1)throw new Error("Cannot process with slot less than one ms wide");const e=this.startOfTodayEpochMS(),r=(new Date).getTime()-e;return Math.floor(r/t)}matchingTimeSlotIdx(t,e){if(e<1)throw new Error("Cannot process with slot less than one ms wide");const r=t-this.startOfMatchingDayEpochMS(t);return Math.floor(r/e)}startOfCurrentSlotEpochMS(t){return this.startOfTodayEpochMS()+this.currentTimeSlotIdx(t)*t}startOfMatchingSlotEpochMS(t,e){return this.startOfMatchingDayEpochMS(t)+this.matchingTimeSlotIdx(t,e)*e}}class H{constructor(){}static mergeArrays(t){let e=null;if(t?.length){let r=0;t.forEach((t=>{r+=t.length})),e=new Uint8Array(r);let n=0;t.forEach((t=>{e.set(t,n),n+=t.length}))}return e}}class J{constructor(){}static async webReadableStreamToUint8Array(t){const e=[],r=new WritableStream({write:async(t,r)=>("string"==typeof t?e.push(E.stringToUint8Array(t)):e.push(t),null),abort(t){N.throwFormattedErr("StringWebWritableStream failure : %s",t)}},{highWaterMark:3,size:()=>1});return await t.pipeTo(r),H.mergeArrays(e)}static async webReadableStreamToString(t){const e=await J.webReadableStreamToUint8Array(t);return(new TextDecoder).decode(e)}static stringToWebReadableStream(t){return new ReadableStream({start:e=>(t&&e.enqueue(t),e.close(),null)},{highWaterMark:t?t.length:null})}}class Z{wrapped;constructor(t,e){if(!t)throw Error("Cannot set level to null/undefined");this.wrapped={lvl:t,timestamp:Date.now(),messageSource:e}}clone(){const t=new Z(this.wrapped.lvl,this.wrapped.messageSource);return t.wrapped=Object.assign({},this.wrapped),t}level(t){if(!t)throw Error("Cannot set level to null/undefined");return this.wrapped.lvl=t,this}timestamp(t){if(!t)throw Error("Cannot set timestamp to null/undefined");return this.wrapped.timestamp=t,this}messageSource(t){return this.wrapped.messageSource=t,this}subVars(t){return this.wrapped.subsVars=t||[],this}params(t){return this.wrapped.params=t||{},this}p(t,e){return this.wrapped.params=this.wrapped.params||{},this.wrapped.params[t]=e,this}toMessage(){return Object.assign({},this.wrapped)}}class q{static LOCAL_IP=null;static findLocalIp(t=!0){return w.info("Attempting to find local IP (V 2)"),q.LOCAL_IP&&t?Promise.resolve(q.LOCAL_IP):"undefined"!=typeof window?new Promise((function(t,e){try{const e=window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection;if(e){const r=new e({iceServers:[]}),n=Object.create(null);n["0.0.0.0"]=!1,r.createDataChannel("",{reliable:!1}),r.onicecandidate=function(e){e.candidate&&q.grepSDP("a="+e.candidate.candidate,n,t)},r.createOffer((function(e){q.grepSDP(e.sdp,n,t),r.setLocalDescription(e)}),(function(e){w.warn("Offer failed : %s",e),t(q.updateLocalIP("FIND_UNSUPPORTED"))}))}else w.warn("IP Address find not supported on this device"),t(q.updateLocalIP("FIND_UNSUPPORTED"))}catch(e){w.warn("Error finding local ip address : %s",e),t(q.updateLocalIP("ERROR"))}})):(w.warn("Window not found, cannot calculate local ip"),Promise.resolve(q.updateLocalIP("NO_WINDOW")))}static parseUrl(t){const e=t.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);return e&&{href:t,protocol:e[1],host:e[2],hostname:e[3],port:e[4],pathname:e[5],search:e[6],hash:e[7]}}static updateLocalIP(t){return q.LOCAL_IP=t,q.LOCAL_IP}static grepSDP(t,e,r){t.split("\r\n").forEach((function(t){if(~t.indexOf("a=candidate")){const n=t.split(" "),s=n[4];"host"===n[7]&&q.updateAddressList(s,e,r)}else if(~t.indexOf("c=")){const n=t.split(" ")[2];q.updateAddressList(n,e,r)}}))}static updateAddressList(t,e,r){if(t in e)return;e[t]=!0;const n=Object.keys(e).filter((function(t){return e[t]}));if(n&&1==n.length)r(q.updateLocalIP(n[0]));else{const t=n.sort().join(",");w.warn("Multiple addresses found, returning sorted join : %s",t),r(q.updateLocalIP(t))}}}class X{currentIp="UNSET";constructor(){q.findLocalIp(!1).then((t=>{w.info("Setting local IP to %s",t),this.currentIp=t})).catch((t=>{w.warn("Unable to set current IP - leaving as UNSET : %s",t)}))}ready(){return"UNSET"!==this.currentIp}currentLocalIpAddress(){return this.currentIp}}class ${fixed;constructor(t){this.fixed=t}currentLocalIpAddress(){return this.fixed}}class Y extends Error{static RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY="__ratchetRestfulApiHttpErrorFlag";_httpStatusCode=500;_errors;_detailErrorCode;_endUserErrors;_details;_requestId;_wrappedError;constructor(...t){super(Y.combineErrorStringsWithDefault(t)),Object.setPrototypeOf(this,Y.prototype),this._errors=t,this[Y.RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY]=!0}static combineErrorStringsWithDefault(t,e="Internal Server Error"){return t&&t.length>0?t.join(","):e}setFormattedErrorMessage(e,...r){const n=t.format(e,...r);this.errors=[n]}withFormattedErrorMessage(t,...e){return this.setFormattedErrorMessage(t,...e),this}withHttpStatusCode(t){return this.httpStatusCode=t,this}withErrors(t){return this.errors=t,this}withDetailErrorCode(t){return this._detailErrorCode=t,this}withEndUserErrors(t){return this._endUserErrors=t,this}withDetails(t){return this._details=t,this}withRequestId(t){return this._requestId=t,this}withWrappedError(t){return this._wrappedError=t,this}isWrappedError(){return!!this._wrappedError}static wrapError(t){let e=null;return e=Y.objectIsRestfulApiHttpError(t)?t:new Y(t.message).withWrappedError(t).withHttpStatusCode(500),e}static objectIsRestfulApiHttpError(t){return t&&!0===t[Y.RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY]}get httpStatusCode(){return this._httpStatusCode}get errors(){return this._errors}get detailErrorCode(){return this._detailErrorCode}get endUserErrors(){return this._endUserErrors}get details(){return this._details}get requestId(){return this._requestId}get wrappedError(){return this._wrappedError}set httpStatusCode(t){this._httpStatusCode=t||500}set errors(t){this._errors=t||["Internal Server Error"],this.message=Y.combineErrorStringsWithDefault(this._errors)}set detailErrorCode(t){this._detailErrorCode=t}set endUserErrors(t){this._endUserErrors=t}set details(t){this._details=t}set requestId(t){this._requestId=t||"MISSING"}set wrappedError(t){this._wrappedError=t}static errorIsX0x(t,e){let r=!1;if(t&&Y.objectIsRestfulApiHttpError(t)){const n=t,s=L.safeNumber(n.httpStatusCode),o=100*e;r=s>=o&&s<=o+99}return r}static errorIs40x(t){return Y.errorIsX0x(t,4)}static errorIs50x(t){return Y.errorIsX0x(t,5)}}class Q{static GOOGLE_VERIFY_URL="https://www.google.com/recaptcha/api/siteverify?secret={{KEY}}&response={{TOKEN}}";static async verifyRecaptchaToken(t,e,r=i){w.debug("Verifying recaptcha token : %s",e);let n=null;if(!E.safeString(e))return w.warn("Recaptcha validation error, no token passed : %s",e),n;w.info("Validating Recaptcha via Google API : %s",e);let s=Q.GOOGLE_VERIFY_URL;s=s.split("{{KEY}}").join(t),s=s.split("{{TOKEN}}").join(e);try{const t=await r(s),e=await t.json();n=e&&e.success}catch(t){w.error("Failed to read from google : %s",t),n=!1}return n}}class tt{accountSid;authToken;outBoundNumber;static TWILLIO_BASE_API_URL="https://api.twilio.com/2010-04-01";constructor(t,e,r){this.accountSid=t,this.authToken=e,this.outBoundNumber=r,y.notNullOrUndefined(t,"accountSid"),y.notNullOrUndefined(e,"authToken"),y.notNullOrUndefined(r,"outBoundNumber"),y.true(tt.isValidE164Number(r),"outBoundNumber invalid format")}static async sendMessageDirect(t,e,r,n,s){const o=new tt(t,e,r);return await o.sendMessage(n,s)}static generateTwilioBasicAuth(t,e){return"Basic "+A.generateBase64VersionOfString(t+":"+e)}async sendMessage(t,e){const r=[];if(y.notNullOrUndefined(t,"recipientPhoneNumbers"),y.notNullOrUndefined(E.trimToNull(e),"message"),y.true(t.length>0,"recipientPhoneNumbers non-empty"),t.forEach((t=>{y.true(tt.isValidE164Number(t),t+" is not valid")})),t&&t.length>0&&E.trimToNull(e)){w.info("Sending %s to %j",e,t);for(let n=0;n<t.length;n++){const s=t[n];if(w.info("To: %s",s),!tt.isValidE164Number(s))throw new Error("number must be E164 format!");const o="Body="+encodeURIComponent(e)+"&From="+encodeURIComponent(this.outBoundNumber)+"&To="+encodeURIComponent(s),a={method:"post",headers:{authorization:tt.generateTwilioBasicAuth(this.accountSid,this.authToken),"Content-Type":"application/x-www-form-urlencoded"},body:o},l=await i(tt.TWILLIO_BASE_API_URL+"/Accounts/"+this.accountSid+"/Messages.json",a),c=await l.json();w.debug("TwilioRatchet: For %s got %j",s,c),r.push(c)}}else w.warn("Not sending empty message / empty recipients");return r}static isValidE164Number(t){return/^\+?[1-9]\d{1,14}$/.test(t)}}class et{static keysOnly(t){return{transform:(e,r,n)=>r?t.transform(e,r,n):e}}static valuesOnly(t){return{transform:(e,r,n)=>r?e:t.transform(e,r,n)}}static stringReplaceTransform(t,e){return{transform:(r,n,s)=>r==t?e:r}}static stripStringTransform(t){return{transform:(e,r,n)=>e==t?null:e}}static retainAll(t){return{transform:(e,r,n)=>-1==t.indexOf(e)?null:e}}static removeAll(t){return{transform:(e,r,n)=>t.indexOf(e)>-1?null:e}}static snakeToCamelCase(){return{transform(t,e,r){let n=t;return"string"==typeof t&&(n=t.replace(/_([a-z0-9])/gi,(function(t,e){return e.toUpperCase()}))),n}}}static stringToNumber(){return{transform(t,e,r){let n=t;if("string"==typeof t){const e=L.safeNumber(t);null!==e&&(n=e)}return n}}}static camelToSnakeCase(){return{transform(t,e,r){let n=t;return"string"==typeof t&&(n=t.replace(/\.?([A-Z]+)/g,(function(t,e){return"_"+e.toLowerCase()})).replace(/^_/,"")),n}}}static concatenateToNewField(t,e,r=!0){return{transform(n,s,o){if("object"==typeof n){let s="";e.forEach((t=>{if(null!=s){const e=n[t];s=null==e&&r?null:null==e?s:s+String(e)}})),null!=s&&(n[t]=s,e.forEach((t=>delete n[t])))}return n}}}static numberToBool(t){return{transform:(e,r,n)=>("object"==typeof e&&t.forEach((t=>{const r=e[t];if("number"==typeof r){const n=0!=r;e[t]=n}})),e)}}static boolToNumber(t){return{transform:(e,r,n)=>("object"==typeof e&&t.forEach((t=>{const r=e[t];if("boolean"==typeof r){const n=r?1:0;e[t]=n}})),e)}}static makeDuplicateField(t,e){return{transform(r,n,s){if("object"==typeof r){const n=r[t];null!=n&&(r[e]=n)}return r}}}static addField(t,e){return{transform:(r,n,s)=>("object"==typeof r&&(r[t]=e),r)}}static reformatDateFields(t,e,n){return{transform:(s,o,i)=>("object"==typeof s&&t.forEach((t=>{const o=s[t];if(null!=o)try{const i=r.fromFormat(o,e).toFormat(n);s[t]=i}catch(t){w.warn("Failed to reparse date %s in format %s : %s",o,e,t)}})),s)}}}class rt{static transform(t,e=[]){return rt.transformGeneric(t,e,!1,null)}static transformGeneric(t,e=[],r,n){let s=null;const o=typeof t;switch(o){case"undefined":case"symbol":case"function":s=t;break;case"number":case"string":case"boolean":s=rt.applyTransformToPrimitive(t,e,r,n);break;case"object":s=rt.applyTransformToObject(t,e,r,n);break;default:throw new Error("Unrecognized type "+o)}return s}static applyTransformToObject(t,e=[],r,n=null){w.silly("Tranform: %j, %s, %j",t,r,n);let s=null;return null!=t&&(Array.isArray(t)?(s=[],t.forEach((n=>{const o=rt.transformGeneric(n,e,r,t);null!=o&&s.push(o)}))):(s={},Object.keys(t).forEach((r=>{const n=t[r],o=rt.applyTransformToPrimitive(r,e,!0,t);if(null!=o){let r=rt.transformGeneric(n,e,!1,t);r=rt.applyTransformToPrimitive(r,e,!1,t),null!=r&&(s[o]=r)}})),s=rt.applyTransformToPrimitive(s,e,!1,t))),s}static applyTransformToPrimitive(t,e=[],r,n){let s=t;return e.forEach((t=>{s=null==s?null:t.transform(s,r,n)})),s}}!function(t){t.Success="Success",t.RolledBack="RolledBack",t.RollbackFailed="RollbackFailed"}(g||(g={}));class nt{static async execute(t,e,r){y.notNullOrUndefined(t,"steps"),y.notNullOrUndefined(e,"initialContext"),y.true(t.length>0,"steps may not be empty");const n=Object.assign({},r||{});n.stepLogLevel=n.stepLogLevel||a.info;const s={finalContext:e,finalState:null},o=t.map(((t,e)=>t.name||"Step "+e));w.info("Beginning transaction of %d steps",t.length);let i=0;do{w.logByLevel(n.stepLogLevel,"Processing step %d of %d (%s)",i+1,t.length,o[i]);try{await t[i].execute(s.finalContext,i),i++}catch(t){w.error("Failure detected on step %d : %s : %s : Rolling back",i,o[i],t,t),s.error=t,s.errorStep=i}}while(!s.error&&i<t.length);if(s.error)do{w.logByLevel(n.stepLogLevel,"Rolling back step %d of %d (%s)",i+1,t.length,o[i]);try{t[i].rollback?await t[i].rollback(s.finalContext,i):w.info("Skipping - no rollback defined")}catch(t){w.error("Very bad - rollback code failed on step %d : %s : Aborting in invalid state: %s",i,o[i],t,t),s.rollbackError=t,s.rollbackErrorStep=i}i--}while(i>=0);if(s.finalState=s.rollbackError?g.RollbackFailed:s.error?g.RolledBack:g.Success,w.info("Transaction completed with status : %s",s.finalState),n?.executeAfterRollback&&s.finalState!==g.Success)try{w.info("Applying executeAfterRollback"),await n.executeAfterRollback(s)}catch(t){w.error("Very bad - failure in executeAfterRollback : %s",t,t)}if(n?.executeAfterRollbackFailure&&s.finalState!==g.Success)try{w.info("Applying executeAfterRollbackFailure"),await n.executeAfterRollbackFailure(s)}catch(t){w.error("Very bad - failure in executeAfterRollbackFailure : %s",t,t)}return s}}export{v as ArrayRatchet,A as Base64Ratchet,T as BooleanRatchet,X as BrowserLocalIpProvider,et as BuiltInTransforms,d as ClassicSingleLineLogMessageFormatter,I as CompositeLastSuccessProvider,R as DateRatchet,M as DurationRatchet,C as EnumRatchet,N as ErrorRatchet,F as EsmRatchet,u as ExpiredJwtHandling,D as ExpiringObject,U as ExpiringObjectConfig,$ as FixedLocalIpProvider,B as GeolocationRatchet,j as GlobalRatchet,Q as GoogleRecaptchaRatchet,O as Histogram,x as JwtRatchet,k as KeyValue,Z as LogMessageBuilder,c as LogMessageFormatType,w as Logger,b as LoggerInstance,a as LoggerLevelName,l as LoggerOutputFunction,h as LoggerRingBuffer,f as LoggerUtil,P as MapRatchet,q as NetworkRatchet,V as No,p as NoneLogMessageFormatter,L as NumberRatchet,K as PromiseRatchet,S as Ratchet2d,_ as RatchetInfo,y as RequireRatchet,Y as RestfulApiHttpError,z as StopWatch,E as StringRatchet,m as StructuredJsonLogMessageFormatter,W as TimeZoneRatchet,G as TimeoutToken,g as TransactionFinalState,nt as TransactionRatchet,rt as TransformRatchet,tt as TwilioRatchet,H as Uint8ArrayRatchet,J as WebStreamRatchet};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/logger/logger-level-name.ts","../src/logger/logger-output-function.ts","../src/logger/log-message-format-type.ts","../src/jwt/expired-jwt-handling.ts","../src/tx/transaction-final-state.ts","../src/logger/logger-ring-buffer.ts","../src/logger/logger-util.ts","../src/logger/classic-single-line-log-message-formatter.ts","../src/logger/none-log-message-formatter.ts","../src/logger/structured-json-log-message-formatter.ts","../src/lang/require-ratchet.ts","../src/lang/string-ratchet.ts","../src/logger/logger-instance.ts","../src/logger/logger.ts","../src/lang/number-ratchet.ts","../src/lang/boolean-ratchet.ts","../src/2d/ratchet-2d.ts","../src/build/ratchet-common-info.ts","../src/histogram/histogram.ts","../src/lang/duration-ratchet.ts","../src/jwt/jwt-ratchet.ts","../src/lang/error-ratchet.ts","../src/lang/map-ratchet.ts","../src/lang/array-ratchet.ts","../src/lang/base64-ratchet.ts","../src/lang/composite-last-success-provider.ts","../src/lang/date-ratchet.ts","../src/lang/enum-ratchet.ts","../src/lang/esm-ratchet.ts","../src/lang/expiring-object.ts","../src/lang/geolocation-ratchet.ts","../src/lang/global-ratchet.ts","../src/lang/key-value.ts","../src/lang/no.ts","../src/lang/timeout-token.ts","../src/lang/stop-watch.ts","../src/lang/promise-ratchet.ts","../src/lang/time-zone-ratchet.ts","../src/lang/uint-8-array-ratchet.ts","../src/lang/web-stream-ratchet.ts","../src/logger/log-message-builder.ts","../src/network/network-ratchet.ts","../src/network/browser-local-ip-provider.ts","../src/network/fixed-local-ip-provider.ts","../src/network/restful-api-http-error.ts","../src/third-party/google/google-recaptcha-ratchet.ts","../src/third-party/twilio/twilio-ratchet.ts","../src/transform/built-in-transforms.ts","../src/transform/transform-ratchet.ts","../src/tx/transaction-ratchet.ts"],"sourcesContent":["export var LoggerLevelName;\n(function (LoggerLevelName) {\n LoggerLevelName[\"error\"] = \"error\";\n LoggerLevelName[\"warn\"] = \"warn\";\n LoggerLevelName[\"info\"] = \"info\";\n LoggerLevelName[\"verbose\"] = \"verbose\";\n LoggerLevelName[\"debug\"] = \"debug\";\n LoggerLevelName[\"silly\"] = \"silly\";\n})(LoggerLevelName || (LoggerLevelName = {}));\n//# sourceMappingURL=logger-level-name.js.map","export var LoggerOutputFunction;\n(function (LoggerOutputFunction) {\n LoggerOutputFunction[\"Console\"] = \"Console\";\n LoggerOutputFunction[\"ConsoleNoDebug\"] = \"ConsoleNoDebug\";\n LoggerOutputFunction[\"StdOut\"] = \"StdOut\";\n})(LoggerOutputFunction || (LoggerOutputFunction = {}));\n//# sourceMappingURL=logger-output-function.js.map","export var LogMessageFormatType;\n(function (LogMessageFormatType) {\n LogMessageFormatType[\"ClassicSingleLine\"] = \"ClassicSingleLine\";\n LogMessageFormatType[\"StructuredJson\"] = \"StructuredJson\";\n LogMessageFormatType[\"None\"] = \"None\";\n})(LogMessageFormatType || (LogMessageFormatType = {}));\n//# sourceMappingURL=log-message-format-type.js.map","export var ExpiredJwtHandling;\n(function (ExpiredJwtHandling) {\n ExpiredJwtHandling[ExpiredJwtHandling[\"RETURN_NULL\"] = 0] = \"RETURN_NULL\";\n ExpiredJwtHandling[ExpiredJwtHandling[\"THROW_EXCEPTION\"] = 1] = \"THROW_EXCEPTION\";\n ExpiredJwtHandling[ExpiredJwtHandling[\"ADD_FLAG\"] = 2] = \"ADD_FLAG\";\n})(ExpiredJwtHandling || (ExpiredJwtHandling = {}));\n//# sourceMappingURL=expired-jwt-handling.js.map","export var TransactionFinalState;\n(function (TransactionFinalState) {\n TransactionFinalState[\"Success\"] = \"Success\";\n TransactionFinalState[\"RolledBack\"] = \"RolledBack\";\n TransactionFinalState[\"RollbackFailed\"] = \"RollbackFailed\";\n})(TransactionFinalState || (TransactionFinalState = {}));\n//# sourceMappingURL=transaction-final-state.js.map","import { LoggerLevelName } from './logger-level-name.js';\nexport class LoggerRingBuffer {\n _lastLogMessage = { messageSource: 'No message yet', timestamp: new Date().getTime(), lvl: LoggerLevelName.info };\n _buffer = [];\n _bufferIdx = 0;\n _lastSnapshotIdx = 0;\n _bufferSize;\n constructor(size) {\n if (!size) {\n throw new Error('Cannot create ring buffer of size 0');\n }\n this._bufferSize = size;\n }\n get currentIndex() {\n return this._bufferIdx;\n }\n get lastSnapshotIdx() {\n return this._lastSnapshotIdx;\n }\n set bufferSize(newSize) {\n if (!newSize) {\n throw new Error('Cannot create ring buffer of size 0');\n }\n this._bufferSize = newSize;\n this.clearRingBuffer();\n }\n getMessages(inStartFrom = null, clear = false, reverseSort = false) {\n let rval = null;\n if (this._bufferIdx < this._bufferSize) {\n const start = inStartFrom == null ? 0 : inStartFrom;\n rval = this._buffer.slice(start, this._bufferIdx);\n }\n else {\n rval = [];\n const firstIdx = this._bufferIdx - this._bufferSize;\n const startFrom = inStartFrom ? Math.max(inStartFrom, firstIdx) : firstIdx;\n for (let i = startFrom; i < this._bufferIdx; i++) {\n rval.push(this._buffer[i % this._bufferSize]);\n }\n }\n if (clear) {\n this.clearRingBuffer();\n }\n if (reverseSort) {\n rval = rval.reverse();\n }\n return rval;\n }\n takeSnapshot() {\n const trailingEdge = Math.max(0, this._bufferIdx - this._bufferSize);\n const rval = {\n messages: this.getMessages(this._lastSnapshotIdx),\n logMessagesTruncated: Math.max(0, trailingEdge - this._lastSnapshotIdx),\n };\n this._lastSnapshotIdx = this._bufferIdx;\n return rval;\n }\n getLastLogMessage() {\n return Object.assign({}, this._lastLogMessage);\n }\n clearRingBuffer() {\n this._buffer = [];\n this._bufferIdx = 0;\n this._lastSnapshotIdx = 0;\n }\n addToRingBuffer(newMsg) {\n this._lastLogMessage = newMsg;\n this._buffer[this._bufferIdx % this._bufferSize] = newMsg;\n this._bufferIdx++;\n }\n}\n//# sourceMappingURL=logger-ring-buffer.js.map","import { LoggerLevelName } from './logger-level-name.js';\nimport { LoggerOutputFunction } from './logger-output-function.js';\nexport class LoggerUtil {\n static LOG_LEVELS_IN_ORDER = [\n LoggerLevelName.error,\n LoggerLevelName.warn,\n LoggerLevelName.info,\n LoggerLevelName.verbose,\n LoggerLevelName.debug,\n LoggerLevelName.silly,\n ];\n static handlerFunctionMap(outputFn = LoggerOutputFunction.Console) {\n const output = new Map();\n if (outputFn === LoggerOutputFunction.StdOut) {\n if (!process?.stdout?.write) {\n throw new Error('Cannot use standard out - process.stdout.write not found');\n }\n const myStdOut = (chunk, cb) => process.stdout.write(chunk, 'utf-8', cb);\n output.set(LoggerLevelName.error, myStdOut);\n output.set(LoggerLevelName.warn, myStdOut);\n output.set(LoggerLevelName.info, myStdOut);\n output.set(LoggerLevelName.verbose, myStdOut);\n output.set(LoggerLevelName.debug, myStdOut);\n output.set(LoggerLevelName.silly, myStdOut);\n }\n else {\n output.set(LoggerLevelName.error, console.error);\n output.set(LoggerLevelName.warn, console.warn);\n output.set(LoggerLevelName.info, console.info);\n output.set(LoggerLevelName.verbose, outputFn === LoggerOutputFunction.ConsoleNoDebug ? console.log : console.debug);\n output.set(LoggerLevelName.debug, outputFn === LoggerOutputFunction.ConsoleNoDebug ? console.log : console.debug);\n output.set(LoggerLevelName.silly, outputFn === LoggerOutputFunction.ConsoleNoDebug ? console.log : console.debug);\n }\n return output;\n }\n static defaultHandlerFunction() {\n return console.info;\n }\n static levelIsEnabled(targetLevel, currentEnabled) {\n const idxTarget = LoggerUtil.LOG_LEVELS_IN_ORDER.indexOf(targetLevel);\n const lvl = LoggerUtil.LOG_LEVELS_IN_ORDER.indexOf(currentEnabled);\n return idxTarget > -1 && lvl > -1 && lvl >= idxTarget;\n }\n}\n//# sourceMappingURL=logger-util.js.map","import util from 'util';\nexport class ClassicSingleLineLogMessageFormatter {\n formatMessage(msg, meta) {\n let tmp = null;\n if (msg) {\n tmp = '';\n tmp += meta.options.trace ? meta.options.trace + ' ' : '';\n tmp += '[' + msg.lvl + '] ';\n tmp += util.format(msg.messageSource, ...msg.subsVars);\n }\n return tmp;\n }\n}\n//# sourceMappingURL=classic-single-line-log-message-formatter.js.map","export class NoneLogMessageFormatter {\n formatMessage(msg, meta) {\n return null;\n }\n}\n//# sourceMappingURL=none-log-message-formatter.js.map","import util from 'util';\nexport class StructuredJsonLogMessageFormatter {\n formatMessage(msg, meta) {\n let rval = null;\n if (msg) {\n const tmp = Object.assign({}, meta.options.globalVars || {}, msg.params || {});\n tmp['msg'] = util.format(msg.messageSource, ...msg.subsVars);\n tmp['utcDateTime'] = new Date(msg.timestamp).toISOString();\n tmp['logLevel'] = msg.lvl;\n if (meta.options.trace) {\n tmp['trace'] = meta.options.trace;\n }\n tmp['logName'] = meta.loggerInstanceName;\n tmp['logId'] = meta.loggerInstanceId;\n rval = JSON.stringify(tmp) + '\\n';\n }\n return rval;\n }\n}\n//# sourceMappingURL=structured-json-log-message-formatter.js.map","export class RequireRatchet {\n static isNullOrUndefined(ob) {\n return ob === null || ob === undefined;\n }\n static notNullOrUndefined(ob, name = 'object') {\n if (RequireRatchet.isNullOrUndefined(ob)) {\n throw new Error(name + ' may not be null or undefined');\n }\n }\n static notNullUndefinedOrOnlyWhitespaceString(ob, name = 'string') {\n if (RequireRatchet.isNullOrUndefined(ob) || ob.trim() === '') {\n throw new Error(name + ' may not be null or undefined or only whitespace string');\n }\n }\n static notNullUndefinedOrEmptyArray(ob, name = 'string') {\n if (RequireRatchet.isNullOrUndefined(ob) || ob.length === 0) {\n throw new Error(name + ' may not be null or undefined or an empty array');\n }\n }\n static equal(ob1, ob2, message = 'Values must be equal') {\n if (ob1 !== ob2) {\n throw new Error(message);\n }\n }\n static true(ob, message = 'Value must be true') {\n RequireRatchet.equal(ob, true, message);\n }\n static noNullOrUndefinedValuesInArray(arr, expectedLength = null, customMsg = null) {\n RequireRatchet.notNullOrUndefined(arr, 'Source array may not be null');\n if (expectedLength !== null && arr.length !== expectedLength) {\n throw new Error(`Expected array of length ${expectedLength} but was ${arr.length} ${customMsg}`);\n }\n for (let i = 0; i < arr.length; i++) {\n if (RequireRatchet.isNullOrUndefined(arr[i])) {\n throw new Error(`Array index ${i} was null or undefined ${customMsg}`);\n }\n }\n }\n static noNullOrUndefinedValuesInRestArgs(expectedLength, ...restArgs) {\n RequireRatchet.notNullOrUndefined(restArgs, 'Source array may not be null');\n if (expectedLength !== null && restArgs.length !== expectedLength) {\n throw new Error(`Expected array of length ${expectedLength} but was ${restArgs.length}`);\n }\n for (let i = 0; i < restArgs.length; i++) {\n if (RequireRatchet.isNullOrUndefined(restArgs[i])) {\n throw new Error(`Array index ${i} was null or undefined`);\n }\n }\n }\n static constructorArgumentsMatchLengthAndAreNonNull() {\n const args = Array.from(arguments);\n const len = this.constructor.length;\n return RequireRatchet.noNullOrUndefinedValuesInArray(args, len);\n }\n}\n//# sourceMappingURL=require-ratchet.js.map","import { RequireRatchet } from './require-ratchet.js';\nexport class StringRatchet {\n static RFC_3986_RESERVED = [\n '!',\n '*',\n \"'\",\n '(',\n ')',\n ';',\n ':',\n '@',\n '&',\n '=',\n '+',\n '$',\n ',',\n '/',\n '?',\n '#',\n '[',\n ']',\n '%',\n ];\n static DIGITS = '0123456789';\n static HEXITS = StringRatchet.DIGITS + 'ABCDEF';\n static UPPER_CASE_LATIN = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n static LOWER_CASE_LATIN = 'abcdefghijklmnopqrstuvwxyz';\n static CASE_INSENSITIVE_LATIN = StringRatchet.UPPER_CASE_LATIN + StringRatchet.LOWER_CASE_LATIN;\n static stringIsInGivenAlphabet(input, alphabet) {\n let rval = false;\n if (input && alphabet) {\n for (let i = 0; i < input.length && !rval; i++) {\n rval = alphabet.includes(input.charAt(i));\n }\n }\n return rval;\n }\n static stringToUint8Array(val) {\n return val ? new TextEncoder().encode(val) : null;\n }\n static uint8ArrayToString(val) {\n return val ? new TextDecoder().decode(val) : null;\n }\n static attemptJsonParse(val) {\n let rval = null;\n if (StringRatchet.trimToNull(val)) {\n try {\n rval = JSON.parse(val);\n }\n catch (err) {\n rval = null;\n }\n }\n return rval;\n }\n static canParseAsJson(val) {\n return !!StringRatchet.attemptJsonParse(val);\n }\n static allUnique(input) {\n let rval = true;\n if (input) {\n const check = new Set();\n for (let i = 0; i < input.length && rval; i++) {\n const test = input.charAt(i);\n rval = !check.has(test);\n check.add(test);\n }\n }\n return rval;\n }\n static allPermutationsOfLength(len, alphabet) {\n const rval = [];\n if (len > 0 && alphabet && alphabet.length > 0) {\n RequireRatchet.true(StringRatchet.allUnique(alphabet), 'Alphabet must be unique');\n const step = len === 1 ? [''] : StringRatchet.allPermutationsOfLength(len - 1, alphabet);\n for (let i = 0; i < alphabet.length; i++) {\n step.forEach((s) => rval.push(alphabet.charAt(i) + s));\n }\n }\n return rval;\n }\n static createType4Guid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n static createRandomHexString(len = 10) {\n let r = '';\n for (let i = 0; i < len; i++) {\n r += Math.floor(Math.random() * 16).toString(16);\n }\n return r;\n }\n static canonicalize(value) {\n let rval = value ? value.toLowerCase() : '';\n rval = rval.replace(' ', '-');\n StringRatchet.RFC_3986_RESERVED.forEach((s) => {\n rval = rval.replace(s, '');\n });\n return rval;\n }\n static formatBytes(bytes, decimals = 2) {\n if (bytes == 0)\n return '0 Bytes';\n const k = 1024, dm = decimals || 2, sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n }\n static safeString(input) {\n let rval = null;\n if (input != null) {\n const type = typeof input;\n if (type == 'string') {\n rval = input;\n }\n else {\n rval = String(input);\n }\n }\n return rval;\n }\n static stringContainsOnlyNumbers(input) {\n const rval = /^[0-9]+$/.test(input);\n return rval;\n }\n static stringContainsOnlyAlphanumeric(input) {\n const rval = /^[0-9a-zA-Z]+$/.test(input);\n return rval;\n }\n static stringContainsOnlyHex(input) {\n const rval = /^[0-9a-fA-F]+$/.test(input);\n return rval;\n }\n static stringContainsOnly(inVal, validCharsIn) {\n const input = !inVal ? '' : inVal;\n const validChars = !validCharsIn ? '' : validCharsIn;\n let rval = true;\n for (let i = 0; i < input.length && rval; i++) {\n rval = validChars.indexOf(input.charAt(i)) >= 0;\n }\n return rval;\n }\n static obscure(input, prefixLength = 2, suffixLength = 2) {\n if (!input) {\n return input;\n }\n const len = input.length;\n let pl = prefixLength;\n let sl = suffixLength;\n while (len > 0 && len < pl + sl + 1) {\n pl = Math.max(0, pl - 1);\n sl = Math.max(0, sl - 1);\n }\n const rem = len - (pl + sl);\n let rval = '';\n rval += input.substring(0, pl);\n for (let i = 0; i < rem; i++) {\n rval += '*';\n }\n rval += input.substring(len - sl);\n return rval;\n }\n static leadingZeros(inVal, size) {\n const pad = '00000000000000000000000000000000000000000000000000';\n let negative = false;\n let sVal = String(inVal);\n if (sVal.startsWith('-')) {\n negative = true;\n sVal = sVal.substring(1);\n }\n if (size > pad.length) {\n throw new Error('Cannot format number that large');\n }\n let rval = (pad + sVal).slice(-1 * size);\n if (negative) {\n rval = '-' + rval;\n }\n return rval;\n }\n static trimToEmpty(input) {\n const t = input ? StringRatchet.safeString(input) : '';\n return t.trim();\n }\n static trimToNull(input) {\n const x = StringRatchet.trimToEmpty(input);\n return x.length > 0 ? x : null;\n }\n static trimAllStringPropertiesToNullInPlace(input) {\n return StringRatchet.trimAllStringPropertiesInPlace(input, false);\n }\n static trimAllStringPropertiesToEmptyInPlace(input) {\n return StringRatchet.trimAllStringPropertiesInPlace(input, true);\n }\n static trimAllStringPropertiesInPlace(input, toEmpty) {\n const dealKeys = Object.keys(input);\n dealKeys.forEach((key) => {\n const val = input[key];\n if (val != null && typeof val === 'string') {\n input[key] = toEmpty ? StringRatchet.trimToEmpty(input[key]) : StringRatchet.trimToNull(input[key]);\n }\n });\n return input;\n }\n static stripNonNumeric(input) {\n let rval = input;\n if (input != null && !StringRatchet.stringContainsOnlyNumbers(input)) {\n rval = '';\n for (let i = 0; i < input.length; i++) {\n const c = input.charAt(i);\n if (StringRatchet.stringContainsOnlyNumbers(c) || (i === 0 && c === '-')) {\n rval += c;\n }\n }\n }\n return rval;\n }\n static csvSafe(input) {\n let rval = StringRatchet.trimToEmpty(StringRatchet.safeString(input));\n rval.split('\"').join('\\\\\"');\n if (rval.indexOf(',') !== -1 || rval.indexOf('\"') !== -1 || rval.indexOf(\"'\") !== -1) {\n rval = '\"' + rval + '\"';\n }\n return rval;\n }\n static stripNonAscii(value) {\n const reduced = [...value].reduce((previousValue, currentValue) => {\n const charCode = currentValue.charCodeAt(0);\n if (charCode > 127) {\n return previousValue;\n }\n return previousValue + currentValue;\n });\n return reduced;\n }\n}\n//# sourceMappingURL=string-ratchet.js.map","import { LoggerRingBuffer } from './logger-ring-buffer.js';\nimport { LoggerLevelName } from './logger-level-name.js';\nimport { LoggerUtil } from './logger-util.js';\nimport { LogMessageFormatType } from './log-message-format-type.js';\nimport { ClassicSingleLineLogMessageFormatter } from './classic-single-line-log-message-formatter.js';\nimport { NoneLogMessageFormatter } from './none-log-message-formatter.js';\nimport { StructuredJsonLogMessageFormatter } from './structured-json-log-message-formatter.js';\nimport { StringRatchet } from '../lang/string-ratchet.js';\nexport class LoggerInstance {\n loggerInstanceName;\n _loggerMeta;\n _ringBuffer;\n _formatter;\n _level;\n _handlerFunctionMap;\n _options;\n constructor(loggerInstanceName = 'default', inOptions) {\n this.loggerInstanceName = loggerInstanceName;\n this.options = inOptions;\n }\n addPreProcessor(proc) {\n if (proc) {\n this._options.preProcessors = this._options.preProcessors || [];\n this._options.preProcessors.push(proc);\n }\n return Object.assign([], this._options.preProcessors);\n }\n get ringBuffer() {\n return this._ringBuffer;\n }\n dumpConfigurationIntoLog() {\n this.error('ERROR enabled');\n this.warn('WARN enabled');\n this.info('INFO enabled');\n this.verbose('VERBOSE enabled');\n this.debug('DEBUG enabled');\n this.silly('SILLY enabled');\n }\n dumpOptionsIntoLog() {\n this.info('Options: %j', this.options);\n if (this?.options?.preProcessors?.length) {\n const labels = this.options.preProcessors.map((p) => StringRatchet.trimToNull(p.label()) || 'Unlabelled');\n this.info('Preprocessors: %j', labels);\n }\n }\n changeRingBufferSize(newSize) {\n this._ringBuffer = null;\n if (newSize) {\n this._ringBuffer = new LoggerRingBuffer(newSize);\n this._options.ringBufferSize = newSize;\n }\n }\n updateTracePrefix(newValue) {\n this._options.trace = newValue;\n }\n get options() {\n return Object.assign({}, this._options);\n }\n set options(newOpts) {\n this._options = Object.assign({}, newOpts);\n if (this._options.ringBufferSize) {\n this._ringBuffer = new LoggerRingBuffer(this._options.ringBufferSize);\n }\n switch (this._options.formatType) {\n case LogMessageFormatType.None:\n this._formatter = new NoneLogMessageFormatter();\n break;\n case LogMessageFormatType.StructuredJson:\n this._formatter = new StructuredJsonLogMessageFormatter();\n break;\n default:\n this._formatter = new ClassicSingleLineLogMessageFormatter();\n break;\n }\n this._level = this._options.initialLevel;\n this._handlerFunctionMap = LoggerUtil.handlerFunctionMap(this._options.outputFunction);\n const oldId = this._loggerMeta ? this._loggerMeta.loggerInstanceId : null;\n this._loggerMeta = {\n options: this._options,\n loggerInstanceName: this.loggerInstanceName,\n loggerInstanceId: oldId || StringRatchet.createRandomHexString(8),\n };\n }\n get level() {\n return this._level;\n }\n set level(newLevel) {\n if (!newLevel) {\n throw new Error('Cannot set level to null/undefined');\n }\n this._level = newLevel;\n }\n consoleLogPassThru(level, ...input) {\n if (LoggerUtil.levelIsEnabled(level, this._level)) {\n let passThruPrefix = this._options.trace || '';\n passThruPrefix += '[' + level + '] ';\n input.unshift(passThruPrefix);\n const fn = this._handlerFunctionMap.get(level) || LoggerUtil.defaultHandlerFunction;\n fn(...input);\n }\n }\n createLogMessage(level, params, format, ...input) {\n const rval = {\n lvl: level,\n timestamp: Date.now(),\n messageSource: format,\n subsVars: input,\n params: params,\n };\n return rval;\n }\n formatMessage(msg) {\n const rval = msg ? this._formatter.formatMessage(msg, this._loggerMeta) : null;\n return rval;\n }\n formatMessages(msgs) {\n const rval = (msgs || []).map((m) => this.formatMessage(m)).filter((m) => !!m);\n return rval;\n }\n recordMessageBuilder(msgBuild) {\n return this.recordMessage(msgBuild.toMessage());\n }\n recordMessage(inMsg) {\n let rval = null;\n if (LoggerUtil.levelIsEnabled(inMsg.lvl, this._level)) {\n let msg = Object.assign({}, inMsg);\n if (this._options.preProcessors?.length) {\n for (let i = 0; i < this._options.preProcessors.length; i++) {\n msg = this._options.preProcessors[i].process(msg);\n }\n }\n rval = this.formatMessage(msg);\n if (rval) {\n const fn = this._handlerFunctionMap.get(msg.lvl) || LoggerUtil.defaultHandlerFunction;\n fn(rval);\n if (this._ringBuffer) {\n this._ringBuffer.addToRingBuffer(msg);\n }\n }\n }\n else {\n }\n return rval;\n }\n error(format, ...input) {\n const msg = this.createLogMessage(LoggerLevelName.error, {}, format, ...input);\n return this.recordMessage(msg);\n }\n errorP(...input) {\n this.consoleLogPassThru(LoggerLevelName.error, ...input);\n }\n warn(format, ...input) {\n const msg = this.createLogMessage(LoggerLevelName.warn, {}, format, ...input);\n return this.recordMessage(msg);\n }\n warnP(...input) {\n this.consoleLogPassThru(LoggerLevelName.warn, ...input);\n }\n info(format, ...input) {\n const msg = this.createLogMessage(LoggerLevelName.info, {}, format, ...input);\n return this.recordMessage(msg);\n }\n infoP(...input) {\n this.consoleLogPassThru(LoggerLevelName.info, ...input);\n }\n verbose(format, ...input) {\n const msg = this.createLogMessage(LoggerLevelName.verbose, {}, format, ...input);\n return this.recordMessage(msg);\n }\n verboseP(...input) {\n this.consoleLogPassThru(LoggerLevelName.verbose, ...input);\n }\n debug(format, ...input) {\n const msg = this.createLogMessage(LoggerLevelName.debug, {}, format, ...input);\n return this.recordMessage(msg);\n }\n debugP(...input) {\n this.consoleLogPassThru(LoggerLevelName.debug, ...input);\n }\n silly(format, ...input) {\n const msg = this.createLogMessage(LoggerLevelName.silly, {}, format, ...input);\n return this.recordMessage(msg);\n }\n sillyP(...input) {\n this.consoleLogPassThru(LoggerLevelName.silly, ...input);\n }\n logByLevel(level, format, ...input) {\n const msg = this.createLogMessage(level, {}, format, ...input);\n this.recordMessage(msg);\n }\n importMessages(msgs, prefixIn = '', addTimestamp = true) {\n const prefix = prefixIn || '';\n if (msgs && msgs.length > 0) {\n this.silly('Received import data : %d msgs', msgs.length);\n msgs.forEach((m) => {\n if (m.messageSource) {\n let mOut = prefix;\n if (addTimestamp) {\n const ts = String(new Date()).substring(15, 24);\n mOut += ' (' + ts + ') : ';\n mOut += m.messageSource;\n }\n this.logByLevel(m.lvl, mOut);\n }\n });\n }\n }\n}\n//# sourceMappingURL=logger-instance.js.map","import { LoggerInstance } from './logger-instance.js';\nimport { LogMessageFormatType } from './log-message-format-type.js';\nimport { LoggerLevelName } from './logger-level-name.js';\nimport { LoggerOutputFunction } from './logger-output-function.js';\nexport class Logger {\n static LOGGER_INSTANCES = new Map();\n static DEFAULT_OPTIONS = {\n initialLevel: LoggerLevelName.info,\n formatType: LogMessageFormatType.ClassicSingleLine,\n trace: null,\n globalVars: {},\n outputFunction: LoggerOutputFunction.Console,\n ringBufferSize: 0,\n preProcessors: [],\n };\n static applyDefaultsToOptions(input) {\n const rval = input || {};\n rval.initialLevel = rval.initialLevel ?? Logger.DEFAULT_OPTIONS.initialLevel;\n rval.formatType = rval.formatType ?? Logger.DEFAULT_OPTIONS.formatType;\n rval.trace = rval.trace ?? Logger.DEFAULT_OPTIONS.trace;\n rval.globalVars = rval.globalVars ?? Logger.DEFAULT_OPTIONS.globalVars;\n rval.outputFunction = rval.outputFunction ?? Logger.DEFAULT_OPTIONS.outputFunction;\n rval.ringBufferSize = rval.ringBufferSize ?? Logger.DEFAULT_OPTIONS.ringBufferSize;\n return rval;\n }\n static changeDefaultOptions(input, retroactive) {\n if (!input || !input.initialLevel || !input.formatType) {\n throw new Error('Default options must be non-null, and provide initial level and format type');\n }\n Logger.DEFAULT_OPTIONS = Object.assign({}, input);\n if (retroactive) {\n Array.from(Logger.LOGGER_INSTANCES.values()).forEach((li) => (li.options = input));\n }\n }\n static getLogger(loggerName = 'default', inOptions) {\n let inst = Logger.LOGGER_INSTANCES.get(loggerName);\n if (!inst) {\n const options = Logger.applyDefaultsToOptions(inOptions);\n inst = new LoggerInstance(loggerName, options);\n Logger.LOGGER_INSTANCES.set(loggerName, inst);\n }\n return inst;\n }\n static recordMessageBuilder(msgBuild) {\n return Logger.getLogger().recordMessageBuilder(msgBuild);\n }\n static recordMessage(msg) {\n return Logger.getLogger().recordMessage(msg);\n }\n static formatMessages(msgs) {\n return Logger.getLogger().formatMessages(msgs);\n }\n static updateTracePrefix(newValue) {\n return Logger.getLogger().updateTracePrefix(newValue);\n }\n static changeRingBufferSize(newValue) {\n return Logger.getLogger().changeRingBufferSize(newValue);\n }\n static getRingBuffer() {\n return Logger.getLogger().ringBuffer;\n }\n static dumpConfigurationIntoLog() {\n return Logger.getLogger().dumpConfigurationIntoLog();\n }\n static dumpOptionsIntoLog() {\n return Logger.getLogger().dumpOptionsIntoLog();\n }\n static getLevel() {\n return Logger.getLogger().level;\n }\n static setLevel(newLevel) {\n Logger.getLogger().level = newLevel;\n }\n static getOptions() {\n return Logger.getLogger().options;\n }\n static getMessages(inStartFrom = null, clear = false, reverseSort = false) {\n const buf = Logger.getLogger().ringBuffer;\n return buf ? buf.getMessages(inStartFrom, clear, reverseSort) : null;\n }\n static consoleLogPassThru(level, ...input) {\n return Logger.getLogger().consoleLogPassThru(level, ...input);\n }\n static error(format, ...input) {\n return Logger.getLogger().error(format, ...input);\n }\n static errorP(...input) {\n return Logger.getLogger().errorP(...input);\n }\n static warn(format, ...input) {\n return Logger.getLogger().warn(format, ...input);\n }\n static warnP(...input) {\n return Logger.getLogger().warnP(...input);\n }\n static info(format, ...input) {\n return Logger.getLogger().info(format, ...input);\n }\n static infoP(...input) {\n return Logger.getLogger().infoP(...input);\n }\n static verbose(format, ...input) {\n return Logger.getLogger().verbose(format, ...input);\n }\n static verboseP(...input) {\n return Logger.getLogger().verboseP(...input);\n }\n static debug(format, ...input) {\n return Logger.getLogger().debug(format, ...input);\n }\n static debugP(...input) {\n return Logger.getLogger().debugP(...input);\n }\n static silly(format, ...input) {\n return Logger.getLogger().silly(format, ...input);\n }\n static sillyP(...input) {\n return Logger.getLogger().sillyP(...input);\n }\n static takeSnapshot() {\n const buf = Logger.getLogger().ringBuffer;\n return buf ? buf.takeSnapshot() : null;\n }\n static logByLevel(level, format, ...input) {\n return Logger.getLogger().logByLevel(level, format, ...input);\n }\n static importMessages(msgs, prefixIn = '', addTimestamp = true) {\n return Logger.getLogger().importMessages(msgs, prefixIn, addTimestamp);\n }\n static getLastLogMessage() {\n const buf = Logger.getLogger().ringBuffer;\n return buf ? buf.getLastLogMessage() : null;\n }\n}\n//# sourceMappingURL=logger.js.map","import { Logger } from '../logger/logger.js';\nimport { RequireRatchet } from './require-ratchet.js';\nexport class NumberRatchet {\n static MAX_LEADING_ZEROS_FORMAT_LENGTH = 1000;\n static toFixedDecimalNumber(input, placesAfterPoint) {\n const v = NumberRatchet.safeNumber(input);\n return v === null || v === undefined ? v : NumberRatchet.safeNumber(v.toFixed(placesAfterPoint));\n }\n static leadingZeros(val, size) {\n const sVal = String(val);\n if (sVal.length < size) {\n let pad = '0000';\n if (size > NumberRatchet.MAX_LEADING_ZEROS_FORMAT_LENGTH) {\n throw 'Cannot format number that large (max length is ' + NumberRatchet.MAX_LEADING_ZEROS_FORMAT_LENGTH + ')';\n }\n while (pad.length < size) {\n pad = pad + pad;\n }\n return (pad + sVal).slice(-1 * size);\n }\n else {\n return sVal;\n }\n }\n static between(inTest, inP1, inP2) {\n const test = NumberRatchet.safeNumber(inTest);\n const p1 = NumberRatchet.safeNumber(inP1);\n const p2 = NumberRatchet.safeNumber(inP2);\n return (test >= p1 && test <= p2) || (test >= p2 && test <= p1);\n }\n static safeNumber(input, ifNotNumber = null, useDefaultForNullAndUndefined) {\n let rval = undefined;\n if (input !== null && input !== undefined) {\n const type = typeof input;\n if (type == 'number') {\n rval = input;\n }\n else if (type == 'string') {\n if (input.trim().length === 0) {\n rval = ifNotNumber;\n }\n else {\n rval = Number.parseFloat(input);\n }\n }\n else {\n Logger.warn('Value is of type %s, returning default', type);\n rval = ifNotNumber;\n }\n if (isNaN(rval)) {\n Logger.debug('Parsed string to NaN - using NaN value from param');\n rval = ifNotNumber;\n }\n }\n else {\n if (useDefaultForNullAndUndefined === undefined) {\n rval = null;\n }\n else {\n rval = useDefaultForNullAndUndefined ? ifNotNumber : input;\n }\n }\n return rval;\n }\n static numberCSVToList(inputCSV) {\n let rval = null;\n if (inputCSV) {\n rval = inputCSV.split(',').map((s) => {\n return NumberRatchet.safeNumber(s.trim());\n });\n rval = rval.filter((r) => typeof r === 'number' && !isNaN(r));\n }\n return rval;\n }\n static fitToWindow(val, b1, b2) {\n let rval = val;\n if (val === null || b1 === null || b2 === null || b1 < 0 || b2 < 0 || val < 0) {\n throw new Error('All values must be non-null and larger than 0');\n }\n const low = Math.min(b1, b2);\n const high = Math.max(b1, b2);\n const windowSize = high - low;\n if (high === low) {\n rval = high;\n }\n else {\n while (rval < low) {\n rval += windowSize;\n }\n while (rval > high) {\n rval -= windowSize;\n }\n }\n return rval;\n }\n static groupNumbersIntoContiguousRanges(inputData, minRangeSize = 3) {\n RequireRatchet.notNullOrUndefined(inputData);\n const input = Object.assign([], inputData);\n input.sort((a, b) => a - b);\n const singles = [];\n const ranges = [];\n let start = 0;\n for (let i = 1; i < input.length; i++) {\n if (input[i] === input[i - 1] + 1) {\n }\n else {\n if (start === i - 1) {\n singles.push(input[i - 1]);\n }\n else {\n const rangeSize = i - start;\n if (rangeSize < minRangeSize) {\n for (let j = start; j < i; j++) {\n singles.push(input[j]);\n }\n }\n else {\n ranges.push({\n min: input[start],\n max: input[i - 1],\n });\n }\n }\n start = i;\n }\n }\n return {\n singles: singles,\n ranges: ranges,\n };\n }\n static distributeItemsEvenly(items, buckets) {\n RequireRatchet.notNullOrUndefined(items, 'items');\n RequireRatchet.notNullOrUndefined(buckets, 'buckets');\n RequireRatchet.true(items > 0 && items === Math.floor(items), 'Items integer larger than 0');\n RequireRatchet.true(buckets > 0 && buckets === Math.floor(buckets), 'Buckets integer larger than 0');\n const offset = buckets / items;\n const rval = [];\n for (let i = 0; i < buckets; i++) {\n rval.push(0);\n }\n let loc = 0;\n let rem = items;\n while (rem > 0) {\n rval[Math.floor(loc) % buckets]++;\n rem--;\n loc += offset;\n }\n return rval;\n }\n static createRange(minInclusive, maxExclusive, step = 1) {\n const rval = [];\n let val = minInclusive;\n while (val < maxExclusive) {\n rval.push(val);\n val += step;\n }\n return rval;\n }\n}\n//# sourceMappingURL=number-ratchet.js.map","import { NumberRatchet } from './number-ratchet.js';\nexport class BooleanRatchet {\n static allTrue(vals, emptyArraysReturn = false) {\n let rval = null;\n if (!!vals) {\n if (vals.length > 0) {\n rval = vals.reduce((a, i) => a && i, true);\n }\n else {\n rval = emptyArraysReturn;\n }\n }\n else {\n rval = false;\n }\n return rval;\n }\n static anyTrue(vals, emptyArraysReturn = false) {\n let rval = null;\n if (!!vals) {\n if (vals.length > 0) {\n rval = vals.reduce((a, i) => a || i, false);\n }\n else {\n rval = emptyArraysReturn;\n }\n }\n else {\n rval = false;\n }\n return rval;\n }\n static parseBool(val) {\n return val === true || (val !== null && val !== undefined && typeof val === 'string' && val.toLowerCase() === 'true');\n }\n static intToBool(val) {\n if (val === null || val === undefined) {\n return false;\n }\n return NumberRatchet.safeNumber(val) !== 0;\n }\n static boolToInt(val) {\n return BooleanRatchet.parseBool(val) ? 1 : 0;\n }\n}\n//# sourceMappingURL=boolean-ratchet.js.map","import { BooleanRatchet } from '../lang/boolean-ratchet.js';\nexport class Ratchet2d {\n constructor() { }\n static translateToOriginVector(points) {\n let rval = null;\n if (Ratchet2d.validPoints(points)) {\n rval = {\n x: null,\n y: null,\n };\n points.forEach((p) => {\n rval.x = rval.x === null || p.x < rval.x ? p.x : rval.x;\n rval.y = rval.y === null || p.y < rval.y ? p.y : rval.y;\n });\n rval.x *= -1;\n rval.y *= -1;\n }\n return rval;\n }\n static minimalContainingPlane(points) {\n let rval = null;\n if (Ratchet2d.validPoints(points)) {\n rval = {\n width: 0,\n height: 0,\n };\n points.forEach((p) => {\n rval.width = Math.max(rval.width, p.x + 1);\n rval.height = Math.max(rval.height, p.y + 1);\n });\n }\n return rval;\n }\n static scaleVector(src, dst) {\n let rval = null;\n if (Ratchet2d.validPlane(src) && Ratchet2d.validPlane(dst)) {\n rval = {\n x: dst.width / src.width,\n y: dst.height / src.height,\n };\n }\n return rval;\n }\n static samePoint(p1, p2) {\n return !!p1 && !!p2 && p1.x === p2.x && p1.y === p2.y;\n }\n static atLeastOneDimensionShared(p1, p2) {\n return !!p1 && !!p2 && (p1.x === p2.x || p1.y === p2.y);\n }\n static validPlane(plane) {\n return !!plane && !!plane.height && !!plane.width;\n }\n static validLine(line) {\n return !!line && Ratchet2d.validPoint(line.p1) && Ratchet2d.validPoint(line.p2) && !Ratchet2d.samePoint(line.p1, line.p2);\n }\n static validLines(lines) {\n return !!lines && BooleanRatchet.allTrue(lines.map((l) => Ratchet2d.validLine(l)));\n }\n static validPolyLine(pline) {\n return !!pline && pline.pts?.length > 1 && BooleanRatchet.allTrue(pline.pts.map((p) => Ratchet2d.validPoint(p)));\n }\n static polyLineToLines(pline) {\n let rval = null;\n if (Ratchet2d.validPolyLine(pline)) {\n rval = [];\n for (let i = 1; i < pline.pts.length; i++) {\n rval.push({ p1: pline.pts[i - 1], p2: pline.pts[i] });\n }\n }\n return rval;\n }\n static lastPointOnPolyLine(polyLine) {\n return Ratchet2d.validPolyLine(polyLine) ? polyLine.pts[polyLine.pts.length - 1] : null;\n }\n static lineToPolyLine(line) {\n return Ratchet2d.validLine(line) ? { pts: [line.p1, line.p2] } : null;\n }\n static linesToPolyLines(lines) {\n let rval = null;\n if (Ratchet2d.validLines(lines)) {\n rval = [];\n let currentPLine = Ratchet2d.lineToPolyLine(lines[0]);\n for (let i = 1; i < lines.length; i++) {\n if (Ratchet2d.samePoint(Ratchet2d.lastPointOnPolyLine(currentPLine), lines[i].p1)) {\n currentPLine.pts.push(lines[i].p2);\n }\n else {\n rval.push(currentPLine);\n currentPLine = Ratchet2d.lineToPolyLine(lines[i]);\n }\n }\n rval.push(currentPLine);\n }\n return rval;\n }\n static validPoint(pt) {\n return !!pt && pt.x != null && pt.x != undefined && pt.y !== null && pt.y !== undefined;\n }\n static validPoints(pt) {\n return (!!pt &&\n BooleanRatchet.allTrue(pt.map((p) => Ratchet2d.validPoint(p)), false));\n }\n static planeContainsPoint(pt, plane) {\n return Ratchet2d.validPlane(plane) && Ratchet2d.validPoint(pt) && pt.x >= 0 && pt.x < plane.width && pt.y >= 0 && pt.y < plane.height;\n }\n static planeContainsPoints(pt, plane) {\n return pt && pt.map((p) => Ratchet2d.planeContainsPoint(p, plane)).reduce((a, i) => a && i, true);\n }\n static linesToPoints(lines) {\n let rval = null;\n if (Ratchet2d.validLines(lines)) {\n rval = lines.map((l) => [l.p1, l.p2]).flat();\n }\n return rval;\n }\n static pointsToLines(points) {\n let rval = null;\n if (Ratchet2d.validPoints(points)) {\n if (points.length % 2 == 0) {\n rval = [];\n for (let i = 0; i < points.length; i += 2) {\n rval.push({ p1: points[i], p2: points[i + 1] });\n }\n }\n else {\n throw new Error('Cannot convert non-even array of points into lines');\n }\n }\n return rval;\n }\n static rotateRightAboutOrigin90Degrees(points, times = 1) {\n let rval = null;\n let translate = { x: 0, y: 0 };\n if (Ratchet2d.validPoints(points)) {\n rval = Object.assign([], points);\n translate = Ratchet2d.translateToOriginVector(rval);\n rval = Ratchet2d.translate(rval, translate);\n let plane = Ratchet2d.minimalContainingPlane(rval);\n rval = Ratchet2d.xToY(rval);\n plane = { width: plane.height, height: plane.width };\n translate = { x: translate.y * -1, y: translate.x * -1 };\n rval = Ratchet2d.mirrorPointsOnPlane(rval, plane, true, false);\n rval = Ratchet2d.translate(rval, translate);\n }\n const timesToRotate = times > 4 ? times % 4 : times;\n if (timesToRotate > 1) {\n rval = Ratchet2d.rotateRightAboutOrigin90Degrees(rval, timesToRotate - 1);\n }\n return rval;\n }\n static planeContainsLines(lines, plane) {\n return lines && Ratchet2d.planeContainsPoints(lines.map((l) => [l.p1, l.p2]).flat(), plane);\n }\n static planeContainsPolyLine(pline, plane) {\n return Ratchet2d.planeContainsLines(Ratchet2d.polyLineToLines(pline), plane);\n }\n static planeContainsLine(line, plane) {\n return (Ratchet2d.validPlane(plane) &&\n Ratchet2d.validLine(line) &&\n Ratchet2d.planeContainsPoint(line.p1, plane) &&\n Ratchet2d.planeContainsPoint(line.p2, plane));\n }\n static xToY(points) {\n let rval = null;\n if (Ratchet2d.validPoints(points)) {\n rval = points.map((p) => {\n const next = { x: p.y, y: p.x };\n return next;\n });\n }\n return rval;\n }\n static translate(points, xlate) {\n let rval = null;\n if (Ratchet2d.validPoints(points) && Ratchet2d.validPoint(xlate)) {\n rval = points.map((p) => {\n const next = {\n x: p.x + xlate.x,\n y: p.y + xlate.y,\n };\n return next;\n });\n }\n return rval;\n }\n static mirrorPointsOnPlane(points, src, mirrorX, mirrorY) {\n let rval = null;\n if (Ratchet2d.validPoints(points) && Ratchet2d.validPlane(src)) {\n if (mirrorX || mirrorY) {\n rval = points.map((p) => {\n const next = {\n x: mirrorX ? src.width - 1 - p.x : p.x,\n y: mirrorY ? src.height - 1 - p.y : p.y,\n };\n return next;\n });\n }\n else {\n rval = Object.assign([], points);\n }\n }\n return rval;\n }\n static transformPointsToNewPlane(points, src, dst) {\n let rval = null;\n if (Ratchet2d.validPoints(points) && Ratchet2d.validPlane(src) && Ratchet2d.validPlane(dst)) {\n const scale = Ratchet2d.scaleVector(src, dst);\n rval = points.map((p) => {\n const next = { x: p.x * scale.x, y: p.y * scale.y };\n return next;\n });\n rval = Ratchet2d.mirrorPointsOnPlane(rval, dst, dst.rightToLeft !== src.rightToLeft, dst.topToBottom !== src.topToBottom);\n }\n return rval;\n }\n static transformPointToNewPlane(point, src, dst) {\n const tmp = Ratchet2d.transformPointsToNewPlane([point], src, dst);\n return tmp.length === 1 ? tmp[0] : null;\n }\n static transformLines(lines, src, dst) {\n return null;\n }\n static fitCurve(curveDef, inputX) {\n curveDef.sort((a, b) => {\n return a.x - b.x;\n });\n if (inputX <= curveDef[0].x) {\n return curveDef[0].y;\n }\n else if (inputX >= curveDef[curveDef.length - 1].x) {\n return curveDef[curveDef.length - 1].y;\n }\n else {\n let idx = 0;\n while (curveDef[idx + 1].x < inputX) {\n idx++;\n }\n const xSpread = curveDef[idx + 1].x - curveDef[idx].x;\n const ySpread = curveDef[idx + 1].y - curveDef[idx].y;\n const pct = (inputX - curveDef[idx].x) / xSpread;\n const yAdd = pct * ySpread;\n return curveDef[idx].y + yAdd;\n }\n }\n}\n//# sourceMappingURL=ratchet-2d.js.map","export class RatchetInfo {\n constructor() { }\n static buildInformation() {\n const val = {\n version: 'LOCAL-SNAPSHOT',\n hash: 'LOCAL-HASH',\n branch: 'LOCAL-BRANCH',\n tag: 'LOCAL-TAG',\n timeBuiltISO: 'LOCAL-TIME-ISO',\n notes: 'LOCAL-NOTES',\n };\n return val;\n }\n}\n//# sourceMappingURL=ratchet-common-info.js.map","export class Histogram {\n entries = [];\n update(val, addValue = 1) {\n if (val) {\n const entry = this.entries.find((e) => e.item === val);\n if (entry) {\n entry.count += addValue;\n }\n else {\n this.entries.push({\n item: val,\n count: addValue,\n });\n }\n }\n }\n sort() {\n this.entries.sort((a, b) => {\n let rval = b.count - a.count;\n if (rval === 0) {\n rval = String(b.item).localeCompare(String(a.item));\n }\n return rval;\n });\n }\n sortKeys() {\n this.entries.sort((a, b) => String(b.item).localeCompare(String(a.item)));\n }\n reverse() {\n this.entries.reverse();\n }\n getEntries() {\n return this.entries;\n }\n getTotalCount() {\n let rval = 0;\n this.entries.forEach((h) => (rval += h.count));\n return rval;\n }\n countForValue(val) {\n const entry = this.entries.find((test) => test.item === val);\n return entry ? entry.count : 0;\n }\n percentForValue(val) {\n const total = this.getTotalCount();\n return total === 0 ? 0 : this.countForValue(val) / total;\n }\n}\n//# sourceMappingURL=histogram.js.map","import { DateTime } from 'luxon';\nimport { NumberRatchet } from './number-ratchet.js';\nexport class DurationRatchet {\n static formatMsDuration(ms, includeMS = false) {\n const rem_ms = Math.floor(ms % 1000);\n const seconds = Math.floor(ms / 1000) % 60;\n const minutes = Math.floor(ms / (1000 * 60)) % 60;\n const hours = Math.floor(ms / (1000 * 60 * 60)) % 24;\n const days = Math.floor(ms / (1000 * 60 * 60 * 24));\n const f = NumberRatchet.leadingZeros;\n let rval = f(hours, 2) + 'h' + f(minutes, 2) + 'm';\n rval += includeMS ? f(seconds, 2) + '.' + f(rem_ms, 3) + 's' : f(seconds, 2) + 's';\n if (days > 0) {\n rval = days + 'd' + rval;\n }\n return rval;\n }\n static colonFormatMsDuration(ms, includeMS = false) {\n const rem_ms = ms % 1000;\n const seconds = Math.floor(ms / 1000) % 60;\n const minutes = Math.floor(ms / (1000 * 60)) % 60;\n const hours = Math.floor(ms / (1000 * 60 * 60));\n const f = NumberRatchet.leadingZeros;\n let rval = f(hours, 2) + ':' + f(minutes, 2) + ':';\n rval += includeMS ? f(seconds, 2) + '.' + f(rem_ms, 3) : f(seconds, 2);\n return rval;\n }\n static daysBetween(d1, d2) {\n const dur = DateTime.fromJSDate(d1).diff(DateTime.fromJSDate(d2));\n return dur.days;\n }\n static createSteps(startEpochMS, endEpochMS, timezone, outputFormat, stepUnit) {\n let curDate = DateTime.fromMillis(startEpochMS).setZone(timezone);\n const endDate = DateTime.fromMillis(endEpochMS);\n const rval = [];\n while (curDate < endDate) {\n rval.push(curDate.toFormat(outputFormat));\n curDate = curDate.plus(stepUnit);\n }\n return rval;\n }\n}\n//# sourceMappingURL=duration-ratchet.js.map","import jwt from 'jsonwebtoken';\nimport { RequireRatchet } from '../lang/require-ratchet.js';\nimport { Logger } from '../logger/logger.js';\nimport { StringRatchet } from '../lang/string-ratchet.js';\nimport { DurationRatchet } from '../lang/duration-ratchet.js';\nimport { LoggerLevelName } from '../logger/logger-level-name.js';\nimport { ExpiredJwtHandling } from './expired-jwt-handling.js';\nexport class JwtRatchet {\n _encryptionKeyPromise;\n _decryptKeysPromise;\n _jtiGenerator;\n _decryptOnlyKeyUseLogLevel;\n _parseFailureLogLevel;\n static EXPIRED_FLAG_NAME = '__jwtServiceExpiredFlag';\n constructor(_encryptionKeyPromise, _decryptKeysPromise, _jtiGenerator = StringRatchet.createType4Guid, _decryptOnlyKeyUseLogLevel = LoggerLevelName.info, _parseFailureLogLevel = LoggerLevelName.debug) {\n this._encryptionKeyPromise = _encryptionKeyPromise;\n this._decryptKeysPromise = _decryptKeysPromise;\n this._jtiGenerator = _jtiGenerator;\n this._decryptOnlyKeyUseLogLevel = _decryptOnlyKeyUseLogLevel;\n this._parseFailureLogLevel = _parseFailureLogLevel;\n RequireRatchet.notNullOrUndefined(_encryptionKeyPromise, 'encryptionKeyPromise');\n }\n get encryptionKeyPromise() {\n return this._encryptionKeyPromise;\n }\n get decryptKeysPromise() {\n return this._decryptKeysPromise;\n }\n get jtiGenerator() {\n return this._jtiGenerator;\n }\n get decryptOnlyKeyUseLogLevel() {\n return this._decryptOnlyKeyUseLogLevel;\n }\n get parseFailureLogLevel() {\n return this._parseFailureLogLevel;\n }\n static hasExpiredFlag(ob) {\n return ob && ob[JwtRatchet.EXPIRED_FLAG_NAME] === true;\n }\n static async invalidSafeDecode(payloadString, decryptKey, logLevel = LoggerLevelName.silly) {\n let rval = null;\n try {\n rval = jwt.verify(payloadString, decryptKey, { ignoreExpiration: true });\n }\n catch (err) {\n Logger.logByLevel(logLevel, 'Caught %s - ignoring', err);\n }\n return rval;\n }\n static async secondsRemainingUntilExpiration(payloadString) {\n let rval = null;\n if (StringRatchet.trimToNull(payloadString)) {\n const output = await JwtRatchet.decodeTokenNoVerify(payloadString);\n const nowSecond = Math.floor(Date.now() / 1000);\n if (output.exp) {\n const expSeconds = output.exp > nowSecond * 100 ? Math.floor(output.exp / 1000) : output.exp;\n rval = Math.max(0, expSeconds - nowSecond);\n }\n }\n return rval;\n }\n static async msRemainingUntilExpiration(payloadString) {\n const secs = await JwtRatchet.secondsRemainingUntilExpiration(payloadString);\n let rval = null;\n if (secs !== null && secs !== undefined) {\n rval = secs * 1000;\n }\n return rval;\n }\n async decodeToken(payloadString, expiredHandling = ExpiredJwtHandling.RETURN_NULL) {\n const encKeys = await this.encryptionKeyArray();\n let decKeys = Object.assign([], encKeys);\n if (this.decryptKeysPromise) {\n decKeys = decKeys.concat(await this.decryptKeysPromise);\n }\n const keysTried = [];\n let payload = null;\n for (let i = 0; i < decKeys.length && !payload; i++) {\n keysTried.push(StringRatchet.obscure(decKeys[i], 1, 1));\n const logLevel = i === decKeys.length - 1 && this.parseFailureLogLevel ? this.parseFailureLogLevel : LoggerLevelName.silly;\n payload = await JwtRatchet.invalidSafeDecode(payloadString, decKeys[i], logLevel);\n if (payload && i >= encKeys.length) {\n Logger.logByLevel(this.decryptOnlyKeyUseLogLevel, 'Used old key to decode token : %s', StringRatchet.obscure(decKeys[i], 2));\n }\n }\n if (payload) {\n const nowSeconds = Math.floor(Date.now() / 1000);\n const expSeconds = payload?.exp && payload.exp > nowSeconds * 100 ? Math.floor(payload.exp / 1000) : payload?.exp;\n const nbfSeconds = payload?.nbf && payload.nbf > nowSeconds * 100 ? Math.floor(payload.nbf / 1000) : payload?.nbf;\n if ((expSeconds && nowSeconds >= expSeconds) || (nbfSeconds && nowSeconds <= nbfSeconds)) {\n const age = nowSeconds - expSeconds;\n Logger.debug('JWT token expired or before NBF : on %d, %s ago', payload.exp, DurationRatchet.formatMsDuration(age * 1000));\n switch (expiredHandling) {\n case ExpiredJwtHandling.THROW_EXCEPTION:\n throw new Error('JWT Token was expired');\n case ExpiredJwtHandling.ADD_FLAG:\n payload[JwtRatchet.EXPIRED_FLAG_NAME] = true;\n break;\n default:\n payload = null;\n break;\n }\n }\n }\n else {\n Logger.warn('Unable to parse a payload (Tried %j) from : %s', keysTried, payloadString);\n }\n return payload;\n }\n async encryptionKeyArray() {\n const encKey = await this.encryptionKeyPromise;\n const rval = Array.isArray(encKey) ? encKey : [encKey];\n if (rval.length < 1) {\n throw new Error('Cannot create JwtRatchet with empty encryption key set');\n }\n return rval;\n }\n async selectRandomEncryptionKey() {\n const encKey = await this.encryptionKeyArray();\n const rval = encKey[Math.floor(Math.random() * encKey.length)];\n return rval;\n }\n async createTokenString(payload, expirationSeconds, overrideEncryptionKey) {\n const encKey = StringRatchet.trimToNull(overrideEncryptionKey)\n ? StringRatchet.trimToNull(overrideEncryptionKey)\n : await this.selectRandomEncryptionKey();\n RequireRatchet.notNullOrUndefined(payload, 'payload');\n payload.jti = this.jtiGenerator ? this.jtiGenerator() : null;\n if (expirationSeconds) {\n const nowSeconds = Math.floor(Date.now() / 1000);\n const expires = nowSeconds + expirationSeconds;\n Logger.debug('Forcing expiration to %d', expires);\n payload.exp = expires;\n }\n const token = jwt.sign(payload, encKey);\n return token;\n }\n async refreshJWTString(tokenString, allowExpired, expirationSeconds) {\n const handling = allowExpired ? ExpiredJwtHandling.ADD_FLAG : ExpiredJwtHandling.THROW_EXCEPTION;\n const payload = await this.decodeToken(tokenString, handling);\n const originalDurationSeconds = payload.exp && payload.iat ? payload.exp - payload.iat : null;\n const newExpirationSeconds = expirationSeconds || originalDurationSeconds;\n JwtRatchet.removeJwtFields(payload);\n JwtRatchet.removeExpiredFlag(payload);\n const token = await this.createTokenString(payload, newExpirationSeconds);\n return token;\n }\n static decodeTokenNoVerify(token) {\n return jwt.decode(token);\n }\n static removeJwtFields(ob) {\n if (ob) {\n ['iss', 'sub', 'aud', 'exp', 'nbf', 'iat', 'jti'].forEach((k) => {\n delete ob[k];\n });\n }\n }\n static removeExpiredFlag(ob) {\n if (ob) {\n delete ob[JwtRatchet.EXPIRED_FLAG_NAME];\n }\n }\n}\n//# sourceMappingURL=jwt-ratchet.js.map","import { Logger } from '../logger/logger.js';\nimport util from 'util';\nexport class ErrorRatchet {\n static safeStringifyErr(err, log = true) {\n let rval = 'ERR WAS NULL';\n if (err) {\n if (err['message']) {\n rval = err['message'];\n }\n else {\n try {\n rval = JSON.stringify(err);\n }\n catch (err2) {\n Logger.error('Failed to json stringify');\n rval = String(err);\n }\n }\n }\n if (log) {\n Logger.error('%s', rval, err);\n }\n return rval;\n }\n static asErr(input) {\n let rval = null;\n if (input) {\n if (input instanceof Error) {\n rval = input;\n }\n else {\n rval = new Error('Force-Cast to error : ' + String(input));\n }\n }\n return rval;\n }\n static fErr(format, ...input) {\n const msg = util.format(format, ...input);\n return new Error(msg);\n }\n static throwFormattedErr(format, ...input) {\n throw ErrorRatchet.fErr(format, ...input);\n }\n}\n//# sourceMappingURL=error-ratchet.js.map","import { Logger } from '../logger/logger.js';\nimport { ErrorRatchet } from './error-ratchet.js';\nexport class MapRatchet {\n static expandNestedKeysToObjects(src, separator = '.') {\n if (!separator || separator.length !== 1) {\n throw new Error('Invalid separator (must be single character)');\n }\n const rval = {};\n Object.keys(src).forEach((k) => {\n const path = k.split(separator);\n let target = rval;\n while (path.length > 1) {\n target[path[0]] = target[path[0]] || {};\n target = target[path[0]];\n path.splice(0, 1);\n }\n target[path[0]] = src[k];\n });\n return rval;\n }\n static mapByUniqueProperty(input, propName) {\n if (!input || !propName) {\n throw new Error('Neither input nor propName can be null');\n }\n const rval = new Map();\n input.forEach((i) => {\n const val = !!i ? i[propName] : null;\n if (val === null || val === undefined) {\n throw new Error('No value for ' + propName + ' found in ' + JSON.stringify(i));\n }\n if (rval.has(val)) {\n throw new Error('Multiple values found for ' + val);\n }\n rval.set(val, i);\n });\n return rval;\n }\n static groupByProperty(input, propName) {\n if (!input || !propName) {\n throw new Error('Neither input nor propName can be null');\n }\n const rval = new Map();\n input.forEach((i) => {\n const val = !!i ? i[propName] : null;\n if (val === null || val === undefined) {\n throw ErrorRatchet.fErr('No value for %s found in %j', propName, i);\n }\n if (!rval.has(val)) {\n rval.set(val, []);\n }\n rval.get(val).push(i);\n });\n return rval;\n }\n static findValue(toSearch, path) {\n if (!path || path.length == 0) {\n return toSearch;\n }\n else {\n if (toSearch) {\n return MapRatchet.findValue(toSearch[path[0]], path.slice(1));\n }\n else {\n return null;\n }\n }\n }\n static findValueDotPath(toSearch, dotPath) {\n if (!dotPath || dotPath.length == 0) {\n return toSearch;\n }\n else {\n if (toSearch) {\n return MapRatchet.findValue(toSearch, dotPath.split('.'));\n }\n else {\n return null;\n }\n }\n }\n static simpleDeepCompare(object1, object2) {\n if (object1 == null && object2 == null)\n return true;\n if (object1 == null || object2 == null)\n return false;\n return JSON.stringify(object1) == JSON.stringify(object2);\n }\n static toKeyValueList(value) {\n const returnArray = [];\n for (const k of Object.keys(value)) {\n returnArray.push({\n key: k,\n value: value[k],\n });\n }\n return returnArray;\n }\n static fromKeyValueList(list) {\n const rval = {};\n list.forEach((a) => (rval[a.key] = a.value));\n return rval;\n }\n static cleanup(obj, stripZero = false, stripNull = true, stripUndefined = true, stripEmptyString = true) {\n if (obj === null || obj === undefined || typeof obj !== 'object') {\n return obj;\n }\n const o = JSON.parse(JSON.stringify(obj));\n Object.keys(o).forEach((key) => {\n if (o[key] && typeof o[key] === 'object') {\n if (Array.isArray(o[key])) {\n for (let i = 0; i < o[key].length; i++) {\n o[key][i] = MapRatchet.cleanup(o[key][i]);\n }\n }\n else {\n o[key] = MapRatchet.cleanup(o[key]);\n }\n }\n else if ((o[key] === undefined && stripUndefined) ||\n (o[key] === null && stripNull) ||\n (o[key] === '' && stripEmptyString) ||\n (o[key] === 0 && stripZero)) {\n delete o[key];\n }\n else {\n o[key] = o[key];\n }\n });\n return o;\n }\n static extractValueFromMapIgnoreCase(src, key) {\n let rval = null;\n if (src && key) {\n const finder = key.toLowerCase();\n Object.keys(src).forEach((s) => {\n if (s.toLowerCase() === finder) {\n const newVal = src[s];\n if (rval) {\n Logger.warn('Multiple entries found for %s (replacing %s with %s', key, rval, newVal);\n }\n rval = newVal;\n }\n });\n }\n return rval;\n }\n static safeCallFunction(ob, fnName) {\n let rval = false;\n if (!!ob && !!ob[fnName] && typeof ob[fnName] === 'function') {\n try {\n ob[fnName]();\n rval = true;\n }\n catch (err) {\n Logger.warn('Error calling %s on %s : %s', fnName, ob, err, err);\n }\n }\n return rval;\n }\n static caseInsensitiveAccess(ob, keyName) {\n let rval = null;\n if (!!ob && !!keyName) {\n rval = ob[keyName];\n if (!rval) {\n const keyNameCI = Object.keys(ob).find((f) => f.toLowerCase() === keyName.toLowerCase());\n if (!!keyNameCI) {\n rval = ob[keyNameCI];\n }\n }\n }\n return rval;\n }\n}\n//# sourceMappingURL=map-ratchet.js.map","import { RequireRatchet } from './require-ratchet.js';\nimport { MapRatchet } from './map-ratchet.js';\nexport class ArrayRatchet {\n static wrapElementsInArray(input) {\n return input.map((i) => [i]);\n }\n static compareTwoArrays(ar1, ar2, fn) {\n ar1.sort(fn);\n ar2.sort(fn);\n let id1 = 0;\n let id2 = 0;\n const rval = {\n matching: [],\n setOneOnly: [],\n setTwoOnly: [],\n };\n while (id1 < ar1.length && id2 < ar2.length) {\n const aVal = ar1[id1];\n const pVal = ar2[id2];\n const comp = fn(aVal, pVal);\n if (comp === 0) {\n rval.matching.push(aVal);\n id1++;\n id2++;\n }\n else if (comp < 0) {\n rval.setOneOnly.push(aVal);\n id1++;\n }\n else {\n rval.setTwoOnly.push(pVal);\n id2++;\n }\n }\n if (id1 < ar1.length - 1) {\n rval.setOneOnly = rval.setOneOnly.concat(ar1.slice(id1));\n }\n if (id2 < ar2.length - 1) {\n rval.setTwoOnly = rval.setTwoOnly.concat(ar2.slice(id2));\n }\n return rval;\n }\n static extractSubarrayFromSortedByNumberField(input, fieldDotPath, minInclusive, maxExclusive) {\n if (!input || input.length === 0) {\n return input;\n }\n let bottomIdx = minInclusive === null ? 0 : ArrayRatchet.findSplit(input, fieldDotPath, minInclusive) || 0;\n const topIdx = maxExclusive === null ? input.length : ArrayRatchet.findSplit(input, fieldDotPath, maxExclusive);\n const bottomValue = MapRatchet.findValueDotPath(input[bottomIdx], fieldDotPath);\n if (bottomIdx === input.length - 1 && bottomValue < minInclusive) {\n return [];\n }\n if (bottomIdx < input.length && bottomIdx < topIdx && bottomValue < minInclusive) {\n bottomIdx++;\n }\n return input.slice(bottomIdx, topIdx + 1);\n }\n static findSplit(input, fieldDotPath, target) {\n RequireRatchet.notNullOrUndefined(input);\n RequireRatchet.notNullOrUndefined(fieldDotPath);\n RequireRatchet.notNullOrUndefined(target);\n if (input.length === 0 || MapRatchet.findValueDotPath(input[0], fieldDotPath) > target) {\n return null;\n }\n let min = 0;\n let max = input.length;\n let rval = null;\n while (rval === null) {\n const curIdx = Math.floor((min + max) / 2);\n const curVal = MapRatchet.findValueDotPath(input[curIdx], fieldDotPath);\n if (min === max || min === max - 1) {\n rval = min;\n }\n else if (curVal <= target) {\n min = curIdx;\n }\n else {\n max = curIdx;\n }\n }\n return rval;\n }\n}\n//# sourceMappingURL=array-ratchet.js.map","import { Logger } from '../logger/logger.js';\nexport class Base64Ratchet {\n static UTF8_ENCODER = new TextEncoder();\n static UTF8_DECODER = new TextDecoder('utf-8');\n static safeObjectToBase64JSON(input) {\n return !!input ? Base64Ratchet.generateBase64VersionOfString(JSON.stringify(input)) : null;\n }\n static safeBase64JSONParse(input) {\n let rval = {};\n try {\n if (input) {\n rval = JSON.parse(Base64Ratchet.base64StringToString(input));\n }\n }\n catch (err) {\n Logger.warn('Error parsing b64/json : %s as json, got %s', input, err, err);\n rval = {};\n }\n return rval;\n }\n static generateBase64VersionOfBlob(blob) {\n return new Promise(function (resolve, reject) {\n if (!blob || blob.size == 0) {\n reject('Wont convert null or non-blob or empty blob');\n }\n else {\n const reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result.toString());\n };\n reader.readAsDataURL(blob);\n }\n });\n }\n static generateBase64VersionOfString(input) {\n return Base64Ratchet.generateBase64VersionOfUint8Array(Base64Ratchet.UTF8_ENCODER.encode(input));\n }\n static generateBase64VersionOfUint8Array(input) {\n return btoa(Base64Ratchet.UTF8_DECODER.decode(input));\n }\n static base64StringToUint8Array(b64encoded) {\n return new Uint8Array(atob(b64encoded)\n .split('')\n .map(function (c) {\n return c.charCodeAt(0);\n }));\n }\n static base64StringToString(input, encoding = 'utf8') {\n return new TextDecoder(encoding).decode(Base64Ratchet.base64StringToUint8Array(input));\n }\n}\n//# sourceMappingURL=base64-ratchet.js.map","export class CompositeLastSuccessProvider {\n sources;\n mostRecent;\n constructor(src, mostRecentSrc = true) {\n if (!src || src.length == 0) {\n throw Error('Cannot create composite provider with null/empty sources');\n }\n this.sources = src;\n this.mostRecent = mostRecentSrc;\n }\n lastSuccess() {\n let rval = null;\n this.sources.forEach((s) => {\n const val = s.lastSuccess();\n if (val != null) {\n if (rval == null) {\n rval = val;\n }\n else {\n rval = (val > rval && this.mostRecent) || (val < rval && !this.mostRecent) ? val : rval;\n }\n }\n });\n return rval;\n }\n}\n//# sourceMappingURL=composite-last-success-provider.js.map","import { DateTime } from 'luxon';\nexport class DateRatchet {\n static COMMON_US_DATE_FORMAT = 'MM/dd/yyyy';\n static DEFAULT_DATE_FORMAT = 'yyyy-MM-dd';\n static FULL_DATE_FORMAT = 'yyyy-MM-dd_HH_mm_ss';\n static PACIFIC_TIME_ZONE = 'America/Los_Angeles';\n static UTC_TIME_ZONE = 'etc/UTC';\n static formatFullDate(input) {\n return DateTime.fromJSDate(input).toFormat(DateRatchet.FULL_DATE_FORMAT);\n }\n static formatDefaultDateOnly(input) {\n return DateTime.fromJSDate(input).toFormat(DateRatchet.DEFAULT_DATE_FORMAT);\n }\n static parseDefaultDate(input) {\n const rval = DateTime.fromFormat(input, DateRatchet.DEFAULT_DATE_FORMAT).toJSDate();\n return rval;\n }\n static parseCommonUsDate(input) {\n let rval = null;\n if (!!input) {\n let templ = DateRatchet.COMMON_US_DATE_FORMAT;\n if (input.indexOf('-') === 2) {\n templ = templ.split('/').join('-');\n }\n rval = DateTime.fromFormat(input, templ).toJSDate();\n }\n return rval;\n }\n}\n//# sourceMappingURL=date-ratchet.js.map","import { $enum } from 'ts-enum-util';\nimport { StringRatchet } from './string-ratchet.js';\nexport class EnumRatchet {\n static listEnumKeys(enumeration) {\n const rval = $enum(enumeration).getValues();\n return rval;\n }\n static keyToEnum(enumeration, val, caseSensitive = false) {\n const e = $enum(enumeration);\n let rval = null;\n if (!!val) {\n rval = e.asValueOrDefault(val, null);\n if (!rval && !caseSensitive) {\n const keys = EnumRatchet.listEnumKeys(enumeration);\n const mKey = keys.find((k) => k.toUpperCase() === val.toUpperCase());\n if (!!mKey) {\n rval = e.asValueOrDefault(mKey, null);\n }\n }\n }\n return rval;\n }\n static parseCsvToEnumArray(enumeration, input) {\n const split = StringRatchet.trimToEmpty(input)\n .split(',')\n .map((s) => s.trim());\n const rval = split.map((s) => EnumRatchet.keyToEnum(enumeration, s)).filter((s) => !!s);\n return rval;\n }\n}\n//# sourceMappingURL=enum-ratchet.js.map","import url from 'url';\nexport class EsmRatchet {\n static fetchDirName(root) {\n if (!root) {\n throw new Error('Need to provide root (should be import.meta.url)');\n }\n const rval = url.fileURLToPath(new URL('.', root));\n return rval;\n }\n static fetchFileName(root) {\n if (!root) {\n throw new Error('Need to provide root (should be import.meta.url)');\n }\n const rval = url.fileURLToPath(root);\n return rval;\n }\n}\n//# sourceMappingURL=esm-ratchet.js.map","import { Logger } from '../logger/logger.js';\nimport { ErrorRatchet } from './error-ratchet.js';\nimport { LoggerLevelName } from '../logger/logger-level-name.js';\nexport class ExpiringObject {\n _config;\n _cacheObject;\n _lastUpdatedEpochMS;\n _timeRemainingMS;\n constructor(inputConfig) {\n this._config = Object.assign({}, this.defaultConfig(), inputConfig || {});\n if (this._config.overrideTimeRemainingMS && this._config.timeToLiveMS) {\n ErrorRatchet.throwFormattedErr('Cannot define both time to live and overrideTimeRemainingMS');\n }\n if (!this._config.overrideTimeRemainingMS && !this._config.timeToLiveMS) {\n ErrorRatchet.throwFormattedErr('Must define exactly one of timeToLiveMS or overrideTimeRemainingMS');\n }\n if (this._config.initialValue) {\n this.update(this._config.initialValue);\n }\n this._timeRemainingMS = this._config.overrideTimeRemainingMS || this.defaultTimeRemainingMS;\n }\n defaultConfig() {\n const rval = {\n generator: null,\n initialValue: null,\n logLevel: LoggerLevelName.debug,\n overrideTimeRemainingMS: null,\n timeToLiveMS: 1_000 * 60,\n };\n return rval;\n }\n async defaultTimeRemainingMS(lastUpdatedEpochMS) {\n let rval = 0;\n if (lastUpdatedEpochMS) {\n const ageMS = new Date().getTime() - lastUpdatedEpochMS;\n rval = Math.max(0, this._config.timeToLiveMS - ageMS);\n }\n return rval;\n }\n update(newValue, doNotUpdateClock = false) {\n this._cacheObject = newValue;\n if (!doNotUpdateClock) {\n this._lastUpdatedEpochMS = new Date().getTime();\n }\n Logger.logByLevel(this._config.logLevel, 'Updated cache value to %j', newValue);\n }\n async fetchCacheObjectTimeRemainingMS() {\n return this._timeRemainingMS(this._lastUpdatedEpochMS);\n }\n async fetch() {\n const remainMS = await this._timeRemainingMS(this._lastUpdatedEpochMS);\n if (!remainMS) {\n this._cacheObject = null;\n this._lastUpdatedEpochMS = null;\n }\n if (!this._cacheObject) {\n if (this._config.generator) {\n const newValue = await this._config.generator();\n Logger.logByLevel(this._config.logLevel, 'Auto call to generator returned %j', newValue);\n this.update(newValue);\n }\n }\n return this._cacheObject;\n }\n}\nexport class ExpiringObjectConfig {\n timeToLiveMS;\n generator;\n initialValue;\n logLevel;\n overrideTimeRemainingMS;\n}\n//# sourceMappingURL=expiring-object.js.map","import { RequireRatchet } from './require-ratchet.js';\nimport { NumberRatchet } from './number-ratchet.js';\nimport { ErrorRatchet } from './error-ratchet.js';\nimport { Logger } from '../logger/logger.js';\nexport class GeolocationRatchet {\n constructor() { }\n static distanceBetweenLocations(lat1, lon1, lat2, lon2, unit = 'M') {\n const uU = !!unit ? unit.toUpperCase() : '';\n if (['M', 'K', 'N', 'F', 'E'].indexOf(uU) === -1) {\n throw new Error('Invalid unit');\n }\n if (lat1 == lat2 && lon1 == lon2) {\n return 0;\n }\n else {\n const radlat1 = (Math.PI * lat1) / 180;\n const radlat2 = (Math.PI * lat2) / 180;\n const theta = lon1 - lon2;\n const radtheta = (Math.PI * theta) / 180;\n let dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);\n if (dist > 1) {\n dist = 1;\n }\n dist = Math.acos(dist);\n dist = (dist * 180) / Math.PI;\n dist = dist * 60 * 1.1515;\n if (uU === 'F') {\n dist *= 5280;\n }\n if (uU === 'K') {\n dist *= 1.609344;\n }\n if (uU === 'E') {\n dist *= 1609.344;\n }\n if (uU === 'N') {\n dist *= 0.8684;\n }\n return dist;\n }\n }\n static distanceBetweenRatchetGeoLocations(loc1, loc2, unit = 'M') {\n return GeolocationRatchet.distanceBetweenLocations(loc1.lat, loc1.lng, loc2.lat, loc2.lng, unit);\n }\n static degreeOfLatLngInMiles(latitudeInDecimalDegress = 0) {\n const latInRads = (latitudeInDecimalDegress * Math.PI) / 180;\n const cosLat = Math.cos(latInRads);\n const rval = NumberRatchet.safeNumber((cosLat * 69.172).toFixed(4));\n return rval;\n }\n static milesInDegLatLng(miles, latitudeInDecimalDegress = 0) {\n RequireRatchet.notNullOrUndefined(miles);\n RequireRatchet.true(miles >= 0);\n const degreeInMiles = GeolocationRatchet.degreeOfLatLngInMiles(latitudeInDecimalDegress);\n return miles / degreeInMiles;\n }\n static centerOfBounds(bounds) {\n RequireRatchet.notNullOrUndefined(bounds);\n return {\n lat: (bounds.extent.lat + bounds.origin.lat) / 2,\n lng: (bounds.extent.lng + bounds.origin.lng) / 2,\n };\n }\n static calculateSplits(input, slices, field) {\n RequireRatchet.notNullOrUndefined(input);\n RequireRatchet.notNullOrUndefined(slices);\n RequireRatchet.notNullOrUndefined(field);\n input.sort((a, b) => a.origin[field] - b.origin[field]);\n const centers = input.map((i) => GeolocationRatchet.centerOfBounds(i));\n const vals = centers.map((c) => c[field]);\n const splits = [];\n for (let i = 1; i < vals.length; i++) {\n const size = vals[i] - vals[i - 1];\n if (splits.length < slices) {\n splits.push({ idx: i, size: size });\n splits.sort((a, b) => a.size - b.size);\n }\n else if (size > splits[0].size) {\n splits[0] = { idx: i, size: size };\n splits.sort((a, b) => a.size - b.size);\n }\n else {\n Logger.silly('Skipping, size : %d, %j', size, splits);\n }\n }\n Logger.info('Splits at : %j', splits);\n splits.sort((a, b) => a.idx - b.idx);\n return splits;\n }\n static clusterGeoBounds(inputVal, latSlices = 2, lngSlices = 5) {\n let rval = null;\n if (latSlices * lngSlices < 2) {\n ErrorRatchet.throwFormattedErr('Cannot set slices to less than 2 : %d x %d', latSlices, lngSlices);\n }\n if (!!inputVal) {\n rval = [];\n const input = Object.assign([], inputVal);\n input.sort((a, b) => a.origin.lng - b.origin.lng);\n const lngSplits = GeolocationRatchet.calculateSplits(inputVal, lngSlices - 1, 'lng');\n lngSplits.sort((a, b) => a.idx - b.idx);\n for (let i = 0; i <= lngSplits.length; i++) {\n const lngStartIdx = i === 0 ? 0 : lngSplits[i - 1].idx;\n const lngEndIdx = i === lngSplits.length ? input.length : lngSplits[i].idx;\n const lngBatch = input.slice(lngStartIdx, lngEndIdx);\n lngBatch.sort((a, b) => a.origin.lat - b.origin.lat);\n const latSplits = GeolocationRatchet.calculateSplits(lngBatch, latSlices - 1, 'lat');\n for (let j = 0; j <= latSplits.length; j++) {\n const latStartIdx = j == 0 ? 0 : latSplits[j - 1].idx;\n const latEndIdx = j === latSplits.length ? lngBatch.length : latSplits[j].idx;\n const latBatch = lngBatch.slice(latStartIdx, latEndIdx);\n rval.push(GeolocationRatchet.combineBounds(latBatch));\n }\n }\n Logger.info('New bounds : %j', rval);\n }\n return rval;\n }\n static canonicalizeBounds(inp, allowCrossover = false) {\n RequireRatchet.notNullOrUndefined(inp, 'RatchetLocationBounds');\n const minLat = Math.min(inp.extent.lat, inp.origin.lat);\n const maxLat = Math.max(inp.extent.lat, inp.origin.lat);\n const minLng = Math.min(inp.extent.lng, inp.origin.lng);\n const maxLng = Math.max(inp.extent.lng, inp.origin.lng);\n const latXover = (minLat < 0 && maxLat > 0) || (minLat > 0 && maxLat < 0);\n const lngXover = (minLat < 0 && maxLat > 0) || (minLat > 0 && maxLat < 0);\n if (latXover || lngXover) {\n if (allowCrossover) {\n return inp;\n }\n else {\n throw new Error('Cannot canonicalize, bounds crosses over boundary');\n }\n }\n const rval = {\n origin: {\n lat: minLat,\n lng: minLng,\n },\n extent: {\n lat: maxLat,\n lng: maxLng,\n },\n };\n return rval;\n }\n static combineBounds(inp) {\n let rval = null;\n if (inp && inp.length > 0) {\n rval = {\n origin: {\n lat: inp.map((i) => i.origin.lat).reduce((a, i) => Math.min(a, i)),\n lng: inp.map((i) => i.origin.lng).reduce((a, i) => Math.min(a, i)),\n },\n extent: {\n lat: inp.map((i) => i.extent.lat).reduce((a, i) => Math.max(a, i)),\n lng: inp.map((i) => i.extent.lng).reduce((a, i) => Math.max(a, i)),\n },\n };\n }\n return rval;\n }\n static roundLocation(r, roundDigits) {\n return {\n lat: NumberRatchet.safeNumber(r.lat.toFixed(roundDigits)),\n lng: NumberRatchet.safeNumber(r.lng.toFixed(roundDigits)),\n };\n }\n static locationToBounds(loc, radiusMiles) {\n const offset = GeolocationRatchet.milesInDegLatLng(radiusMiles, loc.lat);\n const gfb = {\n origin: {\n lat: loc.lat - offset,\n lng: loc.lng - offset,\n },\n extent: {\n lat: loc.lat + offset,\n lng: loc.lng + offset,\n },\n };\n return gfb;\n }\n static sameLocation(loc1, loc2) {\n return !!loc1 && !!loc2 && loc1.lat === loc2.lat && loc1.lng === loc2.lng;\n }\n static pointInBounds(pt, bound) {\n return (!!pt &&\n !!bound &&\n NumberRatchet.between(pt.lat, bound.origin.lat, bound.extent.lat) &&\n NumberRatchet.between(pt.lng, bound.origin.lng, bound.extent.lng));\n }\n static pointInAnyBound(pt, inBounds, minPointsBeforeMapping = 10) {\n let rval = false;\n if (inBounds.length > minPointsBeforeMapping) {\n const mp = GeolocationRatchet.buildRatchetLocationBoundsMap(inBounds);\n rval = GeolocationRatchet.pointInRatchetLocationBoundsMap(pt, mp);\n }\n else {\n for (let i = 0; i < inBounds.length && !rval; i++) {\n rval = GeolocationRatchet.pointInBounds(pt, inBounds[i]);\n }\n }\n return rval;\n }\n static pointInRatchetLocationBoundsMap(pt, mp) {\n let rval = false;\n const entry = GeolocationRatchet.findRatchetLocationBoundsMapEntry(pt, mp);\n if (!!entry) {\n const bounds = entry.bounds;\n for (let i = 0; i < bounds.length && !rval; i++) {\n rval = GeolocationRatchet.pointInBounds(pt, bounds[i]);\n }\n }\n return rval;\n }\n static findRatchetLocationBoundsMapEntry(pt, mp) {\n let rval = null;\n if (pt.lat >= mp.latOffset && pt.lat <= mp.maxLat && pt.lng >= mp.lngOffset && pt.lng <= mp.maxLng) {\n const ltIdx = Math.trunc(pt.lat) - mp.latOffset;\n const lngIdx = Math.trunc(pt.lng) - mp.lngOffset;\n rval = mp.mapping[ltIdx][lngIdx];\n }\n return rval;\n }\n static buildRatchetLocationBoundsMap(inBounds) {\n const minLat = inBounds.map((i) => i.origin.lat).reduce((a, i) => Math.min(a, i));\n const minLng = inBounds.map((i) => i.origin.lng).reduce((a, i) => Math.min(a, i));\n const maxLat = inBounds.map((i) => i.extent.lat).reduce((a, i) => Math.max(a, i));\n const maxLng = inBounds.map((i) => i.extent.lng).reduce((a, i) => Math.max(a, i));\n const latOffset = Math.trunc(minLat) - 1;\n const lngOffset = Math.trunc(minLng) - 1;\n const latEntries = Math.trunc(maxLat) - latOffset + 1;\n const lngEntries = Math.trunc(maxLng) - lngOffset + 1;\n const mapping = [];\n for (let i = 0; i < latEntries; i++) {\n const newRow = [];\n for (let j = 0; j < lngEntries; j++) {\n newRow.push({\n lat: latOffset + i,\n lng: lngOffset + j,\n bounds: [],\n });\n }\n mapping.push(newRow);\n }\n inBounds.forEach((b) => {\n for (let i = Math.trunc(b.origin.lat); i <= Math.trunc(b.extent.lat); i++) {\n const latIdx = i - latOffset;\n const row = mapping[latIdx];\n for (let j = Math.trunc(b.origin.lng); j <= Math.trunc(b.extent.lng); j++) {\n const lngIdx = j - lngOffset;\n row[lngIdx].bounds.push(b);\n }\n }\n });\n return {\n latOffset: latOffset,\n lngOffset: lngOffset,\n maxLat: latOffset + latEntries,\n maxLng: lngOffset + lngEntries,\n mapping: mapping,\n };\n }\n}\n//# sourceMappingURL=geolocation-ratchet.js.map","import { ErrorRatchet } from './error-ratchet.js';\nimport { RequireRatchet } from './require-ratchet.js';\nimport { Logger } from '../logger/logger.js';\nexport class GlobalRatchet {\n constructor() { }\n static fetchGlobalRecord(returnNullOnNone) {\n let rval = null;\n if (process?.env) {\n Logger.silly('Using process.env as global');\n rval = process.env;\n }\n else if (global?.process?.env) {\n Logger.silly('Using global.process.env as global');\n rval = global.process.env;\n }\n else if (global) {\n Logger.silly('Using process.env as global');\n rval = global;\n }\n if (!rval) {\n if (returnNullOnNone) {\n Logger.silly('Returning null as global');\n rval = null;\n }\n else {\n throw ErrorRatchet.fErr('Could not find process.env OR global in scope');\n }\n }\n return rval;\n }\n static fetchGlobalVar(envVar) {\n RequireRatchet.notNullOrUndefined(envVar, 'envVar');\n const myGlobal = GlobalRatchet.fetchGlobalRecord();\n const value = myGlobal[envVar];\n return value;\n }\n static setGlobalVar(envVar, value) {\n RequireRatchet.notNullOrUndefined(envVar, 'envVar');\n RequireRatchet.notNullOrUndefined(value, 'value');\n const myGlobal = GlobalRatchet.fetchGlobalRecord();\n myGlobal[envVar] = value;\n }\n}\n//# sourceMappingURL=global-ratchet.js.map","export class KeyValue {\n key;\n value;\n}\n//# sourceMappingURL=key-value.js.map","export class No {\n static op(...args) {\n }\n}\n//# sourceMappingURL=no.js.map","import { Logger } from '../logger/logger.js';\nimport { LoggerLevelName } from '../logger/logger-level-name.js';\nexport class TimeoutToken {\n title;\n timeoutMS;\n __timeoutTokenFlagField = true;\n constructor(title, timeoutMS) {\n this.title = title;\n this.timeoutMS = timeoutMS;\n }\n writeToLog(logLevel = LoggerLevelName.warn) {\n Logger.logByLevel(logLevel, 'Timed out after %d ms waiting for results of %s', this.timeoutMS, this.title);\n }\n static isTimeoutToken(value) {\n return !!value && !!value['__timeoutTokenFlagField'];\n }\n}\n//# sourceMappingURL=timeout-token.js.map","import { DurationRatchet } from './duration-ratchet.js';\nimport { StringRatchet } from './string-ratchet.js';\nimport { RequireRatchet } from './require-ratchet.js';\nimport { LoggerLevelName } from '../logger/logger-level-name.js';\nimport { Logger } from '../logger/logger.js';\nexport class StopWatch {\n label;\n starts = new Map();\n ends = new Map();\n createTime = Date.now();\n constructor(label = StringRatchet.createRandomHexString(4)) {\n this.label = label;\n }\n start(name) {\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(name, 'name');\n const now = Date.now();\n this.starts.set(StringRatchet.trimToNull(name), now);\n return now;\n }\n stop(name) {\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(name, 'name');\n const now = Date.now();\n this.ends.set(StringRatchet.trimToNull(name), now);\n return now;\n }\n reset(name) {\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(name, 'name');\n this.starts.delete(StringRatchet.trimToNull(name));\n this.ends.delete(StringRatchet.trimToNull(name));\n }\n hasTimer(name) {\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(name, 'name');\n return this.starts.has(name);\n }\n log(name, shortForm, logLevel = LoggerLevelName.info) {\n Logger.logByLevel(logLevel, this.dump(name, shortForm));\n }\n logExpected(pctComplete, name, shortForm, logLevel = LoggerLevelName.info) {\n Logger.logByLevel(logLevel, this.dumpExpected(pctComplete, name, shortForm));\n }\n timerNames() {\n return Array.from(this.starts.keys());\n }\n dumpAll(separator = ', ', shortForm) {\n const outs = this.timerNames().map((s) => this.dump(s, shortForm));\n let rval = 'Overall: ' + this.dump(null, shortForm);\n if (outs.length > 0) {\n rval += separator;\n rval += outs.join(separator);\n }\n return rval;\n }\n dump(name, shortForm) {\n let rval = this.label + ' ';\n const cleanName = StringRatchet.trimToNull(name);\n if (cleanName && !this.hasTimer(cleanName)) {\n rval += 'No such timer : ' + cleanName;\n }\n else {\n const start = name ? this.starts.get(cleanName) : this.createTime;\n const end = name ? this.ends.get(cleanName) : Date.now();\n rval += (cleanName || 'Default') + ' ';\n if (!!start && !!end) {\n rval += 'completed in ' + DurationRatchet.formatMsDuration(end - start, !shortForm);\n }\n else if (!!start) {\n rval += 'running for ' + DurationRatchet.formatMsDuration(Date.now() - start, !shortForm);\n }\n }\n return rval;\n }\n dumpExpected(pctComplete, name, shortForm) {\n let rval = this.label + ' ';\n const cleanName = StringRatchet.trimToNull(name);\n if (cleanName && !this.hasTimer(cleanName)) {\n rval += 'No such timer : ' + cleanName;\n }\n else {\n if (!pctComplete || pctComplete <= 0) {\n rval += 'Cannot generate output for 0 percent complete';\n }\n else if (pctComplete > 1) {\n rval += 'Cannot generate output for percent > 1';\n }\n else {\n rval += (cleanName || 'Default') + ' ';\n const start = name ? this.starts.get(cleanName) : this.createTime;\n const end = name ? this.ends.get(cleanName) : Date.now();\n if (!!start && !!end) {\n rval += 'completed in ' + DurationRatchet.formatMsDuration(end - start, !shortForm);\n }\n else if (!!start) {\n const now = Date.now();\n const elapsedMS = now - start;\n const expectedTotalMS = elapsedMS / pctComplete;\n const remainMS = expectedTotalMS - elapsedMS;\n rval +=\n 'running for ' +\n DurationRatchet.formatMsDuration(elapsedMS, !shortForm) +\n ' approx ' +\n DurationRatchet.formatMsDuration(remainMS, !shortForm) +\n ' remaining';\n }\n }\n }\n return rval;\n }\n expectedRemainingMS(pctComplete, name) {\n let rval = null;\n if (!pctComplete || pctComplete <= 0) {\n }\n else if (pctComplete > 1) {\n }\n else {\n const cleanName = StringRatchet.trimToNull(name);\n const start = name ? this.starts.get(cleanName) : this.createTime;\n const end = name ? this.ends.get(cleanName) : Date.now();\n if (!!start && !!end) {\n rval = end - start;\n }\n else if (!!start) {\n const now = Date.now();\n const elapsedMS = now - start;\n const expectedTotalMS = elapsedMS / pctComplete;\n rval = expectedTotalMS - elapsedMS;\n }\n }\n return rval;\n }\n elapsedMS(name) {\n let rval = null;\n const cleanName = StringRatchet.trimToNull(name);\n if (cleanName && !this.hasTimer(cleanName)) {\n rval = null;\n }\n else {\n const start = name ? this.starts.get(cleanName) : this.createTime;\n const end = name ? this.ends.get(cleanName) : Date.now();\n if (!!start && !!end) {\n rval = end - start;\n }\n else if (!!start) {\n rval = Date.now() - start;\n }\n }\n return rval;\n }\n}\n//# sourceMappingURL=stop-watch.js.map","import { Logger } from '../logger/logger.js';\nimport { ArrayRatchet } from './array-ratchet.js';\nimport { TimeoutToken } from './timeout-token.js';\nimport { StopWatch } from './stop-watch.js';\nimport { LoggerLevelName } from '../logger/logger-level-name.js';\nexport class PromiseRatchet {\n static resolveOnEvent(evtSrc, okEvtNames, errEvtNames = [], rval = null) {\n if (!evtSrc || !okEvtNames || okEvtNames.length === 0 || !evtSrc['on']) {\n Promise.reject('Cannot continue - missing source object or name, or the object is not an event source');\n }\n return new Promise((res, rej) => {\n okEvtNames.forEach((e) => {\n evtSrc.on(e, () => {\n res(rval);\n });\n });\n if (!!errEvtNames) {\n errEvtNames.forEach((e) => {\n evtSrc.on(e, (err) => {\n rej(err);\n });\n });\n }\n });\n }\n static timeout(srcPromise, title, timeoutMS) {\n return Promise.race([srcPromise, PromiseRatchet.createTimeoutPromise(title, timeoutMS)]);\n }\n static createTimeoutPromise(title, timeoutMS) {\n return new Promise((resolve, reject) => {\n const id = setTimeout(() => {\n clearTimeout(id);\n const rval = new TimeoutToken(title, timeoutMS);\n resolve(rval);\n }, timeoutMS);\n });\n }\n static async wait(time) {\n await PromiseRatchet.createTimeoutPromise('Wait ' + time, time);\n Logger.silly('Finished wait of %d ms', time);\n }\n static dumpResult(result, autoDebug = false) {\n Logger.info('Success, result was : \\n\\n%s\\n\\n', JSON.stringify(result));\n if (autoDebug) {\n debugger;\n }\n process.exit(0);\n }\n static dumpError(err, autoDebug = false) {\n Logger.warn('Failure, err was : \\n\\n%s\\n\\n -- \\n\\n%s\\n\\n', JSON.stringify(err), String(err));\n console.trace();\n if (autoDebug) {\n debugger;\n }\n process.exit(1);\n }\n static logErrorAndReturnNull(err, autoDebug = false) {\n Logger.warn('Failure, err was : \\n\\n%s\\n\\n -- \\n\\n%s\\n\\n', JSON.stringify(err), String(err));\n if (autoDebug) {\n debugger;\n }\n return null;\n }\n static runPromiseAndDump(promise) {\n promise.then(PromiseRatchet.dumpResult).catch(PromiseRatchet.dumpError);\n }\n static async waitFor(testFunction, expectedValue, intervalMS, maxCycles, label = 'waitFor', count = 0) {\n if (expectedValue == null || intervalMS < 50 || maxCycles < 1 || count < 0 || typeof testFunction != 'function') {\n Logger.warn('%s: Invalid configuration for waitFor - exiting immediately', label);\n Logger.warn('ExpectedValue : %s ; interval: %d ; maxCycles: %d ; test : %s', expectedValue, intervalMS, maxCycles, typeof testFunction);\n return false;\n }\n let curVal = null;\n try {\n curVal = testFunction(count);\n }\n catch (err) {\n Logger.warn('%s: Caught error while waiting, giving up', label);\n return false;\n }\n if (curVal === null) {\n Logger.debug('%s:CurVal was null - aborting', label);\n return false;\n }\n else if (curVal == expectedValue) {\n Logger.debug('%s:Found expected value', label);\n return true;\n }\n else if (count > maxCycles) {\n Logger.debug('%s:Exceeded max cycles, giving up', label);\n return false;\n }\n else {\n Logger.debug('%s : value not reached yet, waiting (count = %d of %d)', label, count, maxCycles);\n await PromiseRatchet.wait(intervalMS);\n return PromiseRatchet.waitFor(testFunction, expectedValue, intervalMS, maxCycles, label, count + 1);\n }\n }\n static async runBoundedParallel(promiseFn, params, context, maxConcurrent = 1, logLevel = LoggerLevelName.debug) {\n const sw = new StopWatch();\n let rval = [];\n let remain = params;\n Logger.logByLevel(logLevel, 'Processing %d total elements %d at a time', params.length, maxConcurrent);\n const ctx = context || this;\n let processed = 0;\n const totalCount = remain.length;\n while (remain.length > 0) {\n const curBatch = remain.slice(0, Math.min(remain.length, maxConcurrent));\n remain = remain.slice(curBatch.length);\n const proms = curBatch.map((c) => promiseFn.apply(ctx, c));\n const output = await Promise.all(proms);\n processed += proms.length;\n rval = rval.concat(output);\n const pct = processed / totalCount;\n Logger.logByLevel(logLevel, '%d elements remain : %s', remain.length, sw.dumpExpected(pct));\n }\n sw.log();\n return rval;\n }\n static async runBoundedParallelSingleParam(promiseFn, params, context, maxConcurrent = 1, logLevel = LoggerLevelName.debug) {\n const wrappedParams = ArrayRatchet.wrapElementsInArray(params);\n return PromiseRatchet.runBoundedParallel(promiseFn, wrappedParams, context, maxConcurrent, logLevel);\n }\n static async asyncForEachSerial(array, callback) {\n for (let index = 0; index < array.length; index++) {\n await callback(array[index], index, array);\n }\n }\n static async asyncForEachParallel(array, callback) {\n const proms = [];\n for (let index = 0; index < array.length; index++) {\n proms.push(callback(array[index], index, array));\n }\n await Promise.all(proms);\n }\n constructor() {\n }\n}\n//# sourceMappingURL=promise-ratchet.js.map","import { DateTime } from 'luxon';\nexport class TimeZoneRatchet {\n static PACIFIC = new TimeZoneRatchet('America/Los_Angeles');\n timezone;\n constructor(timezone) {\n if (!timezone) {\n throw 'Timezone cannot be null';\n }\n this.timezone = timezone;\n }\n currentHour() {\n const rval = DateTime.local().setZone(this.timezone).hour;\n return rval;\n }\n toEpochSeconds(dt) {\n return Math.round(dt.toMillis() / 1000);\n }\n startOfTodayEpochSeconds() {\n const startOfToday = this.toEpochSeconds(DateTime.local().setZone(this.timezone).set({ hour: 0, minute: 0, second: 0, millisecond: 0 }));\n return startOfToday;\n }\n startOfMatchingDayEpochSeconds(inputTS) {\n const startOfToday = this.toEpochSeconds(DateTime.fromMillis(inputTS).set({ hour: 0, minute: 0, second: 0, millisecond: 0 }));\n return startOfToday;\n }\n startOfMatchingDayEpochMS(inputTS) {\n return this.startOfMatchingDayEpochSeconds(inputTS) * 1000;\n }\n startOfCurrentHourEpochSeconds() {\n const rval = this.toEpochSeconds(DateTime.local().setZone(this.timezone).set({ minute: 0, second: 0, millisecond: 0 }));\n return rval;\n }\n startOfCurrentMinuteEpochSeconds() {\n const rval = this.toEpochSeconds(DateTime.local().setZone(this.timezone).set({ second: 0, millisecond: 0 }));\n return rval;\n }\n startOfCurrentSecondEpochSeconds() {\n const rval = this.toEpochSeconds(DateTime.local().setZone(this.timezone).set({ millisecond: 0 }));\n return rval;\n }\n startOfTodayEpochMS() {\n const startOfToday = DateTime.local().setZone(this.timezone).set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).toMillis();\n return startOfToday;\n }\n dailySlotCount(slotWidthMs) {\n return Math.ceil(86400000 / slotWidthMs);\n }\n currentTimeSlotIdx(slotWidthMs) {\n if (slotWidthMs < 1) {\n throw new Error('Cannot process with slot less than one ms wide');\n }\n const startOfToday = this.startOfTodayEpochMS();\n const now = new Date().getTime();\n const delta = now - startOfToday;\n const idx = Math.floor(delta / slotWidthMs);\n return idx;\n }\n matchingTimeSlotIdx(timestamp, slotWidthMs) {\n if (slotWidthMs < 1) {\n throw new Error('Cannot process with slot less than one ms wide');\n }\n const startOfDay = this.startOfMatchingDayEpochMS(timestamp);\n const delta = timestamp - startOfDay;\n const idx = Math.floor(delta / slotWidthMs);\n return idx;\n }\n startOfCurrentSlotEpochMS(slotWidthMs) {\n const startOfToday = this.startOfTodayEpochMS();\n const currentIdx = this.currentTimeSlotIdx(slotWidthMs);\n return startOfToday + currentIdx * slotWidthMs;\n }\n startOfMatchingSlotEpochMS(timestamp, slotWidthMs) {\n const startOfDay = this.startOfMatchingDayEpochMS(timestamp);\n const currentIdx = this.matchingTimeSlotIdx(timestamp, slotWidthMs);\n return startOfDay + currentIdx * slotWidthMs;\n }\n}\n//# sourceMappingURL=time-zone-ratchet.js.map","export class Uint8ArrayRatchet {\n constructor() { }\n static mergeArrays(myArrays) {\n let rval = null;\n if (myArrays?.length) {\n let length = 0;\n myArrays.forEach(item => {\n length += item.length;\n });\n rval = new Uint8Array(length);\n let offset = 0;\n myArrays.forEach(item => {\n rval.set(item, offset);\n offset += item.length;\n });\n }\n return rval;\n }\n}\n//# sourceMappingURL=uint-8-array-ratchet.js.map","import { ErrorRatchet } from './error-ratchet.js';\nimport { StringRatchet } from './string-ratchet.js';\nimport { Uint8ArrayRatchet } from './uint-8-array-ratchet.js';\nexport class WebStreamRatchet {\n constructor() { }\n static async webReadableStreamToUint8Array(stream) {\n const out = [];\n const writer = new WritableStream({\n async write(chunk, controller) {\n if (typeof chunk === 'string') {\n out.push(StringRatchet.stringToUint8Array(chunk));\n }\n else {\n out.push(chunk);\n }\n return null;\n },\n abort(reason) {\n ErrorRatchet.throwFormattedErr('StringWebWritableStream failure : %s', reason);\n },\n }, {\n highWaterMark: 3,\n size: () => 1,\n });\n await stream.pipeTo(writer);\n return Uint8ArrayRatchet.mergeArrays(out);\n }\n static async webReadableStreamToString(stream) {\n const buf = await WebStreamRatchet.webReadableStreamToUint8Array(stream);\n return new TextDecoder().decode(buf);\n }\n static stringToWebReadableStream(input) {\n const rval = new ReadableStream({\n start(controller) {\n if (input) {\n controller.enqueue(input);\n }\n controller.close();\n return null;\n },\n }, {\n highWaterMark: input ? input.length : null,\n });\n return rval;\n }\n}\n//# sourceMappingURL=web-stream-ratchet.js.map","export class LogMessageBuilder {\n wrapped;\n constructor(lvl, messageSource) {\n if (!lvl) {\n throw Error('Cannot set level to null/undefined');\n }\n this.wrapped = { lvl: lvl, timestamp: Date.now(), messageSource: messageSource };\n }\n clone() {\n const rval = new LogMessageBuilder(this.wrapped.lvl, this.wrapped.messageSource);\n rval.wrapped = Object.assign({}, this.wrapped);\n return rval;\n }\n level(lvl) {\n if (!lvl) {\n throw Error('Cannot set level to null/undefined');\n }\n this.wrapped.lvl = lvl;\n return this;\n }\n timestamp(val) {\n if (!val) {\n throw Error('Cannot set timestamp to null/undefined');\n }\n this.wrapped.timestamp = val;\n return this;\n }\n messageSource(val) {\n this.wrapped.messageSource = val;\n return this;\n }\n subVars(val) {\n this.wrapped.subsVars = val || [];\n return this;\n }\n params(val) {\n this.wrapped.params = val || {};\n return this;\n }\n p(name, value) {\n this.wrapped.params = this.wrapped.params || {};\n this.wrapped.params[name] = value;\n return this;\n }\n toMessage() {\n return Object.assign({}, this.wrapped);\n }\n}\n//# sourceMappingURL=log-message-builder.js.map","import { Logger } from '../logger/logger.js';\nexport class NetworkRatchet {\n static LOCAL_IP = null;\n static findLocalIp(useCache = true) {\n Logger.info('Attempting to find local IP (V 2)');\n if (NetworkRatchet.LOCAL_IP && useCache) {\n return Promise.resolve(NetworkRatchet.LOCAL_IP);\n }\n else {\n if (typeof window !== 'undefined') {\n return new Promise(function (resolve, reject) {\n try {\n const RTCPeerConnection = window['RTCPeerConnection'] || window['webkitRTCPeerConnection'] || window['mozRTCPeerConnection'];\n if (RTCPeerConnection) {\n const rtc = new RTCPeerConnection({ iceServers: [] });\n const addrs = Object.create(null);\n addrs['0.0.0.0'] = false;\n if (1 || window['mozRTCPeerConnection']) {\n rtc.createDataChannel('', { reliable: false });\n }\n rtc.onicecandidate = function (evt) {\n if (evt.candidate) {\n NetworkRatchet.grepSDP('a=' + evt.candidate.candidate, addrs, resolve);\n }\n };\n rtc.createOffer(function (offerDesc) {\n NetworkRatchet.grepSDP(offerDesc.sdp, addrs, resolve);\n rtc.setLocalDescription(offerDesc);\n }, function (e) {\n Logger.warn('Offer failed : %s', e);\n resolve(NetworkRatchet.updateLocalIP('FIND_UNSUPPORTED'));\n });\n }\n else {\n Logger.warn('IP Address find not supported on this device');\n resolve(NetworkRatchet.updateLocalIP('FIND_UNSUPPORTED'));\n }\n }\n catch (err) {\n Logger.warn('Error finding local ip address : %s', err);\n resolve(NetworkRatchet.updateLocalIP('ERROR'));\n }\n });\n }\n else {\n Logger.warn('Window not found, cannot calculate local ip');\n return Promise.resolve(NetworkRatchet.updateLocalIP('NO_WINDOW'));\n }\n }\n }\n static parseUrl(href) {\n const match = href.match(/^(https?\\:)\\/\\/(([^:\\/?#]*)(?:\\:([0-9]+))?)([\\/]{0,1}[^?#]*)(\\?[^#]*|)(#.*|)$/);\n const rval = match &&\n {\n href: href,\n protocol: match[1],\n host: match[2],\n hostname: match[3],\n port: match[4],\n pathname: match[5],\n search: match[6],\n hash: match[7],\n };\n return rval;\n }\n static updateLocalIP(newIp) {\n NetworkRatchet.LOCAL_IP = newIp;\n return NetworkRatchet.LOCAL_IP;\n }\n static grepSDP(sdp, addrs, resolve) {\n const hosts = [];\n sdp.split('\\r\\n').forEach(function (line) {\n if (~line.indexOf('a=candidate')) {\n const parts = line.split(' '), addr = parts[4], type = parts[7];\n if (type === 'host') {\n NetworkRatchet.updateAddressList(addr, addrs, resolve);\n }\n }\n else if (~line.indexOf('c=')) {\n const parts = line.split(' '), addr = parts[2];\n NetworkRatchet.updateAddressList(addr, addrs, resolve);\n }\n });\n }\n static updateAddressList(newAddr, addrs, resolve) {\n if (newAddr in addrs)\n return;\n else\n addrs[newAddr] = true;\n const displayAddrs = Object.keys(addrs).filter(function (k) {\n return addrs[k];\n });\n if (displayAddrs && displayAddrs.length == 1) {\n resolve(NetworkRatchet.updateLocalIP(displayAddrs[0]));\n }\n else {\n const multi = displayAddrs.sort().join(',');\n Logger.warn('Multiple addresses found, returning sorted join : %s', multi);\n resolve(NetworkRatchet.updateLocalIP(multi));\n }\n }\n}\n//# sourceMappingURL=network-ratchet.js.map","import { NetworkRatchet } from './network-ratchet.js';\nimport { Logger } from '../logger/logger.js';\nexport class BrowserLocalIpProvider {\n currentIp = 'UNSET';\n constructor() {\n NetworkRatchet.findLocalIp(false)\n .then((result) => {\n Logger.info('Setting local IP to %s', result);\n this.currentIp = result;\n })\n .catch((err) => {\n Logger.warn('Unable to set current IP - leaving as UNSET : %s', err);\n });\n }\n ready() {\n return this.currentIp !== 'UNSET';\n }\n currentLocalIpAddress() {\n return this.currentIp;\n }\n}\n//# sourceMappingURL=browser-local-ip-provider.js.map","export class FixedLocalIpProvider {\n fixed;\n constructor(fixed) {\n this.fixed = fixed;\n }\n currentLocalIpAddress() {\n return this.fixed;\n }\n}\n//# sourceMappingURL=fixed-local-ip-provider.js.map","import util from 'util';\nimport { NumberRatchet } from \"../lang/number-ratchet.js\";\nexport class RestfulApiHttpError extends Error {\n static RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY = '__ratchetRestfulApiHttpErrorFlag';\n _httpStatusCode = 500;\n _errors;\n _detailErrorCode;\n _endUserErrors;\n _details;\n _requestId;\n _wrappedError;\n constructor(...errors) {\n super(RestfulApiHttpError.combineErrorStringsWithDefault(errors));\n Object.setPrototypeOf(this, RestfulApiHttpError.prototype);\n this._errors = errors;\n this[RestfulApiHttpError.RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY] = true;\n }\n static combineErrorStringsWithDefault(errors, defMessage = 'Internal Server Error') {\n return errors && errors.length > 0 ? errors.join(',') : defMessage;\n }\n setFormattedErrorMessage(format, ...input) {\n const msg = util.format(format, ...input);\n this.errors = [msg];\n }\n withFormattedErrorMessage(format, ...input) {\n this.setFormattedErrorMessage(format, ...input);\n return this;\n }\n withHttpStatusCode(httpStatusCode) {\n this.httpStatusCode = httpStatusCode;\n return this;\n }\n withErrors(errors) {\n this.errors = errors;\n return this;\n }\n withDetailErrorCode(detailErrorCode) {\n this._detailErrorCode = detailErrorCode;\n return this;\n }\n withEndUserErrors(endUserErrors) {\n this._endUserErrors = endUserErrors;\n return this;\n }\n withDetails(details) {\n this._details = details;\n return this;\n }\n withRequestId(requestId) {\n this._requestId = requestId;\n return this;\n }\n withWrappedError(err) {\n this._wrappedError = err;\n return this;\n }\n isWrappedError() {\n return !!this._wrappedError;\n }\n static wrapError(err) {\n let rval = null;\n if (RestfulApiHttpError.objectIsRestfulApiHttpError(err)) {\n rval = err;\n }\n else {\n rval = new RestfulApiHttpError(err.message).withWrappedError(err).withHttpStatusCode(500);\n }\n return rval;\n }\n static objectIsRestfulApiHttpError(obj) {\n return obj && obj[RestfulApiHttpError.RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY] === true;\n }\n get httpStatusCode() {\n return this._httpStatusCode;\n }\n get errors() {\n return this._errors;\n }\n get detailErrorCode() {\n return this._detailErrorCode;\n }\n get endUserErrors() {\n return this._endUserErrors;\n }\n get details() {\n return this._details;\n }\n get requestId() {\n return this._requestId;\n }\n get wrappedError() {\n return this._wrappedError;\n }\n set httpStatusCode(value) {\n this._httpStatusCode = value || 500;\n }\n set errors(value) {\n this._errors = value || ['Internal Server Error'];\n this.message = RestfulApiHttpError.combineErrorStringsWithDefault(this._errors);\n }\n set detailErrorCode(value) {\n this._detailErrorCode = value;\n }\n set endUserErrors(value) {\n this._endUserErrors = value;\n }\n set details(value) {\n this._details = value;\n }\n set requestId(value) {\n this._requestId = value || 'MISSING';\n }\n set wrappedError(value) {\n this._wrappedError = value;\n }\n static errorIsX0x(errIn, xClass) {\n let rval = false;\n if (errIn && RestfulApiHttpError.objectIsRestfulApiHttpError(errIn)) {\n const err = errIn;\n const val = NumberRatchet.safeNumber(err.httpStatusCode);\n const bot = xClass * 100;\n const top = bot + 99;\n rval = val >= bot && val <= top;\n }\n return rval;\n }\n static errorIs40x(err) {\n return RestfulApiHttpError.errorIsX0x(err, 4);\n }\n static errorIs50x(err) {\n return RestfulApiHttpError.errorIsX0x(err, 5);\n }\n}\n//# sourceMappingURL=restful-api-http-error.js.map","import { Logger } from '../../logger/logger.js';\nimport { StringRatchet } from '../../lang/string-ratchet.js';\nimport fetch from 'cross-fetch';\nexport class GoogleRecaptchaRatchet {\n static GOOGLE_VERIFY_URL = 'https://www.google.com/recaptcha/api/siteverify?secret={{KEY}}&response={{TOKEN}}';\n static async verifyRecaptchaToken(keySecret, token, fetchFn = fetch) {\n Logger.debug('Verifying recaptcha token : %s', token);\n let rval = null;\n if (!StringRatchet.safeString(token)) {\n Logger.warn('Recaptcha validation error, no token passed : %s', token);\n return rval;\n }\n Logger.info('Validating Recaptcha via Google API : %s', token);\n let url = GoogleRecaptchaRatchet.GOOGLE_VERIFY_URL;\n url = url.split('{{KEY}}').join(keySecret);\n url = url.split('{{TOKEN}}').join(token);\n try {\n const resp = await fetchFn(url);\n const body = await resp.json();\n rval = body && body.success;\n }\n catch (err) {\n Logger.error('Failed to read from google : %s', err);\n rval = false;\n }\n return rval;\n }\n}\n//# sourceMappingURL=google-recaptcha-ratchet.js.map","import fetch from 'cross-fetch';\nimport { RequireRatchet } from '../../lang/require-ratchet.js';\nimport { Base64Ratchet } from '../../lang/base64-ratchet.js';\nimport { StringRatchet } from '../../lang/string-ratchet.js';\nimport { Logger } from '../../logger/logger.js';\nexport class TwilioRatchet {\n accountSid;\n authToken;\n outBoundNumber;\n static TWILLIO_BASE_API_URL = 'https://api.twilio.com/2010-04-01';\n constructor(accountSid, authToken, outBoundNumber) {\n this.accountSid = accountSid;\n this.authToken = authToken;\n this.outBoundNumber = outBoundNumber;\n RequireRatchet.notNullOrUndefined(accountSid, 'accountSid');\n RequireRatchet.notNullOrUndefined(authToken, 'authToken');\n RequireRatchet.notNullOrUndefined(outBoundNumber, 'outBoundNumber');\n RequireRatchet.true(TwilioRatchet.isValidE164Number(outBoundNumber), 'outBoundNumber invalid format');\n }\n static async sendMessageDirect(accountSid, authToken, outBoundNumber, recipientPhoneNumbers, message) {\n const ratchet = new TwilioRatchet(accountSid, authToken, outBoundNumber);\n const rval = await ratchet.sendMessage(recipientPhoneNumbers, message);\n return rval;\n }\n static generateTwilioBasicAuth(sid, authToken) {\n const authHeader = 'Basic ' + Base64Ratchet.generateBase64VersionOfString(sid + ':' + authToken);\n return authHeader;\n }\n async sendMessage(recipientPhoneNumbers, message) {\n const rval = [];\n RequireRatchet.notNullOrUndefined(recipientPhoneNumbers, 'recipientPhoneNumbers');\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(message), 'message');\n RequireRatchet.true(recipientPhoneNumbers.length > 0, 'recipientPhoneNumbers non-empty');\n recipientPhoneNumbers.forEach((p) => {\n RequireRatchet.true(TwilioRatchet.isValidE164Number(p), p + ' is not valid');\n });\n if (!!recipientPhoneNumbers && recipientPhoneNumbers.length > 0 && !!StringRatchet.trimToNull(message)) {\n Logger.info('Sending %s to %j', message, recipientPhoneNumbers);\n for (let i = 0; i < recipientPhoneNumbers.length; i++) {\n const phoneNumber = recipientPhoneNumbers[i];\n Logger.info('To: %s', phoneNumber);\n if (!TwilioRatchet.isValidE164Number(phoneNumber)) {\n throw new Error('number must be E164 format!');\n }\n const body = 'Body=' +\n encodeURIComponent(message) +\n '&From=' +\n encodeURIComponent(this.outBoundNumber) +\n '&To=' +\n encodeURIComponent(phoneNumber);\n const post = {\n method: 'post',\n headers: {\n authorization: TwilioRatchet.generateTwilioBasicAuth(this.accountSid, this.authToken),\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: body,\n };\n const res = await fetch(TwilioRatchet.TWILLIO_BASE_API_URL + '/Accounts/' + this.accountSid + '/Messages.json', post);\n const parsedResponse = await res.json();\n Logger.debug('TwilioRatchet: For %s got %j', phoneNumber, parsedResponse);\n rval.push(parsedResponse);\n }\n }\n else {\n Logger.warn('Not sending empty message / empty recipients');\n }\n return rval;\n }\n static isValidE164Number(num) {\n return /^\\+?[1-9]\\d{1,14}$/.test(num);\n }\n}\n//# sourceMappingURL=twilio-ratchet.js.map","import { Logger } from '../logger/logger.js';\nimport { NumberRatchet } from '../lang/number-ratchet.js';\nimport { DateTime } from 'luxon';\nexport class BuiltInTransforms {\n static keysOnly(rule) {\n return {\n transform(value, isKey, context) {\n return isKey ? rule.transform(value, isKey, context) : value;\n },\n };\n }\n static valuesOnly(rule) {\n return {\n transform(value, isKey, context) {\n return !isKey ? rule.transform(value, isKey, context) : value;\n },\n };\n }\n static stringReplaceTransform(input, output) {\n return {\n transform(value, isKey, context) {\n return value == input ? output : value;\n },\n };\n }\n static stripStringTransform(input) {\n return {\n transform(value, isKey, context) {\n return value == input ? null : value;\n },\n };\n }\n static retainAll(input) {\n return {\n transform(value, isKey, context) {\n return input.indexOf(value) == -1 ? null : value;\n },\n };\n }\n static removeAll(input) {\n return {\n transform(value, isKey, context) {\n return input.indexOf(value) > -1 ? null : value;\n },\n };\n }\n static snakeToCamelCase() {\n return {\n transform(value, isKey, context) {\n let rval = value;\n if (typeof value == 'string') {\n rval = value.replace(/_([a-z0-9])/gi, function (s, group1) {\n return group1.toUpperCase();\n });\n }\n return rval;\n },\n };\n }\n static stringToNumber() {\n return {\n transform(value, isKey, context) {\n let rval = value;\n if (typeof value == 'string') {\n const num = NumberRatchet.safeNumber(value);\n if (num !== null) {\n rval = num;\n }\n }\n return rval;\n },\n };\n }\n static camelToSnakeCase() {\n return {\n transform(value, isKey, context) {\n let rval = value;\n if (typeof value == 'string') {\n rval = value\n .replace(/\\.?([A-Z]+)/g, function (x, y) {\n return '_' + y.toLowerCase();\n })\n .replace(/^_/, '');\n }\n return rval;\n },\n };\n }\n static concatenateToNewField(newFieldName, oldFieldNamesInOrder, abortIfFieldMissing = true) {\n return {\n transform(value, isKey, context) {\n if (typeof value == 'object') {\n let rval = '';\n oldFieldNamesInOrder.forEach((n) => {\n if (rval != null) {\n const temp = value[n];\n if (temp == null && abortIfFieldMissing) {\n rval = null;\n }\n else {\n rval = temp == null ? rval : rval + String(temp);\n }\n }\n });\n if (rval != null) {\n value[newFieldName] = rval;\n oldFieldNamesInOrder.forEach((n) => delete value[n]);\n }\n }\n return value;\n },\n };\n }\n static numberToBool(fieldNames) {\n return {\n transform(value, isKey, context) {\n if (typeof value == 'object') {\n fieldNames.forEach((n) => {\n const oldVal = value[n];\n if (typeof oldVal == 'number') {\n const newVal = 0 != oldVal;\n value[n] = newVal;\n }\n });\n }\n return value;\n },\n };\n }\n static boolToNumber(fieldNames) {\n return {\n transform(value, isKey, context) {\n if (typeof value == 'object') {\n fieldNames.forEach((n) => {\n const oldVal = value[n];\n if (typeof oldVal == 'boolean') {\n const newVal = oldVal ? 1 : 0;\n value[n] = newVal;\n }\n });\n }\n return value;\n },\n };\n }\n static makeDuplicateField(oldName, newName) {\n return {\n transform(value, isKey, context) {\n if (typeof value == 'object') {\n const oldVal = value[oldName];\n if (oldVal != null) {\n value[newName] = oldVal;\n }\n }\n return value;\n },\n };\n }\n static addField(name, valueToAdd) {\n return {\n transform(value, isKey, context) {\n if (typeof value == 'object') {\n value[name] = valueToAdd;\n }\n return value;\n },\n };\n }\n static reformatDateFields(fieldNames, oldFormat, newFormat) {\n return {\n transform(value, isKey, context) {\n if (typeof value == 'object') {\n fieldNames.forEach((key) => {\n const oldValue = value[key];\n if (oldValue != null) {\n try {\n const parsed = DateTime.fromFormat(oldValue, oldFormat);\n const newValue = parsed.toFormat(newFormat);\n value[key] = newValue;\n }\n catch (err) {\n Logger.warn('Failed to reparse date %s in format %s : %s', oldValue, oldFormat, err);\n }\n }\n });\n }\n return value;\n },\n };\n }\n}\n//# sourceMappingURL=built-in-transforms.js.map","import { Logger } from '../logger/logger.js';\nexport class TransformRatchet {\n static transform(toTransform, rules = []) {\n return TransformRatchet.transformGeneric(toTransform, rules, false, null);\n }\n static transformGeneric(toTransform, rules = [], isKey, context) {\n let rval = null;\n const type = typeof toTransform;\n switch (type) {\n case 'undefined':\n case 'symbol':\n case 'function':\n rval = toTransform;\n break;\n case 'number':\n case 'string':\n case 'boolean':\n rval = TransformRatchet.applyTransformToPrimitive(toTransform, rules, isKey, context);\n break;\n case 'object':\n rval = TransformRatchet.applyTransformToObject(toTransform, rules, isKey, context);\n break;\n default:\n throw new Error('Unrecognized type ' + type);\n }\n return rval;\n }\n static applyTransformToObject(toTransform, rules = [], isKey, context = null) {\n Logger.silly('Tranform: %j, %s, %j', toTransform, isKey, context);\n let rval = null;\n if (toTransform != null) {\n if (Array.isArray(toTransform)) {\n rval = [];\n toTransform.forEach((val) => {\n const newVal = TransformRatchet.transformGeneric(val, rules, isKey, toTransform);\n if (newVal != null) {\n rval.push(newVal);\n }\n });\n }\n else {\n rval = {};\n Object.keys(toTransform).forEach((k) => {\n const oldValue = toTransform[k];\n const newKey = TransformRatchet.applyTransformToPrimitive(k, rules, true, toTransform);\n if (newKey != null) {\n let newValue = TransformRatchet.transformGeneric(oldValue, rules, false, toTransform);\n newValue = TransformRatchet.applyTransformToPrimitive(newValue, rules, false, toTransform);\n if (newValue != null) {\n rval[newKey] = newValue;\n }\n }\n });\n rval = TransformRatchet.applyTransformToPrimitive(rval, rules, false, toTransform);\n }\n }\n return rval;\n }\n static applyTransformToPrimitive(toTransform, rules = [], isKey, context) {\n let rval = toTransform;\n rules.forEach((r) => {\n rval = rval == null ? null : r.transform(rval, isKey, context);\n });\n return rval;\n }\n}\n//# sourceMappingURL=transform-ratchet.js.map","import { Logger } from '../logger/logger.js';\nimport { RequireRatchet } from '../lang/require-ratchet.js';\nimport { LoggerLevelName } from '../logger/logger-level-name.js';\nimport { TransactionFinalState } from './transaction-final-state.js';\nexport class TransactionRatchet {\n static async execute(steps, initialContext, inConfiguration) {\n RequireRatchet.notNullOrUndefined(steps, 'steps');\n RequireRatchet.notNullOrUndefined(initialContext, 'initialContext');\n RequireRatchet.true(steps.length > 0, 'steps may not be empty');\n const config = Object.assign({}, inConfiguration || {});\n config.stepLogLevel = config.stepLogLevel || LoggerLevelName.info;\n const rval = {\n finalContext: initialContext,\n finalState: null,\n };\n const stepNames = steps.map((s, idx) => s.name || 'Step ' + idx);\n Logger.info('Beginning transaction of %d steps', steps.length);\n let idx = 0;\n do {\n Logger.logByLevel(config.stepLogLevel, 'Processing step %d of %d (%s)', idx + 1, steps.length, stepNames[idx]);\n try {\n await steps[idx].execute(rval.finalContext, idx);\n idx++;\n }\n catch (err) {\n Logger.error('Failure detected on step %d : %s : %s : Rolling back', idx, stepNames[idx], err, err);\n rval.error = err;\n rval.errorStep = idx;\n }\n } while (!rval.error && idx < steps.length);\n if (rval.error) {\n do {\n Logger.logByLevel(config.stepLogLevel, 'Rolling back step %d of %d (%s)', idx + 1, steps.length, stepNames[idx]);\n try {\n if (steps[idx].rollback) {\n await steps[idx].rollback(rval.finalContext, idx);\n }\n else {\n Logger.info('Skipping - no rollback defined');\n }\n }\n catch (err) {\n Logger.error('Very bad - rollback code failed on step %d : %s : Aborting in invalid state: %s', idx, stepNames[idx], err, err);\n rval.rollbackError = err;\n rval.rollbackErrorStep = idx;\n }\n idx--;\n } while (idx >= 0);\n }\n rval.finalState = rval.rollbackError\n ? TransactionFinalState.RollbackFailed\n : rval.error\n ? TransactionFinalState.RolledBack\n : TransactionFinalState.Success;\n Logger.info('Transaction completed with status : %s', rval.finalState);\n if (config?.executeAfterRollback && rval.finalState !== TransactionFinalState.Success) {\n try {\n Logger.info('Applying executeAfterRollback');\n await config.executeAfterRollback(rval);\n }\n catch (err) {\n Logger.error('Very bad - failure in executeAfterRollback : %s', err, err);\n }\n }\n if (config?.executeAfterRollbackFailure && rval.finalState !== TransactionFinalState.Success) {\n try {\n Logger.info('Applying executeAfterRollbackFailure');\n await config.executeAfterRollbackFailure(rval);\n }\n catch (err) {\n Logger.error('Very bad - failure in executeAfterRollbackFailure : %s', err, err);\n }\n }\n return rval;\n }\n}\n//# sourceMappingURL=transaction-ratchet.js.map"],"names":["LoggerLevelName","LoggerOutputFunction","LogMessageFormatType","ExpiredJwtHandling","TransactionFinalState","LoggerRingBuffer","_lastLogMessage","messageSource","timestamp","Date","getTime","lvl","info","_buffer","_bufferIdx","_lastSnapshotIdx","_bufferSize","constructor","size","Error","this","currentIndex","lastSnapshotIdx","bufferSize","newSize","clearRingBuffer","getMessages","inStartFrom","clear","reverseSort","rval","start","slice","firstIdx","i","Math","max","push","reverse","takeSnapshot","trailingEdge","messages","logMessagesTruncated","getLastLogMessage","Object","assign","addToRingBuffer","newMsg","LoggerUtil","static","error","warn","verbose","debug","silly","handlerFunctionMap","outputFn","Console","output","Map","StdOut","process","stdout","write","myStdOut","chunk","cb","set","console","ConsoleNoDebug","log","defaultHandlerFunction","levelIsEnabled","targetLevel","currentEnabled","idxTarget","LOG_LEVELS_IN_ORDER","indexOf","ClassicSingleLineLogMessageFormatter","formatMessage","msg","meta","tmp","options","trace","util","format","subsVars","NoneLogMessageFormatter","StructuredJsonLogMessageFormatter","globalVars","params","toISOString","loggerInstanceName","loggerInstanceId","JSON","stringify","RequireRatchet","isNullOrUndefined","ob","notNullOrUndefined","name","notNullUndefinedOrOnlyWhitespaceString","trim","notNullUndefinedOrEmptyArray","length","equal","ob1","ob2","message","noNullOrUndefinedValuesInArray","arr","expectedLength","customMsg","noNullOrUndefinedValuesInRestArgs","restArgs","constructorArgumentsMatchLengthAndAreNonNull","args","Array","from","arguments","len","StringRatchet","DIGITS","UPPER_CASE_LATIN","LOWER_CASE_LATIN","stringIsInGivenAlphabet","input","alphabet","includes","charAt","stringToUint8Array","val","TextEncoder","encode","uint8ArrayToString","TextDecoder","decode","attemptJsonParse","trimToNull","parse","err","canParseAsJson","allUnique","check","Set","test","has","add","allPermutationsOfLength","true","step","forEach","s","createType4Guid","replace","c","r","random","toString","createRandomHexString","floor","canonicalize","value","toLowerCase","RFC_3986_RESERVED","formatBytes","bytes","decimals","dm","parseFloat","pow","toFixed","safeString","String","stringContainsOnlyNumbers","stringContainsOnlyAlphanumeric","stringContainsOnlyHex","stringContainsOnly","inVal","validCharsIn","validChars","obscure","prefixLength","suffixLength","pl","sl","rem","substring","leadingZeros","pad","negative","sVal","startsWith","trimToEmpty","x","trimAllStringPropertiesToNullInPlace","trimAllStringPropertiesInPlace","trimAllStringPropertiesToEmptyInPlace","toEmpty","keys","key","stripNonNumeric","csvSafe","split","join","stripNonAscii","reduce","previousValue","currentValue","charCodeAt","LoggerInstance","_loggerMeta","_ringBuffer","_formatter","_level","_handlerFunctionMap","_options","inOptions","addPreProcessor","proc","preProcessors","ringBuffer","dumpConfigurationIntoLog","dumpOptionsIntoLog","labels","map","p","label","changeRingBufferSize","ringBufferSize","updateTracePrefix","newValue","newOpts","formatType","None","StructuredJson","initialLevel","outputFunction","oldId","level","newLevel","consoleLogPassThru","passThruPrefix","unshift","get","createLogMessage","now","formatMessages","msgs","m","filter","recordMessageBuilder","msgBuild","recordMessage","toMessage","inMsg","errorP","warnP","infoP","verboseP","debugP","sillyP","logByLevel","importMessages","prefixIn","addTimestamp","prefix","mOut","Logger","ClassicSingleLine","applyDefaultsToOptions","DEFAULT_OPTIONS","changeDefaultOptions","retroactive","LOGGER_INSTANCES","values","li","getLogger","loggerName","inst","getRingBuffer","getLevel","setLevel","getOptions","buf","NumberRatchet","toFixedDecimalNumber","placesAfterPoint","v","safeNumber","MAX_LEADING_ZEROS_FORMAT_LENGTH","between","inTest","inP1","inP2","p1","p2","ifNotNumber","useDefaultForNullAndUndefined","type","Number","isNaN","undefined","numberCSVToList","inputCSV","fitToWindow","b1","b2","low","min","high","windowSize","groupNumbersIntoContiguousRanges","inputData","minRangeSize","sort","a","b","singles","ranges","j","distributeItemsEvenly","items","buckets","offset","loc","createRange","minInclusive","maxExclusive","BooleanRatchet","allTrue","vals","emptyArraysReturn","anyTrue","parseBool","intToBool","boolToInt","Ratchet2d","translateToOriginVector","points","validPoints","y","minimalContainingPlane","width","height","scaleVector","src","dst","validPlane","samePoint","atLeastOneDimensionShared","plane","validLine","line","validPoint","validLines","lines","l","validPolyLine","pline","pts","polyLineToLines","lastPointOnPolyLine","polyLine","lineToPolyLine","linesToPolyLines","currentPLine","pt","planeContainsPoint","planeContainsPoints","linesToPoints","flat","pointsToLines","rotateRightAboutOrigin90Degrees","times","translate","xToY","mirrorPointsOnPlane","timesToRotate","planeContainsLines","planeContainsPolyLine","planeContainsLine","xlate","mirrorX","mirrorY","transformPointsToNewPlane","scale","rightToLeft","topToBottom","transformPointToNewPlane","point","transformLines","fitCurve","curveDef","inputX","idx","xSpread","ySpread","yAdd","RatchetInfo","buildInformation","version","hash","branch","tag","timeBuiltISO","notes","Histogram","entries","update","addValue","entry","find","e","item","count","localeCompare","sortKeys","getEntries","getTotalCount","h","countForValue","percentForValue","total","DurationRatchet","formatMsDuration","ms","includeMS","rem_ms","seconds","minutes","hours","days","f","colonFormatMsDuration","daysBetween","d1","d2","DateTime","fromJSDate","diff","createSteps","startEpochMS","endEpochMS","timezone","outputFormat","stepUnit","curDate","fromMillis","setZone","endDate","toFormat","plus","JwtRatchet","_encryptionKeyPromise","_decryptKeysPromise","_jtiGenerator","_decryptOnlyKeyUseLogLevel","_parseFailureLogLevel","encryptionKeyPromise","decryptKeysPromise","jtiGenerator","decryptOnlyKeyUseLogLevel","parseFailureLogLevel","hasExpiredFlag","EXPIRED_FLAG_NAME","invalidSafeDecode","payloadString","decryptKey","logLevel","jwt","verify","ignoreExpiration","secondsRemainingUntilExpiration","decodeTokenNoVerify","nowSecond","exp","expSeconds","msRemainingUntilExpiration","secs","decodeToken","expiredHandling","RETURN_NULL","encKeys","encryptionKeyArray","decKeys","concat","keysTried","payload","nowSeconds","nbfSeconds","nbf","age","THROW_EXCEPTION","ADD_FLAG","encKey","isArray","selectRandomEncryptionKey","createTokenString","expirationSeconds","overrideEncryptionKey","jti","expires","sign","refreshJWTString","tokenString","allowExpired","handling","originalDurationSeconds","iat","newExpirationSeconds","removeJwtFields","removeExpiredFlag","token","k","ErrorRatchet","safeStringifyErr","err2","asErr","fErr","throwFormattedErr","MapRatchet","expandNestedKeysToObjects","separator","path","target","splice","mapByUniqueProperty","propName","groupByProperty","findValue","toSearch","findValueDotPath","dotPath","simpleDeepCompare","object1","object2","toKeyValueList","returnArray","fromKeyValueList","list","cleanup","obj","stripZero","stripNull","stripUndefined","stripEmptyString","o","extractValueFromMapIgnoreCase","finder","newVal","safeCallFunction","fnName","caseInsensitiveAccess","keyName","keyNameCI","ArrayRatchet","wrapElementsInArray","compareTwoArrays","ar1","ar2","fn","id1","id2","matching","setOneOnly","setTwoOnly","aVal","pVal","comp","extractSubarrayFromSortedByNumberField","fieldDotPath","bottomIdx","findSplit","topIdx","bottomValue","curIdx","curVal","Base64Ratchet","safeObjectToBase64JSON","generateBase64VersionOfString","safeBase64JSONParse","base64StringToString","generateBase64VersionOfBlob","blob","Promise","resolve","reject","reader","FileReader","onloadend","result","readAsDataURL","generateBase64VersionOfUint8Array","UTF8_ENCODER","btoa","UTF8_DECODER","base64StringToUint8Array","b64encoded","Uint8Array","atob","encoding","CompositeLastSuccessProvider","sources","mostRecent","mostRecentSrc","lastSuccess","DateRatchet","formatFullDate","FULL_DATE_FORMAT","formatDefaultDateOnly","DEFAULT_DATE_FORMAT","parseDefaultDate","fromFormat","toJSDate","parseCommonUsDate","templ","COMMON_US_DATE_FORMAT","EnumRatchet","listEnumKeys","enumeration","$enum","getValues","keyToEnum","caseSensitive","asValueOrDefault","mKey","toUpperCase","parseCsvToEnumArray","EsmRatchet","fetchDirName","root","url","fileURLToPath","URL","fetchFileName","ExpiringObject","_config","_cacheObject","_lastUpdatedEpochMS","_timeRemainingMS","inputConfig","defaultConfig","overrideTimeRemainingMS","timeToLiveMS","initialValue","defaultTimeRemainingMS","generator","lastUpdatedEpochMS","ageMS","doNotUpdateClock","fetchCacheObjectTimeRemainingMS","fetch","ExpiringObjectConfig","GeolocationRatchet","distanceBetweenLocations","lat1","lon1","lat2","lon2","unit","uU","radlat1","PI","radlat2","theta","radtheta","dist","sin","cos","acos","distanceBetweenRatchetGeoLocations","loc1","loc2","lat","lng","degreeOfLatLngInMiles","latitudeInDecimalDegress","latInRads","cosLat","milesInDegLatLng","miles","centerOfBounds","bounds","extent","origin","calculateSplits","slices","field","splits","clusterGeoBounds","inputVal","latSlices","lngSlices","lngSplits","lngStartIdx","lngEndIdx","lngBatch","latSplits","latStartIdx","latEndIdx","latBatch","combineBounds","canonicalizeBounds","inp","allowCrossover","minLat","maxLat","minLng","maxLng","roundLocation","roundDigits","locationToBounds","radiusMiles","sameLocation","pointInBounds","bound","pointInAnyBound","inBounds","minPointsBeforeMapping","mp","buildRatchetLocationBoundsMap","pointInRatchetLocationBoundsMap","findRatchetLocationBoundsMapEntry","latOffset","lngOffset","ltIdx","trunc","lngIdx","mapping","latEntries","lngEntries","newRow","row","GlobalRatchet","fetchGlobalRecord","returnNullOnNone","env","global","fetchGlobalVar","envVar","setGlobalVar","KeyValue","No","op","TimeoutToken","title","timeoutMS","__timeoutTokenFlagField","writeToLog","isTimeoutToken","StopWatch","starts","ends","createTime","stop","reset","delete","hasTimer","shortForm","dump","logExpected","pctComplete","dumpExpected","timerNames","dumpAll","outs","cleanName","end","elapsedMS","remainMS","expectedRemainingMS","PromiseRatchet","resolveOnEvent","evtSrc","okEvtNames","errEvtNames","res","rej","on","timeout","srcPromise","race","createTimeoutPromise","id","setTimeout","clearTimeout","wait","time","dumpResult","autoDebug","exit","dumpError","logErrorAndReturnNull","runPromiseAndDump","promise","then","catch","waitFor","testFunction","expectedValue","intervalMS","maxCycles","runBoundedParallel","promiseFn","context","maxConcurrent","sw","remain","ctx","processed","totalCount","curBatch","proms","apply","all","pct","runBoundedParallelSingleParam","wrappedParams","asyncForEachSerial","array","callback","index","asyncForEachParallel","TimeZoneRatchet","currentHour","local","hour","toEpochSeconds","dt","round","toMillis","startOfTodayEpochSeconds","minute","second","millisecond","startOfMatchingDayEpochSeconds","inputTS","startOfMatchingDayEpochMS","startOfCurrentHourEpochSeconds","startOfCurrentMinuteEpochSeconds","startOfCurrentSecondEpochSeconds","startOfTodayEpochMS","dailySlotCount","slotWidthMs","ceil","currentTimeSlotIdx","startOfToday","delta","matchingTimeSlotIdx","startOfCurrentSlotEpochMS","startOfMatchingSlotEpochMS","Uint8ArrayRatchet","mergeArrays","myArrays","WebStreamRatchet","webReadableStreamToUint8Array","stream","out","writer","WritableStream","async","controller","abort","reason","highWaterMark","pipeTo","webReadableStreamToString","stringToWebReadableStream","ReadableStream","enqueue","close","LogMessageBuilder","wrapped","clone","subVars","NetworkRatchet","findLocalIp","useCache","LOCAL_IP","window","RTCPeerConnection","rtc","iceServers","addrs","create","createDataChannel","reliable","onicecandidate","evt","candidate","grepSDP","createOffer","offerDesc","sdp","setLocalDescription","updateLocalIP","parseUrl","href","match","protocol","host","hostname","port","pathname","search","newIp","parts","addr","updateAddressList","newAddr","displayAddrs","multi","BrowserLocalIpProvider","currentIp","ready","currentLocalIpAddress","FixedLocalIpProvider","fixed","RestfulApiHttpError","_httpStatusCode","_errors","_detailErrorCode","_endUserErrors","_details","_requestId","_wrappedError","errors","super","combineErrorStringsWithDefault","setPrototypeOf","prototype","RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY","defMessage","setFormattedErrorMessage","withFormattedErrorMessage","withHttpStatusCode","httpStatusCode","withErrors","withDetailErrorCode","detailErrorCode","withEndUserErrors","endUserErrors","withDetails","details","withRequestId","requestId","withWrappedError","isWrappedError","wrapError","objectIsRestfulApiHttpError","wrappedError","errorIsX0x","errIn","xClass","bot","errorIs40x","errorIs50x","GoogleRecaptchaRatchet","verifyRecaptchaToken","keySecret","fetchFn","GOOGLE_VERIFY_URL","resp","body","json","success","TwilioRatchet","accountSid","authToken","outBoundNumber","isValidE164Number","sendMessageDirect","recipientPhoneNumbers","ratchet","sendMessage","generateTwilioBasicAuth","sid","phoneNumber","encodeURIComponent","post","method","headers","authorization","TWILLIO_BASE_API_URL","parsedResponse","num","BuiltInTransforms","keysOnly","rule","transform","isKey","valuesOnly","stringReplaceTransform","stripStringTransform","retainAll","removeAll","snakeToCamelCase","group1","stringToNumber","camelToSnakeCase","concatenateToNewField","newFieldName","oldFieldNamesInOrder","abortIfFieldMissing","n","temp","numberToBool","fieldNames","oldVal","boolToNumber","makeDuplicateField","oldName","newName","addField","valueToAdd","reformatDateFields","oldFormat","newFormat","oldValue","TransformRatchet","toTransform","rules","transformGeneric","applyTransformToPrimitive","applyTransformToObject","newKey","TransactionRatchet","execute","steps","initialContext","inConfiguration","config","stepLogLevel","finalContext","finalState","stepNames","errorStep","rollback","rollbackError","rollbackErrorStep","RollbackFailed","RolledBack","Success","executeAfterRollback","executeAfterRollbackFailure"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/logger/logger-level-name.ts","../src/logger/logger-output-function.ts","../src/logger/log-message-format-type.ts","../src/jwt/expired-jwt-handling.ts","../src/tx/transaction-final-state.ts","../src/logger/logger-ring-buffer.ts","../src/logger/logger-util.ts","../src/logger/classic-single-line-log-message-formatter.ts","../src/logger/none-log-message-formatter.ts","../src/logger/structured-json-log-message-formatter.ts","../src/lang/require-ratchet.ts","../src/lang/string-ratchet.ts","../src/logger/logger-instance.ts","../src/logger/logger.ts","../src/lang/number-ratchet.ts","../src/lang/boolean-ratchet.ts","../src/2d/ratchet-2d.ts","../src/build/ratchet-common-info.ts","../src/histogram/histogram.ts","../src/lang/duration-ratchet.ts","../src/jwt/jwt-ratchet.ts","../src/lang/error-ratchet.ts","../src/lang/map-ratchet.ts","../src/lang/array-ratchet.ts","../src/lang/base64-ratchet.ts","../src/lang/composite-last-success-provider.ts","../src/lang/date-ratchet.ts","../src/lang/enum-ratchet.ts","../src/lang/esm-ratchet.ts","../src/lang/expiring-object.ts","../src/lang/geolocation-ratchet.ts","../src/lang/global-ratchet.ts","../src/lang/key-value.ts","../src/lang/no.ts","../src/lang/timeout-token.ts","../src/lang/stop-watch.ts","../src/lang/promise-ratchet.ts","../src/lang/time-zone-ratchet.ts","../src/lang/uint-8-array-ratchet.ts","../src/lang/web-stream-ratchet.ts","../src/logger/log-message-builder.ts","../src/network/network-ratchet.ts","../src/network/browser-local-ip-provider.ts","../src/network/fixed-local-ip-provider.ts","../src/network/restful-api-http-error.ts","../src/third-party/google/google-recaptcha-ratchet.ts","../src/third-party/twilio/twilio-ratchet.ts","../src/transform/built-in-transforms.ts","../src/transform/transform-ratchet.ts","../src/tx/transaction-ratchet.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["LoggerLevelName","LoggerOutputFunction","LogMessageFormatType","ExpiredJwtHandling","TransactionFinalState","LoggerRingBuffer","_lastLogMessage","messageSource","timestamp","Date","getTime","lvl","info","_buffer","_bufferIdx","_lastSnapshotIdx","_bufferSize","constructor","size","Error","this","currentIndex","lastSnapshotIdx","bufferSize","newSize","clearRingBuffer","getMessages","inStartFrom","clear","reverseSort","rval","start","slice","firstIdx","i","Math","max","push","reverse","takeSnapshot","trailingEdge","messages","logMessagesTruncated","getLastLogMessage","Object","assign","addToRingBuffer","newMsg","LoggerUtil","static","error","warn","verbose","debug","silly","handlerFunctionMap","outputFn","Console","output","Map","StdOut","process","stdout","write","myStdOut","chunk","cb","set","console","ConsoleNoDebug","log","defaultHandlerFunction","levelIsEnabled","targetLevel","currentEnabled","idxTarget","LOG_LEVELS_IN_ORDER","indexOf","ClassicSingleLineLogMessageFormatter","formatMessage","msg","meta","tmp","options","trace","util","format","subsVars","NoneLogMessageFormatter","StructuredJsonLogMessageFormatter","globalVars","params","toISOString","loggerInstanceName","loggerInstanceId","JSON","stringify","RequireRatchet","isNullOrUndefined","ob","notNullOrUndefined","name","notNullUndefinedOrOnlyWhitespaceString","trim","notNullUndefinedOrEmptyArray","length","equal","ob1","ob2","message","noNullOrUndefinedValuesInArray","arr","expectedLength","customMsg","noNullOrUndefinedValuesInRestArgs","restArgs","constructorArgumentsMatchLengthAndAreNonNull","args","Array","from","arguments","len","StringRatchet","DIGITS","UPPER_CASE_LATIN","LOWER_CASE_LATIN","stringIsInGivenAlphabet","input","alphabet","includes","charAt","stringToUint8Array","val","TextEncoder","encode","uint8ArrayToString","TextDecoder","decode","attemptJsonParse","trimToNull","parse","err","canParseAsJson","allUnique","check","Set","test","has","add","allPermutationsOfLength","true","step","forEach","s","createType4Guid","replace","c","r","random","toString","createRandomHexString","floor","canonicalize","value","toLowerCase","RFC_3986_RESERVED","formatBytes","bytes","decimals","dm","parseFloat","pow","toFixed","safeString","String","stringContainsOnlyNumbers","stringContainsOnlyAlphanumeric","stringContainsOnlyHex","stringContainsOnly","inVal","validCharsIn","validChars","obscure","prefixLength","suffixLength","pl","sl","rem","substring","leadingZeros","pad","negative","sVal","startsWith","trimToEmpty","x","trimAllStringPropertiesToNullInPlace","trimAllStringPropertiesInPlace","trimAllStringPropertiesToEmptyInPlace","toEmpty","keys","key","stripNonNumeric","csvSafe","split","join","stripNonAscii","reduce","previousValue","currentValue","charCodeAt","LoggerInstance","_loggerMeta","_ringBuffer","_formatter","_level","_handlerFunctionMap","_options","inOptions","addPreProcessor","proc","preProcessors","ringBuffer","dumpConfigurationIntoLog","dumpOptionsIntoLog","labels","map","p","label","changeRingBufferSize","ringBufferSize","updateTracePrefix","newValue","newOpts","formatType","None","StructuredJson","initialLevel","outputFunction","oldId","level","newLevel","consoleLogPassThru","passThruPrefix","unshift","get","createLogMessage","now","formatMessages","msgs","m","filter","recordMessageBuilder","msgBuild","recordMessage","toMessage","inMsg","errorP","warnP","infoP","verboseP","debugP","sillyP","logByLevel","importMessages","prefixIn","addTimestamp","prefix","mOut","Logger","ClassicSingleLine","applyDefaultsToOptions","DEFAULT_OPTIONS","changeDefaultOptions","retroactive","LOGGER_INSTANCES","values","li","getLogger","loggerName","inst","getRingBuffer","getLevel","setLevel","getOptions","buf","NumberRatchet","toFixedDecimalNumber","placesAfterPoint","v","safeNumber","MAX_LEADING_ZEROS_FORMAT_LENGTH","between","inTest","inP1","inP2","p1","p2","ifNotNumber","useDefaultForNullAndUndefined","type","Number","isNaN","undefined","numberCSVToList","inputCSV","fitToWindow","b1","b2","low","min","high","windowSize","groupNumbersIntoContiguousRanges","inputData","minRangeSize","sort","a","b","singles","ranges","j","distributeItemsEvenly","items","buckets","offset","loc","createRange","minInclusive","maxExclusive","BooleanRatchet","allTrue","vals","emptyArraysReturn","anyTrue","parseBool","intToBool","boolToInt","Ratchet2d","translateToOriginVector","points","validPoints","y","minimalContainingPlane","width","height","scaleVector","src","dst","validPlane","samePoint","atLeastOneDimensionShared","plane","validLine","line","validPoint","validLines","lines","l","validPolyLine","pline","pts","polyLineToLines","lastPointOnPolyLine","polyLine","lineToPolyLine","linesToPolyLines","currentPLine","pt","planeContainsPoint","planeContainsPoints","linesToPoints","flat","pointsToLines","rotateRightAboutOrigin90Degrees","times","translate","xToY","mirrorPointsOnPlane","timesToRotate","planeContainsLines","planeContainsPolyLine","planeContainsLine","xlate","mirrorX","mirrorY","transformPointsToNewPlane","scale","rightToLeft","topToBottom","transformPointToNewPlane","point","transformLines","fitCurve","curveDef","inputX","idx","xSpread","ySpread","yAdd","RatchetInfo","buildInformation","version","hash","branch","tag","timeBuiltISO","notes","Histogram","entries","update","addValue","entry","find","e","item","count","localeCompare","sortKeys","getEntries","getTotalCount","h","countForValue","percentForValue","total","DurationRatchet","formatMsDuration","ms","includeMS","rem_ms","seconds","minutes","hours","days","f","colonFormatMsDuration","daysBetween","d1","d2","DateTime","fromJSDate","diff","createSteps","startEpochMS","endEpochMS","timezone","outputFormat","stepUnit","curDate","fromMillis","setZone","endDate","toFormat","plus","JwtRatchet","_encryptionKeyPromise","_decryptKeysPromise","_jtiGenerator","_decryptOnlyKeyUseLogLevel","_parseFailureLogLevel","encryptionKeyPromise","decryptKeysPromise","jtiGenerator","decryptOnlyKeyUseLogLevel","parseFailureLogLevel","hasExpiredFlag","EXPIRED_FLAG_NAME","invalidSafeDecode","payloadString","decryptKey","logLevel","jwt","verify","ignoreExpiration","secondsRemainingUntilExpiration","decodeTokenNoVerify","nowSecond","exp","expSeconds","msRemainingUntilExpiration","secs","decodeToken","expiredHandling","RETURN_NULL","encKeys","encryptionKeyArray","decKeys","concat","keysTried","payload","nowSeconds","nbfSeconds","nbf","age","THROW_EXCEPTION","ADD_FLAG","encKey","isArray","selectRandomEncryptionKey","createTokenString","expirationSeconds","overrideEncryptionKey","jti","expires","sign","refreshJWTString","tokenString","allowExpired","handling","originalDurationSeconds","iat","newExpirationSeconds","removeJwtFields","removeExpiredFlag","token","k","ErrorRatchet","safeStringifyErr","err2","asErr","fErr","throwFormattedErr","MapRatchet","expandNestedKeysToObjects","separator","path","target","splice","mapByUniqueProperty","propName","groupByProperty","findValue","toSearch","findValueDotPath","dotPath","simpleDeepCompare","object1","object2","toKeyValueList","returnArray","fromKeyValueList","list","cleanup","obj","stripZero","stripNull","stripUndefined","stripEmptyString","o","extractValueFromMapIgnoreCase","finder","newVal","safeCallFunction","fnName","caseInsensitiveAccess","keyName","keyNameCI","ArrayRatchet","wrapElementsInArray","compareTwoArrays","ar1","ar2","fn","id1","id2","matching","setOneOnly","setTwoOnly","aVal","pVal","comp","extractSubarrayFromSortedByNumberField","fieldDotPath","bottomIdx","findSplit","topIdx","bottomValue","curIdx","curVal","Base64Ratchet","safeObjectToBase64JSON","generateBase64VersionOfString","safeBase64JSONParse","base64StringToString","generateBase64VersionOfBlob","blob","Promise","resolve","reject","reader","FileReader","onloadend","result","readAsDataURL","generateBase64VersionOfUint8Array","UTF8_ENCODER","Base64","btoa","UTF8_DECODER","base64StringToUint8Array","b64encoded","Uint8Array","atob","encoding","CompositeLastSuccessProvider","sources","mostRecent","mostRecentSrc","lastSuccess","DateRatchet","formatFullDate","FULL_DATE_FORMAT","formatDefaultDateOnly","DEFAULT_DATE_FORMAT","parseDefaultDate","fromFormat","toJSDate","parseCommonUsDate","templ","COMMON_US_DATE_FORMAT","EnumRatchet","listEnumKeys","enumeration","$enum","getValues","keyToEnum","caseSensitive","asValueOrDefault","mKey","toUpperCase","parseCsvToEnumArray","EsmRatchet","fetchDirName","root","url","fileURLToPath","URL","fetchFileName","ExpiringObject","_config","_cacheObject","_lastUpdatedEpochMS","_timeRemainingMS","inputConfig","defaultConfig","overrideTimeRemainingMS","timeToLiveMS","initialValue","defaultTimeRemainingMS","generator","lastUpdatedEpochMS","ageMS","doNotUpdateClock","fetchCacheObjectTimeRemainingMS","fetch","ExpiringObjectConfig","GeolocationRatchet","distanceBetweenLocations","lat1","lon1","lat2","lon2","unit","uU","radlat1","PI","radlat2","theta","radtheta","dist","sin","cos","acos","distanceBetweenRatchetGeoLocations","loc1","loc2","lat","lng","degreeOfLatLngInMiles","latitudeInDecimalDegress","latInRads","cosLat","milesInDegLatLng","miles","centerOfBounds","bounds","extent","origin","calculateSplits","slices","field","splits","clusterGeoBounds","inputVal","latSlices","lngSlices","lngSplits","lngStartIdx","lngEndIdx","lngBatch","latSplits","latStartIdx","latEndIdx","latBatch","combineBounds","canonicalizeBounds","inp","allowCrossover","minLat","maxLat","minLng","maxLng","roundLocation","roundDigits","locationToBounds","radiusMiles","sameLocation","pointInBounds","bound","pointInAnyBound","inBounds","minPointsBeforeMapping","mp","buildRatchetLocationBoundsMap","pointInRatchetLocationBoundsMap","findRatchetLocationBoundsMapEntry","latOffset","lngOffset","ltIdx","trunc","lngIdx","mapping","latEntries","lngEntries","newRow","row","GlobalRatchet","fetchGlobalRecord","returnNullOnNone","env","global","fetchGlobalVar","envVar","setGlobalVar","KeyValue","No","op","TimeoutToken","title","timeoutMS","__timeoutTokenFlagField","writeToLog","isTimeoutToken","StopWatch","starts","ends","createTime","stop","reset","delete","hasTimer","shortForm","dump","logExpected","pctComplete","dumpExpected","timerNames","dumpAll","outs","cleanName","end","elapsedMS","remainMS","expectedRemainingMS","PromiseRatchet","resolveOnEvent","evtSrc","okEvtNames","errEvtNames","res","rej","on","timeout","srcPromise","race","createTimeoutPromise","id","setTimeout","clearTimeout","wait","time","dumpResult","autoDebug","exit","dumpError","logErrorAndReturnNull","runPromiseAndDump","promise","then","catch","waitFor","testFunction","expectedValue","intervalMS","maxCycles","runBoundedParallel","promiseFn","context","maxConcurrent","sw","remain","ctx","processed","totalCount","curBatch","proms","apply","all","pct","runBoundedParallelSingleParam","wrappedParams","asyncForEachSerial","array","callback","index","asyncForEachParallel","TimeZoneRatchet","currentHour","local","hour","toEpochSeconds","dt","round","toMillis","startOfTodayEpochSeconds","minute","second","millisecond","startOfMatchingDayEpochSeconds","inputTS","startOfMatchingDayEpochMS","startOfCurrentHourEpochSeconds","startOfCurrentMinuteEpochSeconds","startOfCurrentSecondEpochSeconds","startOfTodayEpochMS","dailySlotCount","slotWidthMs","ceil","currentTimeSlotIdx","startOfToday","delta","matchingTimeSlotIdx","startOfCurrentSlotEpochMS","startOfMatchingSlotEpochMS","Uint8ArrayRatchet","mergeArrays","myArrays","WebStreamRatchet","webReadableStreamToUint8Array","stream","out","writer","WritableStream","async","controller","abort","reason","highWaterMark","pipeTo","webReadableStreamToString","stringToWebReadableStream","ReadableStream","enqueue","close","LogMessageBuilder","wrapped","clone","subVars","NetworkRatchet","findLocalIp","useCache","LOCAL_IP","window","RTCPeerConnection","rtc","iceServers","addrs","create","createDataChannel","reliable","onicecandidate","evt","candidate","grepSDP","createOffer","offerDesc","sdp","setLocalDescription","updateLocalIP","parseUrl","href","match","protocol","host","hostname","port","pathname","search","newIp","parts","addr","updateAddressList","newAddr","displayAddrs","multi","BrowserLocalIpProvider","currentIp","ready","currentLocalIpAddress","FixedLocalIpProvider","fixed","RestfulApiHttpError","_httpStatusCode","_errors","_detailErrorCode","_endUserErrors","_details","_requestId","_wrappedError","errors","super","combineErrorStringsWithDefault","setPrototypeOf","prototype","RATCHET_RESTFUL_API_HTTP_ERROR_FLAG_KEY","defMessage","setFormattedErrorMessage","withFormattedErrorMessage","withHttpStatusCode","httpStatusCode","withErrors","withDetailErrorCode","detailErrorCode","withEndUserErrors","endUserErrors","withDetails","details","withRequestId","requestId","withWrappedError","isWrappedError","wrapError","objectIsRestfulApiHttpError","wrappedError","errorIsX0x","errIn","xClass","bot","errorIs40x","errorIs50x","GoogleRecaptchaRatchet","verifyRecaptchaToken","keySecret","fetchFn","GOOGLE_VERIFY_URL","resp","body","json","success","TwilioRatchet","accountSid","authToken","outBoundNumber","isValidE164Number","sendMessageDirect","recipientPhoneNumbers","ratchet","sendMessage","generateTwilioBasicAuth","sid","phoneNumber","encodeURIComponent","post","method","headers","authorization","TWILLIO_BASE_API_URL","parsedResponse","num","BuiltInTransforms","keysOnly","rule","transform","isKey","valuesOnly","stringReplaceTransform","stripStringTransform","retainAll","removeAll","snakeToCamelCase","group1","stringToNumber","camelToSnakeCase","concatenateToNewField","newFieldName","oldFieldNamesInOrder","abortIfFieldMissing","n","temp","numberToBool","fieldNames","oldVal","boolToNumber","makeDuplicateField","oldName","newName","addField","valueToAdd","reformatDateFields","oldFormat","newFormat","oldValue","TransformRatchet","toTransform","rules","transformGeneric","applyTransformToPrimitive","applyTransformToObject","newKey","TransactionRatchet","execute","steps","initialContext","inConfiguration","config","stepLogLevel","finalContext","finalState","stepNames","errorStep","rollback","rollbackError","rollbackErrorStep","RollbackFailed","RolledBack","Success","executeAfterRollback","executeAfterRollbackFailure"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitblit/ratchet-common",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.232-alpha",
|
|
4
4
|
"description": "Common tools for general use",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -51,9 +51,11 @@
|
|
|
51
51
|
},
|
|
52
52
|
"license": "Apache-2.0",
|
|
53
53
|
"dependencies": {
|
|
54
|
+
"js-base64": "3.7.5",
|
|
54
55
|
"ts-enum-util": "4.0.2"
|
|
55
56
|
},
|
|
56
57
|
"peerDependencies": {
|
|
58
|
+
"js-base64": "^3.7.5",
|
|
57
59
|
"ts-enum-util": "^4.0.2"
|
|
58
60
|
},
|
|
59
61
|
"peerDependenciesMeta": {
|