@bitblit/ratchet-aws 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.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/batch/aws-batch-background-processor.ts","../src/batch/aws-batch-ratchet.ts","../src/build/ratchet-aws-info.ts","../src/cache/dynamo-db-storage-provider.ts","../src/cache/s3-storage-provider.ts","../src/cache/simple-cache.ts","../src/cloudwatch/cloud-watch-log-group-ratchet.ts","../src/cloudwatch/cloud-watch-logs-ratchet.ts","../src/model/cloud-watch-metrics-unit.ts","../src/cloudwatch/cloud-watch-metrics-ratchet.ts","../src/daemon/daemon-util.ts","../src/s3/s3-cache-ratchet.ts","../src/daemon/daemon.ts","../src/dao/prototype-dao.ts","../src/dao/s3-prototype-dao-provider.ts","../src/dao/s3-simple-dao.ts","../src/dynamodb/dynamo-ratchet.ts","../src/dynamodb/dynamo-table-ratchet.ts","../src/dynamodb/hash-spreader.ts","../src/ec2/ec2-ratchet.ts","../src/environment/cascade-environment-service-provider.ts","../src/environment/env-var-environment-service-provider.ts","../src/environment/environment-service.ts","../src/environment/fixed-environment-service-provider.ts","../src/environment/s3-environment-service-provider.ts","../src/environment/ssm-environment-service-provider.ts","../src/expiring-code/dynamo-expiring-code-provider.ts","../src/expiring-code/expiring-code-ratchet.ts","../src/expiring-code/s3-expiring-code-provider.ts","../src/iam/aws-credentials-ratchet.ts","../src/lambda/lambda-event-detector.ts","../src/lambda/lambda-event-type-guards.ts","../src/route53/route-53-ratchet.ts","../src/runtime-parameter/dynamo-runtime-parameter-provider.ts","../src/runtime-parameter/global-variable-override-runtime-parameter-provider.ts","../src/runtime-parameter/memory-runtime-parameter-provider.ts","../src/runtime-parameter/runtime-parameter-ratchet.ts","../src/s3/s3-location-sync-ratchet.ts","../src/s3/s3-ratchet.ts","../src/ses/mailer.ts","../src/sns/sns-ratchet.ts","../src/sync-lock/dynamo-db-sync-lock.ts","../src/sync-lock/memory-sync-lock.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nimport { ErrorRatchet, Logger, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class AwsBatchBackgroundProcessor {\n batchRatchet;\n validTaskNames;\n constructor(batchRatchet, validTaskNames) {\n this.batchRatchet = batchRatchet;\n this.validTaskNames = validTaskNames;\n RequireRatchet.notNullOrUndefined(this.batchRatchet, 'batchRatchet');\n RequireRatchet.notNullOrUndefined(this.batchRatchet.batchClient, 'batchRatchet.batchClient');\n RequireRatchet.notNullOrUndefined(this.batchRatchet.defaultJobDefinition, 'batchRatchet.defaultJobDefinition');\n RequireRatchet.notNullOrUndefined(this.batchRatchet.defaultQueueName, 'batchRatchet.defaultQueueName');\n }\n async scheduleBackgroundTask(taskName, data = {}, meta = {}) {\n if (this.validTaskNames &&\n this.validTaskNames.length &&\n (!StringRatchet.trimToNull(taskName) || !this.validTaskNames.includes(taskName))) {\n ErrorRatchet.throwFormattedErr('Cannot start task %s - not found in valid task list', taskName);\n }\n Logger.info('Submitting background task to AWS batch: %s %j %s', taskName, data, this.batchRatchet.defaultQueueName);\n let rval = null;\n const jobName = `${this.batchRatchet.defaultJobDefinition}-${taskName}_${DateTime.utc().toFormat('yyyy-MM-dd-HH-mm')}`;\n const options = {\n jobName: jobName,\n jobDefinition: this.batchRatchet.defaultJobDefinition,\n jobQueue: this.batchRatchet.defaultQueueName,\n parameters: {\n taskName,\n taskData: JSON.stringify(data),\n taskMetadata: JSON.stringify(meta),\n },\n };\n try {\n rval = await this.batchRatchet.scheduleJob(options);\n Logger.info('Job %s(%s) submitted', rval.jobName, rval.jobId);\n }\n catch (err) {\n Logger.error('Cannot submit batch job taskName: %s jobDef: %s queue: %s jobName: %s data: %j', taskName, this.batchRatchet.defaultJobDefinition, this.batchRatchet.defaultQueueName, jobName, data, err);\n }\n return rval;\n }\n}\n//# sourceMappingURL=aws-batch-background-processor.js.map","import { ListJobsCommand, SubmitJobCommand, } from '@aws-sdk/client-batch';\nimport { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class AwsBatchRatchet {\n _batchClient;\n _defaultQueueName;\n _defaultJobDefinition;\n constructor(_batchClient, _defaultQueueName, _defaultJobDefinition) {\n this._batchClient = _batchClient;\n this._defaultQueueName = _defaultQueueName;\n this._defaultJobDefinition = _defaultJobDefinition;\n }\n get batchClient() {\n return this._batchClient;\n }\n get defaultQueueName() {\n return this._defaultQueueName;\n }\n get defaultJobDefinition() {\n return this._defaultJobDefinition;\n }\n async scheduleJob(options) {\n Logger.info('Submitting batch job %s', options.jobName);\n try {\n const rval = await this._batchClient.send(new SubmitJobCommand(options));\n Logger.info('Job %s(%s) submitted', rval.jobName, rval.jobId);\n return rval;\n }\n catch (err) {\n Logger.error('Cannot submit batch job %s: %s', options.jobName, err);\n }\n return null;\n }\n async jobCountInState(jobStatus, queueName = this.defaultQueueName) {\n const all = await this.listJobs(queueName, jobStatus);\n return all.length;\n }\n async listJobs(queueName = this.defaultQueueName, jobStatus = null) {\n RequireRatchet.notNullOrUndefined(queueName, 'queueName');\n let rval = [];\n const request = {\n jobQueue: queueName,\n jobStatus: jobStatus,\n nextToken: null,\n };\n Logger.info('Fetching %j', request);\n do {\n Logger.info('Pulling page...');\n const tmp = await this._batchClient.send(new ListJobsCommand(request));\n rval = rval.concat(tmp.jobSummaryList);\n request.nextToken = tmp.nextToken;\n } while (request.nextToken);\n return rval;\n }\n}\n//# sourceMappingURL=aws-batch-ratchet.js.map","export class RatchetAwsInfo {\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-aws-info.js.map","import { RequireRatchet } from '@bitblit/ratchet-common';\nexport class DynamoDbStorageProvider {\n dynamo;\n opts;\n constructor(dynamo, opts) {\n this.dynamo = dynamo;\n this.opts = opts;\n RequireRatchet.notNullOrUndefined(this.dynamo, 'dynamo');\n RequireRatchet.notNullOrUndefined(this.opts, 'opts');\n RequireRatchet.notNullOrUndefined(this.opts.tableName, 'opts.tableName');\n RequireRatchet.notNullOrUndefined(this.opts.hashKeyName, 'opts.hashKeyName');\n RequireRatchet.true(!this.opts.useRangeKeys || (!!this.opts.rangeKeyName && !!this.opts.hashKeyValue), 'invalid range configuration');\n }\n static createDefaultOptions() {\n const rval = {\n tableName: 'simple-cache',\n useRangeKeys: false,\n hashKeyName: 'cache-key',\n rangeKeyName: null,\n hashKeyValue: null,\n };\n return rval;\n }\n createKeyObject(cacheKey) {\n const keys = {};\n if (this.opts.useRangeKeys) {\n keys[this.opts.hashKeyName] = this.opts.hashKeyValue;\n keys[this.opts.rangeKeyName] = cacheKey;\n }\n else {\n keys[this.opts.hashKeyName] = cacheKey;\n }\n return keys;\n }\n cleanDynamoFieldsFromObjectInPlace(rval) {\n if (rval) {\n delete rval[this.opts.hashKeyName];\n if (this.opts.rangeKeyName) {\n delete rval[this.opts.rangeKeyName];\n }\n if (this.opts.dynamoExpiresColumnName) {\n delete rval[this.opts.dynamoExpiresColumnName];\n }\n }\n }\n extractKeysFromObject(rval) {\n let keys = null;\n if (rval) {\n keys = {};\n if (this.opts.useRangeKeys) {\n keys[this.opts.hashKeyName] = this.opts.hashKeyValue;\n keys[this.opts.rangeKeyName] = rval.cacheKey;\n }\n else {\n keys[this.opts.hashKeyName] = rval.cacheKey;\n }\n }\n return keys;\n }\n async readFromCache(cacheKey) {\n const dKey = this.createKeyObject(cacheKey);\n const rval = await this.dynamo.simpleGet(this.opts.tableName, dKey);\n this.cleanDynamoFieldsFromObjectInPlace(rval);\n return rval;\n }\n async storeInCache(value) {\n RequireRatchet.notNullOrUndefined(value, 'value');\n RequireRatchet.notNullOrUndefined(value.cacheKey, 'value.cacheKey');\n const toSave = Object.assign({}, value, this.createKeyObject(value.cacheKey));\n if (this.opts.dynamoExpiresColumnName && value.expiresEpochMS) {\n toSave[this.opts.dynamoExpiresColumnName] = Math.floor(value.expiresEpochMS / 1000);\n }\n const wrote = await this.dynamo.simplePut(this.opts.tableName, toSave);\n return !!wrote;\n }\n async removeFromCache(cacheKey) {\n await this.dynamo.simpleDelete(this.opts.tableName, this.createKeyObject(cacheKey));\n }\n async clearCache() {\n const allValues = await this.readAll();\n const allKeys = allValues.map((a) => this.extractKeysFromObject(a));\n const rval = await this.dynamo.deleteAllInBatches(this.opts.tableName, allKeys, 25);\n return rval;\n }\n async readAll() {\n let rval = null;\n if (this.opts.useRangeKeys) {\n const qry = {\n TableName: this.opts.tableName,\n KeyConditionExpression: '#cacheKey = :cacheKey',\n ExpressionAttributeNames: {\n '#cacheKey': this.opts.hashKeyName,\n },\n ExpressionAttributeValues: {\n ':cacheKey': this.opts.hashKeyValue,\n },\n };\n rval = await this.dynamo.fullyExecuteQuery(qry);\n }\n else {\n const scan = {\n TableName: this.opts.tableName,\n };\n rval = await this.dynamo.fullyExecuteScan(scan);\n }\n rval.forEach((r) => this.cleanDynamoFieldsFromObjectInPlace(r));\n return rval;\n }\n}\n//# sourceMappingURL=dynamo-db-storage-provider.js.map","import { RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class S3StorageProvider {\n s3CacheRatchet;\n prefix;\n constructor(s3CacheRatchet, prefix) {\n this.s3CacheRatchet = s3CacheRatchet;\n this.prefix = prefix;\n RequireRatchet.notNullOrUndefined(this.s3CacheRatchet, 's3CacheRatchet');\n RequireRatchet.notNullOrUndefined(this.s3CacheRatchet.getDefaultBucket(), 's3CacheRatchet.defaultBucket');\n }\n keyToPath(cacheKey) {\n let rval = StringRatchet.trimToEmpty(this.prefix);\n if (rval.length > 0 && !rval.endsWith('/')) {\n rval += '/';\n }\n rval += cacheKey;\n return rval;\n }\n async readFromCache(cacheKey) {\n const rval = await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyToPath(cacheKey));\n return rval;\n }\n async storeInCache(value) {\n RequireRatchet.notNullOrUndefined(value, 'value');\n RequireRatchet.notNullOrUndefined(value.cacheKey, 'value.cacheKey');\n const tmp = await this.s3CacheRatchet.writeObjectToCacheFile(this.keyToPath(value.cacheKey), value);\n return !!tmp;\n }\n async removeFromCache(cacheKey) {\n await this.s3CacheRatchet.removeCacheFile(this.keyToPath(cacheKey));\n }\n async clearCache() {\n const keys = await this.s3CacheRatchet.directChildrenOfPrefix(this.keyToPath(''));\n const removed = await Promise.all(keys.map((k) => this.removeFromCache(k)));\n return keys.length;\n }\n async readAll() {\n const keys = await this.s3CacheRatchet.directChildrenOfPrefix(this.keyToPath(''));\n const rval = await Promise.all(keys.map((k) => this.readFromCache(k)));\n return rval;\n }\n}\n//# sourceMappingURL=s3-storage-provider.js.map","import { Logger } from '@bitblit/ratchet-common';\nexport class SimpleCache {\n provider;\n defaultTimeToLiveMS;\n constructor(provider, defaultTimeToLiveMS = 1_000 * 60) {\n this.provider = provider;\n this.defaultTimeToLiveMS = defaultTimeToLiveMS;\n }\n createDefaultReadOptions() {\n return {\n maxStalenessMS: null,\n timeToLiveMS: this.defaultTimeToLiveMS,\n cacheNullValues: false,\n };\n }\n async fetchWrapper(cacheKey, producer, opts = this.createDefaultReadOptions()) {\n Logger.silly('Fetching %s', cacheKey);\n const now = new Date().getTime();\n let rval = await this.provider.readFromCache(cacheKey);\n if (rval && rval.expiresEpochMS < now) {\n Logger.debug('Object found, but expired - removing');\n rval = null;\n }\n if (rval && opts && opts.maxStalenessMS && now - rval.createdEpochMS > opts.maxStalenessMS) {\n Logger.debug('Object found by too stale - removing');\n rval = null;\n }\n if (!rval) {\n Logger.debug('%s not found in cache, generating', cacheKey);\n const tmp = await producer();\n if (tmp || opts?.cacheNullValues) {\n Logger.debug('Writing %j to cache');\n rval = {\n cacheKey: cacheKey,\n createdEpochMS: now,\n expiresEpochMS: opts && opts.timeToLiveMS ? now + opts.timeToLiveMS : null,\n value: tmp,\n generated: false,\n };\n await this.provider.storeInCache(rval);\n rval.generated = true;\n }\n }\n return rval;\n }\n async fetch(cacheKey, producer, opts = null) {\n const wrapper = await this.fetchWrapper(cacheKey, producer, opts);\n return wrapper ? wrapper.value : null;\n }\n async removeFromCache(cacheKey, returnOldValue) {\n let rval = null;\n if (returnOldValue) {\n rval = await this.fetchWrapper(cacheKey, () => null);\n }\n await this.provider.removeFromCache(cacheKey);\n return rval;\n }\n async clearCache() {\n return this.provider.clearCache();\n }\n async readAll() {\n return this.provider.readAll();\n }\n}\n//# sourceMappingURL=simple-cache.js.map","import { CloudWatchLogsClient, DescribeLogStreamsCommand, FilterLogEventsCommand, } from '@aws-sdk/client-cloudwatch-logs';\nimport { Logger, StopWatch } from '@bitblit/ratchet-common';\nexport class CloudWatchLogGroupRatchet {\n logGroup;\n awsCWLogs;\n constructor(logGroup, awsCWLogs = new CloudWatchLogsClient({ region: 'us-east-1' })) {\n this.logGroup = logGroup;\n this.awsCWLogs = awsCWLogs;\n }\n get cloudWatchLogsClient() {\n return this.awsCWLogs;\n }\n async readLogStreams(startTimestamp = null, endTimestamp = null) {\n const params = {\n logGroupName: this.logGroup,\n orderBy: 'LastEventTime',\n };\n const rval = [];\n do {\n Logger.debug('Pulling more log streams (%d found so far)', rval.length);\n const temp = await this.awsCWLogs.send(new DescribeLogStreamsCommand(params));\n temp.logStreams.forEach((s) => {\n if (s.lastEventTimestamp !== null) {\n if (!startTimestamp || s.lastEventTimestamp >= startTimestamp) {\n if (!endTimestamp || s.firstEventTimestamp <= endTimestamp) {\n rval.push(s);\n }\n }\n }\n });\n params.nextToken = temp.nextToken;\n } while (!!params.nextToken);\n Logger.debug('Found %d total, returning', rval.length);\n return rval;\n }\n async readLogStreamNames(startTimestamp = null, endTimestamp = null) {\n const streams = await this.readLogStreams(startTimestamp, endTimestamp);\n const rval = streams.map((s) => s.logStreamName);\n return rval;\n }\n async readEvents(filter, startTimestamp = null, endTimestamp = null, sortEvents = true, maxEvents = null) {\n const sw = new StopWatch();\n const params = {\n logGroupName: this.logGroup,\n endTime: endTimestamp,\n startTime: startTimestamp,\n };\n if (filter) {\n params.filterPattern = filter;\n }\n Logger.debug('Reading log events matching : %j', params);\n let rval = [];\n do {\n Logger.debug('Pulling more log events (%d found so far) : %s', rval.length, sw.dump());\n const temp = await this.awsCWLogs.send(new FilterLogEventsCommand(params));\n rval = rval.concat(temp.events);\n params.nextToken = temp.nextToken;\n } while (!!params.nextToken && (!maxEvents || rval.length < maxEvents));\n Logger.debug('Found %d total in %s', rval.length, sw.dump());\n if (sortEvents) {\n Logger.debug('Sorting events by timestamp');\n rval = rval.sort((a, b) => {\n let rval = a.timestamp - b.timestamp;\n if (rval === 0) {\n rval = a.message.localeCompare(b.message);\n }\n return rval;\n });\n }\n sw.log();\n return rval;\n }\n}\n//# sourceMappingURL=cloud-watch-log-group-ratchet.js.map","import { CloudWatchLogsClient, DeleteLogGroupCommand, DeleteLogStreamCommand, DescribeLogGroupsCommand, DescribeLogStreamsCommand, GetQueryResultsCommand, StartQueryCommand, StopQueryCommand, } from '@aws-sdk/client-cloudwatch-logs';\nimport { Logger, PromiseRatchet, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class CloudWatchLogsRatchet {\n static MAX_DELETE_RETRIES = 5;\n cwLogs;\n constructor(cloudwatchLogs = null) {\n this.cwLogs = cloudwatchLogs ? cloudwatchLogs : new CloudWatchLogsClient({ region: 'us-east-1' });\n }\n get cloudWatchLogsClient() {\n return this.cwLogs;\n }\n async removeEmptyOrOldLogStreams(logGroupName, maxToRemove = 1000, oldestEventEpochMS = null) {\n Logger.info('Removing empty streams from %s, oldest event epoch MS : %d', logGroupName, oldestEventEpochMS);\n const streamSearchParams = {\n logGroupName: logGroupName,\n orderBy: 'LastEventTime',\n };\n const oldestEventTester = oldestEventEpochMS || 1;\n let totalStreams = 0;\n const removedStreams = [];\n const failedRemovedStreams = [];\n let waitPerDescribe = 10;\n do {\n Logger.debug('Executing search for streams');\n try {\n const streams = await this.cwLogs.send(new DescribeLogStreamsCommand(streamSearchParams));\n totalStreams += streams.logStreams.length;\n Logger.debug('Found %d streams (%d so far, %d to delete)', streams.logStreams.length, totalStreams, removedStreams.length);\n for (let i = 0; i < streams.logStreams.length && removedStreams.length < maxToRemove; i++) {\n const st = streams.logStreams[i];\n if (!st.firstEventTimestamp) {\n removedStreams.push(st);\n }\n else if (st.lastEventTimestamp < oldestEventTester) {\n removedStreams.push(st);\n }\n }\n streamSearchParams['nextToken'] = streams.nextToken;\n }\n catch (err) {\n const oldWait = waitPerDescribe;\n waitPerDescribe = Math.min(1000, waitPerDescribe * 1.5);\n Logger.info('Caught while describing %s, increasing wait between deletes (was %d, now %d)', err, oldWait, waitPerDescribe);\n }\n } while (!!streamSearchParams['nextToken'] && removedStreams.length < maxToRemove);\n Logger.info('Found %d streams to delete', removedStreams.length);\n let waitPer = 10;\n for (let i = 0; i < removedStreams.length; i++) {\n const delParams = {\n logGroupName: logGroupName,\n logStreamName: removedStreams[i].logStreamName,\n };\n const type = removedStreams[i].storedBytes === 0 ? 'empty' : 'old';\n Logger.info('Removing %s stream %s', type, removedStreams[i].logStreamName);\n let removed = false;\n let retry = 0;\n while (!removed && retry < CloudWatchLogsRatchet.MAX_DELETE_RETRIES) {\n try {\n await this.cwLogs.send(new DeleteLogStreamCommand(delParams));\n removed = true;\n await PromiseRatchet.wait(waitPer);\n }\n catch (err) {\n retry++;\n const oldWait = waitPer;\n waitPer = Math.min(1000, waitPer * 1.5);\n Logger.info('Caught %s, increasing wait between deletes and retrying (wait was %d, now %d) (Retry %d of %d)', err, oldWait, waitPer, retry, CloudWatchLogsRatchet.MAX_DELETE_RETRIES);\n }\n }\n if (!removed) {\n failedRemovedStreams.push(removedStreams[i]);\n }\n }\n Logger.warn('Failed to remove streams : %j', failedRemovedStreams);\n return removedStreams;\n }\n async findOldestEventTimestampInGroup(logGroupName) {\n const stream = await this.findStreamWithOldestEventInGroup(logGroupName);\n return stream ? stream.firstEventTimestamp : null;\n }\n async findStreamWithOldestEventInGroup(logGroupName) {\n Logger.info('Finding oldest event in : %s', logGroupName);\n let rval = null;\n try {\n const streamSearchParams = {\n logGroupName: logGroupName,\n orderBy: 'LastEventTime',\n };\n let totalStreams = 0;\n do {\n Logger.debug('Executing search for streams');\n const streams = await this.cwLogs.send(new DescribeLogStreamsCommand(streamSearchParams));\n totalStreams += streams.logStreams.length;\n Logger.debug('Found %d streams (%d so far)', streams.logStreams.length, totalStreams);\n streams.logStreams.forEach((s) => {\n if (s.firstEventTimestamp && (rval === null || s.firstEventTimestamp < rval.firstEventTimestamp)) {\n rval = s;\n }\n });\n streamSearchParams['nextToken'] = streams.nextToken;\n } while (!!streamSearchParams['nextToken']);\n }\n catch (err) {\n Logger.error('Error attempting to find oldest event in group : %s : %s', logGroupName, err, err);\n }\n return rval;\n }\n async findLogGroups(prefix) {\n RequireRatchet.notNullOrUndefined(prefix);\n const params = {\n logGroupNamePrefix: prefix,\n };\n let rval = [];\n do {\n Logger.info('%d found, pulling log groups : %j', rval.length, params);\n const res = await this.cwLogs.send(new DescribeLogGroupsCommand(params));\n rval = rval.concat(res.logGroups);\n params.nextToken = res.nextToken;\n } while (!!params.nextToken);\n return rval;\n }\n async removeLogGroups(groups) {\n RequireRatchet.notNullOrUndefined(groups);\n const rval = [];\n for (let i = 0; i < groups.length; i++) {\n try {\n Logger.info('Deleting %j', groups[i]);\n const req = {\n logGroupName: groups[i].logGroupName,\n };\n await this.cwLogs.send(new DeleteLogGroupCommand(req));\n rval.push(true);\n }\n catch (err) {\n Logger.error('Failure to delete %j : %s', groups[i], err);\n rval.push(false);\n }\n }\n return rval;\n }\n async removeLogGroupsWithPrefix(prefix) {\n RequireRatchet.notNullOrUndefined(prefix);\n RequireRatchet.true(StringRatchet.trimToEmpty(prefix).length > 0);\n Logger.info('Removing log groups with prefix %s', prefix);\n const groups = await this.findLogGroups(prefix);\n return await this.removeLogGroups(groups);\n }\n async fullyExecuteInsightsQuery(sqr) {\n RequireRatchet.notNullOrUndefined(sqr);\n Logger.debug('Starting insights query : %j', sqr);\n const resp = await this.cwLogs.send(new StartQueryCommand(sqr));\n Logger.debug('Got query id %j', resp);\n let rval = null;\n let delayMS = 100;\n while (!rval || ['Running', 'Scheduled'].includes(rval.status)) {\n rval = await this.cwLogs.send(new GetQueryResultsCommand({ queryId: resp.queryId }));\n await PromiseRatchet.wait(delayMS);\n delayMS *= 2;\n Logger.info('Got : %j', rval);\n }\n return rval;\n }\n async abortInsightsQuery(queryId) {\n let rval = null;\n if (!!queryId) {\n rval = await this.cwLogs.send(new StopQueryCommand({ queryId: queryId }));\n }\n return rval;\n }\n}\n//# sourceMappingURL=cloud-watch-logs-ratchet.js.map","export var CloudWatchMetricsUnit;\n(function (CloudWatchMetricsUnit) {\n CloudWatchMetricsUnit[\"Seconds\"] = \"Seconds\";\n CloudWatchMetricsUnit[\"Microseconds\"] = \"Microseconds\";\n CloudWatchMetricsUnit[\"Milliseconds\"] = \"Milliseconds\";\n CloudWatchMetricsUnit[\"Bytes\"] = \"Bytes\";\n CloudWatchMetricsUnit[\"Kilobytes\"] = \"Kilobytes\";\n CloudWatchMetricsUnit[\"Megabytes\"] = \"Megabytes\";\n CloudWatchMetricsUnit[\"Gigabytes\"] = \"Gigabytes\";\n CloudWatchMetricsUnit[\"Terabytes\"] = \"Terabytes\";\n CloudWatchMetricsUnit[\"Bits\"] = \"Bits\";\n CloudWatchMetricsUnit[\"Kilobits\"] = \"Kilobits\";\n CloudWatchMetricsUnit[\"Megabits\"] = \"Megabits\";\n CloudWatchMetricsUnit[\"Gigabits\"] = \"Gigabits\";\n CloudWatchMetricsUnit[\"Terabits\"] = \"Terabits\";\n CloudWatchMetricsUnit[\"Percent\"] = \"Percent\";\n CloudWatchMetricsUnit[\"Count\"] = \"Count\";\n CloudWatchMetricsUnit[\"BytesPerSecond\"] = \"Bytes/Second\";\n CloudWatchMetricsUnit[\"KilobytesPerSecond\"] = \"Kilobytes/Second\";\n CloudWatchMetricsUnit[\"MegabytesPerSecond\"] = \"Megabytes/Second\";\n CloudWatchMetricsUnit[\"GigabytesPerSecond\"] = \"Gigabytes/Second\";\n CloudWatchMetricsUnit[\"TerabytesPerSecond\"] = \"Terabytes/Second\";\n CloudWatchMetricsUnit[\"BitsPerSecond\"] = \"Terabytes/Second\";\n CloudWatchMetricsUnit[\"KilobitsPerSecond\"] = \"Kilobits/Second\";\n CloudWatchMetricsUnit[\"MegabitsPerSecond\"] = \"Megabits/Second\";\n CloudWatchMetricsUnit[\"GigabitsPerSecond\"] = \"Gigabits/Second\";\n CloudWatchMetricsUnit[\"TerabitsPerSecond\"] = \"Terabits/Second\";\n CloudWatchMetricsUnit[\"CountPerSecond\"] = \"Count/Second\";\n CloudWatchMetricsUnit[\"None\"] = \"None\";\n})(CloudWatchMetricsUnit || (CloudWatchMetricsUnit = {}));\n//# sourceMappingURL=cloud-watch-metrics-unit.js.map","import { CloudWatchClient, PutMetricDataCommand } from '@aws-sdk/client-cloudwatch';\nimport { Logger } from '@bitblit/ratchet-common';\nimport { CloudWatchMetricsUnit } from '../model/cloud-watch-metrics-unit.js';\nimport { DateTime } from 'luxon';\nexport class CloudWatchMetricsRatchet {\n cw;\n constructor(cloudWatch = null) {\n this.cw = cloudWatch ? cloudWatch : new CloudWatchClient({ region: 'us-east-1', apiVersion: '2010-08-01' });\n }\n get cloudWatchClient() {\n return this.cw;\n }\n async writeSingleMetric(namespace, metric, dims, unit = CloudWatchMetricsUnit.None, value, timestampDate = new Date(), highResolution = false) {\n const cwDims = [];\n if (!!dims && dims.length > 0) {\n dims.forEach((d) => {\n cwDims.push({ Name: d.key, Value: d.value });\n });\n }\n const storageResolution = highResolution ? 1 : 60;\n const metricData = {\n Namespace: namespace,\n MetricData: [\n {\n MetricName: metric,\n Dimensions: cwDims,\n Unit: String(unit),\n Value: value,\n Timestamp: timestampDate,\n StorageResolution: storageResolution,\n },\n ],\n };\n Logger.silly('Writing metric to cw : %j', metricData);\n const result = await this.cw.send(new PutMetricDataCommand(metricData));\n Logger.silly('Result: %j', result);\n return result;\n }\n async writeDynamoCountAsMinuteLevelMetric(req) {\n Logger.info('Publishing %s / %s metric for %s UTC', req.namespace, req.metric, req.minuteUTC);\n if (!!req.scan && !!req.query) {\n throw new Error('Must send query or scan, but not both');\n }\n if (!req.scan && !req.query) {\n throw new Error('You must specify either a scan or a query');\n }\n const cnt = !!req.query\n ? await req.dynamoRatchet.fullyExecuteQueryCount(req.query)\n : await req.dynamoRatchet.fullyExecuteScanCount(req.scan);\n Logger.debug('%s / %s for %s are %j', req.namespace, req.metric, req.minuteUTC, cnt);\n const parseDateString = req.minuteUTC.split(' ').join('T') + ':00Z';\n const parseDate = DateTime.fromISO(parseDateString).toJSDate();\n const metricRes = await this.writeSingleMetric(req.namespace, req.metric, req.dims, CloudWatchMetricsUnit.Count, cnt.count, parseDate, false);\n Logger.debug('Metrics response: %j', metricRes);\n return cnt.count;\n }\n}\n//# sourceMappingURL=cloud-watch-metrics-ratchet.js.map","import { Logger, StringRatchet } from '@bitblit/ratchet-common';\nimport { PutObjectCommand, } from '@aws-sdk/client-s3';\nimport { Upload } from '@aws-sdk/lib-storage';\nexport class DaemonUtil {\n static DEFAULT_CONTENT = Buffer.from('DAEMON_PLACEHOLDER');\n static DAEMON_METADATA_KEY = 'daemon_meta';\n static async start(cache, id, s3Key, options) {\n try {\n options.meta = options.meta || {};\n Logger.info('Starting daemon, key: %s, options: %j', s3Key, options);\n const now = new Date().getTime();\n const newState = {\n id: id,\n title: options.title,\n lastUpdatedEpochMS: now,\n lastUpdatedMessage: 'Created',\n targetFileName: options.targetFileName,\n startedEpochMS: now,\n completedEpochMS: null,\n meta: options.meta,\n error: null,\n link: null,\n contentType: options.contentType,\n };\n const rval = await DaemonUtil.writeState(cache, s3Key, newState, DaemonUtil.DEFAULT_CONTENT);\n return rval;\n }\n catch (err) {\n Logger.error('Error while trying to start a daemon: %j %s', options, err);\n throw err;\n }\n }\n static async writeState(cache, s3Key, newState, contents) {\n try {\n const s3meta = {};\n newState.lastUpdatedEpochMS = new Date().getTime();\n s3meta[DaemonUtil.DAEMON_METADATA_KEY] = JSON.stringify(newState);\n const params = {\n Bucket: cache.getDefaultBucket(),\n Key: s3Key,\n ContentType: newState.contentType,\n Metadata: s3meta,\n Body: new Blob([contents]),\n };\n if (newState.targetFileName) {\n params.ContentDisposition = 'attachment;filename=\"' + newState.targetFileName + '\"';\n }\n const written = await cache.getS3Client().send(new PutObjectCommand(params));\n Logger.silly('Daemon wrote : %s', written);\n return DaemonUtil.stat(cache, s3Key);\n }\n catch (err) {\n Logger.error('Error while trying to write a daemon stat: %j %s', newState, err);\n throw err;\n }\n }\n static async streamDataAndFinish(cache, s3Key, data, options) {\n Logger.debug('Streaming data to %s', s3Key);\n const inStat = await DaemonUtil.updateMessage(cache, s3Key, 'Streaming data');\n inStat.completedEpochMS = new Date().getTime();\n inStat.lastUpdatedMessage = 'Complete';\n const s3meta = {};\n s3meta[DaemonUtil.DAEMON_METADATA_KEY] = JSON.stringify(inStat);\n const params = {\n Bucket: cache.getDefaultBucket(),\n Key: s3Key,\n ContentType: inStat.contentType,\n Metadata: s3meta,\n Body: data,\n };\n const targetFileName = StringRatchet.trimToNull(options?.overrideTargetFileName) || StringRatchet.trimToNull(inStat?.targetFileName);\n if (targetFileName) {\n params.ContentDisposition = 'attachment;filename=\"' + targetFileName + '\"';\n }\n const upload = new Upload({\n client: cache.getS3Client(),\n params: params,\n tags: [],\n queueSize: 4,\n partSize: 1024 * 1024 * 5,\n leavePartsOnError: false,\n });\n upload.on('httpUploadProgress', (progress) => {\n Logger.info('Uploading : %s', progress);\n });\n const written = await upload.done();\n Logger.silly('Daemon wrote : %s', written);\n return DaemonUtil.stat(cache, s3Key);\n }\n static async updateMessage(cache, s3Key, newMessage) {\n try {\n const inStat = await DaemonUtil.stat(cache, s3Key);\n inStat.lastUpdatedMessage = newMessage;\n return DaemonUtil.writeState(cache, s3Key, inStat, DaemonUtil.DEFAULT_CONTENT);\n }\n catch (err) {\n Logger.error('Error while trying to update a daemon message: %j %s', s3Key, err);\n throw err;\n }\n }\n static async stat(s3Cache, path) {\n try {\n Logger.debug('Daemon stat for path %s / %s', s3Cache.getDefaultBucket(), path);\n let stat = null;\n const meta = await s3Cache.fetchMetaForCacheFile(path);\n Logger.debug('Daemon: Meta is %j', meta);\n const metaString = meta && meta.Metadata ? meta.Metadata[DaemonUtil.DAEMON_METADATA_KEY] : null;\n if (metaString) {\n stat = JSON.parse(metaString);\n if (stat.completedEpochMS && !stat.error) {\n stat.link = await s3Cache.preSignedDownloadUrlForCacheFile(path);\n }\n }\n else {\n Logger.warn('No metadata found! (Head was %j)', meta);\n }\n return stat;\n }\n catch (err) {\n Logger.error('Error while trying to fetch a daemon state: %j %s', path, err);\n throw err;\n }\n }\n static async abort(s3Cache, path) {\n return DaemonUtil.error(s3Cache, path, 'Aborted');\n }\n static async error(s3Cache, path, error) {\n try {\n const inStat = await DaemonUtil.stat(s3Cache, path);\n inStat.error = error;\n inStat.completedEpochMS = new Date().getTime();\n return DaemonUtil.writeState(s3Cache, path, inStat, DaemonUtil.DEFAULT_CONTENT);\n }\n catch (err) {\n Logger.error('Error while trying to write a daemon error: %j %s', path, err);\n throw err;\n }\n }\n static async finalize(s3Cache, path, contents) {\n try {\n Logger.info('Finalizing daemon %s with %d bytes', path, contents.length);\n const inStat = await DaemonUtil.stat(s3Cache, path);\n inStat.completedEpochMS = new Date().getTime();\n inStat.lastUpdatedMessage = 'Complete';\n return DaemonUtil.writeState(s3Cache, path, inStat, contents);\n }\n catch (err) {\n Logger.error('Error while trying to finalize a daemon: %j %s', path, err);\n throw err;\n }\n }\n}\n//# sourceMappingURL=daemon-util.js.map","import { CopyObjectCommand, DeleteObjectCommand, GetObjectCommand, HeadObjectCommand, ListObjectsCommand, NoSuchKey, } from '@aws-sdk/client-s3';\nimport { Logger, RequireRatchet, StopWatch, WebStreamRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\nimport { Upload } from '@aws-sdk/lib-storage';\nexport class S3CacheRatchet {\n s3;\n defaultBucket;\n constructor(s3, defaultBucket = null) {\n this.s3 = s3;\n this.defaultBucket = defaultBucket;\n RequireRatchet.notNullOrUndefined(this.s3, 's3');\n }\n get s3Client() {\n return this.s3;\n }\n static applyCacheControlMaxAge(input, seconds) {\n if (input && seconds) {\n input.CacheControl = 'max-age=' + seconds;\n }\n return input;\n }\n static applyUserMetaData(input, key, value) {\n if (input && StringRatchet.trimToNull(key) && StringRatchet.trimToNull(value)) {\n input.Metadata = input.Metadata || {};\n input.Metadata[key] = value;\n }\n return input;\n }\n getDefaultBucket() {\n return this.defaultBucket;\n }\n getS3Client() {\n return this.s3;\n }\n async fileExists(key, bucket = null) {\n try {\n const head = await this.fetchMetaForCacheFile(key, this.bucketVal(bucket));\n return !!head;\n }\n catch (err) {\n Logger.silly('Error calling file exists (as expected) %s', err);\n return false;\n }\n }\n async fetchCacheFileAsS3GetObjectCommandOutput(key, bucket = null) {\n let rval = null;\n try {\n const params = {\n Bucket: this.bucketVal(bucket),\n Key: key,\n };\n rval = await this.s3.send(new GetObjectCommand(params));\n }\n catch (err) {\n if (err instanceof NoSuchKey) {\n Logger.debug('Key %s not found - returning null', key);\n rval = null;\n }\n else {\n throw err;\n }\n }\n return rval;\n }\n async fetchCacheFileAsReadableStream(key, bucket = null) {\n const out = await this.fetchCacheFileAsS3GetObjectCommandOutput(key, bucket);\n return out.Body.transformToWebStream();\n }\n async fetchCacheFileAsBuffer(key, bucket = null) {\n let rval = null;\n const out = await this.fetchCacheFileAsS3GetObjectCommandOutput(key, bucket);\n if (out?.Body) {\n const tmp = await out.Body.transformToByteArray();\n rval = Buffer.from(tmp);\n }\n return rval;\n }\n async fetchCacheFileAsString(key, bucket = null) {\n let rval = null;\n const out = await this.fetchCacheFileAsS3GetObjectCommandOutput(key, bucket);\n if (out?.Body) {\n rval = await out.Body.transformToString();\n }\n return rval;\n }\n async fetchCacheFileAsObject(key, bucket = null) {\n const value = await this.fetchCacheFileAsString(key, bucket);\n return value ? JSON.parse(value) : null;\n }\n async removeCacheFile(key, bucket = null) {\n let rval = null;\n const params = {\n Bucket: this.bucketVal(bucket),\n Key: key,\n };\n try {\n rval = await this.s3.send(new DeleteObjectCommand(params));\n }\n catch (err) {\n if (err && err['statusCode'] == 404) {\n Logger.info('Swallowing 404 deleting missing object %s %s', bucket, key);\n rval = null;\n }\n else {\n throw err;\n }\n }\n return rval;\n }\n async writeObjectToCacheFile(key, dataObject, template, bucket) {\n const json = JSON.stringify(dataObject);\n return this.writeStringToCacheFile(key, json, template, bucket);\n }\n async writeStringToCacheFile(key, dataString, template, bucket) {\n const stream = WebStreamRatchet.stringToWebReadableStream(dataString);\n return this.writeStreamToCacheFile(key, stream, template, bucket);\n }\n async writeStreamToCacheFile(key, data, template, bucket) {\n const params = Object.assign({}, template || {}, {\n Bucket: this.bucketVal(bucket),\n Key: key,\n Body: data,\n });\n const upload = new Upload({\n client: this.s3,\n params: params,\n tags: [],\n queueSize: 4,\n partSize: 1024 * 1024 * 5,\n leavePartsOnError: false,\n });\n upload.on('httpUploadProgress', (progress) => {\n Logger.info('Uploading : %s', progress);\n });\n const result = await upload.done();\n return result;\n }\n async synchronize(srcPrefix, targetPrefix, targetRatchet = this, recurseSubFolders = false) {\n RequireRatchet.notNullOrUndefined(srcPrefix, 'srcPrefix');\n RequireRatchet.notNullOrUndefined(targetPrefix, 'targetPrefix');\n RequireRatchet.true(srcPrefix.endsWith('/'), 'srcPrefix must end in /');\n RequireRatchet.true(targetPrefix.endsWith('/'), 'targetPrefix must end in /');\n let rval = [];\n const sourceFiles = await this.directChildrenOfPrefix(srcPrefix);\n const targetFiles = await targetRatchet.directChildrenOfPrefix(targetPrefix);\n const sw = new StopWatch();\n for (let i = 0; i < sourceFiles.length; i++) {\n const sourceFile = sourceFiles[i];\n Logger.info('Processing %s : %s', sourceFile, sw.dumpExpected(i / sourceFiles.length));\n if (sourceFile.endsWith('/')) {\n if (recurseSubFolders) {\n Logger.info('%s is a subfolder - recursing');\n const subs = await this.synchronize(srcPrefix + sourceFile, targetPrefix + sourceFile, targetRatchet, recurseSubFolders);\n Logger.info('Got %d back from %s', subs.length, sourceFile);\n rval = rval.concat(subs);\n }\n else {\n Logger.info('%s is a subfolder and recurse not specified - skipping', sourceFile);\n }\n }\n else {\n let shouldCopy = true;\n const srcMeta = await this.fetchMetaForCacheFile(srcPrefix + sourceFile);\n if (targetFiles.includes(sourceFile)) {\n const targetMeta = await targetRatchet.fetchMetaForCacheFile(targetPrefix + sourceFile);\n if (srcMeta.ETag === targetMeta.ETag) {\n Logger.debug('Skipping - identical');\n shouldCopy = false;\n }\n }\n if (shouldCopy) {\n Logger.debug('Copying...');\n const srcStream = await this.fetchCacheFileAsReadableStream(srcPrefix + sourceFile);\n try {\n const written = await targetRatchet.writeStreamToCacheFile(targetPrefix + sourceFile, srcStream, srcMeta, undefined);\n Logger.silly('Write result : %j', written);\n rval.push(sourceFile);\n }\n catch (err) {\n Logger.error('Failed to sync : %s : %s', sourceFile, err);\n }\n }\n }\n }\n Logger.info('Found %d files, copied %d', sourceFiles.length, rval.length);\n sw.log();\n return rval;\n }\n async fetchMetaForCacheFile(key, bucket = null) {\n let rval = null;\n try {\n rval = await this.s3.send(new HeadObjectCommand({\n Bucket: this.bucketVal(bucket),\n Key: key,\n }));\n }\n catch (err) {\n if (err && err['statusCode'] == 404) {\n Logger.info('Cache file %s %s not found returning null', this.bucketVal(bucket), key);\n rval = null;\n }\n else {\n Logger.error('Unrecognized error, rethrowing : %s', err, err);\n throw err;\n }\n }\n return rval;\n }\n async cacheFileAgeInSeconds(key, bucket = null) {\n try {\n const res = await this.fetchMetaForCacheFile(key, bucket);\n if (res && res.LastModified) {\n return Math.floor((new Date().getTime() - res.LastModified.getTime()) / 1000);\n }\n else {\n Logger.warn('Cache file %s %s had no last modified returning null', this.bucketVal(bucket), key);\n return null;\n }\n }\n catch (err) {\n if (err && err['statusCode'] == 404) {\n Logger.warn('Cache file %s %s not found returning null', this.bucketVal(bucket), key);\n return null;\n }\n else {\n throw err;\n }\n }\n }\n async copyFile(srcKey, dstKey, srcBucket = null, dstBucket = null) {\n const params = {\n CopySource: '/' + this.bucketVal(srcBucket) + '/' + srcKey,\n Bucket: this.bucketVal(dstBucket),\n Key: dstKey,\n MetadataDirective: 'COPY',\n };\n const rval = await this.s3.send(new CopyObjectCommand(params));\n return rval;\n }\n async quietCopyFile(srcKey, dstKey, srcBucket = null, dstBucket = null) {\n let rval = false;\n try {\n const tmp = await this.copyFile(srcKey, dstKey, srcBucket, dstBucket);\n rval = true;\n }\n catch (err) {\n Logger.silly('Failed to copy file in S3 : %s', err);\n }\n return rval;\n }\n async preSignedDownloadUrlForCacheFile(key, expirationSeconds = 3600, bucket = null) {\n const getCommand = {\n Bucket: this.bucketVal(bucket),\n Key: key,\n };\n const link = await getSignedUrl(this.s3, new GetObjectCommand(getCommand), { expiresIn: expirationSeconds });\n return link;\n }\n async directChildrenOfPrefix(prefix, expandFiles = false, bucket = null, maxToReturn = null) {\n const returnValue = [];\n const params = {\n Bucket: this.bucketVal(bucket),\n Prefix: prefix,\n Delimiter: '/',\n };\n let response = null;\n do {\n response = await this.s3.send(new ListObjectsCommand(params));\n const prefixLength = prefix.length;\n if (response['CommonPrefixes']) {\n response['CommonPrefixes'].forEach((cp) => {\n if (!maxToReturn || returnValue.length < maxToReturn) {\n const value = cp['Prefix'].substring(prefixLength);\n returnValue.push(value);\n }\n });\n }\n if (response['Contents']) {\n await Promise.all(response['Contents'].map(async (cp) => {\n if (!maxToReturn || returnValue.length < maxToReturn) {\n if (expandFiles) {\n const expanded = {\n link: await this.preSignedDownloadUrlForCacheFile(cp['Key'], 3600, bucket),\n name: cp['Key'].substring(prefixLength),\n size: cp['Size'],\n };\n returnValue.push(expanded);\n }\n else {\n returnValue.push(cp['Key'].substring(prefixLength));\n }\n }\n }));\n }\n params.Marker = response.NextMarker;\n } while (params.Marker && (!maxToReturn || returnValue.length < maxToReturn));\n return returnValue;\n }\n async allSubFoldersOfPrefix(prefix, bucket = null) {\n const returnValue = [prefix];\n let idx = 0;\n while (idx < returnValue.length) {\n const next = returnValue[idx++];\n Logger.debug('Pulling %s (%d remaining)', next, returnValue.length - idx);\n const req = {\n Bucket: this.bucketVal(bucket),\n Prefix: next,\n Delimiter: '/',\n };\n let resp = null;\n do {\n req.ContinuationToken = resp ? resp.NextContinuationToken : null;\n resp = await this.s3.send(new ListObjectsCommand(req));\n resp.CommonPrefixes.forEach((p) => {\n returnValue.push(p.Prefix);\n });\n Logger.debug('g:%j', resp);\n } while (resp.NextContinuationToken);\n }\n return returnValue;\n }\n bucketVal(explicitBucket) {\n const rval = explicitBucket ? explicitBucket : this.defaultBucket;\n if (!rval) {\n throw 'You must set either the default bucket or pass it explicitly';\n }\n return rval;\n }\n}\n//# sourceMappingURL=s3-cache-ratchet.js.map","import { Logger, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { S3CacheRatchet } from '../s3/s3-cache-ratchet.js';\nimport { DaemonUtil } from './daemon-util.js';\nexport class Daemon {\n s3;\n bucket;\n prefix;\n _defaultGroup;\n jwtRatchet;\n static DEFAULT_DEFAULT_GROUP = 'DEFAULT';\n cache;\n constructor(s3, bucket, prefix = '', _defaultGroup = Daemon.DEFAULT_DEFAULT_GROUP, jwtRatchet) {\n this.s3 = s3;\n this.bucket = bucket;\n this.prefix = prefix;\n this._defaultGroup = _defaultGroup;\n this.jwtRatchet = jwtRatchet;\n this.cache = new S3CacheRatchet(this.s3, this.bucket);\n }\n get defaultGroup() {\n return this._defaultGroup;\n }\n async keyToPublicToken(key, expirationSeconds) {\n RequireRatchet.notNullOrUndefined(this.jwtRatchet, 'You must set jwtRatchet if you wish to use public tokens');\n RequireRatchet.notNullOrUndefined(key, 'key');\n RequireRatchet.true(expirationSeconds > 0, 'Expiration seconds must be larger than 0');\n const token = { daemonKey: key };\n const publicToken = await this.jwtRatchet.createTokenString(token, expirationSeconds);\n return publicToken;\n }\n keyToPath(key) {\n return Buffer.from(key, 'base64').toString();\n }\n pathToKey(path) {\n return Buffer.from(path).toString('base64');\n }\n generatePath(group = this._defaultGroup) {\n return this.generatePrefix(group) + StringRatchet.createType4Guid();\n }\n generatePrefix(group = this._defaultGroup) {\n return this.prefix + group + '/';\n }\n async start(options) {\n options.group = options.group || this._defaultGroup;\n const path = this.generatePath(options.group);\n const key = this.pathToKey(path);\n return DaemonUtil.start(this.cache, key, path, options);\n }\n async writeState(newState, contents) {\n const key = this.keyToPath(newState.id);\n return DaemonUtil.writeState(this.cache, key, newState, contents);\n }\n async clean(group = this._defaultGroup, olderThanSeconds = 60 * 60 * 24 * 7) {\n try {\n Logger.info('Daemon removing items older than %d seconds from group %s', olderThanSeconds, group);\n const original = await this.list(group);\n const now = new Date().getTime();\n const removed = [];\n for (let i = 0; i < original.length; i++) {\n const test = original[i];\n const ageSeconds = (now - test.startedEpochMS) / 1000;\n if (ageSeconds > olderThanSeconds) {\n const remove = await this.cache.removeCacheFile(this.keyToPath(test.id));\n removed.push(test);\n }\n }\n Logger.debug('Removed %d of %d items', removed.length, original.length);\n return removed;\n }\n catch (err) {\n Logger.error('Error while trying to clean a daemon: %j %s', group, err);\n throw err;\n }\n }\n async listKeys(group = this._defaultGroup) {\n try {\n const prefix = this.generatePrefix(group);\n Logger.info('Fetching children of %s', prefix);\n const rval = await this.cache.directChildrenOfPrefix(prefix);\n Logger.debug('Found : %j', rval);\n return rval;\n }\n catch (err) {\n Logger.error('Error while trying to list daemon keys: %j %s', group, err);\n throw err;\n }\n }\n async list(group = this._defaultGroup) {\n try {\n const prefix = this.generatePrefix(group);\n Logger.info('Fetching children of %s', prefix);\n const keys = await this.listKeys(group);\n const proms = keys.map((k) => this.stat(this.pathToKey(this.generatePrefix(group) + k)));\n const rval = await Promise.all(proms);\n return rval;\n }\n catch (err) {\n Logger.error('Error while trying to list daemon states: %j %s', group, err);\n throw err;\n }\n }\n async updateMessage(id, newMessage) {\n const itemPath = this.keyToPath(id);\n return DaemonUtil.updateMessage(this.cache, itemPath, newMessage);\n }\n async stat(key) {\n const itemPath = this.keyToPath(key);\n return DaemonUtil.stat(this.cache, itemPath);\n }\n async statFromPublicToken(publicToken) {\n RequireRatchet.notNullOrUndefined(this.jwtRatchet, 'You must set jwtRatchet if you wish to use public tokens');\n RequireRatchet.notNullOrUndefined(publicToken, 'publicToken');\n const parsed = await this.jwtRatchet.decodeToken(publicToken);\n const key = parsed?.daemonKey;\n return key ? this.stat(key) : null;\n }\n async abort(id) {\n return DaemonUtil.abort(this.cache, this.keyToPath(id));\n }\n async error(id, error) {\n return DaemonUtil.error(this.cache, this.keyToPath(id), error);\n }\n async finalize(id, contents) {\n return DaemonUtil.finalize(this.cache, this.keyToPath(id), contents);\n }\n}\n//# sourceMappingURL=daemon.js.map","import { MapRatchet, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { DateTime } from 'luxon';\nexport class PrototypeDao {\n provider;\n cfg;\n static defaultDaoConfig() {\n return {\n guidCreateFunction: StringRatchet.createType4Guid,\n guidFieldName: 'guid',\n createdEpochMSFieldName: 'createdEpochMS',\n updatedEpochMSFieldName: 'updatedEpochMS',\n createdUtcTimestampFieldName: null,\n updatedUtcTimestampFieldName: null,\n };\n }\n constructor(provider, cfg = PrototypeDao.defaultDaoConfig()) {\n this.provider = provider;\n this.cfg = cfg;\n RequireRatchet.notNullOrUndefined(provider, 'provider');\n RequireRatchet.notNullOrUndefined(cfg, 'cfg');\n RequireRatchet.notNullOrUndefined(cfg.guidCreateFunction, 'cfg.guidCreateFunction');\n RequireRatchet.notNullOrUndefined(cfg.guidFieldName, 'cfg.guidFieldName');\n }\n async fetchAll() {\n const db = await this.provider.loadDatabase();\n return db.items || [];\n }\n async resetDatabase() {\n await this.provider.storeDatabase({ items: [], lastModifiedEpochMS: Date.now() });\n }\n async removeItems(guids) {\n let old = await this.fetchAll();\n if (guids) {\n old = old.filter((t) => !guids.includes(t[this.cfg.guidFieldName]));\n await this.provider.storeDatabase({ items: old, lastModifiedEpochMS: Date.now() });\n }\n return old;\n }\n async store(value) {\n let old = await this.fetchAll();\n if (value) {\n value[this.cfg.guidFieldName] = value[this.cfg.guidFieldName] || this.cfg.guidCreateFunction();\n if (this.cfg.createdEpochMSFieldName) {\n value[this.cfg.createdEpochMSFieldName] = value[this.cfg.createdEpochMSFieldName] || Date.now();\n }\n if (this.cfg.createdUtcTimestampFieldName) {\n value[this.cfg.createdUtcTimestampFieldName] = value[this.cfg.createdUtcTimestampFieldName] || DateTime.utc().toISO();\n }\n if (this.cfg.updatedEpochMSFieldName) {\n value[this.cfg.updatedEpochMSFieldName] = Date.now();\n }\n if (this.cfg.updatedUtcTimestampFieldName) {\n value[this.cfg.updatedUtcTimestampFieldName] = DateTime.utc().toISO();\n }\n old = old.filter((t) => t[this.cfg.guidFieldName] !== value[this.cfg.guidFieldName]);\n old.push(value);\n await this.provider.storeDatabase({ items: old, lastModifiedEpochMS: Date.now() });\n }\n return value;\n }\n async fetchById(guid) {\n const old = await this.fetchAll();\n return old.find((t) => t[this.cfg.guidFieldName] === guid);\n }\n async searchByField(fieldDotPath, fieldValue) {\n RequireRatchet.notNullOrUndefined(fieldDotPath, 'fieldDotPath');\n RequireRatchet.notNullOrUndefined(fieldValue, 'fieldValue');\n const map = {};\n map[fieldDotPath] = fieldValue;\n return this.searchByFieldMap(map);\n }\n async searchByFieldMap(input) {\n RequireRatchet.notNullOrUndefined(input, 'input');\n let old = await this.fetchAll();\n old = old.filter((t) => {\n let matchAll = true;\n Object.keys(input).forEach((k) => {\n const val = MapRatchet.findValueDotPath(t, k);\n const fieldValue = input[k];\n matchAll = matchAll && val === fieldValue;\n });\n return matchAll;\n });\n return old;\n }\n}\n//# sourceMappingURL=prototype-dao.js.map","import { RequireRatchet } from '@bitblit/ratchet-common';\nexport class S3PrototypeDaoProvider {\n s3CacheRatchet;\n keyName;\n constructor(s3CacheRatchet, keyName) {\n this.s3CacheRatchet = s3CacheRatchet;\n this.keyName = keyName;\n RequireRatchet.notNullOrUndefined(s3CacheRatchet, 's3CacheRatchet');\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(s3CacheRatchet.getDefaultBucket(), 's3CacheRatchet.defaultBucket');\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(keyName, 'keyName');\n }\n async storeDatabase(inDb) {\n const toSave = inDb || { items: [], lastModifiedEpochMS: null };\n toSave.lastModifiedEpochMS = Date.now();\n const put = await this.s3CacheRatchet.writeObjectToCacheFile(this.keyName, toSave);\n const rval = !!put;\n return rval;\n }\n async loadDatabase() {\n const rval = (await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyName)) || {\n items: [],\n lastModifiedEpochMS: Date.now(),\n };\n return rval;\n }\n}\n//# sourceMappingURL=s3-prototype-dao-provider.js.map","import { Logger, StringRatchet } from '@bitblit/ratchet-common';\nexport class S3SimpleDao {\n cache;\n prefix;\n constructor(cache, prefix) {\n this.cache = cache;\n this.prefix = prefix;\n if (!cache) {\n throw new Error('cache object may not be null');\n }\n if (!cache.getDefaultBucket()) {\n throw new Error('Supplied cache must have default bucket set');\n }\n }\n buildPathPrefix(path) {\n let rval = '';\n if (this.prefix) {\n rval += this.prefix;\n }\n if (path) {\n rval += path;\n }\n return rval;\n }\n buildFullPath(id, path) {\n let rval = this.buildPathPrefix(path);\n if (rval.length > 0) {\n rval += '/';\n }\n rval += id + '.json';\n return rval;\n }\n async exists(id, path) {\n const fullPath = this.buildFullPath(id, path);\n Logger.debug('Check file existence : %s', fullPath);\n return this.cache.fileExists(fullPath);\n }\n async fetch(id, path) {\n const fullPath = this.buildFullPath(id, path);\n Logger.debug('Fetching : %s', fullPath);\n const rval = (await this.cache.fetchCacheFileAsObject(fullPath));\n rval.id = id;\n rval.path = path;\n return rval;\n }\n async store(item, path) {\n item.id = item.id || StringRatchet.createType4Guid();\n item.lastModifiedEpochMS = new Date().getTime();\n const fullPath = this.buildFullPath(item.id, path);\n Logger.debug('Storing : %s', fullPath);\n const stored = await this.cache.writeObjectToCacheFile(fullPath, item);\n const read = await this.fetch(item.id, path);\n return read;\n }\n async listItems(path) {\n const fullPath = this.buildPathPrefix(path);\n Logger.debug('Listing : %s', fullPath);\n const rval = await this.cache.directChildrenOfPrefix(fullPath);\n return rval;\n }\n async fetchItemsInPath(path) {\n const fullPath = this.buildPathPrefix(path);\n Logger.debug('Full fetch of : %s', fullPath);\n const items = await this.listItems(path);\n const promises = items.map((s) => this.fetch(s, path));\n const rval = await Promise.all(promises);\n return rval;\n }\n async delete(id, path) {\n const fullPath = this.buildFullPath(id, path);\n Logger.debug('Deleting : %s', fullPath);\n const del = await this.cache.removeCacheFile(fullPath);\n return del != null;\n }\n}\n//# sourceMappingURL=s3-simple-dao.js.map","import { BatchGetCommand, BatchWriteCommand, DeleteCommand, GetCommand, PutCommand, QueryCommand, ScanCommand, } from '@aws-sdk/lib-dynamodb';\nimport { DurationRatchet, ErrorRatchet, Logger, NumberRatchet, PromiseRatchet, RequireRatchet } from '@bitblit/ratchet-common';\nimport { UpdateItemCommand, } from '@aws-sdk/client-dynamodb';\nexport class DynamoRatchet {\n awsDDB;\n constructor(awsDDB) {\n this.awsDDB = awsDDB;\n if (!awsDDB) {\n throw 'awsDDB may not be null';\n }\n }\n get dynamoDBDocumentClient() {\n return this.awsDDB;\n }\n getDDB() {\n return this.awsDDB;\n }\n async tableIsEmpty(tableName) {\n const scan = {\n TableName: tableName,\n Limit: 1,\n };\n const ScanCommandOutput = await this.throughputSafeScanOrQuery((o) => this.scanPromise(o), scan);\n return ScanCommandOutput.Items.length === 0;\n }\n async scanPromise(input) {\n return this.awsDDB.send(new ScanCommand(input));\n }\n async queryPromise(input) {\n return this.awsDDB.send(new QueryCommand(input));\n }\n async throughputSafeScanOrQuery(proc, input, maxTries, inCurrentTry) {\n let rval = null;\n if (input) {\n let currentTry = inCurrentTry ?? 0;\n do {\n currentTry++;\n try {\n rval = await proc(input);\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n const wait = Math.pow(2, currentTry) * 1000;\n Logger.debug('Exceeded scan throughput for %j : Try %d of %d (Waiting %d ms)', input, currentTry, maxTries, wait);\n await PromiseRatchet.wait(wait);\n currentTry++;\n }\n else {\n throw err;\n }\n }\n } while (!rval && (!maxTries || currentTry < maxTries));\n if (!rval) {\n ErrorRatchet.throwFormattedErr('throughputSafeScan failed - tried %d times, kept running into throughput exceeded : %j', maxTries, input);\n }\n }\n return rval;\n }\n async fullyExecuteQueryCount(qry, delayMS = 0) {\n try {\n qry.Select = 'COUNT';\n Logger.debug('Executing count query : %j', qry);\n const rval = {\n count: 0,\n scannedCount: 0,\n pages: 0,\n };\n const start = new Date().getTime();\n let qryResults = null;\n const myLimit = qry.Limit;\n qry.Limit = null;\n do {\n qryResults = await this.throughputSafeScanOrQuery((o) => this.queryPromise(o), qry);\n rval.count += qryResults['Count'];\n rval.scannedCount += qryResults['ScannedCount'];\n rval.pages++;\n qry['ExclusiveStartKey'] = qryResults.LastEvaluatedKey;\n await PromiseRatchet.wait(delayMS);\n Logger.silly('Rval is now %j', rval);\n if (myLimit && rval.count >= myLimit && qry['ExclusiveStartKey']) {\n Logger.info('Aborting query since hit limit of %d', myLimit);\n qry['ExclusiveStartKey'] = null;\n }\n } while (qry['ExclusiveStartKey']);\n const end = new Date().getTime();\n Logger.debug('Finished, returned %j in %s for %j', rval, DurationRatchet.formatMsDuration(end - start, true), qry);\n return rval;\n }\n catch (err) {\n Logger.error('Failed with %s, q: %j', err, qry, err);\n return null;\n }\n }\n async fullyExecuteQuery(qry, delayMS = 0, softLimit = null) {\n const rval = [];\n await this.fullyExecuteProcessOverQuery(qry, async (v) => {\n rval.push(v);\n }, delayMS, softLimit);\n return rval;\n }\n async fullyExecuteProcessOverQuery(qry, proc, delayMS = 0, softLimit = null) {\n let cnt = 0;\n try {\n Logger.debug('Executing query : %j', qry);\n const start = new Date().getTime();\n Logger.debug('Pulling %j', qry);\n let qryResults = await this.throughputSafeScanOrQuery((o) => this.queryPromise(o), qry);\n for (let i = 0; i < qryResults.Items.length; i++) {\n await proc(qryResults.Items[i]);\n cnt++;\n }\n let pages = 0;\n let blankPages = 0;\n while (qryResults.LastEvaluatedKey && (softLimit === null || cnt < softLimit) && !qry.Limit) {\n Logger.silly('Found more rows - requery with key %j', qryResults.LastEvaluatedKey);\n qry['ExclusiveStartKey'] = qryResults.LastEvaluatedKey;\n qryResults = await this.throughputSafeScanOrQuery((o) => this.queryPromise(o), qry);\n for (let i = 0; i < qryResults.Items.length; i++) {\n await proc(qryResults.Items[i]);\n cnt++;\n }\n Logger.silly('Have processed %d items', cnt);\n pages++;\n blankPages += qryResults.Count === 0 ? 1 : 0;\n await PromiseRatchet.wait(delayMS);\n }\n const end = new Date().getTime();\n Logger.debug('Finished, processed %d rows in %s for %j (%d blank pages, %d total pages)', cnt, DurationRatchet.formatMsDuration(end - start, true), qry, blankPages, pages);\n }\n catch (err) {\n Logger.error('Failed with %s, q: %j', err, qry, err);\n }\n return cnt;\n }\n async fullyExecuteScanCount(scan, delayMS = 0) {\n try {\n scan.Select = 'COUNT';\n const rval = {\n count: 0,\n scannedCount: 0,\n pages: 0,\n };\n Logger.debug('Executing scan count : %j', scan);\n const start = new Date().getTime();\n let qryResults = null;\n const myLimit = scan.Limit;\n scan.Limit = null;\n do {\n qryResults = await this.throughputSafeScanOrQuery((o) => this.scanPromise(o), scan);\n rval.count += qryResults['Count'];\n rval.scannedCount += qryResults['ScannedCount'];\n rval.pages++;\n scan['ExclusiveStartKey'] = qryResults?.LastEvaluatedKey;\n await PromiseRatchet.wait(delayMS);\n Logger.silly('Rval is now %j', rval);\n if (myLimit && rval.count >= myLimit && scan['ExclusiveStartKey']) {\n Logger.info('Aborting scan since hit limit of %d', myLimit);\n scan['ExclusiveStartKey'] = null;\n }\n } while (scan['ExclusiveStartKey']);\n const end = new Date().getTime();\n Logger.debug('Finished, returned %j in %s for %j', rval, DurationRatchet.formatMsDuration(end - start, true), scan);\n return rval;\n }\n catch (err) {\n Logger.error('Failed with %s, q: %j', err, scan, err);\n return null;\n }\n }\n async fullyExecuteScan(scan, delayMS = 0, softLimit = null) {\n const rval = [];\n await this.fullyExecuteProcessOverScan(scan, async (v) => {\n rval.push(v);\n }, delayMS, softLimit);\n return rval;\n }\n async fullyExecuteProcessOverScan(scan, proc, delayMS = 0, softLimit = null) {\n let cnt = 0;\n try {\n Logger.debug('Executing scan : %j', scan);\n const start = new Date().getTime();\n Logger.debug('Pulling %j', scan);\n let qryResults = await this.throughputSafeScanOrQuery((o) => this.scanPromise(o), scan);\n for (let i = 0; i < qryResults.Items.length; i++) {\n await proc(qryResults.Items[i]);\n cnt++;\n }\n while (qryResults.LastEvaluatedKey && (softLimit === null || cnt < softLimit) && !scan.Limit) {\n Logger.silly('Found more rows - requery with key %j', qryResults.LastEvaluatedKey);\n scan['ExclusiveStartKey'] = qryResults.LastEvaluatedKey;\n qryResults = await this.throughputSafeScanOrQuery((o) => this.scanPromise(o), scan);\n for (let i = 0; i < qryResults.Items.length; i++) {\n await proc(qryResults.Items[i]);\n cnt++;\n }\n Logger.silly('Rval is now %d items', cnt);\n await PromiseRatchet.wait(delayMS);\n }\n const end = new Date().getTime();\n Logger.debug('Finished, processed %d results in %s for %j', cnt, DurationRatchet.formatMsDuration(end - start, true), scan);\n }\n catch (err) {\n Logger.error('Failed with %s, q: %j', err, scan, err);\n }\n return cnt;\n }\n async writeAllInBatches(tableName, elements, batchSize) {\n if (!batchSize || batchSize < 2) {\n throw new Error('Batch size needs to be at least 2, was ' + batchSize);\n }\n let rval = 0;\n if (!!elements && elements.length > 0) {\n let batchItems = [];\n elements.forEach((el) => {\n batchItems.push({\n PutRequest: {\n Item: el,\n ReturnConsumedCapacity: 'TOTAL',\n TableName: tableName,\n },\n });\n });\n Logger.debug('Processing %d batch items to %s', batchItems.length, tableName);\n while (batchItems.length > 0) {\n const curBatch = batchItems.slice(0, Math.min(batchItems.length, batchSize));\n batchItems = batchItems.slice(curBatch.length);\n const params = {\n RequestItems: {},\n ReturnConsumedCapacity: 'TOTAL',\n ReturnItemCollectionMetrics: 'SIZE',\n };\n params.RequestItems[tableName] = curBatch;\n let tryCount = 1;\n let done = false;\n let batchResults = null;\n while (!done && tryCount < 7) {\n try {\n batchResults = await this.awsDDB.send(new BatchWriteCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n Logger.info('Caught ProvisionedThroughputExceededException - retrying delete');\n batchResults = { UnprocessedItems: params.RequestItems };\n }\n else {\n throw err;\n }\n }\n if (!!batchResults &&\n !!batchResults.UnprocessedItems &&\n !!batchResults.UnprocessedItems[tableName] &&\n batchResults.UnprocessedItems[tableName].length > 0) {\n const backoff = Math.pow(2, tryCount);\n Logger.warn('Found %d unprocessed items. Backing off %d seconds and trying again', batchResults.UnprocessedItems[tableName].length, backoff);\n await PromiseRatchet.wait(backoff * 1000);\n tryCount++;\n params.RequestItems[tableName] = batchResults.UnprocessedItems[tableName];\n }\n else {\n done = true;\n }\n }\n if (!!batchResults &&\n !!batchResults.UnprocessedItems &&\n !!batchResults.UnprocessedItems[tableName] &&\n batchResults.UnprocessedItems[tableName].length > 0) {\n Logger.error('After 6 tries there were still %d unprocessed items');\n rval += curBatch.length - batchResults.UnprocessedItems[tableName].length;\n Logger.warn('FIX Unprocessed : %j', batchResults.UnprocessedItems);\n }\n else {\n rval += curBatch.length;\n }\n }\n }\n return rval;\n }\n async fetchFullObjectsMatchingKeysOnlyIndexQuery(qry, keyNames, batchSize = 25) {\n RequireRatchet.notNullOrUndefined(qry);\n RequireRatchet.notNullOrUndefined(qry.TableName);\n RequireRatchet.notNullOrUndefined(keyNames);\n RequireRatchet.true(keyNames.length > 0);\n const keyDataSrc = await this.fullyExecuteQuery(qry);\n const keysOnly = DynamoRatchet.stripAllToKeysOnly(keyDataSrc, keyNames);\n const rval = await this.fetchAllInBatches(qry.TableName, keysOnly, batchSize);\n return rval;\n }\n async fetchAllInBatches(tableName, inKeys, batchSize) {\n if (!batchSize || batchSize < 2 || batchSize > 100) {\n throw new Error('Batch size needs to be at least 2 and no more than 100, was ' + batchSize);\n }\n let rval = [];\n const batches = [];\n let remain = Object.assign([], inKeys);\n while (remain.length > 0) {\n const curBatch = remain.slice(0, Math.min(remain.length, batchSize));\n remain = remain.slice(curBatch.length);\n const tableEntry = {};\n tableEntry[tableName] = {\n Keys: curBatch,\n };\n const nextBatch = {\n RequestItems: tableEntry,\n ReturnConsumedCapacity: 'TOTAL',\n };\n batches.push(nextBatch);\n }\n Logger.debug('Created %d batches', batches.length);\n for (let i = 0; i < batches.length; i++) {\n if (batches.length > 1) {\n Logger.info('Processing batch %d of %d', i + 1, batches.length);\n }\n const input = batches[i];\n let tryCount = 1;\n do {\n Logger.silly('Pulling %j', input);\n const res = await this.awsDDB.send(new BatchGetCommand(input));\n rval = rval.concat(res.Responses[tableName]);\n if (!!res.UnprocessedKeys && !!res.UnprocessedKeys[tableName] && res.UnprocessedKeys[tableName].Keys.length > 0 && tryCount < 15) {\n Logger.silly('Found %d unprocessed, waiting', res.UnprocessedKeys[tableName].Keys);\n await PromiseRatchet.wait(Math.pow(2, tryCount) * 1000);\n tryCount++;\n }\n input.RequestItems = res.UnprocessedKeys;\n } while (!input.RequestItems && input.RequestItems[tableName].Keys.length > 0);\n }\n return rval;\n }\n async deleteAllInBatches(tableName, keys, batchSize) {\n if (!batchSize || batchSize < 2) {\n throw new Error('Batch size needs to be at least 2, was ' + batchSize);\n }\n let rval = 0;\n if (!!keys && keys.length > 0) {\n let batchItems = [];\n keys.forEach((el) => {\n batchItems.push({\n DeleteRequest: {\n Key: el,\n ReturnConsumedCapacity: 'TOTAL',\n TableName: tableName,\n },\n });\n });\n Logger.debug('Processing %d DeleteBatch items to %s', batchItems.length, tableName);\n while (batchItems.length > 0) {\n const curBatch = batchItems.slice(0, Math.min(batchItems.length, batchSize));\n batchItems = batchItems.slice(curBatch.length);\n const params = {\n RequestItems: {},\n ReturnConsumedCapacity: 'TOTAL',\n ReturnItemCollectionMetrics: 'SIZE',\n };\n params.RequestItems[tableName] = curBatch;\n let tryCount = 1;\n let done = false;\n let batchResults = null;\n while (!done && tryCount < 7) {\n try {\n batchResults = await this.awsDDB.send(new BatchWriteCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n Logger.info('Caught ProvisionedThroughputExceededException - retrying delete');\n batchResults = { UnprocessedItems: params.RequestItems };\n }\n else {\n throw err;\n }\n }\n if (!!batchResults &&\n !!batchResults.UnprocessedItems &&\n !!batchResults.UnprocessedItems[tableName] &&\n batchResults.UnprocessedItems[tableName].length > 0) {\n const backoff = Math.pow(2, tryCount);\n Logger.warn('Found %d unprocessed items. Backing off %d seconds and trying again', batchResults.UnprocessedItems[tableName].length, backoff);\n await PromiseRatchet.wait(backoff * 1000);\n tryCount++;\n params.RequestItems[tableName] = batchResults.UnprocessedItems[tableName];\n }\n else {\n done = true;\n }\n }\n if (!!batchResults &&\n !!batchResults.UnprocessedItems &&\n !!batchResults.UnprocessedItems[tableName] &&\n batchResults.UnprocessedItems[tableName].length > 0) {\n Logger.error('After 6 tries there were still %d unprocessed items');\n rval += curBatch.length - batchResults.UnprocessedItems[tableName].length;\n Logger.warn('FIX Unprocessed : %j', batchResults.UnprocessedItems);\n }\n else {\n rval += curBatch.length;\n }\n Logger.debug('%d Remain, DeleteBatch Results : %j', batchItems.length, batchResults);\n }\n }\n return rval;\n }\n async simplePut(tableName, value, autoRetryCount = 3) {\n let rval = null;\n let currentTry = 0;\n const params = {\n Item: value,\n ReturnConsumedCapacity: 'TOTAL',\n TableName: tableName,\n };\n while (!rval && currentTry < autoRetryCount) {\n try {\n rval = await this.awsDDB.send(new PutCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n const wait = Math.pow(2, currentTry) * 1000;\n Logger.debug('Exceeded write throughput for %j : Try %d of %d (Waiting %d ms)', params, currentTry, autoRetryCount, wait);\n await PromiseRatchet.wait(wait);\n currentTry++;\n }\n else {\n throw err;\n }\n }\n }\n if (!rval) {\n Logger.warn('Unable to write %j to DDB after %d tries, giving up', params, autoRetryCount);\n }\n return rval;\n }\n async simplePutOnlyIfFieldIsNullOrUndefined(tableName, value, fieldName) {\n let rval = false;\n const params = {\n Item: value,\n ReturnConsumedCapacity: 'TOTAL',\n ConditionExpression: 'attribute_not_exists(#fieldName) OR #fieldName = :null ',\n ExpressionAttributeNames: {\n '#fieldName': fieldName,\n },\n ExpressionAttributeValues: {\n ':null': null,\n },\n TableName: tableName,\n };\n try {\n const wrote = await this.awsDDB.send(new PutCommand(params));\n Logger.silly('Wrote : %j', wrote);\n rval = true;\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n Logger.debug('Exceeded write throughput for %j : (Waiting 2000 ms)', params);\n await PromiseRatchet.wait(2000);\n rval = await this.simplePutOnlyIfFieldIsNullOrUndefined(tableName, value, fieldName);\n }\n else if (err && err['code'] && err['code'] === 'ConditionalCheckFailedException') {\n Logger.debug('Failed to write %j due to null field failure');\n rval = false;\n }\n else {\n throw err;\n }\n }\n return rval;\n }\n async simplePutWithCollisionAvoidance(tableName, value, keyNames, adjustFunction, maxAdjusts = null, autoRetryCount = 3) {\n RequireRatchet.true(keyNames && keyNames.length > 0 && keyNames.length < 3, 'You must pass 1 or 2 key names');\n let pio = null;\n let currentTry = 0;\n const attrNames = {\n '#key0': keyNames[0],\n };\n const attrValues = {\n ':key0': value[keyNames[0]],\n };\n let condExp = '#key0 <> :key0';\n if (keyNames.length > 1) {\n condExp += ' AND #key1 <> :key1';\n attrNames['#key1'] = keyNames[1];\n attrValues[':key1'] = value[keyNames[1]];\n }\n const params = {\n Item: value,\n ReturnConsumedCapacity: 'TOTAL',\n ConditionExpression: condExp,\n ExpressionAttributeNames: attrNames,\n ExpressionAttributeValues: attrValues,\n TableName: tableName,\n };\n let adjustCount = 0;\n while (!pio && currentTry < autoRetryCount && (!maxAdjusts || adjustCount < maxAdjusts)) {\n try {\n pio = await this.awsDDB.send(new PutCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n currentTry++;\n const wait = Math.pow(2, currentTry) * 1000;\n Logger.debug('Exceeded write throughput for %j : Try %d of %d (Waiting %d ms)', params, currentTry, autoRetryCount, wait);\n await PromiseRatchet.wait(wait);\n }\n else if (err && err['code'] && err['code'] === 'ConditionalCheckFailedException') {\n let newValue = Object.assign({}, params.Item);\n Logger.info('Failed to write %j due to collision - adjusting and retrying', newValue);\n newValue = adjustFunction(newValue);\n params.Item = newValue;\n params.ExpressionAttributeValues[':key0'] = newValue[keyNames[0]];\n if (keyNames.length > 1) {\n params.ExpressionAttributeValues[':key1'] = newValue[keyNames[1]];\n }\n adjustCount++;\n }\n else {\n throw err;\n }\n }\n }\n if (pio && adjustCount > 0) {\n Logger.info('After adjustment, wrote %j as %j', value, params.Item);\n }\n if (!pio) {\n Logger.warn('Unable to write %j to DDB after %d provision tries and %d adjusts, giving up', params, currentTry, adjustCount);\n }\n return pio ? params.Item : null;\n }\n async simpleGet(tableName, keys, autoRetryCount = 3) {\n let holder = null;\n let currentTry = 0;\n const params = {\n TableName: tableName,\n Key: keys,\n };\n while (!holder && currentTry < autoRetryCount) {\n try {\n holder = await this.awsDDB.send(new GetCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n const wait = Math.pow(2, currentTry) * 1000;\n Logger.debug('Exceeded read throughput for %j : Try %d of %d (Waiting %d ms)', params, currentTry, autoRetryCount, wait);\n await PromiseRatchet.wait(wait);\n currentTry++;\n }\n else {\n throw err;\n }\n }\n }\n if (!holder) {\n Logger.warn('Unable to read %j from DDB after %d tries, giving up', params, autoRetryCount);\n }\n const rval = !!holder && !!holder.Item ? Object.assign({}, holder.Item) : null;\n return rval;\n }\n static objectIsErrorWithProvisionedThroughputExceededExceptionCode(err) {\n return !!err && !!err['code'] && err['code'] === 'ProvisionedThroughputExceededException';\n }\n async simpleGetWithCounterDecrement(tableName, keys, counterAttributeName, deleteOnZero, autoRetryCount = 3) {\n let holder = null;\n let currentTry = 0;\n const params = {\n TableName: tableName,\n Key: keys,\n UpdateExpression: 'set #counter = #counter-:decVal',\n ExpressionAttributeNames: {\n '#counter': counterAttributeName,\n },\n ExpressionAttributeValues: {\n ':decVal': 1,\n ':minVal': 0,\n },\n ConditionExpression: '#counter > :minVal',\n ReturnValues: 'ALL_NEW',\n };\n let updateFailed = false;\n while (!holder && currentTry < autoRetryCount && !updateFailed) {\n try {\n holder = await this.awsDDB.send(new UpdateItemCommand(params));\n }\n catch (err) {\n if (DynamoRatchet.objectIsErrorWithProvisionedThroughputExceededExceptionCode(err)) {\n const wait = Math.pow(2, currentTry) * 1000;\n Logger.debug('Exceeded update throughput for %j : Try %d of %d (Waiting %d ms)', params, currentTry, autoRetryCount, wait);\n await PromiseRatchet.wait(wait);\n currentTry++;\n }\n else if (!!err && !!err['code'] && err['code'] === 'ConditionalCheckFailedException') {\n Logger.info('Cannot fetch requested row (%j) - the update check failed', keys);\n updateFailed = true;\n }\n else {\n throw err;\n }\n }\n }\n if (!holder && !updateFailed) {\n Logger.warn('Unable to update %j from DDB after %d tries, giving up', params, autoRetryCount);\n }\n const rval = !!holder && !!holder.Attributes ? Object.assign({}, holder.Attributes) : null;\n if (deleteOnZero && rval && rval[counterAttributeName] === 0) {\n Logger.info('Delete on 0 specified, removing');\n await this.simpleDelete(tableName, keys);\n }\n return rval;\n }\n async simpleDelete(tableName, keys) {\n const params = {\n TableName: tableName,\n Key: keys,\n };\n const holder = await this.awsDDB.send(new DeleteCommand(params));\n return holder;\n }\n async atomicCounter(tableName, keys, counterFieldName, increment = 1) {\n const update = {\n TableName: tableName,\n Key: keys,\n UpdateExpression: 'SET #counterFieldName = #counterFieldName + :inc',\n ExpressionAttributeNames: {\n '#counterFieldName': counterFieldName,\n },\n ExpressionAttributeValues: {\n ':inc': increment,\n },\n ReturnValues: 'UPDATED_NEW',\n };\n const ui = await this.awsDDB.send(new UpdateItemCommand(update));\n const rval = NumberRatchet.safeNumber(ui.Attributes[counterFieldName]);\n return rval;\n }\n static cleanObject(ob) {\n if (!!ob) {\n const rem = [];\n Object.keys(ob).forEach((k) => {\n const v = ob[k];\n if (v === '') {\n rem.push(k);\n }\n else if (v instanceof Object) {\n DynamoRatchet.cleanObject(v);\n }\n });\n Logger.silly('Removing keys : %j', rem);\n rem.forEach((k) => {\n delete ob[k];\n });\n }\n }\n static stripToKeysOnly(input, keysNames) {\n let rval = null;\n if (!!input && !!keysNames && keysNames.length > 0) {\n rval = {};\n keysNames.forEach((k) => {\n if (!input[k]) {\n ErrorRatchet.throwFormattedErr('Failed key extraction on %j - missing %s', input, k);\n }\n rval[k] = input[k];\n });\n }\n return rval;\n }\n static stripAllToKeysOnly(input, keys) {\n const rval = input.map((i) => DynamoRatchet.stripToKeysOnly(i, keys));\n return rval;\n }\n}\n//# sourceMappingURL=dynamo-ratchet.js.map","import { CreateTableCommand, DeleteTableCommand, DescribeTableCommand, ListTablesCommand, ResourceNotFoundException, } from '@aws-sdk/client-dynamodb';\nimport { ErrorRatchet, Logger, PromiseRatchet, RequireRatchet } from '@bitblit/ratchet-common';\nexport class DynamoTableRatchet {\n awsDDB;\n constructor(awsDDB) {\n this.awsDDB = awsDDB;\n if (!awsDDB) {\n throw 'awsDDB may not be null';\n }\n }\n async deleteTable(tableName, waitForDelete = true) {\n RequireRatchet.notNullOrUndefined(tableName);\n const input = {\n TableName: tableName,\n };\n Logger.debug('Deleting ddb table %s', tableName);\n const rval = await this.awsDDB.send(new DeleteTableCommand(input));\n if (waitForDelete) {\n Logger.debug('Table marked for delete, waiting for deletion');\n await this.waitForTableDelete(tableName);\n }\n return rval;\n }\n async createTable(input, waitForReady = true, replaceIfExists = false) {\n RequireRatchet.notNullOrUndefined(input);\n RequireRatchet.notNullOrUndefined(input.TableName);\n Logger.debug('Creating new table : %j', input);\n const exists = await this.tableExists(input.TableName);\n if (exists) {\n if (replaceIfExists) {\n Logger.debug('Table %s exists and replace specified - deleting', input.TableName);\n await this.deleteTable(input.TableName);\n }\n else {\n ErrorRatchet.throwFormattedErr('Cannot create table %s - exists already and replace not specified', input.TableName);\n }\n }\n const rval = await this.awsDDB.send(new CreateTableCommand(input));\n if (waitForReady) {\n Logger.debug('Table created, awaiting ready');\n await this.waitForTableReady(input.TableName);\n }\n return rval;\n }\n async waitForTableReady(tableName) {\n let rval = true;\n let out = await this.safeDescribeTable(tableName);\n while (!!out && !!out.Table && out.Table.TableStatus !== 'ACTIVE') {\n Logger.silly('Table not ready - waiting 2 seconds');\n await PromiseRatchet.wait(2000);\n out = await this.safeDescribeTable(tableName);\n }\n if (!out && !out.Table) {\n Logger.warn('Cannot wait for %s to be ready - table does not exist', tableName);\n rval = false;\n }\n return rval;\n }\n async waitForTableDelete(tableName) {\n let out = await this.safeDescribeTable(tableName);\n while (!!out) {\n Logger.silly('Table %s still exists, waiting 2 seconds (State is %s)', tableName, out.Table.TableStatus);\n await PromiseRatchet.wait(2000);\n out = await this.safeDescribeTable(tableName);\n }\n }\n async tableExists(tableName) {\n const desc = await this.safeDescribeTable(tableName);\n return !!desc;\n }\n async listAllTables() {\n const input = {};\n let rval = [];\n do {\n const out = await this.awsDDB.send(new ListTablesCommand(input));\n rval = rval.concat(out.TableNames);\n input.ExclusiveStartTableName = out.LastEvaluatedTableName;\n } while (input.ExclusiveStartTableName);\n return rval;\n }\n async safeDescribeTable(tableName) {\n try {\n const out = await this.awsDDB.send(new DescribeTableCommand({ TableName: tableName }));\n return out;\n }\n catch (err) {\n if (err instanceof ResourceNotFoundException) {\n return null;\n }\n else {\n throw err;\n }\n }\n }\n async copyTable(srcTableName, dstTableName, overrides, copyData) {\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(srcTableName, 'srcTableName');\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(dstTableName, 'dstTableName');\n if (copyData) {\n throw ErrorRatchet.fErr('Cannot copy %s to %s - copy data not supported yet', srcTableName, dstTableName);\n }\n const srcTableDef = await this.safeDescribeTable(srcTableName);\n if (await this.tableExists(dstTableName)) {\n throw ErrorRatchet.fErr('Cannot copy to %s - table already exists', dstTableName);\n }\n if (!srcTableDef) {\n throw ErrorRatchet.fErr('Cannot copy %s - doesnt exist', srcTableName);\n }\n const ads = srcTableDef.Table.AttributeDefinitions;\n const ks = srcTableDef.Table.KeySchema;\n const gi = srcTableDef.Table.GlobalSecondaryIndexes;\n const createInput = Object.assign({}, overrides || {}, {\n AttributeDefinitions: srcTableDef.Table.AttributeDefinitions,\n TableName: dstTableName,\n KeySchema: srcTableDef.Table.KeySchema,\n LocalSecondaryIndexes: srcTableDef.Table.LocalSecondaryIndexes,\n GlobalSecondaryIndexes: srcTableDef.Table.GlobalSecondaryIndexes.map((gi) => {\n const output = gi;\n if (output.ProvisionedThroughput?.WriteCapacityUnits === 0 || output.ProvisionedThroughput?.ReadCapacityUnits === 0) {\n output.ProvisionedThroughput = undefined;\n }\n return output;\n }),\n BillingMode: srcTableDef.Table.BillingModeSummary.BillingMode,\n ProvisionedThroughput: srcTableDef.Table.BillingModeSummary.BillingMode === 'PROVISIONED'\n ? srcTableDef.Table.ProvisionedThroughput\n : undefined,\n StreamSpecification: srcTableDef.Table.StreamSpecification,\n SSESpecification: srcTableDef.Table.SSEDescription,\n Tags: undefined,\n TableClass: srcTableDef.Table.TableClassSummary?.TableClass,\n DeletionProtectionEnabled: srcTableDef.Table.DeletionProtectionEnabled,\n });\n const rval = await this.awsDDB.send(new CreateTableCommand(createInput));\n return rval;\n }\n}\n//# sourceMappingURL=dynamo-table-ratchet.js.map","import { ErrorRatchet, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class HashSpreader {\n spots;\n buckets;\n separator;\n alphabet;\n _allSlots;\n constructor(spots = 3, buckets = 16, separator = '_', alphabet = '0123456789ABCDEF') {\n this.spots = spots;\n this.buckets = buckets;\n this.separator = separator;\n this.alphabet = alphabet;\n RequireRatchet.true(spots > 0, 'Spots must be larger than 0');\n RequireRatchet.true(buckets > 1, 'Buckets must be larger than 1');\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(alphabet), 'Alphabet may not be null or empty');\n RequireRatchet.true(StringRatchet.allUnique(alphabet), 'Alphabet must be unique');\n RequireRatchet.true(StringRatchet.stringContainsOnlyAlphanumeric(alphabet), 'Alphabet must be alphanumeric');\n const permutations = Math.pow(alphabet.length, spots);\n RequireRatchet.true(buckets < permutations, 'Buckets must be less than permutations (' + buckets + ' / ' + permutations + ')');\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(this.separator), 'Separator must be nonnull and nonempty');\n const allPerms = StringRatchet.allPermutationsOfLength(spots, alphabet);\n this._allSlots = allPerms.slice(0, buckets);\n }\n get allBuckets() {\n return Object.assign([], this._allSlots);\n }\n get randomBucket() {\n return this._allSlots[Math.floor(Math.random() * this.buckets)];\n }\n allSpreadValues(input) {\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(input), 'Cannot spread null/empty value');\n const rval = this._allSlots.map((s) => input + this.separator + s);\n return rval;\n }\n allSpreadValuesForArray(inputs) {\n RequireRatchet.true(inputs && inputs.length > 0, 'Cannot spread null/empty array');\n let rval = [];\n inputs.forEach((i) => {\n rval = rval.concat(this.allSpreadValues(i));\n });\n return rval;\n }\n addSpreader(input) {\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(input), 'Cannot spread null/empty value');\n return input + this.separator + this.randomBucket;\n }\n extractBucket(input) {\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(input), 'Cannot extract from null or empty value');\n const loc = input.length - this.spots;\n if (loc < 0 || input.charAt(loc) !== this.separator) {\n ErrorRatchet.throwFormattedErr('Cannot extract bucket, not created by this spreader (missing %s at location %d)', this.separator, loc);\n }\n return input.substring(loc);\n }\n removeBucket(input) {\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(input), 'Cannot extract from null or empty value');\n const loc = input.length - this.spots;\n if (loc < 0 || input.charAt(loc) !== this.separator) {\n ErrorRatchet.throwFormattedErr('Cannot remove bucket, not created by this spreader (missing %s at location %d)', this.separator, loc);\n }\n return input.substring(0, loc);\n }\n}\n//# sourceMappingURL=hash-spreader.js.map","import { DescribeInstancesCommand, EC2Client, StartInstancesCommand, StopInstancesCommand, } from '@aws-sdk/client-ec2';\nimport { EC2InstanceConnectClient, SendSSHPublicKeyCommand, } from '@aws-sdk/client-ec2-instance-connect';\nimport { DurationRatchet, Logger, PromiseRatchet } from '@bitblit/ratchet-common';\nexport class Ec2Ratchet {\n region;\n availabilityZone;\n ec2;\n ec2InstanceConnect;\n constructor(region = 'us-east-1', availabilityZone = 'us-east-1a') {\n this.region = region;\n this.availabilityZone = availabilityZone;\n this.ec2 = new EC2Client({ region: region });\n this.ec2InstanceConnect = new EC2InstanceConnectClient({ region: region });\n }\n get eC2Client() {\n return this.ec2;\n }\n get eC2InstanceConnectClient() {\n return this.ec2InstanceConnect;\n }\n async stopInstance(instanceId, maxWaitForShutdownMS = 0) {\n let rval = true;\n try {\n const stopParams = {\n InstanceIds: [instanceId],\n DryRun: false,\n };\n Logger.info('About to stop instances : %j', stopParams);\n await this.ec2.send(new StopInstancesCommand(stopParams));\n Logger.info('Stop instance command sent, waiting on shutdown');\n let status = await this.describeInstance(instanceId);\n if (maxWaitForShutdownMS > 0) {\n const start = new Date().getTime();\n while (!!status && status.State.Code !== 16 && new Date().getTime() - start < maxWaitForShutdownMS) {\n Logger.debug('Instance status is %j - waiting for 5 seconds (up to %s)', status.State, DurationRatchet.formatMsDuration(maxWaitForShutdownMS));\n await PromiseRatchet.wait(5000);\n status = await this.describeInstance(instanceId);\n }\n }\n }\n catch (err) {\n Logger.error('Failed to stop instance %s : %s', instanceId, err, err);\n rval = false;\n }\n return rval;\n }\n async launchInstance(instanceId, maxWaitForStartupMS = 0) {\n let rval = true;\n try {\n const startParams = {\n InstanceIds: [instanceId],\n DryRun: false,\n };\n Logger.info('About to start instance : %j', startParams);\n await this.ec2.send(new StartInstancesCommand(startParams));\n Logger.info('Start instance command sent, waiting on startup');\n let status = await this.describeInstance(instanceId);\n if (maxWaitForStartupMS > 0) {\n const start = new Date().getTime();\n while (!!status && status.State.Code !== 16 && new Date().getTime() - start < maxWaitForStartupMS) {\n Logger.debug('Instance status is %j - waiting for 5 seconds (up to %s)', status.State, DurationRatchet.formatMsDuration(maxWaitForStartupMS));\n await PromiseRatchet.wait(5000);\n status = await this.describeInstance(instanceId);\n }\n }\n if (!!status && !!status.PublicIpAddress) {\n Logger.info('Instance address is %s', status.PublicIpAddress);\n Logger.info('SSH command : ssh -i path_to_pem_file ec2-user@%s', status.PublicIpAddress);\n }\n }\n catch (err) {\n Logger.error('Failed to start instance %s : %s', instanceId, err, err);\n rval = false;\n }\n return rval;\n }\n async describeInstance(instanceId) {\n const res = await this.listAllInstances([instanceId]);\n return res.length === 1 ? res[0] : null;\n }\n async listAllInstances(instanceIds = []) {\n let rval = [];\n const req = {\n NextToken: null,\n };\n if (instanceIds && instanceIds.length > 0) {\n req.InstanceIds = instanceIds;\n }\n do {\n Logger.debug('Pulling instances... (%j)', req);\n const res = await this.ec2.send(new DescribeInstancesCommand(req));\n res.Reservations.forEach((r) => {\n rval = rval.concat(r.Instances);\n });\n req.NextToken = res.NextToken;\n } while (req.NextToken);\n Logger.debug('Finished pulling instances (found %d)', rval.length);\n return rval;\n }\n async sendPublicKeyToEc2Instance(instanceId, publicKeyString, instanceOsUser) {\n const userName = instanceOsUser || 'ec2-user';\n const req = {\n InstanceId: instanceId,\n AvailabilityZone: this.availabilityZone,\n InstanceOSUser: userName,\n SSHPublicKey: publicKeyString,\n };\n const rval = await this.ec2InstanceConnect.send(new SendSSHPublicKeyCommand(req));\n return rval;\n }\n}\n//# sourceMappingURL=ec2-ratchet.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class CascadeEnvironmentServiceProvider {\n providers;\n constructor(providers) {\n this.providers = providers;\n RequireRatchet.notNullOrUndefined(providers);\n RequireRatchet.true(providers.length > 0);\n }\n async fetchConfig(name) {\n Logger.silly('CascadeEnvironmentServiceProvider fetch for %s', name);\n let rval = null;\n for (let i = 0; i < this.providers.length && !rval; i++) {\n try {\n rval = await this.providers[i].fetchConfig(name);\n }\n catch (err) {\n Logger.error('Provider %d failed - trying next : %s', i, err, err);\n rval = null;\n }\n }\n return rval;\n }\n}\n//# sourceMappingURL=cascade-environment-service-provider.js.map","import { ErrorRatchet, Logger, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class EnvVarEnvironmentServiceProvider {\n envVarName;\n constructor(envVarName) {\n this.envVarName = envVarName;\n RequireRatchet.notNullOrUndefined(envVarName);\n }\n async fetchConfig() {\n Logger.silly('EnvVarEnvironmentServiceProvider fetch for %s', this.envVarName);\n let rval = null;\n const src = process ? process.env : global ? global : {};\n const toParse = StringRatchet.trimToNull(src[this.envVarName]);\n if (toParse) {\n try {\n rval = JSON.parse(toParse);\n }\n catch (err) {\n Logger.error('Failed to read env - null or invalid JSON : %s : %s', err, toParse, err);\n throw err;\n }\n }\n else {\n ErrorRatchet.throwFormattedErr('Could not find env var with name : %s', this.envVarName);\n }\n return rval;\n }\n}\n//# sourceMappingURL=env-var-environment-service-provider.js.map","import { ErrorRatchet, Logger, PromiseRatchet, RequireRatchet } from '@bitblit/ratchet-common';\nexport class EnvironmentService {\n provider;\n cfg;\n readPromiseCache = new Map();\n static defaultEnvironmentServiceConfig() {\n const rval = {\n maxRetries: 3,\n backoffMultiplierMS: 500,\n };\n return rval;\n }\n constructor(provider, cfg = EnvironmentService.defaultEnvironmentServiceConfig()) {\n this.provider = provider;\n this.cfg = cfg;\n RequireRatchet.notNullOrUndefined(provider);\n RequireRatchet.notNullOrUndefined(cfg);\n }\n async getConfig(name) {\n Logger.silly('EnvService:Request to read config %s', name);\n if (!this.readPromiseCache.has(name)) {\n Logger.silly('EnvService: Nothing in cache - adding');\n this.readPromiseCache.set(name, this.getConfigUncached(name));\n }\n return this.readPromiseCache.get(name);\n }\n async getConfigUncached(name) {\n let tryCount = 1;\n let rval = null;\n while (!rval && tryCount < this.cfg.maxRetries) {\n tryCount++;\n Logger.silly('Attempting fetch of %s', name);\n try {\n rval = await this.provider.fetchConfig(name);\n }\n catch (err) {\n const waitMS = tryCount * this.cfg.backoffMultiplierMS;\n Logger.info('Error attempting to fetch config %s (try %d of %d, waiting %s MS): %s', name, tryCount, this.cfg.maxRetries, waitMS, err, err);\n await PromiseRatchet.wait(waitMS);\n }\n }\n if (!rval) {\n ErrorRatchet.throwFormattedErr('Was unable to fetch config %s even after %d retries', name, this.cfg.maxRetries);\n }\n return rval;\n }\n}\n//# sourceMappingURL=environment-service.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class FixedEnvironmentServiceProvider {\n value;\n constructor(value) {\n this.value = value;\n RequireRatchet.notNullOrUndefined(value);\n }\n static fromRecord(record) {\n const m = new Map();\n Object.keys(record).forEach((k) => {\n m.set(k, record[k]);\n });\n return new FixedEnvironmentServiceProvider(m);\n }\n async fetchConfig(name) {\n Logger.silly('FixedEnvironmentServiceProvider fetch for %s', name);\n const rval = this.value.get(name);\n return rval;\n }\n}\n//# sourceMappingURL=fixed-environment-service-provider.js.map","import { S3CacheRatchet } from '../s3/s3-cache-ratchet.js';\nimport { Logger, RequireRatchet, StopWatch, StringRatchet } from '@bitblit/ratchet-common';\nimport { S3Client } from '@aws-sdk/client-s3';\nexport class S3EnvironmentServiceProvider {\n cfg;\n ratchet;\n constructor(cfg) {\n this.cfg = cfg;\n RequireRatchet.notNullOrUndefined(cfg);\n RequireRatchet.notNullOrUndefined(cfg.bucketName);\n RequireRatchet.notNullOrUndefined(cfg.region);\n RequireRatchet.true(!!cfg.s3Override || !!cfg.region, 'You must set either region or S3Override');\n const s3 = cfg.s3Override || new S3Client({ region: cfg.region });\n this.ratchet = new S3CacheRatchet(s3, cfg.bucketName);\n }\n async fetchConfig(name) {\n const readPath = StringRatchet.trimToEmpty(this.cfg.pathPrefix) + name + StringRatchet.trimToEmpty(this.cfg.pathSuffix);\n Logger.silly('S3EnvironmentServiceProvider:Request to read config from : %s / %s', this.cfg.bucketName, readPath);\n const sw = new StopWatch();\n const rval = await this.ratchet.fetchCacheFileAsObject(readPath);\n sw.log();\n return rval;\n }\n}\n//# sourceMappingURL=s3-environment-service-provider.js.map","import { ErrorRatchet, Logger, PromiseRatchet, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { GetParameterCommand, SSMClient } from '@aws-sdk/client-ssm';\nexport class SsmEnvironmentServiceProvider {\n region;\n ssmEncrypted;\n ssm;\n constructor(region = 'us-east-1', ssmEncrypted = true) {\n this.region = region;\n this.ssmEncrypted = ssmEncrypted;\n RequireRatchet.notNullOrUndefined(region);\n RequireRatchet.notNullOrUndefined(ssmEncrypted);\n this.ssm = new SSMClient({ region: this.region });\n }\n async fetchConfig(name) {\n Logger.silly('SsmEnvironmentServiceProvider fetch for %s', name);\n const params = {\n Name: name,\n WithDecryption: this.ssmEncrypted,\n };\n let rval = null;\n let toParse = null;\n try {\n const value = await this.ssm.send(new GetParameterCommand(params));\n toParse = StringRatchet.trimToNull(value?.Parameter?.Value);\n }\n catch (err) {\n const errCode = err['code'] || '';\n if (errCode.toLowerCase().indexOf('throttlingexception') !== -1) {\n Logger.warn('Throttled while trying to read parameters - waiting 1 second before allowing retry');\n await PromiseRatchet.wait(1_000);\n }\n else if (errCode.toLowerCase().indexOf('parameternotfound') !== -1) {\n const errMsg = Logger.warn('AWS could not find parameter %s - are you using the right AWS key?', name);\n throw new Error(errMsg);\n }\n else {\n Logger.error('Final environment fetch error (cannot retry) : %s', err, err);\n throw err;\n }\n }\n if (toParse) {\n try {\n rval = JSON.parse(toParse);\n }\n catch (err) {\n Logger.error('Failed to read env - null or invalid JSON : %s : %s', err, toParse, err);\n throw err;\n }\n }\n else {\n ErrorRatchet.throwFormattedErr('Could not find system parameter with name : %s in this account', name);\n }\n return rval;\n }\n}\n//# sourceMappingURL=ssm-environment-service-provider.js.map","export class DynamoExpiringCodeProvider {\n tableName;\n dynamoRatchet;\n constructor(tableName, dynamoRatchet) {\n this.tableName = tableName;\n this.dynamoRatchet = dynamoRatchet;\n }\n async checkCode(code, context, deleteOnMatch) {\n const keys = { code: code, context: context };\n const expCode = await this.dynamoRatchet.simpleGet(this.tableName, keys);\n const rval = expCode && expCode.expiresEpochMS > Date.now();\n if (rval && deleteOnMatch) {\n await this.dynamoRatchet.simpleDelete(this.tableName, keys);\n }\n return rval;\n }\n async storeCode(code) {\n const output = await this.dynamoRatchet.simplePut(this.tableName, code);\n return output && output.ConsumedCapacity.CapacityUnits > 0;\n }\n async createTableIfMissing(dtr) {\n return null;\n }\n}\n//# sourceMappingURL=dynamo-expiring-code-provider.js.map","import { RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class ExpiringCodeRatchet {\n provider;\n constructor(provider) {\n this.provider = provider;\n }\n static generateCode(params) {\n RequireRatchet.notNullOrUndefined(params, 'params');\n RequireRatchet.notNullOrUndefined(params.context, 'params.context');\n RequireRatchet.notNullOrUndefined(params.length, 'params.length');\n RequireRatchet.notNullOrUndefined(params.alphabet, 'params.alphabet');\n let code = '';\n for (let i = 0; i < params.length; i++) {\n code += params.alphabet.charAt(Math.floor(params.alphabet.length * Math.random()));\n }\n const rval = {\n code: code,\n context: params.context,\n tags: params.tags,\n expiresEpochMS: Date.now() + params.timeToLiveSeconds * 1000,\n };\n return rval;\n }\n async createNewCode(params) {\n const value = ExpiringCodeRatchet.generateCode(params);\n const rval = await this.provider.storeCode(value);\n return rval ? value : null;\n }\n async checkCode(code, context, deleteOnMatch) {\n const rval = await this.provider.checkCode(StringRatchet.trimToEmpty(code), StringRatchet.trimToEmpty(context), deleteOnMatch);\n return rval;\n }\n}\n//# sourceMappingURL=expiring-code-ratchet.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class S3ExpiringCodeProvider {\n s3CacheRatchet;\n keyName;\n constructor(s3CacheRatchet, keyName) {\n this.s3CacheRatchet = s3CacheRatchet;\n this.keyName = keyName;\n RequireRatchet.notNullOrUndefined(s3CacheRatchet, 's3CacheRatchet');\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(s3CacheRatchet.getDefaultBucket(), 's3CacheRatchet.defaultBucket');\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(keyName, 'keyName');\n }\n async fetchFile() {\n const rval = (await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyName)) || {\n data: [],\n lastModifiedEpochMS: Date.now(),\n };\n return rval;\n }\n async updateFile(vals) {\n const next = {\n data: vals || [],\n lastModifiedEpochMS: Date.now(),\n };\n next.data = next.data.filter((d) => d.expiresEpochMS > Date.now());\n Logger.info('Updating code file to %s codes', next.data.length);\n const rval = await this.s3CacheRatchet.writeObjectToCacheFile(this.keyName, next);\n return rval;\n }\n async checkCode(code, context, deleteOnMatch) {\n const val = await this.fetchFile();\n const rval = val.data.find((d) => d?.code?.toUpperCase() === code?.toUpperCase() && d?.context?.toUpperCase() === context?.toUpperCase());\n if (rval) {\n if (deleteOnMatch || rval.expiresEpochMS < Date.now()) {\n Logger.info('Stripping used/expired code from the database');\n const newData = val.data.filter((d) => d != rval);\n await this.updateFile(newData);\n }\n }\n return !!rval && rval.expiresEpochMS > Date.now();\n }\n async storeCode(code) {\n const old = await this.fetchFile();\n old.data.push(code);\n const wrote = await this.updateFile(old.data);\n return !!wrote;\n }\n}\n//# sourceMappingURL=s3-expiring-code-provider.js.map","import { ErrorRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class AwsCredentialsRatchet {\n constructor() { }\n static applySetProfileEnvironmentalVariable(newProfile) {\n if (!!process.env) {\n if (StringRatchet.trimToNull(newProfile)) {\n process.env['AWS_PROFILE'] = newProfile;\n }\n else {\n ErrorRatchet.throwFormattedErr('Cannot set profile to null/empty string');\n }\n }\n else {\n ErrorRatchet.throwFormattedErr('Cannot set profile - not in a node environment - process missing');\n }\n }\n}\n//# sourceMappingURL=aws-credentials-ratchet.js.map","export class LambdaEventDetector {\n static isValidCronEvent(event) {\n return event && event.source == 'aws.events' && event.resources && event.resources.length > 0;\n }\n static isValidSnsEvent(event) {\n return event && event.Records && event.Records.length > 0 && event.Records[0].EventSource == 'aws:sns';\n }\n static isValidDynamoDBEvent(event) {\n return event && event.Records && event.Records.length > 0 && event.Records[0].eventSource == 'aws:dynamodb';\n }\n static isValidS3Event(event) {\n return event && event.Records && event.Records.length > 0 && event.Records[0].eventSource == 'aws:s3';\n }\n static isValidApiGatewayV2WithRequestContextEvent(event) {\n return event && event.rawPath && event.requestContext && event.routeKey;\n }\n static isValidApiGatewayEvent(event) {\n return event && event.httpMethod && event.path && event.requestContext;\n }\n static isValidApiGatewayAuthorizerEvent(event) {\n return event && event.authorizationToken && event.methodArn;\n }\n static isSingleCronEvent(event) {\n return this.isValidCronEvent(event) && LambdaEventDetector.isSingleEntryEvent(event, 'resources');\n }\n static isSingleSnsEvent(event) {\n return this.isValidSnsEvent(event) && LambdaEventDetector.isSingleEntryEvent(event);\n }\n static isSingleDynamoDBEvent(event) {\n return this.isValidDynamoDBEvent(event) && LambdaEventDetector.isSingleEntryEvent(event);\n }\n static isSingleS3Event(event) {\n return this.isValidS3Event(event) && LambdaEventDetector.isSingleEntryEvent(event);\n }\n static isSingleEntryEvent(event, entryName = 'Records') {\n return event && event[entryName] && event[entryName] instanceof Array && event[entryName].length === 1;\n }\n}\n//# sourceMappingURL=lambda-event-detector.js.map","import { LambdaEventDetector } from './lambda-event-detector.js';\nexport class LambdaEventTypeGuards {\n static isValidCronEvent(event) {\n return LambdaEventDetector.isValidCronEvent(event);\n }\n static isValidSnsEvent(event) {\n return LambdaEventDetector.isValidSnsEvent(event);\n }\n static isValidDynamoDBEvent(event) {\n return LambdaEventDetector.isValidDynamoDBEvent(event);\n }\n static isValidS3Event(event) {\n return LambdaEventDetector.isValidS3Event(event);\n }\n static isValidApiGatewayV2WithRequestContextEvent(event) {\n return LambdaEventDetector.isValidApiGatewayV2WithRequestContextEvent(event);\n }\n static isValidApiGatewayEvent(event) {\n return LambdaEventDetector.isValidApiGatewayEvent(event);\n }\n static isValidApiGatewayAuthorizerEvent(event) {\n return LambdaEventDetector.isValidApiGatewayAuthorizerEvent(event);\n }\n}\n//# sourceMappingURL=lambda-event-type-guards.js.map","import { Logger } from '@bitblit/ratchet-common';\nimport { ChangeResourceRecordSetsCommand, waitUntilResourceRecordSetsChanged, } from '@aws-sdk/client-route-53';\nimport { WaiterState } from '@smithy/util-waiter';\nexport class Route53Ratchet {\n route53;\n hostedZoneId;\n constructor(route53, hostedZoneId) {\n this.route53 = route53;\n this.hostedZoneId = hostedZoneId;\n if (!this.route53) {\n throw 'route53 may not be null';\n }\n }\n get route53Client() {\n return this.route53;\n }\n async changeCnameRecordTarget(domainName, target, hostedZoneId = this.hostedZoneId, ttlSeconds = 600) {\n Logger.info('Updating %s to point to %s', domainName, target);\n try {\n const params = {\n ChangeBatch: {\n Changes: [\n {\n Action: 'UPSERT',\n ResourceRecordSet: {\n Name: domainName,\n ResourceRecords: [\n {\n Value: target,\n },\n ],\n TTL: ttlSeconds,\n Type: 'CNAME',\n },\n },\n ],\n },\n HostedZoneId: hostedZoneId,\n };\n const result = await this.route53.send(new ChangeResourceRecordSetsCommand(params));\n Logger.debug('Updated domain result: %j', result);\n const waitParams = {\n Id: result.ChangeInfo.Id,\n };\n const waitResult = await waitUntilResourceRecordSetsChanged({ client: this.route53, maxWaitTime: 300 }, waitParams);\n Logger.debug('Wait responsed: %j', waitResult);\n if (waitResult.state === WaiterState.SUCCESS) {\n Logger.info('Updated %s to point to %s', domainName, hostedZoneId);\n return true;\n }\n }\n catch (err) {\n Logger.warn('Error update CName for %s with value %s: %j', domainName, target, err);\n }\n Logger.info('Cannot update %s to point to %s', domainName, target);\n return false;\n }\n}\n//# sourceMappingURL=route-53-ratchet.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class DynamoRuntimeParameterProvider {\n dynamo;\n tableName;\n constructor(dynamo, tableName) {\n this.dynamo = dynamo;\n this.tableName = tableName;\n RequireRatchet.notNullOrUndefined(this.dynamo);\n RequireRatchet.notNullOrUndefined(this.tableName);\n }\n async readParameter(groupId, paramKey) {\n Logger.silly('Reading %s / %s from underlying db', groupId, paramKey);\n const req = {\n groupId: groupId,\n paramKey: paramKey,\n };\n const rval = await this.dynamo.simpleGet(this.tableName, req);\n return rval;\n }\n async readAllParametersForGroup(groupId) {\n const qry = {\n TableName: this.tableName,\n KeyConditionExpression: 'groupId = :groupId',\n ExpressionAttributeValues: {\n ':groupId': groupId,\n },\n };\n const all = await this.dynamo.fullyExecuteQuery(qry);\n return all;\n }\n async writeParameter(toStore) {\n const rval = await this.dynamo.simplePut(this.tableName, toStore);\n return !!rval;\n }\n}\n//# sourceMappingURL=dynamo-runtime-parameter-provider.js.map","import { ErrorRatchet, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nexport class GlobalVariableOverrideRuntimeParameterProvider {\n wrapped;\n options = {\n globalTTL: 1,\n separator: '.',\n prefix: 'RuntimeEnv-',\n suffix: '',\n };\n constructor(wrapped, opts) {\n this.wrapped = wrapped;\n RequireRatchet.notNullOrUndefined(this.wrapped, 'wrapped');\n RequireRatchet.notNullOrUndefined(global?.process?.env, '\"process\" not found - this only runs in Node, not the browser');\n if (opts) {\n this.options = opts;\n }\n RequireRatchet.notNullOrUndefined(this.options.globalTTL, 'this.options.globalTTL');\n RequireRatchet.notNullOrUndefined(this.options.separator, 'this.options.separator');\n RequireRatchet.true(this.options.globalTTL > 0, 'this.options.globalTTL must be larger than 0');\n }\n generateName(groupId, paramKey) {\n return (StringRatchet.trimToEmpty(this.options.prefix) +\n groupId +\n StringRatchet.trimToEmpty(this.options.separator) +\n paramKey +\n StringRatchet.trimToEmpty(this.options.suffix));\n }\n async readParameter(groupId, paramKey) {\n const asString = StringRatchet.trimToNull(process.env[this.generateName(groupId, paramKey)]);\n if (asString && !StringRatchet.canParseAsJson(asString)) {\n ErrorRatchet.throwFormattedErr('Cannot parse ENV override (%s / %s) as JSON - did you forget the quotes on a string?', groupId, paramKey);\n }\n const rval = asString\n ? {\n groupId: groupId,\n paramKey: paramKey,\n paramValue: asString,\n ttlSeconds: this.options.globalTTL,\n }\n : await this.wrapped.readParameter(groupId, paramKey);\n return rval;\n }\n async readAllParametersForGroup(groupId) {\n return this.wrapped.readAllParametersForGroup(groupId);\n }\n async writeParameter(toStore) {\n return this.wrapped.writeParameter(toStore);\n }\n}\n//# sourceMappingURL=global-variable-override-runtime-parameter-provider.js.map","import { Logger } from '@bitblit/ratchet-common';\nexport class MemoryRuntimeParameterProvider {\n data;\n constructor(data = Promise.resolve({})) {\n this.data = data;\n }\n async readParameter(groupId, paramKey) {\n Logger.silly('Reading %s / %s from underlying db', groupId, paramKey);\n const d = await this.data;\n return d[groupId + '::' + paramKey];\n }\n async readAllParametersForGroup(groupId) {\n const d = await this.data;\n const out = [];\n Object.keys(d).forEach((k) => {\n if (k.startsWith(groupId)) {\n out.push(d[k]);\n }\n });\n return out;\n }\n async writeParameter(toStore) {\n const d = await this.data;\n d[toStore.groupId + '::' + toStore.paramKey] = toStore;\n return true;\n }\n}\n//# sourceMappingURL=memory-runtime-parameter-provider.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nexport class RuntimeParameterRatchet {\n provider;\n cache = new Map();\n constructor(provider) {\n this.provider = provider;\n RequireRatchet.notNullOrUndefined(this.provider);\n }\n async fetchParameter(groupId, paramKey, defaultValue = null, forceFreshRead = false) {\n Logger.debug('Reading parameter %s / %s / Force : %s', groupId, paramKey, forceFreshRead);\n const cached = this.cache.get(RuntimeParameterRatchet.toCacheStoreKey(groupId, paramKey));\n let rval = null;\n const now = new Date().getTime();\n if (!forceFreshRead && !!cached) {\n const oldest = !!cached.ttlSeconds ? now - cached.ttlSeconds * 1000 : 0;\n if (cached.storedEpochMS > oldest) {\n Logger.silly('Fetched %s / %s from cache', groupId, paramKey);\n rval = JSON.parse(cached.paramValue);\n }\n }\n if (!rval) {\n const temp = await this.readUnderlyingEntry(groupId, paramKey);\n if (!!temp) {\n this.addToCache(temp);\n rval = JSON.parse(temp.paramValue);\n }\n }\n rval = rval || defaultValue;\n return rval;\n }\n async fetchAllParametersForGroup(groupId) {\n const all = await this.readUnderlyingEntries(groupId);\n const rval = new Map();\n all.forEach((t) => {\n rval.set(t.paramKey, JSON.parse(t.paramValue));\n this.addToCache(t);\n });\n return rval;\n }\n async readUnderlyingEntry(groupId, paramKey) {\n return this.provider.readParameter(groupId, paramKey);\n }\n async readUnderlyingEntries(groupId) {\n return this.provider.readAllParametersForGroup(groupId);\n }\n async storeParameter(groupId, paramKey, paramValue, ttlSeconds) {\n const toStore = {\n groupId: groupId,\n paramKey: paramKey,\n paramValue: JSON.stringify(paramValue),\n ttlSeconds: ttlSeconds,\n };\n const wrote = await this.provider.writeParameter(toStore);\n return this.provider.readParameter(groupId, paramKey);\n }\n static toCacheStoreKey(groupId, paramKey) {\n return groupId + ':::' + paramKey;\n }\n addToCache(temp) {\n if (!!temp) {\n const now = new Date().getTime();\n const toStore = Object.assign({ storedEpochMS: now }, temp);\n this.cache.set(RuntimeParameterRatchet.toCacheStoreKey(temp.groupId, temp.paramKey), toStore);\n }\n }\n clearCache() {\n Logger.debug('Clearing runtime parameter cache');\n this.cache = new Map();\n }\n}\n//# sourceMappingURL=runtime-parameter-ratchet.js.map","import { CopyObjectCommand, GetObjectCommand, ListObjectsV2Command, } from '@aws-sdk/client-s3';\nimport { Logger, PromiseRatchet, RequireRatchet } from '@bitblit/ratchet-common';\nimport { Upload } from '@aws-sdk/lib-storage';\nexport class S3LocationSyncRatchet {\n config;\n constructor(config) {\n RequireRatchet.notNullOrUndefined(config, 'config');\n this.config = config;\n if (!this.config.maxNumThreads) {\n this.config.maxNumThreads = 15;\n }\n if (!this.config.maxRetries) {\n this.config.maxRetries = 5;\n }\n }\n updateSrcPrefix(prefix) {\n this.config.srcPrefix = prefix;\n }\n updateDstPrefix(prefix) {\n this.config.dstPrefix = prefix;\n }\n async copyObject(key, size, express = false) {\n const dstKey = key.replace(this.config.srcPrefix, this.config.dstPrefix);\n let completedCopying = false;\n let retries = 0;\n while (!completedCopying && retries < this.config.maxRetries) {\n Logger.debug(`${retries > 0 ? `Retry ${retries} ` : ''}${express ? 'Express' : 'Slow'} copying\n [${[this.config.srcBucket, key].join('/')} ---> ${[this.config.dstBucket, dstKey].join('/')}]`);\n try {\n if (express) {\n const params = {\n CopySource: encodeURIComponent([this.config.srcBucket, key].join('/')),\n Bucket: this.config.dstBucket,\n Key: dstKey,\n MetadataDirective: 'COPY',\n };\n await this.config.dstS3.send(new CopyObjectCommand(params));\n }\n else {\n const fetched = await this.config.srcS3.send(new GetObjectCommand({ Bucket: this.config.srcBucket, Key: key }));\n const params = {\n Bucket: this.config.dstBucket,\n Key: dstKey,\n Body: fetched.Body,\n ContentLength: size,\n };\n const upload = new Upload({\n client: this.config.dstS3,\n params: params,\n tags: [],\n queueSize: 4,\n partSize: 1024 * 1024 * 5,\n leavePartsOnError: false,\n });\n upload.on('httpUploadProgress', (progress) => {\n Logger.info('Uploading : %s', progress);\n });\n await upload.done();\n }\n completedCopying = true;\n }\n catch (err) {\n Logger.warn(`Can't ${express ? 'express' : 'slow'} copy\n [${[this.config.srcBucket, key].join('/')} ---> ${[this.config.dstBucket, dstKey].join('/')}]: %j`, err);\n retries++;\n }\n }\n Logger.debug(`Finished ${express ? 'express' : 'slow'} copying\n [${[this.config.srcBucket, key].join('/')} ---> ${[this.config.dstBucket, dstKey].join('/')}]`);\n }\n async listObjects(bucket, prefix, s3) {\n Logger.info(`Scanning bucket [${[bucket, prefix].join('/')}]`);\n const params = {\n Bucket: bucket,\n Prefix: prefix,\n };\n let more = true;\n const rval = {};\n while (more) {\n const response = await s3.send(new ListObjectsV2Command(params));\n more = response.IsTruncated;\n response.Contents.forEach((obj) => {\n rval[obj.Key] = { Key: obj.Key, LastModified: obj.LastModified, ETag: obj.ETag, Size: obj.Size };\n });\n if (more) {\n params.ContinuationToken = response.NextContinuationToken;\n }\n }\n return rval;\n }\n async startSyncing() {\n Logger.info(`Syncing [${this.config.srcBucket}/${this.config.srcPrefix}\n ---> ${this.config.dstBucket}/${this.config.dstPrefix}]`);\n const cp = async (obj) => {\n await this.copyObject(obj.Key, obj.Size);\n };\n let cmpResult = await this.compareSrcAndDst();\n if (cmpResult.needCopy.length > 0 || cmpResult.diff.length > 0) {\n await PromiseRatchet.runBoundedParallelSingleParam(cp, cmpResult.needCopy, this, this.config.maxNumThreads);\n await PromiseRatchet.runBoundedParallelSingleParam(cp, cmpResult.diff, this, this.config.maxNumThreads);\n Logger.info('Verifying...');\n cmpResult = await this.compareSrcAndDst();\n Logger.debug('Compare result %j', cmpResult);\n }\n return cmpResult.needCopy.length === 0 && cmpResult.diff.length === 0;\n }\n async compareSrcAndDst() {\n const getSrc = this.listObjects(this.config.srcBucket, this.config.srcPrefix, this.config.srcS3);\n const getDst = this.listObjects(this.config.dstBucket, this.config.dstPrefix, this.config.dstS3);\n const srcObjs = await getSrc;\n const dstObjs = await getDst;\n const rval = {\n needCopy: [],\n existed: [],\n diff: [],\n };\n await PromiseRatchet.runBoundedParallelSingleParam((key) => {\n const sObj = srcObjs[key];\n const dstKey = key.replace(this.config.srcPrefix, this.config.dstPrefix);\n const dObj = dstObjs.hasOwnProperty(dstKey) ? dstObjs[dstKey] : undefined;\n if (!dObj) {\n rval.needCopy.push(sObj);\n return;\n }\n if (sObj.Size !== dObj.Size) {\n rval.diff.push(sObj);\n return;\n }\n if (sObj.LastModified.getTime() <= dObj.LastModified.getTime()) {\n rval.existed.push(sObj);\n return;\n }\n rval.diff.push(sObj);\n }, Object.keys(srcObjs), this, this.config.maxNumThreads);\n return rval;\n }\n}\n//# sourceMappingURL=s3-location-sync-ratchet.js.map","import { RequireRatchet } from '@bitblit/ratchet-common';\nexport class S3Ratchet {\n static checkS3UrlForValidity(value) {\n let rval = false;\n if (value) {\n rval = value.startsWith('s3://') && value.trim().length > 5;\n }\n return rval;\n }\n static extractBucketFromURL(value) {\n RequireRatchet.true(S3Ratchet.checkS3UrlForValidity(value), 'invalid s3 url');\n const idx1 = value.indexOf('/', 5);\n const rval = idx1 > 0 ? value.substring(5, idx1) : value.substring(5);\n return rval;\n }\n static extractKeyFromURL(value) {\n RequireRatchet.true(S3Ratchet.checkS3UrlForValidity(value), 'invalid s3 url');\n const idx1 = value.indexOf('/', 5);\n const rval = idx1 > 0 ? value.substring(idx1 + 1) : null;\n return rval;\n }\n}\n//# sourceMappingURL=s3-ratchet.js.map","import { Base64Ratchet, ErrorRatchet, Logger, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { SendRawEmailCommand } from '@aws-sdk/client-ses';\nimport { DateTime } from 'luxon';\nexport class Mailer {\n ses;\n config;\n static EMAIL = new RegExp('.+@.+\\\\.[a-z]+');\n constructor(ses, config = {}) {\n this.ses = ses;\n this.config = config;\n RequireRatchet.notNullOrUndefined(this.ses);\n if (!!config.archive && !config.archive.getDefaultBucket()) {\n throw new Error('If archive specified, must set a default bucket');\n }\n }\n get sESClient() {\n return this.ses;\n }\n async fillEmailBody(rts, context, htmlTemplateName, txtTemplateName = null, layoutName = null, partialNames = null) {\n RequireRatchet.notNullOrUndefined(htmlTemplateName);\n if (!this.config.templateRenderer) {\n ErrorRatchet.throwFormattedErr('Cannot use fill body if template renderer not set');\n }\n rts.htmlMessage = await this.config.templateRenderer.renderTemplate(htmlTemplateName, context, layoutName, partialNames);\n rts.txtMessage = !!txtTemplateName ? await this.config.templateRenderer.renderTemplate(txtTemplateName, context) : null;\n return rts;\n }\n async fillEmailBodyAndSend(rts, context, htmlTemplateName, txtTemplateName = null, layoutName = null, partialNames = null) {\n const newVal = await this.fillEmailBody(rts, context, htmlTemplateName, txtTemplateName, layoutName, partialNames);\n const rval = await this.sendEmail(newVal);\n return rval;\n }\n filterEmailsToValid(emails) {\n const rval = (emails || []).filter((e) => {\n if (!this.config.allowedDestinationEmails || this.config.allowedDestinationEmails.length == 0) {\n return true;\n }\n else {\n const match = this.config.allowedDestinationEmails.find((s) => s.test(e));\n return !!match;\n }\n });\n return rval;\n }\n async archiveEmailIfConfigured(rts) {\n let rval = false;\n if (!!rts && !!this.config.archive && !rts.doNotArchive) {\n Logger.debug('Archiving outbound email to : %j', rts.destinationAddresses);\n let targetPath = StringRatchet.trimToEmpty(this.config.archivePrefix);\n if (!targetPath.endsWith('/')) {\n targetPath += '/';\n }\n const now = DateTime.utc();\n targetPath +=\n 'year=' +\n now.toFormat('yyyy') +\n '/month=' +\n now.toFormat('MM') +\n '/day=' +\n now.toFormat('dd') +\n '/hour=' +\n now.toFormat('HH') +\n '/' +\n now.toFormat('mm_ss__SSS');\n targetPath += '.json';\n try {\n await this.config.archive.writeObjectToCacheFile(targetPath, rts);\n rval = true;\n }\n catch (err) {\n Logger.warn('Failed to archive email %s %j : %s', targetPath, rts, err);\n }\n }\n return rval;\n }\n applyLimitsToBodySizesIfAnyInPlace(rts) {\n if (this.config.maxMessageBodySizeInBytes) {\n const txtSize = StringRatchet.trimToEmpty(rts.txtMessage).length;\n const htmlSize = StringRatchet.trimToEmpty(rts.htmlMessage).length;\n const totalSize = txtSize + htmlSize;\n if (totalSize > this.config.maxMessageBodySizeInBytes) {\n Logger.warn('Max message size is %d but size is %d - converting', this.config.maxMessageBodySizeInBytes, totalSize);\n rts.attachments = rts.attachments || [];\n if (StringRatchet.trimToNull(rts.txtMessage)) {\n const txtAttach = {\n filename: 'original-txt-body.txt',\n contentType: 'text/plain',\n base64Data: Base64Ratchet.generateBase64VersionOfString(rts.txtMessage),\n };\n rts.attachments.push(txtAttach);\n }\n if (StringRatchet.trimToNull(rts.htmlMessage)) {\n const htmlAttach = {\n filename: 'original-html-body.html',\n contentType: 'text/html',\n base64Data: Base64Ratchet.generateBase64VersionOfString(rts.htmlMessage),\n };\n rts.attachments.push(htmlAttach);\n }\n rts.htmlMessage = null;\n rts.txtMessage = 'The message was too large and was converted to attachment(s). Please see attached files for content';\n }\n }\n }\n applyLimitsToAttachmentSizesIfAnyInPlace(rts) {\n if (this.config.maxAttachmentSizeInBase64Bytes) {\n const filtered = [];\n if (rts.attachments) {\n rts.attachments.forEach((a) => {\n if (a.base64Data && a.base64Data.length < this.config.maxAttachmentSizeInBase64Bytes) {\n filtered.push(a);\n }\n else {\n Logger.warn('Removing too-large attachment : %s : %s : %d', a.filename, a.contentType, a.base64Data.length);\n filtered.push({\n filename: 'attachment-removed-notice-' + StringRatchet.createRandomHexString(4) + '.txt',\n contentType: 'text/plain',\n base64Data: Base64Ratchet.generateBase64VersionOfString('Attachment ' +\n a.filename +\n ' of type ' +\n a.contentType +\n ' was removed since it was ' +\n a.base64Data.length +\n ' bytes but max allowed is ' +\n this.config.maxAttachmentSizeInBase64Bytes),\n });\n }\n });\n }\n rts.attachments = filtered;\n }\n }\n async sendEmail(inRts) {\n RequireRatchet.notNullOrUndefined(inRts, 'RTS must be defined');\n RequireRatchet.notNullOrUndefined(inRts.destinationAddresses, 'Destination addresses must be defined');\n let rval = null;\n let toAddresses = this.filterEmailsToValid(inRts.destinationAddresses);\n const autoBcc = inRts.doNotAutoBcc ? [] : this.config.autoBccAddresses || [];\n const bccAddresses = (inRts.bccAddresses || []).concat(autoBcc);\n if (toAddresses.length === 0 && bccAddresses.length > 0) {\n Logger.debug('Destination emails filtered to none but BCC defined, copying BCC');\n toAddresses = bccAddresses;\n }\n const rts = Object.assign({}, inRts);\n rts.srcDestinationAddresses = inRts.destinationAddresses;\n rts.srcBccAddresses = inRts.bccAddresses;\n rts.destinationAddresses = toAddresses;\n rts.bccAddresses = bccAddresses;\n this.applyLimitsToBodySizesIfAnyInPlace(rts);\n this.applyLimitsToAttachmentSizesIfAnyInPlace(rts);\n await this.archiveEmailIfConfigured(rts);\n if (rts.destinationAddresses.length === 0) {\n Logger.info('After cleaning email lists, no destination addresses left - not sending email');\n }\n else {\n const toLine = 'To: ' + rts.destinationAddresses.join(', ') + '\\n';\n const bccLine = !!rts.bccAddresses && rts.bccAddresses.length > 0 ? 'Bcc: ' + rts.bccAddresses.join(', ') + '\\n' : '';\n try {\n const from = rts.fromAddress || this.config.defaultSendingAddress;\n const boundary = 'NextPart';\n const altBoundary = 'AltPart';\n let rawMail = 'From: ' + from + '\\n';\n rawMail += toLine;\n rawMail += bccLine;\n rawMail += 'Subject: ' + rts.subject + '\\n';\n rawMail += 'MIME-Version: 1.0\\n';\n rawMail += 'Content-Type: multipart/mixed; boundary=\"' + boundary + '\"\\n';\n rawMail += '\\n\\n--' + boundary + '\\n';\n rawMail += 'Content-Type: multipart/alternative; boundary=\"' + altBoundary + '\"\\n';\n if (!!StringRatchet.trimToNull(rts.htmlMessage)) {\n rawMail += '\\n\\n--' + altBoundary + '\\n';\n rawMail += 'Content-Type: text/html; charset=\"UTF-8\"\\n\\n';\n rawMail += rts.htmlMessage;\n }\n if (!!StringRatchet.trimToNull(rts.txtMessage)) {\n rawMail += '\\n\\n--' + altBoundary + '\\n';\n rawMail += 'Content-Type: text/plain\\n\\n';\n rawMail += rts.txtMessage;\n }\n rawMail += '\\n\\n--' + altBoundary + '--\\n';\n if (rts.attachments) {\n rts.attachments.forEach((a) => {\n rawMail += '\\n\\n--' + boundary + '\\n';\n rawMail += 'Content-Type: ' + a.contentType + '; name=\"' + a.filename + '\"\\n';\n rawMail += 'Content-Transfer-Encoding: base64\\n';\n rawMail += 'Content-Disposition: attachment\\n\\n';\n rawMail += a.base64Data.replace(/([^\\0]{76})/g, '$1\\n') + '\\n\\n';\n });\n }\n rawMail += '\\n\\n--' + boundary + '--\\n';\n const params = {\n RawMessage: { Data: new TextEncoder().encode(rawMail) },\n };\n rval = await this.ses.send(new SendRawEmailCommand(params));\n }\n catch (err) {\n Logger.error('Error while processing email: %s', err, err);\n }\n }\n return rval;\n }\n static validEmail(email) {\n return email !== null && Mailer.EMAIL.test(email);\n }\n}\n//# sourceMappingURL=mailer.js.map","import { Logger, RequireRatchet } from '@bitblit/ratchet-common';\nimport { PublishCommand, SNSClient } from '@aws-sdk/client-sns';\nexport class SnsRatchet {\n sns;\n topicArn;\n constructor(sns = new SNSClient({ region: 'us-east-1' }), topicArn) {\n this.sns = sns;\n this.topicArn = topicArn;\n RequireRatchet.notNullOrUndefined(this.sns, 'sns');\n RequireRatchet.notNullOrUndefined(this.topicArn, 'topicArn');\n }\n get snsClient() {\n return this.sns;\n }\n async sendMessage(inMsg, suppressErrors = false) {\n let result = null;\n try {\n const safeInMsg = inMsg ? inMsg : 'NO-MESSAGE-PROVIDED';\n const msg = typeof safeInMsg === 'string' ? safeInMsg : JSON.stringify(safeInMsg);\n const params = {\n TopicArn: this.topicArn,\n Message: msg,\n };\n Logger.debug('Sending via SNS : %j', params);\n result = await this.sns.send(new PublishCommand(params));\n }\n catch (err) {\n if (suppressErrors) {\n Logger.error('Failed to fire SNS notification : %j : %s', inMsg, err);\n }\n else {\n throw err;\n }\n }\n return result;\n }\n async conditionallySendMessage(inMsg, condition, suppressErrors = false) {\n let rval = null;\n if (condition) {\n rval = await this.sendMessage(inMsg, suppressErrors);\n }\n else {\n Logger.info('Not sending message, condition was false : %j', inMsg);\n }\n return rval;\n }\n}\n//# sourceMappingURL=sns-ratchet.js.map","import { Logger, RequireRatchet, StringRatchet } from '@bitblit/ratchet-common';\nimport { PutItemCommand } from '@aws-sdk/client-dynamodb';\nexport class DynamoDbSyncLock {\n ratchet;\n tableName;\n constructor(ratchet, tableName) {\n this.ratchet = ratchet;\n this.tableName = tableName;\n RequireRatchet.notNullOrUndefined(ratchet, 'ratchet');\n RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(this.tableName), 'tableName');\n }\n async acquireLock(lockKey, expirationSeconds = 30) {\n let rval = false;\n if (!!lockKey && !!expirationSeconds) {\n const nowSeconds = Math.floor(new Date().getTime() / 1000);\n const row = {\n lockingKey: lockKey,\n timestamp: nowSeconds,\n expires: nowSeconds + expirationSeconds,\n };\n const params = {\n Item: row,\n ReturnConsumedCapacity: 'TOTAL',\n TableName: this.tableName,\n ConditionExpression: 'attribute_not_exists(lockingKey)',\n };\n try {\n const pio = await this.ratchet.getDDB().send(new PutItemCommand(params));\n rval = true;\n }\n catch (err) {\n if (String(err).indexOf('ConditionalCheckFailedException') > -1) {\n Logger.silly('Unable to acquire lock on %s', lockKey);\n }\n }\n }\n return rval;\n }\n async releaseLock(lockKey) {\n if (StringRatchet.trimToNull(lockKey)) {\n try {\n const dio = await this.ratchet.simpleDelete(this.tableName, { lockingKey: lockKey });\n Logger.silly('Released lock %s : %s', lockKey, dio);\n }\n catch (err) {\n Logger.warn('Failed to release lock key : %s : %s', lockKey, err, err);\n }\n }\n }\n async clearExpiredSyncLocks() {\n const nowSeconds = Math.floor(new Date().getTime() / 1000);\n const scan = {\n TableName: this.tableName,\n FilterExpression: 'expires < :now',\n ExpressionAttributeValues: {\n ':now': nowSeconds,\n },\n };\n const vals = await this.ratchet.fullyExecuteScan(scan);\n const keysOnly = vals.map((v) => {\n const next = { lockingKey: v['lockingKey'] };\n return next;\n });\n const removed = await this.ratchet.deleteAllInBatches(this.tableName, keysOnly, 25);\n return removed;\n }\n}\n//# sourceMappingURL=dynamo-db-sync-lock.js.map","import { StringRatchet } from '@bitblit/ratchet-common';\nexport class MemorySyncLock {\n _locks = new Map();\n constructor() { }\n async acquireLock(lockKey, expirationSeconds = 30) {\n let rval = false;\n if (StringRatchet.trimToNull(lockKey)) {\n const now = Date.now();\n const val = this._locks.get(lockKey);\n if (!val || val < now) {\n this._locks.set(lockKey, now + expirationSeconds * 1000);\n rval = true;\n }\n }\n return rval;\n }\n async releaseLock(lockKey) {\n if (StringRatchet.trimToNull(lockKey)) {\n this._locks.delete(lockKey);\n }\n }\n async clearExpiredSyncLocks() {\n const toRemove = [];\n const now = Date.now();\n this._locks.forEach((v, k) => {\n if (v < now) {\n toRemove.push(k);\n }\n });\n toRemove.forEach((k) => {\n this._locks.delete(k);\n });\n return toRemove.length;\n }\n}\n//# sourceMappingURL=memory-sync-lock.js.map"],"names":["AwsBatchBackgroundProcessor","batchRatchet","validTaskNames","constructor","this","RequireRatchet","notNullOrUndefined","batchClient","defaultJobDefinition","defaultQueueName","scheduleBackgroundTask","taskName","data","meta","length","StringRatchet","trimToNull","includes","ErrorRatchet","throwFormattedErr","Logger","info","rval","jobName","DateTime","utc","toFormat","options","jobDefinition","jobQueue","parameters","taskData","JSON","stringify","taskMetadata","scheduleJob","jobId","err","error","AwsBatchRatchet","_batchClient","_defaultQueueName","_defaultJobDefinition","send","SubmitJobCommand","jobCountInState","jobStatus","queueName","listJobs","request","nextToken","tmp","ListJobsCommand","concat","jobSummaryList","RatchetAwsInfo","buildInformation","version","hash","branch","tag","timeBuiltISO","notes","DynamoDbStorageProvider","dynamo","opts","tableName","hashKeyName","true","useRangeKeys","rangeKeyName","hashKeyValue","createDefaultOptions","createKeyObject","cacheKey","keys","cleanDynamoFieldsFromObjectInPlace","dynamoExpiresColumnName","extractKeysFromObject","readFromCache","dKey","simpleGet","storeInCache","value","toSave","Object","assign","expiresEpochMS","Math","floor","simplePut","removeFromCache","simpleDelete","clearCache","allKeys","readAll","map","a","deleteAllInBatches","qry","TableName","KeyConditionExpression","ExpressionAttributeNames","ExpressionAttributeValues","fullyExecuteQuery","scan","fullyExecuteScan","forEach","r","S3StorageProvider","s3CacheRatchet","prefix","getDefaultBucket","keyToPath","trimToEmpty","endsWith","fetchCacheFileAsObject","writeObjectToCacheFile","removeCacheFile","directChildrenOfPrefix","Promise","all","k","SimpleCache","provider","defaultTimeToLiveMS","createDefaultReadOptions","maxStalenessMS","timeToLiveMS","cacheNullValues","fetchWrapper","producer","silly","now","Date","getTime","debug","createdEpochMS","generated","fetch","wrapper","returnOldValue","CloudWatchLogGroupRatchet","logGroup","awsCWLogs","CloudWatchLogsClient","region","cloudWatchLogsClient","readLogStreams","startTimestamp","endTimestamp","params","logGroupName","orderBy","temp","DescribeLogStreamsCommand","logStreams","s","lastEventTimestamp","firstEventTimestamp","push","readLogStreamNames","logStreamName","readEvents","filter","sortEvents","maxEvents","sw","StopWatch","endTime","startTime","filterPattern","dump","FilterLogEventsCommand","events","sort","b","timestamp","message","localeCompare","log","CloudWatchLogsRatchet","static","cwLogs","cloudwatchLogs","removeEmptyOrOldLogStreams","maxToRemove","oldestEventEpochMS","streamSearchParams","oldestEventTester","totalStreams","removedStreams","failedRemovedStreams","waitPerDescribe","streams","i","st","oldWait","min","waitPer","delParams","type","storedBytes","removed","retry","MAX_DELETE_RETRIES","DeleteLogStreamCommand","PromiseRatchet","wait","warn","findOldestEventTimestampInGroup","stream","findStreamWithOldestEventInGroup","findLogGroups","logGroupNamePrefix","res","DescribeLogGroupsCommand","logGroups","removeLogGroups","groups","req","DeleteLogGroupCommand","removeLogGroupsWithPrefix","fullyExecuteInsightsQuery","sqr","resp","StartQueryCommand","delayMS","status","GetQueryResultsCommand","queryId","abortInsightsQuery","StopQueryCommand","CloudWatchMetricsUnit","CloudWatchMetricsRatchet","cw","cloudWatch","CloudWatchClient","apiVersion","cloudWatchClient","writeSingleMetric","namespace","metric","dims","unit","None","timestampDate","highResolution","cwDims","d","Name","key","Value","storageResolution","metricData","Namespace","MetricData","MetricName","Dimensions","Unit","String","Timestamp","StorageResolution","result","PutMetricDataCommand","writeDynamoCountAsMinuteLevelMetric","minuteUTC","query","Error","cnt","dynamoRatchet","fullyExecuteQueryCount","fullyExecuteScanCount","parseDateString","split","join","parseDate","fromISO","toJSDate","metricRes","Count","count","DaemonUtil","Buffer","from","start","cache","id","s3Key","newState","title","lastUpdatedEpochMS","lastUpdatedMessage","targetFileName","startedEpochMS","completedEpochMS","link","contentType","writeState","DEFAULT_CONTENT","contents","s3meta","DAEMON_METADATA_KEY","Bucket","Key","ContentType","Metadata","Body","Blob","ContentDisposition","written","getS3Client","PutObjectCommand","stat","streamDataAndFinish","inStat","updateMessage","overrideTargetFileName","upload","Upload","client","tags","queueSize","partSize","leavePartsOnError","on","progress","done","newMessage","s3Cache","path","fetchMetaForCacheFile","metaString","parse","preSignedDownloadUrlForCacheFile","abort","finalize","S3CacheRatchet","s3","defaultBucket","s3Client","applyCacheControlMaxAge","input","seconds","CacheControl","applyUserMetaData","fileExists","bucket","bucketVal","fetchCacheFileAsS3GetObjectCommandOutput","GetObjectCommand","NoSuchKey","fetchCacheFileAsReadableStream","transformToWebStream","fetchCacheFileAsBuffer","out","transformToByteArray","fetchCacheFileAsString","transformToString","DeleteObjectCommand","dataObject","template","json","writeStringToCacheFile","dataString","WebStreamRatchet","stringToWebReadableStream","writeStreamToCacheFile","synchronize","srcPrefix","targetPrefix","targetRatchet","recurseSubFolders","sourceFiles","targetFiles","sourceFile","dumpExpected","subs","shouldCopy","srcMeta","targetMeta","ETag","srcStream","undefined","HeadObjectCommand","cacheFileAgeInSeconds","LastModified","copyFile","srcKey","dstKey","srcBucket","dstBucket","CopySource","MetadataDirective","CopyObjectCommand","quietCopyFile","expirationSeconds","getCommand","getSignedUrl","expiresIn","expandFiles","maxToReturn","returnValue","Prefix","Delimiter","response","ListObjectsCommand","prefixLength","cp","substring","async","expanded","name","size","Marker","NextMarker","allSubFoldersOfPrefix","idx","next","ContinuationToken","NextContinuationToken","CommonPrefixes","p","explicitBucket","Daemon","_defaultGroup","jwtRatchet","DEFAULT_DEFAULT_GROUP","defaultGroup","keyToPublicToken","token","daemonKey","createTokenString","toString","pathToKey","generatePath","group","generatePrefix","createType4Guid","clean","olderThanSeconds","original","list","test","listKeys","proms","itemPath","statFromPublicToken","publicToken","parsed","decodeToken","PrototypeDao","cfg","defaultDaoConfig","guidCreateFunction","guidFieldName","createdEpochMSFieldName","updatedEpochMSFieldName","createdUtcTimestampFieldName","updatedUtcTimestampFieldName","fetchAll","loadDatabase","items","resetDatabase","storeDatabase","lastModifiedEpochMS","removeItems","guids","old","t","store","toISO","fetchById","guid","find","searchByField","fieldDotPath","fieldValue","searchByFieldMap","matchAll","val","MapRatchet","findValueDotPath","S3PrototypeDaoProvider","keyName","notNullUndefinedOrOnlyWhitespaceString","inDb","S3SimpleDao","buildPathPrefix","buildFullPath","exists","fullPath","item","listItems","fetchItemsInPath","promises","DynamoRatchet","awsDDB","dynamoDBDocumentClient","getDDB","tableIsEmpty","Limit","throughputSafeScanOrQuery","o","scanPromise","Items","ScanCommand","queryPromise","QueryCommand","proc","maxTries","inCurrentTry","currentTry","objectIsErrorWithProvisionedThroughputExceededExceptionCode","pow","Select","scannedCount","pages","qryResults","myLimit","LastEvaluatedKey","end","DurationRatchet","formatMsDuration","softLimit","fullyExecuteProcessOverQuery","v","blankPages","fullyExecuteProcessOverScan","writeAllInBatches","elements","batchSize","batchItems","el","PutRequest","Item","ReturnConsumedCapacity","curBatch","slice","RequestItems","ReturnItemCollectionMetrics","tryCount","batchResults","BatchWriteCommand","UnprocessedItems","backoff","fetchFullObjectsMatchingKeysOnlyIndexQuery","keyNames","keyDataSrc","keysOnly","stripAllToKeysOnly","fetchAllInBatches","inKeys","batches","remain","tableEntry","Keys","nextBatch","BatchGetCommand","Responses","UnprocessedKeys","DeleteRequest","autoRetryCount","PutCommand","simplePutOnlyIfFieldIsNullOrUndefined","fieldName","ConditionExpression","wrote","simplePutWithCollisionAvoidance","adjustFunction","maxAdjusts","pio","attrNames","attrValues","condExp","adjustCount","newValue","holder","GetCommand","simpleGetWithCounterDecrement","counterAttributeName","deleteOnZero","UpdateExpression","ReturnValues","updateFailed","UpdateItemCommand","Attributes","DeleteCommand","atomicCounter","counterFieldName","increment","update","ui","NumberRatchet","safeNumber","cleanObject","ob","rem","stripToKeysOnly","keysNames","DynamoTableRatchet","deleteTable","waitForDelete","DeleteTableCommand","waitForTableDelete","createTable","waitForReady","replaceIfExists","tableExists","CreateTableCommand","waitForTableReady","safeDescribeTable","Table","TableStatus","listAllTables","ListTablesCommand","TableNames","ExclusiveStartTableName","LastEvaluatedTableName","DescribeTableCommand","ResourceNotFoundException","copyTable","srcTableName","dstTableName","overrides","copyData","fErr","srcTableDef","AttributeDefinitions","KeySchema","GlobalSecondaryIndexes","createInput","LocalSecondaryIndexes","gi","output","ProvisionedThroughput","WriteCapacityUnits","ReadCapacityUnits","BillingMode","BillingModeSummary","StreamSpecification","SSESpecification","SSEDescription","Tags","TableClass","TableClassSummary","DeletionProtectionEnabled","HashSpreader","spots","buckets","separator","alphabet","_allSlots","allUnique","stringContainsOnlyAlphanumeric","permutations","allPerms","allPermutationsOfLength","allBuckets","randomBucket","random","allSpreadValues","allSpreadValuesForArray","inputs","addSpreader","extractBucket","loc","charAt","removeBucket","Ec2Ratchet","availabilityZone","ec2","ec2InstanceConnect","EC2Client","EC2InstanceConnectClient","eC2Client","eC2InstanceConnectClient","stopInstance","instanceId","maxWaitForShutdownMS","stopParams","InstanceIds","DryRun","StopInstancesCommand","describeInstance","State","Code","launchInstance","maxWaitForStartupMS","startParams","StartInstancesCommand","PublicIpAddress","listAllInstances","instanceIds","NextToken","DescribeInstancesCommand","Reservations","Instances","sendPublicKeyToEc2Instance","publicKeyString","instanceOsUser","userName","InstanceId","AvailabilityZone","InstanceOSUser","SSHPublicKey","SendSSHPublicKeyCommand","CascadeEnvironmentServiceProvider","providers","fetchConfig","EnvVarEnvironmentServiceProvider","envVarName","src","process","env","global","toParse","EnvironmentService","readPromiseCache","Map","defaultEnvironmentServiceConfig","maxRetries","backoffMultiplierMS","getConfig","has","set","getConfigUncached","get","waitMS","FixedEnvironmentServiceProvider","fromRecord","record","m","S3EnvironmentServiceProvider","ratchet","bucketName","s3Override","S3Client","readPath","pathPrefix","pathSuffix","SsmEnvironmentServiceProvider","ssmEncrypted","ssm","SSMClient","WithDecryption","GetParameterCommand","Parameter","errCode","toLowerCase","indexOf","errMsg","DynamoExpiringCodeProvider","checkCode","code","context","deleteOnMatch","expCode","storeCode","ConsumedCapacity","CapacityUnits","createTableIfMissing","dtr","ExpiringCodeRatchet","generateCode","timeToLiveSeconds","createNewCode","S3ExpiringCodeProvider","fetchFile","updateFile","vals","toUpperCase","newData","AwsCredentialsRatchet","applySetProfileEnvironmentalVariable","newProfile","LambdaEventDetector","isValidCronEvent","event","source","resources","isValidSnsEvent","Records","EventSource","isValidDynamoDBEvent","eventSource","isValidS3Event","isValidApiGatewayV2WithRequestContextEvent","rawPath","requestContext","routeKey","isValidApiGatewayEvent","httpMethod","isValidApiGatewayAuthorizerEvent","authorizationToken","methodArn","isSingleCronEvent","isSingleEntryEvent","isSingleSnsEvent","isSingleDynamoDBEvent","isSingleS3Event","entryName","Array","LambdaEventTypeGuards","Route53Ratchet","route53","hostedZoneId","route53Client","changeCnameRecordTarget","domainName","target","ttlSeconds","ChangeBatch","Changes","Action","ResourceRecordSet","ResourceRecords","TTL","Type","HostedZoneId","ChangeResourceRecordSetsCommand","waitParams","Id","ChangeInfo","waitResult","waitUntilResourceRecordSetsChanged","maxWaitTime","state","WaiterState","SUCCESS","DynamoRuntimeParameterProvider","readParameter","groupId","paramKey","readAllParametersForGroup","writeParameter","toStore","GlobalVariableOverrideRuntimeParameterProvider","wrapped","globalTTL","suffix","generateName","asString","canParseAsJson","paramValue","MemoryRuntimeParameterProvider","resolve","startsWith","RuntimeParameterRatchet","fetchParameter","defaultValue","forceFreshRead","cached","toCacheStoreKey","oldest","storedEpochMS","readUnderlyingEntry","addToCache","fetchAllParametersForGroup","readUnderlyingEntries","storeParameter","S3LocationSyncRatchet","config","maxNumThreads","updateSrcPrefix","updateDstPrefix","dstPrefix","copyObject","express","replace","completedCopying","retries","encodeURIComponent","dstS3","fetched","srcS3","ContentLength","listObjects","more","ListObjectsV2Command","IsTruncated","Contents","obj","Size","startSyncing","cmpResult","compareSrcAndDst","needCopy","diff","runBoundedParallelSingleParam","getSrc","getDst","srcObjs","dstObjs","existed","sObj","dObj","hasOwnProperty","S3Ratchet","checkS3UrlForValidity","trim","extractBucketFromURL","idx1","extractKeyFromURL","Mailer","ses","RegExp","archive","sESClient","fillEmailBody","rts","htmlTemplateName","txtTemplateName","layoutName","partialNames","templateRenderer","htmlMessage","renderTemplate","txtMessage","fillEmailBodyAndSend","newVal","sendEmail","filterEmailsToValid","emails","e","allowedDestinationEmails","archiveEmailIfConfigured","doNotArchive","destinationAddresses","targetPath","archivePrefix","applyLimitsToBodySizesIfAnyInPlace","maxMessageBodySizeInBytes","totalSize","attachments","txtAttach","filename","base64Data","Base64Ratchet","generateBase64VersionOfString","htmlAttach","applyLimitsToAttachmentSizesIfAnyInPlace","maxAttachmentSizeInBase64Bytes","filtered","createRandomHexString","inRts","toAddresses","autoBcc","doNotAutoBcc","autoBccAddresses","bccAddresses","srcDestinationAddresses","srcBccAddresses","toLine","bccLine","fromAddress","defaultSendingAddress","boundary","altBoundary","rawMail","subject","RawMessage","Data","TextEncoder","encode","SendRawEmailCommand","validEmail","email","EMAIL","SnsRatchet","sns","topicArn","SNSClient","snsClient","sendMessage","inMsg","suppressErrors","safeInMsg","msg","TopicArn","Message","PublishCommand","conditionallySendMessage","condition","DynamoDbSyncLock","acquireLock","lockKey","nowSeconds","lockingKey","expires","PutItemCommand","releaseLock","dio","clearExpiredSyncLocks","FilterExpression","MemorySyncLock","_locks","delete","toRemove"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/batch/aws-batch-background-processor.ts","../src/batch/aws-batch-ratchet.ts","../src/build/ratchet-aws-info.ts","../src/cache/dynamo-db-storage-provider.ts","../src/cache/s3-storage-provider.ts","../src/cache/simple-cache.ts","../src/cloudwatch/cloud-watch-log-group-ratchet.ts","../src/cloudwatch/cloud-watch-logs-ratchet.ts","../src/model/cloud-watch-metrics-unit.ts","../src/cloudwatch/cloud-watch-metrics-ratchet.ts","../src/daemon/daemon-util.ts","../src/s3/s3-cache-ratchet.ts","../src/daemon/daemon.ts","../src/dao/prototype-dao.ts","../src/dao/s3-prototype-dao-provider.ts","../src/dao/s3-simple-dao.ts","../src/dynamodb/dynamo-ratchet.ts","../src/dynamodb/dynamo-table-ratchet.ts","../src/dynamodb/hash-spreader.ts","../src/ec2/ec2-ratchet.ts","../src/environment/cascade-environment-service-provider.ts","../src/environment/env-var-environment-service-provider.ts","../src/environment/environment-service.ts","../src/environment/fixed-environment-service-provider.ts","../src/environment/s3-environment-service-provider.ts","../src/environment/ssm-environment-service-provider.ts","../src/expiring-code/dynamo-expiring-code-provider.ts","../src/expiring-code/expiring-code-ratchet.ts","../src/expiring-code/s3-expiring-code-provider.ts","../src/iam/aws-credentials-ratchet.ts","../src/lambda/lambda-event-detector.ts","../src/lambda/lambda-event-type-guards.ts","../src/route53/route-53-ratchet.ts","../src/runtime-parameter/dynamo-runtime-parameter-provider.ts","../src/runtime-parameter/global-variable-override-runtime-parameter-provider.ts","../src/runtime-parameter/memory-runtime-parameter-provider.ts","../src/runtime-parameter/runtime-parameter-ratchet.ts","../src/s3/s3-location-sync-ratchet.ts","../src/s3/s3-ratchet.ts","../src/ses/mailer.ts","../src/sns/sns-ratchet.ts","../src/sync-lock/dynamo-db-sync-lock.ts","../src/sync-lock/memory-sync-lock.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],"names":["AwsBatchBackgroundProcessor","batchRatchet","validTaskNames","constructor","this","RequireRatchet","notNullOrUndefined","batchClient","defaultJobDefinition","defaultQueueName","scheduleBackgroundTask","taskName","data","meta","length","StringRatchet","trimToNull","includes","ErrorRatchet","throwFormattedErr","Logger","info","rval","jobName","DateTime","utc","toFormat","options","jobDefinition","jobQueue","parameters","taskData","JSON","stringify","taskMetadata","scheduleJob","jobId","err","error","AwsBatchRatchet","_batchClient","_defaultQueueName","_defaultJobDefinition","send","SubmitJobCommand","jobCountInState","jobStatus","queueName","listJobs","request","nextToken","tmp","ListJobsCommand","concat","jobSummaryList","RatchetAwsInfo","buildInformation","version","hash","branch","tag","timeBuiltISO","notes","DynamoDbStorageProvider","dynamo","opts","tableName","hashKeyName","true","useRangeKeys","rangeKeyName","hashKeyValue","createDefaultOptions","createKeyObject","cacheKey","keys","cleanDynamoFieldsFromObjectInPlace","dynamoExpiresColumnName","extractKeysFromObject","readFromCache","dKey","simpleGet","storeInCache","value","toSave","Object","assign","expiresEpochMS","Math","floor","simplePut","removeFromCache","simpleDelete","clearCache","allKeys","readAll","map","a","deleteAllInBatches","qry","TableName","KeyConditionExpression","ExpressionAttributeNames","ExpressionAttributeValues","fullyExecuteQuery","scan","fullyExecuteScan","forEach","r","S3StorageProvider","s3CacheRatchet","prefix","getDefaultBucket","keyToPath","trimToEmpty","endsWith","fetchCacheFileAsObject","writeObjectToCacheFile","removeCacheFile","directChildrenOfPrefix","Promise","all","k","SimpleCache","provider","defaultTimeToLiveMS","createDefaultReadOptions","maxStalenessMS","timeToLiveMS","cacheNullValues","fetchWrapper","producer","silly","now","Date","getTime","debug","createdEpochMS","generated","fetch","wrapper","returnOldValue","CloudWatchLogGroupRatchet","logGroup","awsCWLogs","CloudWatchLogsClient","region","cloudWatchLogsClient","readLogStreams","startTimestamp","endTimestamp","params","logGroupName","orderBy","temp","DescribeLogStreamsCommand","logStreams","s","lastEventTimestamp","firstEventTimestamp","push","readLogStreamNames","logStreamName","readEvents","filter","sortEvents","maxEvents","sw","StopWatch","endTime","startTime","filterPattern","dump","FilterLogEventsCommand","events","sort","b","timestamp","message","localeCompare","log","CloudWatchLogsRatchet","static","cwLogs","cloudwatchLogs","removeEmptyOrOldLogStreams","maxToRemove","oldestEventEpochMS","streamSearchParams","oldestEventTester","totalStreams","removedStreams","failedRemovedStreams","waitPerDescribe","streams","i","st","oldWait","min","waitPer","delParams","type","storedBytes","removed","retry","MAX_DELETE_RETRIES","DeleteLogStreamCommand","PromiseRatchet","wait","warn","findOldestEventTimestampInGroup","stream","findStreamWithOldestEventInGroup","findLogGroups","logGroupNamePrefix","res","DescribeLogGroupsCommand","logGroups","removeLogGroups","groups","req","DeleteLogGroupCommand","removeLogGroupsWithPrefix","fullyExecuteInsightsQuery","sqr","resp","StartQueryCommand","delayMS","status","GetQueryResultsCommand","queryId","abortInsightsQuery","StopQueryCommand","CloudWatchMetricsUnit","CloudWatchMetricsRatchet","cw","cloudWatch","CloudWatchClient","apiVersion","cloudWatchClient","writeSingleMetric","namespace","metric","dims","unit","None","timestampDate","highResolution","cwDims","d","Name","key","Value","storageResolution","metricData","Namespace","MetricData","MetricName","Dimensions","Unit","String","Timestamp","StorageResolution","result","PutMetricDataCommand","writeDynamoCountAsMinuteLevelMetric","minuteUTC","query","Error","cnt","dynamoRatchet","fullyExecuteQueryCount","fullyExecuteScanCount","parseDateString","split","join","parseDate","fromISO","toJSDate","metricRes","Count","count","DaemonUtil","Buffer","from","start","cache","id","s3Key","newState","title","lastUpdatedEpochMS","lastUpdatedMessage","targetFileName","startedEpochMS","completedEpochMS","link","contentType","writeState","DEFAULT_CONTENT","contents","s3meta","DAEMON_METADATA_KEY","Bucket","Key","ContentType","Metadata","Body","Blob","ContentDisposition","written","getS3Client","PutObjectCommand","stat","streamDataAndFinish","inStat","updateMessage","overrideTargetFileName","upload","Upload","client","tags","queueSize","partSize","leavePartsOnError","on","progress","done","newMessage","s3Cache","path","fetchMetaForCacheFile","metaString","parse","preSignedDownloadUrlForCacheFile","abort","finalize","S3CacheRatchet","s3","defaultBucket","s3Client","applyCacheControlMaxAge","input","seconds","CacheControl","applyUserMetaData","fileExists","bucket","bucketVal","fetchCacheFileAsS3GetObjectCommandOutput","GetObjectCommand","NoSuchKey","fetchCacheFileAsReadableStream","transformToWebStream","fetchCacheFileAsBuffer","out","transformToByteArray","fetchCacheFileAsString","transformToString","DeleteObjectCommand","dataObject","template","json","writeStringToCacheFile","dataString","WebStreamRatchet","stringToWebReadableStream","writeStreamToCacheFile","synchronize","srcPrefix","targetPrefix","targetRatchet","recurseSubFolders","sourceFiles","targetFiles","sourceFile","dumpExpected","subs","shouldCopy","srcMeta","targetMeta","ETag","srcStream","undefined","HeadObjectCommand","cacheFileAgeInSeconds","LastModified","copyFile","srcKey","dstKey","srcBucket","dstBucket","CopySource","MetadataDirective","CopyObjectCommand","quietCopyFile","expirationSeconds","getCommand","getSignedUrl","expiresIn","expandFiles","maxToReturn","returnValue","Prefix","Delimiter","response","ListObjectsCommand","prefixLength","cp","substring","async","expanded","name","size","Marker","NextMarker","allSubFoldersOfPrefix","idx","next","ContinuationToken","NextContinuationToken","CommonPrefixes","p","explicitBucket","Daemon","_defaultGroup","jwtRatchet","DEFAULT_DEFAULT_GROUP","defaultGroup","keyToPublicToken","token","daemonKey","createTokenString","toString","pathToKey","generatePath","group","generatePrefix","createType4Guid","clean","olderThanSeconds","original","list","test","listKeys","proms","itemPath","statFromPublicToken","publicToken","parsed","decodeToken","PrototypeDao","cfg","defaultDaoConfig","guidCreateFunction","guidFieldName","createdEpochMSFieldName","updatedEpochMSFieldName","createdUtcTimestampFieldName","updatedUtcTimestampFieldName","fetchAll","loadDatabase","items","resetDatabase","storeDatabase","lastModifiedEpochMS","removeItems","guids","old","t","store","toISO","fetchById","guid","find","searchByField","fieldDotPath","fieldValue","searchByFieldMap","matchAll","val","MapRatchet","findValueDotPath","S3PrototypeDaoProvider","keyName","notNullUndefinedOrOnlyWhitespaceString","inDb","S3SimpleDao","buildPathPrefix","buildFullPath","exists","fullPath","item","listItems","fetchItemsInPath","promises","DynamoRatchet","awsDDB","dynamoDBDocumentClient","getDDB","tableIsEmpty","Limit","throughputSafeScanOrQuery","o","scanPromise","Items","ScanCommand","queryPromise","QueryCommand","proc","maxTries","inCurrentTry","currentTry","objectIsErrorWithProvisionedThroughputExceededExceptionCode","pow","Select","scannedCount","pages","qryResults","myLimit","LastEvaluatedKey","end","DurationRatchet","formatMsDuration","softLimit","fullyExecuteProcessOverQuery","v","blankPages","fullyExecuteProcessOverScan","writeAllInBatches","elements","batchSize","batchItems","el","PutRequest","Item","ReturnConsumedCapacity","curBatch","slice","RequestItems","ReturnItemCollectionMetrics","tryCount","batchResults","BatchWriteCommand","UnprocessedItems","backoff","fetchFullObjectsMatchingKeysOnlyIndexQuery","keyNames","keyDataSrc","keysOnly","stripAllToKeysOnly","fetchAllInBatches","inKeys","batches","remain","tableEntry","Keys","nextBatch","BatchGetCommand","Responses","UnprocessedKeys","DeleteRequest","autoRetryCount","PutCommand","simplePutOnlyIfFieldIsNullOrUndefined","fieldName","ConditionExpression","wrote","simplePutWithCollisionAvoidance","adjustFunction","maxAdjusts","pio","attrNames","attrValues","condExp","adjustCount","newValue","holder","GetCommand","simpleGetWithCounterDecrement","counterAttributeName","deleteOnZero","UpdateExpression","ReturnValues","updateFailed","UpdateItemCommand","Attributes","DeleteCommand","atomicCounter","counterFieldName","increment","update","ui","NumberRatchet","safeNumber","cleanObject","ob","rem","stripToKeysOnly","keysNames","DynamoTableRatchet","deleteTable","waitForDelete","DeleteTableCommand","waitForTableDelete","createTable","waitForReady","replaceIfExists","tableExists","CreateTableCommand","waitForTableReady","safeDescribeTable","Table","TableStatus","listAllTables","ListTablesCommand","TableNames","ExclusiveStartTableName","LastEvaluatedTableName","DescribeTableCommand","ResourceNotFoundException","copyTable","srcTableName","dstTableName","overrides","copyData","fErr","srcTableDef","AttributeDefinitions","KeySchema","GlobalSecondaryIndexes","createInput","LocalSecondaryIndexes","gi","output","ProvisionedThroughput","WriteCapacityUnits","ReadCapacityUnits","BillingMode","BillingModeSummary","StreamSpecification","SSESpecification","SSEDescription","Tags","TableClass","TableClassSummary","DeletionProtectionEnabled","HashSpreader","spots","buckets","separator","alphabet","_allSlots","allUnique","stringContainsOnlyAlphanumeric","permutations","allPerms","allPermutationsOfLength","allBuckets","randomBucket","random","allSpreadValues","allSpreadValuesForArray","inputs","addSpreader","extractBucket","loc","charAt","removeBucket","Ec2Ratchet","availabilityZone","ec2","ec2InstanceConnect","EC2Client","EC2InstanceConnectClient","eC2Client","eC2InstanceConnectClient","stopInstance","instanceId","maxWaitForShutdownMS","stopParams","InstanceIds","DryRun","StopInstancesCommand","describeInstance","State","Code","launchInstance","maxWaitForStartupMS","startParams","StartInstancesCommand","PublicIpAddress","listAllInstances","instanceIds","NextToken","DescribeInstancesCommand","Reservations","Instances","sendPublicKeyToEc2Instance","publicKeyString","instanceOsUser","userName","InstanceId","AvailabilityZone","InstanceOSUser","SSHPublicKey","SendSSHPublicKeyCommand","CascadeEnvironmentServiceProvider","providers","fetchConfig","EnvVarEnvironmentServiceProvider","envVarName","src","process","env","global","toParse","EnvironmentService","readPromiseCache","Map","defaultEnvironmentServiceConfig","maxRetries","backoffMultiplierMS","getConfig","has","set","getConfigUncached","get","waitMS","FixedEnvironmentServiceProvider","fromRecord","record","m","S3EnvironmentServiceProvider","ratchet","bucketName","s3Override","S3Client","readPath","pathPrefix","pathSuffix","SsmEnvironmentServiceProvider","ssmEncrypted","ssm","SSMClient","WithDecryption","GetParameterCommand","Parameter","errCode","toLowerCase","indexOf","errMsg","DynamoExpiringCodeProvider","checkCode","code","context","deleteOnMatch","expCode","storeCode","ConsumedCapacity","CapacityUnits","createTableIfMissing","dtr","ExpiringCodeRatchet","generateCode","timeToLiveSeconds","createNewCode","S3ExpiringCodeProvider","fetchFile","updateFile","vals","toUpperCase","newData","AwsCredentialsRatchet","applySetProfileEnvironmentalVariable","newProfile","LambdaEventDetector","isValidCronEvent","event","source","resources","isValidSnsEvent","Records","EventSource","isValidDynamoDBEvent","eventSource","isValidS3Event","isValidApiGatewayV2WithRequestContextEvent","rawPath","requestContext","routeKey","isValidApiGatewayEvent","httpMethod","isValidApiGatewayAuthorizerEvent","authorizationToken","methodArn","isSingleCronEvent","isSingleEntryEvent","isSingleSnsEvent","isSingleDynamoDBEvent","isSingleS3Event","entryName","Array","LambdaEventTypeGuards","Route53Ratchet","route53","hostedZoneId","route53Client","changeCnameRecordTarget","domainName","target","ttlSeconds","ChangeBatch","Changes","Action","ResourceRecordSet","ResourceRecords","TTL","Type","HostedZoneId","ChangeResourceRecordSetsCommand","waitParams","Id","ChangeInfo","waitResult","waitUntilResourceRecordSetsChanged","maxWaitTime","state","WaiterState","SUCCESS","DynamoRuntimeParameterProvider","readParameter","groupId","paramKey","readAllParametersForGroup","writeParameter","toStore","GlobalVariableOverrideRuntimeParameterProvider","wrapped","globalTTL","suffix","generateName","asString","canParseAsJson","paramValue","MemoryRuntimeParameterProvider","resolve","startsWith","RuntimeParameterRatchet","fetchParameter","defaultValue","forceFreshRead","cached","toCacheStoreKey","oldest","storedEpochMS","readUnderlyingEntry","addToCache","fetchAllParametersForGroup","readUnderlyingEntries","storeParameter","S3LocationSyncRatchet","config","maxNumThreads","updateSrcPrefix","updateDstPrefix","dstPrefix","copyObject","express","replace","completedCopying","retries","encodeURIComponent","dstS3","fetched","srcS3","ContentLength","listObjects","more","ListObjectsV2Command","IsTruncated","Contents","obj","Size","startSyncing","cmpResult","compareSrcAndDst","needCopy","diff","runBoundedParallelSingleParam","getSrc","getDst","srcObjs","dstObjs","existed","sObj","dObj","hasOwnProperty","S3Ratchet","checkS3UrlForValidity","trim","extractBucketFromURL","idx1","extractKeyFromURL","Mailer","ses","RegExp","archive","sESClient","fillEmailBody","rts","htmlTemplateName","txtTemplateName","layoutName","partialNames","templateRenderer","htmlMessage","renderTemplate","txtMessage","fillEmailBodyAndSend","newVal","sendEmail","filterEmailsToValid","emails","e","allowedDestinationEmails","archiveEmailIfConfigured","doNotArchive","destinationAddresses","targetPath","archivePrefix","applyLimitsToBodySizesIfAnyInPlace","maxMessageBodySizeInBytes","totalSize","attachments","txtAttach","filename","base64Data","Base64Ratchet","generateBase64VersionOfString","htmlAttach","applyLimitsToAttachmentSizesIfAnyInPlace","maxAttachmentSizeInBase64Bytes","filtered","createRandomHexString","inRts","toAddresses","autoBcc","doNotAutoBcc","autoBccAddresses","bccAddresses","srcDestinationAddresses","srcBccAddresses","toLine","bccLine","fromAddress","defaultSendingAddress","boundary","altBoundary","rawMail","subject","RawMessage","Data","TextEncoder","encode","SendRawEmailCommand","validEmail","email","EMAIL","SnsRatchet","sns","topicArn","SNSClient","snsClient","sendMessage","inMsg","suppressErrors","safeInMsg","msg","TopicArn","Message","PublishCommand","conditionallySendMessage","condition","DynamoDbSyncLock","acquireLock","lockKey","nowSeconds","lockingKey","expires","PutItemCommand","releaseLock","dio","clearExpiredSyncLocks","FilterExpression","MemorySyncLock","_locks","delete","toRemove"],"mappings":"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"}