@nimmsta/workflow-library 8.0.1918
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/package.json +14 -0
- package/workflow.bundle.js +2 -0
- package/workflow.bundle.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.bundle.js","mappings":"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","sources":["webpack://@nimmsta/workflow-library/webpack/universalModuleDefinition","webpack://@nimmsta/workflow-library/./src/util/EvalUtil.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/stringify.js","webpack://@nimmsta/workflow-library/./src/customController/StopJobController.ts","webpack://@nimmsta/workflow-library/../../node_modules/async-mutex/lib/Semaphore.js","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/native.js","webpack://@nimmsta/workflow-library/external umd {\"commonjs\":\"@nimmsta/web-library\",\"commonjs2\":\"@nimmsta/web-library\",\"amd\":\"@nimmsta/web-library\",\"root\":\"NimmstaWebLibrary\"}","webpack://@nimmsta/workflow-library/./src/platform/controller/PlatformControllerState.ts","webpack://@nimmsta/workflow-library/./src/customController/CancelJobController.ts","webpack://@nimmsta/workflow-library/./src/platform/api/platformcore/actions/PlatformUpdateAccountAction.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/v3.js","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/regex.js","webpack://@nimmsta/workflow-library/./src/customController/SaveJobController.ts","webpack://@nimmsta/workflow-library/./src/platform/errors/WhoAmIError.ts","webpack://@nimmsta/workflow-library/./src/platform/api/httpClient/FetchFromServerAction.ts","webpack://@nimmsta/workflow-library/./src/platform/errors/PlatformError.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/v5.js","webpack://@nimmsta/workflow-library/./src/models/DefaultWorkflow.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/v7.js","webpack://@nimmsta/workflow-library/./src/platform/api/platformcore/actions/PlatformPairWithAction.ts","webpack://@nimmsta/workflow-library/./src/customController/SkipJobController.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/v4.js","webpack://@nimmsta/workflow-library/../../node_modules/async-mutex/lib/errors.js","webpack://@nimmsta/workflow-library/./src/util/NIMSubEventState.ts","webpack://@nimmsta/workflow-library/./src/layouts/LoadingLayout.ts","webpack://@nimmsta/workflow-library/./src/platform/controller/PlatformWorkflowEventController.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/rng.js","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/version.js","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/sha1.js","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/md5.js","webpack://@nimmsta/workflow-library/./src/layouts/ErrorLayout.ts","webpack://@nimmsta/workflow-library/./src/platform/api/platformcore/PlatformCoreLibConnectorImpl.ts","webpack://@nimmsta/workflow-library/./src/platform/defaults/defaultWorkflow.ts","webpack://@nimmsta/workflow-library/./src/platform/api/httpClient/HttpClientAction.ts","webpack://@nimmsta/workflow-library/./src/platform/api/defaultEndpoints.ts","webpack://@nimmsta/workflow-library/./src/platform/layouts/UserStillActiveLayout.ts","webpack://@nimmsta/workflow-library/./src/platform/controller/DeviceAPIWrapper.ts","webpack://@nimmsta/workflow-library/./src/platform/model/AccountImpl.ts","webpack://@nimmsta/workflow-library/../../node_modules/async-mutex/lib/index.js","webpack://@nimmsta/workflow-library/./src/ActionController.ts","webpack://@nimmsta/workflow-library/./src/layouts/ErrorLayoutWithSkip.ts","webpack://@nimmsta/workflow-library/./src/models/job/Job.ts","webpack://@nimmsta/workflow-library/./src/util/ErrorAwareReplacer.ts","webpack://@nimmsta/workflow-library/./src/platform/errors/PlatformEvalError.ts","webpack://@nimmsta/workflow-library/./src/platform/layouts/PairAppLayout.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/validate.js","webpack://@nimmsta/workflow-library/./src/platform/api/operationData/OperationDataAction.ts","webpack://@nimmsta/workflow-library/./src/platform/errors/PairingError.ts","webpack://@nimmsta/workflow-library/./src/platform/errors/HTTPError.ts","webpack://@nimmsta/workflow-library/../../node_modules/tslib/tslib.es6.mjs","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/v1ToV6.js","webpack://@nimmsta/workflow-library/./src/TransitionControllerFactory.ts","webpack://@nimmsta/workflow-library/./src/platform/api/SoftwareAPIImpl.ts","webpack://@nimmsta/workflow-library/./src/platform/api/platformcore/actions/PlatformUploadLogFileAction.ts","webpack://@nimmsta/workflow-library/./src/WorkflowStepController.ts","webpack://@nimmsta/workflow-library/./src/platform/lang/en.ts","webpack://@nimmsta/workflow-library/./src/util/TimerUtil.ts","webpack://@nimmsta/workflow-library/./src/platform/api/platformcore/actions/PlatformGetAccountAction.ts","webpack://@nimmsta/workflow-library/./src/platform/layouts/WorkflowErrorLayoutWithBack.ts","webpack://@nimmsta/workflow-library/./src/platform/errors/ErrorHandling.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/nil.js","webpack://@nimmsta/workflow-library/./src/util/Base36.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/parse.js","webpack://@nimmsta/workflow-library/./src/platform/layouts/LoadingLayout.ts","webpack://@nimmsta/workflow-library/./src/platform/layouts/WorkflowErrorLayout.ts","webpack://@nimmsta/workflow-library/./src/util/LangUtils.ts","webpack://@nimmsta/workflow-library/./src/platform/lang/index.ts","webpack://@nimmsta/workflow-library/./src/platform/index.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/v35.js","webpack://@nimmsta/workflow-library/./src/TransitionController.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/v1.js","webpack://@nimmsta/workflow-library/../../node_modules/async-mutex/lib/withTimeout.js","webpack://@nimmsta/workflow-library/./src/index.ts","webpack://@nimmsta/workflow-library/./src/platform/lang/de.ts","webpack://@nimmsta/workflow-library/./src/platform/controller/WorkflowActionEnum.ts","webpack://@nimmsta/workflow-library/../../node_modules/async-mutex/lib/tryAcquire.js","webpack://@nimmsta/workflow-library/./src/platform/controller/PlatformController.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/v6ToV1.js","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/index.js","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/v6.js","webpack://@nimmsta/workflow-library/./src/platform/layouts/LoginOnDeviceLayout.ts","webpack://@nimmsta/workflow-library/./src/ActionControllerFactory.ts","webpack://@nimmsta/workflow-library/../../node_modules/async-mutex/lib/Mutex.js","webpack://@nimmsta/workflow-library/./src/WorkflowController.ts","webpack://@nimmsta/workflow-library/../../node_modules/uuid/dist/cjs-browser/max.js","webpack://@nimmsta/workflow-library/./src/platform/api/PlatformAPIImpl.ts","webpack://@nimmsta/workflow-library/./src/WorkflowStepControllerFactory.ts","webpack://@nimmsta/workflow-library/./src/util/JwtParser.ts","webpack://@nimmsta/workflow-library/./src/platform/api/platformcore/actions/PlatformLogEventAction.ts","webpack://@nimmsta/workflow-library/webpack/bootstrap","webpack://@nimmsta/workflow-library/webpack/runtime/define property getters","webpack://@nimmsta/workflow-library/webpack/runtime/hasOwnProperty shorthand","webpack://@nimmsta/workflow-library/webpack/runtime/make namespace object","webpack://@nimmsta/workflow-library/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@nimmsta/web-library\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@nimmsta/web-library\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"@nimmsta/web-library\")) : factory(root[\"NimmstaWebLibrary\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, (__WEBPACK_EXTERNAL_MODULE__946__) => {\nreturn ","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Logger } from '@nimmsta/web-library';\nimport { PlatformEvalError } from '../platform/errors/PlatformEvalError';\n\nexport class NIMMSTAEvalUtils {\n static transformAsyncCode: (code: string) => string = (code: string) => code;\n\n static evalWithParams<T>(\n code: string,\n context: { [id: string]: any},\n onError: ((error: Error) => void),\n logger: Logger,\n ): T {\n if (!code || code.trim() === '') {\n return undefined as unknown as T;\n }\n\n try {\n logger.debug('Evaluating', code, context);\n const values = Object.values(context);\n\n return (new Function(...Object.keys(context), code))(...values);\n } catch (error) {\n onError(new PlatformEvalError(error, code, context));\n logger.error(error);\n logger.error(error.stack);\n }\n return null;\n }\n static async evalWithParamsAsync<T>(\n code: string,\n context: { [id: string]: any},\n onError: ((error: Error) => void),\n logger: Logger,\n ): Promise<T | null> {\n if (!code || code.trim() === '') {\n return undefined as unknown as T;\n }\n\n let asyncCode;\n\n try {\n logger.debug('Evaluating async', code, context);\n const keys = Object.keys(context);\n const values = await Promise.all(Object.values(context)); // Resolves all promises in the context\n return await new Promise((resolve, reject) => {\n // This promise is used to ensure that the async function can be awaited\n\n const wrappedCode = `(async () => {\n try {\n var fn = async () => { ${code} };\n var result = await fn();\n ____resolve(result);\n } catch (error) {\n ____reject(error);\n }\n })()`;\n asyncCode = this.transformAsyncCode(wrappedCode);\n\n\n const func = new Function(...['____resolve', '____reject'].concat(keys), asyncCode);\n func(resolve, reject, ...values); // Await the function call if it is asynchronous\n });\n } catch (error: any) {\n onError(new PlatformEvalError(error, code, context, asyncCode));\n logger.error(error);\n logger.error(error.stack);\n }\n return null;\n }\n\n static runWithCatch<T>(lambda: () => T, onError: ((error: Error) => void), logger: Logger): () => T {\n if (lambda === undefined) {\n return undefined;\n }\n\n\n return () => {\n try {\n\n return lambda();\n } catch (error) {\n onError(new PlatformEvalError(error, lambda.toString(), {}));\n logger.error(error);\n logger.error(error.stack);\n }\n };\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsafeStringify = void 0;\nconst validate_js_1 = require(\"./validate.js\");\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nfunction unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nexports.unsafeStringify = unsafeStringify;\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!(0, validate_js_1.default)(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexports.default = stringify;\n","import {\n ButtonEvent, TriggerMode,\n} from '@nimmsta/web-library';\nimport { WorkflowStepController } from '../WorkflowStepController';\nimport { LoadingLayout } from '../layouts/LoadingLayout';\nimport { NimmstaLayoutConstructor } from './NimmstaLayoutConstructor';\nimport { ErrorLayout } from '../layouts/ErrorLayout';\n\nexport class StopJobController extends WorkflowStepController {\n override needsBackForError = true;\n\n previousTriggerMode: TriggerMode;\n static LoadingLayoutClass: NimmstaLayoutConstructor = LoadingLayout;\n static ErrorLayoutClass = ErrorLayout;\n\n execute() {\n this.previousTriggerMode = this.workflowController.device.preferredTriggerMode;\n this.workflowController.device.preferredTriggerMode = TriggerMode.Disabled;\n this.stopJob();\n this.onAppearEvent();\n }\n\n private stopJob() {\n const layoutParams = super.getLayoutParams();\n\n this.workflowController.setLayout(new StopJobController.LoadingLayoutClass(layoutParams['title'] ?? 'Stopping Job'));\n\n this.workflowController.stop().then(() => {\n if (!this.isCurrentStep) {\n return;\n }\n\n this.logger.info('Job stopped');\n this.workflowController.device.preferredTriggerMode = this.previousTriggerMode;\n this.onJobStopped();\n }).catch((error) => {\n if (!this.isCurrentStep) {\n return;\n }\n\n this.logger.error('Error while stopping job', error);\n this.workflowController.device.triggerSOS();\n this.workflowController.setLayout(\n new StopJobController.ErrorLayoutClass(error?.translatedRecoveryInfo ?? error.message),\n );\n });\n }\n\n onJobStopped() {\n this.executeEvent('onJobStopped');\n }\n\n onButtonEvent(button: ButtonEvent) {\n super.onButtonEvent(button);\n\n if (button.name === ErrorLayout.RETRY_BUTTON) {\n this.stopJob();\n }\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar errors_1 = require(\"./errors\");\nvar Semaphore = /** @class */ (function () {\n function Semaphore(_value, _cancelError) {\n if (_cancelError === void 0) { _cancelError = errors_1.E_CANCELED; }\n this._value = _value;\n this._cancelError = _cancelError;\n this._queue = [];\n this._weightedWaiters = [];\n }\n Semaphore.prototype.acquire = function (weight, priority) {\n var _this = this;\n if (weight === void 0) { weight = 1; }\n if (priority === void 0) { priority = 0; }\n if (weight <= 0)\n throw new Error(\"invalid weight \".concat(weight, \": must be positive\"));\n return new Promise(function (resolve, reject) {\n var task = { resolve: resolve, reject: reject, weight: weight, priority: priority };\n var i = findIndexFromEnd(_this._queue, function (other) { return priority <= other.priority; });\n if (i === -1 && weight <= _this._value) {\n // Needs immediate dispatch, skip the queue\n _this._dispatchItem(task);\n }\n else {\n _this._queue.splice(i + 1, 0, task);\n }\n });\n };\n Semaphore.prototype.runExclusive = function (callback_1) {\n return tslib_1.__awaiter(this, arguments, void 0, function (callback, weight, priority) {\n var _a, value, release;\n if (weight === void 0) { weight = 1; }\n if (priority === void 0) { priority = 0; }\n return tslib_1.__generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.acquire(weight, priority)];\n case 1:\n _a = _b.sent(), value = _a[0], release = _a[1];\n _b.label = 2;\n case 2:\n _b.trys.push([2, , 4, 5]);\n return [4 /*yield*/, callback(value)];\n case 3: return [2 /*return*/, _b.sent()];\n case 4:\n release();\n return [7 /*endfinally*/];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n Semaphore.prototype.waitForUnlock = function (weight, priority) {\n var _this = this;\n if (weight === void 0) { weight = 1; }\n if (priority === void 0) { priority = 0; }\n if (weight <= 0)\n throw new Error(\"invalid weight \".concat(weight, \": must be positive\"));\n if (this._couldLockImmediately(weight, priority)) {\n return Promise.resolve();\n }\n else {\n return new Promise(function (resolve) {\n if (!_this._weightedWaiters[weight - 1])\n _this._weightedWaiters[weight - 1] = [];\n insertSorted(_this._weightedWaiters[weight - 1], { resolve: resolve, priority: priority });\n });\n }\n };\n Semaphore.prototype.isLocked = function () {\n return this._value <= 0;\n };\n Semaphore.prototype.getValue = function () {\n return this._value;\n };\n Semaphore.prototype.setValue = function (value) {\n this._value = value;\n this._dispatchQueue();\n };\n Semaphore.prototype.release = function (weight) {\n if (weight === void 0) { weight = 1; }\n if (weight <= 0)\n throw new Error(\"invalid weight \".concat(weight, \": must be positive\"));\n this._value += weight;\n this._dispatchQueue();\n };\n Semaphore.prototype.cancel = function () {\n var _this = this;\n this._queue.forEach(function (entry) { return entry.reject(_this._cancelError); });\n this._queue = [];\n };\n Semaphore.prototype._dispatchQueue = function () {\n this._drainUnlockWaiters();\n while (this._queue.length > 0 && this._queue[0].weight <= this._value) {\n this._dispatchItem(this._queue.shift());\n this._drainUnlockWaiters();\n }\n };\n Semaphore.prototype._dispatchItem = function (item) {\n var previousValue = this._value;\n this._value -= item.weight;\n item.resolve([previousValue, this._newReleaser(item.weight)]);\n };\n Semaphore.prototype._newReleaser = function (weight) {\n var _this = this;\n var called = false;\n return function () {\n if (called)\n return;\n called = true;\n _this.release(weight);\n };\n };\n Semaphore.prototype._drainUnlockWaiters = function () {\n if (this._queue.length === 0) {\n for (var weight = this._value; weight > 0; weight--) {\n var waiters = this._weightedWaiters[weight - 1];\n if (!waiters)\n continue;\n waiters.forEach(function (waiter) { return waiter.resolve(); });\n this._weightedWaiters[weight - 1] = [];\n }\n }\n else {\n var queuedPriority_1 = this._queue[0].priority;\n for (var weight = this._value; weight > 0; weight--) {\n var waiters = this._weightedWaiters[weight - 1];\n if (!waiters)\n continue;\n var i = waiters.findIndex(function (waiter) { return waiter.priority <= queuedPriority_1; });\n (i === -1 ? waiters : waiters.splice(0, i))\n .forEach((function (waiter) { return waiter.resolve(); }));\n }\n }\n };\n Semaphore.prototype._couldLockImmediately = function (weight, priority) {\n return (this._queue.length === 0 || this._queue[0].priority < priority) &&\n weight <= this._value;\n };\n return Semaphore;\n}());\nfunction insertSorted(a, v) {\n var i = findIndexFromEnd(a, function (other) { return v.priority <= other.priority; });\n a.splice(i + 1, 0, v);\n}\nfunction findIndexFromEnd(a, predicate) {\n for (var i = a.length - 1; i >= 0; i--) {\n if (predicate(a[i])) {\n return i;\n }\n }\n return -1;\n}\nexports.default = Semaphore;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexports.default = { randomUUID };\n","module.exports = __WEBPACK_EXTERNAL_MODULE__946__;","export enum PlatformControllerState {\n WAITING_TO_PAIR,\n CONNECT_SMART_WATCH,\n IDLE,\n IN_WORKFLOW,\n WORKFLOW_ERROR,\n USER_STILL_ACTIVE\n}\n\nexport enum PlatformControllerUIState {\n PAIRING,\n WORKFLOW,\n ERROR,\n LOADING,\n LOGIN_ON_DEVICE,\n USER_STILL_ACTIVE\n}\n","import {\n ButtonEvent, TriggerMode,\n} from '@nimmsta/web-library';\nimport { WorkflowStepController } from '../WorkflowStepController';\nimport { LoadingLayout } from '../layouts/LoadingLayout';\nimport { NimmstaLayoutConstructor } from './NimmstaLayoutConstructor';\nimport { ErrorLayout } from '../layouts/ErrorLayout';\n\nexport class CancelJobController extends WorkflowStepController {\n override needsBackForError = true;\n\n previousTriggerMode: TriggerMode;\n static LoadingLayoutClass: NimmstaLayoutConstructor = LoadingLayout;\n static ErrorLayoutClass: NimmstaLayoutConstructor = ErrorLayout;\n\n execute() {\n this.previousTriggerMode = this.workflowController.device.preferredTriggerMode;\n this.workflowController.device.preferredTriggerMode = TriggerMode.Disabled;\n this.cancelJob();\n this.onAppearEvent();\n }\n\n private cancelJob() {\n const layoutParams = super.getLayoutParams();\n \n this.workflowController.setLayout(new CancelJobController.LoadingLayoutClass(layoutParams['title'] ?? 'Cancelling Job'));\n\n this.workflowController.cancel().then(() => {\n if (!this.isCurrentStep) {\n return;\n }\n\n this.logger.info('Job cancelled');\n this.workflowController.device.preferredTriggerMode = this.previousTriggerMode;\n this.onJobCancelled();\n }).catch((error) => {\n if (!this.isCurrentStep) {\n return;\n }\n\n this.logger.error('Error while cancelling job', error);\n this.workflowController.device.triggerSOS();\n this.workflowController.setLayout(\n new CancelJobController.ErrorLayoutClass(error?.translatedRecoveryInfo ?? error.message),\n );\n });\n }\n\n onJobCancelled() {\n this.executeEvent('onJobCancelled');\n }\n\n onButtonEvent(button: ButtonEvent) {\n super.onButtonEvent(button);\n\n if (button.name === ErrorLayout.RETRY_BUTTON) {\n this.cancelJob();\n }\n }\n}\n","import { IAction } from '@nimmsta/web-library';\nimport { IAccount } from '../../../model/IAccount';\n\nexport class PlatformUpdateAccountAction implements IAction {\n public readonly name = 'PlatformUpdateAccountAction';\n public readonly isDeviceAction = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public data: any;\n\n constructor(data: IAccount) {\n this.data = data.toJson();\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = void 0;\nconst md5_js_1 = require(\"./md5.js\");\nconst v35_js_1 = require(\"./v35.js\");\nvar v35_js_2 = require(\"./v35.js\");\nObject.defineProperty(exports, \"DNS\", { enumerable: true, get: function () { return v35_js_2.DNS; } });\nObject.defineProperty(exports, \"URL\", { enumerable: true, get: function () { return v35_js_2.URL; } });\nfunction v3(value, namespace, buf, offset) {\n return (0, v35_js_1.default)(0x30, md5_js_1.default, value, namespace, buf, offset);\n}\nv3.DNS = v35_js_1.DNS;\nv3.URL = v35_js_1.URL;\nexports.default = v3;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n","import {\n ButtonEvent, TriggerMode,\n} from '@nimmsta/web-library';\nimport { WorkflowStepController } from '../WorkflowStepController';\nimport { WorkflowController } from '../WorkflowController';\nimport { LoadingLayout } from '../layouts/LoadingLayout';\nimport { ErrorLayoutWithSkip } from '../layouts/ErrorLayoutWithSkip';\nimport { NimmstaLayoutConstructor } from './NimmstaLayoutConstructor';\n\nexport class SaveJobController extends WorkflowStepController {\n override needsBackForError = true;\n\n previousTriggerMode: TriggerMode;\n static LoadingLayoutClass: NimmstaLayoutConstructor = LoadingLayout;\n static ErrorLayoutClass: NimmstaLayoutConstructor = ErrorLayoutWithSkip;\n\n execute() {\n this.previousTriggerMode = this.workflowController.device.preferredTriggerMode;\n this.workflowController.device.preferredTriggerMode = TriggerMode.Disabled;\n this.saveJob();\n this.onAppearEvent();\n }\n\n private saveJob() {\n const layoutParams = super.getLayoutParams();\n \n this.workflowController.setLayout(new SaveJobController.LoadingLayoutClass(layoutParams['title'] ?? 'Saving Job'));\n\n this.workflowController.done().then(() => {\n if (!this.isCurrentStep) {\n return;\n }\n\n this.logger.info('Job saved');\n this.workflowController.device.preferredTriggerMode = this.previousTriggerMode;\n this.onJobSaved();\n }).catch((error) => {\n if (!this.isCurrentStep) {\n return;\n }\n\n this.logger.error('Error while saving job', error);\n this.workflowController.device.triggerSOS();\n this.workflowController.setLayout(\n new SaveJobController.ErrorLayoutClass(error?.translatedRecoveryInfo ?? error.message),\n );\n });\n }\n\n onJobSaved() {\n this.executeEvent('onJobSaved');\n }\n\n onButtonEvent(button: ButtonEvent) {\n super.onButtonEvent(button);\n\n if (button.name === ErrorLayoutWithSkip.RETRY_BUTTON) {\n this.saveJob();\n }\n\n if (button.name === ErrorLayoutWithSkip.SKIP_BUTTON) {\n this.workflowController.executeWorkflowStep(WorkflowController.SKIP_JOB);\n }\n }\n}\n","import { HTTPError } from './HTTPError';\nimport { PlatformError } from './PlatformError';\n\nexport class WhoAmIError extends PlatformError {\n authFailed: boolean;\n\n get shouldShowError() {\n if (this.cause instanceof HTTPError && this.cause.json?.error === 'error.DeviceUnlinkedException') {\n return true;\n }\n\n return !this.authFailed;\n }\n\n get errorCause() {\n if (this.cause instanceof HTTPError) {\n return this.cause.json?.error;\n }\n\n return this.cause?.message;\n }\n\n constructor(message: string, authFailed: boolean, cause?: Error) {\n super(message, cause);\n this.authFailed = authFailed;\n }\n\n toString(): string {\n return `${this.name}: ${this.message} (cause: ${this.cause})`;\n }\n}\n","import { IAction } from '@nimmsta/web-library';\nimport { HttpClientActionParameters } from './HttpInterfaces';\n\nexport class FetchFromServerAction implements IAction {\n public readonly name = 'FetchFromServerAction';\n public readonly isDeviceAction = false;\n public data: HttpClientActionParameters;\n\n constructor(data: HttpClientActionParameters) {\n this.data = data;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { cleanErrorContextFromCircularReferences, errorAwareReplacer } from '../../util/ErrorAwareReplacer';\n\nexport class PlatformError extends Error {\n cause?: Error;\n status?: number;\n translatedTitle?: string;\n translatedRecoveryInfo?: string;\n\n platformContext: { [id: string]: any } = {};\n\n _isPlatformError = true;\n\n get isIgnorable(): boolean {\n return (typeof this.cause === 'object' && (this.cause as any).isIgnorable)\n || this.status === 404\n || this.status === 0\n || this.status === 401;\n }\n\n constructor(\n message: string,\n cause: Error | undefined = undefined,\n status: number | undefined = undefined,\n translatedTitle: string | undefined = undefined,\n translatedRecoveryInfo: string | undefined = undefined,\n platformContext: { [id: string]: any } = {},\n ) {\n super(message); // Call the base class constructor with the message.\n\n this.cause = cause;\n this.status = status;\n this.translatedTitle = translatedTitle ?? message;\n this.translatedRecoveryInfo = translatedRecoveryInfo ?? message;\n\n // we need to clean the platformContext to avoid circular references\n this.platformContext = cleanErrorContextFromCircularReferences(\n platformContext,\n new Set([this]),\n ) as { [id: string]: any };\n\n Object.setPrototypeOf(this, new.target.prototype); // Ensure the prototype is set correctly\n this.name = this.constructor.name; // Automatically set the name to the class name\n\n // Set up stack trace excluding the constructor call\n if ((Error as any).captureStackTrace) {\n (Error as any).captureStackTrace(this, this.constructor);\n }\n }\n\n get developerInfo(): { [id: string]: string | undefined } {\n let causeJson;\n try {\n causeJson = JSON.stringify(this.cause, errorAwareReplacer);\n } catch (e: any) {\n causeJson = `Error serializing cause: ${e.message}`;\n }\n return {\n ...this.platformContext,\n status: this.status?.toString(),\n cause: causeJson,\n };\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = void 0;\nconst sha1_js_1 = require(\"./sha1.js\");\nconst v35_js_1 = require(\"./v35.js\");\nvar v35_js_2 = require(\"./v35.js\");\nObject.defineProperty(exports, \"DNS\", { enumerable: true, get: function () { return v35_js_2.DNS; } });\nObject.defineProperty(exports, \"URL\", { enumerable: true, get: function () { return v35_js_2.URL; } });\nfunction v5(value, namespace, buf, offset) {\n return (0, v35_js_1.default)(0x50, sha1_js_1.default, value, namespace, buf, offset);\n}\nv5.DNS = v35_js_1.DNS;\nv5.URL = v35_js_1.URL;\nexports.default = v5;\n","import { WorkflowController } from '../WorkflowController';\nimport { Workflow } from './Workflow';\n\nexport class DefaultWorkflow {\n static getDefaultWorkflow(): Workflow {\n return {\n workflowName: 'Default Workflow',\n workflowSteps: [\n // default initial step. Filtered by controller.\n {\n isInitialStep: true,\n workflowStepName: 'Default Workflow Step',\n \n layout: '<?xml version=\"1.0\" encoding=\"utf-8\"?><NimmstaLayout name=\"Initial Default Layout\"><staticElements><StatusBar /><cell maxLines=\"0\" wrapMode=\"wrap\" fontSize=\"auto\" textAlign=\"center\" padding=\"4\">Welcome to Productivity Cloud. Please define a initial step to get started.</cell>></staticElements></NimmstaLayout>',\n },\n {\n workflowStepName: WorkflowController.CANCEL_JOB,\n type: WorkflowController.CANCEL_JOB,\n neverStoreState: true,\n },\n {\n workflowStepName: WorkflowController.SAVE_JOB,\n type: WorkflowController.SAVE_JOB,\n neverStoreState: true,\n },\n {\n workflowStepName: WorkflowController.SKIP_JOB,\n type: WorkflowController.SKIP_JOB,\n neverStoreState: true,\n },\n {\n workflowStepName: WorkflowController.STOP_JOB,\n type: WorkflowController.STOP_JOB,\n neverStoreState: true,\n },\n ],\n };\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.updateV7State = void 0;\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nconst _state = {};\nfunction v7(options, buf, offset) {\n let bytes;\n if (options) {\n bytes = v7Bytes(options.random ?? options.rng?.() ?? (0, rng_js_1.default)(), options.msecs, options.seq, buf, offset);\n }\n else {\n const now = Date.now();\n const rnds = (0, rng_js_1.default)();\n updateV7State(_state, now, rnds);\n bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);\n }\n return buf ?? (0, stringify_js_1.unsafeStringify)(bytes);\n}\nfunction updateV7State(state, now, rnds) {\n state.msecs ??= -Infinity;\n state.seq ??= 0;\n if (now > state.msecs) {\n state.seq = (rnds[6] << 23) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n state.msecs = now;\n }\n else {\n state.seq = (state.seq + 1) | 0;\n if (state.seq === 0) {\n state.msecs++;\n }\n }\n return state;\n}\nexports.updateV7State = updateV7State;\nfunction v7Bytes(rnds, msecs, seq, buf, offset = 0) {\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n if (!buf) {\n buf = new Uint8Array(16);\n offset = 0;\n }\n else {\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n }\n msecs ??= Date.now();\n seq ??= ((rnds[6] * 0x7f) << 24) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n buf[offset++] = (msecs / 0x10000000000) & 0xff;\n buf[offset++] = (msecs / 0x100000000) & 0xff;\n buf[offset++] = (msecs / 0x1000000) & 0xff;\n buf[offset++] = (msecs / 0x10000) & 0xff;\n buf[offset++] = (msecs / 0x100) & 0xff;\n buf[offset++] = msecs & 0xff;\n buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);\n buf[offset++] = (seq >>> 20) & 0xff;\n buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);\n buf[offset++] = (seq >>> 6) & 0xff;\n buf[offset++] = ((seq << 2) & 0xff) | (rnds[10] & 0x03);\n buf[offset++] = rnds[11];\n buf[offset++] = rnds[12];\n buf[offset++] = rnds[13];\n buf[offset++] = rnds[14];\n buf[offset++] = rnds[15];\n return buf;\n}\nexports.default = v7;\n","import { IAction } from '@nimmsta/web-library';\n\nexport interface PairWithData {\n qrcode: string;\n deviceName: string;\n}\n\nexport class PlatformPairWithAction implements IAction {\n public readonly name = 'PlatformPairWithAction';\n public readonly isDeviceAction = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public data: any;\n\n constructor(data: PairWithData) {\n this.data = data;\n }\n}\n","import {\n ButtonEvent, TriggerMode,\n} from '@nimmsta/web-library';\nimport { WorkflowStepController } from '../WorkflowStepController';\nimport { LoadingLayout } from '../layouts/LoadingLayout';\nimport { NimmstaLayoutConstructor } from './NimmstaLayoutConstructor';\nimport { ErrorLayout } from '../layouts/ErrorLayout';\n\nexport class SkipJobController extends WorkflowStepController {\n override needsBackForError = true;\n\n previousTriggerMode: TriggerMode;\n static LoadingLayoutClass: NimmstaLayoutConstructor = LoadingLayout;\n static ErrorLayoutClass: NimmstaLayoutConstructor = ErrorLayout;\n\n execute() {\n this.previousTriggerMode = this.workflowController.device.preferredTriggerMode;\n this.workflowController.device.preferredTriggerMode = TriggerMode.Disabled;\n this.skipJob();\n this.onAppearEvent();\n }\n\n private skipJob() {\n const layoutParams = super.getLayoutParams();\n \n this.workflowController.setLayout(new SkipJobController.LoadingLayoutClass(layoutParams['title'] ?? 'Skipping Job'));\n\n this.workflowController.skip().then(() => {\n if (!this.isCurrentStep) {\n return;\n }\n\n this.logger.info('Job skipped');\n this.workflowController.device.preferredTriggerMode = this.previousTriggerMode;\n this.onJobSkipped();\n }).catch((error) => {\n if (!this.isCurrentStep) {\n return;\n }\n\n this.logger.error('Error while skipping job', error);\n this.workflowController.device.triggerSOS();\n this.workflowController.setLayout(\n new SkipJobController.ErrorLayoutClass(error?.translatedRecoveryInfo ?? error.messa),\n );\n });\n }\n\n onJobSkipped() {\n this.executeEvent('onJobSkipped');\n }\n\n onButtonEvent(button: ButtonEvent) {\n super.onButtonEvent(button);\n\n if (button.name === ErrorLayout.RETRY_BUTTON) {\n this.skipJob();\n }\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst native_js_1 = require(\"./native.js\");\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v4(options, buf, offset) {\n if (native_js_1.default.randomUUID && !buf && !options) {\n return native_js_1.default.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? (0, rng_js_1.default)();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return (0, stringify_js_1.unsafeStringify)(rnds);\n}\nexports.default = v4;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.E_CANCELED = exports.E_ALREADY_LOCKED = exports.E_TIMEOUT = void 0;\nexports.E_TIMEOUT = new Error('timeout while waiting for mutex to become available');\nexports.E_ALREADY_LOCKED = new Error('mutex already locked');\nexports.E_CANCELED = new Error('request for lock canceled');\n","import { NIMSubEvent } from '@nimmsta/web-library';\nimport {\n IEmitOptions, ISubOptions, SubFunction, Subscription,\n} from 'sub-events';\n\nexport class NIMSubEventState<T> extends NIMSubEvent<T> {\n private _value: T;\n\n constructor(value: T) {\n super();\n this._value = value;\n }\n\n public get value() {\n return this._value;\n }\n\n public set value(value: T) {\n if (this._value === value) {\n return;\n }\n\n this.emit(value);\n }\n\n subscribe(cb: SubFunction<T>, options?: ISubOptions): Subscription {\n const result = super.subscribe(cb, options);\n cb(this._value);\n return result;\n }\n\n emit(data: T, options?: IEmitOptions): this {\n if (this._value === data) {\n return this;\n }\n\n this._value = data;\n return super.emit(data, options);\n }\n}\n","import { NimmstaLayout } from '@nimmsta/web-library';\n\nconst LOADING_LAYOUT = `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<NimmstaLayout name=\"Loading Layout\">\n <device width=\"1.54\" height=\"1.54\" pxx=\"200\" pxy=\"200\">\n <screen default=\"true\" name=\"default\">\n <staticElements>\n <statusbar/>\n <cell horizontalAlignment=\"center\" y=\"50\" fontSize=\"21\">Loading...</cell>\n <cell horizontalAlignment=\"center\" padding=\"10pt\" fontSize=\"17\" wrapMode=\"wrap\" maxLines=\"0\" name=\"title\">\n </cell>\n </staticElements>\n </screen>\n </device>\n</NimmstaLayout>`;\n\n/**\n * LoadingLayout to display on the scanner\n */\nexport class LoadingLayout extends NimmstaLayout {\n constructor(title: string) {\n super(LOADING_LAYOUT, { title });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NimmstaDevice } from '@nimmsta/web-library';\nimport { Mutex } from 'async-mutex';\nimport { Workflow } from '../../models/Workflow';\nimport { Job, JobAppData, JobRepresentation } from '../../models/job/Job';\nimport { IWorkflowHandler } from '../../IWorkflowHandler';\nimport { APIParameters } from '../../models/API';\nimport { DefaultEndpoints } from '../api/defaultEndpoints';\nimport { PlatformController } from './PlatformController';\nimport { DeviceAPIWrapper } from './DeviceAPIWrapper';\nimport { Lang } from '../lang/lang';\nimport { WorkflowResponse } from '../model/WorkflowExecutionResponse';\nimport { PlatformError } from '../errors/PlatformError';\nimport { platformErrorFromCause } from '../errors/ErrorHandling';\nimport { AccessTokenResult } from './IPlatformOAuthDelegate';\nimport { JwtParser } from '../../util/JwtParser';\n\n/** Seconds before expiry at which we refresh the token. */\nconst REFRESH_SKEW_SECONDS = 30;\n\nexport interface PlatformWorkflowEventControllerOptions {\n shouldUseOAuth: boolean;\n executionId: string | null;\n device: NimmstaDevice;\n platformController: PlatformController;\n apiWrapper: DeviceAPIWrapper;\n evalWithContextAsyncThrow: <R> (code: string, context: { [id: string]: any}) => Promise<R>;\n translations: Lang;\n workflowResponse: WorkflowResponse;\n onError: (error: any) => void;\n setWorkflowAppData: (appData?: JobAppData[]) => void;\n onLocaleChanged: (locale: string) => void;\n storeProgress: (workflow: Workflow, job: JobRepresentation, data: any) => void;\n obtainAccessToken?: (token: string | null) => Promise<AccessTokenResult>;\n}\n\nexport class PlatformWorkflowEventController implements IWorkflowHandler {\n private defaultEndpoints: DefaultEndpoints;\n private accessToken: string | null = null;\n private idToken: string | null = null;\n private expiresAt: number | null = null;\n private authFlowError = false;\n private mutex = new Mutex();\n\n constructor(\n options: PlatformWorkflowEventControllerOptions,\n private executionId = options.executionId,\n private device = options.device,\n private platformController = options.platformController,\n private apiWrapper = options.apiWrapper,\n private evalWithContextAsyncThrow = options.evalWithContextAsyncThrow,\n private translations = options.translations,\n private workflowResponse = options.workflowResponse,\n private _onError = options.onError,\n private setWorkflowAppData = options.setWorkflowAppData,\n private onLocaleChanged = options.onLocaleChanged,\n private storeProgress = options.storeProgress,\n private shouldUseOAuth = options.shouldUseOAuth ?? false,\n private obtainAccessToken = options.obtainAccessToken ?? (() => Promise.resolve({ accessToken: '' })),\n ) {\n this.defaultEndpoints = new DefaultEndpoints(apiWrapper, () => options.platformController.whoami.value);\n }\n\n private applyTokenResult(result: AccessTokenResult): void {\n this.accessToken = result.accessToken || null;\n this.idToken = result.idToken ?? null;\n this.expiresAt = result.expiresAt ?? null;\n }\n\n /** True if we have no token, or it is expired / within skew of expiry. */\n private needRefresh(): boolean {\n if (!this.accessToken) return true;\n if (this.expiresAt != null) {\n const now = Math.floor(Date.now() / 1000);\n return this.expiresAt <= now + REFRESH_SKEW_SECONDS;\n }\n return JwtParser.isExpired(this.accessToken, REFRESH_SKEW_SECONDS);\n }\n\n private async funCatchedAndMapToPlatformError<T>(\n context: string,\n fn: () => Promise<T>,\n tokenRetry = true,\n ): Promise<T> {\n try {\n return await fn();\n } catch (e: any) {\n if (e instanceof PlatformError) {\n throw e;\n }\n\n if (tokenRetry && e.status === 401 && this.accessToken && this.obtainAccessToken) {\n try {\n const result = await this.obtainAccessToken(this.accessToken);\n this.applyTokenResult(result);\n return await this.funCatchedAndMapToPlatformError(context, fn);\n } catch (tokenError) {\n console.log('Refreshing Token Failed', tokenError);\n }\n }\n\n const platformError = platformErrorFromCause(e, this.translations, context);\n\n console.log('PlatformError', platformError);\n throw platformError;\n }\n }\n\n done(workflow: Workflow, job: Job, stopWorkflow = true, jobToPass: Job | undefined = undefined): Promise<void> {\n return this.funCatchedAndMapToPlatformError(\n 'completeJob',\n () => this.platformController.completeCurrentJob(workflow, job, stopWorkflow, jobToPass),\n );\n }\n\n exit(workflow: Workflow, restartWorkflow = true): Promise<void> {\n if (restartWorkflow) {\n const wfIdentifier = this.platformController.currentWorkflowExecution.value?.workflow?.identifier;\n return this.platformController.startWorkflowByIdentifier(\n workflow.doneOrSkipWorkflowIdentifier === undefined\n ? wfIdentifier\n : workflow.doneOrSkipWorkflowIdentifier,\n );\n } else {\n return this.platformController.exitWorkflow(workflow, workflow.job);\n }\n }\n\n cancelled(workflow: Workflow, job: Job, jobToPass?: Job): Promise<void> {\n return this.funCatchedAndMapToPlatformError(\n 'cancelJob',\n () => this.platformController.cancelCurrentJob(workflow, job, jobToPass),\n );\n }\n skipped(workflow: Workflow, job: Job, jobToPass?: Job): Promise<void> {\n return this.funCatchedAndMapToPlatformError(\n 'skipJob',\n () => this.platformController.skipCurrentJob(workflow, job, jobToPass),\n );\n }\n stop(workflow: Workflow, job: Job): Promise<void> {\n return this.funCatchedAndMapToPlatformError(\n 'stopJob',\n () => this.platformController.stopCurrentJob(workflow, job),\n );\n }\n onError(error: any): void {\n\n console.error('Error in workflow handler', this.executionId, error, error?.stack);\n\n // ignore logging to cloud once the workflow execution has changed\n if (!this.executionId || this.platformController.currentWorkflowExecution.value?.id !== this.executionId) {\n return;\n }\n\n this._onError(error);\n\n // Provide a minimal Job object for logging, as null is not allowed\n const jobForLog = {\n id: 'error-job',\n // Add other required Job fields with default or dummy values as needed\n // If Job is an interface, fill in all required properties\n results: [],\n app: [],\n // ...other fields as required by Job interface\n };\n\n // Safely extract error properties\n const developerInfo = typeof error === 'object' && error !== null && 'developerInfo' in error ? (error as { developerInfo?: unknown }).developerInfo : undefined;\n const stack = typeof error === 'object' && error !== null && 'stack' in error ? (error as { stack?: unknown }).stack : undefined;\n const message = typeof error === 'object' && error !== null && 'message' in error ? (error as { message?: unknown }).message : undefined;\n\n void this.apiWrapper.logEventAsync(this.executionId, jobForLog as any, {\n error: JSON.stringify(error, Object.getOwnPropertyNames(error)),\n developerInfo,\n stack,\n message,\n }, '', 'error');\n }\n async updateProgress(workflow: Workflow, job: Job, eventName: string, data: any, condition: string): Promise<void> {\n // ignore once the workflow execution has changed\n if (!this.executionId || this.platformController.currentWorkflowExecution.value?.id !== this.executionId) {\n return;\n }\n\n\n console.log(`Update progress for job ${eventName}`);\n\n if (workflow.currentWorkflowStep?.neverStoreState !== true) {\n this.storeProgress({ ...workflow }, { ...job }, { ...data });\n }\n\n\n console.log(`Update progress - store progress done ${eventName}`);\n\n this.setWorkflowAppData(job?.app);\n\n console.log(`Update progress for job done ${eventName}`);\n await this.apiWrapper.logEventAsync(this.executionId, job, data, condition, eventName);\n\n\n console.log(`Update progress - log event done ${eventName}`);\n }\n\n async fetchFromDataSource<T>(\n dataSource: string,\n endpointName: string,\n requestOverride: APIParameters,\n abortSignal?: AbortSignal,\n ): Promise<T> {\n this.platformController.isFetchingDataSource = true;\n\n try {\n return await this.funCatchedAndMapToPlatformError(\n 'fetchFromDataSource',\n async () => {\n let localRequestOverride: APIParameters = requestOverride || {};\n if (this.shouldUseOAuth) {\n if (this.needRefresh()) {\n await this.obtainAndSetAccessToken();\n }\n\n localRequestOverride = {\n ...localRequestOverride,\n header: {\n Authorization: `Bearer ${this.accessToken}`,\n ...localRequestOverride?.header,\n },\n };\n }\n\n return this.apiWrapper.fetchFromDataSource(\n dataSource,\n endpointName,\n localRequestOverride,\n this.defaultEndpoints,\n this.workflowResponse,\n this.evalWithContextAsyncThrow,\n this.translations,\n abortSignal,\n );\n },\n );\n } finally {\n this.platformController.isFetchingDataSource = false;\n }\n }\n\n startWorkflow(identifier: string, jobToClose?: Job, jobToPass?: Job): void {\n this.platformController.startWorkflowByIdentifier(identifier, jobToClose, jobToPass);\n }\n createUniqueJob(workflow: Workflow, jobToPass?: Job): Promise<Job> {\n return this.funCatchedAndMapToPlatformError(\n 'createUniqueJob',\n () => this.apiWrapper.createUniqueJob(this.executionId, workflow, jobToPass, this.device),\n );\n }\n onLocaleSet(locale: string): void {\n this.onLocaleChanged(locale);\n }\n\n sendEmail(\n emailIdentifier: string,\n context: any,\n signal?: AbortSignal,\n ) {\n this.apiWrapper.sendEmail(emailIdentifier, context, signal);\n }\n\n async onBeforeShowWorkflowOnDevice(): Promise<void> {\n if (this.shouldUseOAuth && this.needRefresh()) {\n await this.obtainAndSetAccessToken();\n }\n }\n\n async obtainAndSetAccessToken(): Promise<void> {\n await this.mutex.runExclusive(async () => {\n try {\n const result = await this.obtainAccessToken(this.accessToken);\n this.applyTokenResult(result);\n } catch (e: any) {\n console.error('Error obtaining access token', e);\n const err = platformErrorFromCause(e, this.translations, 'obtainAndSetAccessToken');\n throw err;\n }\n });\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nfunction rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\nexports.default = rng;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_js_1 = require(\"./validate.js\");\nfunction version(uuid) {\n if (!(0, validate_js_1.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n return parseInt(uuid.slice(14, 15), 16);\n}\nexports.default = version;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return (x & y) ^ (~x & z);\n case 1:\n return x ^ y ^ z;\n case 2:\n return (x & y) ^ (x & z) ^ (y & z);\n case 3:\n return x ^ y ^ z;\n }\n}\nfunction ROTL(x, n) {\n return (x << n) | (x >>> (32 - n));\n}\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n const newBytes = new Uint8Array(bytes.length + 1);\n newBytes.set(bytes);\n newBytes[bytes.length] = 0x80;\n bytes = newBytes;\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n for (let j = 0; j < 16; ++j) {\n arr[j] =\n (bytes[i * 64 + j * 4] << 24) |\n (bytes[i * 64 + j * 4 + 1] << 16) |\n (bytes[i * 64 + j * 4 + 2] << 8) |\n bytes[i * 64 + j * 4 + 3];\n }\n M[i] = arr;\n }\n M[N - 1][14] = ((bytes.length - 1) * 8) / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = ((bytes.length - 1) * 8) & 0xffffffff;\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = (ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t]) >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n H[0] = (H[0] + a) >>> 0;\n H[1] = (H[1] + b) >>> 0;\n H[2] = (H[2] + c) >>> 0;\n H[3] = (H[3] + d) >>> 0;\n H[4] = (H[4] + e) >>> 0;\n }\n return Uint8Array.of(H[0] >> 24, H[0] >> 16, H[0] >> 8, H[0], H[1] >> 24, H[1] >> 16, H[1] >> 8, H[1], H[2] >> 24, H[2] >> 16, H[2] >> 8, H[2], H[3] >> 24, H[3] >> 16, H[3] >> 8, H[3], H[4] >> 24, H[4] >> 16, H[4] >> 8, H[4]);\n}\nexports.default = sha1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction md5(bytes) {\n const words = uint8ToUint32(bytes);\n const md5Bytes = wordsToMd5(words, bytes.length * 8);\n return uint32ToUint8(md5Bytes);\n}\nfunction uint32ToUint8(input) {\n const bytes = new Uint8Array(input.length * 4);\n for (let i = 0; i < input.length * 4; i++) {\n bytes[i] = (input[i >> 2] >>> ((i % 4) * 8)) & 0xff;\n }\n return bytes;\n}\nfunction getOutputLength(inputLength8) {\n return (((inputLength8 + 64) >>> 9) << 4) + 14 + 1;\n}\nfunction wordsToMd5(x, len) {\n const xpad = new Uint32Array(getOutputLength(len)).fill(0);\n xpad.set(x);\n xpad[len >> 5] |= 0x80 << len % 32;\n xpad[xpad.length - 1] = len;\n x = xpad;\n let a = 1732584193;\n let b = -271733879;\n let c = -1732584194;\n let d = 271733878;\n for (let i = 0; i < x.length; i += 16) {\n const olda = a;\n const oldb = b;\n const oldc = c;\n const oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return Uint32Array.of(a, b, c, d);\n}\nfunction uint8ToUint32(input) {\n if (input.length === 0) {\n return new Uint32Array();\n }\n const output = new Uint32Array(getOutputLength(input.length * 8)).fill(0);\n for (let i = 0; i < input.length; i++) {\n output[i >> 2] |= (input[i] & 0xff) << ((i % 4) * 8);\n }\n return output;\n}\nfunction safeAdd(x, y) {\n const lsw = (x & 0xffff) + (y & 0xffff);\n const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\nexports.default = md5;\n","import { NimmstaLayout } from '@nimmsta/web-library';\n\nconst ERROR_LAYOUT_WITH_SKIP = `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<NimmstaLayout name=\"Error Layout\">\n <device width=\"1.54\" height=\"1.54\" pxx=\"200\" pxy=\"200\">\n <screen default=\"true\" name=\"default\">\n <staticElements>\n <statusbar/>\n <cell horizontalAlignment=\"center\" fontSize=\"17\" wrapMode=\"wrap\" maxLines=\"0\" name=\"error\"></cell>\n <button x=\"5\" y=\"150\" type=\"inverted_rounded\" horizontalAlignment=\"center\"\n width=\"190\" height=\"45\" name=\"retry\">RETRY</button>\n </staticElements>\n </screen>\n </device>\n</NimmstaLayout>`;\n\n/**\n * ErrorLayout to display on the scanner\n */\nexport class ErrorLayout extends NimmstaLayout {\n static RETRY_BUTTON = 'retry';\n\n constructor(error: string) {\n super(ERROR_LAYOUT_WITH_SKIP, { error });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ActionResponse, IAction, NimmstaConnectionManager } from '@nimmsta/web-library';\nimport { IAccount } from '../../model/IAccount';\nimport { JobEvent } from '../../model/JobEvent';\nimport { HttpClient } from '../httpClient/HttpInterfaces';\nimport { IPlatformConnector } from './IPlatformConnector';\nimport { HttpClientActionImpl } from '../httpClient/HttpClientAction';\nimport { PlatformGetAccountAction } from './actions/PlatformGetAccountAction';\nimport { AccountImpl } from '../../model/AccountImpl';\nimport { PlatformUpdateAccountAction } from './actions/PlatformUpdateAccountAction';\nimport { PlatformUploadLogFileAction } from './actions/PlatformUploadLogFileAction';\nimport { PlatformLogEventAction } from './actions/PlatformLogEventAction';\nimport { PlatformPairWithAction } from './actions/PlatformPairWithAction';\nimport { HTTPError } from '../../errors/HTTPError';\nimport { TimerUtils } from '../../../util/TimerUtil';\nimport { PlatformError } from '../../errors/PlatformError';\n\nexport class PlatformCoreLibConnectorImpl implements IPlatformConnector {\n public account: AccountImpl;\n public httpClient: HttpClient;\n private connectionManager: NimmstaConnectionManager;\n private updateAccountTimeoutRunning = false;\n\n async pairWith(qrcode: string, deviceName: string): Promise<AccountImpl> {\n const response = await this.sendActionWithSuccessOrThrow(new PlatformPairWithAction({ qrcode, deviceName }));\n\n this.account = AccountImpl.fromJSON(response.data as any, () => {\n this.updateAccountDelayed();\n });\n\n return this.account;\n }\n\n async logEvent(logEvent: JobEvent) {\n await this.sendActionWithSuccessOrThrow(new PlatformLogEventAction(logEvent));\n }\n\n async updateAccount(account: IAccount): Promise<AccountImpl> {\n try {\n await this.sendActionWithSuccessOrThrow(new PlatformUpdateAccountAction(account));\n return this.account;\n } catch (e) {\n throw new Error(`Failed to update account due to ${e.message}`);\n }\n }\n\n async uploadLogFile(): Promise<void> {\n try {\n await this.sendActionWithSuccessOrThrow(new PlatformUploadLogFileAction());\n } catch (e) {\n throw new PlatformError(`Failed to upload log file due to ${e.message}`, e);\n }\n }\n\n private async sendActionWithSuccessOrThrow(action: IAction) {\n try {\n const response = await this.connectionManager.sendAction(action);\n if (!response.success) {\n throw this.parseErrorResponseToError(action, response);\n }\n return response;\n } catch (errorResponse) {\n throw this.parseErrorResponseToError(action, errorResponse);\n }\n }\n\n private parseErrorResponseToError(action: IAction, response: ActionResponse): Error {\n if (response.data?.isHttpError) {\n return new HTTPError(\n response.data.message as string,\n response.data.status as number,\n response.data.responseText as string,\n );\n }\n\n return new PlatformError(\n (response.data?.message as string ?? `Failed to execute action ${action.name} due to unknown error`),\n new Error(response.message),\n -1,\n undefined,\n undefined,\n response.data as { [key: string]: any },\n );\n }\n\n async bindToConnectionManager(\n connectionManager: NimmstaConnectionManager,\n os?: string,\n appVersion?: string,\n ): Promise<void> {\n this.connectionManager = connectionManager;\n this.httpClient = new HttpClientActionImpl(connectionManager);\n const accountResponse = await connectionManager.sendAction(\n new PlatformGetAccountAction(os, appVersion),\n );\n if (accountResponse.success) {\n this.account = AccountImpl.fromJSON(accountResponse.data as any, () => {\n this.updateAccountDelayed();\n });\n } else {\n throw new Error(`Failed to get account due to ${accountResponse.message}`);\n }\n }\n\n async updateAccountDelayed() {\n if (this.updateAccountTimeoutRunning) {\n return;\n }\n this.updateAccountTimeoutRunning = true;\n TimerUtils.setTimeout(() => {\n this.updateAccountTimeoutRunning = false;\n this.updateAccount(this.account);\n }, 500);\n }\n}\n"," \nimport { TriggerMode } from '@nimmsta/web-library';\nimport { WorkflowResponse } from '../model/WorkflowExecutionResponse';\n\nconst defaultIdleWorkflow: () => WorkflowResponse = () => ({\n id: 'DefaultIdleWorkflow',\n identifier: 'default-idle',\n lastUpdatedAt: '',\n definition: {\n workflowName: 'Idle Workflow1',\n created: '2023-02-14T01:51:09.871Z',\n updated: '2023-02-14T01:51:09.871Z',\n description: 'Idle workflow',\n workflowSteps: [\n {\n workflowStepName: 'Idle Step',\n isInitialStep: true,\n triggerMode: TriggerMode.Disabled,\n layout: `\n <?xml version=\"1.0\" encoding=\"utf-8\"?>\n <NimmstaLayout name=\"Open Jobs Layout\">\n <staticElements>\n <statusbar/>\n <cell horizontalAlignment=\"center\" fontSize=\"17pt\" padding=\"4\" fontFamily=\"Bahnschrift_SemiBold\" y=\"40\" wrapMode=\"wrap\" maxLines=\"2\" name=\"workflow\">Ready to Work</cell>\n <cell horizontalAlignment=\"center\" fontSize=\"auto\" wrapMode=\"wrap\" padding=\"10\" paddingTop=\"0\" paddingBottom=\"35\" maxLines=\"0\" name=\"error\"></cell>\n <button horizontalAlignment=\"center\" y=\"140\" height=\"60\" name=\"start-first-job\">Start Working</button>\n </staticElements>\n </NimmstaLayout>\n `,\n layoutParams: {\n workflow: \"workflowStep.lastError != null ? (workflowStep.lastError?.translatedTitle ?? translations.error) : workflowStep.whoAmI == null ? translations.ready_to_work : translations.hello_comma + workflowStep.whoAmI?.firstName + ' ' + workflowStep.whoAmI?.lastName\",\n error: 'workflowStep.lastError?.translatedRecoveryInfo ?? \"\"',\n 'start-first-job': 'translations.start_working',\n },\n loadData: {\n endpoint: '_legacy/whoami',\n preProcessCode: 'workflowStep.lastError = null',\n postProcessCode: 'workflowStep.whoAmI = response;',\n onError: [\n {\n code: 'workflowStep.lastError = data.error',\n },\n ],\n },\n onButtonPress: [\n {\n condition: 'data.button.name == \"start-first-job\"',\n targetWorkflow: 'default/StartWorkerWorkflow',\n },\n ],\n },\n ],\n },\n});\n\nexport { defaultIdleWorkflow };\n","import { NimmstaConnectionManager } from '@nimmsta/web-library';\nimport { HttpClient, HttpResponse } from './HttpInterfaces';\nimport { FetchFromServerAction } from './FetchFromServerAction';\nimport { HTTPError } from '../../errors/HTTPError';\n\nexport class HttpClientActionImpl implements HttpClient {\n private connectionManager: NimmstaConnectionManager;\n\n constructor(connectionManager: NimmstaConnectionManager) {\n this.connectionManager = connectionManager;\n }\n\n async executeRequest(\n url: string,\n method: string,\n headers: Record<string, string>,\n body: string,\n signal?: AbortSignal,\n ): Promise<HttpResponse> {\n const response = await this.connectionManager.sendAction(new FetchFromServerAction({\n url, method, headers, body,\n }));\n\n if (signal?.aborted) {\n const abortError = new Error('Request was aborted');\n abortError.name = 'AbortError';\n throw abortError;\n }\n\n if (response.success) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const httpResponse = response.data as any as HttpResponse;\n if (!httpResponse.ok) {\n throw new HTTPError(\n `Error fetching from ${url} response with status ${httpResponse.status}`,\n httpResponse.status,\n httpResponse.responseText,\n );\n }\n return httpResponse;\n }\n\n throw new Error(`Failed to fetch data from server with error: ${response.message}`);\n }\n}\n","import { APIParameters } from '../../models/API';\nimport { DeviceAPIWrapper } from '../controller/DeviceAPIWrapper';\nimport { WhoamIResponse } from '../model/WhoamIResponse';\n\nexport class DefaultEndpoints {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n defaultEndpoints: { [key: string]: (parameters: APIParameters) => Promise<any> } = {\n '_legacy/whoami': async (_: APIParameters) => this.whoAmIFetch() ?? this.api.fetchWhoAmIAsync(),\n };\n\n constructor(\n private api: DeviceAPIWrapper,\n private whoAmIFetch: () => WhoamIResponse | null,\n ) {\n this.api = api;\n }\n}\n","import { NimmstaLayout } from '@nimmsta/web-library';\n\nexport class UserStillActiveLayout extends NimmstaLayout {\n constructor(\n stillWorkingMessage = 'Are you still Working?',\n stopJobMessage = 'No - Stop Job',\n warning = 'Warning',\n yes = 'Yes',\n ) {\n const xml = `\n <?xml version=\"1.0\" encoding=\"utf-8\"?>\n <NimmstaLayout name=\"Workflow Error Layout\">\n <staticElements>\n <statusbar/>\n <cell horizontalAlignment=\"center\" y=\"30\" fontSize=\"22pt\" name=\"title\">Warning</cell>\n <cell horizontalAlignment=\"center\" wrapMode=\"wrap\" maxLines=\"2\" paddingBottom=\"5pt\" name=\"stillWorking\"></cell>\n <button horizontalAlignment=\"center\" name=\"continue-workflow\">Yes</button>\n <button horizontalAlignment=\"center\" y=\"165\" name=\"stop-job\"></button>\n </staticElements>\n </NimmstaLayout>\n `;\n super(xml, {\n stillWorking: stillWorkingMessage, 'stop-job': stopJobMessage, title: warning, 'continue-workflow': yes,\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Logger, NimmstaDevice } from '@nimmsta/web-library';\nimport { v4 as uuidv4 } from 'uuid';\nimport { IPlatformAPI } from '../api/IPlatformAPI';\nimport { APIParameters } from '../../models/API';\nimport { DefaultEndpoints } from '../api/defaultEndpoints';\nimport { getErrorUserMessageRecoveryInfo, getErrorUserMessageTitle } from '../errors/ErrorHandling';\nimport { Lang } from '../lang/lang';\nimport { WhoamIResponse } from '../model/WhoamIResponse';\nimport { Workflow } from '../../models/Workflow';\nimport { Job } from '../../models/job/Job';\nimport { WorkflowExecutionResponse, WorkflowResponse } from '../model/WorkflowExecutionResponse';\nimport { PlatformError } from '../errors/PlatformError';\nimport { EndpointResponse } from '../model/EndpointResponse';\nimport { WorkflowController } from '../../WorkflowController';\nimport { GetOperationDataAction } from '../api/operationData/OperationDataAction';\nimport { OperationDataResponse } from '../api/operationData/OperationDataResponse';\n\nexport class DeviceAPIWrapper {\n private cachedDataConnectionInfo: { [id: string]: EndpointResponse } = {};\n\n private logger: Logger;\n\n constructor(private api: IPlatformAPI) {\n this.logger = Logger.for('DeviceAPIWrapper');\n }\n\n clearCache() {\n this.cachedDataConnectionInfo = {};\n }\n\n async getOperationsData(device: NimmstaDevice, force = false): Promise<OperationDataResponse|undefined> {\n if (device.deviceState?.isConnected && (force || (device as any).lastOperationData === undefined)) {\n const response = await (device as any).sendAction(new GetOperationDataAction());\n if (response.success) {\n const operationData = response.data as unknown as OperationDataResponse;\n\n (device as any).lastOperationData = operationData;\n return operationData;\n } else {\n throw new Error('Failed to get operation data');\n }\n } else {\n return (device as any).lastOperationData;\n }\n }\n\n async smartWatchConnected(device: NimmstaDevice, signal?: AbortSignal) {\n // get response to make sure we have the latest data\n const response = await device.getDeviceInfo();\n this.logger.debug('Got device info response', response, device?.deviceState);\n await this.api.smartWatchConnectedAsync({\n deviceSerial: device?.serialNumber,\n deviceType: 'HS 50',\n deviceAddress: device?.address,\n deviceVersions: (device?.deviceState as any)?.bleFirmwareVersion ? device.deviceState : null,\n operationsData: JSON.stringify((await this.getOperationsData(device, true) ?? {})),\n }, signal);\n }\n\n async smartWatchDisconnected(device: NimmstaDevice, reason?: string, signal?: AbortSignal) {\n if (device?.serialNumber !== undefined) {\n this.api.smartWatchDisconnectedAsync({\n deviceSerial: device?.serialNumber,\n deviceType: 'HS 50',\n deviceAddress: device?.address,\n deviceVersions: (device?.deviceState as any)?.bleFirmwareVersion ? device.deviceState : null,\n operationsData: JSON.stringify((await this.getOperationsData(device, true) ?? {})),\n }, reason, signal);\n }\n }\n\n async fetchFromDataSource<T>(\n dataSource: string,\n endpointName: string,\n requestOverride: APIParameters,\n defaultEndpoints: DefaultEndpoints,\n workflowResponse: WorkflowResponse,\n evalWithContextAsyncThrow: <R> (code: string, context: { [id: string]: any}) => Promise<R>,\n translations: Lang,\n signal?: AbortSignal,\n ): Promise<T> {\n try {\n this.logger.debug(\n 'Fetch from data source',\n dataSource,\n endpointName,\n requestOverride,\n workflowResponse.dataConnection?.identifier,\n );\n\n if (defaultEndpoints.defaultEndpoints[endpointName] !== undefined) {\n return await defaultEndpoints.defaultEndpoints[endpointName](requestOverride);\n }\n\n const endpoint = await this.getEndpointInfoFromCacheOrCloud(\n dataSource,\n endpointName,\n workflowResponse,\n signal,\n );\n const context = { request: requestOverride, requestOverride, endpoint };\n if (endpoint?.preprocess) {\n const result = await evalWithContextAsyncThrow(endpoint.preprocess, context);\n if (result) {\n context.request = result;\n }\n }\n\n const response = await this.api.executeDataSourceEndpointAsync(\n dataSource ?? workflowResponse.dataConnection?.identifier,\n endpointName,\n context.request,\n signal,\n );\n\n const responseContext = {\n response,\n };\n\n if (endpoint?.postprocess) {\n const result = await evalWithContextAsyncThrow(endpoint.postprocess, responseContext);\n if (result) {\n responseContext.response = result;\n }\n }\n\n return responseContext.response;\n } catch (e) {\n const title = getErrorUserMessageTitle(e, translations, 'fetchFromDataSource');\n throw new PlatformError(\n title,\n e,\n e.status,\n title,\n getErrorUserMessageRecoveryInfo(e, translations, 'fetchFromDataSource'),\n );\n }\n }\n\n private async getEndpointInfoFromCacheOrCloud(\n dataSource: string,\n endpointName: string,\n workflowResponse: WorkflowResponse,\n signal?: AbortSignal,\n ): Promise<EndpointResponse | undefined> {\n if (!dataSource || workflowResponse.dataConnection?.identifier === dataSource) {\n const endpoint = workflowResponse.dataConnection?.endpoints.find((e) => e.identifier === endpointName);\n return endpoint;\n }\n\n const key = `${dataSource}/${endpointName}`;\n\n if (this.cachedDataConnectionInfo[key] !== undefined) {\n return this.cachedDataConnectionInfo[key];\n }\n\n if (!dataSource && !workflowResponse.dataConnection?.identifier) {\n throw new Error('No data connection identifier found');\n }\n\n const endpointInfo = await this.api.getEndpointFromDataSourceAsync(\n dataSource ?? workflowResponse.dataConnection?.identifier,\n endpointName,\n signal,\n );\n this.cachedDataConnectionInfo[key] = endpointInfo;\n return endpointInfo;\n }\n\n async fetchWhoAmIAsync(signal?: AbortSignal, device?: NimmstaDevice): Promise<WhoamIResponse> {\n return this.api.fetchWhoAmIAsync(signal, device?.serialNumber);\n }\n\n async logEventAsync(\n executionId: string,\n job: Job,\n data: any,\n condition: string,\n eventName: string,\n ): Promise<void> {\n const eventId: string = uuidv4();\n this.api.logEventAsync({\n eventId,\n executionId,\n eventName,\n results: job?.results ?? job,\n eventData: data,\n condition,\n timestamp: new Date(),\n });\n }\n\n async pairWithAsync(qrcode: string, signal?: AbortSignal): Promise<void> {\n return this.api.pairWithAsync(qrcode, signal);\n }\n\n async stopJob(signal?: AbortSignal) {\n return this.api.stopJobAsync(signal);\n }\n\n async cancelJob(signal?: AbortSignal) {\n return this.api.cancelJobAsync(signal);\n }\n\n async skipJob(signal?: AbortSignal) {\n return this.api.skipJobAsync(signal);\n }\n\n async startWorkflowWithIdentifier(\n workflowIdentifier: string,\n jobToClose: Job | undefined,\n jobToPass: Job | undefined,\n previousExecutionId: string | undefined,\n device?: NimmstaDevice,\n signal?: AbortSignal,\n ): Promise<WorkflowExecutionResponse> {\n let identifier = workflowIdentifier;\n if (workflowIdentifier === 'default/StartWorkerWorkflow' || workflowIdentifier === 'default/StartWorkerWorkflow') {\n identifier = null;\n }\n return this.api.startNextWorkflowAsync(\n identifier,\n {\n eventName: 'startWorkflow',\n executionId: previousExecutionId,\n results: jobToClose?.results ?? jobToClose,\n job: jobToClose,\n timestamp: new Date(),\n device: {\n deviceSerial: device?.serialNumber,\n deviceType: 'HS 50',\n deviceAddress: device?.address,\n deviceVersions: (device?.deviceState as any)?.bleFirmwareVersion ? device.deviceState : null,\n operationsData: JSON.stringify((await this.getOperationsData(device) ?? {})),\n },\n },\n jobToPass,\n WorkflowController.supportedSchemaVersion,\n signal,\n );\n }\n\n async completeJob(\n executionId: string,\n job: Job,\n workflow: Workflow,\n device: NimmstaDevice,\n signal?: AbortSignal,\n ) {\n return this.api.completeJobAsync(\n {\n eventName: 'completeJob',\n executionId,\n results: job?.results ?? job,\n data: { workflow, job, date: Date.now() },\n timestamp: new Date(),\n device: {\n deviceSerial: device?.serialNumber,\n deviceType: 'HS 50',\n deviceAddress: device?.address,\n deviceVersions: (device?.deviceState as any)?.bleFirmwareVersion ? device.deviceState : null,\n operationsData: JSON.stringify((await this.getOperationsData(device) ?? {})),\n },\n },\n signal,\n );\n }\n\n async createUniqueJob(\n executionId: string,\n workflow: Workflow,\n job: Job,\n device: NimmstaDevice,\n signal?: AbortSignal,\n ): Promise<Job> {\n return this.api.createUniqueJob(\n {\n eventName: 'createUniqueJob',\n executionId,\n results: job?.results ?? job,\n data: { workflow, job, date: Date.now() },\n timestamp: new Date(),\n device: {\n deviceSerial: device?.serialNumber,\n deviceType: 'HS 50',\n deviceAddress: device?.address,\n deviceVersions: (device?.deviceState as any)?.bleFirmwareVersion ? device.deviceState : null,\n operationsData: JSON.stringify((await this.getOperationsData(device) ?? {})),\n },\n },\n signal,\n );\n }\n\n async uploadCurrentLogFile(): Promise<void> {\n return this.api.uploadCurrentLogFile();\n }\n\n async sendEmail(\n emailIdentifier: string,\n context: any,\n signal?: AbortSignal,\n ) {\n return this.api.sendEmail(emailIdentifier, context, signal);\n }\n}\n","import { v4 as uuidv4 } from 'uuid';\nimport { IAccount } from './IAccount';\nimport { WhoamIResponse } from './WhoamIResponse';\nimport { WorkflowExecutionResponse } from './WorkflowExecutionResponse';\n\n/**\n * This implementation of IAccount calls an onUpdated method every time a property is updated.\n * This is useful for updating the UI when the account changes and also store it.\n */\nexport class AccountImpl implements IAccount {\n private _whoAmI: WhoamIResponse;\n private _currentExecution: WorkflowExecutionResponse;\n private _userId: string;\n private _deviceId: string;\n private _serverUri: string;\n private _isLoggedIn: boolean;\n private _onUpdated: (IAccount) => void;\n\n constructor(\n whoAmI: WhoamIResponse,\n userId: string,\n deviceId: string,\n serverUri: string,\n currentExecution: WorkflowExecutionResponse,\n isLoggedIn: boolean,\n onUpdated: (IAccount) => void,\n ) {\n this._whoAmI = whoAmI;\n this._userId = userId;\n this._deviceId = deviceId ?? uuidv4();\n this._serverUri = serverUri;\n this._currentExecution = currentExecution;\n this._isLoggedIn = isLoggedIn;\n this._onUpdated = onUpdated;\n\n if (!deviceId) {\n this._onUpdated(this);\n }\n }\n\n get whoAmI(): WhoamIResponse {\n return this._whoAmI;\n }\n\n set whoAmI(value: WhoamIResponse) {\n this._whoAmI = value;\n this._isLoggedIn = !!value;\n this._onUpdated(this);\n }\n\n get userId(): string {\n return this._userId;\n }\n\n set userId(value: string) {\n this._userId = value;\n this._onUpdated(this);\n }\n\n get deviceId(): string {\n return this._deviceId;\n }\n\n set deviceId(value: string) {\n this._deviceId = value;\n this._onUpdated(this);\n }\n\n get serverUri(): string {\n return this._serverUri;\n }\n\n set serverUri(value: string) {\n this._serverUri = value;\n this._onUpdated(this);\n }\n\n get isProduction(): boolean {\n return !this.serverUri\n || (\n !this.serverUri.includes('nimmsta-test.de')\n && !this.serverUri.includes('localhost')\n && !this.serverUri.includes('127.0.0.1')\n );\n }\n\n get testEnvironment(): string {\n // pattern is: backend.[ENV].cloud.nimmsta-test.de, we need to get [ENV]\n const parts = this._serverUri.split('.');\n if (parts.length > 2) {\n return `${parts[1]} Environment`;\n } else {\n return 'Test Environment';\n }\n }\n\n get currentExecution(): WorkflowExecutionResponse {\n return this._currentExecution;\n }\n\n set currentExecution(value: WorkflowExecutionResponse) {\n this._currentExecution = value;\n this._onUpdated(this);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static fromJSON(json: any, onUpdated: () => void): AccountImpl {\n return new AccountImpl(\n json?.whoAmI ?? json?._whoAmI,\n json?.userId ?? json?._userId,\n json?.deviceId ?? json?._deviceId,\n json?.serverUri ?? json?._serverUri ?? AccountImpl.defaultProdUris[0],\n json?.currentExecution ?? json?._currentExecution ?? json?.currentJob ?? json?._currentJob,\n json?.isLoggedIn ?? json?._isLoggedIn ?? false,\n onUpdated,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toJson(): {[key: string]: any} {\n return {\n whoAmI: this._whoAmI,\n userId: this._userId,\n deviceId: this._deviceId,\n serverUri: this._serverUri,\n currentExecution: this._currentExecution,\n };\n }\n\n get isLoggedIn(): boolean {\n return this._isLoggedIn;\n }\n\n static defaultProdUris = [\n 'https://backend.cloud.nimmsta.com/api/v1/', 'https://workflow-backend.workflow.nimmsta.com/api/v1/',\n 'https://backend.cloud.nimmsta.com/api/v1', 'https://workflow-backend.workflow.nimmsta.com/api/v1',\n ];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tryAcquire = exports.withTimeout = exports.Semaphore = exports.Mutex = void 0;\nvar tslib_1 = require(\"tslib\");\nvar Mutex_1 = require(\"./Mutex\");\nObject.defineProperty(exports, \"Mutex\", { enumerable: true, get: function () { return Mutex_1.default; } });\nvar Semaphore_1 = require(\"./Semaphore\");\nObject.defineProperty(exports, \"Semaphore\", { enumerable: true, get: function () { return Semaphore_1.default; } });\nvar withTimeout_1 = require(\"./withTimeout\");\nObject.defineProperty(exports, \"withTimeout\", { enumerable: true, get: function () { return withTimeout_1.withTimeout; } });\nvar tryAcquire_1 = require(\"./tryAcquire\");\nObject.defineProperty(exports, \"tryAcquire\", { enumerable: true, get: function () { return tryAcquire_1.tryAcquire; } });\ntslib_1.__exportStar(require(\"./errors\"), exports);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { WorkflowController } from './WorkflowController';\nimport { Action } from './models/Action';\nimport { Workflow } from './models/Workflow';\n\nexport class ActionController {\n private workflowController: WorkflowController;\n private action: Action;\n private workflow: Workflow;\n private data: any;\n private additionalContext: any;\n private onFinishedRequest: () => void;\n\n constructor(\n workflowController: WorkflowController,\n action: Action,\n workflow: Workflow,\n data: any = {},\n additionalContext = {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onFinishedRequest: () => void = () => { },\n ) {\n this.workflowController = workflowController;\n this.action = action;\n this.workflow = workflow;\n this.data = data;\n this.additionalContext = additionalContext;\n this.onFinishedRequest = onFinishedRequest;\n }\n\n execute() {\n // If action has name fetch the global action if found\n if (this.action.actionName) {\n // validate that somebody is not defining anything for actionName except that\n const keys = Object.keys(this.action);\n if (keys.some((key) => key !== 'actionName')) {\n throw new Error('For an action with \"actionName\", only \"actionName\" should be defined.');\n }\n\n for (const action of this.workflow.actions) {\n if (this.action.actionName === action.actionName) {\n this.action = action;\n break;\n }\n }\n }\n if (this.action.ledBurst) {\n this.workflowController.device.triggerLEDBurst(this.action.ledBurst);\n }\n if (this.action.vibratorBurst) {\n this.workflowController.device.triggerVibratorBurst(this.action.vibratorBurst);\n }\n if (this.action.beeperBurst) {\n this.workflowController.device.triggerBeeperBurst(this.action.beeperBurst);\n }\n if (this.action.code) {\n //* Reassign workflow.job to job to check condition\n //* Don't remove this\n //* Eval is needed to check the condition\n\n this.workflowController.evalWithContext(this.action.code, {\n ...this.additionalContext,\n data: this.data,\n }, this.onFinishedRequest);\n }\n }\n}\n","import { NimmstaLayout } from '@nimmsta/web-library';\n\nconst ERROR_LAYOUT_WITH_SKIP = `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<NimmstaLayout name=\"Error Layout\">\n <device width=\"1.54\" height=\"1.54\" pxx=\"200\" pxy=\"200\">\n <screen default=\"true\" name=\"default\">\n <staticElements>\n <statusbar/>\n <cell horizontalAlignment=\"center\" fontSize=\"17\" wrapMode=\"wrap\" maxLines=\"0\" name=\"error\"></cell>\n <button x=\"5\" y=\"101\" type=\"inverted_rounded\" horizontalAlignment=\"center\"\n width=\"190\" height=\"45\" name=\"retry\">RETRY</button>\n <button x=\"5\" y=\"149\" type=\"inverted_rounded\" horizontalAlignment=\"center\"\n width=\"190\" height=\"45\" name=\"skip\">SKIP</button>\n </staticElements>\n </screen>\n </device>\n</NimmstaLayout>`;\n\n/**\n * ErrorLayout to display on the scanner\n */\nexport class ErrorLayoutWithSkip extends NimmstaLayout {\n static SKIP_BUTTON = 'skip';\n static RETRY_BUTTON = 'retry';\n\n constructor(error: string, skipButtonText = 'SKIP') {\n super(ERROR_LAYOUT_WITH_SKIP, { error, skip: skipButtonText });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { v4 as uuidv4 } from 'uuid';\nimport { WorkflowJobOptions } from './WorkflowJobOptions';\n\nexport type JobAppDataInfo = string | {[id: string]: any};\nexport type JobAppData = [{[id: string]: JobAppDataInfo}];\n\nexport interface JobRepresentation {\n id: string;\n job: string;\n name: string;\n status: string;\n articles: {[id: string]: any}[];\n data: any;\n uniqueKey?: string;\n results: {[id: string]: any}[];\n app?: JobAppData[];\n currentArticleIndex: number;\n}\n\nexport class Job implements JobRepresentation {\n id: string;\n job: string;\n name: string;\n status = 'IN_PROGRESS';\n articles: {[id: string]: any}[] = [];\n data: any;\n results: {[id: string]: any}[] = [];\n uniqueKey?: string;\n completeJobOnStop?: boolean;\n // this represents app data.\n // It can be used like this:\n // [{\"job_name\": \"Job 1\"}, {\"articles\": [{...}, {...}]}]\n // this will result for the first array item in a text like \"Job 1\" and for the second\n // array item drawn as a table of articles\n // For articles, you can set a \"isChecked\": true, then the article will be marked as scanned (green background)\n app?: JobAppData[];\n\n // used to identify if we need to create job class or not\n isJobClass = true;\n\n currentArticleIndex: number;\n get currentArticle(): {[id: string]: any} {\n return this.results[this.currentArticleIndex];\n }\n\n constructor(\n job: string,\n articles: {[id: string]: any}[],\n id: string = uuidv4(),\n status = 'IN_PROGRESS',\n ) {\n this.job = job;\n this.name = job;\n this.id = id;\n this.status = status;\n this.articles = articles.map((row) => ({ ...row }));\n this.currentArticleIndex = 0;\n this.articles.forEach((article) => {\n const result = { scannedArticles: article['scannedArticles'] ?? 0, ...article };\n this.results.push(result);\n });\n this.data = this.articles;\n }\n\n /**\n * This is needed to update the app data with the job results and articles\n * if we continue the job as the reference is not maintained and needs to be fixed here.\n */\n private fixJobDataReferenceAndInit(jobOptions?: WorkflowJobOptions): void {\n if (this.app && Array.isArray(this.app)) {\n this.app = this.app.map((section) => {\n const newSection = { ...section };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const job = this;\n Object.entries(section).forEach(([key, value]) => {\n if (JSON.stringify(value) === JSON.stringify(job.results) as any) {\n (newSection as any)[key] = job.results;\n } else if (value === job.name as any) {\n (newSection as any)[key] = job.name;\n } else if (JSON.stringify(value) === JSON.stringify(job.articles) as any) {\n (newSection as any)[key] = job.articles;\n }\n });\n return newSection;\n });\n }\n\n if (jobOptions?.completeJobOnStop === true && this.completeJobOnStop !== false) {\n this.completeJobOnStop = jobOptions.completeJobOnStop;\n }\n\n // if resetting is disabled, we try to set job index based on check data\n if (jobOptions?.resetJobOnStop === false) {\n if (this.currentArticleIndex === 0) {\n // we first sort all items already \"check\" to the front\n this.results.sort((a, b) => {\n if (a['check'] === b['check']) {\n return 0;\n }\n return a['check'] ? -1 : 1;\n });\n\n // find last index of article that has checked set to something\n let lastCheckedIndex = -1;\n this.results.forEach((article, index) => {\n if (article['check']) {\n lastCheckedIndex = index;\n }\n });\n // then we set the current article index to the next one, so the user can continue working\n if (lastCheckedIndex >= 0) {\n this.currentArticleIndex = lastCheckedIndex + 1;\n }\n }\n }\n }\n\n static fromNameAndArticles(name: string, articles: {[id: string]: any}[], jobOptions?: WorkflowJobOptions): Job {\n const job = new Job(name, articles);\n job.fixJobDataReferenceAndInit(jobOptions);\n return job;\n }\n\n static fromJSON(json: any, jobOptions?: WorkflowJobOptions): any {\n if (json === null || json === undefined) {\n return json;\n }\n\n if (typeof json !== 'object') {\n throw new Error('JSON must be an object');\n }\n\n if (json instanceof Job) {\n return json;\n }\n\n if (json.data?.isJobClass) {\n return Job.fromJSON(json.data, jobOptions);\n }\n\n if (!json.isJobClass) {\n if (json.name && Array.isArray(json.data)) {\n // if the job comes from server and we do not want to reset it, then we take result instead of data\n // conditions: result must be set, an array, and not empty.\n const data = json.result && jobOptions?.resetJobOnStop === false\n && Array.isArray(json.result) && json.result.length > 0 ? json.result : json.data;\n const jobClass = new Job(json.name, data);\n jobClass.id = json.id;\n jobClass.status = json.status;\n jobClass.fixJobDataReferenceAndInit(jobOptions);\n return jobClass;\n }\n\n return json;\n }\n\n const job = new Job(json.job, json.articles);\n job.id = json.id ?? job.id;\n job.status = json.status ?? job.status;\n job.app = json.app;\n job.currentArticleIndex = json.currentArticleIndex;\n job.results = json.results ?? [];\n job.uniqueKey = json.uniqueKey;\n job.data = json.data;\n job.app = json.app;\n job.completeJobOnStop = json.completeJobOnStop ?? jobOptions?.completeJobOnStop;\n // check for any other properties that are not part of the class\n Object.keys(json).forEach((key) => {\n if (!Object.keys(job).includes(key)) {\n (job as any)[key] = json[key];\n }\n });\n job.fixJobDataReferenceAndInit(jobOptions);\n return job;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function errorAwareReplacer(_: string, value: unknown): unknown {\n if (value instanceof Error) {\n const errorObj: Record<string, unknown> = {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n\n Object.getOwnPropertyNames(value).forEach((prop) => {\n if (!(prop in errorObj)) {\n errorObj[prop] = (value as any)[prop];\n }\n });\n\n return errorObj;\n }\n\n return value;\n}\n\nexport function cleanErrorContextFromCircularReferences(\n context: Record<string, any>,\n seen: Set<any> = new Set(),\n): Record<string, any> | string {\n if (typeof context !== 'object' || context === null) {\n return context;\n }\n\n if (seen.has(context)) {\n return '[Circular]';\n }\n\n seen.add(context);\n\n const cleanedContext: Record<string, any> = {};\n for (const [key, value] of Object.entries(context)) {\n cleanedContext[key] = cleanErrorContextFromCircularReferences(value, seen);\n }\n\n return cleanedContext;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { errorAwareReplacer } from '../../util/ErrorAwareReplacer';\nimport { PlatformError } from './PlatformError';\n\nexport class PlatformEvalError extends PlatformError {\n code: string;\n asyncCode: string | undefined;\n context: { [id: string]: any };\n errorCorrelation: string;\n\n override get isIgnorable(): boolean {\n return false;\n }\n\n constructor(\n cause: Error,\n code: string,\n context: { [id: string]: any } = {},\n asyncCode: string|undefined = undefined,\n ) {\n const correlation = Math.random().toString(36).substring(2, 15);\n super(`Error executing code ${correlation}`); // Call the base class constructor with the message.\n\n this.errorCorrelation = correlation;\n this.cause = cause;\n this.code = code;\n this.asyncCode = asyncCode;\n // filter out device and replace with 'device' if it exists\n this.context = Object.fromEntries(\n Object.entries(context ?? {}).map(([key, value]) => {\n if (key === 'device') {\n return ['device', 'device'];\n }\n return [key, value];\n }),\n );\n\n Object.setPrototypeOf(this, new.target.prototype); // Ensure the prototype is set correctly\n this.name = this.constructor.name; // Automatically set the name to the class name\n\n // Set up stack trace excluding the constructor call\n if ((Error as any).captureStackTrace) {\n (Error as any).captureStackTrace(this, this.constructor);\n }\n }\n\n override get developerInfo(): { [id: string]: string | undefined } {\n let jsonContext;\n try {\n jsonContext = JSON.stringify(this.context, errorAwareReplacer);\n } catch (e: unknown) {\n jsonContext = `Error serializing context: ${(e as Error).message}`;\n }\n\n return {\n ...super.developerInfo,\n code: this.code,\n asyncCode: this.asyncCode,\n context: jsonContext,\n correlation: this.errorCorrelation,\n };\n }\n}\n"," \nimport { NimmstaLayout } from '@nimmsta/web-library';\n\nexport class PairAppLayout extends NimmstaLayout {\n constructor(pairApp = 'Pair App', scanQR = 'Scan the QR code using the Smart Watch or Camera.') {\n const xml = `\n <?xml version=\"1.0\" encoding=\"utf-8\"?>\n <NimmstaLayout name=\"Pair App Layout\">\n <staticElements>\n <statusbar/>\n <cell horizontalAlignment=\"center\" fontSize=\"22pt\" y=\"40\" name=\"title\">Pair App</cell>\n <cell horizontalAlignment=\"center\" wrapMode=\"wrap\" name=\"description\" padding=\"4pt\" maxLines=\"4\">Scan the QR code using the Smart Watch or Camera.</cell>\n </staticElements>\n </NimmstaLayout>\n `;\n super(xml, { title: pairApp, description: scanQR });\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst regex_js_1 = require(\"./regex.js\");\nfunction validate(uuid) {\n return typeof uuid === 'string' && regex_js_1.default.test(uuid);\n}\nexports.default = validate;\n","import { IAction } from '@nimmsta/web-library';\n\nexport class GetOperationDataAction implements IAction {\n public readonly name = 'GetOperationDataAction';\n public readonly isDeviceAction = true;\n}\n","import { PlatformError } from './PlatformError';\n\nexport class PairingError extends PlatformError {\n toString(): string {\n return `${this.name}: ${this.message} (cause: ${this.cause})`;\n }\n}\n","import { PlatformError } from './PlatformError';\n\nexport interface HTTPErrorJson {\n error?: string;\n message?: string;\n}\n\nexport class HTTPError extends PlatformError {\n response: string;\n\n override get isIgnorable(): boolean {\n return this.status === 404 || (this.json?.error === 'error.no_job_pending');\n }\n\n constructor(message: string, status: number, response: string, cause?: Error) {\n super(message, cause);\n this.status = status;\n this.response = response;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get json(): HTTPErrorJson | any | null {\n try {\n return JSON.parse(this.response);\n } catch {\n return null;\n }\n }\n\n override toString(): string {\n return `${this.name}: ${this.message} (${this.status})\\n${this.response}`;\n }\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v1ToV6(uuid) {\n const v1Bytes = typeof uuid === 'string' ? (0, parse_js_1.default)(uuid) : uuid;\n const v6Bytes = _v1ToV6(v1Bytes);\n return typeof uuid === 'string' ? (0, stringify_js_1.unsafeStringify)(v6Bytes) : v6Bytes;\n}\nexports.default = v1ToV6;\nfunction _v1ToV6(v1Bytes) {\n return Uint8Array.of(((v1Bytes[6] & 0x0f) << 4) | ((v1Bytes[7] >> 4) & 0x0f), ((v1Bytes[7] & 0x0f) << 4) | ((v1Bytes[4] & 0xf0) >> 4), ((v1Bytes[4] & 0x0f) << 4) | ((v1Bytes[5] & 0xf0) >> 4), ((v1Bytes[5] & 0x0f) << 4) | ((v1Bytes[0] & 0xf0) >> 4), ((v1Bytes[0] & 0x0f) << 4) | ((v1Bytes[1] & 0xf0) >> 4), ((v1Bytes[1] & 0x0f) << 4) | ((v1Bytes[2] & 0xf0) >> 4), 0x60 | (v1Bytes[2] & 0x0f), v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Transition } from './models/Transition';\nimport { Workflow } from './models/Workflow';\nimport { TransitionController } from './TransitionController';\nimport { WorkflowController } from './WorkflowController';\nimport { WorkflowStepController } from './WorkflowStepController';\n\ninterface TransitionControllerConstructor {\n new (\n eventName: string,\n workflowStepController: WorkflowStepController,\n workflowController: WorkflowController,\n transition: Transition,\n workflow: Workflow,\n data: any,\n additionalContext: any,\n signal?: AbortSignal\n ): TransitionController;\n}\n\nexport class TransitionControllerFactory {\n private static customControllers: Map<string, TransitionControllerConstructor> = new Map();\n\n static createTransitionController(\n eventName: string,\n workflowStepController: WorkflowStepController,\n workflowController: WorkflowController,\n transition: Transition,\n workflow: Workflow,\n data: any = {},\n additionalContext = {},\n signal?: AbortSignal,\n ): TransitionController {\n if (transition.type) {\n if (this.customControllers.has(transition.type)) {\n return new (this.customControllers.get(transition.type))(\n eventName,\n workflowStepController,\n workflowController,\n transition,\n workflow,\n data,\n additionalContext,\n signal,\n );\n } else {\n\n console.error('Custom type set but no Controller is registered!');\n return undefined;\n }\n } else {\n return new TransitionController(\n eventName,\n workflowStepController,\n workflowController,\n transition,\n workflow,\n data,\n additionalContext,\n signal,\n );\n }\n }\n\n static registerTransitionController(name: string, transitionController: TransitionControllerConstructor) {\n this.customControllers.set(\n name,\n transitionController,\n );\n }\n}\n","import { SoftwareResponse } from '../model/SoftwareResponse';\nimport { ISoftwarePlatformAPI } from './ISoftwarePlatformAPI';\nimport { IPlatformConnector } from './platformcore/IPlatformConnector';\n\nexport class SoftwareAPIImpl implements ISoftwarePlatformAPI {\n private platformConnector: IPlatformConnector;\n\n constructor(platformConnector: IPlatformConnector) {\n this.platformConnector = platformConnector;\n }\n\n async getLatestAppVersion(softwareId: string, signal?: AbortSignal): Promise<SoftwareResponse> {\n const response = await this.platformConnector.httpClient.executeRequest(\n `software/${softwareId}/artifacts/latest`,\n 'GET',\n {},\n null,\n signal,\n );\n return JSON.parse(response.responseText);\n }\n}\n","import { IAction } from '@nimmsta/web-library';\n\nexport class PlatformUploadLogFileAction implements IAction {\n public readonly name = 'PlatformUploadLogFileAction';\n public readonly isDeviceAction = false;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ButtonEvent, LEDMode, Logger, LTBlinkingPattern, LTColor,\n NimmstaLayout, ScanEvent, TouchEvent, TriggerMode,\n} from '@nimmsta/web-library';\nimport { Workflow } from './models/Workflow';\nimport { WorkflowStep } from './models/WorkflowStep';\nimport { TransitionControllerFactory } from './TransitionControllerFactory';\nimport { WorkflowController } from './WorkflowController';\nimport { APIParameters } from './models/API';\nimport { Transition } from './models/Transition';\nimport { TimerUtils } from './util/TimerUtil';\n\nexport class WorkflowStepController {\n public needsBackForError = false;\n\n protected logger: Logger;\n protected loadedData = false;\n protected abortController = new AbortController();\n\n protected isVisible = false;\n\n private lastRenderedLayoutData: any;\n\n get isCurrentStep(): boolean {\n return this.workflowController.workflow.currentWorkflowStep === this.workflowStep && this.workflowController.isVisible;\n }\n\n get allowStopJob(): boolean | undefined {\n return this.workflowStep.allowStopJob;\n }\n\n constructor(\n protected workflowController: WorkflowController,\n protected workflow: Workflow,\n public workflowStep: WorkflowStep,\n ) {\n this.logger = Logger.for(`WorkflowStepController+${workflowStep.workflowStepName}`);\n }\n\n /**\n * Called when the controller should become visible.\n */\n execute() {\n\n console.log('execute', this.workflowStep.workflowStepName);\n\n this.lastRenderedLayoutData = null;\n if (this.workflowStep.triggerMode) {\n let desiredTriggerMode = this.workflowStep.triggerMode;\n // Hack in order to know if js lib already supports substituting unsupported types.\n if (this.workflowController.device.supportsTriggerMode === undefined) {\n if (desiredTriggerMode !== TriggerMode.Button\n && desiredTriggerMode !== TriggerMode.ButtonAndTouch\n && desiredTriggerMode !== TriggerMode.Touch\n && desiredTriggerMode !== TriggerMode.Disabled) {\n desiredTriggerMode = TriggerMode.ButtonAndTouch;\n }\n }\n\n this.workflowController.device.preferredTriggerMode = desiredTriggerMode;\n }\n\n this.renderLayout();\n\n // this part should only be executed if the step is not already visible\n if (!this.isVisible) {\n this.isVisible = true;\n\n this.onAppearEvent();\n this.loadDataIfNeededAsync().then(() => {\n if (this.isCurrentStep) {\n this.handleLightTag();\n }\n });\n }\n }\n\n hide() {\n if (!this.isVisible) {\n return;\n }\n\n // reset the loaded data state\n this.isVisible = false;\n this.abortController?.abort();\n this.abortController = new AbortController();\n this.onDisappearEvent();\n }\n\n private async loadDataIfNeededAsync() {\n\n console.log('loadDataIfNeededAsync', this.workflowStep.workflowStepName);\n if (this.workflowStep.loadData && !this.loadedData) {\n this.loadedData = true;\n const {\n endpoint, dataConnection, preProcessCode, postProcessCode, onError, onSuccess, postProcessErrorCode,\n } = this.workflowStep.loadData;\n\n try {\n const request = this.evaluateAPIParameters();\n const context = {\n request,\n workflowStep: this.workflowStep,\n };\n\n console.log('eval preProcessCode', preProcessCode);\n await this.workflowController.evalWithContextAsyncThrow(\n preProcessCode,\n context,\n undefined,\n this.abortController.signal,\n );\n\n\n console.log('fetchFromDataSource', dataConnection, endpoint, context.request);\n const response = await this.workflowController.fetchFromDataSource(\n dataConnection,\n endpoint,\n context.request,\n this.abortController.signal,\n );\n const responseContext = {\n response,\n workflowStep: this.workflowStep,\n };\n await this.workflowController.evalWithContextAsyncThrow(postProcessCode, responseContext, () => {\n this.renderLayout();\n }, this.abortController.signal);\n this.executeEventData(\n 'loadDataIfNeededAsync.onSuccess',\n onSuccess,\n response,\n { response: responseContext.response },\n );\n } catch (error) {\n const errorContext = {\n error,\n workflowStep: this.workflowStep,\n };\n\n try {\n await this.workflowController.evalWithContextAsync(postProcessErrorCode, errorContext, () => {\n this.renderLayout();\n }, this.abortController.signal);\n } catch {\n this.executeEventData('loadDataIfNeededAsync.postProcess.onError', onError, { error }, { error });\n }\n\n this.loadedData = false;\n this.renderLayout();\n this.executeEventData('loadDataIfNeededAsync.onError', onError, { error }, { error });\n } finally {\n if (this.workflowStep.loadData.autoRetryEveryMs) {\n const signal = this.abortController.signal;\n TimerUtils.setTimeout(() => {\n if (this.isCurrentStep && signal?.aborted !== true) {\n this.loadedData = false;\n this.loadDataIfNeededAsync();\n }\n }, this.workflowStep.loadData.autoRetryEveryMs);\n }\n }\n }\n }\n\n private async handleLightTag() {\n if (this.workflowStep.lighttag) {\n const {\n location, color, pattern, intensity,\n } = this.workflowStep.lighttag;\n const colorEnum: LTColor | undefined = (color.toUpperCase() as keyof typeof LTColor)\n ? LTColor[color.toUpperCase() as keyof typeof LTColor] as LTColor : undefined;\n const actualLTColor = colorEnum\n ?? ((typeof color === 'string' && color.startsWith('#')) ? (new LTColor(undefined, color)) : undefined);\n\n const patternEnum: LTBlinkingPattern | undefined = (pattern.toUpperCase() as keyof typeof LTBlinkingPattern)\n ? LTBlinkingPattern[pattern.toUpperCase() as keyof typeof LTBlinkingPattern] : undefined;\n\n const locationValue = this.evaluateStringOrDictionary(location) as string;\n const ledMode: LEDMode = { color: actualLTColor, pattern: patternEnum, intensity };\n await this.workflowController.connectionManager.setDesiredLightTagDevices([locationValue], ledMode)\n .catch((error) => {\n\n console.error('Error for setDesiredLightTagDevices', error);\n });\n }\n }\n\n private evaluateAPIParameters(): APIParameters {\n const toEvaluate = this.workflowStep.loadData?.requestOverride ?? {};\n const result: APIParameters = {};\n result.body = this.evaluateStringOrDictionary(toEvaluate.body);\n result.header = this.evaluateDictionary(toEvaluate.header);\n result.params = this.evaluateDictionary(toEvaluate.params);\n result.query = this.evaluateDictionary(toEvaluate.query);\n return result;\n }\n\n private evaluateStringOrDictionary(\n dictionary: { [key: string]: string } | string | undefined,\n ): { [key: string]: string } | undefined | string {\n if (typeof dictionary === 'string') {\n return this.workflowController.evalWithContext(`return ${dictionary}`, { workflowStep: this.workflowStep });\n } else {\n return this.evaluateDictionary(dictionary);\n }\n }\n\n private evaluateDictionary(dictionary: { [key: string]: string } | undefined): { [key: string]: string } | undefined {\n if (!dictionary) {\n return undefined;\n }\n\n const result: { [key: string]: string } = {};\n Object.keys(dictionary).forEach((key) => {\n result[key] = this.workflowController.evalWithContext(\n `return ${dictionary[key]}`,\n { workflowStep: this.workflowStep },\n );\n });\n return result;\n }\n\n protected getLayoutParams(): { [key: string]: string } {\n const layoutParams = { ...this.workflowController.currentLocaleDict };\n\n if (this.workflowStep.layoutParams) {\n if (Array.isArray(this.workflowStep.layoutParams)) {\n this.workflowStep.layoutParams.forEach((param) => {\n Object.keys(param).forEach((key) => {\n layoutParams[key] = this.workflowController.evalWithContext(`return ${param[key]}`, {\n workflowStep: this.workflowStep,\n });\n });\n });\n } else {\n Object.keys(this.workflowStep.layoutParams).forEach((key) => {\n layoutParams[key] = this.workflowController.evalWithContext(`return ${this.workflowStep.layoutParams[key]}`, {\n workflowStep: this.workflowStep,\n });\n });\n }\n }\n\n return layoutParams;\n }\n\n private renderLayout() {\n if (!this.isCurrentStep) {\n return;\n }\n\n if (this.workflowStep.layout) {\n const params = this.getLayoutParams();\n if (this.lastRenderedLayoutData === JSON.stringify(params)) {\n\n console.log('renderLayout skipped', this.workflowStep.workflowStepName, params);\n return;\n }\n\n console.log('renderLayout', this.workflowStep.workflowStepName, params);\n this.lastRenderedLayoutData = JSON.stringify(params);\n const start = performance.now();\n this.workflowController.setLayout(new NimmstaLayout(this.workflowStep.layout, params)).then((rendered) => {\n if (rendered) {\n this.lastRenderedLayoutData = JSON.stringify(params);\n const endTime = performance.now();\n this.workflowController.updateProgress({\n layout: this.workflowStep.layout,\n layoutParams: params,\n duration: endTime - start,\n }, 'layoutRendered', null);\n } else {\n this.lastRenderedLayoutData = null;\n }\n });\n }/* else if (this.workflowStep.loadData) {\n // TODO!\n this.workflowController.setLayout(new NimmstaLoadingLayout(this.workflowStep.layout, this.getLayoutParams()));\n } */\n }\n\n onScanEvent(scan: ScanEvent) {\n this.executeEvent('onScan', { scan });\n }\n\n onButtonEvent(button: ButtonEvent) {\n this.executeEvent('onButtonPress', { button });\n }\n\n onTriggerEvent() {\n this.executeEvent('onTrigger');\n }\n\n onDoubleTriggerEvent() {\n this.executeEvent('onDoubleTrigger');\n }\n\n onTripleTriggerEvent() {\n this.executeEvent('onTripleTrigger');\n }\n\n onTouchEvent(touch: TouchEvent) {\n this.executeEvent('onTouch', { touch });\n }\n\n onAppearEvent() {\n this.executeEvent('onAppear', {}, {}, true);\n }\n\n onDisappearEvent() {\n if (this.workflowStep.lighttag) {\n this.workflowController.connectionManager.setDesiredLightTagDevices([]);\n }\n\n this.executeEvent('onDisappear', {}, {}, true);\n }\n\n protected executeEvent(event: string, data: any = {}, overrideContext: any = {}, runAllMatching = false) {\n this.workflowController.updateProgress({ ...data }, event, null);\n\n try {\n if (this.workflowStep[event]) {\n for (let i = 0; i < this.workflowStep[event].length; i++) {\n const t = this.workflowStep[event][i];\n const transitionController = TransitionControllerFactory.createTransitionController(\n event,\n this,\n this.workflowController,\n t,\n this.workflow,\n data,\n { workflowStep: this.workflowStep, ...overrideContext },\n this.abortController.signal,\n );\n if (transitionController.execute(() => {\n this.renderLayout();\n })) {\n if (!runAllMatching) {\n return;\n }\n }\n }\n }\n } catch (error) {\n this.workflowController.updateProgress(\n { error, ...data },\n `${event}.error`,\n null,\n );\n this.logger.error(`Error executing event ${event}`, error);\n this.workflowController.onError(error);\n }\n }\n\n protected executeEventData(\n eventName: string,\n eventData: Transition[],\n data: any = {},\n overrideContext: any = {},\n runAllMatching = false,\n ) {\n this.workflowController.updateProgress({ ...data }, eventName, null);\n\n if (!eventData || eventData.length === 0) {\n return;\n }\n\n for (let i = 0; i < eventData.length; i++) {\n const t = eventData[i];\n const transitionController = TransitionControllerFactory.createTransitionController(\n eventName,\n this,\n this.workflowController,\n t,\n this.workflow,\n data,\n { workflowStep: this.workflowStep, ...overrideContext },\n this.abortController.signal,\n );\n if (transitionController.execute(() => {\n this.renderLayout();\n })) {\n if (!runAllMatching) {\n return;\n }\n }\n }\n }\n}\n","import { Lang } from './lang';\n\nconst english: Lang = {\n pairing_with_platform_failed: 'Pairing with cloud failed.',\n pairing_code_not_found: 'The pairing code was not found on the server',\n pairing_code_not_found_recovery_info: 'Please check the code and try again or generate a new one.',\n 'error.no_job_pending': 'No job open',\n 'error.no_workflow_found': 'No active workflow found',\n 'error.app_update_required': 'Please update your app to the latest version to use the Cloud.',\n 'error.app_update_required_workflow': 'Please update your app to start this workflow.',\n failed_to_identify_you: 'Failed to identify you.',\n 'error.DeviceUnlinkedException': 'Your device was unlinked.',\n 'error.DeviceUnlinkedException_recovery_info': 'Please pair your device again.',\n we_could_not_connect_to_the_server: 'Could not connect to the server.',\n please_check_your_internet_connection: 'Please check your internet connection and try again.',\n try_again_later: 'Please try again later.',\n unknown_error: 'Unknown error',\n you_are_not_authorized_to_perform_this_action: 'Please login to perform this action.',\n you_do_not_have_the_permission_perform_this_action: 'You do not have the permission to perform this action.',\n the_requested_resource_was_not_found: 'Not Found',\n the_resource_already_exists: 'Already exists',\n internal_server_error: 'Internal Server Error',\n unknown_http_error: 'Unknown HTTP error',\n http_error: 'HTTP Error',\n service_not_available: 'Service not available',\n job_name: 'Job Name',\n article_name: 'Article Name',\n restart_workflow: 'Restart Workflow',\n retry: 'Retry',\n error: 'Error',\n stop_job_failed: 'Failed to stop job',\n stop_job_code_failed: 'Stop Job Code failed',\n force_stop_job: 'Stop Job',\n cancel_job_failed: 'Failed to cancel job',\n complete_job_failed: 'Failed to complete job',\n skip_job_failed: 'Failed to skip job',\n could_not_start_workflow: 'Could not start workflow',\n pair_again: 'Pair again',\n ready_to_work: 'Ready to work',\n hello_comma: 'Hello, ',\n start_working: 'Start Working',\n error_executing_code: 'Error executing code. Correlation: ',\n pair_app: 'Pair App',\n scan_qr_code: 'Scan the QR code using the Smart Watch or Camera.',\n loading: 'Loading...',\n back: 'Back',\n user_still_active: 'Are you still Working?',\n warning: 'Warning',\n yes: 'Yes',\n no: 'No',\n cancel: 'Cancel',\n no_stop_job: 'No - Stop Job',\n stop_job: 'Stop Job',\n login_on_device: 'Please login on the smartphone to continue.',\n user_cancelled_auth_flow: 'Login cancelled',\n user_cancelled_auth_flow_recovery_info: 'Please try again.',\n exit_workflow_failed: 'Failed to exit workflow',\n};\n\nexport { english };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// Type alias for timer IDs that works in both browser and Node environments\ntype TimerId = ReturnType<typeof setTimeout>;\n\nexport class TimerUtils {\n // Storing the default implementations\n private static originalSetTimeout: typeof setTimeout = window.setTimeout.bind(window);\n private static originalSetInterval: typeof setInterval = window.setInterval.bind(window);\n private static originalClearTimeout: typeof clearTimeout = window.clearTimeout.bind(window);\n private static originalClearInterval: typeof clearInterval = window.clearInterval.bind(window);\n\n // Current active implementations\n private static activeSetTimeout: typeof setTimeout = TimerUtils.originalSetTimeout;\n private static activeSetInterval: typeof setInterval = TimerUtils.originalSetInterval;\n private static activeClearTimeout: typeof clearTimeout = TimerUtils.originalClearTimeout;\n private static activeClearInterval: typeof clearInterval = TimerUtils.originalClearInterval;\n\n // Allows replacing the current setTimeout implementation\n static replaceSetTimeout(newSetTimeout: typeof setTimeout): void {\n TimerUtils.activeSetTimeout = newSetTimeout;\n }\n\n // Allows replacing the current setInterval implementation\n static replaceSetInterval(newSetInterval: typeof setInterval): void {\n TimerUtils.activeSetInterval = newSetInterval;\n }\n\n // Allows replacing the current clearTimeout implementation\n static replaceClearTimeout(newClearTimeout: typeof clearTimeout): void {\n TimerUtils.activeClearTimeout = newClearTimeout;\n }\n\n // Allows replacing the current clearInterval implementation\n static replaceClearInterval(newClearInterval: typeof clearInterval): void {\n TimerUtils.activeClearInterval = newClearInterval;\n }\n\n // Restore to original setTimeout\n static restoreSetTimeout(): void {\n TimerUtils.activeSetTimeout = TimerUtils.originalSetTimeout;\n }\n\n // Restore to original setInterval\n static restoreSetInterval(): void {\n TimerUtils.activeSetInterval = TimerUtils.originalSetInterval;\n }\n\n // Restore to original clearTimeout\n static restoreClearTimeout(): void {\n TimerUtils.activeClearTimeout = TimerUtils.originalClearTimeout;\n }\n\n // Restore to original clearInterval\n static restoreClearInterval(): void {\n TimerUtils.activeClearInterval = TimerUtils.originalClearInterval;\n }\n\n static restoreAll() {\n TimerUtils.restoreSetTimeout();\n TimerUtils.restoreSetInterval();\n TimerUtils.restoreClearTimeout();\n TimerUtils.restoreClearInterval();\n }\n\n // A static method to wrap the active setTimeout\n static setTimeout(handler: (...args: any[]) => void, timeout?: number, ...args: any[]): TimerId {\n return TimerUtils.activeSetTimeout(handler, Number(timeout), ...args);\n }\n\n // A static method to wrap the active setInterval\n static setInterval(handler: (...args: any[]) => void, timeout?: number, ...args: any[]): TimerId {\n return TimerUtils.activeSetInterval(handler, Number(timeout), ...args);\n }\n\n // A static method to wrap the active clearTimeout\n static clearTimeout(timeoutId: TimerId): void {\n TimerUtils.activeClearTimeout(timeoutId);\n }\n\n // A static method to wrap the active clearInterval\n static clearInterval(intervalId: TimerId): void {\n TimerUtils.activeClearInterval(intervalId);\n }\n}\n","import { IAction } from '@nimmsta/web-library';\n\nexport class PlatformGetAccountAction implements IAction {\n public readonly name = 'PlatformGetAccountAction';\n public readonly isDeviceAction = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public data: any = {};\n\n constructor(os?: string, appVersion?: string) {\n this.data.os = os;\n this.data.appVersion = appVersion;\n }\n}\n"," \nimport { NimmstaLayout } from '@nimmsta/web-library';\n\nexport class WorkflowErrorLayoutWithBack extends NimmstaLayout {\n constructor(error, title = 'Error', retryTitle = 'Retry', back = 'Back') {\n const xml = `\n <?xml version=\"1.0\" encoding=\"utf-8\"?>\n <NimmstaLayout name=\"Workflow Error Layout\">\n <staticElements>\n <statusbar/>\n <cell horizontalAlignment=\"center\" fontSize=\"17pt\" y=\"30\" padding=\"5\" fontFamily=\"Bahnschrift_SemiBold\" wrapMode=\"wrap\" maxLines=\"2\" name=\"title\">Failed to complete Job</cell>\n <cell horizontalAlignment=\"center\" fontSize=\"auto\" wrapMode=\"wrap\" padding=\"10\" paddingTop=\"0\" paddingBottom=\"35\" maxLines=\"0\" name=\"error\">Please check your internet connection</cell>\n <button y=\"165\" x=\"110\" horizontalAlignment=\"center\" name=\"restart-workflow\" width=\"80\">Retry</button>\n <button y=\"165\" x=\"10\" width=\"80\" horizontalAlignment=\"center\" name=\"back\">Back</button>\n </staticElements>\n </NimmstaLayout>\n `;\n super(xml, {\n error, title, 'restart-workflow': retryTitle, back,\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Lang } from '../lang/lang';\nimport { HTTPError } from './HTTPError';\nimport { PairingError } from './PairingError';\nimport { PlatformError } from './PlatformError';\nimport { PlatformEvalError } from './PlatformEvalError';\nimport { WhoAmIError } from './WhoAmIError';\n\n// Function to check if an error can be ignored\nexport const isErrorIgnoreable = (error: Error | null): boolean => {\n if (error == null) {\n return true;\n }\n\n switch (error.constructor) {\n case HTTPError:\n if ((error as HTTPError).status === 404) {\n return true;\n }\n if ((error as HTTPError).json?.error === 'error.no_job_pending') {\n return true;\n }\n break;\n default:\n break;\n }\n\n if (error?.message === 'Cancelled') {\n return true;\n }\n\n return false;\n};\n\nfunction getContextTitle(context: any, translations: Lang): string | undefined {\n if (context === 'whoami') {\n return translations['who_am_i'];\n }\n\n if (context === 'pairing') {\n return translations['pairing'];\n }\n\n return undefined;\n}\n\nexport const isInternetError = (error: Error | null) => {\n if (!error) {\n return false;\n }\n\n if (error.message === 'Network request failed'\n || error.message === 'Failed to fetch'\n || error.message.includes('Unable to resolve host') === true\n || (error as HTTPError).status === 0) {\n return true;\n }\n\n return false;\n};\n\n// Function to retrieve a user-friendly error message\n\nexport const getErrorUserMessageTitle = (error: Error | string | undefined, translations: Lang, context: any): string | undefined => {\n if (!error) {\n return translations.unknown_error;\n }\n\n console.error('Get error user message title for', error, (error as any)?.stack);\n\n if (typeof error === 'string') {\n return error;\n }\n\n if (isInternetError(error)) {\n return translations.we_could_not_connect_to_the_server;\n }\n\n switch (error.constructor) {\n case PlatformEvalError:\n return translations.error_executing_code + (error as PlatformEvalError).errorCorrelation;\n case WhoAmIError:\n if ((error as WhoAmIError).cause instanceof HTTPError) {\n const httpError = (error as WhoAmIError).cause as HTTPError;\n if (httpError.json?.error && translations[httpError.json.error]) {\n return translations[httpError.json.error];\n }\n }\n\n return translations.failed_to_identify_you;\n case PairingError:\n if ((error as PairingError).cause instanceof HTTPError) {\n switch (((error as PairingError).cause as HTTPError).status) {\n case 404:\n return translations.pairing_code_not_found;\n default:\n break;\n }\n }\n\n return translations.pairing_with_platform_failed;\n case HTTPError:\n // eslint-disable-next-line no-case-declarations\n const httpError = error as HTTPError;\n if (httpError.json?.error && translations[httpError.json.error]) {\n return translations[httpError.json.error];\n }\n\n if (httpError.json?.message) {\n return httpError.json.message;\n }\n\n switch (httpError.status) {\n case 401:\n return translations.you_are_not_authorized_to_perform_this_action;\n case 403:\n return translations.you_do_not_have_the_permission_perform_this_action;\n case 404:\n return translations.the_requested_resource_was_not_found;\n case 409:\n return translations.the_resource_already_exists;\n case 500:\n return translations.internal_server_error;\n case 502:\n return translations.service_not_available;\n case 503:\n return translations.service_not_available;\n case 504:\n return translations.service_not_available;\n default: {\n return getContextTitle(context, translations)\n ?? `${translations.http_error} ${httpError.status} ${httpError.message}`;\n }\n }\n case PlatformError:\n if (error instanceof PlatformError) {\n if (error.cause) {\n return getErrorUserMessageTitle(error.cause, translations, context);\n } else {\n return error.translatedTitle ?? error.message;\n }\n }\n break;\n default: {\n return getContextTitle(context, translations) ?? translations.error;\n }\n }\n};\n\n// Function to retrieve a user-friendly error message\nexport const getErrorUserMessageRecoveryInfo = (\n error: Error | string | undefined,\n translations: Lang,\n context: any,\n\n): string => {\n if (!error) {\n return '';\n }\n\n if (typeof error === 'string') {\n return '';\n }\n\n if (isInternetError(error)) {\n return translations.please_check_your_internet_connection;\n }\n\n switch (error.constructor) {\n case WhoAmIError:\n if ((error as WhoAmIError)?.errorCause && translations[`${(error as WhoAmIError)?.errorCause}_recovery_info`]) {\n return translations[`${(error as WhoAmIError)?.errorCause}_recovery_info`];\n }\n\n return getErrorUserMessageRecoveryInfo((error as unknown as WhoAmIError).cause, translations, context);\n case PairingError:\n if ((error as PairingError).cause instanceof HTTPError) {\n switch (((error as PairingError).cause as HTTPError).status) {\n case 404:\n return translations.pairing_code_not_found_recovery_info;\n default:\n break;\n }\n }\n return getErrorUserMessageRecoveryInfo((error as unknown as PairingError).cause, translations, context);\n case HTTPError: {\n const httpError = (error as HTTPError);\n if (getContextTitle(context, translations)) {\n return getErrorUserMessageTitle(error, translations, null);\n }\n\n if (translations[`${httpError.json?.error}_recovery_info`]) {\n return translations[`${httpError.json?.error}_recovery_info`];\n }\n\n return `${translations.try_again_later} (${httpError.status} ${httpError.json?.error ?? httpError.message})`;\n }\n case PlatformError:\n if (error instanceof PlatformError) {\n if (error.cause) {\n return getErrorUserMessageRecoveryInfo(error.cause, translations, context);\n } else {\n return error.translatedRecoveryInfo ?? error.message;\n }\n }\n break;\n default:\n return (error.message ? error.message : error.toString());\n }\n};\n\nexport const platformErrorFromCause = (cause: Error, translations: Lang, context: any = undefined): PlatformError => {\n if (cause instanceof PlatformError && cause._isPlatformError) {\n // If the error is already a PlatformError, return it directly\n return cause;\n }\n\n return new PlatformError(\n cause.message,\n cause,\n (cause as any).status,\n getErrorUserMessageTitle(cause, translations, context),\n getErrorUserMessageRecoveryInfo(cause, translations, context),\n context,\n );\n};\n\nexport const platformErrorFromCauseAndMessage = (\n message: string,\n cause: Error,\n translations: Lang,\n context: any = undefined,\n): PlatformError => new PlatformError(\n message,\n cause,\n (cause as any).status,\n getErrorUserMessageTitle(cause, translations, context),\n getErrorUserMessageRecoveryInfo(cause, translations, context),\n context,\n);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = '00000000-0000-0000-0000-000000000000';\n","export class Base36 {\n private static CHAR_LIST = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n private static BASE = Base36.CHAR_LIST.length;\n\n /**\n * Converts a Base36-encoded string into a BigInt.\n *\n * @param input - The Base36 string to decode\n * @returns The decoded BigInt value\n * @throws Error if input contains invalid Base36 characters\n */\n static decode(input: string | null): bigint | null {\n if (input === null) return null;\n\n let result = BigInt(0);\n let power = 0;\n\n for (let i = input.length - 1; i >= 0; i--) {\n const char = input[i].toUpperCase();\n const index = Base36.CHAR_LIST.indexOf(char);\n\n if (index === -1) {\n throw new Error(`Invalid Base36 character: '${char}'`);\n }\n\n result += BigInt(index) * Base36.powBigInt(BigInt(Base36.BASE), BigInt(power));\n power++;\n }\n\n return result;\n }\n\n /**\n * Encodes a BigInt into a Base36 string.\n *\n * @param value - The number to encode\n * @returns The Base36 representation\n */\n static encode(value: bigint | null): string | null {\n if (value === null) return null;\n if (value < BigInt(0)) throw new Error('Negative numbers not supported');\n\n let result = '';\n let val = value;\n do {\n const remainder = val % BigInt(Base36.BASE);\n result = Base36.CHAR_LIST[Number(remainder)] + result;\n val /= BigInt(Base36.BASE);\n } while (val > BigInt(0));\n\n return result;\n }\n\n private static powBigInt(base: bigint, exponent: bigint): bigint {\n let result = BigInt(1);\n let actualBase = base;\n let actualExponent = exponent;\n\n while (actualExponent > BigInt(0)) {\n if (actualExponent % BigInt(2) === BigInt(1)) {\n result *= actualBase;\n }\n actualBase *= actualBase;\n actualExponent /= BigInt(2);\n }\n return result;\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_js_1 = require(\"./validate.js\");\nfunction parse(uuid) {\n if (!(0, validate_js_1.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n let v;\n return Uint8Array.of((v = parseInt(uuid.slice(0, 8), 16)) >>> 24, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff, (v = parseInt(uuid.slice(9, 13), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(14, 18), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(19, 23), 16)) >>> 8, v & 0xff, ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff, (v / 0x100000000) & 0xff, (v >>> 24) & 0xff, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff);\n}\nexports.default = parse;\n"," \nimport { NimmstaLayout } from '@nimmsta/web-library';\n\nexport class LoadingLayout extends NimmstaLayout {\n constructor(loading = 'Loading...', productName = 'Productivity Cloud') {\n const xml = `\n <?xml version=\"1.0\" encoding=\"utf-8\"?>\n <NimmstaLayout name=\"Productivity Cloud Loading Layout\">\n <staticElements>\n <statusbar/>\n <cell horizontalAlignment=\"center\" wrapMode=\"wrap\" name=\"productName\" padding=\"4pt\" maxLines=\"2\" fontSize=\"22pt\" y=\"40\" name=\"title\">Productivity Cloud</cell>\n <cell horizontalAlignment=\"center\" wrapMode=\"wrap\" name=\"loading\" padding=\"4pt\" maxLines=\"4\">Loading...</cell>\n </staticElements>\n </NimmstaLayout>\n `;\n super(xml, { loading, productName });\n }\n}\n"," \nimport { NimmstaLayout } from '@nimmsta/web-library';\n\nexport class WorkflowErrorLayout extends NimmstaLayout {\n constructor(error, title = 'Error', retryTitle = 'Restart workflow') {\n const xml = `\n <?xml version=\"1.0\" encoding=\"utf-8\"?>\n <NimmstaLayout name=\"Workflow Error Layout\">\n <staticElements>\n <statusbar/>\n <cell horizontalAlignment=\"center\" fontSize=\"17pt\" y=\"30\" padding=\"5\" fontFamily=\"Bahnschrift_SemiBold\" wrapMode=\"wrap\" maxLines=\"2\" name=\"title\">Error</cell>\n <cell horizontalAlignment=\"center\" fontSize=\"auto\" wrapMode=\"wrap\" padding=\"10\" paddingTop=\"0\" paddingBottom=\"35\" maxLines=\"0\" name=\"error\">Please try again</cell>\n <button y=\"165\" horizontalAlignment=\"center\" name=\"restart-workflow\">Restart Workflow</button>\n </staticElements>\n </NimmstaLayout>\n `;\n super(xml, { error, title, 'restart-workflow': retryTitle });\n }\n}\n","import lang from '../platform/lang';\n\nexport type TranslationKeys = { [key: string]: string };\n\nexport class LangUtils {\n static langKeys = lang;\n\n static getDefaultMatchingLocale<T extends TranslationKeys>(\n defaultLocale?: string,\n translationKeys?: { [lang: string]: T },\n ): T {\n const defaultLocaleOrFirst = defaultLocale ?? Object.keys(translationKeys ?? {})[0];\n return defaultLocaleOrFirst != null ? (translationKeys[defaultLocaleOrFirst]) ?? {} as T : {} as T;\n }\n\n static getMatchingLocaleDict<T extends TranslationKeys>(\n locale: string,\n defaultLocale?: string,\n translationKeys?: { [lang: string]: T },\n ): T {\n const matchingLocale = Object.keys(translationKeys ?? {}).find((key) => key.toLowerCase() === locale?.toLowerCase());\n if (locale?.indexOf('-') !== -1) {\n const language = locale.split('-')[0];\n const matchingLang = Object.keys(translationKeys ?? {}).find((key) => key.toLowerCase() === language.toLowerCase());\n return translationKeys[matchingLocale]\n ?? translationKeys[matchingLang] ?? this.getDefaultMatchingLocale(defaultLocale, translationKeys);\n } else if (locale?.indexOf('_') !== -1) {\n const language = locale.split('_')[0];\n const matchingLang = Object.keys(translationKeys ?? {}).find((key) => key.toLowerCase() === language.toLowerCase());\n return translationKeys[matchingLocale]\n ?? translationKeys[matchingLang] ?? this.getDefaultMatchingLocale(defaultLocale, translationKeys);\n } else {\n return translationKeys[matchingLocale] ?? this.getDefaultMatchingLocale(defaultLocale, translationKeys);\n }\n }\n}\n","import { german } from './de';\nimport { english } from './en';\n\nconst lang = {\n de: german,\n en: english,\n};\n\nexport default lang;\n","export * from './api/ISoftwarePlatformAPI';\nexport * from './api/IPlatformAPI';\nexport * from './api/PlatformAPIImpl';\nexport * from './api/SoftwareAPIImpl';\nexport * from './api/httpClient/HttpClientAction';\nexport * from './api/platformcore/IPlatformConnector';\nexport * from './api/platformcore/PlatformCoreLibConnectorImpl';\n\nexport * from './controller/IPlatformOAuthDelegate';\nexport * from './controller/PlatformController';\nexport * from './controller/PlatformControllerState';\nexport * from './controller/WorkflowActionEnum';\n\nexport * from './errors/ErrorHandling';\nexport * from './errors/HTTPError';\nexport * from './errors/PlatformError';\nexport * from './errors/PairingError';\nexport * from './errors/WhoAmIError';\n\nexport * from './lang/index';\nexport * from './lang/lang';\n\nexport * from './model/AccountImpl';\nexport * from './model/EndpointResponse';\nexport * from './model/IAccount';\nexport * from './model/SoftwareResponse';\nexport * from './model/WhoamIResponse';\nexport * from './model/WorkflowExecutionResponse';\nexport * from './model/DeviceInfo';\nexport * from './model/JobEvent';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.URL = exports.DNS = exports.stringToBytes = void 0;\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str));\n const bytes = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i) {\n bytes[i] = str.charCodeAt(i);\n }\n return bytes;\n}\nexports.stringToBytes = stringToBytes;\nexports.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nfunction v35(version, hash, value, namespace, buf, offset) {\n const valueBytes = typeof value === 'string' ? stringToBytes(value) : value;\n const namespaceBytes = typeof namespace === 'string' ? (0, parse_js_1.default)(namespace) : namespace;\n if (typeof namespace === 'string') {\n namespace = (0, parse_js_1.default)(namespace);\n }\n if (namespace?.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n }\n let bytes = new Uint8Array(16 + valueBytes.length);\n bytes.set(namespaceBytes);\n bytes.set(valueBytes, namespaceBytes.length);\n bytes = hash(bytes);\n bytes[6] = (bytes[6] & 0x0f) | version;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n return buf;\n }\n return (0, stringify_js_1.unsafeStringify)(bytes);\n}\nexports.default = v35;\n","import { ActionControllerFactory } from './ActionControllerFactory';\nimport { Transition } from './models/Transition';\nimport { Workflow } from './models/Workflow';\nimport { TimerUtils } from './util/TimerUtil';\nimport { WorkflowController } from './WorkflowController';\nimport { WorkflowStepController } from './WorkflowStepController';\n\nexport class TransitionController {\n\n constructor(\n private eventName: string,\n private workflowStepController: WorkflowStepController,\n private workflowController: WorkflowController,\n private transition: Transition,\n private workflow: Workflow,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private data: any = {},\n private additionalContext = {},\n private signal?: AbortSignal,\n\n ) {}\n\n execute(onFinishedRequest: () => void) {\n\n if (!this.transition.condition || (this.transition.condition\n && this.workflowController.evalWithContext(\n `return ${this.transition.condition}`,\n {\n ...this.additionalContext,\n data: this.data,\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => {},\n this.signal,\n ))) {\n if (this.transition.delay) {\n const signal = this.signal;\n TimerUtils.setTimeout(() => {\n if (signal?.aborted !== true) {\n this.runTransition(onFinishedRequest);\n }\n }, this.transition.delay);\n } else {\n this.runTransition(onFinishedRequest);\n }\n return true;\n } else {\n return false;\n }\n }\n\n private runTransition(onFinishedRequest: () => void) {\n this.transition.actions?.forEach((action) => {\n const actionController = ActionControllerFactory.createActionController(\n this.workflowController,\n action,\n this.workflow,\n this.data,\n this.additionalContext,\n onFinishedRequest,\n );\n actionController.execute();\n });\n if (this.transition.code) {\n this.workflowController.evalWithContext(\n `${this.transition.code}`,\n { ...this.additionalContext, data: this.data },\n onFinishedRequest,\n this.signal,\n );\n }\n this.workflowController.updateProgress(\n {\n transition: this.transition,\n ...this.data,\n },\n `${this.eventName}.executedTransition`,\n this.transition.condition,\n );\n if (this.transition.targetWorkflow) {\n this.workflowController.startWorkflowWithIdentifier(\n this.transition.targetWorkflow,\n this.transition.targetWorkflowPassJob ? this.workflow.job : null,\n );\n } else if (this.transition.targetStep || this.transition.targetStep === '') {\n this.workflowController.executeWorkflowStep(this.transition.targetStep);\n } else if (this.transition.backToPreviousStep) {\n this.workflowController.goBack();\n }\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.updateV1State = void 0;\nconst rng_js_1 = require(\"./rng.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nconst _state = {};\nfunction v1(options, buf, offset) {\n let bytes;\n const isV6 = options?._v6 ?? false;\n if (options) {\n const optionsKeys = Object.keys(options);\n if (optionsKeys.length === 1 && optionsKeys[0] === '_v6') {\n options = undefined;\n }\n }\n if (options) {\n bytes = v1Bytes(options.random ?? options.rng?.() ?? (0, rng_js_1.default)(), options.msecs, options.nsecs, options.clockseq, options.node, buf, offset);\n }\n else {\n const now = Date.now();\n const rnds = (0, rng_js_1.default)();\n updateV1State(_state, now, rnds);\n bytes = v1Bytes(rnds, _state.msecs, _state.nsecs, isV6 ? undefined : _state.clockseq, isV6 ? undefined : _state.node, buf, offset);\n }\n return buf ?? (0, stringify_js_1.unsafeStringify)(bytes);\n}\nfunction updateV1State(state, now, rnds) {\n state.msecs ??= -Infinity;\n state.nsecs ??= 0;\n if (now === state.msecs) {\n state.nsecs++;\n if (state.nsecs >= 10000) {\n state.node = undefined;\n state.nsecs = 0;\n }\n }\n else if (now > state.msecs) {\n state.nsecs = 0;\n }\n else if (now < state.msecs) {\n state.node = undefined;\n }\n if (!state.node) {\n state.node = rnds.slice(10, 16);\n state.node[0] |= 0x01;\n state.clockseq = ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n }\n state.msecs = now;\n return state;\n}\nexports.updateV1State = updateV1State;\nfunction v1Bytes(rnds, msecs, nsecs, clockseq, node, buf, offset = 0) {\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n if (!buf) {\n buf = new Uint8Array(16);\n offset = 0;\n }\n else {\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n }\n msecs ??= Date.now();\n nsecs ??= 0;\n clockseq ??= ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n node ??= rnds.slice(10, 16);\n msecs += 12219292800000;\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n buf[offset++] = (tl >>> 24) & 0xff;\n buf[offset++] = (tl >>> 16) & 0xff;\n buf[offset++] = (tl >>> 8) & 0xff;\n buf[offset++] = tl & 0xff;\n const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;\n buf[offset++] = (tmh >>> 8) & 0xff;\n buf[offset++] = tmh & 0xff;\n buf[offset++] = ((tmh >>> 24) & 0xf) | 0x10;\n buf[offset++] = (tmh >>> 16) & 0xff;\n buf[offset++] = (clockseq >>> 8) | 0x80;\n buf[offset++] = clockseq & 0xff;\n for (let n = 0; n < 6; ++n) {\n buf[offset++] = node[n];\n }\n return buf;\n}\nexports.default = v1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.withTimeout = void 0;\nvar tslib_1 = require(\"tslib\");\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar errors_1 = require(\"./errors\");\nfunction withTimeout(sync, timeout, timeoutError) {\n var _this = this;\n if (timeoutError === void 0) { timeoutError = errors_1.E_TIMEOUT; }\n return {\n acquire: function (weightOrPriority, priority) {\n var weight;\n if (isSemaphore(sync)) {\n weight = weightOrPriority;\n }\n else {\n weight = undefined;\n priority = weightOrPriority;\n }\n if (weight !== undefined && weight <= 0) {\n throw new Error(\"invalid weight \".concat(weight, \": must be positive\"));\n }\n return new Promise(function (resolve, reject) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n var isTimeout, handle, ticket, release, e_1;\n return tslib_1.__generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isTimeout = false;\n handle = setTimeout(function () {\n isTimeout = true;\n reject(timeoutError);\n }, timeout);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, (isSemaphore(sync)\n ? sync.acquire(weight, priority)\n : sync.acquire(priority))];\n case 2:\n ticket = _a.sent();\n if (isTimeout) {\n release = Array.isArray(ticket) ? ticket[1] : ticket;\n release();\n }\n else {\n clearTimeout(handle);\n resolve(ticket);\n }\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n if (!isTimeout) {\n clearTimeout(handle);\n reject(e_1);\n }\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); });\n },\n runExclusive: function (callback, weight, priority) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n var release, ticket;\n return tslib_1.__generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n release = function () { return undefined; };\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 7, 8]);\n return [4 /*yield*/, this.acquire(weight, priority)];\n case 2:\n ticket = _a.sent();\n if (!Array.isArray(ticket)) return [3 /*break*/, 4];\n release = ticket[1];\n return [4 /*yield*/, callback(ticket[0])];\n case 3: return [2 /*return*/, _a.sent()];\n case 4:\n release = ticket;\n return [4 /*yield*/, callback()];\n case 5: return [2 /*return*/, _a.sent()];\n case 6: return [3 /*break*/, 8];\n case 7:\n release();\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n },\n release: function (weight) {\n sync.release(weight);\n },\n cancel: function () {\n return sync.cancel();\n },\n waitForUnlock: function (weightOrPriority, priority) {\n var weight;\n if (isSemaphore(sync)) {\n weight = weightOrPriority;\n }\n else {\n weight = undefined;\n priority = weightOrPriority;\n }\n if (weight !== undefined && weight <= 0) {\n throw new Error(\"invalid weight \".concat(weight, \": must be positive\"));\n }\n return new Promise(function (resolve, reject) {\n var handle = setTimeout(function () { return reject(timeoutError); }, timeout);\n (isSemaphore(sync)\n ? sync.waitForUnlock(weight, priority)\n : sync.waitForUnlock(priority)).then(function () {\n clearTimeout(handle);\n resolve();\n });\n });\n },\n isLocked: function () { return sync.isLocked(); },\n getValue: function () { return sync.getValue(); },\n setValue: function (value) { return sync.setValue(value); },\n };\n}\nexports.withTimeout = withTimeout;\nfunction isSemaphore(sync) {\n return sync.getValue !== undefined;\n}\n","export * from './models/Action';\nexport * from './models/Transition';\nexport * from './models/WorkflowOAuthConfig';\nexport * from './models/Workflow';\nexport * from './models/WorkflowStep';\nexport * from './models/job/Job';\nexport * from './models/Interval';\n\nexport * from './IWorkflowHandler';\nexport * from './ActionController';\nexport * from './TransitionController';\nexport * from './WorkflowController';\nexport * from './WorkflowStepController';\n\nexport * from './util/TimerUtil';\nexport * from './util/LangUtils';\nexport * from './util/EvalUtil';\nexport * from './util/Base36';\nexport * from './util/JwtParser';\n\nexport * from './platform/index';\n","import { Lang } from './lang';\n\nconst german: Lang = {\n pairing_with_platform_failed: 'Koppeln fehlgeschlagen.',\n pairing_code_not_found: 'Der Kopplungscode wurde nicht auf dem Server gefunden',\n \n pairing_code_not_found_recovery_info: 'Bitte überprüfen Sie den Code und versuchen Sie es erneut oder erstellen Sie einen neuen.',\n 'error.no_job_pending': 'Kein Job offen',\n 'error.no_workflow_found': 'Kein aktiver Workflow gefunden',\n 'error.app_update_required': 'Bitte aktualisieren Sie Ihre App auf die neueste Version, um die Cloud zu verwenden.',\n 'error.app_update_required_workflow': 'Bitte aktualisieren Sie Ihre App, um diesen Workflow zu starten.',\n failed_to_identify_you: 'Identifizierung fehlgeschlagen.',\n 'error.DeviceUnlinkedException': 'Ihr Gerät wurde entkoppelt.',\n 'error.DeviceUnlinkedException_recovery_info': 'Bitte koppeln Sie Ihr Gerät erneut.',\n we_could_not_connect_to_the_server: 'Keine Verbindung zum Internet.',\n unknown_error: 'Unbekannter Fehler',\n please_check_your_internet_connection: 'Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.',\n you_are_not_authorized_to_perform_this_action: 'Sie sind nicht eingeloggt. Bitte loggen Sie sich ein.',\n you_do_not_have_the_permission_perform_this_action: 'Sie haben keine Berechtigung diese Aktion auszuführen.',\n the_requested_resource_was_not_found: 'Nicht gefunden',\n the_resource_already_exists: 'Die Ressource existiert bereits',\n internal_server_error: 'Interner Serverfehler',\n unknown_http_error: 'Unbekannter HTTP-Fehler',\n http_error: 'HTTP-Fehler',\n service_not_available: 'Cloud nicht verfügbar',\n try_again_later: 'Bitte versuchen Sie es später erneut.',\n job_name: 'Job Name',\n article_name: 'Artikel Name',\n restart_workflow: 'Workflow neu Starten',\n retry: 'Nochmal versuchen',\n error: 'Fehler',\n stop_job_failed: 'Job konnte nicht gestoppt werden',\n stop_job_code_failed: 'Stop Job Code fehlgeschlagen',\n force_stop_job: 'Stoppen',\n cancel_job_failed: 'Job konnte nicht abgebrochen werden',\n complete_job_failed: 'Job konnte nicht abgeschlossen werden',\n skip_job_failed: 'Job konnte nicht übersprungen werden',\n could_not_start_workflow: 'Workflow konnte nicht gestartet werden',\n pair_again: 'Erneut koppeln',\n ready_to_work: 'Bereit zum Arbeiten',\n hello_comma: 'Hallo, ',\n start_working: 'Arbeit beginnen',\n error_executing_code: 'Fehler im Workflow. Support-ID: ',\n pair_app: 'App koppeln',\n scan_qr_code: 'Scannen Sie den QR-Code mit der Smartwatch oder Kamera.',\n loading: 'Laden...',\n back: 'Zurück',\n user_still_active: 'Sind Sie noch am Arbeiten?',\n warning: 'Warnung',\n yes: 'Ja',\n no: 'Nein',\n cancel: 'Abbrechen',\n no_stop_job: 'Nein - Job stoppen',\n stop_job: 'Job stoppen',\n login_on_device: 'Bitte loggen Sie sich auf dem Smartphone ein, um fortzufahren.',\n user_cancelled_auth_flow: 'Login Abgebrochen',\n user_cancelled_auth_flow_recovery_info: 'Bitte versuchen Sie es erneut.',\n exit_workflow_failed: 'Workflow konnte nicht beendet werden',\n};\n\nexport { german };\n","export const WorkflowActionEnum = {\n START_FIRST_JOB: 'start-first-job',\n RESTART_WORKFLOW: 'restart-workflow',\n BACK: 'back',\n CONTINUE_WORKFLOW: 'continue-workflow',\n STOP_JOB: 'stop-job',\n CONTINUE: 'continue',\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tryAcquire = void 0;\nvar errors_1 = require(\"./errors\");\nvar withTimeout_1 = require(\"./withTimeout\");\n// eslint-disable-next-lisne @typescript-eslint/explicit-module-boundary-types\nfunction tryAcquire(sync, alreadyAcquiredError) {\n if (alreadyAcquiredError === void 0) { alreadyAcquiredError = errors_1.E_ALREADY_LOCKED; }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (0, withTimeout_1.withTimeout)(sync, 0, alreadyAcquiredError);\n}\nexports.tryAcquire = tryAcquire;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ButtonEvent, DisconnectEvent, Logger, NIMMSTA, NIMSubEvent, NimmstaConnectionManager, NimmstaDevice, ScanEvent,\n} from '@nimmsta/web-library';\nimport { Subscription } from 'sub-events/dist/src/sub';\nimport { Mutex } from 'async-mutex';\nimport { WhoamIResponse } from '../model/WhoamIResponse';\nimport { NIMSubEventState } from '../../util/NIMSubEventState';\nimport { PlatformControllerState, PlatformControllerUIState } from './PlatformControllerState';\nimport { WhoAmIError } from '../errors/WhoAmIError';\nimport { Job, JobAppData } from '../../models/job/Job';\nimport { WorkflowExecutionResponse, WorkflowResponse } from '../model/WorkflowExecutionResponse';\nimport { WorkflowActionEnum } from './WorkflowActionEnum';\nimport { DeviceAPIWrapper } from './DeviceAPIWrapper';\nimport { WorkflowController } from '../../WorkflowController';\nimport { PairAppLayout } from '../layouts/PairAppLayout';\nimport { UserStillActiveLayout } from '../layouts/UserStillActiveLayout';\nimport { WorkflowErrorLayout } from '../layouts/WorkflowErrorLayout';\nimport {\n getErrorUserMessageRecoveryInfo, getErrorUserMessageTitle, platformErrorFromCauseAndMessage,\n} from '../errors/ErrorHandling';\nimport { Lang } from '../lang/lang';\nimport { LoadingLayout } from '../layouts/LoadingLayout';\nimport { LangUtils } from '../../util/LangUtils';\nimport lang from '../lang';\nimport { defaultIdleWorkflow } from '../defaults/defaultWorkflow';\nimport { Workflow } from '../../models/Workflow';\nimport {\n PlatformWorkflowEventController,\n PlatformWorkflowEventControllerOptions,\n} from './PlatformWorkflowEventController';\nimport { TimerUtils } from '../../util/TimerUtil';\nimport { PlatformError } from '../errors/PlatformError';\nimport { WorkflowErrorLayoutWithBack } from '../layouts/WorkflowErrorLayoutWithBack';\nimport { IPlatformConnector } from '../api/platformcore/IPlatformConnector';\nimport { PlatformAPIImpl } from '../api/PlatformAPIImpl';\nimport { AccessTokenResult, IPlatformOAuthDelegate } from './IPlatformOAuthDelegate';\nimport { WorkflowOAuthConfig } from '../../models/WorkflowOAuthConfig';\nimport { LoginOnDeviceLayout } from '../layouts/LoginOnDeviceLayout';\n\n/**\n * Platform Controller to connect to given platform based on account\n * and handle platform events. It also provides methods to interact with\n * the current running workflow and events about it.\n *\n * It supports ONLY ONE device at a time.\n * It manages its own websocket connection using web library.\n */\nexport class PlatformController {\n private logger: Logger;\n\n private static currentControllerCount = 0;\n\n public deviceEvent = new NIMSubEvent<NimmstaDevice | null>();\n\n public readonly whoami = new NIMSubEventState<WhoamIResponse | null>(null);\n public readonly workflowAppData = new NIMSubEventState<JobAppData[]>(null);\n public readonly whoamiError = new NIMSubEventState<Error | null>(null);\n public readonly workflowError = new NIMSubEventState<Error | null>(null);\n public readonly isLoading = new NIMSubEventState(false);\n public readonly currentWorkflowExecution = new NIMSubEventState<WorkflowExecutionResponse | null>(null);\n public readonly uiState = new NIMSubEventState<PlatformControllerUIState | null>(null);\n\n public readonly stateUpdatedEvent = new NIMSubEvent<void>();\n public readonly jobProgressEvent = new NIMSubEvent<void>();\n\n private userState = {};\n\n public get isProduction(): boolean {\n return this.platformConnector.account?.isProduction ?? true;\n }\n\n public get testEnvironment(): string | undefined {\n return this.platformConnector.account?.testEnvironment;\n }\n\n public translations: Lang;\n\n public isFetchingDataSource = false;\n\n private connectionManager: NimmstaConnectionManager;\n\n private firstActionWasStop = false;\n\n private workflowShouldStillRun = false;\n\n private isObtainingAccessTokenForConfig: WorkflowOAuthConfig | null = null;\n\n public get isPaired() {\n return !!this.whoami.value && !!this.whoami.value.workerId;\n }\n\n public get state() {\n if (!this.isPaired) {\n return PlatformControllerState.WAITING_TO_PAIR;\n } else if (!this.device) {\n return PlatformControllerState.CONNECT_SMART_WATCH;\n } else if (!this.currentWorkflowExecution.value) {\n return PlatformControllerState.IDLE;\n } else if (this.shouldAskUserForStillActive || this.uiState.value === PlatformControllerUIState.USER_STILL_ACTIVE) {\n return PlatformControllerState.USER_STILL_ACTIVE;\n } else if (!this.workflowError.value) {\n return PlatformControllerState.IN_WORKFLOW;\n }\n return PlatformControllerState.WORKFLOW_ERROR;\n }\n\n public get isInForeground() {\n return this._isInForeground;\n }\n\n public set isInForeground(value: boolean) {\n this.logger.debug('Is in foreground', value);\n const wereRunningTimedActions = this.shouldRunTimedActions;\n if (this._isInForeground === value) {\n return;\n }\n\n this._isInForeground = value;\n if (value) {\n if (!wereRunningTimedActions) {\n this.fetchWhoAmI();\n this.runTimedActions();\n }\n this.applyDeviceScreen();\n }\n }\n\n public get shouldControlSmartWatch() {\n return this._shouldControlSmartWatch;\n }\n\n public set shouldControlSmartWatch(value: boolean) {\n this.logger.debug('Should handle events', value);\n this._shouldControlSmartWatch = value;\n if (value) {\n this.applyDeviceScreen();\n } else {\n this.userState = this.currentWorkflowController?.userState ?? this.userState;\n this.showingWorkflowOnDeviceAbortion?.abort();\n this.currentWorkflowController?.hide();\n }\n }\n\n public get isFetchingOrLoading(): boolean {\n return this.isLoading.value || this.isFetchingUniqueAction || this.isFetchingDataSource;\n }\n\n public get allowStopJob(): boolean {\n // TODO: Better solution to know when to allow stopping a job?\n return (this.currentWorkflowExecution.value && !this.device) || this.currentWorkflowController?.allowStopJob === true;\n }\n\n private _device?: NimmstaDevice;\n private userStillActiveYes = 0;\n private lastAction = Date.now();\n private lastUserStillActive = Date.now();\n\n private get shouldAskUserForStillActive() {\n return this.allowStopJob\n && this.currentWorkflowExecution.value\n && this.currentWorkflowExecution.value?.workflow?.definition?.disableIdleStopJob !== true\n && this.isPaired\n && this.lastAction\n && this.shouldControlSmartWatch\n && this.uiState.value !== PlatformControllerUIState.LOGIN_ON_DEVICE\n && (\n (this.userStillActiveYes === 0 && (Date.now() - this.lastAction) > 1000 * 60 * 5)\n || (this.userStillActiveYes > 0 && (Date.now() - this.lastAction) > 1000 * 60 * 10)\n );\n }\n\n private isReady = false;\n private isRunning = true;\n private _shouldControlSmartWatch = true;\n private _isInForeground = true;\n private deviceSubscriptions: Subscription[] = [];\n private isFetchingUniqueAction = false;\n\n private fetchWhoAmIAbortController?: AbortController;\n\n get shouldRunTimedActions() {\n return this.isInForeground\n || this.device?.deviceState?.isConnected === true\n || this.currentWorkflowExecution.value !== null;\n }\n private deviceApiWrapper: DeviceAPIWrapper;\n\n private currentWorkflowController?: WorkflowController;\n private currentWorkflowEventHandler?: PlatformWorkflowEventController;\n private currentIdleWorkflow: WorkflowResponse;\n private retryAction?: () => void;\n private isWaitingForTimeout = false;\n private currentTimedActionTimeout?: AbortController;\n private isUploadingLogFile = false;\n\n private showingWorkflowMutex = new Mutex();\n private showingWorkflowOnDeviceAbortion?: AbortController;\n\n constructor(\n private platformConnector: IPlatformConnector,\n private os: string,\n private appVersion: string,\n private deviceName: string,\n private locale: string = null,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onApplyDefaultDeviceSettings: () => void = () => { },\n\n port = 64693,\n private whoamIFetchInterval = 5000,\n private oAuthDelegate: IPlatformOAuthDelegate = null,\n ) {\n PlatformController.currentControllerCount++;\n this.logger = Logger.for(`PlatformController ${PlatformController.currentControllerCount}`);\n this.translations = LangUtils.getMatchingLocaleDict(locale, 'en', lang);\n\n\n console.log('Creating PlatformController', this.locale, port);\n\n NIMMSTA.websocketPort = port;\n NIMMSTA.onReady(() => this.onReady());\n NIMMSTA.onError((err) => {\n this.isReady = false;\n this.workflowError.value = new PlatformError(`Error connecting to app ${err}`);\n });\n NIMMSTA.keepAlwaysConnected = true;\n\n this.logger.info('Trying to connect to the webserver: Is Ready: ', NIMMSTA.isReady);\n NIMMSTA.docReady();\n NIMMSTA.tryConnect();\n\n this.currentWorkflowExecution.subscribe((newValue) => {\n if (!this.isReady) {\n return;\n }\n\n\n console.log('Workflow Execution changed');\n this.platformConnector.account.currentExecution = newValue;\n\n console.log('Workflow Execution changed - account updated');\n if (!this.currentWorkflowExecution.value) {\n this.workflowAppData.value = null;\n }\n\n console.log('Workflow Execution changed done');\n });\n this.whoami.subscribe((newValue) => {\n if (!this.isReady) {\n return;\n }\n\n\n console.log('Whoami changed');\n this.platformConnector.account.whoAmI = newValue;\n\n console.log('Whoami changed - account updated');\n });\n this.uiState.subscribe((_) => {\n\n console.log('UI State changed', this.uiState.value);\n this.logger.debug('UI State changed', this.uiState.value);\n });\n }\n\n private onReady() {\n if (this.isReady) {\n return;\n }\n\n this.isReady = true;\n this.connectionManager = new NimmstaConnectionManager();\n this.platformConnector.bindToConnectionManager(this.connectionManager, this.os, this.appVersion).then(() => {\n this.deviceApiWrapper = new DeviceAPIWrapper(\n new PlatformAPIImpl(this.platformConnector, this.os, this.appVersion, this.deviceName),\n );\n\n if (this.shouldRunTimedActions) {\n this.runTimedActions();\n }\n\n if (this.platformConnector.account.whoAmI) {\n if (this.platformConnector.account.currentExecution) {\n this.currentWorkflowExecution.value = this.platformConnector.account.currentExecution;\n }\n this.updateWhoAmI(this.platformConnector.account.whoAmI);\n }\n\n if (this.connectionManager.connectedDevices.length > 0) {\n if (!this.device && this.connectionManager.connectedDevices[0]) {\n this.device = this.connectionManager.connectedDevices[0];\n }\n }\n\n this.connectionManager.connectEvent.subscribe((device) => {\n this.device = device;\n });\n\n this.connectionManager.deviceStartedConnectingEvent.subscribe((device) => {\n device.setLayout(new LoadingLayout(this.translations.connecting));\n });\n }).catch((e) => {\n this.whoamiError.value = platformErrorFromCauseAndMessage(\n `Critical App Error. Error binding to connection manager ${e}`,\n e,\n this.translations,\n 'platform',\n );\n });\n }\n\n public get device() {\n return this._device;\n }\n\n private set device(device: NimmstaDevice) {\n try {\n if (!device) {\n this._device = null;\n this.deviceSubscriptions.forEach((sub) => sub.cancel());\n this.deviceSubscriptions = [];\n this.deviceEvent.emit(null);\n return;\n }\n\n const wereRunningTimedActions = this.shouldRunTimedActions;\n\n this.fetchWhoAmILoading();\n this.logger.debug('Smart Watch connected', device.address, this.device, device);\n if (this.device !== device) {\n if (this.whoami.value) {\n this.deviceApiWrapper.smartWatchConnected(device).catch((e) => {\n this.logger.debug('Error signaling connect to smart watch', e);\n });\n }\n\n this._device = device;\n this.deviceEvent.emit(this.device);\n this.subscribeToDevice();\n this.applyDeviceScreen();\n if (!wereRunningTimedActions) {\n this.runTimedActions();\n }\n }\n } catch (e) {\n this.logger.error('Error setting device', e, e.stack, device.address);\n this.workflowError.value = platformErrorFromCauseAndMessage(\n `Error setting device ${e}`,\n e,\n this.translations,\n 'device',\n );\n this.logErrorToExectionIfExisting(this.workflowError.value, 'Error setting device');\n this.showWorkflowError();\n }\n }\n\n private subscribeToDevice() {\n this.deviceSubscriptions.forEach((sub) => sub.cancel());\n this.deviceSubscriptions = [];\n this.deviceSubscriptions.push(this.device.scanEvent.subscribe((scanEvent) => this.onScan(scanEvent)));\n this.deviceSubscriptions.push(this.device.disconnectEvent.subscribe((ev) => this.onDeviceDisconnect(ev)));\n this.deviceSubscriptions.push(this.device.buttonEvent.subscribe((ev) => this.onButtonPress(ev)));\n }\n\n private onScan(scanEvent: ScanEvent) {\n if (!this.shouldControlSmartWatch) {\n return;\n }\n\n if (this.state === PlatformControllerState.WAITING_TO_PAIR) {\n this.pairWith(scanEvent.barcode);\n }\n }\n\n private onDeviceDisconnect(ev: DisconnectEvent) {\n this.userState = this.currentWorkflowController?.userState ?? this.userState;\n this.currentWorkflowController?.hide();\n this.currentWorkflowController = null;\n\n this.deviceApiWrapper.smartWatchDisconnected(this.device, ev.reason);\n this.device = null;\n }\n\n private onButtonPress(ev: ButtonEvent) {\n if (!this.shouldControlSmartWatch) {\n return;\n }\n\n switch (this.uiState.value) {\n case PlatformControllerUIState.ERROR:\n if (ev.name === WorkflowActionEnum.RESTART_WORKFLOW) {\n if (this.retryAction) {\n this.retryAction();\n this.retryAction = null;\n } else {\n this.restartJob();\n }\n } else if (ev.name === WorkflowActionEnum.BACK) {\n this.retryAction = null;\n if (this.currentWorkflowController?.currentWorkflowStepController?.needsBackForError) {\n this.currentWorkflowController?.goBack();\n }\n this.showWorkflowOnDevice();\n }\n break;\n case PlatformControllerUIState.WORKFLOW:\n if (ev.name === WorkflowActionEnum.RESTART_WORKFLOW) {\n this.applyDeviceScreen();\n }\n break;\n case PlatformControllerUIState.USER_STILL_ACTIVE:\n if (ev.name === WorkflowActionEnum.CONTINUE_WORKFLOW) {\n this.userStillActiveYes += 1;\n this.showWorkflowOnDevice();\n }\n\n if (ev.name === WorkflowActionEnum.STOP_JOB) {\n this.stopCurrentJob();\n }\n break;\n default:\n throw new Error(\"Can't handle button press in this state\");\n }\n }\n\n private applyDeviceScreen() {\n if (!this.device) {\n return;\n }\n\n if (!this.isPaired) {\n this.showPairOnDevice();\n } else if (this.uiState.value !== PlatformControllerUIState.LOGIN_ON_DEVICE) {\n if (!this.currentWorkflowController) {\n this.loadWorkflow();\n }\n this.showWorkflowOnDevice();\n }\n }\n\n private loadWorkflow() {\n const currentWorkflowExecution = this.currentWorkflowExecution.value;\n if (currentWorkflowExecution !== null) {\n this.loadWorkflowController(\n currentWorkflowExecution.id,\n currentWorkflowExecution.data?.workflow ?? currentWorkflowExecution.workflow.definition,\n Job.fromJSON(\n currentWorkflowExecution.data?.job ?? currentWorkflowExecution.job,\n currentWorkflowExecution.data?.workflow?.jobOptions ?? currentWorkflowExecution.workflow.definition.jobOptions,\n ),\n currentWorkflowExecution.workflow,\n );\n } else if (this.currentIdleWorkflow) {\n this.loadWorkflowController(null, this.currentIdleWorkflow.definition, null, this.currentIdleWorkflow);\n }\n }\n\n private loadWorkflowController(\n executionId: string,\n workflow: Workflow,\n job?: Job,\n workflowResponse?: WorkflowResponse,\n ) {\n if (!this.device) {\n return;\n }\n\n this.workflowAppData.value = null;\n this.showingWorkflowOnDeviceAbortion?.abort();\n this.currentWorkflowController?.hide();\n this.userState = this.currentWorkflowController?.userState ?? this.userState;\n const conManager = this.currentWorkflowController?.connectionManager ?? new NimmstaConnectionManager();\n this.currentWorkflowController = new WorkflowController(conManager, this.device);\n this.currentWorkflowController.userState = this.userState;\n this.linkAdditionalEvalContext();\n this.deviceApiWrapper.clearCache();\n const eventControllerOptions: PlatformWorkflowEventControllerOptions = {\n shouldUseOAuth: !!(\n workflow.oauthConfig?.clientId\n && workflow.oauthConfig.issuerUrl\n && workflow.oauthConfig.scope\n && this.oAuthDelegate\n ),\n executionId,\n device: this.device,\n platformController: this,\n apiWrapper: this.deviceApiWrapper,\n evalWithContextAsyncThrow: async (code, context) => this.currentWorkflowController.evalWithContextAsync(\n code,\n context,\n ),\n translations: this.translations,\n workflowResponse,\n onError: (error) => {\n if (error?.isIgnorable) {\n return;\n }\n\n const updatedError = error;\n if (updatedError) {\n (updatedError as PlatformError).platformContext = {\n ...updatedError.platformContext,\n workflowIdentifier: workflowResponse.identifier,\n workflowExecution: executionId,\n job: job?.id,\n };\n }\n this.workflowError.value = updatedError;\n this.showWorkflowError();\n },\n setWorkflowAppData: (appData) => {\n if (this.workflowAppData.value !== appData) {\n this.workflowAppData.value = appData;\n }\n },\n onLocaleChanged: (locale) => {\n this.locale = locale;\n this.translations = LangUtils.getMatchingLocaleDict(locale, 'en', lang);\n this.linkAdditionalEvalContext();\n },\n storeProgress: (workflow, job, _) => {\n\n console.log('Store progress started');\n this.jobProgressEvent.emit();\n\n\n console.log('Job progress event emitted');\n\n if (this.currentWorkflowExecution.value) {\n if (this.uiState.value === PlatformControllerUIState.WORKFLOW) {\n this.lastAction = Date.now();\n }\n\n\n console.log('Update local workflow exec');\n\n this.currentWorkflowExecution.value = {\n ...this.currentWorkflowExecution.value,\n data: {\n workflow, job, date: Date.now(),\n },\n job,\n };\n\n\n console.log('Done update local');\n }\n },\n obtainAccessToken: workflow.oauthConfig?.allowRefreshToken !== false\n ? async (token) => this.obtainAccessTokenIfNeeded(workflow.oauthConfig!, token)\n : undefined,\n };\n this.currentWorkflowEventHandler = new PlatformWorkflowEventController(eventControllerOptions);\n this.currentWorkflowController.loadWorkflow(\n workflow,\n job,\n this.currentWorkflowEventHandler,\n this.locale,\n );\n this.linkAdditionalEvalContext();\n }\n\n private async obtainAccessTokenIfNeeded(config: WorkflowOAuthConfig, currentAccessToken?: string | null): Promise<AccessTokenResult> {\n if (this.isObtainingAccessTokenForConfig && this.isObtainingAccessTokenForConfig !== config) {\n await this.oAuthDelegate.cancelAccessTokenRequest();\n }\n\n let showedLogin = false;\n this.isObtainingAccessTokenForConfig = config;\n this.logger.debug('Obtaining access token for config', config, currentAccessToken);\n return this.oAuthDelegate.obtainAccessToken(config, currentAccessToken ?? null, () => {\n showedLogin = true;\n this.showLoginOnDevice();\n }).then((result) => {\n if (showedLogin\n && this.uiState.value === PlatformControllerUIState.LOGIN_ON_DEVICE\n && this.state === PlatformControllerState.IN_WORKFLOW\n ) {\n this.uiState.value = PlatformControllerUIState.WORKFLOW;\n this.onApplyDefaultDeviceSettings();\n this.currentWorkflowController?.bringToFront();\n }\n return result;\n }).finally(() => {\n this.isObtainingAccessTokenForConfig = null;\n });\n }\n\n private showPairOnDevice() {\n this.uiState.value = PlatformControllerUIState.PAIRING;\n\n this.showingWorkflowOnDeviceAbortion?.abort();\n this.workflowAppData.value = null;\n this.userState = this.currentWorkflowController?.userState ?? this.userState;\n this.currentWorkflowController?.hide();\n\n if (this.shouldControlSmartWatch) {\n this.onApplyDefaultDeviceSettings();\n this.device?.setLayout(new PairAppLayout(this.translations.pair_app, this.translations.scan_qr_code));\n }\n }\n\n private showLoginOnDevice() {\n this.uiState.value = PlatformControllerUIState.LOGIN_ON_DEVICE;\n\n this.workflowAppData.value = null;\n this.userState = this.currentWorkflowController?.userState ?? this.userState;\n // TODO: This might cancel ongoing action - maybe we should reconsider here.\n this.currentWorkflowController?.hide();\n\n if (this.shouldControlSmartWatch) {\n this.onApplyDefaultDeviceSettings();\n this.device?.setLayout(new LoginOnDeviceLayout(this.translations.login_on_device));\n }\n }\n\n private showLoading() {\n this.uiState.value = PlatformControllerUIState.LOADING;\n\n this.userState = this.currentWorkflowController?.userState ?? this.userState;\n this.currentWorkflowController?.hide();\n if (this.shouldControlSmartWatch) {\n this.onApplyDefaultDeviceSettings();\n this.device?.triggerLEDBurstParameters(10, 100, 100, 255, 255, 0);\n this.device?.setLayout(new LoadingLayout(this.translations.loading));\n }\n }\n\n private async showWorkflowOnDevice() {\n try {\n this.uiState.value = PlatformControllerUIState.WORKFLOW;\n\n this.workflowAppData.value = null;\n this.workflowError.value = null;\n this.lastAction = Date.now();\n this.logger.debug('Showing workflow on device', this.currentWorkflowExecution.value);\n\n // FIXME: find out why this is problematic.\n if ((this.device as any)?.__visibleWorkflowController?.uniqueId !== this.currentWorkflowController?.uniqueId) {\n (this.device as any)?.__visibleWorkflowController?.hide();\n }\n\n if (!this.shouldControlSmartWatch) {\n return;\n }\n\n // before showing the workflow, we need to ensure that no other workflow is currently being shown\n // and this one is only running once.\n const newAbortController = new AbortController();\n await this.showingWorkflowMutex.runExclusive(async () => {\n if (this.showingWorkflowOnDeviceAbortion?.signal?.aborted === false) {\n newAbortController.abort();\n } else {\n this.showingWorkflowOnDeviceAbortion = newAbortController;\n }\n });\n\n if (newAbortController.signal.aborted) {\n return;\n }\n\n await this.onBeforeShowWorkflowOnDevice();\n\n if (newAbortController.signal.aborted) {\n return;\n }\n this.showingWorkflowOnDeviceAbortion = undefined;\n\n this.onApplyDefaultDeviceSettings();\n this.device?.triggerLEDBurstParameters(1, 100, 100, 0, 0, 0);\n this.currentWorkflowController?.bringToFront();\n } catch (e) {\n if (e?.isIgnorable === true) {\n this.stopCurrentJob();\n } else {\n this.logger.error('Error bringing workflow to front', e, e.stack);\n this.workflowError.value = platformErrorFromCauseAndMessage(\n `Error running workflow ${e}`,\n e,\n this.translations,\n 'workflow',\n );\n this.logErrorToExectionIfExisting(this.workflowError.value, 'Error showing workflow on device');\n this.showWorkflowError();\n }\n }\n }\n\n private async onBeforeShowWorkflowOnDevice(): Promise<void> {\n await this.currentWorkflowEventHandler?.onBeforeShowWorkflowOnDevice();\n }\n\n private showWorkflowError() {\n this.showError(\n getErrorUserMessageRecoveryInfo(this.workflowError.value, this.translations, 'workflow'),\n this.translations.error,\n );\n }\n\n private logErrorToExectionIfExisting(\n error: Error,\n message: string,\n ) {\n if (this.currentWorkflowExecution.value.id) {\n this.deviceApiWrapper.logEventAsync(this.currentWorkflowExecution.value.id, null, {\n error,\n developerInfo: (error as PlatformError)?.developerInfo,\n stack: error?.stack,\n message: error?.message,\n platformContext: message,\n workflow: this.currentWorkflowController?.workflow,\n }, null, 'error').catch((e) => {\n this.logErrorToExectionIfExisting(\n e,\n `Error logging error to execution for ${message} for ${error?.message} due to ${e?.message}`,\n );\n });\n }\n }\n\n private showError(\n error: string,\n title?: string,\n retry?: string,\n retryAction: () => void = () => this.restartJob(),\n showBack = false,\n ) {\n this.uiState.value = PlatformControllerUIState.ERROR;\n\n this.userState = this.currentWorkflowController?.userState ?? this.userState;\n this.currentWorkflowController?.hide();\n this.retryAction = retryAction;\n\n if (!this.shouldControlSmartWatch) {\n return;\n }\n\n this.logger.debug('Showing Error');\n this.onApplyDefaultDeviceSettings();\n this.device?.triggerSOS();\n\n if (showBack\n && (!this.currentWorkflowController?.currentWorkflowStepController?.needsBackForError\n || this.currentWorkflowController?.canGoBack()\n )\n ) {\n this.device?.setLayout(new WorkflowErrorLayoutWithBack(\n error,\n title ?? this.translations.error,\n retry ?? this.translations.retry,\n this.translations.back,\n ));\n } else {\n this.device?.setLayout(new WorkflowErrorLayout(\n error,\n title ?? this.translations.error,\n retry ?? this.translations.restart_workflow,\n ));\n }\n }\n\n private showUserStillActiveOnDevice() {\n if (this.uiState.value === PlatformControllerUIState.USER_STILL_ACTIVE) {\n if (this.lastUserStillActive && (Date.now() - this.lastUserStillActive) > 1000 * 60) {\n this.stopCurrentJob();\n }\n return;\n }\n\n this.lastUserStillActive = Date.now();\n\n this.uiState.value = PlatformControllerUIState.USER_STILL_ACTIVE;\n\n if (!this.shouldControlSmartWatch) {\n return;\n }\n\n this.onApplyDefaultDeviceSettings();\n this.userState = this.currentWorkflowController?.userState ?? this.userState;\n this.currentWorkflowController?.hide();\n this.device?.triggerLEDBurstParameters(10, 100, 100, 255, 255, 0);\n this.device?.triggerVibratorBurstParameters(1, 50, 100, 100);\n this.device?.triggerBeeperBurstParameters(1, 50, 100, 100);\n this.device?.setLayout(new UserStillActiveLayout(\n this.translations.user_still_active,\n this.translations.no_stop_job,\n this.translations.warning,\n this.translations.yes,\n ));\n }\n\n async startFetchingUniqueAction(fn: () => Promise<void>) {\n if (this.isFetchingUniqueAction) {\n throw new PlatformError(\n 'Already fetching. Do not call two actions at the same time.',\n undefined,\n undefined,\n undefined,\n undefined,\n {\n state: this.state,\n whoami: this.whoami.value,\n currentWorkflowExecution: this.currentWorkflowExecution.value,\n },\n );\n }\n\n this.fetchWhoAmIAbortController?.abort();\n this.isLoading.value = true;\n this.isFetchingUniqueAction = true;\n this.showLoading();\n try {\n await fn();\n } finally {\n this.isLoading.value = false;\n this.isFetchingUniqueAction = false;\n }\n }\n\n async fetchWhoAmIAsync(signal: AbortSignal) {\n try {\n if (this.isFetchingUniqueAction\n || (!this.platformConnector.account?.whoAmI && !this.platformConnector.account?.isLoggedIn)\n || signal.aborted\n ) {\n return;\n }\n\n const result = await this.deviceApiWrapper.fetchWhoAmIAsync(signal, this.device);\n if (signal.aborted) {\n return;\n }\n\n this.updateWhoAmI(result);\n } catch (e) {\n if (signal.aborted || e?.name === 'AbortError') {\n return;\n }\n\n // only if HTTPError with status code 401 or 403 we logout\n if (e instanceof WhoAmIError && e.authFailed) {\n this.whoami.value = null;\n this.whoamiError.value = null;\n this.currentIdleWorkflow = null;\n this.currentWorkflowExecution.value = null;\n if (e.shouldShowError) {\n this.showError(\n getErrorUserMessageRecoveryInfo(e, this.translations, 'whoami'),\n getErrorUserMessageTitle(e, this.translations, 'whoami'),\n this.translations.pair_again,\n () => this.showPairOnDevice(),\n );\n } else {\n this.showPairOnDevice();\n }\n } else {\n if (!this.isFetchingOrLoading\n && (this.state === PlatformControllerState.WAITING_TO_PAIR || this.state === PlatformControllerState.IDLE)) {\n // we already have an error message\n if (this.whoamiError.value) {\n return;\n }\n this.showError(\n getErrorUserMessageRecoveryInfo(e, this.translations, 'whoami'),\n getErrorUserMessageTitle(e, this.translations, 'whoami'),\n this.translations.retry,\n () => {\n this.fetchWhoAmILoading();\n },\n );\n }\n this.whoamiError.value = e;\n }\n }\n }\n\n private updateWhoAmI(result?: WhoamIResponse) {\n try {\n this.logger.debug('Updating whoami');\n this.whoami.value = result;\n\n const desiredIdleWorkflow = result?.idleWorkflow ?? defaultIdleWorkflow();\n this.logger.debug('Desired idle workflow', desiredIdleWorkflow?.id);\n if (desiredIdleWorkflow?.id !== this.currentIdleWorkflow?.id\n || desiredIdleWorkflow?.lastUpdatedAt !== this.currentIdleWorkflow?.lastUpdatedAt) {\n this.currentIdleWorkflow = { ...desiredIdleWorkflow };\n\n if (this.state === PlatformControllerState.IDLE) {\n this.loadWorkflow();\n this.showWorkflowOnDevice();\n }\n }\n\n if (result?.currentWorkflowExecutionId\n && result?.currentWorkflowExecutionId !== this.currentWorkflowExecution.value?.id\n && !this.workflowShouldStillRun) {\n this.startWorkflowByIdentifier(null);\n }\n\n if (!this.workflowShouldStillRun && !result?.currentWorkflowExecutionId && this.currentWorkflowExecution.value) {\n // TODO: Show Job Cancellation?\n this.logger.debug('Job is not available on the server anymore', this.currentWorkflowExecution.value?.id);\n this.currentWorkflowExecution.value = null;\n this.loadWorkflow();\n if (this.state === PlatformControllerState.IDLE) {\n this.showWorkflowOnDevice();\n }\n }\n\n if (result?.requestLogFile === true) {\n this.uploadCurrentLogFileIfNeeded();\n }\n\n this.linkAdditionalEvalContext();\n\n if (this.whoamiError.value) {\n this.whoamiError.value = null;\n this.applyDeviceScreen();\n }\n } catch (e) {\n if (this.state === PlatformControllerState.WAITING_TO_PAIR || this.state === PlatformControllerState.IDLE) {\n // we already have an error message\n if (this.whoamiError.value) {\n return;\n }\n\n this.showError(\n getErrorUserMessageRecoveryInfo(e, this.translations, 'whoami'),\n this.translations.failed_to_identify_you,\n this.translations.retry,\n () => this.fetchWhoAmILoading(),\n );\n }\n this.whoamiError.value = e;\n }\n }\n\n private uploadCurrentLogFileIfNeeded() {\n if (this.isUploadingLogFile) {\n return;\n }\n\n this.isUploadingLogFile = true;\n this.deviceApiWrapper.uploadCurrentLogFile().finally(() => {\n // we retry maximum every 60s\n TimerUtils.setTimeout(() => {\n this.isUploadingLogFile = false;\n }, 60000);\n });\n }\n\n private fetchWhoAmILoading() {\n this.isLoading.value = true;\n this.showLoading();\n this.fetchWhoAmI(() => {\n this.isLoading.value = false;\n this.applyDeviceScreen();\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private fetchWhoAmI(done: () => void = () => { }) {\n this.fetchWhoAmIAbortController?.abort();\n this.fetchWhoAmIAbortController = new AbortController();\n this.fetchWhoAmIAsync(this.fetchWhoAmIAbortController.signal).finally(done);\n }\n\n private runTimedActions() {\n this.logger.debug(\n 'Install timer for timed actions',\n this.isRunning,\n this.shouldRunTimedActions,\n this.isFetchingOrLoading,\n );\n if (this.isWaitingForTimeout) {\n this.logger.debug('Already waiting for timeout');\n return;\n }\n\n this.isWaitingForTimeout = true;\n const abortController = new AbortController();\n this.currentTimedActionTimeout?.abort();\n this.currentTimedActionTimeout = abortController;\n TimerUtils.setTimeout(() => {\n this.isWaitingForTimeout = false;\n if (abortController.signal.aborted) {\n return;\n }\n\n this.logger.debug('Running timed actions', this.isRunning, this.shouldRunTimedActions, this.isFetchingOrLoading);\n if (this.isRunning && this.shouldRunTimedActions) {\n // if already fetching, do nothing.\n if (this.isFetchingOrLoading) {\n this.runTimedActions();\n return;\n }\n\n this.fetchWhoAmI(() => {\n if (abortController.signal.aborted) {\n return;\n }\n\n if (this.shouldAskUserForStillActive) {\n this.showUserStillActiveOnDevice();\n }\n\n this.logger.debug('Rerun timed actions', abortController.signal.aborted);\n this.runTimedActions();\n });\n }\n }, this.whoamIFetchInterval);\n }\n\n private async executeWorkflowAction(\n title: string,\n error: string,\n action: () => Promise<void>,\n onComplete: () => void = () => {\n if (!this.isFetchingUniqueAction) {\n // show idle workflow\n this.loadWorkflow();\n this.showWorkflowOnDevice();\n }\n },\n ): Promise<void> {\n\n console.log('Executing workflow action', title, this.isFetchingUniqueAction);\n this.lastAction = Date.now();\n await this.startFetchingUniqueAction(async () => {\n try {\n await action();\n this.isLoading.value = false;\n this.isFetchingUniqueAction = false;\n onComplete();\n } catch (e) {\n this.logErrorToExectionIfExisting(e, `Workflow Action: ${title}`);\n\n // already shown an error\n if (this.uiState.value === PlatformControllerUIState.ERROR) {\n return;\n }\n\n this.logger.error('Error in execute workflow action', e);\n this.showError(\n getErrorUserMessageRecoveryInfo(e, this.translations, title),\n error,\n this.translations.retry,\n () => this.executeWorkflowAction(title, error, action, onComplete),\n true,\n );\n }\n });\n }\n\n async exitWorkflow(workflow: Workflow, job?: Job): Promise<void> {\n await this.executeWorkflowAction(\n 'exitWorkflow',\n this.translations.exit_workflow_failed,\n async () => {\n if (this.currentWorkflowExecution.value && this.currentWorkflowExecution.value.status !== 'COMPLETE') {\n this.showError(\n this.translations.exit_workflow_failed,\n 'Job must be completed before exiting.',\n this.translations.force_stop_job,\n () => this.stopCurrentJob(workflow, job, true),\n true,\n );\n return;\n }\n\n this.logger.debug('Job exited', this.currentWorkflowExecution.value);\n this.currentWorkflowExecution.value = null;\n },\n );\n }\n\n async stopCurrentJob(workflow?: Workflow, job?: Job, forceStop = false): Promise<void> {\n this.firstActionWasStop = true;\n await this.executeWorkflowAction(\n 'stopCurrentJob',\n this.translations.stop_job_failed,\n async () => {\n const actualWf = workflow ?? this.currentWorkflowController?.workflow;\n if (actualWf?.onStopJobCode) {\n this.logger.debug('Executing onStopJobCode', actualWf.onStopJobCode);\n // we have to set this to false to allow the onStopJobCode to complete or skip the job.\n this.isFetchingUniqueAction = false;\n try {\n await this.currentWorkflowController.evalWithContextAsyncThrow(actualWf.onStopJobCode, {\n worker: this.whoami.value,\n });\n } catch (error) {\n if (!forceStop) {\n\n console.log(\n 'Error executing onStopJobCode, not stopping the job',\n this.translations.force_stop_job,\n this.translations,\n error,\n );\n this.logErrorToExectionIfExisting(error, `On Stop Code: ${workflow?.onStopJobCode}`);\n this.showError(\n getErrorUserMessageRecoveryInfo(error, this.translations, this.translations.stop_job_code_failed),\n this.translations.stop_job_code_failed,\n this.translations.force_stop_job,\n () => this.stopCurrentJob(workflow, job, true),\n true,\n );\n\n const onStopError = new Error(\n `Error executing onStopJobCode with error: ${error}`,\n );\n (onStopError as any).cause = error;\n throw onStopError;\n }\n }\n if (\n job?.completeJobOnStop === true\n && !(this.isFetchingUniqueAction || this.currentWorkflowExecution.value === null)\n ) {\n // trigger complete job if the job is set to complete on stop and no other action is running.\n this.completeCurrentJob(actualWf, job);\n }\n // if the stop code started is stopping or stopped the job otherwise, we stop here.\n if (this.isFetchingUniqueAction || this.currentWorkflowExecution.value === null) {\n return;\n } else {\n // if not we have to block others again.\n this.isFetchingUniqueAction = true;\n }\n }\n\n this.logger.debug('Stopping job', this.currentWorkflowExecution.value);\n\n await this.deviceApiWrapper.stopJob();\n\n this.logger.debug('Job stopped', this.currentWorkflowExecution.value);\n this.currentWorkflowExecution.value = null;\n },\n );\n }\n\n async skipCurrentJob(workflow: Workflow, _: Job, jobToPass?: Job): Promise<void> {\n const wfIdentifier = this.currentWorkflowExecution.value?.workflow?.identifier;\n await this.executeWorkflowAction(\n 'skipCurrentJob',\n this.translations.skip_job_failed,\n async () => {\n await this.deviceApiWrapper.skipJob();\n this.currentWorkflowExecution.value = null;\n },\n () => this.startWorkflowByIdentifierIfNotStop(\n workflow.doneOrSkipWorkflowIdentifier === undefined\n ? wfIdentifier\n : workflow.doneOrSkipWorkflowIdentifier,\n undefined,\n jobToPass,\n ),\n );\n }\n\n async cancelCurrentJob(workflow: Workflow, __: Job, jobToPass?: Job): Promise<void> {\n const wfIdentifier = this.currentWorkflowExecution.value?.workflow?.identifier;\n await this.executeWorkflowAction(\n 'cancelCurrentJob',\n this.translations.cancel_job_failed,\n async () => {\n await this.deviceApiWrapper.cancelJob();\n this.currentWorkflowExecution.value = null;\n },\n () => this.startWorkflowByIdentifierIfNotStop(\n workflow.doneOrSkipWorkflowIdentifier === undefined\n ? wfIdentifier\n : workflow.doneOrSkipWorkflowIdentifier,\n undefined,\n jobToPass,\n ),\n );\n }\n\n async completeCurrentJob(\n workflow: Workflow,\n job: Job,\n stopWorkflow = true,\n jobToPass: Job = undefined,\n ): Promise<void> {\n this.logger.debug('Completing job', job, workflow, this);\n this.workflowShouldStillRun = !stopWorkflow;\n const wfIdentifier = this.currentWorkflowExecution.value?.workflow?.identifier;\n await this.executeWorkflowAction(\n 'completeCurrentJob',\n this.translations.complete_job_failed,\n async () => this.deviceApiWrapper.completeJob(\n this.currentWorkflowExecution.value?.id,\n job,\n this.currentWorkflowController?.workflow,\n this.device,\n ),\n () => {\n if (this.currentWorkflowExecution?.value) {\n this.currentWorkflowExecution.value.status = 'COMPLETE';\n }\n\n if (stopWorkflow || this.firstActionWasStop) {\n this.startWorkflowByIdentifierIfNotStop(\n workflow.doneOrSkipWorkflowIdentifier === undefined\n ? wfIdentifier\n : workflow.doneOrSkipWorkflowIdentifier,\n undefined,\n jobToPass,\n );\n } else {\n this.applyDeviceScreen();\n }\n },\n );\n }\n\n async startWorkflowByIdentifierIfNotStop(\n workflowIdentifier: string,\n jobToClose?: Job,\n jobToPass?: Job,\n previousExecutionId?: string,\n ) {\n if (this.firstActionWasStop) {\n this.firstActionWasStop = false;\n this.currentWorkflowExecution.value = null;\n this.loadWorkflow();\n this.applyDeviceScreen();\n return;\n }\n\n this.startWorkflowByIdentifier(workflowIdentifier, jobToClose, jobToPass, previousExecutionId);\n }\n\n async startWorkflowByIdentifier(\n workflowIdentifier: string,\n jobToClose?: Job,\n jobToPass?: Job,\n previousExecutionId?: string,\n ) {\n this.workflowShouldStillRun = false;\n this.firstActionWasStop = false;\n await this.executeWorkflowAction(\n 'startWorkflowWithIdentifier',\n this.translations.could_not_start_workflow,\n async () => {\n this.currentWorkflowExecution.value = null;\n this.currentWorkflowExecution.value = await this.deviceApiWrapper.startWorkflowWithIdentifier(\n workflowIdentifier,\n jobToClose,\n jobToPass,\n previousExecutionId,\n this.device,\n );\n },\n );\n }\n\n restartJob() {\n this.lastAction = Date.now();\n this.loadWorkflow();\n this.showWorkflowOnDevice();\n }\n\n async pairWith(qrCode: string): Promise<void> {\n this.logger.debug('Pairing with QR Code', qrCode);\n if (this.isLoading.value) {\n return;\n }\n\n this.fetchWhoAmIAbortController?.abort();\n this.isLoading.value = true;\n this.showLoading();\n this.userState = this.currentWorkflowController?.userState ?? this.userState;\n this.currentWorkflowController?.hide();\n this.currentWorkflowController = null;\n try {\n await this.deviceApiWrapper.pairWithAsync(qrCode);\n this.fetchWhoAmIAsync(new AbortController().signal);\n if (this.device) {\n this.deviceApiWrapper.smartWatchConnected(this.device).catch((e) => {\n this.logger.debug('Error signaling connect to smart watch', e);\n });\n }\n } catch (e) {\n this.showError(\n getErrorUserMessageRecoveryInfo(e, this.translations, 'pairing'),\n getErrorUserMessageTitle(e, this.translations, 'pairing'),\n this.translations.retry,\n () => {\n if (this.whoami.value) {\n this.showWorkflowOnDevice();\n } else {\n this.showPairOnDevice();\n }\n },\n );\n throw e;\n } finally {\n this.isLoading.value = false;\n }\n\n this.fetchWhoAmILoading();\n }\n\n getWFTranslation(key: string) {\n return this.translations[key] ?? key;\n }\n\n linkAdditionalEvalContext() {\n if (this.currentWorkflowController) {\n this.currentWorkflowController.additionalEvalContext = {\n worker: this.whoami.value,\n translations: { ...this.translations, ...this.currentWorkflowController.currentLocaleDict },\n app: {\n os: this.os,\n appVersion: this.appVersion,\n deviceName: this.deviceName,\n locale: this.locale,\n },\n };\n }\n }\n\n close() {\n NIMMSTA.close();\n this.currentWorkflowController?.hide();\n this.isRunning = false;\n }\n\n static enableDebugLogging() {\n Logger.enableDebugLogging();\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst parse_js_1 = require(\"./parse.js\");\nconst stringify_js_1 = require(\"./stringify.js\");\nfunction v6ToV1(uuid) {\n const v6Bytes = typeof uuid === 'string' ? (0, parse_js_1.default)(uuid) : uuid;\n const v1Bytes = _v6ToV1(v6Bytes);\n return typeof uuid === 'string' ? (0, stringify_js_1.unsafeStringify)(v1Bytes) : v1Bytes;\n}\nexports.default = v6ToV1;\nfunction _v6ToV1(v6Bytes) {\n return Uint8Array.of(((v6Bytes[3] & 0x0f) << 4) | ((v6Bytes[4] >> 4) & 0x0f), ((v6Bytes[4] & 0x0f) << 4) | ((v6Bytes[5] & 0xf0) >> 4), ((v6Bytes[5] & 0x0f) << 4) | (v6Bytes[6] & 0x0f), v6Bytes[7], ((v6Bytes[1] & 0x0f) << 4) | ((v6Bytes[2] & 0xf0) >> 4), ((v6Bytes[2] & 0x0f) << 4) | ((v6Bytes[3] & 0xf0) >> 4), 0x10 | ((v6Bytes[0] & 0xf0) >> 4), ((v6Bytes[0] & 0x0f) << 4) | ((v6Bytes[1] & 0xf0) >> 4), v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = exports.validate = exports.v7 = exports.v6ToV1 = exports.v6 = exports.v5 = exports.v4 = exports.v3 = exports.v1ToV6 = exports.v1 = exports.stringify = exports.parse = exports.NIL = exports.MAX = void 0;\nvar max_js_1 = require(\"./max.js\");\nObject.defineProperty(exports, \"MAX\", { enumerable: true, get: function () { return max_js_1.default; } });\nvar nil_js_1 = require(\"./nil.js\");\nObject.defineProperty(exports, \"NIL\", { enumerable: true, get: function () { return nil_js_1.default; } });\nvar parse_js_1 = require(\"./parse.js\");\nObject.defineProperty(exports, \"parse\", { enumerable: true, get: function () { return parse_js_1.default; } });\nvar stringify_js_1 = require(\"./stringify.js\");\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return stringify_js_1.default; } });\nvar v1_js_1 = require(\"./v1.js\");\nObject.defineProperty(exports, \"v1\", { enumerable: true, get: function () { return v1_js_1.default; } });\nvar v1ToV6_js_1 = require(\"./v1ToV6.js\");\nObject.defineProperty(exports, \"v1ToV6\", { enumerable: true, get: function () { return v1ToV6_js_1.default; } });\nvar v3_js_1 = require(\"./v3.js\");\nObject.defineProperty(exports, \"v3\", { enumerable: true, get: function () { return v3_js_1.default; } });\nvar v4_js_1 = require(\"./v4.js\");\nObject.defineProperty(exports, \"v4\", { enumerable: true, get: function () { return v4_js_1.default; } });\nvar v5_js_1 = require(\"./v5.js\");\nObject.defineProperty(exports, \"v5\", { enumerable: true, get: function () { return v5_js_1.default; } });\nvar v6_js_1 = require(\"./v6.js\");\nObject.defineProperty(exports, \"v6\", { enumerable: true, get: function () { return v6_js_1.default; } });\nvar v6ToV1_js_1 = require(\"./v6ToV1.js\");\nObject.defineProperty(exports, \"v6ToV1\", { enumerable: true, get: function () { return v6ToV1_js_1.default; } });\nvar v7_js_1 = require(\"./v7.js\");\nObject.defineProperty(exports, \"v7\", { enumerable: true, get: function () { return v7_js_1.default; } });\nvar validate_js_1 = require(\"./validate.js\");\nObject.defineProperty(exports, \"validate\", { enumerable: true, get: function () { return validate_js_1.default; } });\nvar version_js_1 = require(\"./version.js\");\nObject.defineProperty(exports, \"version\", { enumerable: true, get: function () { return version_js_1.default; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stringify_js_1 = require(\"./stringify.js\");\nconst v1_js_1 = require(\"./v1.js\");\nconst v1ToV6_js_1 = require(\"./v1ToV6.js\");\nfunction v6(options, buf, offset) {\n options ??= {};\n offset ??= 0;\n let bytes = (0, v1_js_1.default)({ ...options, _v6: true }, new Uint8Array(16));\n bytes = (0, v1ToV6_js_1.default)(bytes);\n if (buf) {\n for (let i = 0; i < 16; i++) {\n buf[offset + i] = bytes[i];\n }\n return buf;\n }\n return (0, stringify_js_1.unsafeStringify)(bytes);\n}\nexports.default = v6;\n"," \nimport { NimmstaLayout } from '@nimmsta/web-library';\n\nexport class LoginOnDeviceLayout extends NimmstaLayout {\n constructor(loginOnDevice = 'Log in on your SmartPhone...', productName = 'Productivity Cloud') {\n const xml = `\n <?xml version=\"1.0\" encoding=\"utf-8\"?>\n <NimmstaLayout name=\"Productivity Cloud Login Layout\">\n <staticElements>\n <statusbar/>\n <cell horizontalAlignment=\"center\" wrapMode=\"wrap\" name=\"productName\" padding=\"4pt\" maxLines=\"2\" fontSize=\"22pt\" y=\"40\" name=\"title\">Productivity Cloud</cell>\n <cell horizontalAlignment=\"center\" wrapMode=\"wrap\" name=\"loading\" padding=\"4pt\" maxLines=\"4\">Log in on your SmartPhone...</cell>\n </staticElements>\n </NimmstaLayout>\n `;\n super(xml, { loading: loginOnDevice, productName });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ActionController } from './ActionController';\nimport { WorkflowController } from './WorkflowController';\nimport { Action } from './models/Action';\nimport { Workflow } from './models/Workflow';\n\ninterface ActionControllerConstructor {\n new (\n workflowController: WorkflowController,\n action: Action,\n workflow: Workflow,\n data: any,\n additionalContext: any,\n onFinishedRequest: () => void,\n ): ActionController;\n}\n\nexport class ActionControllerFactory {\n private static customControllers: Map<string, ActionControllerConstructor> = new Map();\n\n static createActionController(\n workflowController: WorkflowController,\n action: Action,\n workflow: Workflow,\n data: any = {},\n additionalContext: any = {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onFinishedRequest: () => void = () => { },\n ): ActionController {\n if (action.type) {\n if (this.customControllers.has(action.type)) {\n return new (this.customControllers.get(action.type))(\n workflowController,\n action,\n workflow,\n data,\n additionalContext,\n onFinishedRequest,\n );\n } else {\n\n console.error('Custom type set but no Controller is registered!');\n return undefined;\n }\n } else {\n return new ActionController(workflowController, action, workflow, data, additionalContext, onFinishedRequest);\n }\n }\n\n static registerActionController(name: string, actionController: ActionControllerConstructor) {\n this.customControllers.set(\n name,\n actionController,\n );\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar Semaphore_1 = require(\"./Semaphore\");\nvar Mutex = /** @class */ (function () {\n function Mutex(cancelError) {\n this._semaphore = new Semaphore_1.default(1, cancelError);\n }\n Mutex.prototype.acquire = function () {\n return tslib_1.__awaiter(this, arguments, void 0, function (priority) {\n var _a, releaser;\n if (priority === void 0) { priority = 0; }\n return tslib_1.__generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this._semaphore.acquire(1, priority)];\n case 1:\n _a = _b.sent(), releaser = _a[1];\n return [2 /*return*/, releaser];\n }\n });\n });\n };\n Mutex.prototype.runExclusive = function (callback, priority) {\n if (priority === void 0) { priority = 0; }\n return this._semaphore.runExclusive(function () { return callback(); }, 1, priority);\n };\n Mutex.prototype.isLocked = function () {\n return this._semaphore.isLocked();\n };\n Mutex.prototype.waitForUnlock = function (priority) {\n if (priority === void 0) { priority = 0; }\n return this._semaphore.waitForUnlock(1, priority);\n };\n Mutex.prototype.release = function () {\n if (this._semaphore.isLocked())\n this._semaphore.release();\n };\n Mutex.prototype.cancel = function () {\n return this._semaphore.cancel();\n };\n return Mutex;\n}());\nexports.default = Mutex;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ButtonEvent, LEDMode, Logger, LTBlinkingPattern, LTColor,\n NimmstaConnectionManager, NimmstaDevice, NimmstaLayout, ScanEvent, TouchEvent,\n} from '@nimmsta/web-library';\nimport { Workflow } from './models/Workflow';\nimport { WorkflowStepControllerFactory } from './WorkflowStepControllerFactory';\nimport { WorkflowStepController } from './WorkflowStepController';\nimport { IWorkflowHandler } from './IWorkflowHandler';\nimport { Job } from './models/job/Job';\nimport { SkipJobController } from './customController/SkipJobController';\nimport { SaveJobController } from './customController/SaveJobController';\nimport { CancelJobController } from './customController/CancelJobController';\nimport { StopJobController } from './customController/StopJobController';\nimport { DefaultWorkflow } from './models/DefaultWorkflow';\nimport { APIParameters } from './models/API';\nimport { WorkflowStepState } from './models/WorkflowStep';\nimport { LangUtils } from './util/LangUtils';\nimport { TimerUtils } from './util/TimerUtil';\nimport { NIMMSTAEvalUtils } from './util/EvalUtil';\nimport { Interval } from './models/Interval';\nimport { PlatformError } from './platform';\nimport { Base36 } from './util/Base36';\nimport { JwtParser } from './util/JwtParser';\n\nexport class WorkflowController {\n public static supportedSchemaVersion = 2;\n\n public workflow: Workflow;\n public currentLocaleDict = {};\n public currentWorkflowStepController?: WorkflowStepController;\n public userState = {};\n public additionalEvalContext = {};\n public get uniqueId(): number {\n return this._uniqueId;\n }\n public get allowStopJob(): boolean {\n // if it is globally disabled\n if (this.workflow.disallowStopJob === false) {\n return true;\n }\n\n // if it is globally enabled\n if (this.workflow.disallowStopJob === true) {\n // exception: if the current step explicitly allows it\n return this.currentWorkflowStepController?.allowStopJob === true;\n }\n\n // if it is not set globally, the step decides\n return this.currentWorkflowStepController?.allowStopJob !== false;\n }\n public get isVisible() {\n return this._isVisible;\n }\n\n private subscriptions = [];\n\n private workflowHandler: IWorkflowHandler;\n\n private _isVisible = false;\n private lighttagsSet = false;\n private _uniqueId: number;\n private currentIntervalAbortController: AbortController;\n\n static CANCEL_JOB = 'CancelJob';\n static SAVE_JOB = 'SaveJob';\n static SKIP_JOB = 'SkipJob';\n static STOP_JOB = 'StopJob';\n\n static globalUniqueCounter = 0;\n\n private logger: Logger;\n\n constructor(\n public connectionManager: NimmstaConnectionManager,\n public device: NimmstaDevice,\n ) {\n this.logger = Logger.for('WorkflowController');\n this._uniqueId = WorkflowController.globalUniqueCounter++;\n this.subscribeToEvents();\n\n // Register Custom Controller\n WorkflowStepControllerFactory.registerWorkflowStepController(WorkflowController.CANCEL_JOB, CancelJobController);\n WorkflowStepControllerFactory.registerWorkflowStepController(WorkflowController.SAVE_JOB, SaveJobController);\n WorkflowStepControllerFactory.registerWorkflowStepController(WorkflowController.SKIP_JOB, SkipJobController);\n WorkflowStepControllerFactory.registerWorkflowStepController(WorkflowController.STOP_JOB, StopJobController);\n }\n\n private subscribeToEvents() {\n this.unsubscribe();\n\n this.subscriptions.push(this.device.scanEvent.subscribe((data) => this.onScanEvent(data)));\n this.subscriptions.push(this.device.buttonEvent.subscribe((data) => this.onButtonEvent(data)));\n this.subscriptions.push(this.device.triggerEvent.subscribe(() => this.onTriggerEvent()));\n this.subscriptions.push(this.device.doubleTriggerEvent.subscribe(() => this.onDoubleTriggerEvent()));\n this.subscriptions.push(this.device.tripleTriggerEvent.subscribe(() => this.onTripleTriggerEvent()));\n this.subscriptions.push(this.device.touchEvent.subscribe((data) => this.onTouchEvent(data)));\n }\n\n public loadWorkflow(\n workflow: Workflow | string,\n job: Job | undefined,\n workflowHandler: IWorkflowHandler,\n locale = 'en_US',\n ) {\n // If handler attached cancel previous and start new\n if (this.subscriptions.length === 0) {\n\n console.error('You need to subscribe before executing a workflow!');\n }\n this.workflowHandler = workflowHandler;\n if (typeof workflow === 'string') {\n this.workflow = JSON.parse(workflow) as Workflow;\n } else {\n // TODO: Add Validation\n this.workflow = workflow;\n }\n this.workflow = { ...DefaultWorkflow.getDefaultWorkflow(), ...this.workflow };\n this.addDefaultSteps();\n this.workflow.job = Job.fromJSON(job, this.workflow.jobOptions);\n this.workflow.translationKeys = this.workflow.translationKeys ?? {};\n this.currentLocaleDict = LangUtils.getMatchingLocaleDict(\n locale,\n this.workflow.defaultLocale,\n this.workflow.translationKeys,\n );\n }\n\n private registerIntervals() {\n if (this.workflow.intervalActions) {\n this.currentIntervalAbortController?.abort();\n this.currentIntervalAbortController = new AbortController();\n this.workflow.intervalActions.forEach(\n (interval) => this.registerInterval(interval, this.currentIntervalAbortController.signal),\n );\n }\n }\n\n private registerInterval(interval: Interval, abortSignal: AbortSignal) {\n if (interval.code === undefined || interval.interval === undefined) {\n return;\n }\n\n let intervalAsNumber: number;\n try {\n intervalAsNumber = parseInt(interval.interval.toString(), 10);\n if (intervalAsNumber < 1000) {\n throw new Error('Interval must be at least 1000ms');\n }\n } catch (e) {\n this.onError(new PlatformError('Error in interval code execution', e, null, null, null, {\n code: interval.code,\n interval: interval.interval,\n }));\n return;\n }\n\n TimerUtils.setTimeout(() => {\n if (!this._isVisible || abortSignal.aborted) {\n return;\n }\n\n this.evalWithContextAsyncThrow(interval.code).catch((err) => {\n this.onError(new PlatformError('Error in interval code execution', err, null, null, null, {\n code: interval.code,\n interval: intervalAsNumber,\n }));\n }).finally(() => {\n this.registerInterval(interval, abortSignal);\n });\n }, intervalAsNumber);\n }\n\n private addDefaultSteps() {\n if (this.workflow.workflowSteps !== DefaultWorkflow.getDefaultWorkflow().workflowSteps) {\n this.workflow.workflowSteps = this.workflow.workflowSteps.concat(\n DefaultWorkflow.getDefaultWorkflow().workflowSteps.filter((step) => !step.isInitialStep),\n );\n\n // add default step if needed\n if (this.workflow.workflowSteps.find((step) => step.isInitialStep) === undefined) {\n this.workflow.workflowSteps = this.workflow.workflowSteps.concat(\n DefaultWorkflow.getDefaultWorkflow().workflowSteps.filter((step) => step.isInitialStep),\n );\n }\n }\n }\n\n public executeWorkflow(workflow: Workflow | string, job: Job, workflowHandler: IWorkflowHandler) {\n this.loadWorkflow(workflow, job, workflowHandler);\n this.bringToFront();\n }\n\n public startWorkflowWithIdentifier(identifier: string, jobToPass?: Job) {\n this.workflowHandler.startWorkflow(identifier, jobToPass !== this.workflow.job ? this.workflow.job : null, jobToPass);\n }\n\n public async setLayout(layout: NimmstaLayout): Promise<boolean> {\n if (this._isVisible) {\n if (this.shouldUpdateLayout(layout)) {\n (this.device as any).__layout = layout;\n await this.device.setLayout(layout);\n return true;\n }\n }\n\n return false;\n }\n\n private shouldUpdateLayout(layout: NimmstaLayout) {\n const currentLayout = (this.device as any)?.__layout;\n if (!currentLayout) {\n return true;\n }\n\n return currentLayout.layout !== layout.layout || currentLayout.parameters !== layout.parameters;\n }\n\n public bringToFront() {\n // TODO: Should we do nothing if we are already visible WF Controller? ->\n // Probably only if we refactor that JS Lib handles who is active.\n if (\n (this.device as any).__visibleWorkflowController?.uniqueId !== undefined\n && (this.device as any).__visibleWorkflowController?.uniqueId !== this.uniqueId) {\n throw new Error(\n \"You can't have multiple WorkflowControllers for one device visible! Please call unsubscribe or hide first.\",\n );\n }\n\n this.updateProgress({\n workflow: this.workflow,\n job: this.workflow.job,\n }, 'bringToFront', null);\n\n this.subscribeToEvents();\n (this.device as any).__visibleWorkflowController = this;\n\n // if already visible, just update the layout\n if (!this._isVisible) {\n this.registerIntervals();\n }\n this._isVisible = true;\n if (this.currentWorkflowStepController === undefined) {\n this.loadFirstOrCurrentStep();\n }\n this.executeOnController();\n }\n\n public hide() {\n if (this.lighttagsSet) {\n // disable light tags\n this.connectionManager.setDesiredLightTagDevices([]);\n }\n this._isVisible = false;\n (this.device as any).__layout = undefined;\n\n if (this.workflow.useListeningLightTags !== null && this.workflow.useListeningLightTags !== undefined) {\n this.connectionManager.useListeningLightTags = null;\n }\n\n this.currentWorkflowStepController?.hide();\n\n this.unsubscribe();\n this.currentIntervalAbortController?.abort();\n this.currentIntervalAbortController = undefined;\n }\n\n public executeWorkflowStep(name: string, override: WorkflowStepState = {}) {\n for (const step of this.workflow.workflowSteps) {\n if (step.workflowStepName === name) {\n // only have 2 step in memory\n if (this.workflow.currentWorkflowStep?.previousStep?.previousStep) {\n delete this.workflow.currentWorkflowStep?.previousStep?.previousStep;\n }\n this.workflow.currentWorkflowStep = {\n previousStep: this.workflow.currentWorkflowStep,\n ...step,\n ...override,\n };\n this.currentWorkflowStepController?.hide();\n this.currentWorkflowStepController = WorkflowStepControllerFactory.createWorkflowStepController(\n this,\n this.workflow,\n this.workflow.currentWorkflowStep,\n );\n this.executeOnController();\n return;\n }\n }\n\n this.onError(new Error(`Workflow Step ${name} not found!`));\n }\n\n public goBack() {\n if (this.workflow.currentWorkflowStep?.previousStep) {\n this.workflow.currentWorkflowStep = this.workflow.currentWorkflowStep.previousStep;\n this.currentWorkflowStepController?.hide();\n this.currentWorkflowStepController = WorkflowStepControllerFactory.createWorkflowStepController(\n this,\n this.workflow,\n this.workflow.currentWorkflowStep,\n );\n this.executeOnController();\n }\n }\n\n public canGoBack() {\n return this.workflow.currentWorkflowStep?.previousStep !== undefined;\n }\n\n private executeOnController() {\n this.currentWorkflowStepController?.execute();\n\n if (this.workflow.useListeningLightTags !== null && this.workflow.useListeningLightTags !== undefined) {\n this.connectionManager.useListeningLightTags = this.workflow.useListeningLightTags;\n }\n }\n\n private loadFirstOrCurrentStep() {\n // fix for NIMRND-8321 - If the current step is a stop step, it will auto stop the job\n if (this.workflow.currentWorkflowStep !== undefined\n && this.workflow.currentWorkflowStep.neverStoreState !== true\n && this.workflow.currentWorkflowStep.type !== WorkflowController.STOP_JOB\n ) {\n this.currentWorkflowStepController?.hide();\n this.currentWorkflowStepController = WorkflowStepControllerFactory.createWorkflowStepController(\n this,\n this.workflow,\n this.workflow.currentWorkflowStep,\n );\n this.executeOnController();\n return;\n }\n\n for (const step of this.workflow.workflowSteps) {\n if (step.isInitialStep) {\n this.executeWorkflowStep(step.workflowStepName);\n break;\n }\n }\n }\n\n done(stopWorkflow = true, jobToPass?: Job): Promise<void> {\n if (this.workflowHandler) {\n return this.workflowHandler.done(this.workflow, this.workflow.job, stopWorkflow, jobToPass);\n } else {\n return Promise.reject(new Error('No workflow handler attached!'));\n }\n }\n\n exit(restartWorkflow = true): Promise<void> {\n if (this.workflowHandler) {\n return this.workflowHandler.exit(this.workflow, restartWorkflow);\n } else {\n return Promise.reject(new Error('No workflow handler attached!'));\n }\n }\n\n updateProgress(data: any, eventName: string, condition: string): Promise<void> {\n if (this.workflowHandler) {\n return this.workflowHandler.updateProgress(\n this.workflow,\n this.workflow.job,\n this.currentWorkflowStepController?.workflowStep\n ? `${this.currentWorkflowStepController?.workflowStep?.workflowStepName}.${eventName}`\n : eventName,\n data,\n condition,\n );\n } else {\n return Promise.resolve();\n }\n }\n\n cancel(jobToPass?: Job): Promise<void> {\n if (this.workflowHandler) {\n return this.workflowHandler.cancelled(this.workflow, this.workflow.job, jobToPass);\n } else {\n return Promise.reject(new Error('No workflow handler attached!'));\n }\n }\n\n skip(jobToPass?: Job) {\n if (this.workflowHandler) {\n return this.workflowHandler.skipped(this.workflow, this.workflow.job, jobToPass);\n } else {\n return Promise.reject(new Error('No workflow handler attached!'));\n }\n }\n\n stop() {\n if (this.workflowHandler) {\n return this.workflowHandler.stop(this.workflow, this.workflow.job);\n } else {\n return Promise.reject(new Error('No workflow handler attached!'));\n }\n }\n\n unsubscribe() {\n this.subscriptions.forEach((sub) => sub.cancel());\n if ((this.device as any).__visibleWorkflowController?.uniqueId === this.uniqueId) {\n (this.device as any).__visibleWorkflowController = undefined;\n }\n }\n\n onScanEvent(scan: ScanEvent) {\n if (this._isVisible) {\n this.currentWorkflowStepController?.onScanEvent(scan);\n }\n }\n\n onButtonEvent(button: ButtonEvent) {\n if (this._isVisible) {\n this.currentWorkflowStepController?.onButtonEvent(button);\n }\n }\n\n onTriggerEvent() {\n if (this._isVisible) {\n this.currentWorkflowStepController?.onTriggerEvent();\n }\n }\n\n onDoubleTriggerEvent() {\n if (this._isVisible) {\n this.currentWorkflowStepController?.onDoubleTriggerEvent();\n }\n }\n\n onTripleTriggerEvent() {\n if (this._isVisible) {\n this.currentWorkflowStepController?.onTripleTriggerEvent();\n }\n }\n\n onTouchEvent(touch: TouchEvent) {\n if (this._isVisible) {\n this.currentWorkflowStepController?.onTouchEvent(touch);\n }\n }\n\n onError(error: Error) {\n if (this._isVisible) {\n this.workflowHandler.onError(error);\n }\n }\n\n evalWithContext<R>(\n code: string,\n context: { [id: string]: any} = {},\n onCodeRan: (() => void)|undefined = undefined,\n signal?: AbortSignal,\n ): R {\n const onCodeRanCatched = NIMMSTAEvalUtils.runWithCatch(onCodeRan, (error) => this.onError(error), this.logger);\n const returnValue = NIMMSTAEvalUtils.evalWithParams<R>(\n code,\n this.getActualContext(context, onCodeRanCatched, signal),\n (error) => this.onError(error),\n this.logger,\n );\n if (onCodeRanCatched) {\n TimerUtils.setTimeout(onCodeRanCatched, 0);\n }\n return returnValue;\n }\n\n evalWithContextThrow<R>(\n code: string,\n context: { [id: string]: any} = {},\n onCodeRan: (() => void)|undefined = undefined,\n signal?: AbortSignal,\n ): R {\n const onCodeRanCatched = NIMMSTAEvalUtils.runWithCatch(onCodeRan, (error) => this.onError(error), this.logger);\n const returnValue = NIMMSTAEvalUtils.evalWithParams<R>(\n code,\n this.getActualContext(context, onCodeRanCatched, signal),\n (error) => this.onError(error),\n this.logger,\n );\n if (onCodeRanCatched) {\n TimerUtils.setTimeout(onCodeRanCatched, 0);\n }\n return returnValue;\n }\n\n async evalWithContextAsync<R>(\n code: string,\n context: { [id: string]: any} = {},\n onCodeRan: (() => void)|undefined = undefined,\n signal?: AbortSignal,\n ): Promise<R> {\n const onCodeRanCatched = NIMMSTAEvalUtils.runWithCatch(onCodeRan, (error) => this.onError(error), this.logger);\n const returnValue = await NIMMSTAEvalUtils.evalWithParamsAsync<R>(\n code,\n this.getActualContext(context, onCodeRanCatched, signal),\n (error) => { throw error; },\n this.logger,\n );\n if (onCodeRanCatched) {\n TimerUtils.setTimeout(onCodeRanCatched, 0);\n }\n return returnValue;\n }\n\n async evalWithContextAsyncThrow<R>(\n code: string,\n context: { [id: string]: any} = {},\n onCodeRan: (() => void)|undefined = undefined,\n signal?: AbortSignal,\n ): Promise<R> {\n const onCodeRanCatched = NIMMSTAEvalUtils.runWithCatch(onCodeRan, (error) => this.onError(error), this.logger);\n const returnValue = await NIMMSTAEvalUtils.evalWithParamsAsync<R>(\n code,\n this.getActualContext(context, onCodeRanCatched, signal),\n (error) => { throw error; },\n this.logger,\n );\n if (onCodeRanCatched) {\n TimerUtils.setTimeout(onCodeRanCatched, 0);\n }\n return returnValue;\n }\n\n private getActualContext(\n context: { [id: string]: any} = {},\n onCodeRan: (() => void)|undefined = undefined,\n signal?: AbortSignal,\n ) {\n const setTimeoutForRunCode = () => {\n if (onCodeRan) {\n TimerUtils.setTimeout(\n NIMMSTAEvalUtils.runWithCatch(onCodeRan, (error) => this.onError(error), this.logger),\n 0,\n );\n }\n };\n return {\n signal,\n console: {\n ...console,\n log: (...args: any[]) => this.updateProgress({ args }, 'console.log', null),\n error: (...args: any[]) => this.updateProgress({ args }, 'console.error', null),\n warn: (...args: any[]) => this.updateProgress({ args }, 'console.warn', null),\n info: (...args: any[]) => this.updateProgress({ args }, 'console.info', null),\n debug: (...args: any[]) => this.updateProgress({ args }, 'console.debug', null),\n trace: (...args: any[]) => this.updateProgress({ args }, 'console.trace', null),\n },\n job: this.workflow.job,\n userState: this.userState,\n setUserState: (state: any = {}) => {\n if (state === undefined || state === null) {\n this.userState = {};\n } else {\n if (Array.isArray(state)) {\n throw new Error('User state has to be an object');\n }\n this.userState = state;\n }\n },\n setJob: (newJob: any) => {\n this.workflow.job = Job.fromJSON(newJob, this.workflow.jobOptions);\n this.workflow.job.status = 'IN_PROGRESS';\n TimerUtils.setTimeout(() => this.updateProgress({ ...this.workflow.job }, 'new-job-set', null), 10);\n return this.workflow.job;\n },\n createJob: (name = `Job at ${new Date().toISOString()}`, articles: any[] = []) => {\n this.workflow.job = Job.fromNameAndArticles(name, articles, this.workflow.jobOptions);\n this.workflow.job.status = 'IN_PROGRESS';\n TimerUtils.setTimeout(() => this.updateProgress({ ...this.workflow.job }, 'new-job-created', null), 10);\n return this.workflow.job;\n },\n createUniqueJob: async (name = `Job at ${new Date().toISOString()}`, uniqueKey: string, articles: any[] = []) => {\n const job = Job.fromNameAndArticles(name, articles, this.workflow.jobOptions);\n job.uniqueKey = uniqueKey;\n job.status = 'IN_PROGRESS';\n await this.workflowHandler.createUniqueJob(this.workflow, job);\n this.workflow.job = job;\n return this.workflow.job;\n },\n Base36,\n Job,\n Jwt: JwtParser,\n workflow: this.workflow,\n setLocale: (locale: string) => {\n this.currentLocaleDict = LangUtils.getMatchingLocaleDict(locale);\n this.workflowHandler.onLocaleSet(locale);\n },\n // device: this.device, - due to security reasons we don't want to expose the device to the code\n LTColor,\n LTBlinkingPattern,\n device: this.device,\n api: {\n setDecoderBoardSettings: (settings: any) => {\n this.device.decoderBoardSettings = settings;\n },\n fetch: async <R>(endpoint: string, data: APIParameters, abortSignal?: AbortSignal) => {\n try {\n this.updateProgress({ endpoint, data }, 'fetch', null);\n const result = await this.fetch<R>(endpoint, data, abortSignal ?? signal);\n this.updateProgress({ endpoint, data, result }, 'fetch.success', null);\n return result;\n } catch (e) {\n this.updateProgress({ endpoint, data, error: e }, 'fetch.error', null);\n throw e;\n } finally {\n setTimeoutForRunCode();\n }\n },\n fetchWithDatasource: async <R>(\n dataSource: string, endpoint: string, data: APIParameters, abortSignal?: AbortSignal,\n ) => {\n try {\n this.updateProgress({ dataSource, endpoint, data }, 'fetchWithDatasource', null);\n const result = await this.fetchFromDataSource<R>(dataSource, endpoint, data, abortSignal ?? signal);\n this.updateProgress({\n dataSource, endpoint, data, result,\n }, 'fetchWithDatasource.success', null);\n return result;\n } catch (e) {\n this.updateProgress({\n dataSource, endpoint, data, error: e,\n }, 'fetchWithDatasource.error', null);\n throw e;\n } finally {\n setTimeoutForRunCode();\n }\n },\n sendEmail: async (emailIdentifier: string, context: { [id: string]: any } = {}) => {\n this.updateProgress({\n emailIdentifier,\n context,\n workflow: this.workflow,\n job: this.workflow.job,\n }, 'sendEmail', null);\n await this.sendEmail(emailIdentifier, {\n job: this.workflow.job,\n workflow: this.workflow,\n\n worker: this.additionalEvalContext['worker'],\n ...context,\n });\n },\n lighttag: {\n set useListeningLightTags(enabled: boolean | null) {\n this.connectionManager.useListeningLightTags = enabled;\n },\n get useListeningLightTags(): boolean | null {\n return this.connectionManager.useListeningLightTags;\n },\n setLightTag: async (location: string, ledMode: LEDMode) => {\n this.lighttagsSet = true;\n try {\n this.updateProgress({\n location,\n ledMode,\n }, 'setLightTag', null);\n await this.connectionManager.setDesiredLightTagDevices([location], ledMode);\n } finally {\n setTimeoutForRunCode();\n }\n },\n setLightTags: async (\n desiredDevices: string[] | { [location: string]: LEDMode | LTColor },\n ledMode: LEDMode | LTColor | undefined = undefined,\n intensity = 100,\n pattern: LTBlinkingPattern = LTBlinkingPattern.BLINK,\n ) => {\n if (desiredDevices?.length === 0) {\n this.lighttagsSet = false;\n } else {\n this.lighttagsSet = true;\n }\n try {\n this.updateProgress({\n desiredDevices,\n ledMode,\n intensity,\n pattern,\n }, 'setLightTags', null);\n await this.connectionManager.setDesiredLightTagDevices(desiredDevices, ledMode, intensity, pattern);\n } finally {\n setTimeoutForRunCode();\n }\n },\n disableLightTag: async () => {\n this.lighttagsSet = false;\n try {\n this.updateProgress({ }, 'disableLightTag', null);\n await this.connectionManager.setDesiredLightTagDevices([]);\n } finally {\n setTimeoutForRunCode();\n }\n },\n // Deprecated\n disableLightTags: async () => {\n try {\n this.updateProgress({ }, 'disableLightTags', null);\n await this.connectionManager.setDesiredLightTagDevices([]);\n } finally {\n setTimeoutForRunCode();\n }\n },\n attachLocation: async (macAddress: string, location: string) => {\n try {\n this.updateProgress({ macAddress, location }, 'attachLocation', null);\n await this.connectionManager.attachLocation(macAddress, location);\n } finally {\n setTimeoutForRunCode();\n }\n },\n detachLocation: async (macAddress: string) => {\n try {\n this.updateProgress({ macAddress }, 'detachLocation', null);\n await this.connectionManager.detachLocation(macAddress);\n } finally {\n setTimeoutForRunCode();\n }\n },\n },\n workflow: {\n done: async (stopWorkflow = true, jobToPass?: Job) => {\n try {\n this.updateProgress({ stopWorkflow, jobToPass }, 'api.workflow.done', null);\n await this.done(stopWorkflow, jobToPass);\n } finally {\n setTimeoutForRunCode();\n }\n },\n cancel: async (jobToPass?: Job) => {\n try {\n this.updateProgress({ jobToPass }, 'api.workflow.cancel', null);\n await this.cancel(jobToPass);\n } finally {\n setTimeoutForRunCode();\n }\n },\n skip: async (jobToPass?: Job) => {\n try {\n this.updateProgress({ jobToPass }, 'api.workflow.skip', null);\n await this.skip(jobToPass);\n } finally {\n setTimeoutForRunCode();\n }\n },\n stop: async () => {\n try {\n this.updateProgress({ }, 'api.workflow.stop', null);\n await this.stop();\n } finally {\n setTimeoutForRunCode();\n }\n },\n exit: async (restartWorkflow = true) => {\n try {\n this.updateProgress({ restartWorkflow }, 'api.workflow.exit', null);\n await this.exit(restartWorkflow);\n } finally {\n setTimeoutForRunCode();\n }\n },\n startWorkflowWithIdentifier: (identifier: string, jobToPass: Job = null) => {\n this.updateProgress({ identifier, jobToPass }, 'api.workflow.startWorkflowWithIdentifier', null);\n this.startWorkflowWithIdentifier(identifier, jobToPass);\n },\n executeWorkflowStep: (name: string, override: WorkflowStepState = {}) => {\n this.updateProgress({ name, override }, 'api.workflow.executeWorkflowStep', null);\n this.executeWorkflowStep(name, override);\n },\n canGoBack() {\n return this.canGoBack();\n },\n goBack: () => {\n this.updateProgress({ }, 'api.workflow.goBack', null);\n this.goBack();\n },\n runActionCodeAsync: async (name: string, context: any = {}) => {\n const actionInfo = this.workflow.actions.find((action) => action.actionName === name);\n if (actionInfo.code === undefined) {\n throw new Error(`Action ${name} not found!`);\n }\n\n return this.evalWithContextAsyncThrow(actionInfo.code, context);\n },\n runActionCode: (name: string, context: any = {}) => {\n const actionInfo = this.workflow.actions.find((action) => action.actionName === name);\n if (actionInfo.code === undefined) {\n throw new Error(`Action ${name} not found!`);\n }\n\n return this.evalWithContextThrow(actionInfo.code, context);\n },\n },\n },\n ...this.additionalEvalContext,\n ...context,\n };\n }\n\n fetchFromDataSource<R>(\n dataSource: string,\n endpoint: string,\n requestOverride: APIParameters,\n abortSignal?: AbortSignal,\n ): Promise<R> {\n return this.workflowHandler.fetchFromDataSource<R>(dataSource, endpoint, requestOverride, abortSignal);\n }\n\n fetch<R>(endpoint: string, data: APIParameters, abortSignal?: AbortSignal): Promise<R> {\n return this.workflowHandler.fetchFromDataSource<R>(null, endpoint, data, abortSignal);\n }\n\n sendEmail(emailIdentifier: string, context: any) {\n return this.workflowHandler.sendEmail(emailIdentifier, context);\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'ffffffff-ffff-ffff-ffff-ffffffffffff';\n","import { Logger } from '@nimmsta/web-library';\nimport { Job } from '../../models/job/Job';\nimport { HTTPError } from '../errors/HTTPError';\nimport { PairingError } from '../errors/PairingError';\nimport { WhoAmIError } from '../errors/WhoAmIError';\nimport { EndpointResponse } from '../model/EndpointResponse';\nimport { IAccount } from '../model/IAccount';\nimport { WhoamIResponse } from '../model/WhoamIResponse';\nimport { WorkflowExecutionResponse } from '../model/WorkflowExecutionResponse';\nimport { IPlatformAPI } from './IPlatformAPI';\nimport { JobEvent } from '../model/JobEvent';\nimport { DeviceInfo } from '../model/DeviceInfo';\nimport { IPlatformConnector } from './platformcore/IPlatformConnector';\nimport { errorAwareReplacer } from '../../util/ErrorAwareReplacer';\n\nexport class PlatformAPIImpl implements IPlatformAPI {\n private isPairing = false;\n private logger: Logger;\n get account(): IAccount {\n return this.platformConnector.account;\n }\n\n constructor(\n private platformConnector: IPlatformConnector,\n private os: string,\n private appVersion: string,\n private deviceName: string,\n ) {\n this.os = os;\n this.appVersion = appVersion;\n this.deviceName = deviceName;\n this.logger = Logger.for('PlatformAPIImpl');\n }\n\n async fetchWhoAmIAsync(_?: AbortSignal, connectedDeviceSerial?: string): Promise<WhoamIResponse> {\n try {\n const deviceSerialParameter = connectedDeviceSerial ? `?deviceSerial=${connectedDeviceSerial}` : '';\n const response = await this.platformConnector.httpClient.executeRequest(`app/device/self${deviceSerialParameter}`);\n this.logger.debug('Got whoami');\n const responseJson = JSON.parse(response.responseText);\n const whoAmi = {\n firstName: responseJson.user?.given_name ?? responseJson.user?.firstName ?? '',\n lastName: responseJson.user?.family_name ?? responseJson.user?.lastName ?? '',\n email: responseJson.user?.email?.includes('logistician.nimmsta.com') !== true\n ? (responseJson.user?.email ?? '') : '',\n deviceName: responseJson.name ?? '',\n accountName: responseJson.organization.name,\n currentWorkflowExecutionId: responseJson.currentWorkflowExecutionId,\n idleWorkflow: responseJson.idleWorkflow,\n workerId: responseJson.user?.id,\n handheldId: responseJson.id,\n additionalData: responseJson.user?.additionalData,\n requestLogFile: responseJson.requestLogFile,\n shouldUpdateDeviceOrganization: responseJson.user?.shouldUpdateDeviceOrganization,\n };\n this.platformConnector.account.whoAmI = whoAmi;\n return whoAmi;\n } catch (e) {\n this.logger.error('Error fetching whoami', e);\n const authFailed = e instanceof HTTPError && e.status === 401;\n if (authFailed) {\n this.platformConnector.account.whoAmI = null;\n }\n throw new WhoAmIError(`Error fetching whoami due to ${e}`, authFailed, e);\n }\n }\n\n async pairWithAsync(qrcode: string, _?: AbortSignal): Promise<void> {\n this.logger.debug(`Pairing using ${qrcode}`);\n if (this.isPairing) {\n return;\n }\n this.isPairing = false;\n\n try {\n await this.platformConnector.pairWith(qrcode, this.deviceName);\n } catch (e) {\n if (e instanceof PairingError) {\n throw e;\n } else {\n throw new PairingError(`Error pairing device due to ${e}`, e);\n }\n } finally {\n this.isPairing = false;\n }\n }\n async startNextWorkflowAsync(\n workflowIdentifier: string,\n previousJobEvent: JobEvent,\n jobToPass: Job,\n supportedSchemaVersion?: number,\n signal?: AbortSignal,\n ): Promise<WorkflowExecutionResponse> {\n const response = await this.platformConnector.httpClient.executeRequest(\n 'app/startNextWorkflow',\n 'POST',\n {\n 'Content-Type': 'application/json',\n },\n JSON.stringify({\n desiredWorkflow: workflowIdentifier,\n previousResult: previousJobEvent.results,\n previousExecutionId: previousJobEvent.executionId,\n jobToPass,\n supportedSchemaVersion,\n device: {\n deviceSerial: previousJobEvent.device?.deviceSerial,\n deviceType: previousJobEvent.device?.deviceType,\n deviceAddress: previousJobEvent.device?.deviceAddress,\n deviceVersions: JSON.stringify(previousJobEvent.device?.deviceVersions),\n operationsData: previousJobEvent.device?.operationsData,\n },\n }),\n signal,\n );\n\n return JSON.parse(response.responseText);\n }\n async cancelJobAsync(signal?: AbortSignal): Promise<void> {\n await this.platformConnector.httpClient.executeRequest(\n 'app/cancelJob',\n 'POST',\n {},\n null,\n signal,\n );\n }\n async stopJobAsync(signal?: AbortSignal): Promise<void> {\n await this.platformConnector.httpClient.executeRequest(\n 'app/stopJob',\n 'POST',\n {},\n null,\n signal,\n );\n }\n async skipJobAsync(signal?: AbortSignal): Promise<void> {\n await this.platformConnector.httpClient.executeRequest(\n 'app/skipJob',\n 'POST',\n {},\n null,\n signal,\n );\n }\n async completeJobAsync(\n jobEvent: JobEvent,\n signal?: AbortSignal,\n ): Promise<void> {\n await this.platformConnector.httpClient.executeRequest(\n 'app/completeJobWithData',\n 'POST',\n {\n 'Content-Type': 'application/json',\n },\n JSON.stringify({\n executionId: jobEvent.executionId,\n currentResult: JSON.stringify(jobEvent.results),\n data: JSON.stringify(jobEvent.data),\n condition: null,\n device: {\n deviceSerial: jobEvent.device?.deviceSerial,\n deviceType: jobEvent.device?.deviceType,\n deviceAddress: jobEvent.device?.deviceAddress,\n deviceVersions: JSON.stringify(jobEvent.device?.deviceVersions),\n operationsData: jobEvent.device?.operationsData,\n },\n }, errorAwareReplacer),\n signal,\n );\n }\n\n async createUniqueJob(\n jobEvent: JobEvent,\n signal?: AbortSignal,\n ): Promise<Job> {\n const response = await this.platformConnector.httpClient.executeRequest(\n 'app/createUniqueJob',\n 'POST',\n {\n 'Content-Type': 'application/json',\n },\n JSON.stringify({\n currentResult: JSON.stringify(jobEvent.results),\n data: JSON.stringify(jobEvent.data),\n job: JSON.stringify(jobEvent.job),\n condition: JSON.stringify(jobEvent.condition),\n device: {\n deviceSerial: jobEvent.device?.deviceSerial,\n deviceType: jobEvent.device?.deviceType,\n deviceAddress: jobEvent.device?.deviceAddress,\n deviceVersions: JSON.stringify(jobEvent.device?.deviceVersions),\n operationsData: jobEvent.device?.operationsData,\n },\n }),\n signal,\n );\n return JSON.parse(response.responseText);\n }\n\n async smartWatchDisconnectedAsync(\n deviceInfo: DeviceInfo,\n disconnectReason?: string,\n signal?: AbortSignal,\n ): Promise<void> {\n await this.platformConnector.httpClient.executeRequest(\n 'app/smart-watch-disconnected',\n 'POST',\n {\n 'Content-Type': 'application/json',\n },\n JSON.stringify({\n deviceSerial: deviceInfo.deviceSerial,\n deviceType: deviceInfo.deviceType,\n deviceAddress: deviceInfo.deviceAddress,\n deviceVersions: JSON.stringify(deviceInfo.deviceVersions),\n operationsData: deviceInfo.operationsData,\n disconnectReason,\n }),\n signal,\n );\n }\n async smartWatchConnectedAsync(\n deviceInfo: DeviceInfo,\n signal?: AbortSignal,\n ): Promise<void> {\n await this.platformConnector.httpClient.executeRequest(\n 'app/smart-watch-connected',\n 'POST',\n {\n 'Content-Type': 'application/json',\n },\n JSON.stringify({\n deviceSerial: deviceInfo.deviceSerial,\n deviceType: deviceInfo.deviceType,\n deviceAddress: deviceInfo.deviceAddress,\n deviceVersions: JSON.stringify(deviceInfo.deviceVersions),\n operationsData: deviceInfo.operationsData,\n }),\n signal,\n );\n }\n\n async getEndpointFromDataSourceAsync(\n dataSource: string,\n endpoint: string,\n signal?: AbortSignal,\n ): Promise<EndpointResponse> {\n const response = await this.platformConnector.httpClient.executeRequest(\n `app/api/${dataSource}/${endpoint}`,\n 'GET',\n {},\n null,\n signal,\n );\n\n return JSON.parse(response.responseText);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async executeDataSourceEndpointAsync(dataSource: string, endpoint: string, data: any, signal?: AbortSignal): Promise<any> {\n\n data = data || {};\n if (data.body && !(data.body instanceof String)) {\n\n data.body = JSON.stringify(data.body);\n }\n\n data.timestamp = new Date().toISOString();\n\n const response = await this.platformConnector.httpClient.executeRequest(\n `app/api/${dataSource}/${endpoint}/execute`,\n 'POST',\n {\n 'Content-Type': 'application/json',\n },\n JSON.stringify(data),\n signal,\n );\n\n const text = response.responseText;\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }\n\n async logEventAsync(jobEvent: JobEvent, _?: AbortSignal): Promise<void> {\n await this.platformConnector.logEvent(jobEvent);\n }\n\n async uploadCurrentLogFile(): Promise<void> {\n await this.platformConnector.uploadLogFile();\n }\n\n async sendEmail(\n emailIdentifier: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context: any,\n signal?: AbortSignal,\n ) {\n await this.platformConnector.httpClient.executeRequest(\n `app/email/template/${emailIdentifier}/send`,\n 'POST',\n {\n 'Content-Type': 'application/json',\n },\n JSON.stringify(context),\n signal,\n );\n }\n}\n","import { Workflow } from './models/Workflow';\nimport { WorkflowStep } from './models/WorkflowStep';\nimport { WorkflowController } from './WorkflowController';\nimport { WorkflowStepController } from './WorkflowStepController';\n\ninterface WorkflowStepControllerConstructor {\n new (workflowController: WorkflowController, workflow: Workflow, workflowStep: WorkflowStep): WorkflowStepController;\n}\n\nexport class WorkflowStepControllerFactory {\n private static customControllers: Map<string, WorkflowStepControllerConstructor> = new Map();\n\n static createWorkflowStepController(\n controller: WorkflowController,\n workflow: Workflow,\n workflowStep: WorkflowStep,\n ): WorkflowStepController {\n if (workflowStep.type) {\n if (this.customControllers.has(workflowStep.type)) {\n return new (this.customControllers.get(workflowStep.type))(controller, workflow, workflowStep);\n } else {\n \n console.error('Custom type set but no Controller is registered!');\n return undefined;\n }\n } else {\n return new WorkflowStepController(controller, workflow, workflowStep);\n }\n }\n\n static registerWorkflowStepController(name: string, workflowStepController: WorkflowStepControllerConstructor) {\n this.customControllers.set(\n name,\n workflowStepController,\n );\n }\n}\n","/**\n * Lightweight JWT decoder for use in workflow JavaScript contexts.\n * Decodes header and payload only; does not verify signatures.\n * Works in all JavaScript environments (browser, Node, etc.).\n */\nexport class JwtParser {\n /**\n * Decodes a base64url string to a UTF-8 string.\n * Works in browser (atob) and Node (Buffer).\n */\n private static base64UrlDecode(base64url: string): string {\n let base64 = base64url.replace(/-/g, '+').replace(/_/g, '/');\n const pad = base64.length % 4;\n if (pad) {\n base64 += '===='.slice(0, 4 - pad);\n }\n let binary: string;\n if (typeof atob !== 'undefined') {\n binary = atob(base64);\n } else if (typeof Buffer !== 'undefined') {\n binary = Buffer.from(base64, 'base64').toString('binary');\n } else {\n throw new Error('JwtParser: no base64 decoder (atob or Buffer) available');\n }\n try {\n return typeof TextDecoder !== 'undefined'\n ? new TextDecoder().decode(Uint8Array.from(binary, (c) => c.charCodeAt(0)))\n : decodeURIComponent(escape(binary));\n } catch {\n return binary;\n }\n }\n\n /**\n * Decodes a JWT and returns both header and payload as plain objects.\n * Does not verify the signature.\n *\n * @param token - The JWT string (e.g. access_token or id_token)\n * @returns `{ header, payload }` or `null` if the token is invalid\n *\n * @example\n * const decoded = JwtParser.decode(accessToken);\n * if (decoded) {\n * console.log(decoded.payload.sub, decoded.payload.exp);\n * }\n */\n static decode(token: string | null | undefined): { header: Record<string, unknown>; payload: Record<string, unknown> } | null {\n if (!token || typeof token !== 'string') {\n return null;\n }\n const parts = token.trim().split('.');\n if (parts.length !== 3) {\n return null;\n }\n try {\n const header = JSON.parse(JwtParser.base64UrlDecode(parts[0])) as Record<string, unknown>;\n const payload = JSON.parse(JwtParser.base64UrlDecode(parts[1])) as Record<string, unknown>;\n return { header, payload };\n } catch {\n return null;\n }\n }\n\n /**\n * Decodes only the payload part of a JWT.\n *\n * @param token - The JWT string\n * @returns The payload object or `null` if invalid\n */\n static decodePayload(token: string | null | undefined): Record<string, unknown> | null {\n const decoded = JwtParser.decode(token);\n return decoded ? decoded.payload : null;\n }\n\n /**\n * Returns the expiration timestamp (seconds since epoch) from the JWT `exp` claim, or null.\n */\n static getExpirationTime(token: string | null | undefined): number | null {\n const payload = JwtParser.decodePayload(token);\n if (!payload || typeof payload.exp !== 'number') {\n return null;\n }\n return payload.exp;\n }\n\n /**\n * Returns whether the JWT is expired.\n *\n * @param token - The JWT string\n * @param skewSeconds - Optional seconds to subtract from now (e.g. 30 to consider expired 30s before actual exp)\n * @returns true if the token has no `exp` claim or if exp <= (now - skewSeconds)\n */\n static isExpired(token: string | null | undefined, skewSeconds = 0): boolean {\n const exp = JwtParser.getExpirationTime(token);\n if (exp == null) {\n return true;\n }\n const now = Math.floor(Date.now() / 1000);\n return exp <= now - skewSeconds;\n }\n}\n","import { IAction } from '@nimmsta/web-library';\nimport { JobEvent } from '../../../model/JobEvent';\n\nexport class PlatformLogEventAction implements IAction {\n public readonly name = 'PlatformLogEventAction';\n public readonly isDeviceAction = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public data: any;\n\n constructor(data: JobEvent) {\n this.data = data;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(8344);\n"],"names":["root","factory","exports","module","require","define","amd","a","i","this","__WEBPACK_EXTERNAL_MODULE__946__","static","code","evalWithParams","context","onError","logger","trim","debug","values","Object","Function","keys","error","PlatformEvalError","stack","evalWithParamsAsync","asyncCode","Promise","all","resolve","reject","wrappedCode","transformAsyncCode","concat","func","runWithCatch","lambda","undefined","toString","defineProperty","value","unsafeStringify","validate_js_1","byteToHex","push","slice","arr","offset","toLowerCase","uuid","default","TypeError","StopJobController","WorkflowStepController","needsBackForError","previousTriggerMode","LoadingLayout","ErrorLayout","execute","workflowController","device","preferredTriggerMode","TriggerMode","Disabled","stopJob","onAppearEvent","layoutParams","super","getLayoutParams","setLayout","LoadingLayoutClass","stop","then","isCurrentStep","info","onJobStopped","catch","triggerSOS","ErrorLayoutClass","translatedRecoveryInfo","message","executeEvent","onButtonEvent","button","name","RETRY_BUTTON","tslib_1","errors_1","Semaphore","_value","_cancelError","E_CANCELED","_queue","_weightedWaiters","prototype","acquire","weight","priority","_this","Error","task","findIndexFromEnd","other","_dispatchItem","splice","runExclusive","callback_1","__awaiter","arguments","callback","_a","release","__generator","_b","label","sent","trys","waitForUnlock","_couldLockImmediately","v","isLocked","getValue","setValue","_dispatchQueue","cancel","forEach","entry","_drainUnlockWaiters","length","shift","item","previousValue","_newReleaser","called","waiters","waiter","queuedPriority_1","findIndex","predicate","randomUUID","crypto","bind","PlatformControllerState","PlatformControllerUIState","CancelJobController","cancelJob","onJobCancelled","isDeviceAction","data","constructor","toJson","URL","DNS","md5_js_1","v35_js_1","v35_js_2","v3","namespace","buf","enumerable","get","SaveJobController","ErrorLayoutWithSkip","saveJob","done","onJobSaved","SKIP_BUTTON","executeWorkflowStep","WorkflowController","SKIP_JOB","WhoAmIError","PlatformError","authFailed","shouldShowError","cause","HTTPError","json","errorCause","status","translatedTitle","platformContext","_isPlatformError","isIgnorable","cleanErrorContextFromCircularReferences","Set","setPrototypeOf","captureStackTrace","developerInfo","causeJson","JSON","stringify","errorAwareReplacer","e","sha1_js_1","v5","getDefaultWorkflow","workflowName","workflowSteps","isInitialStep","workflowStepName","layout","CANCEL_JOB","type","neverStoreState","SAVE_JOB","STOP_JOB","updateV7State","rng_js_1","stringify_js_1","_state","state","now","rnds","msecs","seq","v7Bytes","RangeError","Uint8Array","Date","options","bytes","random","rng","SkipJobController","skipJob","skip","onJobSkipped","messa","native_js_1","E_ALREADY_LOCKED","E_TIMEOUT","NIMSubEventState","NIMSubEvent","emit","subscribe","cb","result","NimmstaLayout","title","executionId","platformController","apiWrapper","evalWithContextAsyncThrow","translations","workflowResponse","_onError","setWorkflowAppData","onLocaleChanged","storeProgress","shouldUseOAuth","obtainAccessToken","defaultEndpoints","accessToken","idToken","expiresAt","authFlowError","mutex","Mutex","DefaultEndpoints","whoami","applyTokenResult","needRefresh","Math","floor","JwtParser","isExpired","funCatchedAndMapToPlatformError","fn","tokenRetry","tokenError","console","log","platformError","platformErrorFromCause","workflow","job","stopWorkflow","jobToPass","completeCurrentJob","exit","restartWorkflow","wfIdentifier","currentWorkflowExecution","identifier","startWorkflowByIdentifier","doneOrSkipWorkflowIdentifier","exitWorkflow","cancelled","cancelCurrentJob","skipped","skipCurrentJob","stopCurrentJob","id","logEventAsync","results","app","getOwnPropertyNames","updateProgress","eventName","condition","currentWorkflowStep","fetchFromDataSource","dataSource","endpointName","requestOverride","abortSignal","isFetchingDataSource","async","localRequestOverride","obtainAndSetAccessToken","header","Authorization","startWorkflow","jobToClose","createUniqueJob","onLocaleSet","locale","sendEmail","emailIdentifier","signal","onBeforeShowWorkflowOnDevice","getRandomValues","rnds8","parseInt","f","s","x","y","z","ROTL","n","K","H","newBytes","set","l","N","ceil","M","Array","Uint32Array","j","pow","W","t","b","c","d","T","of","getOutputLength","inputLength8","safeAdd","lsw","md5cmn","q","num","cnt","md5ff","md5gg","md5hh","md5ii","input","uint32ToUint8","len","xpad","fill","olda","oldb","oldc","oldd","wordsToMd5","output","uint8ToUint32","account","httpClient","connectionManager","updateAccountTimeoutRunning","pairWith","qrcode","deviceName","response","sendActionWithSuccessOrThrow","PlatformPairWithAction","AccountImpl","fromJSON","updateAccountDelayed","logEvent","PlatformLogEventAction","updateAccount","PlatformUpdateAccountAction","uploadLogFile","PlatformUploadLogFileAction","action","sendAction","success","parseErrorResponseToError","errorResponse","isHttpError","responseText","bindToConnectionManager","os","appVersion","HttpClientActionImpl","accountResponse","PlatformGetAccountAction","TimerUtils","setTimeout","defaultIdleWorkflow","lastUpdatedAt","definition","created","updated","description","triggerMode","loadData","endpoint","preProcessCode","postProcessCode","onButtonPress","targetWorkflow","executeRequest","url","method","headers","body","FetchFromServerAction","aborted","abortError","httpResponse","ok","api","whoAmIFetch","_","fetchWhoAmIAsync","UserStillActiveLayout","stillWorkingMessage","stopJobMessage","warning","yes","stillWorking","cachedDataConnectionInfo","Logger","for","clearCache","getOperationsData","force","deviceState","isConnected","lastOperationData","GetOperationDataAction","operationData","smartWatchConnected","getDeviceInfo","smartWatchConnectedAsync","deviceSerial","serialNumber","deviceType","deviceAddress","address","deviceVersions","bleFirmwareVersion","operationsData","smartWatchDisconnected","reason","smartWatchDisconnectedAsync","dataConnection","getEndpointInfoFromCacheOrCloud","request","preprocess","responseContext","executeDataSourceEndpointAsync","postprocess","getErrorUserMessageTitle","getErrorUserMessageRecoveryInfo","endpoints","find","key","endpointInfo","getEndpointFromDataSourceAsync","eventId","eventData","timestamp","pairWithAsync","stopJobAsync","cancelJobAsync","skipJobAsync","startWorkflowWithIdentifier","workflowIdentifier","previousExecutionId","startNextWorkflowAsync","supportedSchemaVersion","completeJob","completeJobAsync","date","uploadCurrentLogFile","_whoAmI","_currentExecution","_userId","_deviceId","_serverUri","_isLoggedIn","_onUpdated","whoAmI","userId","deviceId","serverUri","currentExecution","isLoggedIn","onUpdated","isProduction","includes","testEnvironment","parts","split","defaultProdUris","currentJob","_currentJob","tryAcquire","withTimeout","Mutex_1","Semaphore_1","withTimeout_1","tryAcquire_1","__exportStar","additionalContext","onFinishedRequest","actionName","some","actions","ledBurst","triggerLEDBurst","vibratorBurst","triggerVibratorBurst","beeperBurst","triggerBeeperBurst","evalWithContext","skipButtonText","Job","articles","uniqueKey","completeJobOnStop","isJobClass","currentArticleIndex","currentArticle","map","row","article","scannedArticles","fixJobDataReferenceAndInit","jobOptions","isArray","section","newSection","entries","resetJobOnStop","sort","lastCheckedIndex","index","fromNameAndArticles","jobClass","errorObj","prop","seen","has","add","cleanedContext","errorCorrelation","correlation","substring","fromEntries","jsonContext","PairAppLayout","pairApp","scanQR","regex_js_1","test","PairingError","parse","extendStatics","__proto__","p","hasOwnProperty","call","__extends","String","__","create","__assign","assign","apply","__rest","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__decorate","decorators","target","desc","r","getOwnPropertyDescriptor","Reflect","decorate","__param","paramIndex","decorator","__esDecorate","ctor","descriptorIn","contextIn","initializers","extraInitializers","accept","kind","descriptor","access","addInitializer","init","unshift","__runInitializers","thisArg","useValue","__propKey","__setFunctionName","prefix","configurable","__metadata","metadataKey","metadataValue","metadata","_arguments","P","generator","fulfilled","step","next","rejected","ops","g","Iterator","verb","Symbol","iterator","op","pop","__createBinding","o","m","k","k2","__esModule","writable","__values","__read","ar","__spread","__spreadArrays","il","jl","__spreadArray","to","from","pack","__await","__asyncGenerator","asyncIterator","AsyncIterator","resume","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","ownKeys","__importStar","mod","__importDefault","__classPrivateFieldGet","receiver","__classPrivateFieldSet","__classPrivateFieldIn","__addDisposableResource","env","dispose","inner","asyncDispose","_SuppressedError","SuppressedError","suppressed","__disposeResources","fail","hasError","__rewriteRelativeImportExtension","path","preserveJsx","replace","tsx","ext","cm","parse_js_1","v6Bytes","v1Bytes","TransitionControllerFactory","Map","createTransitionController","workflowStepController","transition","customControllers","TransitionController","registerTransitionController","transitionController","platformConnector","getLatestAppVersion","softwareId","workflowStep","loadedData","abortController","AbortController","isVisible","lastRenderedLayoutData","allowStopJob","desiredTriggerMode","supportsTriggerMode","Button","ButtonAndTouch","Touch","renderLayout","loadDataIfNeededAsync","handleLightTag","hide","abort","onDisappearEvent","onSuccess","postProcessErrorCode","evaluateAPIParameters","executeEventData","errorContext","evalWithContextAsync","autoRetryEveryMs","lighttag","location","color","pattern","intensity","actualLTColor","toUpperCase","LTColor","startsWith","patternEnum","LTBlinkingPattern","locationValue","evaluateStringOrDictionary","ledMode","setDesiredLightTagDevices","toEvaluate","evaluateDictionary","params","query","dictionary","currentLocaleDict","param","start","performance","rendered","endTime","duration","onScanEvent","scan","onTriggerEvent","onDoubleTriggerEvent","onTripleTriggerEvent","onTouchEvent","touch","event","overrideContext","runAllMatching","english","pairing_with_platform_failed","pairing_code_not_found","pairing_code_not_found_recovery_info","failed_to_identify_you","we_could_not_connect_to_the_server","please_check_your_internet_connection","try_again_later","unknown_error","you_are_not_authorized_to_perform_this_action","you_do_not_have_the_permission_perform_this_action","the_requested_resource_was_not_found","the_resource_already_exists","internal_server_error","unknown_http_error","http_error","service_not_available","job_name","article_name","restart_workflow","retry","stop_job_failed","stop_job_code_failed","force_stop_job","cancel_job_failed","complete_job_failed","skip_job_failed","could_not_start_workflow","pair_again","ready_to_work","hello_comma","start_working","error_executing_code","pair_app","scan_qr_code","loading","back","user_still_active","no","no_stop_job","stop_job","login_on_device","user_cancelled_auth_flow","user_cancelled_auth_flow_recovery_info","exit_workflow_failed","window","setInterval","clearTimeout","clearInterval","originalSetTimeout","originalSetInterval","originalClearTimeout","originalClearInterval","replaceSetTimeout","newSetTimeout","activeSetTimeout","replaceSetInterval","newSetInterval","activeSetInterval","replaceClearTimeout","newClearTimeout","activeClearTimeout","replaceClearInterval","newClearInterval","activeClearInterval","restoreSetTimeout","restoreSetInterval","restoreClearTimeout","restoreClearInterval","restoreAll","handler","timeout","args","Number","timeoutId","intervalId","WorkflowErrorLayoutWithBack","retryTitle","getContextTitle","isErrorIgnoreable","isInternetError","httpError","platformErrorFromCauseAndMessage","Base36","CHAR_LIST","decode","BigInt","power","char","powBigInt","BASE","encode","val","remainder","base","exponent","actualBase","actualExponent","productName","WorkflowErrorLayout","LangUtils","getDefaultMatchingLocale","defaultLocale","translationKeys","defaultLocaleOrFirst","getMatchingLocaleDict","matchingLocale","language","matchingLang","lang","de","german","en","stringToBytes","str","unescape","encodeURIComponent","charCodeAt","version","hash","valueBytes","namespaceBytes","delay","runTransition","ActionControllerFactory","createActionController","targetWorkflowPassJob","targetStep","backToPreviousStep","goBack","updateV1State","nsecs","node","clockseq","tl","tmh","isV6","_v6","optionsKeys","isSemaphore","sync","timeoutError","weightOrPriority","isTimeout","handle","ticket","e_1","WorkflowActionEnum","START_FIRST_JOB","RESTART_WORKFLOW","BACK","CONTINUE_WORKFLOW","CONTINUE","alreadyAcquiredError","PlatformController","onApplyDefaultDeviceSettings","whoamIFetchInterval","oAuthDelegate","deviceEvent","workflowAppData","whoamiError","workflowError","isLoading","uiState","stateUpdatedEvent","jobProgressEvent","userState","firstActionWasStop","workflowShouldStillRun","isObtainingAccessTokenForConfig","isPaired","workerId","shouldAskUserForStillActive","USER_STILL_ACTIVE","WORKFLOW_ERROR","IN_WORKFLOW","IDLE","CONNECT_SMART_WATCH","WAITING_TO_PAIR","isInForeground","_isInForeground","wereRunningTimedActions","shouldRunTimedActions","fetchWhoAmI","runTimedActions","applyDeviceScreen","shouldControlSmartWatch","_shouldControlSmartWatch","currentWorkflowController","showingWorkflowOnDeviceAbortion","isFetchingOrLoading","isFetchingUniqueAction","_device","userStillActiveYes","lastAction","lastUserStillActive","disableIdleStopJob","LOGIN_ON_DEVICE","isReady","isRunning","deviceSubscriptions","fetchWhoAmIAbortController","deviceApiWrapper","currentWorkflowEventHandler","currentIdleWorkflow","retryAction","isWaitingForTimeout","currentTimedActionTimeout","isUploadingLogFile","showingWorkflowMutex","port","currentControllerCount","NIMMSTA","websocketPort","onReady","err","keepAlwaysConnected","docReady","tryConnect","newValue","NimmstaConnectionManager","DeviceAPIWrapper","PlatformAPIImpl","updateWhoAmI","connectedDevices","connectEvent","deviceStartedConnectingEvent","connecting","sub","fetchWhoAmILoading","subscribeToDevice","logErrorToExectionIfExisting","showWorkflowError","scanEvent","onScan","disconnectEvent","ev","onDeviceDisconnect","buttonEvent","barcode","ERROR","restartJob","currentWorkflowStepController","showWorkflowOnDevice","WORKFLOW","loadWorkflow","showPairOnDevice","loadWorkflowController","conManager","linkAdditionalEvalContext","eventControllerOptions","oauthConfig","clientId","issuerUrl","scope","updatedError","workflowExecution","appData","allowRefreshToken","token","obtainAccessTokenIfNeeded","PlatformWorkflowEventController","config","currentAccessToken","cancelAccessTokenRequest","showedLogin","showLoginOnDevice","bringToFront","finally","PAIRING","LoginOnDeviceLayout","showLoading","LOADING","triggerLEDBurstParameters","__visibleWorkflowController","uniqueId","newAbortController","showError","showBack","canGoBack","showUserStillActiveOnDevice","triggerVibratorBurstParameters","triggerBeeperBurstParameters","startFetchingUniqueAction","desiredIdleWorkflow","idleWorkflow","currentWorkflowExecutionId","requestLogFile","uploadCurrentLogFileIfNeeded","executeWorkflowAction","onComplete","forceStop","actualWf","onStopJobCode","worker","onStopError","startWorkflowByIdentifierIfNotStop","qrCode","getWFTranslation","additionalEvalContext","close","enableDebugLogging","validate","v7","v6ToV1","v6","v4","v1ToV6","v1","NIL","MAX","max_js_1","nil_js_1","v1_js_1","v1ToV6_js_1","v3_js_1","v4_js_1","v5_js_1","v6_js_1","v6ToV1_js_1","v7_js_1","version_js_1","loginOnDevice","ActionController","registerActionController","actionController","cancelError","_semaphore","_uniqueId","disallowStopJob","_isVisible","subscriptions","workflowHandler","lighttagsSet","currentIntervalAbortController","globalUniqueCounter","subscribeToEvents","WorkflowStepControllerFactory","registerWorkflowStepController","unsubscribe","triggerEvent","doubleTriggerEvent","tripleTriggerEvent","touchEvent","DefaultWorkflow","addDefaultSteps","registerIntervals","intervalActions","interval","registerInterval","intervalAsNumber","filter","executeWorkflow","shouldUpdateLayout","__layout","currentLayout","parameters","loadFirstOrCurrentStep","executeOnController","useListeningLightTags","override","previousStep","createWorkflowStepController","onCodeRan","onCodeRanCatched","NIMMSTAEvalUtils","returnValue","getActualContext","evalWithContextThrow","setTimeoutForRunCode","warn","trace","setUserState","setJob","newJob","createJob","toISOString","Jwt","setLocale","setDecoderBoardSettings","settings","decoderBoardSettings","fetch","fetchWithDatasource","enabled","setLightTag","setLightTags","desiredDevices","BLINK","disableLightTag","disableLightTags","attachLocation","macAddress","detachLocation","runActionCodeAsync","actionInfo","runActionCode","isPairing","connectedDeviceSerial","deviceSerialParameter","responseJson","whoAmi","firstName","user","given_name","lastName","family_name","email","accountName","organization","handheldId","additionalData","shouldUpdateDeviceOrganization","previousJobEvent","desiredWorkflow","previousResult","jobEvent","currentResult","deviceInfo","disconnectReason","text","controller","base64UrlDecode","base64url","base64","pad","binary","atob","Buffer","TextDecoder","decodeURIComponent","escape","payload","decodePayload","decoded","getExpirationTime","exp","skewSeconds","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","obj","toStringTag"],"ignoreList":[],"sourceRoot":""}
|