@genesislcap/design-system-configurator 14.373.2-MX-499.3 → 14.373.2-MX-499.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/110.110.ddf26ae506131bab2ddd.js +131 -0
  2. package/dist/110.7e20a2b648d2484216f576ee3373601f.js.map +1 -0
  3. package/dist/359.3251e92dacbbae50c0067b447f49a688.js.map +1 -0
  4. package/dist/359.359.f5900b37a97ff746d4bd.js +2 -0
  5. package/dist/374.374.68d0546328c19292b57c.js +5146 -0
  6. package/dist/374.685ab5ac9960c62b024f7ede813aad67.js.map +1 -0
  7. package/dist/382.382.70135d77dc896dededa8.js +13 -0
  8. package/dist/382.7d8d80f08d8a7e2b06467366ed231a1c.js.map +1 -0
  9. package/dist/{588.588.b954832e0228557f5751.js → 445.445.97400d0ba7e0ccc6e672.js} +3 -3
  10. package/dist/{588.7048bd4bd0c3f3085dddf60a28cf09e4.js.map → 445.f33bfdd3c7659b76b08f8106d436c540.js.map} +1 -1
  11. package/dist/535.3ce19bad0d5e4b228991b85c6e7f0b75.js.map +1 -0
  12. package/dist/535.535.efe402e29cac1d3bacc6.js +775 -0
  13. package/dist/{417.417.b9aa1af5e028e65b7fdc.js → 601.601.9cccf3a26bdb9622aa21.js} +59 -59
  14. package/dist/601.feefbfc2292c53dfcb6055ca19fe6883.js.map +1 -0
  15. package/dist/{714.65811bc86f4924fc0def931673ca1576.js.map → 705.6967cc91e1cb96bab531a53a432aa26a.js.map} +1 -1
  16. package/dist/705.705.db7257000f97995fb284.js +2 -0
  17. package/dist/759.0c1fcd0684d1c65e1315b922ca4c2159.js.map +1 -0
  18. package/dist/{445.445.75bcad5095c175e4a251.js → 759.759.43ca2d2aa2ae607d2aa4.js} +252 -241
  19. package/dist/{826.826.117e2d8d8da71c18415f.js → 826.826.9f5e19d2e8bc3c3cdc0d.js} +2 -2
  20. package/dist/835.09a2c98d7d68ff7f030a208135bbf812.js.map +1 -0
  21. package/dist/835.835.c45b1173559d79231a6b.js +2 -0
  22. package/dist/876.4b1a1261b019a55b536b90f1701ffb4e.js.map +1 -0
  23. package/dist/{816.816.3e7440fbd6718a8414c2.js → 876.876.f9ed60559e9b619baa5d.js} +377 -377
  24. package/dist/887.012016c575e29126a68b2a4fe70a8cb7.js.map +1 -0
  25. package/dist/887.887.b672b67e697a8aa461e1.js +3 -0
  26. package/dist/designSystemConfigurator.d463ad86672fb0fdcc6c89219a1e0549.js.map +1 -0
  27. package/dist/index.html +1 -1
  28. package/dist/main.52f9d7e8a5147ea36882308d288f2ba8.js.map +1 -0
  29. package/dist/main.a1565d24805b6094992a.js +2 -0
  30. package/dist/npm.numeral.08cacf3f8d341ee2ecc5043544e76673.js.map +1 -0
  31. package/dist/npm.numeral.74.6985f31d5772375ef0c8.js +3 -0
  32. package/dist/npm.numeral.74.6985f31d5772375ef0c8.js.LICENSE.txt +14 -0
  33. package/dist/remoteEntry.js +2 -2
  34. package/package.json +13 -13
  35. package/dist/151.151.0a43fc3e6414436d844f.js +0 -2
  36. package/dist/151.df7f6c518aba4dc761325e73decb24ee.js.map +0 -1
  37. package/dist/227.091b797b296b199e6c46dc176a8c7401.js.map +0 -1
  38. package/dist/227.227.7bbe4753e644f6b4337e.js +0 -3
  39. package/dist/242.242.43bdc8eeffbc0b42c358.js +0 -786
  40. package/dist/242.3f2d1c0429112a375ce6af7d9b77101d.js.map +0 -1
  41. package/dist/29.0a1ece57d1b5ca67cd47edb954da1bcc.js.map +0 -1
  42. package/dist/29.29.7e95d12d2aaf21c03e0d.js +0 -4794
  43. package/dist/347.347.07dc76528ef935608a82.js +0 -2
  44. package/dist/347.dc20c3579c9073997e093bb6d65c2cde.js.map +0 -1
  45. package/dist/417.145fa1c3801452bd5746b628ab30a25f.js.map +0 -1
  46. package/dist/445.c6daee010fbecacac70859b2a968ea96.js.map +0 -1
  47. package/dist/714.714.4bfc6425e1dbfb7c70c2.js +0 -2
  48. package/dist/816.6dbf1a0a1072650412d6fe5f8bb168c1.js.map +0 -1
  49. package/dist/designSystemConfigurator.52124d26821144aeeb1023c072b2baff.js.map +0 -1
  50. package/dist/main.65d1736ce088b29a0d7b.js +0 -2
  51. package/dist/main.7ce2ee5391e617c26d8c4105bd621f74.js.map +0 -1
  52. /package/dist/{588.588.b954832e0228557f5751.js.LICENSE.txt → 445.445.97400d0ba7e0ccc6e672.js.LICENSE.txt} +0 -0
  53. /package/dist/{826.826.117e2d8d8da71c18415f.js.LICENSE.txt → 826.826.9f5e19d2e8bc3c3cdc0d.js.LICENSE.txt} +0 -0
  54. /package/dist/{227.227.7bbe4753e644f6b4337e.js.LICENSE.txt → 887.887.b672b67e697a8aa461e1.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"347.347.xxxxxxxxxxxxxxxxxxxx.js","mappings":"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","sources":["webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/socket.status.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/datasource/criteriaFiltersToFields.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/datasource/datasource.config.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/resources/genesis/types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/resources/genesis/config.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/resources/genesis/genesis.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/datasource/datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/formatters/datetime.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/sessionRefresh.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/observer/observer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/utils/logger.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/message.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/connect.events.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/metadata/metadata.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/http.connect.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/updateState.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/http.connect.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/connect.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/http.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/uuid/uuid.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/datasource/dataServerResultFilter.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/datasource/datasource.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/credentialManager/credentialManager.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/credentialManager/credentialManager.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/auth/loginDTOMapper.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/auth/auth.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/datasource/datasource.mixins.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/directives/sync/sync.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/metadata/metadata.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/reconnectStrategy.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/ticker.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/socket.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/metadata/metadata.utils.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/serializers/json/json.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/serializers/json/json.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/utils/regex.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/connect/connect.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/auth/auth.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/design-system/design-system.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/feature-flags/featureFlags.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-broadcast-channel/dist/esm/broadcast-channel/broadcast-channel.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/env/variables.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-user/dist/esm/logger.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-user/dist/esm/config.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-user/dist/esm/types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-user/dist/esm/user.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/datasource/normaliseCriteria.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-comms/dist/esm/session/session.js"],"sourcesContent":["import { __decorate } from \"tslib\";\nimport { User } from '@genesislcap/foundation-user';\nimport { observable } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\nimport { BehaviorSubject } from 'rxjs';\n/**\n * Default SocketStatus implementation.\n * @public\n */\nexport class DefaultSocketStatus {\n constructor() {\n this.isConfigured = false;\n this.isConnecting = false;\n this.isConnected = false;\n this.isReconnecting = false;\n this.reconnectionLimitReached = false;\n this.isConnectedSubject = new BehaviorSubject(this.isConnected);\n }\n /** {@inheritDoc SerializedSocketStatus.hasValidSession} */\n get hasValidSession() {\n return this.user.isAuthenticated;\n }\n get isDisconnected() {\n return !this.isConnected;\n }\n get isDisconnectedByServer() {\n return this.closedClean !== undefined ? !this.closedClean : false;\n }\n isConnectedChanged() {\n var _a;\n if (this.isConnected) {\n this.resetClosedState();\n }\n this.isConnecting = false;\n this.isReconnecting = false;\n (_a = this.isConnectedSubject) === null || _a === void 0 ? void 0 : _a.next(this.isConnected);\n }\n isReconnectingChanged() {\n if (this.isReconnecting) {\n this.reconnectionLimitReached = false;\n }\n }\n resetClosedState() {\n this.closedCode = undefined;\n this.closedReason = undefined;\n this.closedClean = undefined;\n }\n serialize() {\n return {\n isConfigured: this.isConfigured,\n isConnecting: this.isConnecting,\n isConnected: this.isConnected,\n isDisconnected: this.isDisconnected,\n isDisconnectedByServer: this.isDisconnectedByServer,\n isReconnecting: this.isReconnecting,\n reconnectionLimitReached: this.reconnectionLimitReached,\n hasValidSession: this.hasValidSession,\n closedCode: this.closedCode,\n closedReason: this.closedReason,\n closedClean: this.closedClean,\n };\n }\n onClose(event) {\n this.isConnected = false;\n this.closedCode = event.code;\n this.closedReason = event.reason;\n this.closedClean = event.wasClean;\n }\n}\n__decorate([\n observable\n], DefaultSocketStatus.prototype, \"isConfigured\", void 0);\n__decorate([\n observable\n], DefaultSocketStatus.prototype, \"isConnecting\", void 0);\n__decorate([\n observable\n], DefaultSocketStatus.prototype, \"isConnected\", void 0);\n__decorate([\n observable\n], DefaultSocketStatus.prototype, \"isReconnecting\", void 0);\n__decorate([\n observable\n], DefaultSocketStatus.prototype, \"reconnectionLimitReached\", void 0);\n__decorate([\n observable\n], DefaultSocketStatus.prototype, \"closedCode\", void 0);\n__decorate([\n observable\n], DefaultSocketStatus.prototype, \"closedReason\", void 0);\n__decorate([\n observable\n], DefaultSocketStatus.prototype, \"closedClean\", void 0);\n__decorate([\n User\n], DefaultSocketStatus.prototype, \"user\", void 0);\n/**\n * SocketStatus DI key.\n *\n * @privateRemarks\n * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.\n *\n * @internal\n */\nexport const SocketStatus = DI.createInterface((x) => x.singleton(DefaultSocketStatus));\n/**\n * Gets SocketStatus from the DI container.\n *\n * @remarks\n * A utility method for host applications that are not using decorators or the DI container.\n *\n * @example\n * ```ts\n * import { getSocketStatus } from '@genesislcap/foundation-comms';\n * ...\n * private socketStatus = getSocketStatus();\n * ```\n *\n * @public\n */\nexport function getSocketStatus() {\n return DI.getOrCreateDOMContainer().get(SocketStatus);\n}\n","/**\n * Formats timestamp to reqrep date format (yyyyMMdd) or datetime format (yyyyMMdd-HH:mm).\n * @internal\n */\nfunction formatTimestampForReqRep(timestamp, isDate) {\n const date = new Date(timestamp);\n const year = date.getUTCFullYear();\n const month = String(date.getUTCMonth() + 1).padStart(2, '0');\n const day = String(date.getUTCDate()).padStart(2, '0');\n if (isDate) {\n return `${year}${month}${day}`;\n }\n const hours = String(date.getUTCHours()).padStart(2, '0');\n const minutes = String(date.getUTCMinutes()).padStart(2, '0');\n return `${year}${month}${day}-${hours}:${minutes}`;\n}\n/**\n * Processes a Groovy expression and adds the result to reqFields.\n * @internal\n */\nfunction processGroovyExpression(c, reqFields) {\n const exprMatch = c.match(/Expr\\.(\\w+)\\(/);\n if (!exprMatch) {\n return;\n }\n switch (exprMatch[1]) {\n case 'dateIsToday': {\n const fieldNameMatcher = /Expr\\.dateIsToday\\((\\w+)\\)/;\n const match = c.match(fieldNameMatcher);\n if (match) {\n const [, fieldName] = match;\n const date = new Date();\n reqFields[`${fieldName}_FROM`] = `${date.toISOString().replace(/-/g, '').split('T')[0]}-00:00`;\n date.setDate(date.getDate() + 1);\n reqFields[`${fieldName}_TO`] = `${date.toISOString().replace(/-/g, '').split('T')[0]}-00:00`;\n }\n break;\n }\n case 'dateTimeIsGreaterEqual': {\n const fieldNameValueMatcher = /Expr\\.dateTimeIsGreaterEqual\\((\\w+), ?['\"](.+)['\"]\\)/;\n const match = c.match(fieldNameValueMatcher);\n if (match) {\n const [, fieldName, value] = match;\n reqFields[`${fieldName}_FROM`] = value;\n }\n break;\n }\n case 'dateTimeIsLessEqual': {\n const fieldNameValueMatcher = /Expr\\.dateTimeIsLessEqual\\((\\w+), ?['\"](.+)['\"]\\)/;\n const match = c.match(fieldNameValueMatcher);\n if (match) {\n const [, fieldName, value] = match;\n reqFields[`${fieldName}_TO`] = value;\n }\n break;\n }\n case 'dateIsGreaterEqual': {\n const fieldNameValueMatcher = /Expr\\.dateIsGreaterEqual\\((\\w+), ?['\"](.+)['\"]\\)/;\n const match = c.match(fieldNameValueMatcher);\n if (match) {\n const [, fieldName, value] = match;\n reqFields[`${fieldName}_FROM`] = value;\n }\n break;\n }\n case 'dateIsLessEqual': {\n const fieldNameValueMatcher = /Expr\\.dateIsLessEqual\\((\\w+), ?['\"](.+)['\"]\\)/;\n const match = c.match(fieldNameValueMatcher);\n if (match) {\n const [, fieldName, value] = match;\n reqFields[`${fieldName}_TO`] = value;\n }\n break;\n }\n case 'containsIgnoreCase': {\n const fieldNameValueMatcher = /Expr\\.containsIgnoreCase\\((\\w+), ?['\"](.+)['\"]\\)/;\n const match = c.match(fieldNameValueMatcher);\n if (match) {\n const [, fieldName, value] = match;\n reqFields[fieldName] = `*${value}*`;\n }\n break;\n }\n }\n}\n/**\n * Processes an equality expression and adds the result to reqFields.\n * @internal\n */\nfunction processEqualityExpression(c, reqFields) {\n const key = c.substr(0, c.indexOf('=')).trim().replace(/[\"']/g, '');\n const val = c\n .substr(c.lastIndexOf('=') + 1, c.length)\n .trim()\n .replace(/[\"']/g, '');\n reqFields[key] = val;\n}\n/**\n * Criteria filters to fields.\n *\n * @param filters - Concatenated criteria filters.\n *\n * @public\n * @remarks\n * For filtering REQUEST_SERVER resources. Maps concatenated criteria filters\n * from a grid to a request fields object. Date/datetime groovy expressions will\n * append `_FROM` and `_TO` onto field names appropriately.\n *\n * Also supports direct comparison operators (<=, >=) with numeric timestamps,\n * which are automatically converted to the appropriate REQUEST field format.\n *\n * eg: converts\n *\n * ```\n * foo == 'bar' &&\n * asd == 'zxc' &&\n * Expr.containsIgnoreCase(FIELD, 'abc') &&\n * Expr.dateIsToday(DATE) &&\n * Expr.dateTimeIsGreaterEqual(DATETIME, '20231110-03:23') &&\n * Expr.dateTimeIsLessEqual(DATETIME, '20231115-03:23') &&\n * Expr.dateIsGreaterEqual(DATEONLY, '20231110') &&\n * Expr.dateIsLessEqual(DATEONLY, '20231115') &&\n * FIELD_DATETIME >= 1704067200000 &&\n * FIELD_DATETIME <= 1704153600000\n * ```\n *\n * into\n *\n * ```\n * {\n * foo: 'bar',\n * asd: 'zxc',\n * FIELD: '*abc*',\n * DATE_FROM: '20231110-00:00',\n * DATE_TO: '20231111-00:00',\n * DATETIME_FROM: '20231110-03:23',\n * DATETIME_TO: '20231115-03:23',\n * DATEONLY_FROM: '20231110',\n * DATEONLY_TO: '20231115',\n * }\n * ```\n */\nexport function criteriaFiltersToFields(filters) {\n if (!filters) {\n return {};\n }\n const criteria = filters.split('&&').map((s) => s.trim());\n const reqFields = {};\n criteria.forEach((c) => {\n if (!c) {\n return;\n }\n // Handle Groovy expressions (Expr.*)\n if (c.startsWith('Expr')) {\n processGroovyExpression(c, reqFields);\n }\n // Handle direct comparison operators with numeric timestamps (FIELD >= timestamp, FIELD <= timestamp)\n else if (/[A-Z_]+\\s*(>=|<=)\\s*\\d+/.test(c)) {\n // Parse FIELD >= timestamp\n const greaterEqualMatch = c.match(/([A-Z_]+)\\s*>=\\s*(\\d+)/);\n if (greaterEqualMatch) {\n const [, fieldName, timestampStr] = greaterEqualMatch;\n const timestamp = parseInt(timestampStr, 10);\n // Determine format: if field contains DATE but not DATETIME, use date format\n const upperName = fieldName.toUpperCase();\n const isDate = upperName.includes('DATE') && !upperName.includes('DATETIME');\n reqFields[`${fieldName}_FROM`] = formatTimestampForReqRep(timestamp, isDate);\n }\n // Parse FIELD <= timestamp\n const lessEqualMatch = c.match(/([A-Z_]+)\\s*<=\\s*(\\d+)/);\n if (lessEqualMatch) {\n const [, fieldName, timestampStr] = lessEqualMatch;\n const timestamp = parseInt(timestampStr, 10);\n // Determine format: if field contains DATE but not DATETIME, use date format\n const upperName = fieldName.toUpperCase();\n const isDate = upperName.includes('DATE') && !upperName.includes('DATETIME');\n reqFields[`${fieldName}_TO`] = formatTimestampForReqRep(timestamp, isDate);\n }\n }\n // Handle equality expressions (FIELD == 'value' or FIELD = 'value')\n else {\n processEqualityExpression(c, reqFields);\n }\n });\n return reqFields;\n}\n","import { DI } from '@microsoft/fast-foundation';\nimport { criteriaFiltersToFields } from './criteriaFiltersToFields';\nimport { dataServerResultFilter } from './dataServerResultFilter';\n/**\n * Default values for a DatasourceConfig\n * @public\n */\nexport class DatasourceDefaults {\n}\nDatasourceDefaults.MAX_ROWS_250 = 250;\nDatasourceDefaults.MAX_VIEW_1000 = 1000;\nDatasourceDefaults.REQ_REP_POLLING_INTERVAL_MS = 10000;\nDatasourceDefaults.DATASERVER_ROW_ID = 'ROW_REF';\nDatasourceDefaults.REQUEST_SERVER_ROW_ID = 'RECORD_ID';\nDatasourceDefaults.DEFAULT_PAGINATION_PAGE_SIZE = 25;\nDatasourceDefaults.DEFAULT_REQ_REP_OFFSET = 0;\n/**\n * Default DatasourceConfig DI implementation.\n * @public\n */\nexport const defaultDatasourceConfig = {\n options: {\n criteria: '',\n isSnapshot: false,\n maxRows: DatasourceDefaults.MAX_ROWS_250,\n maxView: DatasourceDefaults.MAX_VIEW_1000,\n pollingInterval: DatasourceDefaults.REQ_REP_POLLING_INTERVAL_MS,\n movingView: false,\n orderBy: '',\n resourceName: '',\n reverse: false,\n pollTriggerEvents: [],\n },\n criteriaToFields: criteriaFiltersToFields,\n dataServerResultFilter: dataServerResultFilter,\n};\n/**\n * DatasourceConfig DI key.\n *\n * @internal\n * @privateRemarks\n * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.\n */\nexport const DatasourceConfig = DI.createInterface((x) => x.instance(defaultDatasourceConfig));\n","/**\n * @public\n */\nexport const GenesisResourcesChannelId = 'genesis-resources';\n","import { registerTypedBroadcastChannel, } from '@genesislcap/foundation-broadcast-channel';\nimport { DI } from '@microsoft/fast-foundation';\nimport { GenesisResourcesChannelId } from './types';\n/**\n * Default GenesisResourcesConfig implementation.\n * @public\n */\nexport const defaultGenesisResourcesConfig = {\n throwWhenUnavailable: true,\n throwWhenUnknown: false,\n};\n/**\n * GenesisResourcesConfig DI key.\n * @internal\n * @privateRemarks\n * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.\n */\nexport const GenesisResourcesConfig = DI.createInterface((x) => x.instance(defaultGenesisResourcesConfig));\n/**\n * GenesisResourcesChannel DI key.\n * @internal\n * @privateRemarks\n * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.\n */\nexport const GenesisResourcesChannel = registerTypedBroadcastChannel(GenesisResourcesChannelId);\n/**\n * Gets GenesisResourcesChannel from the DI container.\n *\n * @remarks\n * A utility method for host applications that are not using decorators or the DI container.\n *\n * @example\n * ```ts\n * import { getGenesisResourcesChannel } from '@genesislcap/foundation-comms';\n * ...\n * const channel = getGenesisResourcesChannel();\n * ...\n * channel.onmessage = (e) => {\n * if (channel.isMessageType('resources-loaded', e)) {\n * logger.debug('resources-loaded', e.data.detail);\n * return;\n * }\n * }\n * ...\n * channel.close();\n * ```\n * @public\n */\nexport function getGenesisResourcesChannel() {\n return DI.getOrCreateDOMContainer().get(GenesisResourcesChannel);\n}\n","import { __awaiter, __decorate, __param } from \"tslib\";\nimport { DI } from '@microsoft/fast-foundation';\nimport { Connect } from '../../connect';\nimport { logger } from '../../utils';\nimport { GenesisResourcesConfig, getGenesisResourcesChannel } from './config';\n/**\n * Default GenesisResources implementation.\n * @public\n */\nlet DefaultGenesisResources = class DefaultGenesisResources {\n constructor(connect, config) {\n this.connect = connect;\n this.config = config;\n }\n /** {@inheritDoc GenesisResources.isValidResource} */\n isValidResource(resourceName) {\n return __awaiter(this, void 0, void 0, function* () {\n resourceName = resourceName === null || resourceName === void 0 ? void 0 : resourceName.trim();\n if (!resourceName) {\n return false;\n }\n yield this.fetchResources();\n const resourceItem = this.resources.find((item) => item.RESOURCE_NAME === resourceName);\n return !!resourceItem;\n });\n }\n /** {@inheritDoc GenesisResources.getResourceTypeFor} */\n getResourceTypeFor(resourceName) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.fetchResources();\n const resourceItem = this.resources.find((item) => item.RESOURCE_NAME === resourceName);\n if (resourceItem) {\n return resourceItem.RESOURCE_TYPE;\n }\n const message = `${resourceName} resource does not exist.`;\n logger.error(message);\n if (this.config.throwWhenUnknown) {\n throw new Error(message);\n }\n });\n }\n /** {@inheritDoc GenesisResources.getAllResources} */\n getAllResources() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.resources) {\n yield this.fetchResources();\n }\n return this.resources;\n });\n }\n /** {@inheritDoc GenesisResources.destroy} */\n destroy() {\n this.resources = undefined;\n this.resourcesPromise = undefined;\n }\n fetchResources() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (this.resources) {\n return Promise.resolve();\n }\n if (!this.resourcesPromise) {\n /**\n * Await a resources request\n */\n this.resourcesPromise = this.connect.getAvailableResources();\n const data = yield this.resourcesPromise;\n this.resources = data === null || data === void 0 ? void 0 : data.RESOURCES;\n if (!((_a = this.resources) === null || _a === void 0 ? void 0 : _a.length)) {\n const message = `Genesis resources unavailable.`;\n logger.error(message);\n if (this.config.throwWhenUnavailable) {\n throw new Error(message);\n }\n }\n this.postLoadedMessage();\n this.resourcesPromise = undefined;\n }\n else {\n /**\n * Await the in-progress resources request\n */\n yield this.resourcesPromise;\n }\n });\n }\n postLoadedMessage() {\n /**\n * Normally we'd inject channels into components and call their `channel.close()` api on `disconnectedCallback`.\n * However, in shared long-lived service instances like this, channels may lead to tests failing to exit as they are\n * not garbage collected by default. Creating and destroying the channel on on-demand poses less risk.\n */\n const channel = getGenesisResourcesChannel();\n channel.postMessage('resources-loaded', this.resources);\n channel.close();\n }\n};\nDefaultGenesisResources = __decorate([\n __param(0, Connect),\n __param(1, GenesisResourcesConfig)\n], DefaultGenesisResources);\nexport { DefaultGenesisResources };\n/**\n * GenesisResources DI key.\n * @internal\n * @privateRemarks\n * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.\n */\nexport const GenesisResources = DI.createInterface((x) => x.singleton(DefaultGenesisResources));\n/**\n * Gets GenesisResources from the DI container.\n *\n * @remarks\n * A utility method for host applications that are not using decorators or the DI container.\n *\n * @example\n * ```ts\n * import { getGenesisResources } from '@genesislcap/foundation-comms';\n * ...\n * const genesisResources = getGenesisResources();\n * ```\n * @public\n */\nexport function getGenesisResources() {\n return DI.getOrCreateDOMContainer().get(GenesisResources);\n}\n","import { __awaiter, __decorate, __param, __rest } from \"tslib\";\nimport { observable } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\nimport { combineLatest, from, timer, Subject } from 'rxjs';\nimport { switchMap, takeWhile } from 'rxjs/operators';\nimport { startWith } from 'rxjs/operators';\nimport { Auth } from '../auth';\nimport { Connect, ConnectEvents, } from '../connect';\nimport { extractFieldDefinitions, toFieldMetadata } from '../metadata/metadata.utils';\nimport { GenesisResources } from '../resources';\nimport { logger } from '../utils';\nimport { DatasourceConfig } from './datasource.config';\nimport { DatasourceStatusChanged, ResourceType } from './datasource.types';\n/**\n * The default implementation for the Datasource interface.\n * @public\n */\nlet DefaultDatasource = class DefaultDatasource {\n /** {@inheritDoc Datasource.initialized} */\n get initialized() {\n var _a;\n return !!((_a = this.status) === null || _a === void 0 ? void 0 : _a.isInitialized);\n }\n constructor(connect, auth, resources, config, connectEvents) {\n this.connect = connect;\n this.auth = auth;\n this.resources = resources;\n this.config = config;\n this.connectEvents = connectEvents;\n /** {@inheritDoc DatasourceMetadata.fetchMetadataRequired} */\n this.fetchMetadataRequired = true;\n /** {@inheritDoc DatasourceMetadata.startStreamRequired} */\n this.startStreamRequired = true;\n /** {@inheritDoc DatasourceMetadata.originalFieldDef} */\n this.originalFieldDef = [];\n /** {@inheritDoc DatasourceMetadata.fieldMetadata} */\n this.fieldMetadata = [];\n /** {@inheritDoc DatasourceMetadata.requestFields} */\n this.requestFields = [];\n /** {@inheritDoc DatasourceMetadata.customRequestFields} */\n this.customRequestFields = [];\n /** {@inheritDoc DatasourceMetadata.availableIndexes} */\n this.availableIndexes = [];\n /** {@inheritDoc DatasourceMetadata.criteriaOnlyRequest} */\n this.criteriaOnlyRequest = false;\n /** Track load more count for RequestServer temporary MAX_ROWS calculation */\n this.loadMoreCount = 0;\n this.readOnly = true;\n this._allParams = null;\n this.pollTrigger$ = new Subject();\n }\n triggerPoll() {\n this.pollTrigger$.next();\n }\n /**\n * @deprecated - Please use {@link (GenesisResources:interface).isValidResource} instead.\n */\n validResourceName(resourceName) {\n logger.deprecated('Datasource.validResourceName', 'Use `GenesisResources.isValidResource` instead.');\n if (!resourceName)\n return false;\n if (!resourceName.trim().length)\n return false;\n // additional checks? regex? or maybe we can ask the server if it's a valid resource in the future\n return true;\n }\n init(options_1) {\n return __awaiter(this, arguments, void 0, function* (options, fetchMeta = this.fetchMetadataRequired, startStream = this.startStreamRequired) {\n this.fetchMetadataRequired = fetchMeta;\n this.options = Object.assign(Object.assign({}, this.config.options), options);\n // Invalidate parameter cache when options change\n this.invalidateCache();\n const resourceName = this.options.resourceName;\n const connected = this.connect.isConnected || (yield this.connect.connect());\n if (!connected) {\n logger.error(`Unable to connect to ${this.connect.host} to get ${resourceName} datasource`);\n this.reportStatus();\n return false;\n }\n const isValidResource = yield this.resources.isValidResource(resourceName);\n if (!isValidResource) {\n logger.error(`${resourceName} datasource does not exist on ${this.connect.host}`);\n this.reportStatus();\n return false;\n }\n this.resourceType = yield this.resources.getResourceTypeFor(resourceName);\n if (!this.resourceType) {\n logger.error(`Unable to get the resource type for ${resourceName} datasource from ${this.connect.host}`);\n this.reportStatus();\n return false;\n }\n if (this.fetchMetadataRequired) {\n yield this.fetchAndApplyMetadata(this.options.resourceName);\n // Invalidate cache again after metadata fetch as availableIndexes may have changed\n this._allParams = null;\n }\n logger.debug(`Initializing ${resourceName} datasource from ${this.connect.host}`);\n if (!this.options.isSnapshot && startStream) {\n this.stream = yield this.createStream();\n }\n logger.debug(`${resourceName} datasource initialization ${this.initialized ? `was successful.` : 'has failed.'}`);\n this.reportStatus();\n return this.initialized;\n });\n }\n startStream() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.options.isSnapshot && this.stream === undefined) {\n this.stream = yield this.createStream();\n }\n });\n }\n /** {@inheritDoc Datasource.destroy} */\n destroy() {\n var _a, _b;\n logger.debug('Datasource.destroy', (_a = this.options) === null || _a === void 0 ? void 0 : _a.resourceName);\n if (this.commitResponseUnsubscribe) {\n this.commitResponseUnsubscribe();\n this.commitResponseUnsubscribe = undefined;\n }\n (_b = this.pollTrigger$) === null || _b === void 0 ? void 0 : _b.complete();\n this.status = undefined;\n this.fetchMetadataRequired = true;\n this.options = {};\n this.resourceType = undefined;\n this.availableIndexes = [];\n this.originalFieldDef = [];\n this.fieldMetadata = [];\n this.requestFields = [];\n this.criteriaOnlyRequest = false;\n this.loadMoreCount = 0;\n this.stream = undefined;\n }\n /**\n * @internal\n */\n get allResourceParams() {\n var _a;\n if (this._allParams) {\n return this._allParams;\n }\n let ORDER_BY;\n if (this.options.orderBy) {\n if (this.criteriaOnlyRequest ||\n ((_a = this.availableIndexes) === null || _a === void 0 ? void 0 : _a.findIndex((i) => i.NAME === this.options.orderBy)) > -1) {\n ORDER_BY = this.options.orderBy;\n }\n else {\n const validIndexes = this.availableIndexes.map((index) => index.NAME);\n logger.warn('Specified [orderBy] index is not valid and will not be used. See https://learn.genesis.global/docs/database/data-types/index-entities/ - Available indexes:', validIndexes);\n }\n }\n this._allParams = {\n // Common between DATASERVER and REQUEST_SERVER (REQ-REP)\n CRITERIA_MATCH: this.options.criteria,\n MAX_ROWS: this.options.maxRows,\n ORDER_BY,\n VIEW_NUMBER: this.options.viewNumber,\n // DATASERVER only\n FIELDS: this.options.fields,\n MAX_VIEW: this.options.maxView,\n MOVING_VIEW: this.options.movingView,\n REVERSE: this.options.reverse,\n // REQUEST_SERVER only\n DISABLE_POLLING: this.options.disablePolling, // component-level only\n OFFSET: this.options.offset,\n POLLING_INTERVAL: this.options.pollingInterval, // component-level only\n REQUEST: this.options.request,\n };\n logger.debug('Getting configured params:', this._allParams);\n return this._allParams;\n }\n /**\n * @internal\n */\n get dataserverOnlyParams() {\n return {\n CRITERIA_MATCH: this.allResourceParams.CRITERIA_MATCH,\n MAX_ROWS: this.allResourceParams.MAX_ROWS,\n VIEW_NUMBER: this.allResourceParams.VIEW_NUMBER,\n FIELDS: this.allResourceParams.FIELDS,\n MAX_VIEW: this.allResourceParams.MAX_VIEW,\n MOVING_VIEW: this.allResourceParams.MOVING_VIEW,\n ORDER_BY: this.allResourceParams.ORDER_BY,\n REVERSE: this.allResourceParams.REVERSE,\n };\n }\n /**\n * @internal\n */\n get requestOnlyParams() {\n const _a = this.allResourceParams, { REQUEST } = _a, DETAILS = __rest(_a, [\"REQUEST\"]);\n const reqParams = {\n DETAILS: {\n CRITERIA_MATCH: !this.options.requestAutoSetup ? DETAILS.CRITERIA_MATCH : undefined,\n MAX_ROWS: DETAILS.MAX_ROWS,\n OFFSET: DETAILS.OFFSET,\n ORDER_BY: DETAILS.ORDER_BY,\n VIEW_NUMBER: DETAILS.VIEW_NUMBER,\n },\n REQUEST: this.criteriaOnlyRequest ? {} : (REQUEST !== null && REQUEST !== void 0 ? REQUEST : this.buildRequestFields()),\n };\n return reqParams;\n }\n /**\n * @internal\n * Builds REQUEST fields object for auto-setup scenarios.\n */\n buildRequestFields() {\n if (!this.options.requestAutoSetup) {\n return {};\n }\n // Create base request fields (all fields set to '*')\n const baseRequestFields = Object.assign({}, Object.fromEntries(this.requestFields.map((field) => [field.NAME, '*'])));\n // Add criteria fields if present\n const criteriaFields = this.options.criteria\n ? this.config.criteriaToFields(this.options.criteria)\n : {};\n return Object.assign(Object.assign({}, baseRequestFields), criteriaFields);\n }\n /**\n * Updates the load more count for RequestServer scenarios\n * @internal\n */\n updateLoadMoreCount(count) {\n this.loadMoreCount = count;\n }\n snapshot(overrideParams) {\n return __awaiter(this, void 0, void 0, function* () {\n logger.debug(`Requesting snapshot for ${this.options.resourceName} (${this.resourceType}).`);\n switch (this.resourceType) {\n case ResourceType.DATASERVER:\n return this.connect.snapshot(this.options.resourceName, Object.assign(Object.assign({}, this.dataserverOnlyParams), overrideParams));\n case ResourceType.REQUEST_SERVER: {\n return this.connect.request(this.options.resourceName, Object.assign(Object.assign({}, this.requestOnlyParams), overrideParams));\n }\n default:\n throw new Error(`Snapshot not supported for selected resource type: ${this.resourceType}`);\n }\n });\n }\n snapshotFiltered() {\n return __awaiter(this, arguments, void 0, function* (rowId = 'ROW_REF') {\n const result = yield this.snapshot();\n if (Array.isArray(result)) {\n return result;\n }\n else if (result.REPLY) {\n return result.REPLY;\n }\n else if (result.ROW) {\n return this.config.dataServerResultFilter(result, rowId).inserts;\n }\n });\n }\n createStream() {\n return __awaiter(this, void 0, void 0, function* () {\n if (![ResourceType.DATASERVER, ResourceType.REQUEST_SERVER].includes(this.resourceType)) {\n throw new Error(`Streaming not supported for selected resource type: ${this.resourceType}`);\n }\n if (this.resourceType === ResourceType.DATASERVER) {\n return this.createDataserverStream();\n }\n logger.debug(`Creating fake stream by polling ${this.options.resourceName} REQUEST_SERVER`);\n return this.createReqRepStream();\n });\n }\n createDataserverStream() {\n return __awaiter(this, void 0, void 0, function* () {\n const onMessage = (message) => { };\n const onError = (error) => logger.error(error);\n return this.connect.stream(this.options.resourceName, onMessage, onError, this.dataserverOnlyParams);\n });\n }\n createReqRepStream() {\n this.commitResponseUnsubscribe = this.connectEvents.addCommitResponseListener((event) => {\n var _a;\n const { eventName, response } = event.detail;\n if (this.options.pollTriggerEvents &&\n this.options.pollTriggerEvents.includes(eventName) &&\n ((_a = response.MESSAGE_TYPE) === null || _a === void 0 ? void 0 : _a.endsWith('_ACK'))) {\n logger.debug(`Received commit response for ${eventName}, triggering poll.`);\n this.triggerPoll();\n }\n });\n const pollInterval = this.allResourceParams.DISABLE_POLLING\n ? undefined\n : this.allResourceParams.POLLING_INTERVAL;\n const fetchSnapshot$ = () => {\n // Calculate polling parameters based on load more count for RequestServer\n const pollingParams = this.requestOnlyParams;\n if (this.resourceType === ResourceType.REQUEST_SERVER && this.loadMoreCount > 0) {\n const defaultMaxRows = 25;\n const originalMaxRows = this.options.maxRows || defaultMaxRows;\n const tempMaxRows = originalMaxRows * (this.loadMoreCount + 1);\n pollingParams.DETAILS.MAX_ROWS = tempMaxRows;\n }\n return combineLatest([this.connect.isConnected$, this.auth.isLoggedIn$]).pipe(takeWhile(() => this.connect.isConnected && this.auth.isLoggedIn), switchMap(() => from(this.snapshot(pollingParams))));\n };\n if (!pollInterval) {\n // Only manual polls will trigger, but emit an initial snapshot once\n return this.pollTrigger$.pipe(startWith(0), switchMap(fetchSnapshot$));\n }\n // When polling is enabled, reset the timer on every manual poll\n return this.pollTrigger$.pipe(startWith(0), switchMap(() => timer(0, pollInterval).pipe(switchMap(fetchSnapshot$))));\n }\n fetchAndApplyMetadata(resourceName) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n try {\n logger.debug(`Requesting metadata for ${this.options.resourceName} Datasource`);\n const meta = yield this.connect.getMetadata(this.options.resourceName);\n if (meta) {\n this.availableIndexes = (_a = meta.INDEXES) !== null && _a !== void 0 ? _a : [];\n this.originalFieldDef = extractFieldDefinitions(meta);\n this.fieldMetadata = toFieldMetadata(this.originalFieldDef);\n this.requestFields = meta.REQUEST_FIELD || [];\n this.customRequestFields = meta.FIELD || [];\n this.criteriaOnlyRequest = meta.CRITERIA_ONLY_REQUEST || false;\n this.fetchMetadataRequired = false;\n }\n this.status = this.normaliseStatus({\n isInitialized: true,\n metadataRequired: true,\n hasMetadata: ((_b = this.fieldMetadata) === null || _b === void 0 ? void 0 : _b.length) > 0,\n });\n }\n catch (e) {\n logger.error(`Metadata Fetch failed for ${resourceName}:`, e);\n this.status = this.normaliseStatus({\n isInitialized: false,\n metadataRequired: true,\n hasMetadata: false,\n });\n }\n });\n }\n /**\n * @internal\n */\n reportStatus(detail = {}) {\n var _a;\n const eventEmitter = (_a = this.config.eventEmitter) !== null && _a !== void 0 ? _a : document;\n this.status = this.normaliseStatus(detail);\n logger.debug(`Dispatching '${DatasourceStatusChanged}'`, this.status);\n eventEmitter === null || eventEmitter === void 0 ? void 0 : eventEmitter.dispatchEvent(new CustomEvent(DatasourceStatusChanged, {\n detail: this.status,\n bubbles: eventEmitter !== document,\n composed: true,\n }));\n }\n /**\n * @internal\n */\n normaliseStatus(status) {\n var _a, _b, _c, _d, _e;\n const isInitialized = (_a = status.isInitialized) !== null && _a !== void 0 ? _a : this.initialized;\n const metadataRequired = (_b = status.metadataRequired) !== null && _b !== void 0 ? _b : this.fetchMetadataRequired;\n const hasMetadata = (_c = status.hasMetadata) !== null && _c !== void 0 ? _c : ((_d = this.fieldMetadata) === null || _d === void 0 ? void 0 : _d.length) > 0;\n return {\n name: (_e = this.options) === null || _e === void 0 ? void 0 : _e.resourceName,\n type: this.resourceType,\n isInitialized,\n metadataRequired,\n hasMetadata,\n };\n }\n invalidateCache() {\n this._allParams = null;\n }\n};\n__decorate([\n observable\n], DefaultDatasource.prototype, \"status\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"fetchMetadataRequired\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"startStreamRequired\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"originalFieldDef\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"fieldMetadata\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"requestFields\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"customRequestFields\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"availableIndexes\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"criteriaOnlyRequest\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"loadMoreCount\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"readOnly\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"stream\", void 0);\nDefaultDatasource = __decorate([\n __param(0, Connect),\n __param(1, Auth),\n __param(2, GenesisResources),\n __param(3, DatasourceConfig),\n __param(4, ConnectEvents)\n], DefaultDatasource);\nexport { DefaultDatasource };\n/**\n * The DI token for the Datasource interface.\n * @internal\n */\nexport const Datasource = DI.createInterface((x) => x.transient(DefaultDatasource));\n/**\n * Get Datasource from the DI container.\n *\n * @remarks\n * A utility method for host applications that are not using decorators or the DI container.\n *\n * @example\n * ```ts\n * import { FilteredDataServerResult, getDatasource, SocketObservable } from '@genesislcap/foundation-comms';\n * ...\n * private ds = getDatasource();\n * private dsSub: SocketObservable<FilteredDataServerResult>;\n * ...\n * const dsInit = await this.ds.init({\n * criteria: '',\n * isSnapshot: false,\n * resourceName: 'ALL_POSITIONS',\n * reverse: false,\n * maxRows: 250,\n * maxView: 1000,\n * });\n * if (!dsInit) {\n * logger.debug(`Failed to initialise 'ALL_POSITIONS' datasource`);\n * return;\n * }\n * this.dsSub = this.ds.stream.subscribe((result) => { ... });\n * ```\n *\n * @public\n */\nexport function getDatasource() {\n return DI.getOrCreateDOMContainer().get(Datasource);\n}\n","const isoDateSliceEnd = 10;\n/**\n * Formats [DATE] UNIX Timestamps (without time) to readable strings\n * @public\n */\nexport function formatDateTimestamp(timestamp) {\n if (!timestamp || isNaN(timestamp))\n return null;\n return new Date(timestamp).toISOString().slice(0, isoDateSliceEnd);\n}\nconst isoDateTimeSliceEnd = 19;\n/**\n * Formats [DATETIME] UNIX Timestamps (with time) to readable strings\n * @public\n */\nexport function formatDateTimeTimestamp(timestamp) {\n if (!timestamp || isNaN(timestamp))\n return null;\n return new Date(timestamp).toISOString().slice(0, isoDateTimeSliceEnd).replace('T', ' ');\n}\nconst isoDateTimeWithMsSliceEnd = 23;\n/**\n * Formats [DATETIME] UNIX Timestamps (with time and milliseconds) to readable strings\n * @public\n */\nexport function formatDateTimeTimestampWithMilliseconds(timestamp) {\n if (!timestamp || isNaN(timestamp))\n return null;\n return new Date(timestamp).toISOString().slice(0, isoDateTimeWithMsSliceEnd).replace('T', ' ');\n}\n/**\n * Formats [DATE|DATETIME] Unix Timestamps to readable strings\n * @public\n * @param timestamp - The UNIX Timestamp.\n * @param withTime - The flag to determine if formatted value should contain 'time' info.\n */\nexport function formatTimestamp(timestamp, withTime) {\n if (withTime) {\n return formatDateTimeTimestamp(timestamp);\n }\n return formatDateTimestamp(timestamp);\n}\nconst defaultDateOptions = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: 'UTC',\n};\n/**\n * @public\n */\nexport function getDateFormatter(locale = 'en-GB', options = defaultDateOptions) {\n return (params) => {\n if (!(params && typeof params.value === 'number'))\n return '';\n return new Intl.DateTimeFormat(locale, options).format(params.value);\n };\n}\n","import { __awaiter } from \"tslib\";\nimport { LOGIN_DETAILS_URL, LOGIN_URL } from '@genesislcap/foundation-utils';\nimport { DI } from '@genesislcap/web-core';\nimport { Http } from './http';\nconst REAUTH_ACTION_LOCK_KEY = 'reauthActionLock';\n// eslint-disable-next-line @typescript-eslint/no-magic-numbers\nconst LOCK_TIMEOUT_MS = 30000;\n/**\n * Result of a session refresh attempt.\n * @public\n */\nexport var SessionRefreshResult;\n(function (SessionRefreshResult) {\n /** Session was successfully refreshed */\n SessionRefreshResult[\"SUCCESS\"] = \"SUCCESS\";\n /** Refresh failed - page will reload */\n SessionRefreshResult[\"FAILED\"] = \"FAILED\";\n /** Another tab is handling the refresh */\n SessionRefreshResult[\"HANDLED_BY_OTHER_TAB\"] = \"HANDLED_BY_OTHER_TAB\";\n /** Session was already valid */\n SessionRefreshResult[\"ALREADY_VALID\"] = \"ALREADY_VALID\";\n})(SessionRefreshResult || (SessionRefreshResult = {}));\n/**\n * Clears stale reauth locks that might have been left behind.\n * @internal\n */\nfunction clearStaleLock() {\n const lockTimestamp = parseInt(localStorage.getItem(REAUTH_ACTION_LOCK_KEY) || '0');\n if (Date.now() - lockTimestamp > LOCK_TIMEOUT_MS) {\n localStorage.removeItem(REAUTH_ACTION_LOCK_KEY);\n }\n}\n/**\n * Acquires the reauth lock if available.\n * @internal\n * @returns true if lock was acquired, false if another tab holds it\n */\nfunction tryAcquireLock() {\n if (!localStorage.getItem(REAUTH_ACTION_LOCK_KEY)) {\n localStorage.setItem(REAUTH_ACTION_LOCK_KEY, Date.now().toString());\n return true;\n }\n return false;\n}\n/**\n * Releases the reauth lock.\n * @internal\n */\nfunction releaseLock() {\n localStorage.removeItem(REAUTH_ACTION_LOCK_KEY);\n}\n/**\n * Checks if the user is currently authenticated.\n * @internal\n */\nfunction isAuthenticated() {\n return __awaiter(this, void 0, void 0, function* () {\n const loginDetailsFetch = yield fetch(LOGIN_DETAILS_URL, { credentials: 'include' });\n const loginDetails = yield loginDetailsFetch.json();\n return loginDetails.MESSAGE_TYPE === 'EVENT_LOGIN_DETAILS_ACK';\n });\n}\n/**\n * Attempts to refresh the session via EVENT_LOGIN_AUTH.\n * @internal\n * @returns true if refresh was successful (HTTP 2xx response)\n * @throws If the network request fails (connection error, timeout, etc.)\n */\nfunction performRefresh() {\n return __awaiter(this, void 0, void 0, function* () {\n const http = DI.getOrCreateDOMContainer().get(Http);\n const refreshLoginResponse = yield http.post(LOGIN_URL, {\n body: JSON.stringify({\n DETAILS: {},\n MESSAGE_TYPE: 'EVENT_LOGIN_AUTH',\n }),\n });\n return refreshLoginResponse.MESSAGE_TYPE === 'EVENT_LOGIN_AUTH_ACK';\n });\n}\n/**\n * Attempts to refresh the session when authentication has expired.\n * Uses a localStorage-based lock mechanism to prevent multiple tabs from\n * trying to reauthenticate simultaneously.\n *\n * @public\n * @param options - Optional configuration\n * @param options.reloadOnFailure - Whether to reload the page if refresh fails (default: true)\n * @returns The result of the refresh attempt\n */\nexport function tryRefreshSession() {\n return __awaiter(this, arguments, void 0, function* (options = {}) {\n const { reloadOnFailure = true } = options;\n // Clear any stale locks from crashed tabs\n clearStaleLock();\n if (!tryAcquireLock()) {\n // Another tab is handling the refresh\n return SessionRefreshResult.HANDLED_BY_OTHER_TAB;\n }\n try {\n // Session might already be extended on another tab, so we first check if user is\n // authenticated. Cookies are shared between tabs so we can just retry.\n if (yield isAuthenticated()) {\n return SessionRefreshResult.ALREADY_VALID;\n }\n const refreshSuccessful = yield performRefresh();\n if (!refreshSuccessful) {\n if (reloadOnFailure) {\n window.location.reload();\n }\n return SessionRefreshResult.FAILED;\n }\n return SessionRefreshResult.SUCCESS;\n }\n finally {\n releaseLock();\n }\n });\n}\n/**\n * Subscribes to storage events to detect when another tab has finished reauthenticating.\n * @public\n * @param callback - Called when the other tab finishes reauthentication\n * @returns A function to unsubscribe from the storage events\n */\nexport function onOtherTabReauthComplete(callback) {\n const handler = (event) => {\n if (event.key === REAUTH_ACTION_LOCK_KEY && event.newValue === null) {\n callback();\n window.removeEventListener('storage', handler);\n }\n };\n window.addEventListener('storage', handler);\n return () => window.removeEventListener('storage', handler);\n}\n","/**\n * Creates a new event observer instance.\n * @public\n */\nexport const createObserver = () => {\n let listeners = [];\n return {\n subscribe(listener) {\n listeners.push(listener);\n return () => (listeners = listeners.filter((l) => l !== listener));\n },\n publish(event) {\n listeners.forEach((l) => l(event));\n },\n };\n};\n/**\n * Setup an `IntersectionObserver` which will activate a callback function when an element becomes visible on screen\n * @param element - HTMLElement to observe\n * @param callback - any function called when the visibility changes\n * @public\n */\nexport const respondToVisibility = (element, callback) => {\n const options = {\n root: document.documentElement,\n };\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n callback(entry.intersectionRatio > 0);\n });\n }, options);\n observer.observe(element);\n};\n","import { createLogger } from '@genesislcap/foundation-logger';\n/**\n * Logger for the foundation-comms package\n * @public\n */\nexport const logger = createLogger('foundation-comms');\n","import { __decorate, __param } from \"tslib\";\nimport { UUID } from '@genesislcap/foundation-utils';\nimport { DI } from '@microsoft/fast-foundation';\nimport { AuthType } from '../auth/auth.types';\nimport { Session } from '../session';\n/**\n * General Message types\n * @public\n */\nexport var MessageType;\n(function (MessageType) {\n MessageType[\"LOGON_ACK\"] = \"LOGON_ACK\";\n MessageType[\"LOGON_NACK\"] = \"LOGON_NACK\";\n MessageType[\"LOGOFF_ACK\"] = \"LOGOFF_ACK\";\n MessageType[\"LOGOFF_NACK\"] = \"LOGOFF_NACK\";\n MessageType[\"HEARTBEAT_PING\"] = \"HEARTBEAT_PING\";\n MessageType[\"HEARTBEAT_PONG\"] = \"HEARTBEAT_PONG\";\n MessageType[\"MORE_ROWS\"] = \"MORE_ROWS\";\n MessageType[\"MORE_COLUMNS\"] = \"MORE_COLUMNS\";\n MessageType[\"MORE_COLUMNS_ACK\"] = \"MORE_COLUMNS_ACK\";\n MessageType[\"MSG_ACK\"] = \"MSG_ACK\";\n MessageType[\"MSG_NACK\"] = \"MSG_NACK\";\n MessageType[\"LOGOUT_ACK\"] = \"LOGOUT_ACK\";\n MessageType[\"LOGOUT_NACK\"] = \"LOGOUT_NACK\";\n MessageType[\"QUERY_UPDATE\"] = \"QUERY_UPDATE\";\n})(MessageType || (MessageType = {}));\n/**\n * Event Message types\n * @public\n */\nexport var EventMessageType;\n(function (EventMessageType) {\n EventMessageType[\"EVENT_LOGIN_AUTH\"] = \"EVENT_LOGIN_AUTH\";\n EventMessageType[\"EVENT_LOGIN_AUTH_ACK\"] = \"EVENT_LOGIN_AUTH_ACK\";\n EventMessageType[\"EVENT_LOGIN_AUTH_NACK\"] = \"EVENT_LOGIN_AUTH_NACK\";\n EventMessageType[\"EVENT_LOGOUT\"] = \"EVENT_LOGOUT\";\n EventMessageType[\"DATA_LOGON\"] = \"DATA_LOGON\";\n EventMessageType[\"DATA_LOGOFF\"] = \"DATA_LOGOFF\";\n EventMessageType[\"META_REQUEST\"] = \"META_REQUEST\";\n EventMessageType[\"JSON_SCHEMA_REQUEST\"] = \"JSON_SCHEMA_REQUEST\";\n EventMessageType[\"RESOURCES_REQUEST\"] = \"RESOURCES_REQUEST\";\n EventMessageType[\"RESOURCES_REQUEST_ACK\"] = \"RESOURCES_REQUEST_ACK\";\n EventMessageType[\"RESOURCES_REQUEST_NACK\"] = \"RESOURCES_REQUEST_NACK\";\n EventMessageType[\"EVENT_CHANGE_USER_PASSWORD\"] = \"EVENT_CHANGE_USER_PASSWORD\";\n EventMessageType[\"EVENT_SELF_SERVICE_PASSWORD_RESET\"] = \"EVENT_SELF_SERVICE_PASSWORD_RESET\";\n EventMessageType[\"EVENT_PASSWORD_RESET_ACTION\"] = \"EVENT_PASSWORD_RESET_ACTION\";\n})(EventMessageType || (EventMessageType = {}));\n/**\n * General Message codes\n * @public\n */\nexport var MessageCode;\n(function (MessageCode) {\n MessageCode[\"SESSION_NOT_FOUND\"] = \"SESSION_NOT_FOUND\";\n MessageCode[\"UNKNOWN_MESSAGE_TYPE\"] = \"UNKNOWN_MESSAGE_TYPE\";\n})(MessageCode || (MessageCode = {}));\n/**\n * Check if the provided message contains an error and throw an Error if it does\n * @public\n * @param message - Message to check for errors\n * @returns The message if no errors are present, otherwise throws an Error\n */\nexport const messageOrThrow = (message) => {\n if (message.ERROR) {\n throw new Error(message.ERROR.map((error) => error.TEXT).join());\n }\n return message;\n};\n/**\n * Check if the message contains an error code.\n * @param message - The message object.\n * @param code - The error code. Either a {@link http-status-codes#StatusCodes | StatusCodes} number or an entire status code string.\n * @public\n */\nexport const messageHasErrorCode = (message, code) => {\n return Array.isArray(message === null || message === void 0 ? void 0 : message.ERROR)\n ? message === null || message === void 0 ? void 0 : message.ERROR.some((error) => { var _a, _b; return ((_a = error.CODE) === null || _a === void 0 ? void 0 : _a.includes(`${code}`)) || ((_b = error.STATUS_CODE) === null || _b === void 0 ? void 0 : _b.includes(`${code}`)); })\n : false;\n};\n/**\n * TODO: Abstract out localStorage interaction with shell io stuff\n */\n/**\n * Default MessageBuilder implementation.\n * @public\n */\nlet DefaultMessageBuilder = class DefaultMessageBuilder {\n /**\n * UUID will be created in the DI with the App specific requirements.\n * Keeping it encapsulated means messages will always conform.\n */\n constructor(session, uuid) {\n this.session = session;\n this.uuid = uuid;\n }\n createLoginMessage(credentials) {\n let DETAILS;\n switch (credentials.type) {\n case AuthType.BASIC:\n DETAILS = {\n USER_NAME: credentials.username,\n PASSWORD: credentials.password,\n MFA_CODE: credentials.mfaToken,\n };\n break;\n case AuthType.REFRESH:\n DETAILS = {\n USER_NAME: credentials.username,\n REFRESH_AUTH_TOKEN: credentials.refreshToken,\n MFA_CODE: credentials.mfaToken,\n };\n break;\n case AuthType.SSO:\n DETAILS = {\n SSO_TOKEN: credentials.ssoToken,\n };\n break;\n case AuthType.JWT:\n DETAILS = {\n JWT: credentials.jwt,\n DOMAIN: credentials.domain,\n };\n break;\n }\n return {\n DETAILS,\n SOURCE_REF: this.uuid.createId(),\n MESSAGE_TYPE: EventMessageType.EVENT_LOGIN_AUTH,\n };\n }\n createLogoutMessage(loginResult) {\n var _a, _b;\n return {\n SOURCE_REF: this.uuid.createId(),\n MESSAGE_TYPE: EventMessageType.EVENT_LOGOUT,\n SESSION_AUTH_TOKEN: (_a = loginResult.authToken) !== null && _a !== void 0 ? _a : this.session.getSessionStorageItem('authToken'),\n SESSION_ID: (_b = loginResult.sessionId) !== null && _b !== void 0 ? _b : this.session.getSessionStorageItem('sessionId'),\n };\n }\n createDataLogonMessage(resourceName, params) {\n return {\n SOURCE_REF: this.uuid.createId(),\n MESSAGE_TYPE: EventMessageType.DATA_LOGON,\n DETAILS: Object.assign({ DATASOURCE_NAME: resourceName }, params),\n SESSION_AUTH_TOKEN: this.session.getSessionStorageItem('authToken'),\n };\n }\n createDataLogoffMessage(sourceRef) {\n return {\n SOURCE_REF: sourceRef,\n MESSAGE_TYPE: EventMessageType.DATA_LOGOFF,\n SESSION_AUTH_TOKEN: this.session.getSessionStorageItem('authToken'),\n };\n }\n createRequestMessage(resourceName, params) {\n return Object.assign({ SOURCE_REF: this.uuid.createId(), SESSION_AUTH_TOKEN: this.session.getSessionStorageItem('authToken'), MESSAGE_TYPE: resourceName.startsWith('REQ_') ? resourceName : `REQ_${resourceName}` }, params);\n }\n createResourcesMessage(params) {\n return Object.assign({ SOURCE_REF: this.uuid.createId(), SESSION_AUTH_TOKEN: this.session.getSessionStorageItem('authToken'), MESSAGE_TYPE: EventMessageType.RESOURCES_REQUEST }, params);\n }\n createMetaRequestMessage(resourceName, messageType = EventMessageType.META_REQUEST) {\n return {\n SOURCE_REF: this.uuid.createId(),\n MESSAGE_TYPE: messageType,\n DETAILS: {\n FEATURE: resourceName,\n },\n SESSION_AUTH_TOKEN: this.session.getSessionStorageItem('authToken'),\n };\n }\n createCommitMessage(eventName, params) {\n return Object.assign({ SOURCE_REF: this.uuid.createId(), SESSION_AUTH_TOKEN: this.session.getSessionStorageItem('authToken'), MESSAGE_TYPE: eventName }, params);\n }\n createRefreshTokenMessage() {\n return {\n SOURCE_REF: this.uuid.createId(),\n SESSION_AUTH_TOKEN: this.session.getSessionStorageItem('authToken'),\n MESSAGE_TYPE: EventMessageType.EVENT_LOGIN_AUTH,\n DETAILS: {\n REFRESH_AUTH_TOKEN: this.session.getSessionStorageItem('refreshToken'),\n MFA_CODE: this.session.getSessionStorageItem('mfaToken'),\n },\n };\n }\n createChangePasswordMessage(username, oldPassword, newPassword) {\n return {\n USER_NAME: username,\n SOURCE_REF: this.uuid.createId(),\n MESSAGE_TYPE: EventMessageType.EVENT_CHANGE_USER_PASSWORD,\n DETAILS: {\n OLD_PASSWORD: oldPassword,\n NEW_PASSWORD: newPassword,\n },\n };\n }\n createForgotPasswordMessage(username, returnUrl, requester = username) {\n return {\n USER_NAME: requester,\n SOURCE_REF: this.uuid.createId(),\n MESSAGE_TYPE: EventMessageType.EVENT_SELF_SERVICE_PASSWORD_RESET,\n DETAILS: {\n USER_NAME: username,\n RETURN_URL: returnUrl,\n },\n };\n }\n createForgotPasswordTokenMessage(username, resetToken, newPassword, requester = username) {\n return {\n USER_NAME: requester,\n SOURCE_REF: this.uuid.createId(),\n MESSAGE_TYPE: EventMessageType.EVENT_PASSWORD_RESET_ACTION,\n DETAILS: {\n USER_NAME: username,\n RESET_TOKEN: resetToken,\n NEW_PASSWORD: newPassword,\n },\n };\n }\n createMoreRowsMessage(sourceRef, viewNumber) {\n return {\n SOURCE_REF: this.uuid.createId(),\n MESSAGE_TYPE: MessageType.MORE_ROWS,\n DETAILS: {\n SOURCE_REF: sourceRef,\n VIEW_NUMBER: viewNumber,\n },\n SESSION_AUTH_TOKEN: this.session.getSessionStorageItem('authToken'),\n };\n }\n createMoreColumnsMessage(sourceRef) {\n return Object.assign(Object.assign({}, this.createMoreRowsMessage(sourceRef)), { MESSAGE_TYPE: MessageType.MORE_COLUMNS });\n }\n createHTTPHeadersFromMessage(message, contentType = 'application/json; charset=UTF-8') {\n const headers = { 'Content-type': contentType };\n if (message.SOURCE_REF) {\n headers['source-ref'] = message.SOURCE_REF;\n headers['SOURCE_REF'] = message.SOURCE_REF;\n }\n if (message.SESSION_AUTH_TOKEN) {\n headers['SESSION-AUTH-TOKEN'] = message.SESSION_AUTH_TOKEN;\n }\n if (message.MESSAGE_TYPE === EventMessageType.EVENT_LOGOUT) {\n headers['SESSION-ID'] = message.SESSION_ID;\n }\n return headers;\n }\n /** {@inheritDoc MessageBuilder.createHeartbeatPingMessage} */\n createHeartbeatPingMessage(verbose = false) {\n return {\n MESSAGE_TYPE: MessageType.HEARTBEAT_PING,\n SOURCE_REF: this.uuid.createId(),\n VERBOSE: verbose,\n DETAILS: {},\n SESSION_AUTH_TOKEN: this.session.getSessionStorageItem('authToken'),\n };\n }\n};\nDefaultMessageBuilder = __decorate([\n __param(0, Session),\n __param(1, UUID)\n], DefaultMessageBuilder);\nexport { DefaultMessageBuilder };\n/**\n * The DI token for the MessageBUilder interface.\n * @internal\n */\nexport const MessageBuilder = DI.createInterface((x) => x.singleton(DefaultMessageBuilder));\n","import { createObserver } from '@genesislcap/foundation-utils';\nimport { DI } from '@microsoft/fast-foundation';\n/**\n * @public\n */\nexport const CommitEventType = 'connect-commit-event';\n/**\n * @public\n */\nexport const CommitAckEventType = 'connect-commit-ack-event';\n/**\n * @public\n */\nexport const CommitResponseEventType = 'connect-commit-response-event';\n/**\n * @public\n */\nexport const StreamEventType = 'connect-stream-event';\n/**\n * @public\n */\nexport const StreamErrorEventType = 'connect-stream-error-event';\n/**\n * @public\n */\nexport const StreamCompleteEventType = 'connect-stream-complete-event';\n/**\n * @public\n */\nexport const MetadataEventType = 'connect-metadata-event';\n/**\n * Default ConnectEvents implementation.\n * @public\n */\nexport class DefaultConnectEvents {\n constructor() {\n /** @internal */\n this.streamListeners = createObserver();\n /** @internal */\n this.streamCompleteListeners = createObserver();\n /** @internal */\n this.streamErrorListeners = createObserver();\n /** @internal */\n this.commitListeners = createObserver();\n /** @internal */\n this.metadataListeners = createObserver();\n /** @internal */\n this.commitResponseListeners = createObserver();\n }\n /** {@inheritDoc ConnectEvents.addStreamListener} */\n addStreamListener(listener, complete, error) {\n var _a, _b, _c;\n const unsubscribe = (_a = this.streamListeners) === null || _a === void 0 ? void 0 : _a.subscribe(listener);\n const completeUnsubscribe = (_b = this.streamCompleteListeners) === null || _b === void 0 ? void 0 : _b.subscribe(complete);\n const errorUnsubscribe = (_c = this.streamErrorListeners) === null || _c === void 0 ? void 0 : _c.subscribe(error);\n return () => {\n unsubscribe();\n completeUnsubscribe();\n errorUnsubscribe();\n };\n }\n /** {@inheritDoc ConnectEventsEmitter.onStreamEvent} */\n onStreamEvent(resourceName, message, stream, functions) {\n var _a;\n (_a = this.streamListeners) === null || _a === void 0 ? void 0 : _a.publish(new CustomEvent(StreamEventType, {\n detail: {\n functions,\n message,\n resourceName,\n stream,\n },\n }));\n }\n /** {@inheritDoc ConnectEventsEmitter.onStreamErrorEvent} */\n onStreamErrorEvent(resourceName, stream, error) {\n var _a;\n (_a = this.streamErrorListeners) === null || _a === void 0 ? void 0 : _a.publish(new CustomEvent(StreamErrorEventType, {\n detail: {\n resourceName,\n stream,\n error,\n },\n }));\n }\n /** {@inheritDoc ConnectEventsEmitter.onStreamCompleteEvent} */\n onStreamCompleteEvent(resourceName, stream) {\n var _a;\n (_a = this.streamCompleteListeners) === null || _a === void 0 ? void 0 : _a.publish(new CustomEvent(StreamCompleteEventType, {\n detail: {\n resourceName,\n stream,\n },\n }));\n }\n /** {@inheritDoc ConnectEvents.addCommitListener} */\n addCommitListener(listener) {\n var _a;\n return (_a = this.commitListeners) === null || _a === void 0 ? void 0 : _a.subscribe(listener);\n }\n /** {@inheritDoc ConnectEventsEmitter.onStreamEvent} */\n onCommitEvent(eventName, message) {\n var _a;\n (_a = this.commitListeners) === null || _a === void 0 ? void 0 : _a.publish(new CustomEvent(CommitEventType, {\n detail: {\n eventName,\n message,\n },\n }));\n }\n /** {@inheritDoc ConnectEvents.addMetadataListener} */\n addMetadataListener(listener) {\n var _a;\n return (_a = this.metadataListeners) === null || _a === void 0 ? void 0 : _a.subscribe(listener);\n }\n /** {@inheritDoc ConnectEventsEmitter.onMetadataEvent} */\n onMetadataEvent(resourceName, message, error) {\n var _a;\n (_a = this.metadataListeners) === null || _a === void 0 ? void 0 : _a.publish(new CustomEvent(MetadataEventType, {\n detail: {\n resourceName,\n message,\n error,\n },\n }));\n }\n /** {@inheritDoc ConnectEvents.addCommitResponseListener} */\n addCommitResponseListener(listener) {\n var _a;\n return (_a = this.commitResponseListeners) === null || _a === void 0 ? void 0 : _a.subscribe(listener);\n }\n /** {@inheritDoc ConnectEventsEmitter.onCommitResponseEvent} */\n onCommitResponseEvent(eventName, response) {\n var _a;\n (_a = this.commitResponseListeners) === null || _a === void 0 ? void 0 : _a.publish(new CustomEvent(CommitResponseEventType, {\n detail: {\n eventName,\n response,\n },\n }));\n }\n}\n/**\n * ConnectEvents DI key.\n *\n * @privateRemarks\n * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.\n *\n * @internal\n */\nexport const ConnectEvents = DI.createInterface((x) => x.singleton(DefaultConnectEvents));\n/**\n * ConnectEventsEmitter DI key.\n *\n * @privateRemarks\n * ConnectEventsEmitter is used by Connect.\n * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.\n *\n * @internal\n */\nexport const ConnectEventsEmitter = DI.createInterface((x) => x.aliasTo(ConnectEvents));\n","import { DI } from '@microsoft/fast-foundation';\n/**\n * The default implementation for the MetaCache interface.\n * @public\n */\nexport class DefaultMetaCache {\n constructor() {\n this.cachedMetadata = new Map();\n this.cachedJsonSchema = new Map();\n }\n getMetadataFor(resourceName) {\n return this.cachedMetadata.get(resourceName);\n }\n getJsonSchemaFor(resourceName) {\n return this.cachedJsonSchema.get(resourceName);\n }\n hasMetadataFor(resourceName) {\n return this.cachedMetadata.has(resourceName);\n }\n hasJsonSchemaFor(resourceName) {\n return this.cachedJsonSchema.has(resourceName);\n }\n setMetadataFor(resourceName, metadata) {\n this.cachedMetadata.set(resourceName, metadata);\n }\n setJsonSchemaFor(resourceName, schemaResponse) {\n this.cachedJsonSchema.set(resourceName, schemaResponse);\n }\n}\n/**\n * The DI token for the MetaCache interface.\n * @internal\n */\nexport const MetaCache = DI.createInterface((x) => x.singleton(DefaultMetaCache));\n","import { HTTP_CONFIG } from '@genesislcap/foundation-utils';\nimport { DI } from '@microsoft/fast-foundation';\n/**\n * The default configuration for connecting to an HTTP service.\n * @public\n */\nexport const defaultHttpConnectConfig = {\n polling: Object.assign({ POLLING_MAP: {\n EVENT_AMEND_USER: {\n TEMP_FREQUENCY: 500,\n AMOUNT_OF_POLLS: 5,\n QUERIES: ['ALL_USERS'],\n },\n }, POLLING_INTERVAL_MAP: {\n ALL_TRADES: 5000,\n ALL_USERS: 5000,\n ALL_PROCESSES_STATUS: 10000,\n }, POLLING_FREQUENCY: 5000 }, (HTTP_CONFIG && HTTP_CONFIG.length ? JSON.parse(HTTP_CONFIG) : {})),\n};\n/**\n * Configuration options for the Connect (HTTP) instance.\n * @internal\n */\nexport const HttpConnectConfig = DI.createInterface((x) => x.instance(defaultHttpConnectConfig));\n","export const updateState = (state, update) => {\n if ((update === null || update === void 0 ? void 0 : update.ROW) && state && state.length > 0) {\n update.ROW.forEach((row) => {\n const eventData = row;\n if (eventData && eventData.DETAILS) {\n const ref = eventData.DETAILS.ROW_REF;\n const type = eventData.DETAILS.OPERATION;\n if (type === 'INSERT') {\n if (!state.find((x) => { var _a; return ((_a = x.DETAILS) === null || _a === void 0 ? void 0 : _a.ROW_REF) === ref; })) {\n state.unshift(eventData);\n }\n }\n if (type === 'DELETE') {\n state = state.filter((x) => { var _a, _b; return ((_a = row.DETAILS) === null || _a === void 0 ? void 0 : _a.ROW_REF) !== ((_b = x.DETAILS) === null || _b === void 0 ? void 0 : _b.ROW_REF); });\n }\n if (type === 'MODIFY') {\n state = state.map((item) => { var _a; return ((_a = item.DETAILS) === null || _a === void 0 ? void 0 : _a.ROW_REF) === ref ? Object.assign(Object.assign({}, item), eventData) : item; });\n }\n }\n });\n }\n else if (update && (!state || state.length === 0)) {\n state = [...new Set(update.ROW)];\n }\n return state;\n};\n","var DefaultHttpConnect_1;\nimport { __awaiter, __decorate, __param } from \"tslib\";\nimport { JSONSerializer } from '@genesislcap/foundation-utils';\nimport { observable, volatile } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\nimport { StatusCodes } from 'http-status-codes';\nimport { BehaviorSubject, concat, filter, finalize, from, interval, retry, scan, switchMap, takeWhile, timer, } from 'rxjs';\nimport { MetaCache } from '../metadata';\nimport { Session } from '../session';\nimport { logger } from '../utils';\nimport { Http } from './http';\nimport { HttpConnectConfig } from './http.connect.types';\nimport { EventMessageType, MessageBuilder, MessageType, } from './message';\nimport { SessionRefreshResult, tryRefreshSession } from './sessionRefresh';\nimport { updateState } from './updateState';\n/**\n * The default implementation for the Connect interface (HTTP-only).\n * @public\n */\nlet DefaultHttpConnect = DefaultHttpConnect_1 = class DefaultHttpConnect {\n get isConnected() {\n return this._isConnected;\n }\n set isConnected(value) {\n this._isConnected = value;\n this.isConnectedSubject.next(this._isConnected);\n }\n constructor(http, messageBuilder, session, metaCache, serializer, config) {\n var _a;\n this.http = http;\n this.messageBuilder = messageBuilder;\n this.session = session;\n this.metaCache = metaCache;\n this.serializer = serializer;\n this.config = config;\n this.isWorking = false;\n this._isConnected = false;\n // TODO: Deprecated\n // private isConnectedSubject = new BehaviorSubject(this._isConnected);\n this.isConnectedSubject = new BehaviorSubject(this._isConnected);\n this.isConnected$ = (_a = this.isConnectedSubject) === null || _a === void 0 ? void 0 : _a.asObservable();\n // keep track of events with temporarily increased polling frequency\n this.ongoingTurbo = {};\n /**\n * A map of active messages in \"polling\" mode.\n * @remarks Equivalent to messaged being streamed in a WebSocket connection.\n * @internal\n */\n this.streams = new Map();\n /**\n * Promise that tracks an ongoing session refresh to prevent concurrent refreshes from the same instance.\n * @internal\n */\n this.ongoingRefresh = null;\n }\n /**\n * Attempts to refresh the session when a 401 Unauthorized error is received.\n * Uses a lock mechanism to prevent multiple tabs from trying to reauthenticate simultaneously.\n * Also prevents concurrent refresh attempts from the same instance by reusing an ongoing refresh.\n * If another tab is handling the refresh, waits and retries once to verify the result.\n * @internal\n * @returns A Promise that resolves to `true` if session was refreshed successfully, `false` otherwise.\n */\n handleSessionRefresh() {\n // If a refresh is already in progress, reuse it\n if (this.ongoingRefresh) {\n return this.ongoingRefresh;\n }\n // Start a new refresh and clear the lock when done\n this.ongoingRefresh = (() => __awaiter(this, void 0, void 0, function* () {\n const host = this.host;\n this.disconnect();\n let result = yield tryRefreshSession();\n // If another tab is handling the refresh, wait and check once more\n if (result === SessionRefreshResult.HANDLED_BY_OTHER_TAB) {\n yield new Promise((resolve) => {\n setTimeout(resolve, DefaultHttpConnect_1.REAUTH_WAIT_MS);\n });\n // Check if the other tab succeeded\n result = yield tryRefreshSession();\n }\n // Reconnect if session is valid (either we refreshed it or another tab did)\n if (result === SessionRefreshResult.SUCCESS ||\n result === SessionRefreshResult.ALREADY_VALID) {\n this.connect(host);\n return true;\n }\n return false;\n }))().finally(() => {\n this.ongoingRefresh = null;\n });\n return this.ongoingRefresh;\n }\n /**\n * Checks if the host is available by sending a heartbeat ping message and waiting for the response.\n * @internal\n * @returns A Promise that resolves to `true` if the host is available, and `false` otherwise.\n */\n checkHost() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n return this.getMessage({\n MESSAGE_TYPE: MessageType.HEARTBEAT_PING,\n SOURCE_REF: 'host check', // doesn't matter\n }).then((response) => {\n return response.MESSAGE_TYPE === MessageType.HEARTBEAT_PONG;\n });\n }\n catch (e) {\n logger.error(e);\n return false;\n }\n });\n }\n send(message, needsHandling) {\n return __awaiter(this, void 0, void 0, function* () {\n // Wait for any ongoing session refresh to complete before sending\n if (this.ongoingRefresh) {\n const refreshSucceeded = yield this.ongoingRefresh;\n if (!refreshSucceeded) {\n throw new Error('Cannot send message: session refresh failed');\n }\n }\n return this.http.post(DefaultHttpConnect_1.getUrl(this.host, message), {\n body: DefaultHttpConnect_1.getBody(message),\n headers: this.messageBuilder.createHTTPHeadersFromMessage(message),\n });\n });\n }\n httpMode() {\n return true;\n }\n /**\n * @deprecated - Please reference `User` from `@genesislcap/foundation-user` instead.\n */\n setValidSession(valid) {\n logger.deprecated('setValidSession', 'Please refrain from calling this API as this state is managed internally.', '15.0.0');\n }\n connect(host) {\n return __awaiter(this, void 0, void 0, function* () {\n this.host = host;\n // below will convert the host to http one if someone is\n // using the feature flag to force http mode but set api host as ws url\n if (this.host.startsWith('ws')) {\n this.host = this.host.replace('ws', 'http');\n }\n if (!this.host.endsWith('/')) {\n this.host = this.host.concat('/');\n }\n return this.checkHost().then((connected) => {\n this.isConnected = connected;\n this.session.setSessionStorageItem('hostUrl', this.host);\n return connected;\n });\n });\n }\n disconnect() {\n this.isConnected = false;\n this.streams.clear();\n this.ongoingTurbo = {};\n this.host = undefined;\n }\n snapshot(resourceName, params) {\n return __awaiter(this, void 0, void 0, function* () {\n const snapshotMessage = this.messageBuilder.createDataLogonMessage(resourceName, params);\n logger.debug(`HTTP MODE - ${snapshotMessage.MESSAGE_TYPE} (snapshot) message created -> `, snapshotMessage);\n return this.send(snapshotMessage).then((message) => {\n // snapshot = we only care about the initial payload but since it's a DATASERVER resource (not REQUEST_REPLY) we need to terminate the stream on the server\n this.dataLogoff(snapshotMessage.SOURCE_REF).catch((e) => logger.error(e));\n return message;\n });\n });\n }\n stream(resourceName, onMessage, onError, params) {\n const streamMessage = this.messageBuilder.createDataLogonMessage(resourceName, params);\n logger.debug(`HTTP MODE - ${streamMessage.MESSAGE_TYPE} (stream) message created -> `, streamMessage);\n const SOURCE_REF = streamMessage.SOURCE_REF;\n this.streams.set(SOURCE_REF, {\n SOURCE_REF,\n POLLING_FREQUENCY: new BehaviorSubject(this.config.polling.POLLING_FREQUENCY),\n RESOURCE_NAME: resourceName,\n });\n const interval$ = this.streams.get(SOURCE_REF).POLLING_FREQUENCY;\n const stream = concat(\n // initial DATA_LOGON needs to be a POST\n from(this.send(streamMessage)), \n // subsequent GET requests using the same SOURCE_REF\n interval$\n .pipe(filter(() => document.visibilityState === 'visible'))\n .pipe(switchMap((ms) => interval(ms)))\n .pipe(switchMap(() => from(this.getMessage(streamMessage))))).pipe(takeWhile(() => this.streams.has(SOURCE_REF)), // ensure it stops emitting once removed\n retry({\n count: DefaultHttpConnect_1.MAX_RETRIES,\n delay: (err, retryCount) => {\n const error = err;\n logger.error(`Retry ${retryCount}/${DefaultHttpConnect_1.MAX_RETRIES}:`, error.status, error);\n // Only retry if the error is a connection error or auth error\n const isRetryableError = error.status === 0 ||\n (error.status &&\n error.status >= StatusCodes.BAD_REQUEST &&\n error.status < StatusCodes.INTERNAL_SERVER_ERROR);\n if (!isRetryableError) {\n throw err;\n }\n // Remove SOURCE_REF from the map if the error is a 404, meaning the DS has already expired\n if (error.status === StatusCodes.NOT_FOUND) {\n this.streams.delete(SOURCE_REF);\n }\n // Handle 401 by trying to refresh session, then delay for other errors\n if (error.status === StatusCodes.UNAUTHORIZED) {\n return from(this.handleSessionRefresh());\n }\n // For other errors, just delay\n return timer(DefaultHttpConnect_1.RETRY_DELAY_MS);\n },\n }), finalize(() => {\n logger.debug(`Terminating stream for ${resourceName} - ${SOURCE_REF}`);\n this.dataLogoff(SOURCE_REF);\n }));\n this.streams.get(SOURCE_REF).STREAM = stream;\n return stream;\n }\n streamState(resourceName, onMessage = () => { }, onError = () => { }, params, initialState = []) {\n return this.stream(resourceName, onMessage, onError, params).pipe(scan(updateState, initialState));\n }\n streamWithoutAutoTeardown(resourceName, onMessage, onError, params) {\n logger.deprecated('streamWithoutAutoTeardown', `Please use 'stream' api instead.`, '15.0.0');\n return this.stream(resourceName, onMessage, onError, params);\n }\n getMessage(message) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.ongoingRefresh) {\n const refreshSucceeded = yield this.ongoingRefresh;\n if (!refreshSucceeded) {\n throw new Error('Cannot get message: session refresh failed');\n }\n }\n return this.http.get(DefaultHttpConnect_1.getUrl(this.host, message), {\n headers: this.messageBuilder.createHTTPHeadersFromMessage(message),\n });\n });\n }\n getMoreRows(sourceRef) {\n return __awaiter(this, void 0, void 0, function* () {\n const moreRowsMessage = this.messageBuilder.createMoreRowsMessage(sourceRef);\n logger.debug(`HTTP MODE - ${moreRowsMessage.MESSAGE_TYPE} message created -> `, moreRowsMessage);\n return this.send(moreRowsMessage);\n });\n }\n getMoreColumns(sourceRef) {\n return __awaiter(this, void 0, void 0, function* () {\n const message = this.messageBuilder.createMoreColumnsMessage(sourceRef);\n return this.send(message);\n });\n }\n dataLogoff(streamSourceRef) {\n return __awaiter(this, void 0, void 0, function* () {\n const dataLogoffMessage = this.messageBuilder.createDataLogoffMessage(streamSourceRef);\n return this.send(dataLogoffMessage).then((res) => {\n if (this.streams.has(streamSourceRef)) {\n logger.debug(`Removing stream ${streamSourceRef}`);\n this.streams.delete(streamSourceRef);\n }\n return res;\n });\n });\n }\n getMetadata(resourceName_1) {\n return __awaiter(this, arguments, void 0, function* (resourceName, useCache = true) {\n const metaRequestMessage = this.messageBuilder.createMetaRequestMessage(resourceName);\n logger.debug(`HTTP MODE - ${metaRequestMessage.MESSAGE_TYPE} (metadata) message created -> `, metaRequestMessage);\n // what was top level payload using websockets is now under DETAILS for some reason\n return this.send(metaRequestMessage).then((res) => res.DETAILS);\n });\n }\n getJSONSchema(resourceName) {\n return __awaiter(this, void 0, void 0, function* () {\n const metaRequestMessage = this.messageBuilder.createMetaRequestMessage(resourceName, EventMessageType.JSON_SCHEMA_REQUEST);\n logger.debug(`HTTP MODE! - ${metaRequestMessage.MESSAGE_TYPE} (json schema) message created -> `, metaRequestMessage);\n return this.send(metaRequestMessage);\n });\n }\n request(resourceName, params) {\n const requestMessage = this.messageBuilder.createRequestMessage(resourceName, params);\n logger.debug(`HTTP MODE! - ${requestMessage.MESSAGE_TYPE} (request server) message created -> `, requestMessage);\n return this.send(requestMessage);\n }\n getAvailableResources(params) {\n return __awaiter(this, void 0, void 0, function* () {\n const requestMessage = this.messageBuilder.createResourcesMessage(params);\n logger.debug(`HTTP MODE! - ${requestMessage.MESSAGE_TYPE} (getResources) message created -> `, requestMessage);\n return this.send(requestMessage);\n });\n }\n commitEvent(eventName, params) {\n return __awaiter(this, void 0, void 0, function* () {\n const commitMessage = this.messageBuilder.createCommitMessage(eventName, params);\n logger.debug(`HTTP MODE! - ${commitMessage.MESSAGE_TYPE} (commit) message created -> `, commitMessage);\n return this.send(commitMessage).then((reply) => {\n this.maybeTurbo(eventName, reply);\n return reply;\n });\n });\n }\n maybeTurbo(eventName, message) {\n var _a;\n if (!((_a = message === null || message === void 0 ? void 0 : message.MESSAGE_TYPE) === null || _a === void 0 ? void 0 : _a.endsWith('_ACK')))\n return;\n if (this.ongoingTurbo[eventName]) {\n logger.debug(`${eventName} polling frequency is already accelerated.`);\n return;\n }\n const turbo = this.config.polling.POLLING_MAP[eventName];\n if (!((turbo === null || turbo === void 0 ? void 0 : turbo.TEMP_FREQUENCY) && turbo.AMOUNT_OF_POLLS)) {\n return;\n }\n const freq = turbo.TEMP_FREQUENCY;\n const duration = freq * turbo.AMOUNT_OF_POLLS;\n // DEEP COPIES - will be used to override the polling frequency temporarily and then switch back to the original\n const originalPollingIntervalMap = JSON.parse(JSON.stringify(this.config.polling.POLLING_INTERVAL_MAP));\n const tempPollingMap = JSON.parse(JSON.stringify(this.config.polling.POLLING_INTERVAL_MAP));\n for (const q of turbo.QUERIES) {\n tempPollingMap[q] = freq;\n if (!originalPollingIntervalMap[q]) {\n originalPollingIntervalMap[q] = this.config.polling.POLLING_FREQUENCY;\n }\n }\n // temporary override starting now\n logger.debug(`${eventName} TRIGGERED -> ENFORCING TURBO | FREQUENCY=${freq}ms DURATION=${duration}`);\n this.ongoingTurbo[eventName] = true;\n this.updateIntervals({\n polling: {\n POLLING_INTERVAL_MAP: tempPollingMap,\n },\n });\n // schedule restoration of the original polling frequency\n setTimeout(() => {\n logger.debug(`RESTORED ORIGINAL POLLING INTERVALS FOR ${eventName}`);\n this.updateIntervals({\n polling: {\n POLLING_INTERVAL_MAP: originalPollingIntervalMap,\n },\n });\n this.ongoingTurbo[eventName] = false;\n }, duration);\n }\n updateIntervals(config) {\n const { POLLING_INTERVAL_MAP } = config.polling;\n if (!POLLING_INTERVAL_MAP)\n return;\n this.config.polling.POLLING_INTERVAL_MAP = POLLING_INTERVAL_MAP;\n this.handlePollingIntervalMapUpdate(POLLING_INTERVAL_MAP);\n }\n handlePollingIntervalMapUpdate(pollingIntervalMap) {\n if (!pollingIntervalMap) {\n return;\n }\n for (const resource in pollingIntervalMap) {\n if (!pollingIntervalMap.hasOwnProperty(resource))\n continue;\n const newFreq = pollingIntervalMap[resource];\n this.config.polling.POLLING_INTERVAL_MAP[resource] = newFreq;\n logger.debug(`Setting polling frequency for ${resource} = ${newFreq}`);\n // could have another map by resource name for better efficiency but likely dealing with negligible number of streams\n [...this.streams.values()]\n .filter((s) => s.RESOURCE_NAME === resource)\n .forEach((s) => { var _a; return (_a = s === null || s === void 0 ? void 0 : s.POLLING_FREQUENCY) === null || _a === void 0 ? void 0 : _a.next(newFreq); });\n }\n }\n static getBody(message) {\n return JSON.stringify(message);\n }\n static getUrl(host, message) {\n const type = message.MESSAGE_TYPE;\n let apiEndpoint = message.MESSAGE_TYPE.replace(/_/g, '-').toLowerCase();\n // for DATA_LOGON we go by resource name\n if (type === EventMessageType.DATA_LOGON) {\n apiEndpoint = message.DETAILS.DATASOURCE_NAME.replace(/_/g, '-').toLowerCase();\n }\n return `${host}${apiEndpoint}`;\n }\n};\n/**\n * Amount of time (in milliseconds) to wait when another tab is handling session reauthentication.\n */\nDefaultHttpConnect.REAUTH_WAIT_MS = 5000;\n/**\n * Amount of time (in milliseconds) to wait before retrying a failed request.\n */\nDefaultHttpConnect.RETRY_DELAY_MS = 1000;\n/**\n * Maximum number of retry attempts for failed requests.\n */\nDefaultHttpConnect.MAX_RETRIES = 3;\n__decorate([\n observable\n], DefaultHttpConnect.prototype, \"host\", void 0);\n__decorate([\n observable\n], DefaultHttpConnect.prototype, \"isWorking\", void 0);\n__decorate([\n observable\n], DefaultHttpConnect.prototype, \"_isConnected\", void 0);\n__decorate([\n volatile\n], DefaultHttpConnect.prototype, \"isConnected\", null);\nDefaultHttpConnect = DefaultHttpConnect_1 = __decorate([\n __param(0, Http),\n __param(1, MessageBuilder),\n __param(2, Session),\n __param(3, MetaCache),\n __param(4, JSONSerializer),\n __param(5, HttpConnectConfig)\n], DefaultHttpConnect);\nexport { DefaultHttpConnect };\n/**\n * The DI token for the Connect interface (HTTP-only).\n * @internal\n */\nexport const HttpConnect = DI.createInterface((x) => x.singleton(DefaultHttpConnect));\n","import { __awaiter, __decorate, __param } from \"tslib\";\nimport { FORCE_HTTP, GENESIS_SOCKET_URL, isFeatureActivated } from '@genesislcap/foundation-utils';\nimport { observable } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\nimport { scan } from 'rxjs';\nimport { MetaCache } from '../metadata';\nimport { logger } from '../utils';\nimport { ConnectEventsEmitter } from './connect.events';\nimport { ConnectConfig } from './connect.types';\nimport { HttpConnect } from './http.connect';\nimport { EventMessageType, MessageBuilder, } from './message';\nimport { Socket } from './socket';\nimport { updateState } from './updateState';\n/**\n * The default implementation for the Connect interface (WS-only).\n * @public\n */\nlet DefaultConnect = class DefaultConnect {\n get isConnected() {\n return this.socket.isConnected;\n }\n get isConnectedSubject() {\n return this.socket.isConnectedSubject;\n }\n get isConnected$() {\n var _a;\n return (_a = this.socket.isConnectedSubject) === null || _a === void 0 ? void 0 : _a.asObservable();\n }\n get host() {\n return this.socket.host;\n }\n constructor(socket, messageBuilder, metaCache, events, config) {\n this.socket = socket;\n this.messageBuilder = messageBuilder;\n this.metaCache = metaCache;\n this.events = events;\n this.config = config;\n this.isWorking = false;\n }\n httpMode() {\n return false;\n }\n /**\n * @deprecated - Please reference `User` from `@genesislcap/foundation-user` instead.\n */\n setValidSession(valid) {\n logger.deprecated('setValidSession', 'Please refrain from calling this API as this state is managed internally.', '15.0.0');\n }\n send(message, needsHandling) {\n return this.socket.send(message, needsHandling);\n }\n connect() {\n return __awaiter(this, arguments, void 0, function* (host = GENESIS_SOCKET_URL) {\n this.socket.reset();\n return this.socket.connect(host, this.config.connect, this.config.reconnect);\n });\n }\n disconnect() {\n this.socket.reset();\n }\n snapshot(resourceName, params) {\n return __awaiter(this, void 0, void 0, function* () {\n const snapshotMessage = this.messageBuilder.createDataLogonMessage(resourceName, params);\n logger.debug(`${snapshotMessage.MESSAGE_TYPE} (snapshot) message created -> `, snapshotMessage);\n return this.socket.send(snapshotMessage);\n });\n }\n stream(resourceName, onMessage, onError, params) {\n const msg = this.messageBuilder.createDataLogonMessage(resourceName, params);\n logger.debug(`${msg.MESSAGE_TYPE} (stream) message created -> `, msg);\n const resource = this.socket.sendForStream(msg, onMessage, (error) => {\n onError(error);\n this.events.onStreamErrorEvent(resourceName, resource, error);\n }, () => {\n this.events.onStreamCompleteEvent(resourceName, resource);\n });\n this.events.onStreamEvent(resourceName, msg, resource, {\n onMessage,\n onError,\n });\n return resource;\n }\n streamState(resourceName, onMessage = () => { }, onError = () => { }, params, initialState = []) {\n return this.stream(resourceName, onMessage, onError, params).pipe(scan(updateState, initialState));\n }\n streamWithoutAutoTeardown(resourceName, onMessage, onError, params) {\n logger.deprecated('streamWithoutAutoTeardown', `Please use 'stream' api instead.`, '15.0.0');\n const msg = this.messageBuilder.createDataLogonMessage(resourceName, params);\n logger.debug(`${msg.MESSAGE_TYPE} (stream without auto-teardown) message created -> `, msg);\n const resource = this.socket.sendForStreamWithoutTeardown(msg, onMessage, (error) => {\n onError(error);\n this.events.onStreamErrorEvent(resourceName, resource, error);\n });\n this.events.onStreamEvent(resourceName, msg, resource, {\n onMessage,\n onError,\n });\n return resource;\n }\n getMoreRows(sourceRef, viewNumber) {\n return __awaiter(this, void 0, void 0, function* () {\n const moreRowsMessage = this.messageBuilder.createMoreRowsMessage(sourceRef, viewNumber);\n logger.debug(`${moreRowsMessage.MESSAGE_TYPE} message created -> `, moreRowsMessage);\n return this.socket.send(moreRowsMessage, false);\n });\n }\n getMoreColumns(sourceRef) {\n return __awaiter(this, void 0, void 0, function* () {\n const message = this.messageBuilder.createMoreColumnsMessage(sourceRef);\n return this.socket.send(message);\n });\n }\n dataLogoff(streamSourceRef) {\n return __awaiter(this, void 0, void 0, function* () {\n const dataLogoffMessage = this.messageBuilder.createDataLogoffMessage(streamSourceRef);\n logger.debug(`${dataLogoffMessage.MESSAGE_TYPE} message created -> `, dataLogoffMessage);\n return this.socket.send(dataLogoffMessage);\n });\n }\n getMetadata(resourceName_1) {\n return __awaiter(this, arguments, void 0, function* (resourceName, useCache = true) {\n var _a;\n if (useCache) {\n if (this.metaCache.hasMetadataFor(resourceName)) {\n logger.debug(`Cached metadata retrieved for ${resourceName}`);\n return this.metaCache.getMetadataFor(resourceName);\n }\n }\n const metaRequestMessage = this.messageBuilder.createMetaRequestMessage(resourceName);\n logger.debug(`${metaRequestMessage.MESSAGE_TYPE} (metadata) message created -> `, metaRequestMessage);\n let details;\n let error;\n try {\n this.isWorking = true;\n const metaResponse = yield this.socket.send(metaRequestMessage);\n details = (_a = metaResponse === null || metaResponse === void 0 ? void 0 : metaResponse.DETAILS) !== null && _a !== void 0 ? _a : {};\n if (Object.keys(details).length) {\n this.metaCache.setMetadataFor(resourceName, details);\n }\n }\n catch (e) {\n error = e;\n logger.error(e);\n throw error;\n }\n finally {\n this.events.onMetadataEvent(resourceName, metaRequestMessage, error);\n this.isWorking = false;\n }\n return details;\n });\n }\n getJSONSchema(resourceName_1) {\n return __awaiter(this, arguments, void 0, function* (resourceName, useCache = true) {\n var _a;\n if (useCache) {\n if (this.metaCache.hasJsonSchemaFor(resourceName)) {\n logger.debug(`Cached JsonSchema retrieved for ${resourceName}`);\n return this.metaCache.getJsonSchemaFor(resourceName);\n }\n }\n const metaRequestMessage = this.messageBuilder.createMetaRequestMessage(resourceName, EventMessageType.JSON_SCHEMA_REQUEST);\n logger.debug(`${metaRequestMessage.MESSAGE_TYPE} (json schema) message created -> `, metaRequestMessage);\n let jsonSchema;\n try {\n this.isWorking = true;\n jsonSchema = (_a = (yield this.socket.send(metaRequestMessage))) !== null && _a !== void 0 ? _a : {};\n if (Object.keys(jsonSchema).length) {\n this.metaCache.setJsonSchemaFor(resourceName, jsonSchema);\n }\n }\n catch (e) {\n logger.error(e);\n }\n finally {\n this.isWorking = false;\n }\n return jsonSchema;\n });\n }\n request(resourceName, params) {\n const requestMessage = this.messageBuilder.createRequestMessage(resourceName, params);\n logger.debug(`${requestMessage.MESSAGE_TYPE} (request server) message created -> `, requestMessage);\n return this.socket.send(requestMessage);\n }\n getAvailableResources(params) {\n return __awaiter(this, void 0, void 0, function* () {\n const requestMessage = this.messageBuilder.createResourcesMessage(params);\n logger.debug(`${requestMessage.MESSAGE_TYPE} (resources) message created -> `, requestMessage);\n return this.socket.send(requestMessage);\n });\n }\n commitEvent(eventName, params) {\n return __awaiter(this, void 0, void 0, function* () {\n const msg = this.messageBuilder.createCommitMessage(eventName, params);\n logger.debug(`${msg.MESSAGE_TYPE} (commit) message created -> `, msg);\n const promise = this.socket.send(msg);\n this.events.onCommitEvent(eventName, msg);\n return promise.then((response) => {\n this.events.onCommitResponseEvent(eventName, response);\n return response;\n });\n });\n }\n};\n__decorate([\n observable\n], DefaultConnect.prototype, \"isWorking\", void 0);\nDefaultConnect = __decorate([\n __param(0, Socket),\n __param(1, MessageBuilder),\n __param(2, MetaCache),\n __param(3, ConnectEventsEmitter),\n __param(4, ConnectConfig)\n], DefaultConnect);\nexport { DefaultConnect };\nconst useHttpConnect = FORCE_HTTP === 'true' || isFeatureActivated('forceHttp');\n/**\n * The DI token for the Connect interface (WS-only).\n * @internal\n */\nexport const WSConnect = DI.createInterface((x) => x.singleton(DefaultConnect));\n/**\n * The DI token for the Connect interface (HTTP | WS).\n * @internal\n */\nexport const Connect = DI.createInterface((x) => useHttpConnect ? x.aliasTo(HttpConnect) : x.aliasTo(WSConnect));\n/**\n * Get Connect from the DI container.\n *\n * @remarks\n * A utility method for host applications that are not using decorators or the DI container.\n *\n * @example\n * ```ts\n * import { getConnect } from '@genesislcap/foundation-comms';\n * import { API_HOST } from '@genesislcap/foundation-utils';\n * ...\n * private connect = getConnect();\n * ...\n * const connected = await this.connect.connect(API_HOST); // < WebSocket url\n * ```\n *\n * @public\n */\nexport function getConnect() {\n return DI.getOrCreateDOMContainer().get(Connect);\n}\n","import { __awaiter, __decorate, __param } from \"tslib\";\nimport { JSONSerializer } from '@genesislcap/foundation-utils';\nimport { DI } from '@microsoft/fast-foundation';\nfunction createHttpError(response) {\n const error = new Error(`HTTP error: ${response.status} ${response.statusText}`);\n error.status = response.status;\n error.message = response.statusText;\n return error;\n}\n/**\n * The default implementation of the Http interface.\n * @public\n */\nlet DefaultHttp = class DefaultHttp {\n constructor(serializer) {\n this.serializer = serializer;\n }\n get(url, requestInit) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield fetch(url, Object.assign(Object.assign({ credentials: 'include', headers: { 'Content-type': 'application/json; charset=UTF-8' } }, requestInit), { method: 'GET' }));\n if (!response.ok) {\n throw createHttpError(response);\n }\n const serializer = requestInit.serializer || this.serializer;\n return serializer.deserialize(response);\n });\n }\n post(url, requestInit) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield fetch(url, Object.assign(Object.assign({ credentials: 'include', headers: { 'Content-type': 'application/json; charset=UTF-8' } }, requestInit), { method: 'POST' }));\n if (!response.ok) {\n throw createHttpError(response);\n }\n const serializer = requestInit.serializer || this.serializer;\n return serializer.deserialize(response);\n });\n }\n};\nDefaultHttp = __decorate([\n __param(0, JSONSerializer)\n], DefaultHttp);\nexport { DefaultHttp };\n/**\n * The DI token for the Http interface.\n * @internal\n */\nexport const Http = DI.createInterface((x) => x.singleton(DefaultHttp));\n","import { __awaiter } from \"tslib\";\nimport { DI } from '@microsoft/fast-foundation';\nimport { v4 as uuidv4 } from 'uuid';\nimport { logger } from '../utils';\n/**\n * A service that implements the UUID interface and provides default UUID generation using the uuidv4 library.\n */\nclass UUIDService {\n /**\n * Constructs a new instance of the UUIDService.\n */\n constructor() { }\n /**\n * Generates a new UUID.\n * @param withLogging - Optional. Whether to log the generated UUID to the console. Defaults to false.\n * @returns The generated UUID.\n */\n createId(withLogging = false) {\n /**\n * Use this.config to customize uuidv4.\n */\n const id = uuidv4();\n withLogging && logger.debug(`UUID.createID ${id}`);\n return id;\n }\n /**\n * Generates a new UUID for a remote object.\n * @param withLogging - Optional. Whether to log the generated UUID to the console. Defaults to false.\n * @returns A promise that resolves to the generated UUID.\n */\n createRemoteId() {\n return __awaiter(this, arguments, void 0, function* (withLogging = false) {\n /**\n * TODO: Revisit async nature of id generation with potential server involvement\n * Use this.config to customize uuidv4.\n */\n const id = uuidv4();\n withLogging && logger.debug(`UUID.createRemoteID ${id}`);\n return id;\n });\n }\n}\n/**\n * A dependency injection token for the UUID interface.\n * @public\n */\nexport const UUID = DI.createInterface((x) => x.singleton(UUIDService));\n","import { logger } from '../utils';\n/**\n * Data server result filter.\n *\n * @param result - The raw data server result.\n * @param rowId - Row id. Defaults to ROW_REF.\n *\n * @public\n * @remarks\n * Centralised filter logic for row operations.\n */\nexport function dataServerResultFilter(result, rowId = 'ROW_REF') {\n const toRowData = (row) => {\n const tmp = Object.assign(Object.assign({}, row), { [rowId]: row.DETAILS[rowId] });\n delete tmp.DETAILS;\n return tmp;\n };\n const inserts = [];\n const deletes = [];\n const updates = [];\n for (const row of result.ROW) {\n if (!row.DETAILS) {\n continue;\n }\n switch (row.DETAILS.OPERATION) {\n case 'INSERT':\n inserts.push(toRowData(row));\n break;\n case 'MODIFY':\n updates.push(toRowData(row));\n break;\n case 'DELETE':\n deletes.push(toRowData(row));\n break;\n default:\n logger.error(`Unsupported operation type: '${row.DETAILS.OPERATION}'`);\n }\n }\n return { inserts, deletes, updates, SOURCE_REF: result.SOURCE_REF };\n}\n","/**\n * Types of Genesis resources.\n * @public\n */\nexport var ResourceType;\n(function (ResourceType) {\n ResourceType[\"DATASERVER\"] = \"DATASERVER\";\n ResourceType[\"EVENT_HANDLER\"] = \"EVENT_HANDLER\";\n ResourceType[\"REQUEST_SERVER\"] = \"REQUEST_SERVER\";\n})(ResourceType || (ResourceType = {}));\n/**\n * DatasourceStatusChanged.\n * @public\n */\nexport const DatasourceStatusChanged = 'datasource-status-changed';\n","import { DI } from '@microsoft/fast-foundation';\n/**\n * The DI key which can be used for explicit configuration by the host application\n * @internal\n */\nexport const CredentialManagerConfig = DI.createInterface();\n","import { __awaiter, __decorate, __param, __rest } from \"tslib\";\nimport { DI, optional } from '@microsoft/fast-foundation';\nimport jsCookie from 'js-cookie';\nimport { AuthType } from '../auth/auth.types';\nimport { Session } from '../session';\nimport { logger } from '../utils';\nimport { CredentialManagerConfig } from './credentialManager.types';\nfunction supportsCredentialsContainer() {\n if (!(navigator === null || navigator === void 0 ? void 0 : navigator.credentials)) {\n logger.warn('CredentialsContainer not available in this browser.');\n return false;\n }\n if (!('PasswordCredential' in window)) {\n logger.warn('PasswordCredential not available in this browser.');\n return false;\n }\n return true;\n}\n/**\n * The default separator used for splitting credential parts.\n * @public\n */\nexport const credentialSeparator = ':';\nfunction extractParts(input = '', separator = credentialSeparator, limit) {\n return input\n .split(separator, limit)\n .map((opt) => opt.trim())\n .filter((opt) => opt !== '');\n}\nfunction includesSeparator(input, separator = credentialSeparator) {\n const value = typeof input == 'string' && input.trim();\n return !!value && value.includes(separator);\n}\nfunction countSeparators(input, separator = credentialSeparator) {\n const value = typeof input == 'string' && input.trim();\n return !!value ? (input.match(new RegExp(separator, 'g')) || []).length : 0;\n}\nfunction prioritizeSeparatorInputs(inputs, separator = credentialSeparator) {\n for (const input of inputs) {\n if (includesSeparator(input, separator)) {\n return input;\n }\n }\n return inputs.find((input) => typeof input == 'string' && !!input.trim());\n}\nfunction createId(input, name, organisation) {\n const value = typeof input == 'string' && input.trim();\n if (!value || (organisation && !value.includes(organisation)) || countSeparators(value) > 1) {\n if (organisation && name && organisation !== name) {\n return `${name}:${organisation}`;\n }\n else {\n return name || organisation;\n }\n }\n return value;\n}\nfunction migrationFailedLogger(subtext = 'credential') {\n logger.warn(`Unable to migrate legacy ${subtext} to latest format. Please remove from your browser.`);\n}\n/**\n * The default request options for the CredentialManager service.\n * @public\n */\nexport const defaultCredentialRequestOptions = {\n password: true,\n mediation: 'optional', // < There are a couple of options depending on the level of user input we need\n};\n/**\n * The default configuration for the CredentialManager service.\n * @public\n */\nexport const defaultCredentialManagerConfig = {\n cookie: {\n /**\n * Path was location.pathname, however it looks like axes is the only project using it, and they set it to '/'.\n * Making '/' the default. If callers want to change it they can.\n */\n path: '/',\n name: 'credentials',\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n expires: 20 * 365,\n storePasswords: false,\n },\n};\n/**\n * The default implementation for the CredentialManager interface.\n * @public\n */\nlet DefaultCredentialManager = class DefaultCredentialManager {\n constructor(session, config = defaultCredentialManagerConfig) {\n this.session = session;\n this.config = config;\n }\n createBasicCredentials(inputs) {\n return {\n type: AuthType.BASIC,\n username: inputs.username,\n password: inputs.password,\n mfaToken: this.getMFAToken(),\n };\n }\n createRefreshCredentials(inputs) {\n var _a, _b, _c;\n return {\n type: AuthType.REFRESH,\n username: (_a = inputs === null || inputs === void 0 ? void 0 : inputs.username) !== null && _a !== void 0 ? _a : this.getUsername(),\n refreshToken: (_b = inputs === null || inputs === void 0 ? void 0 : inputs.refreshToken) !== null && _b !== void 0 ? _b : this.getRefreshToken(),\n mfaToken: (_c = inputs === null || inputs === void 0 ? void 0 : inputs.mfaToken) !== null && _c !== void 0 ? _c : this.getMFAToken(),\n };\n }\n createSSOCredentials(inputs) {\n var _a;\n return {\n type: AuthType.SSO,\n ssoToken: (_a = inputs === null || inputs === void 0 ? void 0 : inputs.ssoToken) !== null && _a !== void 0 ? _a : this.getSSOToken(),\n };\n }\n validateBasicCredentials(credentials) {\n return credentials && !!credentials.username && !!credentials.password;\n }\n validateRefreshCredentials(credentials) {\n return credentials && !!credentials.refreshToken && !!credentials.username;\n }\n validateSSOCredentials(credentials) {\n return credentials && !!credentials.ssoToken;\n }\n validateUserCredentialData(data, ensurePassword) {\n const baseResult = data &&\n !!data.id &&\n !!data.name &&\n !data.name.includes(credentialSeparator) &&\n countSeparators(data.id) <= 1;\n return ensurePassword ? baseResult && !!data.password : baseResult;\n }\n normaliseLegacyCredentialData(data, cookie) {\n const validContainerData = this.validateUserCredentialData(data, true);\n if (validContainerData) {\n return [data, true];\n }\n const validCookieData = this.validateUserCredentialData(cookie);\n if (validCookieData) {\n return [cookie, false];\n }\n /**\n * Attempt to migrate legacy PasswordCredentials\n */\n if (data) {\n try {\n const legacyData = data;\n const [name] = extractParts(legacyData.name || legacyData.id);\n const [_, organisation] = extractParts(prioritizeSeparatorInputs([legacyData.id, legacyData.name]));\n const id = createId(legacyData.id || legacyData.name, name, organisation);\n return [\n {\n id,\n name,\n password: legacyData.password || '',\n },\n true,\n ];\n }\n catch (err) {\n migrationFailedLogger('PasswordCredential');\n }\n }\n /**\n * Attempt to migrate legacy cookies\n */\n if (cookie) {\n try {\n const legacyCookie = cookie;\n const [name] = extractParts(legacyCookie.name || legacyCookie.username || legacyCookie.organisation);\n const [_, organisation] = extractParts(prioritizeSeparatorInputs([\n legacyCookie.organisation || legacyCookie.username || legacyCookie.name,\n ]));\n const id = createId(legacyCookie.id || legacyCookie.username || legacyCookie.name, name, organisation);\n return [\n {\n id,\n name,\n password: legacyCookie.password || '',\n },\n false,\n ];\n }\n catch (err) {\n migrationFailedLogger('cookie');\n }\n }\n return [undefined, false];\n }\n storeCredentialsInContainer(data) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!supportsCredentialsContainer()) {\n return;\n }\n const credentials = new PasswordCredential(data);\n logger.debug('Storing credentials in CredentialsContainer');\n return navigator.credentials.store(credentials);\n });\n }\n getCredentialsFromContainer() {\n return __awaiter(this, arguments, void 0, function* (options = defaultCredentialRequestOptions) {\n if (!supportsCredentialsContainer()) {\n return;\n }\n logger.debug('Getting credentials from CredentialsContainer');\n return (yield navigator.credentials.get(options));\n });\n }\n storeCredentialsInCookie(data) {\n const { password } = data, rest = __rest(data, [\"password\"]);\n const credentials = this.config.cookie.storePasswords ? data : rest;\n logger.debug('Storing credentials in cookie');\n return !!jsCookie.set(this.config.cookie.name, JSON.stringify(credentials), {\n expires: this.config.cookie.expires,\n domain: location.hostname,\n path: this.config.cookie.path,\n secure: true,\n });\n }\n getCredentialsFromCookie() {\n logger.debug('Getting credentials from cookie');\n const cookie = jsCookie.get(this.config.cookie.name);\n return cookie ? JSON.parse(cookie) : undefined;\n }\n storeCredentials(data) {\n return __awaiter(this, void 0, void 0, function* () {\n if (supportsCredentialsContainer()) {\n const credential = yield this.storeCredentialsInContainer(data);\n return Promise.resolve(!!credential);\n }\n return Promise.resolve(this.storeCredentialsInCookie(data));\n });\n }\n getCredentials(options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (supportsCredentialsContainer()) {\n return this.getCredentialsFromContainer(options);\n }\n return Promise.resolve(this.getCredentialsFromCookie());\n });\n }\n getSSOToken() {\n return this.session.getSessionStorageItem('ssoToken');\n }\n getUsername() {\n // MFA flow requires to get username from local storage, so it works when opened in a new tab from a link\n return (this.session.getSessionStorageItem('username') || this.session.getLocalStorageItem('username'));\n }\n getRefreshToken() {\n // MFA flow requires to get refresh from local storage, so it works when opened in a new tab from a link\n return (this.session.getSessionStorageItem('refreshToken') ||\n this.session.getLocalStorageItem('refreshToken'));\n }\n getMFAToken() {\n return this.session.getSessionStorageItem('mfaToken');\n }\n removeCookie() {\n jsCookie.remove(this.config.cookie.name, {\n domain: location.hostname,\n path: this.config.cookie.path,\n });\n }\n removeSSOToken() {\n this.session.removeSessionStorageItem('ssoToken');\n }\n removeUsername() {\n this.session.removeSessionStorageItem('username');\n this.session.removeLocalStorageItem('username');\n }\n removeRefreshToken() {\n this.session.removeSessionStorageItem('refreshToken');\n this.session.removeLocalStorageItem('refreshToken');\n }\n removeMFAToken() {\n this.session.removeSessionStorageItem('mfaToken');\n }\n removeAll() {\n this.removeCookie();\n this.removeSSOToken();\n this.removeUsername();\n this.removeRefreshToken();\n this.removeMFAToken();\n }\n preventSilentAccess() {\n return supportsCredentialsContainer() && navigator.credentials.preventSilentAccess();\n }\n};\nDefaultCredentialManager = __decorate([\n __param(0, Session),\n __param(1, optional(CredentialManagerConfig))\n], DefaultCredentialManager);\nexport { DefaultCredentialManager };\n/**\n * The DI token for the CredentialManager interface.\n * @internal\n */\nexport const CredentialManager = DI.createInterface((x) => x.singleton(DefaultCredentialManager));\n","import { logger } from '../utils';\n/**\n * This mapper file is temporary and will be removed in v15 as this is owned by foundation-auth.\n * It is loose on typing due to this.\n */\nconst fromSystemDTO = (system) => (system ? { date: system.DATE } : null);\nconst fromProductDTO = (products) => products\n ? products.map((p) => ({\n name: p.NAME,\n version: p.VERSION,\n }))\n : [];\nconst fromDTOStringArray = (arr) => Array.isArray(arr) ? arr.map((v) => v !== null && v !== void 0 ? v : '') : [];\nexport const loginDTOMapper = (dto) => {\n try {\n if ((dto === null || dto === void 0 ? void 0 : dto.MESSAGE_TYPE) === 'EVENT_LOGIN_AUTH_ACK') {\n const { DETAILS } = dto;\n const ack = {\n messageType: dto.MESSAGE_TYPE,\n sourceRef: dto.SOURCE_REF,\n userName: dto.USER_NAME,\n updateQueue: dto.UPDATE_QUEUE,\n zeroMqProxyModeEnabled: dto.ZERO_MQ_PROXY_MODE_ENABLED,\n zeroMqProxyInboundPort: dto.ZERO_MQ_PROXY_INBOUND_PORT,\n zeroMqProxyOutboundPort: dto.ZERO_MQ_PROXY_OUTBOUND_PORT,\n userKVs: dto.USER,\n details: DETAILS\n ? {\n system: fromSystemDTO(DETAILS.SYSTEM),\n heartbeatIntervalSecs: DETAILS.HEARTBEAT_INTERVAL_SECS,\n failedLoginAttempts: DETAILS.FAILED_LOGIN_ATTEMPTS,\n rejectedLoginAttempts: DETAILS.REJECTED_LOGIN_ATTEMPTS,\n lastLoginDatetime: DETAILS.LAST_LOGIN_DATETIME,\n daysToPasswordExpiry: DETAILS.DAYS_TO_PASSWORD_EXPIRY,\n product: fromProductDTO(DETAILS.PRODUCT),\n }\n : null,\n permission: fromDTOStringArray(dto.PERMISSION),\n profile: fromDTOStringArray(dto.PROFILE),\n };\n return ack;\n }\n throw new Error('No Entity mapping implementation for provided DTO');\n }\n catch (e) {\n logger.error(e);\n throw e;\n }\n};\n","import { __awaiter, __decorate, __param } from \"tslib\";\nimport { User } from '@genesislcap/foundation-user';\nimport { observable } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\nimport { BehaviorSubject } from 'rxjs';\nimport { Connect } from '../connect';\nimport { EventMessageType, MessageBuilder, MessageCode, MessageType, } from '../connect/message';\nimport { CredentialManager } from '../credentialManager';\nimport { Session } from '../session';\nimport { logger } from '../utils';\nimport { AuthError } from './auth.types';\nimport { loginDTOMapper } from './loginDTOMapper';\n/**\n * The default implementation for the Auth interface.\n * @public\n */\nlet DefaultAuth = class DefaultAuth {\n loggedUserResultChanged() {\n var _a;\n (_a = this.isLoggedInSubject) === null || _a === void 0 ? void 0 : _a.next(this.isLoggedIn);\n }\n get isLoggedIn$() {\n return this.isLoggedInSubject.asObservable();\n }\n get isLoggedIn() {\n return this.currentUser.isAuthenticated;\n }\n constructor(session, connect, messageBuilder, credentialManager, currentUser) {\n this.session = session;\n this.connect = connect;\n this.messageBuilder = messageBuilder;\n this.credentialManager = credentialManager;\n this.currentUser = currentUser;\n this.isWorking = false;\n this.isLoggedInSubject = new BehaviorSubject(this.isLoggedIn);\n this.currentUser.addAuthenticationChangeListener((event) => {\n var _a;\n (_a = this.isLoggedInSubject) === null || _a === void 0 ? void 0 : _a.next(event.detail);\n });\n }\n login(credentials) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.isWorking = true;\n try {\n const loginMessage = this.messageBuilder.createLoginMessage(credentials);\n const authResult = yield this.connect.send(loginMessage);\n if (!authResult || authResult.ERROR || ((_a = authResult.DETAILS) === null || _a === void 0 ? void 0 : _a.ERROR)) {\n throw new AuthError(loginMessage, authResult);\n }\n this.applyAuthResults({\n authToken: authResult.SESSION_AUTH_TOKEN,\n refreshToken: authResult.REFRESH_AUTH_TOKEN,\n profiles: authResult.PROFILE,\n username: authResult.USER_NAME,\n permissions: authResult.PERMISSION,\n sessionId: authResult.SESSION_ID,\n });\n this.currentUser.set(loginDTOMapper(authResult));\n /**\n * Use the credentialManager as a proxy instead?\n */\n this.session.setAuthResult(authResult);\n logger.debug('Login Authentication Result:', authResult);\n }\n catch (err) {\n logger.error('Login Authentication Error:', err);\n if (err instanceof AuthError && err.isIgnorableError()) {\n logger.warn(`Ignoring authentication error as it is a known edge case.`);\n }\n else {\n // this.credentialManager.removeAll(); // < let caller manage for now, discuss later\n this.removeAuthResults();\n this.currentUser.unset();\n throw err;\n }\n }\n finally {\n this.isWorking = false;\n }\n return this.loggedUserResult;\n });\n }\n logout() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.isWorking = true;\n let logoutResult = {\n success: false,\n };\n try {\n const logoutMessage = this.messageBuilder.createLogoutMessage(this.loggedUserResult);\n // TODO: Improve auth scenario where server timeout has the same message return as logout\n this.session.deleteUserFromSessionStorage();\n const { CODE, DETAILS, ERROR, MESSAGE_TYPE, OIDC_LOGOUT_URL } = yield this.connect.send(logoutMessage);\n const error = (_a = DETAILS === null || DETAILS === void 0 ? void 0 : DETAILS.ERROR) !== null && _a !== void 0 ? _a : ERROR;\n /**\n * FUI-1109: The server is sending an unexpected logout nack which stops the user from being able to log out.\n */\n const unexpectedLogoutNack = MESSAGE_TYPE === MessageType.LOGOUT_NACK;\n if (unexpectedLogoutNack) {\n logger.warn('Unexpected Logout NACK received during logout.', error);\n }\n logoutResult = {\n success: MESSAGE_TYPE === MessageType.LOGOUT_ACK ||\n CODE === MessageCode.SESSION_NOT_FOUND ||\n !unexpectedLogoutNack,\n error,\n };\n // redirect to OIDC provider logout page if provided\n if (OIDC_LOGOUT_URL) {\n window.open(OIDC_LOGOUT_URL, '_self');\n }\n }\n catch (err) {\n const logoutError = new AuthError(err.sentMessage, err.receivedMessage);\n logger.error('Logout Authentication Error:', logoutError);\n if (logoutError.isIgnorableError()) {\n logger.warn(`Ignoring authentication error as it is a known edge case.`);\n logoutResult.success = true;\n }\n else {\n throw err;\n }\n }\n finally {\n this.removeAuthResults();\n this.currentUser.unset();\n this.isWorking = false;\n }\n return logoutResult;\n });\n }\n reAuthFromSession() {\n return __awaiter(this, void 0, void 0, function* () {\n const isConnected = yield this.ensureConnection();\n const refreshCredentials = this.credentialManager.createRefreshCredentials();\n if (isConnected && this.credentialManager.validateRefreshCredentials(refreshCredentials)) {\n const refreshTokenMessage = this.messageBuilder.createRefreshTokenMessage();\n const refreshTokenResult = yield this.connect.send(refreshTokenMessage);\n if ((refreshTokenResult === null || refreshTokenResult === void 0 ? void 0 : refreshTokenResult.MESSAGE_TYPE) === EventMessageType.EVENT_LOGIN_AUTH_ACK) {\n this.session.setAuthResult(refreshTokenResult);\n this.currentUser.set(loginDTOMapper(refreshTokenResult));\n this.applyAuthResults(this.getLoggedUserFromMessage(refreshTokenResult));\n return true;\n }\n }\n this.session.deleteUserFromSessionStorage();\n this.currentUser.unset();\n return false;\n });\n }\n /**\n * Ensures that the connection is active.\n * @internal\n */\n ensureConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.connect.isConnected) {\n return true;\n }\n const hostUrl = this.session.getSessionStorageItem('hostUrl');\n if (!hostUrl) {\n return false;\n }\n return this.connect.connect(hostUrl);\n });\n }\n /**\n * Gets the logged user from a Message result.\n * @param result - The Message result from auth request.\n * @returns The logged user info or null if the result is invalid.\n */\n getLoggedUserFromMessage(result) {\n const username = result.USER_NAME;\n const sessionAuthToken = result.SESSION_AUTH_TOKEN;\n const refreshAuthToken = result.REFRESH_AUTH_TOKEN;\n if (!username || !sessionAuthToken || !refreshAuthToken) {\n return null;\n }\n return {\n username,\n authToken: sessionAuthToken,\n refreshToken: refreshAuthToken,\n profiles: result.PROFILE,\n permissions: result.PERMISSION,\n sessionId: result.SESSION_ID,\n };\n }\n /**\n * Applies the authentication results to the Auth instance.\n * @internal\n */\n applyAuthResults(result) {\n if (!result) {\n this.removeAuthResults();\n return;\n }\n this.loggedUserResult = {\n authToken: result.authToken,\n refreshToken: result.refreshToken,\n profiles: result.profiles,\n username: result.username,\n permissions: result.permissions,\n sessionId: result.sessionId,\n };\n }\n /**\n * Removes the authentication results from the Auth instance.\n * @internal\n */\n removeAuthResults() {\n this.loggedUserResult = null;\n }\n};\n__decorate([\n observable\n], DefaultAuth.prototype, \"isWorking\", void 0);\n__decorate([\n observable\n], DefaultAuth.prototype, \"loggedUserResult\", void 0);\nDefaultAuth = __decorate([\n __param(0, Session),\n __param(1, Connect),\n __param(2, MessageBuilder),\n __param(3, CredentialManager),\n __param(4, User)\n], DefaultAuth);\nexport { DefaultAuth };\n/**\n * The DI token for the Auth interface.\n * @internal\n */\nexport const Auth = DI.createInterface((x) => x.singleton(DefaultAuth));\n","import { __decorate } from \"tslib\";\nimport { observable } from '@microsoft/fast-element';\nimport { logger } from '../utils';\nimport { DatasourceStatusChanged, } from './datasource.types';\n/**\n * Datasource event handler mixin for target classes that use or are interested in datasource status changes.\n *\n * @remarks\n * Classes that use the mixin are not required to own the datasource itself, there may be several interested parties.\n *\n * @example\n * ```ts\n * import { DatasourceEventHandler, DatasourceStatus } from '@genesislcap/foundation-comms';\n * ...\n * class MyComponent extends DatasourceEventHandler(FASTElement) {\n * resourceName: string = 'some-resource';\n * ...\n * datasourceStatusChanged(prev: DatasourceStatus, next: DatasourceStatus) {\n * // Respond to changes in the target datasource.\n * }\n * }\n * ```\n *\n * @privateRemarks\n * Unfortunately our datasource ui components do not share a common baseclass. Given datasource ui components contain a\n * Datasource and currently await their `init`, usage is more for example at this point, ie. how could we allow interested\n * parties to monitor and respond to changes, given they will exist at different levels of DOM hierarchy etc. Datasource\n * itself is also transient DI injectable, so each interested party would not have access to the same instance, nor would\n * we necessarily want to expose that via the event to prevent them operating on it to cause unwanted side effects.\n *\n * @param Target - The class to mix the event handler with.\n *\n * @public\n */\nexport const DatasourceEventHandler = (Target) => {\n // @ts-ignore\n class Mixin extends Target {\n constructor() {\n super();\n if (!this.hasOwnProperty('onDatasourceStatusChanged')) {\n this.onDatasourceStatusChanged = (event) => {\n var _a;\n if (!this.resourceName) {\n logger.warn(`Target classes must have a resourceName property to use the DatasourceEventHandler mixin.`);\n }\n const next = event.detail;\n if (next.name === this.resourceName) {\n const prev = (_a = this.datasourceStatus) !== null && _a !== void 0 ? _a : {\n isInitialized: false,\n hasMetadata: false,\n };\n const hasChanged = prev.isInitialized !== next.isInitialized ||\n (next.metadataRequired && prev.hasMetadata !== next.hasMetadata);\n if (hasChanged) {\n this.datasourceStatus = next;\n }\n }\n };\n }\n }\n /**\n * @remarks\n * Override this method to respond to changes in the target datasource.\n */\n datasourceStatusChanged(prev, next) {\n logger.debug('Target classes should override the datasourceStatusChanged method of the DatasourceEventHandler mixin to respond to changes in the target datasource.');\n }\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener(DatasourceStatusChanged, this.onDatasourceStatusChanged, {\n passive: true,\n capture: true,\n });\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener(DatasourceStatusChanged, this.onDatasourceStatusChanged, {\n capture: true,\n });\n }\n }\n __decorate([\n observable\n ], Mixin.prototype, \"datasourceStatus\", void 0);\n return Mixin;\n};\n","import { HTMLBindingDirective, } from '@microsoft/fast-element';\n/**\n * A map that associates specific HTML element tags with their corresponding default event names.\n * @public\n */\nexport const defaultEventMap = new Map([\n ['FAST-TEXT-AREA', 'input'],\n ['FAST-TEXT-FIELD', 'input'],\n ['FOUNDATION-TEXT-AREA', 'input'],\n ['FOUNDATION-TEXT-FIELD', 'input'],\n ['INPUT', 'input'],\n ['ZERO-TEXT-FIELD', 'input'],\n]);\nfunction customUpdateTarget(value) {\n if (this['keyAttr']) {\n // FUI-389: set initial state based on keyAttr\n }\n else {\n this.target[this.targetName] = value;\n }\n}\nfunction bind(source, context) {\n if (this['keyAttr']) {\n // overwrite internal update method called by originalBind\n this.updateTarget = customUpdateTarget;\n }\n this.originalBind.call(this, source, context);\n this.target.addEventListener(this.changeEvent, this.changeHandler);\n}\nfunction unbind() {\n this.originalUnbind.call(this);\n this.target.removeEventListener(this.changeEvent, this.changeHandler);\n}\nfunction determineChangeEvent(target, eventName) {\n var _a;\n const tag = target.tagName;\n if (eventName === 'default') {\n return (_a = defaultEventMap.get(tag)) !== null && _a !== void 0 ? _a : 'change';\n }\n return eventName;\n}\nclass SyncDirective extends HTMLBindingDirective {\n constructor(binding, convert, eventName, keyAttr) {\n super(binding);\n this.keyAttr = keyAttr;\n this.conversionType = convert;\n this.eventName = eventName;\n }\n createBehavior(target) {\n const behavior = super.createBehavior(target);\n behavior.originalBind = behavior.bind;\n behavior.originalUnbind = behavior.unbind;\n behavior.keyAttr = this.keyAttr;\n behavior.bind = bind;\n behavior.unbind = unbind;\n behavior.changeEvent = determineChangeEvent(target, this.eventName);\n behavior.changeHandler = () => {\n // for checkbox, which is currently the only component converting to boolean, will have to change if boolean conversion is used anywhere else\n const value = this.conversionType === 'boolean' ? behavior.target.checked : behavior.target.value;\n if (this.keyAttr) {\n const last = behavior.bindingObserver.last;\n const key = behavior.target[this.keyAttr];\n last.propertySource[last.propertyName][key] = this.convert(value);\n }\n else {\n // Wait for an official setValue API\n const last = behavior.bindingObserver.last;\n last.propertySource[last.propertyName] = this.convert(value);\n }\n };\n return behavior;\n }\n convert(value) {\n if (value === undefined || value === null)\n return value;\n switch (this.conversionType) {\n case 'time':\n const msSinceEpoch = new Date(value).getTime();\n return isNaN(msSinceEpoch) ? undefined : msSinceEpoch;\n case 'number':\n return value.length ? Number(value) : undefined; // Number('') returns 0\n case 'string':\n return String(value);\n case 'boolean':\n return Boolean(value);\n default:\n return value;\n }\n }\n}\n/**\n * Creates a synchronization directive that binds a data source to an HTML element,\n * @public\n */\nexport function sync(binding, conversionType = 'string', eventName = 'default', keyAttr) {\n return new SyncDirective(binding, conversionType, eventName, keyAttr);\n}\n","/**\n * Available types for a field metadata.\n * @public\n */\nexport var FieldTypeEnum;\n(function (FieldTypeEnum) {\n FieldTypeEnum[\"STRING\"] = \"STRING\";\n FieldTypeEnum[\"NUMBER\"] = \"NUMBER\";\n FieldTypeEnum[\"BOOLEAN\"] = \"BOOLEAN\";\n FieldTypeEnum[\"ENUM\"] = \"ENUM\";\n FieldTypeEnum[\"DATE\"] = \"DATE\";\n FieldTypeEnum[\"DATETIME\"] = \"DATETIME\";\n FieldTypeEnum[\"CUSTOM\"] = \"CUSTOM\";\n FieldTypeEnum[\"NANO_TIMESTAMP\"] = \"NANO_TIMESTAMP\";\n})(FieldTypeEnum || (FieldTypeEnum = {}));\n/**\n * Types map for FieldTypeEnum.\n * @public\n */\nexport const TYPES_MAP = {\n STRING: FieldTypeEnum.STRING,\n ENUM: FieldTypeEnum.ENUM,\n BOOLEAN: FieldTypeEnum.BOOLEAN,\n INT: FieldTypeEnum.NUMBER,\n LONG: FieldTypeEnum.NUMBER,\n DOUBLE: FieldTypeEnum.NUMBER,\n BIGDECIMAL: FieldTypeEnum.NUMBER,\n DATE: FieldTypeEnum.DATE,\n DATETIME: FieldTypeEnum.DATETIME,\n NANO_TIMESTAMP: FieldTypeEnum.NANO_TIMESTAMP,\n};\n","import { Observable } from 'rxjs';\nconst DEFAULT_RECONNECT_INTERVAL = 10000;\nconst MAX_RECONNECT_INTERVAL = 60000;\n/**\n * Default number of reconnect attempts\n * @public\n */\nexport const MAX_RECONNECT_ATTEMPTS = 10;\n/**\n * Socket reconnection strategies\n * @public\n */\nexport var SocketReconnectStrategy;\n(function (SocketReconnectStrategy) {\n SocketReconnectStrategy[\"Linear\"] = \"linear\";\n SocketReconnectStrategy[\"Exponential\"] = \"exponential\";\n})(SocketReconnectStrategy || (SocketReconnectStrategy = {}));\n/**\n * Generate reconnect interval based on scheduler\n * @public\n * @param reconnectOptions - {@link SocketReconnectOptions} options\n * @param scheduler - {@link SocketReconnectScheduler} function\n * @returns Observable<number>\n */\nexport const retryInterval = (reconnectOptions, scheduler) => {\n return new Observable((observer) => {\n let count = 0;\n let timeoutId;\n function recursiveTimeout() {\n observer.next(count);\n clearTimeout(timeoutId);\n timeoutId = setTimeout(recursiveTimeout, scheduler(reconnectOptions, count));\n count = count + 1;\n }\n recursiveTimeout();\n return () => {\n clearTimeout(timeoutId);\n };\n });\n};\n/**\n * Expontential Interval scheduler for reconnect\n * @public\n * @param reconnectOptions - {@link SocketReconnectOptions} options\n * @param attempt - number of attempts\n * @returns number of milliseconds that is a power of 2 ^ attempts * baseInterval\n */\nexport const exponentialScheduler = (reconnectOptions, attempts) => {\n const { reconnectInterval = DEFAULT_RECONNECT_INTERVAL } = reconnectOptions;\n const baseInterval = reconnectInterval > MAX_RECONNECT_INTERVAL ? MAX_RECONNECT_INTERVAL : reconnectInterval;\n const attemptsBreakPoint = Math.round(Math.log2(MAX_RECONNECT_INTERVAL / baseInterval));\n return baseInterval * Math.pow(2, (attempts % attemptsBreakPoint));\n};\n/**\n * Linear Interval scheduler for reconnect\n * @public\n * @param reconnectOptions - {@link SocketReconnectOptions} options\n * @returns number of milliseconds specified in reconnectOptions up to @see MAX_RECONNECT_INTERVAL\n */\nexport const linearScheduler = (reconnectOptions) => {\n const { reconnectInterval = DEFAULT_RECONNECT_INTERVAL } = reconnectOptions;\n const baseInterval = reconnectInterval > MAX_RECONNECT_INTERVAL ? MAX_RECONNECT_INTERVAL : reconnectInterval;\n return baseInterval;\n};\n","export class Ticker {\n constructor(interval) {\n this.interval = interval;\n }\n get workerScript() {\n return `\n const startTime = Date.now();\n setInterval(function() {\n self.postMessage(Date.now() - startTime);\n }, ${this.interval});\n `;\n }\n start(tick) {\n this.stop();\n this.runWorker(tick);\n }\n stop() {\n if (this.worker) {\n this.worker.terminate();\n delete this.worker;\n }\n }\n runWorker(tick) {\n if (!this.worker) {\n this.worker = new Worker(URL.createObjectURL(new Blob([this.workerScript], { type: 'text/javascript' })));\n this.worker.onmessage = (message) => tick(message.data);\n }\n }\n}\n","import { __awaiter, __decorate, __param } from \"tslib\";\nimport { User } from '@genesislcap/foundation-user';\nimport { GENESIS_SOCKET_URL, JSONSerializer, UUID } from '@genesislcap/foundation-utils';\nimport { DOM, observable } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\nimport { Observable, of, Subject, Subscription, takeUntil, throwError } from 'rxjs';\nimport { filter, mergeMap, switchMap, takeWhile } from 'rxjs/operators';\nimport { WebSocketSubject } from 'rxjs/webSocket';\nimport { Session } from '../session';\nimport { logger } from '../utils';\nimport { ConnectConfig } from './connect.types';\nimport { Http } from './http';\nimport { EventMessageType, MessageBuilder, MessageType, } from './message';\nimport { exponentialScheduler, linearScheduler, MAX_RECONNECT_ATTEMPTS, retryInterval, SocketReconnectStrategy, } from './reconnectStrategy';\nimport { onOtherTabReauthComplete, SessionRefreshResult, tryRefreshSession, } from './sessionRefresh';\nimport { SocketStatus } from './socket.status';\nimport { Ticker } from './ticker';\n/**\n * Subject that wraps a WebSocketSubject and provides a Subject interface for sending and receiving messages.\n * @public\n * @remarks An alias to RxJS Subject.\n */\nexport class SocketSubject extends Subject {\n constructor() {\n super();\n }\n}\n/**\n * Observable that wraps a WebSocketSubject and provides an Observable interface for sending and receiving messages.\n * @public\n * @remarks An alias to RxJS Observable.\n */\nexport class SocketObservable extends Observable {\n constructor(...args) {\n super(...args);\n }\n}\n/**\n * An alias to RxJS Subscription.\n * @public\n */\nexport { Subscription as SocketSubscription };\n/**\n * The Socket message handler definition.\n * @public\n */\nexport class SocketMessageHandler {\n constructor(message, onMessage, onError, isSubscription) {\n this._message = message;\n this._onMessage = onMessage;\n this._onError = onError;\n this._isSubscription = isSubscription;\n }\n /**\n * The message that was sent.\n * @public\n */\n get sentMessage() {\n return this._message;\n }\n /**\n * The handler function for incoming messages.\n * @public\n */\n get onReceivedMessage() {\n return this._onMessage;\n }\n /**\n * The handler function for errors.\n * @public\n */\n get onReceivedError() {\n return this._onError;\n }\n /**\n * Whether the message handler is a subscription.\n * @public\n */\n get isSubscription() {\n return this._isSubscription;\n }\n}\n/**\n * Default Socket implementation.\n * @public\n */\nlet DefaultSocket = class DefaultSocket {\n get isConfigured() {\n return this.status.isConfigured;\n }\n get isConnecting() {\n return this.status.isConnecting;\n }\n get isConnected() {\n return this.status.isConnected;\n }\n get isConnectedSubject() {\n return this.status.isConnectedSubject;\n }\n get isDisconnected() {\n return this.status.isDisconnected;\n }\n get isDisconnectedByServer() {\n return this.status.isDisconnectedByServer;\n }\n get isReconnecting() {\n return this.status.isReconnecting;\n }\n /**\n * @deprecated - Use `User.isAuthenticated` from `@genesislcap/foundation-user` instead.\n */\n get hasValidSession() {\n logger.deprecated('get hasValidSession', 'Use `User.isAuthenticated` from `@genesislcap/foundation-user` instead.', '15.0.0');\n return this.user.isAuthenticated;\n }\n set hasValidSession(value) {\n logger.deprecated('set hasValidSession', 'Please refrain from calling this API as this state is managed internally.', '15.0.0');\n }\n get host() {\n var _a;\n return (_a = this.url) !== null && _a !== void 0 ? _a : GENESIS_SOCKET_URL;\n }\n constructor(messageBuilder, session, serializer, uuid, status, user, config) {\n this.messageBuilder = messageBuilder;\n this.session = session;\n this.serializer = serializer;\n this.uuid = uuid;\n this.status = status;\n this.user = user;\n this.config = config;\n this.defaultInterval = 10000;\n this.secondsMultiplier = 1000;\n this.heartbeatIsEnabled = true;\n this.heartbeatInterval = this.defaultInterval;\n this.socketMessages = () => this.wsMessages;\n }\n get heartbeatLoggingIsEnabled() {\n var _a, _b;\n return (_b = (_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.enableHeartbeatLogging) !== null && _b !== void 0 ? _b : false;\n }\n get messageLoggingIsEnabled() {\n var _a, _b;\n return (_b = (_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.enableMessageLogging) !== null && _b !== void 0 ? _b : false;\n }\n connect(host = GENESIS_SOCKET_URL, connectOptions, reconnectOptions) {\n var _a;\n this.url = host;\n this.connectOptions = connectOptions !== null && connectOptions !== void 0 ? connectOptions : this.config.connect;\n this.reconnectOptions = reconnectOptions !== null && reconnectOptions !== void 0 ? reconnectOptions : this.config.reconnect;\n if (!((_a = this.config.isWebSocketExpression) === null || _a === void 0 ? void 0 : _a.test(this.host))) {\n logger.error(`Specified host (${this.host}) is not valid WebSocket url. Connection will not proceed.`);\n logger.warn(`Make sure the host url starts with wss:// or ws://`);\n return;\n }\n return new Promise((resolve) => {\n var _a, _b, _c, _d;\n logger.info(`${this.isReconnecting ? 'Reconnecting' : 'Connecting'} to ${this.url}`);\n this.status.isConnecting = !this.isReconnecting;\n const cleanMessages = !this.isReconnecting || !((_a = this.reconnectOptions) === null || _a === void 0 ? void 0 : _a.reconnectStreams);\n if (cleanMessages) {\n this.cleanMessages();\n }\n (_b = this.socketSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();\n this.websocket = new WebSocketSubject({\n url: this.url,\n openObserver: {\n next: () => {\n this.session.setSessionStorageItem('hostUrl', this.url);\n this.status.isConnected = true;\n this.prepareHeartbeat();\n logger.info(`WebSocket connection is now open`);\n resolve(this.isConnected);\n },\n },\n closeObserver: {\n next: (closeEvent) => {\n this.status.onClose(closeEvent);\n if (this.isDisconnectedByServer) {\n logger.info(`WebSocket connection was closed due an error - Code: ${closeEvent.code} ${closeEvent.reason ? ' | Reason: ' + closeEvent.reason : ''}`);\n }\n resolve(this.isConnected);\n },\n },\n serializer: (object) => this.serializer.serialize(object),\n deserializer: (event) => this.serializer.deserialize(event),\n });\n const onNextMessage = (receivedMessage) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n const responseMessageReceivedLog = `Response Message received for SourceRef: ${receivedMessage.SOURCE_REF} | MessageType: ${receivedMessage.MESSAGE_TYPE}`;\n this.logMessageTypeFlow(receivedMessage.MESSAGE_TYPE, logger.info, responseMessageReceivedLog);\n const { SOURCE_REF, MESSAGE_TYPE } = receivedMessage;\n const messageHandler = this.getMessageHandler(SOURCE_REF, MESSAGE_TYPE);\n if (!messageHandler) {\n if (receivedMessage.MESSAGE_TYPE === MessageType.MSG_NACK && receivedMessage.ERROR) {\n receivedMessage.ERROR.forEach((error) => {\n logger.error(`MessageType: ${receivedMessage.MESSAGE_TYPE} | Error Details:`, error);\n });\n }\n return;\n }\n let nacked = false;\n switch (receivedMessage.MESSAGE_TYPE) {\n case EventMessageType.EVENT_LOGIN_AUTH_ACK: {\n const systemDetails = receivedMessage.DETAILS;\n // Reconfigures the heartbeat with system details from the login response\n if (systemDetails.HEARTBEAT_INTERVAL_SECS &&\n ((_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.heartbeatInterval) === undefined) {\n this.heartbeatInterval =\n systemDetails.HEARTBEAT_INTERVAL_SECS * this.secondsMultiplier;\n this.prepareHeartbeat();\n }\n break;\n }\n case MessageType.LOGOUT_ACK: {\n messageHandler.onReceivedMessage.call(this, receivedMessage);\n this.cleanMessages();\n return;\n }\n case MessageType.LOGON_ACK:\n return;\n case MessageType.LOGOFF_ACK: {\n break;\n }\n case MessageType.QUERY_UPDATE: {\n if (!messageHandler.isSubscription) {\n this.sendDataLogoff(SOURCE_REF);\n }\n break;\n }\n case MessageType.MSG_NACK:\n case MessageType.LOGON_NACK: {\n nacked = true;\n break;\n }\n }\n if (nacked) {\n messageHandler.onReceivedError.call(this, {\n receivedMessage,\n sentMessage: messageHandler.sentMessage,\n });\n }\n else {\n messageHandler.onReceivedMessage.call(this, receivedMessage);\n }\n this.wsMessages.next(receivedMessage);\n if (!messageHandler.isSubscription) {\n this.removeMessageHandler(SOURCE_REF);\n }\n });\n const onError = (error) => {\n logger.debug('Error found: ', error);\n this.reconnect();\n };\n const onComplete = () => {\n var _a;\n if (this.isDisconnectedByServer && ((_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.alwaysOn)) {\n this.reconnect();\n return;\n }\n logger.info('Connection is now closed');\n };\n this.socketSubscription = this.websocket.subscribe((_d = (_c = this.connectOptions) === null || _c === void 0 ? void 0 : _c.connectObserver) !== null && _d !== void 0 ? _d : {\n next: onNextMessage,\n error: onError,\n complete: onComplete,\n });\n this.status.isConfigured = true;\n });\n }\n /**\n *\n * @remarks\n * This is triggered after `sessionTimeoutMins` elapses and heartbeat would tell us that user is no longer authenticated\n * more info here https://docs.genesis.global/docs/develop/server-capabilities/access-control/authentication/#sessiontimeoutmins\n */\n handleExpiredSession() {\n return __awaiter(this, void 0, void 0, function* () {\n // to detect which auth method is used we check if refreshToken is present in session storage\n // it would not be available in cookies method as it's securely stored within cookie\n // and not accessible from the client\n if (this.session.getSessionStorageItem('refreshToken')) {\n const refreshTokenMessage = this.messageBuilder.createRefreshTokenMessage();\n const refreshTokenResult = yield this.send(refreshTokenMessage);\n this.session.setAuthResult(refreshTokenResult);\n this.updateSessionAndSubscriptions(refreshTokenResult);\n }\n else {\n yield this.handleCookieBasedReauth();\n }\n });\n }\n handleCookieBasedReauth() {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield tryRefreshSession();\n if (result === SessionRefreshResult.HANDLED_BY_OTHER_TAB) {\n // Session is already being reauthenticated on another tab, wait for it to finish\n onOtherTabReauthComplete(() => this.connect());\n return;\n }\n if (result !== SessionRefreshResult.FAILED) {\n // Connect again to use new session token from obtained cookie\n yield this.connect();\n }\n });\n }\n updateSessionAndSubscriptions(refreshTokenResult) {\n if ((refreshTokenResult === null || refreshTokenResult === void 0 ? void 0 : refreshTokenResult.MESSAGE_TYPE) === EventMessageType.EVENT_LOGIN_AUTH_ACK) {\n this.wsMessageHandlers.forEach((mh) => {\n if (mh.isSubscription) {\n mh.sentMessage.SESSION_AUTH_TOKEN = refreshTokenResult.SESSION_AUTH_TOKEN;\n this.websocket.next(mh.sentMessage);\n }\n });\n }\n }\n prepareHeartbeat() {\n var _a, _b, _c, _d;\n if (this.heartbeatTicker) {\n this.heartbeatTicker.stop();\n }\n const sendHeartbeat = () => __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c;\n if (!this.isConnected)\n return;\n const ping = this.messageBuilder.createHeartbeatPingMessage((_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.verboseHeartbeat);\n if ((_b = this.connectOptions) === null || _b === void 0 ? void 0 : _b.heartbeatPingCallback) {\n this.connectOptions.heartbeatPingCallback(ping);\n }\n const pong = yield this.send(ping);\n // when heartbeat runs before user logs in (connected to websocket but\n // not authenticated) we don't extend session as it doesn't exist yet\n if (this.user.isAuthenticated && !pong.IS_AUTHENTICATED) {\n this.handleExpiredSession();\n }\n if ((_c = this.connectOptions) === null || _c === void 0 ? void 0 : _c.heartbeatPongCallback) {\n this.connectOptions.heartbeatPongCallback(pong);\n }\n this.heartbeatIsEnabled =\n pong.MESSAGE_TYPE === MessageType.HEARTBEAT_PONG && pong.SOURCE_REF === ping.SOURCE_REF;\n });\n if ((_b = (_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.enableHeartbeat) !== null && _b !== void 0 ? _b : this.heartbeatIsEnabled) {\n const intervalInMillisecocnds = (_d = (_c = this.connectOptions) === null || _c === void 0 ? void 0 : _c.heartbeatInterval) !== null && _d !== void 0 ? _d : this.heartbeatInterval;\n this.heartbeatTicker = new Ticker(intervalInMillisecocnds);\n this.heartbeatTicker.start(() => {\n if (this.websocket && this.isConnected) {\n sendHeartbeat();\n if (this.heartbeatLoggingIsEnabled) {\n logger.debug(`Sending a heartbeat ping every ${intervalInMillisecocnds} ms`);\n }\n }\n });\n }\n }\n reconnect() {\n var _a, _b, _c, _d, _e;\n const notAlwaysOnAndHeartbeating = !((_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.alwaysOn) && ((_b = this.connectOptions) === null || _b === void 0 ? void 0 : _b.enableHeartbeat) === false;\n if (this.isReconnecting || notAlwaysOnAndHeartbeating) {\n return;\n }\n this.status.isReconnecting = true;\n const scheduler = ((_c = this.reconnectOptions) === null || _c === void 0 ? void 0 : _c.reconnectStrategy) === SocketReconnectStrategy.Exponential\n ? exponentialScheduler\n : linearScheduler;\n const reconnectObservable = this.isConnectedSubject.asObservable().pipe(switchMap((isConnected) => !isConnected\n ? retryInterval(this.reconnectOptions, scheduler).pipe(mergeMap((value) => {\n var _a, _b, _c;\n let attemptsAmount;\n if ((_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.alwaysOn) {\n attemptsAmount = value + 1;\n }\n else {\n attemptsAmount =\n (_c = (_b = this.reconnectOptions) === null || _b === void 0 ? void 0 : _b.reconnectAttempts) !== null && _c !== void 0 ? _c : MAX_RECONNECT_ATTEMPTS;\n }\n if (value < attemptsAmount) {\n return of(value);\n }\n this.status.reconnectionLimitReached = true;\n return throwError(() => new Error(`Max reconnect attempts ${attemptsAmount} reached.`));\n }))\n : of(-1)), takeWhile(() => this.websocket && !this.isConnected));\n reconnectObservable.subscribe((_e = (_d = this.reconnectOptions) === null || _d === void 0 ? void 0 : _d.reconnectObserver) !== null && _e !== void 0 ? _e : {\n next: (value) => {\n logger.debug(`Attempt no. ${value + 1} to reconnect`);\n this.websocket.complete();\n this.connect(this.url, this.connectOptions, this.reconnectOptions);\n },\n error: (error) => {\n var _a;\n logger.debug(error);\n (_a = this.socketSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.status.isReconnecting = false;\n },\n complete: () => {\n logger.info(this.isConnected ? 'Reconnected' : 'Disconnected');\n this.status.isReconnecting = false;\n this.wsMessageHandlers.forEach((mh) => {\n if (mh.isSubscription) {\n this.websocket.next(mh.sentMessage);\n }\n });\n },\n });\n }\n reset() {\n this.status.isConnected = false;\n this.status.isConfigured = false;\n this.websocket && this.websocket.complete();\n this.websocket = null;\n this.cleanMessages();\n }\n cleanMessages() {\n this.wsMessages && this.wsMessages.complete();\n this.wsMessages = new SocketSubject();\n this.wsMessageHandlers = new Map();\n }\n send(message, needsHandling = true) {\n if (!this.isConnected) {\n return Promise.reject(new Error('WebSocket connection is closed'));\n }\n const sendingMessasgeLog = `Sending Message for SourceRef: ${message.SOURCE_REF} | MessageType: ${message.MESSAGE_TYPE}`;\n this.logMessageTypeFlow(message.MESSAGE_TYPE, logger.info, sendingMessasgeLog);\n return new Promise((resolve, reject) => {\n const onMessage = (msg) => {\n resolve(msg);\n };\n const onError = (err) => {\n reject(err);\n };\n if (needsHandling) {\n this.setMessageHandler(message, onMessage, onError);\n }\n this.websocket.next(message);\n });\n }\n sendForStream(message, onMessage, onError, onComplete) {\n if (!this.isConnected) {\n return throwError(() => new Error('WebSocket connection is closed'));\n }\n const sendingMessageLog = `Sending Message (stream) for SourceRef: ${message.SOURCE_REF} | MessageType: ${message.MESSAGE_TYPE}`;\n this.logMessageTypeFlow(message.MESSAGE_TYPE, logger.info, sendingMessageLog);\n this.setMessageHandler(message, onMessage, onError, true);\n /**\n * We need to queue these outgoing messages to allow the consumers to subscribe in time. We should review the entire\n * setup with late subscribers in mind, as we can't say when they will actually subscribe. The impact is grids and\n * other components remaining stuck on Loading screens, as they miss the first `onMessage` reply.\n */\n DOM.queueUpdate(() => this.websocket.next(message));\n /**\n * @privateRemarks\n * Running the data logoff from here makes more sense given the network monitor actor is optionally added.\n */\n return new Observable((subscriber) => {\n const destroyNotifier = new Subject();\n this.wsMessages\n .pipe(filter((msg) => msg.SOURCE_REF === message.SOURCE_REF), takeUntil(destroyNotifier))\n .subscribe({\n next: (value) => {\n subscriber.next(value);\n },\n error: (err) => {\n subscriber.error(err);\n },\n complete: () => {\n subscriber.complete();\n },\n });\n return () => {\n destroyNotifier.complete();\n this.sendDataLogoff(message.SOURCE_REF);\n this.removeMessageHandler(message.SOURCE_REF);\n onComplete && onComplete();\n };\n });\n }\n sendForStreamWithoutTeardown(message, onMessage, onError) {\n if (!this.isConnected) {\n return throwError(() => new Error('WebSocket connection is closed'));\n }\n const sendingMessageLog = `Sending Message (stream) for SourceRef: ${message.SOURCE_REF} | MessageType: ${message.MESSAGE_TYPE}`;\n this.logMessageTypeFlow(message.MESSAGE_TYPE, logger.info, sendingMessageLog);\n this.setMessageHandler(message, onMessage, onError, true);\n this.websocket.next(message);\n return this.wsMessages.pipe(filter((msg) => msg.SOURCE_REF === message.SOURCE_REF));\n }\n setMessageHandler(message, onMessage, onError, isSubscription = false) {\n const settingMessageHandlerLog = `Setting Message Handler for SourceRef: ${message.SOURCE_REF} | MessageType: ${message.MESSAGE_TYPE}`;\n this.logMessageTypeFlow(message.MESSAGE_TYPE, logger.debug, settingMessageHandlerLog);\n this.wsMessageHandlers.set(message.SOURCE_REF, new SocketMessageHandler(message, onMessage, onError, isSubscription));\n }\n sendDataLogoff(sourceRef) {\n this.send(this.messageBuilder.createDataLogoffMessage(sourceRef), false);\n }\n removeMessageHandler(sourceRef) {\n this.wsMessageHandlers.delete(sourceRef);\n }\n getMessageHandler(sourceRef, messageType) {\n const gettingMessageHandlerLog = `Getting Message Handler for SourceRef: ${sourceRef} | MessageType: ${messageType}`;\n this.logMessageTypeFlow(messageType, logger.debug, gettingMessageHandlerLog);\n return this.wsMessageHandlers.get(sourceRef);\n }\n logMessageTypeFlow(messageType, logFunc, logMsg) {\n switch (messageType) {\n case EventMessageType.DATA_LOGOFF:\n logFunc(logMsg);\n break;\n case MessageType.HEARTBEAT_PING:\n case MessageType.HEARTBEAT_PONG:\n if (this.heartbeatLoggingIsEnabled) {\n logFunc(logMsg);\n }\n break;\n default:\n if (this.messageLoggingIsEnabled) {\n logFunc(logMsg);\n }\n break;\n }\n }\n};\n__decorate([\n observable\n], DefaultSocket.prototype, \"websocket\", void 0);\n__decorate([\n observable\n], DefaultSocket.prototype, \"wsMessages\", void 0);\n__decorate([\n observable\n], DefaultSocket.prototype, \"wsMessageHandlers\", void 0);\n__decorate([\n Http\n], DefaultSocket.prototype, \"http\", void 0);\n__decorate([\n observable\n], DefaultSocket.prototype, \"heartbeatIsEnabled\", void 0);\nDefaultSocket = __decorate([\n __param(0, MessageBuilder),\n __param(1, Session),\n __param(2, JSONSerializer),\n __param(3, UUID),\n __param(4, SocketStatus),\n __param(5, User),\n __param(6, ConnectConfig)\n], DefaultSocket);\nexport { DefaultSocket };\n/**\n * The DI token for the Socket interface.\n * @internal\n */\nexport const Socket = DI.createInterface((x) => x.singleton(DefaultSocket));\n/**\n * Gets Socket from the DI container.\n *\n * @remarks\n * A utility method for host applications that are not using decorators or the DI container.\n *\n * @example\n * ```ts\n * import { getSocket } from '@genesislcap/foundation-comms';\n * ...\n * private socket = getSocket();\n * ```\n *\n * @public\n */\nexport function getSocket() {\n return DI.getOrCreateDOMContainer().get(Socket);\n}\n","import { ResourceType } from '../datasource/datasource.types';\nimport { logger } from '../utils';\nimport { FieldTypeEnum, TYPES_MAP } from './metadata.types';\n/**\n * Converts the field definitions to field metadata.\n * @public\n * @param fieldDef - The field definitions.\n * @returns An array of field metadata.\n */\nexport const toFieldMetadata = (fieldDef) => {\n if (!fieldDef)\n return null;\n return fieldDef.map((field) => {\n const meta = {\n name: field.NAME,\n type: TYPES_MAP[field.TYPE] || FieldTypeEnum.STRING,\n };\n if (field.TYPE === FieldTypeEnum.ENUM && field.VALID_VALUES) {\n try {\n meta.enumOptions = Array.isArray(field.VALID_VALUES)\n ? field.VALID_VALUES\n : field.VALID_VALUES.split('|');\n }\n catch (err) {\n logger.error(err);\n meta.enumOptions = [];\n }\n }\n return meta;\n });\n};\n/**\n * Extracts the field definitions from the metadata.\n * @public\n * @param metadata - The metadata object.\n * @returns An array of metadata detail.\n */\nexport const extractFieldDefinitions = (metadata) => {\n var _a;\n const type = metadata === null || metadata === void 0 ? void 0 : metadata.TYPE;\n if (type === ResourceType.DATASERVER) {\n return metadata.FIELD || [];\n }\n if (type === ResourceType.REQUEST_SERVER) {\n return metadata.REPLY_FIELD || ((_a = metadata.REPLY) === null || _a === void 0 ? void 0 : _a.FIELD) || [];\n }\n throw new Error(`Unsupported resource type: ${type}`);\n};\n","import { DI } from '@microsoft/fast-foundation';\n/**\n * @internal\n */\nexport const BIG_INT_64_BITS = 64;\n/**\n * Configuration options for the JSONSerializer Config instance.\n * @internal\n */\nexport const JSONSerializerConfig = DI.createInterface();\n","import { __decorate, __param } from \"tslib\";\nimport { DI, optional } from '@microsoft/fast-foundation';\nimport { parse, stringify, isInteger } from 'lossless-json';\nimport { BIG_INT_64_BITS, JSONSerializerConfig } from './json.types';\n/**\n * A Default Number Parser for deserializing objects.\n * @public\n */\nexport function customNumberParser(value) {\n if (Number.isSafeInteger(+value)) {\n return Number(value);\n }\n if (!isInteger(value)) {\n return parseFloat(value);\n }\n return BigInt.asIntN(BIG_INT_64_BITS, value);\n}\n/**\n * A Default JSONSerializer Config for serializing and deserializing functions.\n * @public\n */\nexport const defaultJSONSerializerConfig = {\n parse: (input) => parse(input, null, customNumberParser),\n stringify: (object) => stringify(object),\n};\nlet DefaultJSONSerializer = class DefaultJSONSerializer {\n constructor(config = defaultJSONSerializerConfig) {\n this.config = config;\n /**\n * @inheritDoc JSONSerializer.serialize\n */\n this.serialize = (object) => this.config.stringify(object);\n }\n /**\n * @inheritDoc JSONSerializer.deserialize\n */\n deserialize(input) {\n if (!input) {\n return Promise.resolve({});\n }\n if (typeof input === 'string') {\n return this.config.parse(input);\n }\n if (input && input.ok) {\n return input.text().then((text) => this.config.parse(text));\n }\n if (input && input.data) {\n input = input.data;\n }\n return this.config.parse(input);\n }\n};\nDefaultJSONSerializer = __decorate([\n __param(0, optional(JSONSerializerConfig))\n], DefaultJSONSerializer);\nexport default DefaultJSONSerializer;\n/**\n * A DI token for the JSON serializer.\n * @public\n */\nexport const JSONSerializer = DI.createInterface((x) => x.singleton(DefaultJSONSerializer));\n","/**\n * Regular Expression to test valid WebSocket (wss and ws) hosts\n * @public\n */\nexport const isWebSocketExpression = new RegExp(/wss?:\\/\\/[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\b([-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)\\b\\/*$/, 'i');\n","import { DI } from '@microsoft/fast-foundation';\nimport { isWebSocketExpression } from '../utils';\n/**\n * The default configuration for connecting to a WS service.\n * @public\n */\nexport const defaultConnectConfig = {\n connect: {\n alwaysOn: false,\n enableHeartbeat: true,\n enableHeartbeatLogging: false,\n heartbeatInterval: 10000,\n verboseHeartbeat: false,\n enableMessageLogging: false,\n },\n reconnect: {\n reconnectAttempts: 10,\n reconnectInterval: 10000,\n reconnectStreams: true,\n },\n isWebSocketExpression,\n};\n/**\n * Configuration options for the Connect (WS) instance.\n * @internal\n */\nexport const ConnectConfig = DI.createInterface((x) => x.instance(defaultConnectConfig));\n","/**\n * The available ypes of authentication.\n * @public\n */\nexport var AuthType;\n(function (AuthType) {\n AuthType[\"BASIC\"] = \"BASIC\";\n AuthType[\"SSO\"] = \"SSO\";\n AuthType[\"JWT\"] = \"JWT\";\n AuthType[\"REFRESH\"] = \"REFRESH\";\n})(AuthType || (AuthType = {}));\n/**\n * Represents an error that occurs during authentication.\n * @public\n */\nexport class AuthError extends Error {\n constructor(sent, received, message = 'Auth Failed \\n') {\n super(message);\n this.sent = sent;\n this.received = received;\n Object.setPrototypeOf(this, AuthError.prototype);\n }\n isIgnorableError() {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n if ((_d = (_c = (_b = (_a = this.received) === null || _a === void 0 ? void 0 : _a.DETAILS) === null || _b === void 0 ? void 0 : _b.ERROR) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === null || _d === void 0 ? void 0 : _d.includes('request needs the user to be logged')) {\n return true;\n }\n if ((_h = (_g = (_f = (_e = this.received) === null || _e === void 0 ? void 0 : _e.DETAILS) === null || _f === void 0 ? void 0 : _f.ERROR) === null || _g === void 0 ? void 0 : _g.toLowerCase()) === null || _h === void 0 ? void 0 : _h.includes('is not logged in')) {\n return true;\n }\n return false;\n }\n getMessageError() {\n var _a, _b;\n return Array.isArray((_a = this.received) === null || _a === void 0 ? void 0 : _a.ERROR)\n ? (_b = this.received) === null || _b === void 0 ? void 0 : _b.ERROR.map((error) => this.errorDetailFormatter(error)).join('\\n')\n : '';\n }\n getDetailsError() {\n var _a, _b, _c, _d;\n return Array.isArray((_b = (_a = this.received) === null || _a === void 0 ? void 0 : _a.DETAILS) === null || _b === void 0 ? void 0 : _b.ERROR)\n ? (_d = (_c = this.received) === null || _c === void 0 ? void 0 : _c.DETAILS) === null || _d === void 0 ? void 0 : _d.ERROR.map((error) => this.errorDetailFormatter(error)).join('\\n')\n : '';\n }\n hasPasswordExpiredError() {\n return this.hasErrorCode('PASSWORD_EXPIRED');\n }\n hasMFAError() {\n return this.hasErrorCode('MFA_REQUIRED') || this.hasErrorCode('MFA_FAILED');\n }\n requiresTermsAndConditions() {\n return this.hasErrorCode('TERMS_ACCEPTANCE_REQUIRED');\n }\n hasErrorCode(code) {\n var _a, _b;\n return Array.isArray((_a = this.received) === null || _a === void 0 ? void 0 : _a.ERROR)\n ? (_b = this.received) === null || _b === void 0 ? void 0 : _b.ERROR.some((error) => error.CODE === code)\n : false;\n }\n errorDetailFormatter(error) {\n return `\\n ${error.CODE}: \\n ${error.TEXT}`;\n }\n}\n","import { getAllElements, logger } from '../utils';\n/**\n * assureDesignSystem.\n *\n * @remarks\n * Webpack caching strategies can backfill missing modules with placeholders in an attempt to prevent errors. In the case\n * of offline remotes, we rely on the error to fall back to local versions. This utility assures we have a design system.\n *\n * @example\n * ```ts\n * async function zeroDesignSystemImport(): Promise<DesignSystemModule> {\n * let module: DesignSystemModule;\n * let type: ResourceType = ResourceType.remote;\n * try {\n * module = await import('foundationZero/ZeroDesignSystem');\n * return assureDesignSystem(module);\n * } catch (e) {\n * logger.info(\n * `Please note remoteEntry.js load errors are expected if module federated dependencies are offline. Falling back to locally bundled versions.`,\n * );\n * type = ResourceType.local;\n * module = await import('@genesislcap/foundation-zero');\n * return assureDesignSystem(module);\n * } finally {\n * logger.debug(`Using '${type}' version of foundation-zero`);\n * }\n * }\n * ```\n *\n * @example You should also instruct webpack to use strict module handling.\n * ```ts\n * output: {\n * strictModuleErrorHandling: true,\n * strictModuleExceptionHandling: true,\n * }\n * ```\n *\n * @public\n */\nexport function assureDesignSystem(module) {\n if (!module) {\n throw new Error('Undefined design system module');\n }\n if (typeof module.provideDesignSystem !== 'function') {\n throw new Error('Required `provideDesignSystem` function missing from design system module');\n }\n return module;\n}\n/**\n * Get the current design system provider element and prefix by checking available providers.\n * If no provider is found, falls back to the provided prefix.\n * @param element - The starting HTML element\n * @param fallbackPrefix - The prefix to fallback to if the provider is not available\n * @returns An object containing the current design system provider element and prefix\n *\n * @example\n * ```ts\n * const { element: providerElement, prefix } = getCurrentDesignSystem(myElement, 'default-prefix');\n * logger.debug(prefix); // e.g., 'rapid' or 'default-prefix'\n * logger.debug(providerElement); // The provider element or null\n * ```\n * @public\n */\nexport function getCurrentDesignSystem(element, fallbackPrefix) {\n // First try: Check element and its ancestors\n let current = element;\n while (current) {\n const tagName = current.tagName.toLowerCase();\n if (tagName.endsWith('-design-system-provider')) {\n const prefix = tagName.split('-design-system-provider')[0];\n if (prefix) {\n logger.debug(`Found provider by ancestor search: ${tagName}, prefix: ${prefix}`);\n return { element: current, prefix };\n }\n }\n // Move up the DOM tree, handling shadow DOM boundaries\n if (current.parentElement) {\n current = current.parentElement;\n }\n else if (current.getRootNode && current.getRootNode() instanceof ShadowRoot) {\n current = current.getRootNode().host;\n }\n else {\n current = null;\n }\n }\n // Second try: Document-wide search\n const allProviders = document.querySelectorAll('[class*=\"-design-system-provider\"],[id*=\"-design-system-provider\"]');\n const providerElements = Array.from(allProviders);\n // Add shadow DOM providers\n const shadowProviders = getAllElements(document).filter((el) => {\n var _a;\n const tagName = (_a = el.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n return (tagName === null || tagName === void 0 ? void 0 : tagName.endsWith('-design-system-provider')) || false;\n });\n providerElements.push(...shadowProviders);\n if (providerElements.length > 0) {\n const provider = providerElements[0];\n const providerTag = provider.tagName.toLowerCase();\n const prefix = providerTag.split('-design-system-provider')[0];\n if (prefix) {\n logger.debug(`Found provider by document search: ${providerTag}, prefix: ${prefix}`);\n return { element: provider, prefix };\n }\n }\n logger.debug(`No provider found. Falling back to ${fallbackPrefix}.`);\n return { element: null, prefix: fallbackPrefix };\n}\n/**\n * Get the current design system prefix by checking available providers.\n * If no provider is found, falls back to the provided prefix.\n * @param element - The starting HTML element\n * @param fallbackPrefix - The prefix to fallback to if the provider is not available\n * @returns The current design system prefix\n *\n * @example\n * ```ts\n * const prefix = getCurrentDesignSystemPrefix(myElement, 'default-prefix');\n * logger.debug(prefix); // e.g., 'rapid' or 'default-prefix'\n * ```\n * @public\n */\nexport function getCurrentDesignSystemPrefix(element, fallbackPrefix) {\n return getCurrentDesignSystem(element, fallbackPrefix).prefix;\n}\n","export const isFeatureActivated = (feature) => {\n const currentUrl = window.location.href;\n const queryString = new URL(currentUrl).search;\n const params = new URLSearchParams(queryString);\n const featureKey = `feature.${feature}`.toLowerCase();\n for (const [key] of params.entries()) {\n if (key.toLowerCase() === featureKey) {\n return true;\n }\n }\n return false;\n};\n","import { DI } from '@microsoft/fast-foundation';\n/**\n * Default TypedBroadcastChannel implementation.\n * @public\n */\nexport class DefaultTypedBroadcastChannel extends BroadcastChannel {\n constructor() {\n super(...arguments);\n /** {@inheritDoc TypedBroadcastChannel.postMessage} */\n // @ts-ignore\n this.postMessage = (...args) => {\n const [type, detail] = args;\n super.postMessage({\n type,\n detail,\n });\n };\n /** {@inheritDoc TypedBroadcastChannel.isMessageType} */\n this.isMessageType = (type, event) => {\n var _a;\n return ((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) === type;\n };\n }\n}\n/**\n * Creates a dependency injection key for the broadcast channel being registered which is lazily created when injected.\n * @example In a package's config.ts\n * ```ts\n * export interface GenesisResourcesChannel extends TypedBroadcastChannel<GenesisResourcesEvents> {}\n * ...\n * export const GenesisResourcesChannel = registerTypedBroadcastChannel<GenesisResourcesEvents>(GenesisResourcesChannelId);\n * ```\n * @param name - The channel name.\n * @returns The created key.\n * @public\n */\nexport const registerTypedBroadcastChannel = (name) => {\n class Value extends DefaultTypedBroadcastChannel {\n constructor() {\n super(name);\n }\n }\n return DI.createInterface((x) => x.transient(Value));\n};\n/**\n * Creates a strongly typed broadcast channel.\n *\n * @remarks\n * `registerTypedBroadcastChannel` may be preferred, as it will create and register the channel in the DI.\n *\n * @example\n * ```ts\n * const channel = createTypedBroadcastChannel<GenesisResourcesEvents>(GenesisResourcesChannelId);\n * ```\n * @param name - The channel name.\n * @returns The created TypedBroadcastChannel.\n * @public\n */\nexport const createTypedBroadcastChannel = (name) => {\n return new DefaultTypedBroadcastChannel(name);\n};\n","/* eslint-disable import/no-mutable-exports */\nimport { isFeatureActivated } from '../feature-flags';\n/**\n * The builder aka file bundler.\n * @privateRemarks\n * Provided by default as part of the `resolveDefineConfig` in the build kit.\n * @example 'webpack', 'vite'.\n * @defaultValue `'webpack'`\n * @public\n */\nlet _BUILDER = 'webpack';\ntry {\n if (typeof BUILDER !== 'undefined') {\n _BUILDER = BUILDER;\n }\n}\ncatch (_a) { }\nexport { _BUILDER as BUILDER };\n/**\n * The public path.\n * @privateRemarks\n * Provided by default as part of the `resolveDefineConfig` in the build kit.\n * @example '/', '/app/'.\n * @public\n * @defaultValue `'/'`\n */\nlet _PUBLIC_PATH = '/';\ntry {\n if (typeof PUBLIC_PATH !== 'undefined') {\n // Remove trailing slash from PUBLIC_PATH\n _PUBLIC_PATH = PUBLIC_PATH.replace(/\\/$/, '');\n }\n}\ncatch (_b) { }\nexport { _PUBLIC_PATH as PUBLIC_PATH };\n/**\n * The sub-path used for WebSocket connections when API_HOST is not set\n * @public\n * @defaultValue `'gwf'`\n * @remarks Optional.\n * @example\n * If `API_HOST` is not set, `SOCKET_EXT` is set to `/custom` and UI is served on `https://localhost:1234`\n * API host URL will be `wss://localhost:1234/custom`\n */\nlet _SOCKET_EXT = 'gwf';\ntry {\n if (typeof SOCKET_EXT !== 'undefined') {\n _SOCKET_EXT = SOCKET_EXT;\n }\n}\ncatch (_c) { }\nexport { _SOCKET_EXT as SOCKET_EXT };\n/**\n * The path to a JSON config file for the HTTP mode.\n * @remarks Optional.\n * @public\n */\nlet _FORCE_HTTP;\ntry {\n _FORCE_HTTP = FORCE_HTTP;\n}\ncatch (_d) { }\nexport { _FORCE_HTTP as FORCE_HTTP };\n/**\n * Genesis Socket URL\n * @remarks\n * Built from the current {@link https://developer.mozilla.org/en-US/docs/Web/API/Location} object and {@link SOCKET_EXT | socket extension}.\n * @example\n * ```ts\n * await this.connect.connect(GENESIS_SOCKET_URL); // < wss://localhost:6060/gwf/\n * ```\n * @public\n */\nexport const GENESIS_SOCKET_URL = `${location.protocol.replace('http', 'ws')}//${location.host}${_PUBLIC_PATH}/${_SOCKET_EXT}/`;\nconst PROTOCOL = _FORCE_HTTP === 'true' || isFeatureActivated('forceHttp')\n ? location.protocol\n : location.protocol.replace('http', 'ws');\n/**\n * The Genesis Server URL (WebSocket or HTTP).\n * @remarks Optional.\n * @defaultValue `${PROTOCOL}//${location.host}/${_SOCKET_EXT}/`\n * @example ws://localhost/gwf/, ws://localhost:9064\n * @public\n */\nlet _API_HOST = `${PROTOCOL}//${location.host}/${_SOCKET_EXT}/`;\ntry {\n if (typeof API_HOST !== 'undefined') {\n _API_HOST = API_HOST;\n }\n}\ncatch (_e) { }\nexport { _API_HOST as API_HOST };\n/**\n * Configuration settings for HTTP, used in http connect flow [`genesislcap-foundation-comms.HttpConnectConfig`](https://link-to-docs).\n * @remarks Optional.\n * @public\n */\nlet _HTTP_CONFIG;\ntry {\n _HTTP_CONFIG = HTTP_CONFIG;\n}\ncatch (_f) { }\nexport { _HTTP_CONFIG as HTTP_CONFIG };\n/**\n * The default Organisation value, used in auth/login flow [`genesislcap-foundation-login`](https://link-to-docs).\n * @remarks Optional.\n * @public\n */\nlet _DEFAULT_ORGANISATION;\ntry {\n _DEFAULT_ORGANISATION = DEFAULT_ORGANISATION;\n}\ncatch (_g) { }\nexport { _DEFAULT_ORGANISATION as DEFAULT_ORGANISATION };\n/**\n * The default Password value, used in auth/login flow [`genesislcap-foundation-login`](https://link-to-docs).\n * @remarks Optional.\n * @public\n */\nlet _DEFAULT_PASSWORD;\ntry {\n _DEFAULT_PASSWORD = DEFAULT_PASSWORD;\n}\ncatch (_h) { }\nexport { _DEFAULT_PASSWORD as DEFAULT_PASSWORD };\n/**\n * The default Username value, used in auth/login flow [`genesislcap-foundation-login`](https://link-to-docs).\n * @remarks Optional.\n * @public\n */\nlet _DEFAULT_USER;\ntry {\n _DEFAULT_USER = DEFAULT_USER;\n}\ncatch (_j) { }\nexport { _DEFAULT_USER as DEFAULT_USER };\n/**\n * @public\n */\nlet LOGIN_URL = 'gwf/event-login-auth';\nif (typeof GENX_LOGIN_URL !== 'undefined') {\n LOGIN_URL = GENX_LOGIN_URL;\n}\nexport { LOGIN_URL };\n/**\n * @public\n */\nlet LOGIN_REFRESH_URL = 'gwf/event-login-auth';\nif (typeof GENX_LOGIN_REFRESH_URL !== 'undefined') {\n LOGIN_REFRESH_URL = GENX_LOGIN_REFRESH_URL;\n}\nexport { LOGIN_REFRESH_URL };\n/**\n * @public\n */\nlet LOGIN_DETAILS_URL = 'gwf/event-login-details';\nif (typeof GENX_LOGIN_DETAILS_URL !== 'undefined') {\n LOGIN_DETAILS_URL = GENX_LOGIN_DETAILS_URL;\n}\nexport { LOGIN_DETAILS_URL };\n/**\n * @public\n */\nlet LOGOUT_URL = 'gwf/event-logout';\nif (typeof GENX_LOGOUT_URL !== 'undefined') {\n LOGOUT_URL = GENX_LOGOUT_URL;\n}\nexport { LOGOUT_URL };\n/**\n * @public\n */\nlet CHANGE_PASSWORD_URL = 'gwf/event-change-user-password';\nif (typeof GENX_CHANGE_PASSWORD_URL !== 'undefined') {\n CHANGE_PASSWORD_URL = GENX_CHANGE_PASSWORD_URL;\n}\nexport { CHANGE_PASSWORD_URL };\n/**\n * @public\n */\nlet FORGOT_PASSWORD_URL = 'gwf/event-self-service-password-reset';\nif (typeof GENX_FORGOT_PASSWORD_URL !== 'undefined') {\n FORGOT_PASSWORD_URL = GENX_FORGOT_PASSWORD_URL;\n}\nexport { FORGOT_PASSWORD_URL };\n/**\n * @public\n */\nlet RESET_PASSWORD_URL = 'gwf/event-password-reset-action';\nif (typeof GENX_RESET_PASSWORD_URL !== 'undefined') {\n RESET_PASSWORD_URL = GENX_RESET_PASSWORD_URL;\n}\nexport { RESET_PASSWORD_URL };\n/**\n * @public\n */\nlet SSO_LIST_URL = 'gwf/sso/list';\nif (typeof GENX_SSO_LIST_URL !== 'undefined') {\n SSO_LIST_URL = GENX_SSO_LIST_URL;\n}\nexport { SSO_LIST_URL };\n/**\n * @public\n */\nlet SSO_LOGIN_URL = 'gwf/{type}/login?idp={id}';\nif (typeof GENX_SSO_LOGIN_URL !== 'undefined') {\n SSO_LOGIN_URL = GENX_SSO_LOGIN_URL;\n}\nexport { SSO_LOGIN_URL };\n/**\n * @public\n */\nlet ENVIRONMENT_LEVEL = 'default';\nif (typeof GENX_ENVIRONMENT_LEVEL !== 'undefined') {\n ENVIRONMENT_LEVEL = GENX_ENVIRONMENT_LEVEL;\n}\nexport { ENVIRONMENT_LEVEL };\n/**\n * @public\n */\nlet ACCEPT_TERMS_URL = 'gwf/auth/accept-terms';\nif (typeof GENX_ACCEPT_TERMS_URL !== 'undefined') {\n ACCEPT_TERMS_URL = GENX_ACCEPT_TERMS_URL;\n}\nexport { ACCEPT_TERMS_URL };\n","import { createLogger } from '@genesislcap/foundation-logger';\n/**\n * @public\n */\nexport const logger = createLogger('foundation-user');\n","import { registerTypedBroadcastChannel, } from '@genesislcap/foundation-broadcast-channel';\nimport { DI } from '@microsoft/fast-foundation';\nimport { logger } from './logger';\nimport { UserChannelId } from './types';\n/**\n * Default UserConfig DI implementation.\n * @public\n */\nexport const defaultUserConfig = {\n trackActionExclusions: [],\n trackPathExclusions: [''],\n setUser(user, properties) {\n if (user.isAuthenticated) {\n throw new Error(`User already set. If this is intentional, please call User.unset first.`);\n }\n logger.debug('setUser', properties);\n /**\n * Create a clone of the raw properties.\n */\n user.rawProperties = structuredClone(properties);\n /**\n * Set managed properties\n */\n user.userKVs = properties.userKVs;\n user.details = properties.details;\n user.permission = properties.permission;\n user.profile = properties.profile;\n user.sourceRef = properties.sourceRef;\n user.userName = properties.userName;\n user.isAuthenticated = true;\n return user;\n },\n unsetUser(user) {\n logger.debug('unsetUser');\n /**\n * Unset raw properties ref\n */\n user.rawProperties = undefined;\n /**\n * Unset managed properties\n */\n user.userKVs = undefined;\n user.details = undefined;\n user.permission = undefined;\n user.profile = undefined;\n user.sourceRef = undefined;\n user.userName = undefined;\n user.isAuthenticated = false;\n return user;\n },\n};\n/**\n * UserConfig DI key.\n *\n * @internal\n * @privateRemarks\n * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.\n */\nexport const UserConfig = DI.createInterface((x) => x.instance(defaultUserConfig));\n/**\n * UserChannel DI key.\n * @internal\n * @privateRemarks\n * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.\n */\nexport const UserChannel = registerTypedBroadcastChannel(UserChannelId);\n/**\n * Gets UserChannel from the DI container.\n *\n * @remarks\n * A utility method for host applications that are not using decorators or the DI container.\n *\n * @example\n * ```ts\n * import { getUserChannel } from '@genesislcap/foundation-user';\n * ...\n * const channel = getUserChannel();\n * ...\n * channel.onmessage = (e) => {\n * if (channel.isMessageType('user-authentication-change', e)) {\n * logger.debug('user-authentication-change', e.data.detail);\n * return;\n * }\n * }\n * ...\n * channel.close();\n * ```\n * @public\n */\nexport function getUserChannel() {\n return DI.getOrCreateDOMContainer().get(UserChannel);\n}\n","/**\n * UserAuthenticationChangeType.\n * @public\n */\nexport const UserAuthenticationChangeType = 'user-authentication-change';\n/**\n * UserChannelId.\n * @public\n */\nexport const UserChannelId = 'genesis-user';\n","import { __decorate } from \"tslib\";\nimport { createObserver } from '@genesislcap/foundation-utils';\nimport { Observable, observable } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\nimport { getUserChannel, UserConfig } from './config';\nimport { UserAuthenticationChangeType } from './types';\n/**\n * Default User implementation.\n * @public\n */\nexport class DefaultUser {\n constructor() {\n /** {@inheritDoc UserPathHistory.pathHistory} */\n this.pathHistory = [];\n /** {@inheritDoc UserActionHistory.actionHistory} */\n this.actionHistory = [];\n /** {@inheritDoc User.isAuthenticated} */\n this.isAuthenticated = false;\n /** @internal */\n this.authenticationChangeListeners = createObserver();\n }\n /** {@inheritDoc User.set} */\n set(properties) {\n return this.config.setUser(this, properties);\n }\n /** {@inheritDoc User.unset} */\n unset() {\n return this.config.unsetUser(this);\n }\n /** {@inheritDoc User.isAnonymous} */\n get isAnonymous() {\n return !this.isAuthenticated;\n }\n /** {@inheritDoc User.isAdmin} */\n isAdmin() {\n return this.hasProfile('ADMIN');\n }\n /** {@inheritDoc User.isBanned} */\n isBanned() {\n return this.hasProfile('BANNED');\n }\n /** {@inheritDoc User.hasPermission} */\n hasPermission(permission) {\n return this.hasKey(this.permission, permission);\n }\n /** {@inheritDoc User.hasProfile} */\n hasProfile(profile) {\n return this.hasKey(this.profile, profile);\n }\n /** {@inheritDoc UserPathHistory.trackPath} */\n trackPath() {\n const { pathname, search, hash } = location;\n const path = `${pathname !== '/' ? pathname : ''}`;\n const urlPath = `${path}${search}${hash}`;\n if (this.config.trackPathExclusions.includes(urlPath)) {\n return;\n }\n this.pathHistory.push(urlPath);\n return urlPath;\n }\n /** {@inheritDoc UserPathHistory.clearPaths} */\n clearPaths() {\n this.pathHistory = [];\n }\n /** {@inheritDoc UserPathHistory.lastPath} */\n lastPath() {\n const length = this.pathHistory.length;\n return length > 0 ? this.pathHistory[length - 1] : undefined;\n }\n /** {@inheritDoc UserActionHistory.trackAction} */\n trackAction(details) {\n if (this.config.trackActionExclusions.includes(details)) {\n return;\n }\n this.actionHistory.push(details);\n }\n /** {@inheritDoc UserActionHistory.clearActions} */\n clearActions() {\n this.actionHistory = [];\n }\n /** {@inheritDoc UserActionHistory.lastAction} */\n lastAction() {\n const length = this.actionHistory.length;\n return length > 0 ? this.actionHistory[length - 1] : undefined;\n }\n /** {@inheritDoc User.clearTrackingHistory} */\n clearTrackingHistory() {\n this.clearPaths();\n this.clearActions();\n }\n /** @internal */\n hasKey(keys, key) {\n if (!keys || !keys.length || !key) {\n return false;\n }\n if (!Array.isArray(key)) {\n key = [key];\n }\n return key.some((k) => keys.includes(k));\n }\n /** {@inheritDoc User.addAuthenticationChangeListener} */\n addAuthenticationChangeListener(listener) {\n var _a;\n return (_a = this.authenticationChangeListeners) === null || _a === void 0 ? void 0 : _a.subscribe(listener);\n }\n /** @internal */\n isAuthenticatedChanged() {\n var _a;\n (_a = this.authenticationChangeListeners) === null || _a === void 0 ? void 0 : _a.publish(new CustomEvent(UserAuthenticationChangeType, {\n detail: this.isAuthenticated,\n }));\n /**\n * Normally we'd inject channels, but in objects like User that will always exist (no destroy), the use of a channel\n * may lead to tests failing to exit. Given authentication changes are infrequent, a temp channel poses less risk.\n */\n const channel = getUserChannel();\n channel.postMessage('user-authentication-change', this.isAuthenticated);\n channel.close();\n }\n /**\n * Bridge legacy user apis below\n */\n /** @internal */\n userNameChanged() {\n Observable.notify(this, 'username');\n }\n /** {@inheritDoc LegacyUserAPI.username} */\n get username() {\n Observable.track(this, 'username');\n return this.userName;\n }\n /** @internal */\n permissionChanged() {\n Observable.notify(this, 'permissions');\n }\n /** {@inheritDoc LegacyUserAPI.permissions} */\n get permissions() {\n Observable.track(this, 'permissions');\n return this.permission;\n }\n /** @internal */\n profileChanged() {\n Observable.notify(this, 'profiles');\n }\n /** {@inheritDoc LegacyUserAPI.profiles} */\n get profiles() {\n Observable.track(this, 'profiles');\n return this.profile;\n }\n /** {@inheritDoc LegacyUserAPI.hasAdminProfile} */\n hasAdminProfile() {\n return this.isAdmin();\n }\n}\n__decorate([\n UserConfig\n], DefaultUser.prototype, \"config\", void 0);\n__decorate([\n observable\n], DefaultUser.prototype, \"pathHistory\", void 0);\n__decorate([\n observable\n], DefaultUser.prototype, \"actionHistory\", void 0);\n__decorate([\n observable\n], DefaultUser.prototype, \"isAuthenticated\", void 0);\n__decorate([\n observable\n], DefaultUser.prototype, \"userKVs\", void 0);\n__decorate([\n observable\n], DefaultUser.prototype, \"details\", void 0);\n__decorate([\n observable\n], DefaultUser.prototype, \"permission\", void 0);\n__decorate([\n observable\n], DefaultUser.prototype, \"profile\", void 0);\n__decorate([\n observable\n], DefaultUser.prototype, \"sourceRef\", void 0);\n__decorate([\n observable\n], DefaultUser.prototype, \"userName\", void 0);\n__decorate([\n observable\n], DefaultUser.prototype, \"rawProperties\", void 0);\n/**\n * User DI key.\n *\n * @privateRemarks\n * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.\n *\n * @internal\n */\nexport const User = DI.createInterface((x) => x.singleton(DefaultUser));\n/**\n * Gets User from the DI container.\n *\n * @remarks\n * A utility method for host applications that are not using decorators or the DI container.\n *\n * @example\n * ```ts\n * import { getUser, User } from '@genesislcap/foundation-user';\n * ...\n * private user: User = getUser();\n * ```\n *\n * @public\n */\nexport function getUser() {\n return DI.getOrCreateDOMContainer().get(User);\n}\n","/**\n * Normalise criteria.\n *\n * @param criteria - Original concat criteria.\n * @param delimiter - Criteria delimiter.\n * @returns normalized concat criteria.\n *\n * @public\n * @remarks\n * Normalises criteria, as the order of filters should not matter, also gets rid of spaces.\n * @privateRemarks\n * Can we use the criteria builder for this and related criteria stuff within datasources?\n */\nexport function normaliseCriteria(criteria, delimiter = ';') {\n if (!criteria) {\n return criteria;\n }\n return criteria\n .split(delimiter)\n .map((s) => s.trim())\n .sort((a, b) => a.localeCompare(b))\n .join(delimiter);\n}\n","import { DI } from '@microsoft/fast-foundation';\n/**\n * The default implementation for the Session interface.\n * @public\n */\nexport class DefaultSession {\n constructor() {\n /**\n * The prefix to use for all storage keys.\n * @internal\n */\n this.storageKeyPrefix = '';\n this.returnUrl = this.getSessionStorageItem('returnUrl') || '';\n }\n deleteUserFromSessionStorage() {\n const storageKeys = ['authToken', 'refreshToken', 'sessionId', 'ssoToken'];\n storageKeys.forEach((key) => this.removeSessionStorageItem(key));\n this.removeLocalStorageItem('refreshToken');\n }\n setStorageKeyPrefix(prefix) {\n this.storageKeyPrefix = `${prefix.replace(/\\s/g, '')}/`;\n }\n setAuthResult(result) {\n var _a;\n this.setSessionStorageItem('authToken', result.SESSION_AUTH_TOKEN);\n this.setSessionStorageItem('refreshToken', result.REFRESH_AUTH_TOKEN);\n this.setSessionStorageItem('username', result.USER_NAME);\n this.setSessionStorageItem('sessionId', result.SESSION_ID);\n if ((_a = result.DETAILS) === null || _a === void 0 ? void 0 : _a.MFA_CODE) {\n this.setSessionStorageItem('mfaToken', result.DETAILS.MFA_CODE);\n }\n }\n captureReturnUrl() {\n const { pathname, search, hash } = location;\n /**\n * This block shouldn't be required and might mean there's a code issue elsewhere. Login is obvious a public route,\n * so there would be no need to call captureReturnUrl from a nav contributor when trying to visit it.\n */\n if (pathname && (pathname.includes('/login') || pathname.includes('/auth'))) {\n return;\n }\n const path = `${pathname !== '/' ? pathname : ''}`;\n this.returnUrl = `${path}${search}${hash}`;\n this.setSessionStorageItem('returnUrl', this.returnUrl);\n }\n setItem(key, value, storage) {\n if (storage === 'local') {\n localStorage.setItem(this.storageKeyPrefix + key, value);\n }\n else {\n sessionStorage.setItem(this.storageKeyPrefix + key, value);\n }\n }\n getItem(key, storage) {\n if (storage === 'local')\n return localStorage.getItem(this.storageKeyPrefix + key);\n return sessionStorage.getItem(this.storageKeyPrefix + key);\n }\n removeItem(key, storage) {\n if (storage === 'local') {\n localStorage.removeItem(this.storageKeyPrefix + key);\n }\n else {\n sessionStorage.removeItem(this.storageKeyPrefix + key);\n }\n }\n setLocalStorageItem(key, value) {\n this.setItem(key, value, 'local');\n }\n setSessionStorageItem(key, value) {\n this.setItem(key, value, 'session');\n }\n getLocalStorageItem(key) {\n return this.getItem(key, 'local');\n }\n getSessionStorageItem(key) {\n return this.getItem(key, 'session');\n }\n removeLocalStorageItem(key) {\n this.removeItem(key, 'local');\n }\n removeSessionStorageItem(key) {\n this.removeItem(key, 'session');\n }\n}\n/**\n * The DI token for the Session interface.\n * @internal\n */\nexport const Session = DI.createInterface((x) => x.singleton(DefaultSession));\n"],"names":["DefaultSocketStatus","constructor","this","isConfigured","isConnecting","isConnected","isReconnecting","reconnectionLimitReached","isConnectedSubject","hasValidSession","user","isAuthenticated","isDisconnected","isDisconnectedByServer","undefined","closedClean","isConnectedChanged","_a","resetClosedState","next","isReconnectingChanged","closedCode","closedReason","serialize","onClose","event","code","reason","wasClean","observable","prototype","SocketStatus","DI","createInterface","x","singleton","formatTimestampForReqRep","timestamp","isDate","date","Date","year","getUTCFullYear","month","String","getUTCMonth","padStart","day","getUTCDate","getUTCHours","getUTCMinutes","DatasourceDefaults","MAX_ROWS_250","MAX_VIEW_1000","REQ_REP_POLLING_INTERVAL_MS","DATASERVER_ROW_ID","REQUEST_SERVER_ROW_ID","DEFAULT_PAGINATION_PAGE_SIZE","DEFAULT_REQ_REP_OFFSET","defaultDatasourceConfig","options","criteria","isSnapshot","maxRows","maxView","pollingInterval","movingView","orderBy","resourceName","reverse","pollTriggerEvents","criteriaToFields","filters","split","map","s","trim","reqFields","forEach","c","startsWith","exprMatch","match","fieldNameMatcher","fieldName","toISOString","replace","setDate","getDate","fieldNameValueMatcher","value","processGroovyExpression","test","greaterEqualMatch","timestampStr","parseInt","upperName","toUpperCase","includes","lessEqualMatch","key","substr","indexOf","val","lastIndexOf","length","processEqualityExpression","dataServerResultFilter","d","DatasourceConfig","instance","defaultGenesisResourcesConfig","throwWhenUnavailable","throwWhenUnknown","GenesisResourcesConfig","GenesisResourcesChannel","DefaultGenesisResources","connect","config","isValidResource","fetchResources","resources","find","item","RESOURCE_NAME","getResourceTypeFor","resourceItem","RESOURCE_TYPE","message","logger","error","Error","getAllResources","destroy","resourcesPromise","Promise","resolve","getAvailableResources","data","RESOURCES","postLoadedMessage","channel","getOrCreateDOMContainer","get","postMessage","close","GenesisResources","DefaultDatasource","initialized","status","isInitialized","auth","connectEvents","fetchMetadataRequired","startStreamRequired","originalFieldDef","fieldMetadata","requestFields","customRequestFields","availableIndexes","criteriaOnlyRequest","loadMoreCount","readOnly","_allParams","pollTrigger$","Subject","triggerPoll","validResourceName","deprecated","init","options_1","arguments","fetchMeta","startStream","Object","assign","invalidateCache","host","reportStatus","resourceType","fetchAndApplyMetadata","debug","stream","createStream","_b","commitResponseUnsubscribe","complete","allResourceParams","ORDER_BY","findIndex","i","NAME","validIndexes","index","warn","CRITERIA_MATCH","MAX_ROWS","VIEW_NUMBER","viewNumber","FIELDS","fields","MAX_VIEW","MOVING_VIEW","REVERSE","DISABLE_POLLING","disablePolling","OFFSET","offset","POLLING_INTERVAL","REQUEST","request","dataserverOnlyParams","requestOnlyParams","DETAILS","requestAutoSetup","buildRequestFields","baseRequestFields","fromEntries","field","criteriaFields","updateLoadMoreCount","count","snapshot","overrideParams","DATASERVER","REQUEST_SERVER","snapshotFiltered","rowId","result","Array","isArray","REPLY","ROW","inserts","createDataserverStream","createReqRepStream","addCommitResponseListener","eventName","response","detail","MESSAGE_TYPE","endsWith","pollInterval","fetchSnapshot$","pollingParams","defaultMaxRows","tempMaxRows","combineLatest","isConnected$","isLoggedIn$","pipe","takeWhile","isLoggedIn","switchMap","from","startWith","timer","meta","getMetadata","INDEXES","REQUEST_FIELD","FIELD","CRITERIA_ONLY_REQUEST","normaliseStatus","metadataRequired","hasMetadata","e","eventEmitter","document","dispatchEvent","CustomEvent","bubbles","composed","_c","_d","_e","name","type","Datasource","transient","isoDateSliceEnd","formatDateTimestamp","isNaN","slice","isoDateTimeSliceEnd","formatDateTimeTimestamp","formatTimestamp","withTime","REAUTH_ACTION_LOCK_KEY","LOCK_TIMEOUT_MS","SessionRefreshResult","tryRefreshSession","reloadOnFailure","lockTimestamp","localStorage","getItem","now","removeItem","clearStaleLock","setItem","toString","HANDLED_BY_OTHER_TAB","loginDetailsFetch","fetch","credentials","json","ALREADY_VALID","http","post","body","JSON","stringify","performRefresh","SUCCESS","window","location","reload","FAILED","onOtherTabReauthComplete","callback","handler","newValue","removeEventListener","addEventListener","createObserver","listeners","subscribe","listener","push","filter","l","publish","respondToVisibility","element","root","documentElement","IntersectionObserver","entries","entry","intersectionRatio","observe","createLogger","MessageType","EventMessageType","MessageCode","messageHasErrorCode","ERROR","some","CODE","STATUS_CODE","DefaultMessageBuilder","session","uuid","createLoginMessage","BASIC","USER_NAME","username","PASSWORD","password","MFA_CODE","mfaToken","REFRESH","REFRESH_AUTH_TOKEN","refreshToken","SSO","SSO_TOKEN","ssoToken","JWT","jwt","DOMAIN","domain","SOURCE_REF","createId","EVENT_LOGIN_AUTH","createLogoutMessage","loginResult","EVENT_LOGOUT","SESSION_AUTH_TOKEN","authToken","getSessionStorageItem","SESSION_ID","sessionId","createDataLogonMessage","params","DATA_LOGON","DATASOURCE_NAME","createDataLogoffMessage","sourceRef","DATA_LOGOFF","createRequestMessage","createResourcesMessage","RESOURCES_REQUEST","createMetaRequestMessage","messageType","META_REQUEST","FEATURE","createCommitMessage","createRefreshTokenMessage","createChangePasswordMessage","oldPassword","newPassword","EVENT_CHANGE_USER_PASSWORD","OLD_PASSWORD","NEW_PASSWORD","createForgotPasswordMessage","returnUrl","requester","EVENT_SELF_SERVICE_PASSWORD_RESET","RETURN_URL","createForgotPasswordTokenMessage","resetToken","EVENT_PASSWORD_RESET_ACTION","RESET_TOKEN","createMoreRowsMessage","MORE_ROWS","createMoreColumnsMessage","MORE_COLUMNS","createHTTPHeadersFromMessage","contentType","headers","createHeartbeatPingMessage","verbose","HEARTBEAT_PING","VERBOSE","MessageBuilder","DefaultConnectEvents","streamListeners","streamCompleteListeners","streamErrorListeners","commitListeners","metadataListeners","commitResponseListeners","addStreamListener","unsubscribe","completeUnsubscribe","errorUnsubscribe","onStreamEvent","functions","onStreamErrorEvent","onStreamCompleteEvent","addCommitListener","onCommitEvent","addMetadataListener","onMetadataEvent","onCommitResponseEvent","ConnectEvents","ConnectEventsEmitter","aliasTo","DefaultMetaCache","cachedMetadata","Map","cachedJsonSchema","getMetadataFor","getJsonSchemaFor","hasMetadataFor","has","hasJsonSchemaFor","setMetadataFor","metadata","set","setJsonSchemaFor","schemaResponse","MetaCache","defaultHttpConnectConfig","polling","POLLING_MAP","EVENT_AMEND_USER","TEMP_FREQUENCY","AMOUNT_OF_POLLS","QUERIES","POLLING_INTERVAL_MAP","ALL_TRADES","ALL_USERS","ALL_PROCESSES_STATUS","POLLING_FREQUENCY","HttpConnectConfig","updateState","state","update","row","eventData","ref","ROW_REF","OPERATION","unshift","Set","DefaultHttpConnect_1","DefaultHttpConnect","_isConnected","messageBuilder","metaCache","serializer","isWorking","BehaviorSubject","asObservable","ongoingTurbo","streams","ongoingRefresh","handleSessionRefresh","disconnect","setTimeout","REAUTH_WAIT_MS","finally","checkHost","getMessage","then","HEARTBEAT_PONG","send","needsHandling","getUrl","getBody","httpMode","setValidSession","valid","concat","connected","setSessionStorageItem","clear","snapshotMessage","dataLogoff","catch","onMessage","onError","streamMessage","interval$","visibilityState","ms","interval","retry","MAX_RETRIES","delay","err","retryCount","BAD_REQUEST","INTERNAL_SERVER_ERROR","NOT_FOUND","delete","UNAUTHORIZED","RETRY_DELAY_MS","finalize","STREAM","streamState","initialState","scan","streamWithoutAutoTeardown","getMoreRows","moreRowsMessage","getMoreColumns","streamSourceRef","dataLogoffMessage","res","resourceName_1","useCache","metaRequestMessage","getJSONSchema","JSON_SCHEMA_REQUEST","requestMessage","commitEvent","commitMessage","reply","maybeTurbo","turbo","freq","duration","originalPollingIntervalMap","parse","tempPollingMap","q","updateIntervals","handlePollingIntervalMapUpdate","pollingIntervalMap","resource","hasOwnProperty","newFreq","values","apiEndpoint","toLowerCase","volatile","HttpConnect","DefaultConnect","socket","events","reset","reconnect","msg","sendForStream","sendForStreamWithoutTeardown","details","metaResponse","keys","jsonSchema","promise","useHttpConnect","WSConnect","Connect","getConnect","createHttpError","statusText","DefaultHttp","url","requestInit","method","ok","deserialize","Http","UUIDService","withLogging","id","createRemoteId","UUID","toRowData","tmp","deletes","updates","ResourceType","DatasourceStatusChanged","CredentialManagerConfig","supportsCredentialsContainer","navigator","credentialSeparator","extractParts","input","separator","limit","opt","includesSeparator","countSeparators","RegExp","prioritizeSeparatorInputs","inputs","organisation","migrationFailedLogger","subtext","defaultCredentialRequestOptions","mediation","defaultCredentialManagerConfig","cookie","path","expires","storePasswords","DefaultCredentialManager","createBasicCredentials","getMFAToken","createRefreshCredentials","getUsername","getRefreshToken","createSSOCredentials","getSSOToken","validateBasicCredentials","validateRefreshCredentials","validateSSOCredentials","validateUserCredentialData","ensurePassword","baseResult","normaliseLegacyCredentialData","legacyData","_","legacyCookie","storeCredentialsInContainer","PasswordCredential","store","getCredentialsFromContainer","storeCredentialsInCookie","rest","hostname","secure","getCredentialsFromCookie","storeCredentials","credential","getCredentials","getLocalStorageItem","removeCookie","remove","removeSSOToken","removeSessionStorageItem","removeUsername","removeLocalStorageItem","removeRefreshToken","removeMFAToken","removeAll","preventSilentAccess","optional","CredentialManager","fromDTOStringArray","arr","v","loginDTOMapper","dto","userName","updateQueue","UPDATE_QUEUE","zeroMqProxyModeEnabled","ZERO_MQ_PROXY_MODE_ENABLED","zeroMqProxyInboundPort","ZERO_MQ_PROXY_INBOUND_PORT","zeroMqProxyOutboundPort","ZERO_MQ_PROXY_OUTBOUND_PORT","userKVs","USER","system","SYSTEM","DATE","heartbeatIntervalSecs","HEARTBEAT_INTERVAL_SECS","failedLoginAttempts","FAILED_LOGIN_ATTEMPTS","rejectedLoginAttempts","REJECTED_LOGIN_ATTEMPTS","lastLoginDatetime","LAST_LOGIN_DATETIME","daysToPasswordExpiry","DAYS_TO_PASSWORD_EXPIRY","product","products","PRODUCT","p","version","VERSION","permission","PERMISSION","profile","PROFILE","DefaultAuth","loggedUserResultChanged","isLoggedInSubject","currentUser","credentialManager","addAuthenticationChangeListener","login","loginMessage","authResult","applyAuthResults","profiles","permissions","setAuthResult","isIgnorableError","removeAuthResults","unset","loggedUserResult","logout","logoutResult","success","logoutMessage","deleteUserFromSessionStorage","OIDC_LOGOUT_URL","unexpectedLogoutNack","LOGOUT_NACK","LOGOUT_ACK","SESSION_NOT_FOUND","open","logoutError","sentMessage","receivedMessage","reAuthFromSession","ensureConnection","refreshCredentials","refreshTokenMessage","refreshTokenResult","EVENT_LOGIN_AUTH_ACK","getLoggedUserFromMessage","hostUrl","sessionAuthToken","refreshAuthToken","Auth","DatasourceEventHandler","Target","Mixin","super","onDatasourceStatusChanged","prev","datasourceStatus","datasourceStatusChanged","connectedCallback","passive","capture","disconnectedCallback","defaultEventMap","customUpdateTarget","target","targetName","bind","source","context","updateTarget","originalBind","call","changeEvent","changeHandler","unbind","originalUnbind","SyncDirective","HTMLBindingDirective","binding","convert","keyAttr","conversionType","createBehavior","behavior","tag","tagName","determineChangeEvent","checked","last","bindingObserver","propertySource","propertyName","msSinceEpoch","getTime","Number","Boolean","sync","FieldTypeEnum","TYPES_MAP","STRING","ENUM","BOOLEAN","INT","NUMBER","LONG","DOUBLE","BIGDECIMAL","DATETIME","NANO_TIMESTAMP","DEFAULT_RECONNECT_INTERVAL","MAX_RECONNECT_INTERVAL","SocketReconnectStrategy","exponentialScheduler","reconnectOptions","attempts","reconnectInterval","baseInterval","attemptsBreakPoint","Math","round","log2","pow","linearScheduler","Ticker","workerScript","start","tick","stop","runWorker","worker","terminate","Worker","URL","createObjectURL","Blob","onmessage","SocketSubject","Observable","SocketMessageHandler","isSubscription","_message","_onMessage","_onError","_isSubscription","onReceivedMessage","onReceivedError","DefaultSocket","defaultInterval","secondsMultiplier","heartbeatIsEnabled","heartbeatInterval","socketMessages","wsMessages","heartbeatLoggingIsEnabled","connectOptions","enableHeartbeatLogging","messageLoggingIsEnabled","enableMessageLogging","isWebSocketExpression","info","reconnectStreams","cleanMessages","socketSubscription","websocket","WebSocketSubject","openObserver","prepareHeartbeat","closeObserver","closeEvent","object","deserializer","connectObserver","responseMessageReceivedLog","logMessageTypeFlow","messageHandler","getMessageHandler","MSG_NACK","nacked","systemDetails","LOGON_ACK","LOGOFF_ACK","QUERY_UPDATE","sendDataLogoff","LOGON_NACK","removeMessageHandler","alwaysOn","handleExpiredSession","updateSessionAndSubscriptions","handleCookieBasedReauth","wsMessageHandlers","mh","heartbeatTicker","sendHeartbeat","ping","verboseHeartbeat","heartbeatPingCallback","pong","IS_AUTHENTICATED","heartbeatPongCallback","enableHeartbeat","intervalInMillisecocnds","notAlwaysOnAndHeartbeating","scheduler","reconnectStrategy","Exponential","reconnectObservable","of","observer","timeoutId","recursiveTimeout","clearTimeout","retryInterval","mergeMap","attemptsAmount","reconnectAttempts","throwError","reconnectObserver","reject","sendingMessasgeLog","setMessageHandler","onComplete","sendingMessageLog","DOM","queueUpdate","subscriber","destroyNotifier","takeUntil","settingMessageHandlerLog","gettingMessageHandlerLog","logFunc","logMsg","Socket","getSocket","toFieldMetadata","fieldDef","TYPE","VALID_VALUES","enumOptions","extractFieldDefinitions","REPLY_FIELD","JSONSerializerConfig","customNumberParser","isSafeInteger","BigInt","asIntN","parseFloat","defaultJSONSerializerConfig","DefaultJSONSerializer","text","JSONSerializer","defaultConnectConfig","ConnectConfig","AuthType","AuthError","sent","received","setPrototypeOf","_f","_g","_h","getMessageError","errorDetailFormatter","join","getDetailsError","hasPasswordExpiredError","hasErrorCode","hasMFAError","requiresTermsAndConditions","TEXT","getCurrentDesignSystem","fallbackPrefix","current","prefix","parentElement","getRootNode","ShadowRoot","allProviders","querySelectorAll","providerElements","shadowProviders","el","provider","providerTag","getCurrentDesignSystemPrefix","isFeatureActivated","feature","currentUrl","href","queryString","search","URLSearchParams","featureKey","DefaultTypedBroadcastChannel","BroadcastChannel","args","isMessageType","registerTypedBroadcastChannel","Value","_BUILDER","_PUBLIC_PATH","_FORCE_HTTP","_SOCKET_EXT","SOCKET_EXT","FORCE_HTTP","GENESIS_SOCKET_URL","protocol","_HTTP_CONFIG","_DEFAULT_ORGANISATION","_DEFAULT_PASSWORD","_DEFAULT_USER","_API_HOST","API_HOST","DEFAULT_ORGANISATION","DEFAULT_PASSWORD","DEFAULT_USER","_j","LOGIN_URL","GENX_LOGIN_URL","LOGIN_REFRESH_URL","GENX_LOGIN_REFRESH_URL","LOGIN_DETAILS_URL","GENX_LOGIN_DETAILS_URL","LOGOUT_URL","GENX_LOGOUT_URL","CHANGE_PASSWORD_URL","GENX_CHANGE_PASSWORD_URL","FORGOT_PASSWORD_URL","GENX_FORGOT_PASSWORD_URL","RESET_PASSWORD_URL","GENX_RESET_PASSWORD_URL","SSO_LIST_URL","GENX_SSO_LIST_URL","SSO_LOGIN_URL","GENX_SSO_LOGIN_URL","ENVIRONMENT_LEVEL","GENX_ENVIRONMENT_LEVEL","ACCEPT_TERMS_URL","GENX_ACCEPT_TERMS_URL","defaultUserConfig","trackActionExclusions","trackPathExclusions","setUser","properties","rawProperties","structuredClone","unsetUser","UserConfig","UserChannel","DefaultUser","pathHistory","actionHistory","authenticationChangeListeners","isAnonymous","isAdmin","hasProfile","isBanned","hasPermission","hasKey","trackPath","pathname","hash","urlPath","clearPaths","lastPath","trackAction","clearActions","lastAction","clearTrackingHistory","k","isAuthenticatedChanged","userNameChanged","notify","track","permissionChanged","profileChanged","hasAdminProfile","User","normaliseCriteria","delimiter","sort","a","b","localeCompare","DefaultSession","storageKeyPrefix","setStorageKeyPrefix","captureReturnUrl","storage","sessionStorage","setLocalStorageItem","Session"],"sourceRoot":""}