@genesislcap/design-system-configurator 15.84.2 → 15.85.0

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"226.226.xxxxxxxxxxxxxxxxxxxx.js","mappings":"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","sources":["webpack://@genesislcap/design-system-configurator/../foundation/foundation-broadcast-channel/dist/esm/broadcast-channel/broadcast-channel.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/auth/auth.types.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/connect/connect.errors.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/connect/http.connect.types.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/connect/httpTransport.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/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/connect/errorCodes.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/connect/http.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/networkFailure.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/connect/requestLifecycle.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/datasource/scdb/scdbjDecoder.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/datasource/scdb/scdbDecode.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/connect/scdbStreamDecoder.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/datasource/scdb/dictionaryHash.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/connect/sessionRefresh.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/datasource/scdb/wasm/decoder.wasm.base64.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/datasource/scdb/scdbWasmDecoder.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/connect/socket.status.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/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/datasource/datasource.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/datasource/scdb/base64.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/datasource/scdb/scdbDecoder.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/metadata/metadata.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/metadata/metadata.utils.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/session/session.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/utils/error-code.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-comms/dist/esm/utils/logger.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-criteria/dist/esm/logger.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-criteria/dist/esm/utils.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-criteria/dist/esm/criteria-builder.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-criteria/dist/esm/expression-builder.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-criteria/dist/esm/serialisers.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-criteria/dist/esm/types.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-utils/dist/esm/design-system/design-system.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-utils/dist/esm/directives/sync/sync.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-utils/dist/esm/env/variables.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-utils/dist/esm/feature-flags/featureFlags.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-utils/dist/esm/formatters/datetime.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-utils/dist/esm/observer/observer.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-utils/dist/esm/utils/noop.js","webpack://@genesislcap/design-system-configurator/../foundation/foundation-utils/dist/esm/uuid/uuid.js"],"sourcesContent":["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","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) : false;\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 // oxlint-disable-next-line no-magic-numbers -- cookie max-age (~20 years) in days\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 // GSF nests the update-queue settings under UPDATE_QUEUE_DETAILS (null when the server hides\n // them).\n const queue = dto.UPDATE_QUEUE_DETAILS;\n const ack = {\n messageType: dto.MESSAGE_TYPE,\n sourceRef: dto.SOURCE_REF,\n userName: dto.USER_NAME,\n updateQueue: queue === null || queue === void 0 ? void 0 : queue.UPDATE_QUEUE,\n zeroMqProxyModeEnabled: queue === null || queue === void 0 ? void 0 : queue.ZERO_MQ_PROXY_MODE_ENABLED,\n zeroMqProxyInboundPort: queue === null || queue === void 0 ? void 0 : queue.ZERO_MQ_PROXY_INBOUND_PORT,\n zeroMqProxyOutboundPort: queue === null || queue === void 0 ? void 0 : queue.ZERO_MQ_PROXY_OUTBOUND_PORT,\n userKVs: dto.USER,\n details: DETAILS\n ? {\n system: fromSystemDTO(DETAILS.SYSTEM),\n heartbeatIntervalSecs: DETAILS.HEARTBEAT_INTERVAL_SECONDS,\n failedLoginAttempts: DETAILS.FAILED_LOGIN_ATTEMPTS,\n rejectedLoginAttempts: DETAILS.REJECTED_LOGIN_ATTEMPTS,\n lastLoginDatetime: DETAILS.LAST_LOGIN_DATE_TIME,\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 { withErrorCode } from '../utils/error-code';\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(withErrorCode('Login Authentication Error:', err === null || err === void 0 ? void 0 : err.received), 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(withErrorCode('Logout Authentication Error:', logoutError.received), 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","/**\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 { StatusCodes } from 'http-status-codes';\nimport { normaliseErrorCodes } from './errorCodes';\n/**\n * Base class of the errors Connect rejects with. Narrow with `instanceof` on a subclass or by `kind`.\n * @public\n */\nexport class ConnectError extends Error {\n constructor(message, cause) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n if (cause !== undefined) {\n this.cause = cause;\n }\n }\n}\nconst nackText = (message) => {\n var _a;\n const type = (_a = message === null || message === void 0 ? void 0 : message.MESSAGE_TYPE) !== null && _a !== void 0 ? _a : 'NACK';\n const texts = (Array.isArray(message === null || message === void 0 ? void 0 : message.ERROR) ? message.ERROR : [])\n .map((error) => error === null || error === void 0 ? void 0 : error.TEXT)\n .filter(Boolean);\n return texts.length ? `${type}: ${texts.join('; ')}` : type;\n};\n/**\n * The server rejected the request with a NACK.\n * @remarks\n * Keeps `receivedMessage` and `sentMessage`, the shape Connect rejected NACKs with before.\n * @public\n */\nexport class ConnectNackError extends ConnectError {\n get kind() {\n return 'nack';\n }\n constructor(\n /** The NACK the server replied with. */\n receivedMessage, \n /** The message that was NACKed. */\n sentMessage) {\n super(nackText(normaliseErrorCodes(receivedMessage)));\n this.receivedMessage = receivedMessage;\n this.sentMessage = sentMessage;\n this.name = 'ConnectNackError';\n }\n /**\n * The NACK's `MESSAGE_TYPE`: `MSG_NACK`, `LOGON_NACK`, `INVALID_INDEX_NACK`, or `EVENT_NACK` when\n * `rejectEventNack` is set.\n */\n get messageType() {\n var _a;\n return (_a = this.receivedMessage) === null || _a === void 0 ? void 0 : _a.MESSAGE_TYPE;\n }\n /** The NACK's `ERROR` entries. */\n get errors() {\n var _a;\n return Array.isArray((_a = this.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) ? this.receivedMessage.ERROR : [];\n }\n /** The NACK's `WARNING` entries. */\n get warnings() {\n var _a;\n return Array.isArray((_a = this.receivedMessage) === null || _a === void 0 ? void 0 : _a.WARNING) ? this.receivedMessage.WARNING : [];\n }\n /** The `CODE` of the first `ERROR` entry. */\n get code() {\n var _a;\n return (_a = this.errors[0]) === null || _a === void 0 ? void 0 : _a.CODE;\n }\n}\n/**\n * The connection closed or failed before a reply arrived, or a network error stopped an HTTP request.\n * @public\n */\nexport class ConnectTransportError extends ConnectError {\n get kind() {\n return 'transport';\n }\n constructor(message, { closeCode, closeReason, cause, } = {}) {\n super(message, cause);\n this.name = 'ConnectTransportError';\n this.closeCode = closeCode;\n this.closeReason = closeReason;\n }\n}\n/**\n * An HTTP request failed with a non-2xx status.\n * @public\n */\nexport class ConnectHttpError extends ConnectError {\n get kind() {\n return 'http';\n }\n constructor(\n /** The HTTP status code. */\n status, \n /** The HTTP status text. */\n statusText = '', \n /** The response body, parsed as JSON when it is JSON. It may hold a Genesis NACK. */\n body) {\n super(`HTTP error: ${status} ${statusText}`.trim());\n this.status = status;\n this.statusText = statusText;\n this.body = body;\n this.name = 'ConnectHttpError';\n }\n}\n/**\n * No reply arrived within the request's timeout.\n * @public\n */\nexport class ConnectTimeoutError extends ConnectError {\n get kind() {\n return 'timeout';\n }\n constructor(\n /** The timeout that elapsed, in milliseconds. */\n timeout) {\n super(`Request timed out after ${timeout} ms`);\n this.timeout = timeout;\n this.name = 'ConnectTimeoutError';\n }\n}\n/**\n * The request's `AbortSignal` aborted before a reply arrived.\n * @public\n */\nexport class ConnectAbortError extends ConnectError {\n get kind() {\n return 'abort';\n }\n constructor(\n /** The signal's abort reason. */\n reason) {\n super('Request aborted');\n this.reason = reason;\n this.name = 'ConnectAbortError';\n }\n}\nconst RETRYABLE_STATUSES = new Set([\n StatusCodes.REQUEST_TIMEOUT,\n StatusCodes.TOO_MANY_REQUESTS,\n StatusCodes.INTERNAL_SERVER_ERROR,\n StatusCodes.BAD_GATEWAY,\n StatusCodes.SERVICE_UNAVAILABLE,\n StatusCodes.GATEWAY_TIMEOUT,\n]);\n// Genesis maps deterministic failures such as DUPLICATE_KEY to 500, so a NACK's 500 is final.\nconst RETRYABLE_NACK_STATUSES = new Set([\n StatusCodes.REQUEST_TIMEOUT,\n StatusCodes.TOO_MANY_REQUESTS,\n StatusCodes.SERVICE_UNAVAILABLE,\n StatusCodes.GATEWAY_TIMEOUT,\n]);\nconst TRANSIENT_ERROR_CODES = {\n UNAVAILABLE: StatusCodes.SERVICE_UNAVAILABLE,\n OPERATION_TIMEOUT: StatusCodes.REQUEST_TIMEOUT,\n MAX_LOGON_LIMIT: StatusCodes.TOO_MANY_REQUESTS,\n};\n// Read by shape, not instanceof, so errors from another copy of this package are understood too.\nconst nackOf = (error) => {\n var _a;\n const source = error;\n const nack = ((_a = source === null || source === void 0 ? void 0 : source.receivedMessage) !== null && _a !== void 0 ? _a : source === null || source === void 0 ? void 0 : source.body);\n return Array.isArray(nack === null || nack === void 0 ? void 0 : nack.ERROR) ? nack : undefined;\n};\nconst statusOf = (entry) => {\n var _a;\n const status = Number.parseInt(String((_a = entry === null || entry === void 0 ? void 0 : entry.STATUS_CODE) !== null && _a !== void 0 ? _a : entry === null || entry === void 0 ? void 0 : entry.CODE), 10);\n return Number.isFinite(status) ? status : TRANSIENT_ERROR_CODES[String(entry === null || entry === void 0 ? void 0 : entry.CODE)];\n};\n/**\n * Whether a request failed for a transient reason, so sending it again may succeed: a closed\n * connection, a network error, a timeout, an HTTP 408, 429, 500, 502, 503 or 504 without a Genesis\n * NACK, or a NACK whose errors are all 408, 429, 503 or 504, such as `UNAVAILABLE`.\n * @remarks\n * Other NACKs, aborts and other HTTP statuses are not retryable. A NACK without a status on every\n * error falls back to the HTTP status. Retry only idempotent requests: a commit that timed out may\n * still have been applied.\n * @param error - The error a request rejected with.\n * @public\n */\nexport function isRetryable(error) {\n var _a, _b;\n const kind = error === null || error === void 0 ? void 0 : error.kind;\n if (kind === 'transport' || kind === 'timeout') {\n return true;\n }\n const statuses = ((_b = (_a = nackOf(error)) === null || _a === void 0 ? void 0 : _a.ERROR) !== null && _b !== void 0 ? _b : []).map(statusOf);\n if (statuses.length && statuses.every((status) => status !== undefined)) {\n return statuses.every((status) => RETRYABLE_NACK_STATUSES.has(status));\n }\n const status = error === null || error === void 0 ? void 0 : error.status;\n return typeof status === 'number' && RETRYABLE_STATUSES.has(status);\n}\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 { 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","var DefaultHttpTransport_1;\nimport { __decorate, __param } from \"tslib\";\nimport { DI } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\nimport { ConnectHttpError, ConnectNackError, ConnectTransportError } from './connect.errors';\nimport { normaliseErrorCodes } from './errorCodes';\nimport { Http } from './http';\nimport { EventMessageType, MessageBuilder } from './message';\nimport { isNetworkFailure } from './networkFailure';\nimport { abortedBeforeSend, isRejectedNack, settleWithin } from './requestLifecycle';\n/**\n * The default implementation of the `HttpTransport` interface.\n * @internal\n */\nlet DefaultHttpTransport = DefaultHttpTransport_1 = class DefaultHttpTransport {\n constructor(http, messageBuilder) {\n this.http = http;\n this.messageBuilder = messageBuilder;\n }\n toHttpHost(host) {\n // guard against a missing host (e.g. before the socket has connected, or mock connections\n // in tests) so callers never hit `Cannot read properties of undefined (reading 'startsWith')`\n if (!host) {\n return '';\n }\n let normalised = host;\n // converts a ws host to an http one, e.g. when a consumer forces HTTP mode but\n // configures the api host as a ws url\n if (normalised.startsWith('ws')) {\n normalised = normalised.replace('ws', 'http');\n }\n if (!normalised.endsWith('/')) {\n normalised = normalised.concat('/');\n }\n return normalised;\n }\n post(host, message, options) {\n return this.call(message, options, (init) => this.http.post(DefaultHttpTransport_1.getUrl(host, message), Object.assign(Object.assign({}, init), { body: DefaultHttpTransport_1.getBody(message), headers: this.messageBuilder.createHTTPHeadersFromMessage(message) })));\n }\n get(host, message, options) {\n return this.call(message, options, (init) => this.http.get(DefaultHttpTransport_1.getUrl(host, message), Object.assign(Object.assign({}, init), { headers: this.messageBuilder.createHTTPHeadersFromMessage(message) })));\n }\n requestServer(host, requestMessage, options) {\n // REQUEST_SERVER messages use the GET method in HTTP mode.\n // GET requests cannot have a body, so we convert REQUEST and DETAILS params to a query string.\n let url = DefaultHttpTransport_1.getUrl(host, requestMessage);\n const queryParts = [];\n if (requestMessage.REQUEST && Object.keys(requestMessage.REQUEST).length > 0) {\n Object.keys(requestMessage.REQUEST).forEach((key) => {\n const value = requestMessage.REQUEST[key];\n if (value !== undefined && value !== null && !Number.isNaN(value)) {\n // Server expects REQUEST.FIELD_NAME=value format.\n // Using dot notation which the server converts internally.\n queryParts.push(`REQUEST.${key}=${encodeURIComponent(String(value))}`);\n }\n });\n }\n // Note: Server expects these as plain parameters (e.g., MAX_ROWS=250).\n // The server converts them to DETAILS.FIELD_NAME internally.\n if (requestMessage.DETAILS) {\n Object.keys(requestMessage.DETAILS).forEach((key) => {\n const value = requestMessage.DETAILS[key];\n if (value !== undefined && value !== null && !Number.isNaN(value)) {\n queryParts.push(`${key}=${encodeURIComponent(String(value))}`);\n }\n });\n }\n if (queryParts.length > 0) {\n url = `${url}?${queryParts.join('&')}`;\n }\n logger.debug(`HTTP transport - REQUEST_SERVER GET URL: ${url}`);\n return this.call(requestMessage, options, (init) => this.http.get(url, Object.assign(Object.assign({}, init), { headers: this.messageBuilder.createHTTPHeadersFromMessage(requestMessage) })));\n }\n // The router sends NACKs as 200 unless strictHttpStatusCode is on; reject them as the socket does.\n call(message, options, request) {\n const aborted = abortedBeforeSend(options === null || options === void 0 ? void 0 : options.signal);\n if (aborted) {\n return aborted;\n }\n const controller = (options === null || options === void 0 ? void 0 : options.signal) || (options === null || options === void 0 ? void 0 : options.timeout) ? new AbortController() : undefined;\n const response = request(controller ? { signal: controller.signal } : {}).then((reply) => {\n normaliseErrorCodes(reply);\n if (isRejectedNack(reply)) {\n throw new ConnectNackError(reply, message);\n }\n return reply;\n }, (error) => {\n throw DefaultHttpTransport_1.asConnectError(error);\n });\n return settleWithin(response, options, () => controller === null || controller === void 0 ? void 0 : controller.abort());\n }\n static asConnectError(error) {\n if (error instanceof ConnectHttpError) {\n normaliseErrorCodes(error.body);\n }\n return isNetworkFailure(error)\n ? new ConnectTransportError(error.message, { cause: error })\n : error;\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};\nDefaultHttpTransport = DefaultHttpTransport_1 = __decorate([\n __param(0, Http),\n __param(1, MessageBuilder)\n], DefaultHttpTransport);\nexport { DefaultHttpTransport };\n/**\n * The DI token for the `HttpTransport` interface.\n * @internal\n */\nexport const HttpTransport = DI.createInterface((x) => x.singleton(DefaultHttpTransport));\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, EMPTY, exhaustMap, filter, finalize, from, interval, map, of, retry, scan, switchMap, takeWhile, timer, } from 'rxjs';\nimport { MetaCache } from '../metadata';\nimport { Session } from '../session';\nimport { logger } from '../utils';\nimport { isRetryable } from './connect.errors';\nimport { Http } from './http';\nimport { HttpConnectConfig } from './http.connect.types';\nimport { HttpTransport } from './httpTransport';\nimport { buildRequestCacheKey, EventMessageType, MessageBuilder, MessageType, } from './message';\nimport { abortedBeforeSend, InFlightRequests, rejectEventNackIfAsked, settleWithin, } from './requestLifecycle';\nimport { resourceNameOf, ScdbStreamDecoder } from './scdbStreamDecoder';\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, transport) {\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.transport = transport;\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 this.inFlightRequests = new InFlightRequests();\n this.inFlightMetadata = new InFlightRequests();\n /** Guards the one-time warning when a columnar encoding is stripped from a dataserver HTTP call. */\n this.dataserverEncodingStrippedWarned = false;\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 // The router keys HTTP subscriptions by session, so each refresh invalidates every DATA_LOGON.\n this.sessionGeneration = 0;\n this.scdbDecoder = new ScdbStreamDecoder(this.metaCache);\n this.scdbDecoder.setMetadataRefresher((resourceName) => this.getMetadata(resourceName, false));\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 // Streams are kept: each one logs on again once the session is back.\n this.isConnected = false;\n let result;\n try {\n 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 }\n catch (error) {\n logger.debug('Could not refresh the session: ', error);\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.sessionGeneration += 1;\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, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.withinDeadline(options, (signal) => __awaiter(this, void 0, void 0, function* () {\n yield this.waitForOngoingRefresh('Cannot send message: session refresh failed');\n const post = () => this.transport.post(this.host, message, { signal });\n return AUTH_MESSAGES.has(message === null || message === void 0 ? void 0 : message.MESSAGE_TYPE)\n ? post()\n : this.retryAfterSessionRefresh(post);\n }));\n });\n }\n // One deadline covers the wait for a session refresh, the send and the resend after a 401.\n withinDeadline(options, run) {\n const aborted = abortedBeforeSend(options === null || options === void 0 ? void 0 : options.signal);\n if (aborted) {\n return aborted;\n }\n const controller = new AbortController();\n return settleWithin(run(controller.signal), options, () => controller.abort());\n }\n waitForOngoingRefresh(failureMessage) {\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(failureMessage);\n }\n }\n });\n }\n retryAfterSessionRefresh(send) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n return yield send();\n }\n catch (error) {\n if (!isUnauthorized(error) || !(yield this.handleSessionRefresh())) {\n throw error;\n }\n return send();\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 // converts the host to an http one if someone is using the feature flag to\n // force http mode but set the api host as a ws url, and ensures a trailing slash\n this.host = this.transport.toHttpHost(host);\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 this.stripDataserverColumnarEncoding(snapshotMessage);\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 var _a, _b;\n const streamMessage = this.messageBuilder.createDataLogonMessage(resourceName, params);\n this.stripDataserverColumnarEncoding(streamMessage);\n logger.debug(`HTTP MODE - ${streamMessage.MESSAGE_TYPE} (stream) message created -> `, streamMessage);\n const SOURCE_REF = streamMessage.SOURCE_REF;\n const POLLING_FREQUENCY = ((_b = (_a = this.config.polling) === null || _a === void 0 ? void 0 : _a.POLLING_INTERVAL_MAP) === null || _b === void 0 ? void 0 : _b[resourceName]) ||\n this.config.polling.POLLING_FREQUENCY;\n this.streams.set(SOURCE_REF, {\n SOURCE_REF,\n POLLING_FREQUENCY: new BehaviorSubject(POLLING_FREQUENCY),\n RESOURCE_NAME: resourceName,\n });\n const interval$ = this.streams.get(SOURCE_REF).POLLING_FREQUENCY;\n let loggedOnIn = this.sessionGeneration;\n let subscriptionLost = false;\n let justLoggedOn = true;\n const logOnAgain = () => __awaiter(this, void 0, void 0, function* () {\n const generation = this.sessionGeneration;\n const reply = yield this.send(streamMessage).catch((error) => {\n // Still subscribed: the subscription's session survived the refresh.\n if ((error === null || error === void 0 ? void 0 : error.status) !== StatusCodes.CONFLICT)\n throw error;\n return undefined;\n });\n loggedOnIn = generation;\n subscriptionLost = false;\n justLoggedOn = true;\n return reply;\n });\n // Decided after any refresh in flight, since the refresh may change the session.\n const nextReply = () => __awaiter(this, void 0, void 0, function* () {\n yield this.waitForOngoingRefresh('Cannot get message: session refresh failed');\n if (subscriptionLost || loggedOnIn !== this.sessionGeneration) {\n return logOnAgain();\n }\n const reply = yield this.getMessage(streamMessage);\n justLoggedOn = false;\n return reply;\n });\n // A subscription that vanished between polls, e.g. after another tab refreshed the session,\n // is logged on again; one missing straight after a DATA_LOGON is gone for good.\n const onSubscriptionLost = () => {\n if (justLoggedOn)\n return false;\n subscriptionLost = true;\n return true;\n };\n const stream = concat(\n // initial DATA_LOGON needs to be a POST\n from(this.send(streamMessage)), \n // subsequent GETs with the same SOURCE_REF\n interval$.pipe(switchMap((ms) => interval(ms)), takeWhile(() => this.streams.has(SOURCE_REF)), filter(() => document.visibilityState === 'visible'), exhaustMap(() => from(nextReply())), filter((reply) => reply !== undefined), retry({\n count: DefaultHttpConnect_1.MAX_RETRIES,\n resetOnSuccess: true,\n delay: (error, retryCount) => this.pollRetryDelay(error, retryCount, SOURCE_REF, onSubscriptionLost),\n }))).pipe(takeWhile(() => this.streams.has(SOURCE_REF)), // ensure it stops emitting once removed\n finalize(() => {\n logger.debug(`Terminating stream for ${resourceName} - ${SOURCE_REF}`);\n // Not registered once the server has dropped it (404) or the connection was closed.\n if (this.streams.has(SOURCE_REF)) {\n this.dataLogoff(SOURCE_REF).catch((error) => logger.debug(`DATA_LOGOFF failed for ${SOURCE_REF}`, error));\n }\n }));\n this.streams.get(SOURCE_REF).STREAM = stream;\n return stream;\n }\n // Completing without emitting ends the stream; throwing errors it.\n pollRetryDelay(error, retryCount, sourceRef, onSubscriptionLost) {\n const status = error === null || error === void 0 ? void 0 : error.status;\n logger.error(`Retry ${retryCount}/${DefaultHttpConnect_1.MAX_RETRIES}: status ${status !== null && status !== void 0 ? status : 'unknown'}`, error);\n // the router no longer has the subscription\n if (status === StatusCodes.NOT_FOUND) {\n if (onSubscriptionLost()) {\n return of(true);\n }\n this.streams.delete(sourceRef);\n return EMPTY;\n }\n if (isUnauthorized(error)) {\n return from(this.handleSessionRefresh()).pipe(map((refreshed) => {\n if (!refreshed) {\n throw error;\n }\n return refreshed;\n }));\n }\n if (!isRetryable(error)) {\n throw error;\n }\n return timer(DefaultHttpConnect_1.RETRY_DELAY_MS);\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 yield this.waitForOngoingRefresh('Cannot get message: session refresh failed');\n return this.transport.get(this.host, message);\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, options) {\n if (useCache) {\n if (this.metaCache.hasMetadataFor(resourceName)) {\n logger.debug(`HTTP MODE - Cached metadata retrieved for ${resourceName}`);\n return this.metaCache.getMetadataFor(resourceName);\n }\n }\n if (this.inFlightMetadata.has(resourceName)) {\n logger.debug(`HTTP MODE - In-flight metadata request collapsed for ${resourceName}`);\n }\n return this.inFlightMetadata.join(resourceName, (signal) => this.fetchMetadata(resourceName, signal), options);\n });\n }\n fetchMetadata(resourceName, signal) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\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 const response = yield this.send(metaRequestMessage, true, { signal });\n const details = (_a = response === null || response === void 0 ? void 0 : response.DETAILS) !== null && _a !== void 0 ? _a : {};\n if (Object.keys(details).length) {\n this.metaCache.setMetadataFor(resourceName, details);\n }\n return 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_1, params_1) {\n return __awaiter(this, arguments, void 0, function* (resourceName, params, useCache = false, options) {\n const cacheKey = buildRequestCacheKey(resourceName, params);\n if (useCache && this.metaCache.hasRequestFor(cacheKey)) {\n logger.debug(`HTTP MODE - Cached request response retrieved for ${cacheKey}`);\n return this.metaCache.getRequestFor(cacheKey);\n }\n if (this.inFlightRequests.has(cacheKey)) {\n logger.debug(`HTTP MODE - In-flight request collapsed for ${cacheKey}`);\n }\n const response = yield this.inFlightRequests.join(cacheKey, (signal) => this.sendRequest(resourceName, params, signal), options);\n if (useCache && response) {\n this.metaCache.setRequestFor(cacheKey, response);\n }\n return response;\n });\n }\n sendRequest(resourceName, params, signal) {\n return __awaiter(this, void 0, void 0, function* () {\n const requestMessage = this.messageBuilder.createRequestMessage(resourceName, params);\n const scdbResourceName = resourceNameOf(requestMessage);\n this.scdbDecoder.prepareRequest(requestMessage);\n logger.debug(`HTTP MODE! - ${requestMessage.MESSAGE_TYPE} (request server) message created -> `, requestMessage);\n yield this.waitForOngoingRefresh('Cannot send request: session refresh failed');\n // REQUEST_SERVER messages use the GET method in HTTP mode; the transport encodes the\n // REQUEST/DETAILS params as a query string since GET requests cannot carry a body.\n const response = yield this.retryAfterSessionRefresh(() => this.transport.requestServer(this.host, requestMessage, { signal }));\n this.scdbDecoder.onMessage(response, scdbResourceName);\n return response;\n });\n }\n /**\n * Removes a negotiated columnar `ENCODING` from a dataserver HTTP message. Dataserver columnar\n * encodings batch updates across a streamed connection in a way the HTTP poll/snapshot model\n * cannot reconstruct, so dataserver-over-HTTP always uses row mode (req/rep-over-HTTP is fine and\n * is handled separately). Warns once if anything was stripped so misconfiguration is visible.\n */\n stripDataserverColumnarEncoding(message) {\n const details = message === null || message === void 0 ? void 0 : message.DETAILS;\n if (!(details === null || details === void 0 ? void 0 : details.ENCODING))\n return;\n if (!this.dataserverEncodingStrippedWarned) {\n this.dataserverEncodingStrippedWarned = true;\n logger.warn(`Columnar encoding '${details.ENCODING}' is not supported for dataserver requests over HTTP; ` +\n `using row mode. Use a WebSocket connection for columnar dataserver streams.`);\n }\n delete details.ENCODING;\n }\n getAvailableResources(params_1) {\n return __awaiter(this, arguments, void 0, function* (params, useCache = true) {\n if (useCache) {\n if (this.metaCache.hasResources()) {\n logger.debug(`HTTP MODE - Cached resources retrieved`);\n return this.metaCache.getResources();\n }\n }\n const requestMessage = this.messageBuilder.createResourcesMessage(params);\n logger.debug(`HTTP MODE! - ${requestMessage.MESSAGE_TYPE} (getResources) message created -> `, requestMessage);\n const resources = yield this.send(requestMessage);\n this.metaCache.setResources(resources);\n return resources;\n });\n }\n commitEvent(eventName, params, options) {\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, true, options).then((reply) => {\n this.maybeTurbo(eventName, reply);\n return rejectEventNackIfAsked(reply, commitMessage, options);\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};\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 __param(6, HttpTransport)\n], DefaultHttpConnect);\nexport { DefaultHttpConnect };\nconst isUnauthorized = (error) => (error === null || error === void 0 ? void 0 : error.status) === StatusCodes.UNAUTHORIZED;\n// A 401 on these is the answer itself, not an expired session to refresh.\nconst AUTH_MESSAGES = new Set([\n EventMessageType.EVENT_LOGIN_AUTH,\n EventMessageType.EVENT_LOGOUT,\n EventMessageType.EVENT_CHANGE_USER_PASSWORD,\n EventMessageType.EVENT_SELF_SERVICE_PASSWORD_RESET,\n EventMessageType.EVENT_PASSWORD_RESET_ACTION,\n]);\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, FORCE_HTTP_REQREP, 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 { withErrorCode } from '../utils/error-code';\nimport { ConnectNackError } from './connect.errors';\nimport { ConnectEventsEmitter } from './connect.events';\nimport { ConnectConfig } from './connect.types';\nimport { HttpConnect } from './http.connect';\nimport { HttpTransport } from './httpTransport';\nimport { buildRequestCacheKey, EventMessageType, MessageBuilder, } from './message';\nimport { InFlightRequests, rejectEventNackIfAsked } from './requestLifecycle';\nimport { resourceNameOf, ScdbStreamDecoder } from './scdbStreamDecoder';\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, transport) {\n var _a, _b, _c;\n this.socket = socket;\n this.messageBuilder = messageBuilder;\n this.metaCache = metaCache;\n this.events = events;\n this.config = config;\n this.transport = transport;\n this.isWorking = false;\n this.inFlightMetadata = new InFlightRequests();\n this.inFlightRequests = new InFlightRequests();\n // One app-level flag opts every dataserver subscription into a columnar encoding, negotiated\n // transparently. Request side here; the decode side is handled in the socket.\n const encoding = (_a = this.config.connect) === null || _a === void 0 ? void 0 : _a.dataserverEncoding;\n if (encoding) {\n this.messageBuilder.scdbEncoding = encoding;\n }\n this.httpScdbDecoder = new ScdbStreamDecoder(this.metaCache);\n const refresh = (resourceName) => this.getMetadata(resourceName, false);\n (_c = (_b = this.socket).setScdbMetadataRefresher) === null || _c === void 0 ? void 0 : _c.call(_b, refresh);\n this.httpScdbDecoder.setMetadataRefresher(refresh);\n }\n httpMode() {\n return false;\n }\n /**\n * Whether request/reply and event traffic should be sent over HTTP while the primary\n * connection stays on the WebSocket. Toggled by the `FORCE_HTTP_REQREP` env var or the\n * `?feature.forceHttpReqRep` URL flag. Streaming (`stream`/`snapshot`) always uses the socket.\n * @internal\n */\n get useHttpReqRep() {\n return FORCE_HTTP_REQREP === 'true' || isFeatureActivated('forceHttpReqRep');\n }\n /**\n * The `http(s)://` host derived from the socket's (`ws(s)://`) host, used when routing\n * request/reply and event traffic over HTTP.\n * @internal\n */\n get httpHost() {\n return this.transport.toHttpHost(this.socket.host);\n }\n requestOverHttp(requestMessage, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const resourceName = resourceNameOf(requestMessage);\n this.httpScdbDecoder.prepareRequest(requestMessage);\n const response = yield this.transport.requestServer(this.httpHost, requestMessage, options);\n this.httpScdbDecoder.onMessage(response, resourceName);\n return response;\n });\n }\n /**\n * Sends an event/commit or metadata-style message, routing it over HTTP (POST) when\n * `useHttpReqRep` is active and falling back to the WebSocket otherwise.\n * @internal\n */\n sendReqRep(message, options) {\n return this.useHttpReqRep\n ? this.transport.post(this.httpHost, message, options)\n : this.socket.send(message, true, options);\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, options) {\n return this.socket.send(message, needsHandling, options);\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 requestTime = performance.now();\n let firstMessageTime = null;\n const resource = this.socket.sendForStream(msg, (...args) => {\n if (firstMessageTime === null) {\n firstMessageTime = performance.now();\n logger.debug(`[stream:${resourceName}] time to initial response: ${(firstMessageTime - requestTime).toFixed(2)}ms`);\n }\n onMessage(...args);\n }, (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, options) {\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 if (this.inFlightMetadata.has(resourceName)) {\n logger.debug(`In-flight metadata request collapsed for ${resourceName}`);\n }\n return this.inFlightMetadata.join(resourceName, (signal) => this.fetchMetadata(resourceName, signal), this.callerOptions(options));\n });\n }\n fetchMetadata(resourceName, signal) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\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.sendReqRep(metaRequestMessage, { timeout: 0, signal });\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(withErrorCode(`Metadata request failed for ${resourceName}`, e), e);\n throw asError(e);\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.sendReqRep(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(withErrorCode(`JSON schema request failed for ${resourceName}`, e), e);\n }\n finally {\n this.isWorking = false;\n }\n return jsonSchema;\n });\n }\n /**\n * How long one caller of a shared request waits: its own timeout, else `requestTimeout` on the\n * socket. The shared send itself has no timeout.\n */\n callerOptions(options) {\n var _a, _b;\n const defaultTimeout = this.useHttpReqRep ? undefined : (_a = this.config.connect) === null || _a === void 0 ? void 0 : _a.requestTimeout;\n return { timeout: (_b = options === null || options === void 0 ? void 0 : options.timeout) !== null && _b !== void 0 ? _b : defaultTimeout, signal: options === null || options === void 0 ? void 0 : options.signal };\n }\n request(resourceName_1, params_1) {\n return __awaiter(this, arguments, void 0, function* (resourceName, params, useCache = false, options) {\n const cacheKey = buildRequestCacheKey(resourceName, params);\n if (useCache && this.metaCache.hasRequestFor(cacheKey)) {\n logger.debug(`Cached request response retrieved for ${cacheKey}`);\n return this.metaCache.getRequestFor(cacheKey);\n }\n if (this.inFlightRequests.has(cacheKey)) {\n logger.debug(`In-flight request collapsed for ${cacheKey}`);\n }\n const response = yield this.inFlightRequests.join(cacheKey, (signal) => this.sendRequest(resourceName, params, signal), this.callerOptions(options));\n if (useCache && response) {\n this.metaCache.setRequestFor(cacheKey, response);\n }\n return response;\n });\n }\n sendRequest(resourceName, params, signal) {\n const requestMessage = this.messageBuilder.createRequestMessage(resourceName, params);\n logger.debug(`${requestMessage.MESSAGE_TYPE} (request server) message created -> `, requestMessage);\n const options = { timeout: 0, signal };\n // REQUEST_SERVER messages go out as a GET (query-string encoded) over HTTP, mirroring the\n // HTTP-only Connect, otherwise they travel over the socket.\n return this.useHttpReqRep\n ? this.requestOverHttp(requestMessage, options)\n : this.socket.send(requestMessage, true, options);\n }\n getAvailableResources(params_1) {\n return __awaiter(this, arguments, void 0, function* (params, useCache = true) {\n if (useCache) {\n if (this.metaCache.hasResources()) {\n logger.debug(`Cached resources retrieved`);\n return this.metaCache.getResources();\n }\n }\n const requestMessage = this.messageBuilder.createResourcesMessage(params);\n logger.debug(`${requestMessage.MESSAGE_TYPE} (resources) message created -> `, requestMessage);\n const resources = yield this.sendReqRep(requestMessage);\n this.metaCache.setResources(resources);\n return resources;\n });\n }\n commitEvent(eventName, params, options) {\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.sendReqRep(msg, options);\n this.events.onCommitEvent(eventName, msg);\n return promise.then((response) => {\n this.events.onCommitResponseEvent(eventName, response);\n return rejectEventNackIfAsked(response, msg, options);\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 __param(5, HttpTransport)\n], DefaultConnect);\nexport { DefaultConnect };\nconst isNackShaped = (error) => typeof (error === null || error === void 0 ? void 0 : error.receivedMessage) === 'object';\nconst asError = (error) => {\n if (error instanceof Error)\n return error;\n if (isNackShaped(error))\n return new ConnectNackError(error.receivedMessage, error.sentMessage);\n return new Error(String(error));\n};\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","/**\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 is deliberately unset so the server's HEARTBEAT_INTERVAL_SECONDS from the\n // login ack can apply; the socket falls back to 10s before login or when the server sends 0.\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","const stringifyCodes = (entries) => {\n if (!Array.isArray(entries))\n return;\n entries.forEach((entry) => {\n if (typeof (entry === null || entry === void 0 ? void 0 : entry.CODE) === 'number')\n entry.CODE = String(entry.CODE);\n if (typeof (entry === null || entry === void 0 ? void 0 : entry.STATUS_CODE) === 'number')\n entry.STATUS_CODE = String(entry.STATUS_CODE);\n });\n};\n/**\n * Converts the numeric `CODE`s the router puts on its own errors, such as `404`, to strings, as\n * `MessageError` declares them. Changes the message in place and returns it.\n */\nexport const normaliseErrorCodes = (message) => {\n const { ERROR, WARNING } = (message !== null && message !== void 0 ? message : {});\n stringifyCodes(ERROR);\n stringifyCodes(WARNING);\n return message;\n};\n","import { __awaiter, __decorate, __param } from \"tslib\";\nimport { JSONSerializer } from '@genesislcap/foundation-utils';\nimport { DI } from '@microsoft/fast-foundation';\nimport { ConnectHttpError } from './connect.errors';\nimport { markNetworkFailure } from './networkFailure';\nconst readBody = (response) => __awaiter(void 0, void 0, void 0, function* () {\n const text = yield response.text().catch(() => undefined);\n if (!text) {\n return undefined;\n }\n try {\n return JSON.parse(text);\n }\n catch (_a) {\n return text;\n }\n});\nconst createHttpError = (response) => __awaiter(void 0, void 0, void 0, function* () { return new ConnectHttpError(response.status, response.statusText, yield readBody(response)); });\n/** HTTP status for a successful conditional request whose resource is unchanged. */\nconst HTTP_STATUS_NOT_MODIFIED = 304;\n/**\n * The default implementation of the Http interface.\n *\n * @remarks\n * Caching is delegated to the browser's HTTP cache. Requests use the default `fetch` cache mode, so\n * a response carrying an `ETag` (and a storable `Cache-Control`) is cached, revalidated with\n * `If-None-Match`, and replayed by the browser automatically — the client keeps no cache of its own.\n * Callers that send their own conditional headers receive the raw `304 Not Modified` (resolved as no\n * body) instead of an error, and can inspect any response via {@link HttpRequestInit.onResponse}.\n *\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' })).catch((error) => {\n throw markNetworkFailure(error);\n });\n return this.handleResponse(response, requestInit);\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' })).catch((error) => {\n throw markNetworkFailure(error);\n });\n return this.handleResponse(response, requestInit);\n });\n }\n handleResponse(response, requestInit) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (response.redirected) {\n window.location.href = response.url;\n return new Promise(() => { });\n }\n // Expose response metadata (status, headers such as ETag) before the body is consumed.\n (_a = requestInit.onResponse) === null || _a === void 0 ? void 0 : _a.call(requestInit, response);\n // 304 Not Modified is a successful conditional response with no body; surface it via\n // onResponse rather than treating it as an error, and return no data.\n if (response.status === HTTP_STATUS_NOT_MODIFIED) {\n return undefined;\n }\n if (!response.ok) {\n throw yield 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 { __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[\"INVALID_INDEX_NACK\"] = \"INVALID_INDEX_NACK\";\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 = {}));\nconst sortKeys = (value) => {\n if (Array.isArray(value))\n return value.map(sortKeys);\n // Only recurse into plain objects — class instances (Date, etc.) have custom\n // serialization that JSON.stringify must reach via toJSON.\n if (value && typeof value === 'object' && value.constructor === Object) {\n return Object.keys(value)\n .sort()\n .reduce((acc, key) => {\n acc[key] = sortKeys(value[key]);\n return acc;\n }, {});\n }\n return value;\n};\n/**\n * Builds a stable cache key for a REQ_ request from its resource name and params.\n * Object keys are sorted so that semantically equivalent params produce the same key\n * regardless of the order in which callers construct them.\n * @internal\n */\nexport function buildRequestCacheKey(resourceName, params) {\n return `${resourceName}::${JSON.stringify(sortKeys(params !== null && params !== void 0 ? params : {}))}`;\n}\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) => {\n var _a, _b;\n return String((_a = error.CODE) !== null && _a !== void 0 ? _a : '').includes(`${code}`) ||\n String((_b = error.STATUS_CODE) !== null && _b !== void 0 ? _b : '').includes(`${code}`);\n })\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 var _a;\n const encoding = (_a = params === null || params === void 0 ? void 0 : params.ENCODING) !== null && _a !== void 0 ? _a : this.scdbEncoding;\n return {\n SOURCE_REF: this.uuid.createId(),\n MESSAGE_TYPE: EventMessageType.DATA_LOGON,\n DETAILS: Object.assign(Object.assign({ DATASOURCE_NAME: resourceName }, params), (encoding ? { ENCODING: encoding } : {})),\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","const networkFailures = new WeakSet();\n/**\n * Marks the `TypeError` `fetch` rejects with when a request never got a response, so it can be\n * told apart from other `TypeError`s such as bugs in a custom `Http` or serializer.\n */\nexport const markNetworkFailure = (error) => {\n if (error instanceof TypeError) {\n networkFailures.add(error);\n }\n return error;\n};\nexport const isNetworkFailure = (error) => error instanceof TypeError && networkFailures.has(error);\n","import { ConnectAbortError, ConnectNackError, ConnectTimeoutError, } from './connect.errors';\nimport { MessageType } from './message';\nconst EVENT_NACK = 'EVENT_NACK';\n// setTimeout fires almost at once for delays it cannot hold.\nconst MAX_TIMEOUT = 2147483647;\nconst REJECTED_NACKS = new Set([\n MessageType.MSG_NACK,\n MessageType.LOGON_NACK,\n MessageType.INVALID_INDEX_NACK,\n]);\nexport const isRejectedNack = (message) => REJECTED_NACKS.has(message === null || message === void 0 ? void 0 : message.MESSAGE_TYPE);\n/**\n * Settles like `promise` unless `timeout` elapses or `signal` aborts first, then rejects and calls\n * `onCancel` so the caller can release what the promise was waiting on.\n */\nexport function settleWithin(promise, { timeout, signal } = {}, onCancel) {\n const hasTimeout = timeout > 0 && Number.isFinite(timeout);\n if (!hasTimeout && !signal) {\n return promise;\n }\n return new Promise((resolve, reject) => {\n let timer;\n const onAbort = () => cancel(new ConnectAbortError(signal.reason));\n const cleanUp = () => {\n clearTimeout(timer);\n signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', onAbort);\n };\n const cancel = (error) => {\n cleanUp();\n onCancel === null || onCancel === void 0 ? void 0 : onCancel(error);\n reject(error);\n };\n promise.then((value) => {\n cleanUp();\n resolve(value);\n }, (error) => {\n cleanUp();\n reject(error);\n });\n if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n onAbort();\n return;\n }\n signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', onAbort, { once: true });\n if (hasTimeout) {\n timer = setTimeout(() => cancel(new ConnectTimeoutError(timeout)), Math.min(timeout, MAX_TIMEOUT));\n }\n });\n}\nexport const abortedBeforeSend = (signal) => (signal === null || signal === void 0 ? void 0 : signal.aborted) ? Promise.reject(new ConnectAbortError(signal.reason)) : undefined;\nexport const rejectEventNackIfAsked = (response, sentMessage, options) => {\n if ((options === null || options === void 0 ? void 0 : options.rejectEventNack) && (response === null || response === void 0 ? void 0 : response.MESSAGE_TYPE) === EVENT_NACK) {\n throw new ConnectNackError(response, sentMessage);\n }\n return response;\n};\n/**\n * Shares one in-flight request per key. Each caller's timeout and signal stop only its own wait;\n * the request itself is aborted once every caller has stopped waiting.\n */\nexport class InFlightRequests {\n constructor() {\n this.entries = new Map();\n }\n has(key) {\n return this.entries.has(key);\n }\n join(key, start, options) {\n var _a;\n const aborted = abortedBeforeSend(options === null || options === void 0 ? void 0 : options.signal);\n if (aborted) {\n return aborted;\n }\n const entry = (_a = this.entries.get(key)) !== null && _a !== void 0 ? _a : this.start(key, start);\n entry.waiting += 1;\n return settleWithin(entry.promise, options, () => {\n entry.waiting -= 1;\n if (entry.waiting === 0) {\n this.release(key, entry);\n entry.controller.abort();\n }\n });\n }\n start(key, start) {\n const controller = new AbortController();\n const entry = { controller, waiting: 0, promise: undefined };\n entry.promise = start(controller.signal).finally(() => this.release(key, entry));\n this.entries.set(key, entry);\n return entry;\n }\n release(key, entry) {\n if (this.entries.get(key) === entry) {\n this.entries.delete(key);\n }\n }\n}\n","/* oxlint-disable no-plusplus -- columnar transpose uses index-loop counters */\n/**\n * SCDBJ (JSON-columnar) decoder.\n *\n * The no-WASM peer of the binary `scdbDecoder`. The server sends a `QUERY_UPDATE` whose payload is a\n * plain JSON object (decoded for free by the existing envelope `JSON.parse`); this transposes it back\n * into the legacy `ROW` array of row objects that ag-Grid consumes. Because native `JSON.parse` does\n * the bulk work and only the transpose is JS, this is at parity with row-JSON on a full snapshot and\n * faster on deltas, while being ~2x smaller on the wire (no repeated field-name keys).\n *\n * Wire shape (short keys; see genesis-columnar/docs/scdb-v1.md):\n * { n, r:[rowRef strings], o: opCode | [opCodes], c:[ { i:colId, x?:[presentIdx], v:[values] } ] }\n * `x` omitted => dense column. Values are aligned to the present cells; a `null` entry is an explicit\n * change-to-null. Column ids index the metadata-derived dictionary.\n */\nconst OPS = ['INSERT', 'MODIFY', 'DELETE'];\n/** Transposes the per-column arrays into the supplied per-row target objects (shared core). */\nfunction transpose(payload, dictionary, rows) {\n for (const col of payload.c) {\n const field = dictionary[col.i];\n if (field === undefined)\n throw new Error(`Unknown SCDBJ column id ${col.i}`);\n const idx = col.x;\n const vals = col.v;\n const presentCount = idx ? idx.length : payload.n;\n for (let present = 0; present < presentCount; present++) {\n const rowIndex = idx ? idx[present] : present;\n rows[rowIndex][field] = vals[present]; // a null entry is an explicit change-to-null\n }\n }\n return rows;\n}\n/**\n * Transposes a parsed SCDBJ payload into the legacy dataserver ROW shape:\n * `[{ ...cells, DETAILS: { OPERATION, ROW_REF } }]`, using the column dictionary.\n */\nexport function decodeScdbjToRows(payload, dictionary) {\n const { n, r: refs, o: ops } = payload;\n const opsArr = Array.isArray(ops);\n const rows = new Array(n);\n for (let i = 0; i < n; i++) {\n rows[i] = {\n DETAILS: {\n OPERATION: OPS[opsArr ? ops[i] : ops],\n ROW_REF: refs[i],\n },\n };\n }\n return transpose(payload, dictionary, rows);\n}\n/**\n * Transposes a parsed SCDBJ payload into plain result rows (cells only, no `DETAILS`). Used for\n * req/rep replies, which are full result sets without per-row operation / rowRef semantics.\n */\nexport function decodeScdbjToCells(payload, dictionary) {\n const rows = new Array(payload.n);\n for (let i = 0; i < payload.n; i++)\n rows[i] = {};\n return transpose(payload, dictionary, rows);\n}\n","import { __rest } from \"tslib\";\n/* oxlint-disable no-plusplus -- index-loop counters */\n/**\n * Single entry point the comms socket path uses to turn a columnar QUERY_UPDATE into the legacy\n * `ROW` array of row objects, regardless of negotiated encoding. Downstream (`updateState`, ag-Grid\n * datasources) is unchanged.\n *\n * Wiring (see README):\n * 1. Derive the column dictionary from the resource's metadata (id = index into the ordered field\n * list) and validate it against the server's `DICT_HASH`; the dictionary is NOT sent on the wire.\n * 2. On each `QUERY_UPDATE`, call `decodeColumnarQueryUpdate(msg, dictionary, wasm?)` and use the\n * returned array as `msg.ROW`.\n */\nimport { base64ToBytes } from './base64';\nimport { decodeScdbToRows } from './scdbDecoder';\nimport { decodeScdbjToCells, decodeScdbjToRows } from './scdbjDecoder';\n/**\n * Decodes a QUERY_UPDATE to row objects. Chooses by `ENCODING`:\n * - `SCDB_V1` -> binary blob: WASM decoder when provided (fastest), else pure-JS.\n * - `SCDBJ_V1` -> JSON-columnar transpose.\n * - otherwise -> the message's existing `ROW` array (legacy).\n */\nexport function decodeColumnarQueryUpdate(msg, dictionary, wasm) {\n var _a;\n switch (msg.ENCODING) {\n case 'SCDBJ_V1':\n return decodeScdbjToRows(msg.SCDBJ, dictionary);\n case 'SCDB_V1': {\n const bytes = toBytes(msg.RBUF);\n return wasm ? wasm.decodeToRows(bytes, dictionary) : decodeScdbToRows(bytes, dictionary);\n }\n default:\n return (_a = msg.ROW) !== null && _a !== void 0 ? _a : [];\n }\n}\n/** Normalises an RBUF payload: Uint8Array (msgpack), base64 string or number[] (JSON transports). */\nfunction toBytes(rbuf) {\n if (rbuf instanceof Uint8Array)\n return rbuf;\n if (Array.isArray(rbuf))\n return Uint8Array.from(rbuf);\n if (typeof rbuf === 'string')\n return base64ToBytes(rbuf);\n throw new Error('SCDB_V1 message has no RBUF payload');\n}\n/**\n * Decodes a self-describing columnar req/rep reply (dictionary inline) into plain result rows\n * (cells only, no synthetic `DETAILS`). req/rep replies are full result sets, so unlike a dataserver\n * `QUERY_UPDATE` they carry no per-row operation / rowRef.\n */\nexport function decodeColumnarReply(msg, dictionary) {\n var _a;\n switch (msg.ENCODING) {\n case 'SCDBJ_V1':\n return decodeScdbjToCells(msg.SCDBJ, dictionary);\n case 'SCDB_V1': {\n // Not currently emitted for req/rep; decode then drop the synthetic DETAILS for parity.\n const bytes = toBytes(msg.RBUF);\n return decodeScdbToRows(bytes, dictionary).map((_a) => {\n var { DETAILS } = _a, cells = __rest(_a, [\"DETAILS\"]);\n return cells;\n });\n }\n default:\n return (_a = msg.REPLY) !== null && _a !== void 0 ? _a : [];\n }\n}\n","import { decodeColumnarQueryUpdate, decodeColumnarReply, dictionaryFromMetadata, dictionaryHash, } from '../datasource/scdb';\nimport { logger } from '../utils';\n/** Req/rep requests carry the resource name in their `REQ_`-prefixed `MESSAGE_TYPE`. */\nexport function resourceNameOf(sent) {\n var _a;\n const datasourceName = (_a = sent === null || sent === void 0 ? void 0 : sent.DETAILS) === null || _a === void 0 ? void 0 : _a.DATASOURCE_NAME;\n if (datasourceName)\n return datasourceName;\n const messageType = sent === null || sent === void 0 ? void 0 : sent.MESSAGE_TYPE;\n if (typeof messageType === 'string' && messageType.startsWith('REQ_')) {\n return messageType.slice('REQ_'.length);\n }\n return undefined;\n}\n/**\n * Socket-side adapter that makes the SCDB columnar encodings transparent to all stream consumers.\n *\n * The column dictionary is **derived from resource metadata** (the same metadata the client already\n * holds in `MetaCache`), NOT sent on the wire — for BOTH dataserver and req/rep. The server only\n * stamps the payload with a small `DICT_HASH`; this adapter derives the dictionary from metadata,\n * validates it against that hash, and decodes. The dictionary is resolved **per message from\n * metadata** (not bound to the `LOGON_ACK`/`SOURCE_REF`).\n *\n * - Dataserver: `QUERY_UPDATE` carries no hash, so the expected hash is captured once from\n * `LOGON_ACK` (which the socket consumes and does NOT forward), keyed by resource; the dictionary\n * itself is still derived from metadata per update and decoded in place into `ROW`.\n * - Req/rep: each reply carries its own `DICT_HASH`; dictionary derived from metadata and decoded\n * into `REPLY`.\n *\n * The server sends a negotiated batch only in columnar form, so a message that cannot be decoded is\n * lost.\n *\n * Memory: validated dictionaries are cached by their content hash, so all subscriptions/resources\n * sharing a schema share one `string[]`, and a schema change (new hash) naturally re-derives.\n */\nexport class ScdbStreamDecoder {\n constructor(metaCache) {\n this.metaCache = metaCache;\n /** Content hash -> validated dictionary. Shared across every resource/subscription with that schema. */\n this.byHash = new Map();\n /** Dataserver resource -> expected DICT_HASH captured from its LOGON_ACK (QUERY_UPDATE has none). */\n this.expectedHashByResource = new Map();\n /** Resources with an in-flight metadata refresh, to avoid issuing duplicate META_REQUESTs. */\n this.refreshing = new Set();\n }\n /** Optionally supply the WASM decoder for the binary `SCDB_V1` fast-path (else pure-JS is used). */\n setWasm(wasm) {\n this.wasm = wasm;\n }\n /** Wire the metadata-refresh hook (host supplies a force-refresh, e.g. `getMetadata(r, false)`). */\n setMetadataRefresher(refresher) {\n this.metadataRefresher = refresher;\n }\n /** Without cached metadata the columnar answer could not be decoded, so row mode is requested. */\n prepareRequest(message) {\n const details = message.DETAILS;\n if (!(details === null || details === void 0 ? void 0 : details.ENCODING))\n return;\n const resourceName = resourceNameOf(message);\n if (resourceName && this.metaCache.hasMetadataFor(resourceName))\n return;\n const withoutEncoding = Object.assign({}, details);\n delete withoutEncoding.ENCODING;\n message.DETAILS = withoutEncoding;\n if (resourceName)\n this.requestRefresh(resourceName);\n }\n /**\n * Capture the dataserver resource's expected `DICT_HASH` from a `LOGON_ACK` (call before it is\n * dropped) and pre-warm the dictionary from metadata. No-op for row-mode logons.\n */\n onLogonAck(msg, resourceName) {\n if (!(msg === null || msg === void 0 ? void 0 : msg.ENCODING) || !resourceName || msg.DICT_HASH == null)\n return;\n this.expectedHashByResource.set(resourceName, msg.DICT_HASH);\n // Pre-warm (and kick off a refresh now if the cached metadata is stale).\n this.dictionaryFor(resourceName, msg.DICT_HASH);\n }\n /**\n * Decodes a columnar message in place: dataserver `QUERY_UPDATE` into `msg.ROW` (expected hash from\n * the resource's LOGON_ACK), req/rep reply into `msg.REPLY` (hash on the reply). No-op for row-mode\n * or already decoded messages. Throws when the message cannot be decoded.\n */\n onMessage(msg, resourceName) {\n if (!msg || !msg.ENCODING || msg.ROW || msg.REPLY)\n return;\n const isQueryUpdate = msg.MESSAGE_TYPE === 'QUERY_UPDATE';\n const expectedHash = isQueryUpdate\n ? resourceName && this.expectedHashByResource.get(resourceName)\n : msg.DICT_HASH;\n const dictionary = this.dictionaryFor(resourceName, expectedHash);\n if (!dictionary) {\n throw new Error(`Cannot decode ${msg.ENCODING} ${msg.MESSAGE_TYPE} for '${resourceName}': ` +\n `no column dictionary matching DICT_HASH ${expectedHash}`);\n }\n if (isQueryUpdate)\n msg.ROW = this.decodeQueryUpdate(msg, dictionary);\n else\n msg.REPLY = decodeColumnarReply(msg, dictionary);\n }\n decodeQueryUpdate(msg, dictionary) {\n if (this.wasm) {\n try {\n return decodeColumnarQueryUpdate(msg, dictionary, this.wasm);\n }\n catch (e) {\n // Throws again when the payload itself is bad, which is not a reason to drop the WASM decoder.\n const rows = decodeColumnarQueryUpdate(msg, dictionary);\n logger.warn('SCDB WASM decode failed, using the pure-JS decoder from now on', e);\n this.wasm = undefined;\n return rows;\n }\n }\n return decodeColumnarQueryUpdate(msg, dictionary);\n }\n clear() {\n this.byHash.clear();\n this.expectedHashByResource.clear();\n this.refreshing.clear();\n }\n /**\n * Ordered dictionary for a resource, derived from cached metadata and validated against the\n * server's `DICT_HASH`. Missing or mismatching metadata is refreshed for later requests.\n * Validated results are cached by content hash (never negatives).\n */\n dictionaryFor(resourceName, expectedHash) {\n if (!resourceName)\n return undefined;\n if (expectedHash == null)\n return undefined;\n const cached = this.byHash.get(expectedHash);\n if (cached)\n return cached;\n if (!this.metaCache.hasMetadataFor(resourceName)) {\n this.requestRefresh(resourceName);\n return undefined;\n }\n const names = dictionaryFromMetadata(this.metaCache.getMetadataFor(resourceName));\n if (!names.length)\n return undefined;\n const clientHash = dictionaryHash(names);\n if (clientHash !== expectedHash) {\n logger.warn(`SCDB dictionary hash mismatch for '${resourceName}' (server=${expectedHash} ` +\n `client=${clientHash}); refreshing metadata`);\n this.requestRefresh(resourceName);\n return undefined;\n }\n this.byHash.set(expectedHash, names);\n return names;\n }\n /** Fire-and-forget metadata refresh, deduped per resource while one is in flight. */\n requestRefresh(resourceName) {\n if (!this.metadataRefresher || this.refreshing.has(resourceName))\n return;\n this.refreshing.add(resourceName);\n Promise.resolve(this.metadataRefresher(resourceName))\n .catch(() => undefined)\n .finally(() => this.refreshing.delete(resourceName));\n }\n}\n","/* oxlint-disable no-magic-numbers, no-plusplus -- FNV-1a hashing uses fixed prime/offset constants and byte loops */\n/**\n * Dictionary derivation + fingerprinting for the metadata-driven dictionary mechanism.\n *\n * The server no longer ships the column dictionary; instead the client derives it from the resource\n * metadata it already holds (`id = index` into the ordered field list) and validates it against a\n * small hash the server sends with the columnar payload. A columnar message that fails validation\n * is not decoded.\n */\n/**\n * FNV-1a 32-bit hash of the field names joined by '\\n', as lowercase 8-char hex. MUST match the\n * Kotlin `ColumnDictionary.contentHash` in genesis-columnar (cross-language vector:\n * ['QUANTITY','PRICE','SYMBOL'] -> '40e6db4f').\n *\n * Hashes UTF-16 code units (`charCodeAt`), matching Kotlin's `Char.code` — NOT the UTF-8 bytes used for\n * on-wire strings. Field names are ASCII in practice so the two coincide; keep both ends on UTF-16 units\n * (do not switch to UTF-8 bytes) or a non-ASCII field name would hash differently across languages.\n */\nexport function dictionaryHash(fieldNames) {\n let h = 0x811c9dc5;\n const joined = fieldNames.join('\\n');\n for (let i = 0; i < joined.length; i++) {\n h ^= joined.charCodeAt(i);\n h = Math.imul(h, 0x01000193); // 32-bit FNV prime multiply\n }\n return (h >>> 0).toString(16).padStart(8, '0');\n}\n/**\n * Ordered field-name list (the SCDB dictionary) for a resource, from its metadata. The order MUST\n * match the server's, which derives the dictionary per resource type: a DATASERVER hashes its `FIELD`\n * list, a REQUEST_SERVER its `REPLY_FIELD` (⇒ `REPLY.FIELD`) list. Selecting by `TYPE` — rather than\n * \"first non-null\" — matters because a metadata object can legitimately carry BOTH `FIELD` and\n * `REPLY_FIELD`; picking the wrong one yields a hash that never matches the server's `DICT_HASH`, so\n * no columnar message for that resource can be decoded. Falls back to a lenient scan for unknown types.\n */\nexport function dictionaryFromMetadata(metadata) {\n var _a, _b, _c, _d, _e;\n const replyFields = (_a = metadata.REPLY_FIELD) !== null && _a !== void 0 ? _a : (_b = metadata.REPLY) === null || _b === void 0 ? void 0 : _b.FIELD;\n const fields = metadata.TYPE === 'REQUEST_SERVER'\n ? (replyFields !== null && replyFields !== void 0 ? replyFields : [])\n : metadata.TYPE === 'DATASERVER'\n ? ((_c = metadata.FIELD) !== null && _c !== void 0 ? _c : [])\n : ((_e = (_d = metadata.FIELD) !== null && _d !== void 0 ? _d : replyFields) !== null && _e !== void 0 ? _e : []);\n return fields.map((f) => f.NAME);\n}\n","import { __awaiter } from \"tslib\";\nimport { LOGIN_DETAILS_URL, LOGIN_URL } from '@genesislcap/foundation-utils';\nimport { DI } from '@genesislcap/web-core';\nimport { logger } from '../utils';\nimport { Http } from './http';\nconst REAUTH_ACTION_LOCK_KEY = 'reauthActionLock';\nconst HTTP_STATUS_UNAUTHORIZED = 401;\nconst HTTP_CLIENT_ERROR_MIN = 400;\nconst HTTP_SERVER_ERROR_MIN = 500;\nconst HTTP_STATUS_REQUEST_TIMEOUT = 408;\nconst HTTP_STATUS_TOO_MANY_REQUESTS = 429;\nconst TRANSIENT_CLIENT_ERRORS = [HTTP_STATUS_REQUEST_TIMEOUT, HTTP_STATUS_TOO_MANY_REQUESTS];\n/**\n * How long a reauth lock is honoured before {@link tryRefreshSession} treats it as abandoned and clears it.\n * @public\n */\nexport const REAUTH_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 > REAUTH_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(signal) {\n return __awaiter(this, void 0, void 0, function* () {\n const loginDetailsFetch = yield fetch(LOGIN_DETAILS_URL, { credentials: 'include', signal });\n // An expired session can answer 401 without a JSON body; that still means \"refresh needed\".\n if (loginDetailsFetch.status === HTTP_STATUS_UNAUTHORIZED) {\n return false;\n }\n const loginDetails = yield loginDetailsFetch.json();\n return loginDetails.MESSAGE_TYPE === 'EVENT_LOGIN_DETAILS_ACK';\n });\n}\nconst isRejectedByServer = (error) => {\n const status = error === null || error === void 0 ? void 0 : error.status;\n return (typeof status === 'number' &&\n status >= HTTP_CLIENT_ERROR_MIN &&\n status < HTTP_SERVER_ERROR_MIN &&\n !TRANSIENT_CLIENT_ERRORS.includes(status));\n};\n/**\n * Attempts to refresh the session via EVENT_LOGIN_AUTH.\n * @internal\n * @returns true if refresh was successful; false if the server rejected it (NACK or 4xx other than 408/429)\n * @throws If the request could not complete (connection error, timeout, 408, 429, 5xx, etc.)\n */\nfunction performRefresh() {\n return __awaiter(this, void 0, void 0, function* () {\n const http = DI.getOrCreateDOMContainer().get(Http);\n try {\n const refreshLoginResponse = yield http.post(LOGIN_URL, {\n body: JSON.stringify({\n DETAILS: {},\n MESSAGE_TYPE: 'EVENT_LOGIN_AUTH',\n }),\n });\n if (refreshLoginResponse.MESSAGE_TYPE === 'EVENT_LOGIN_AUTH_ACK') {\n return true;\n }\n logger.debug('Session refresh rejected: ', refreshLoginResponse.ERROR);\n return false;\n }\n catch (error) {\n if (isRejectedByServer(error)) {\n logger.debug(`Session refresh rejected with HTTP ${error.status}`);\n return false;\n }\n throw error;\n }\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 - `reloadOnFailure` reloads the page if the refresh fails (default: true). `signal` aborts the session\n * check; a refresh that has started is never aborted, because the server revokes the old refresh token as soon as it\n * issues a new one, so the new cookie must be allowed to land.\n * @returns The result of the refresh attempt\n * @throws If the session check or refresh could not complete (connection error, timeout, aborted check, 408, 429, 5xx,\n * etc.)\n */\nexport function tryRefreshSession() {\n return __awaiter(this, arguments, void 0, function* (options = {}) {\n const { reloadOnFailure = true, signal } = 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(signal)) {\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 * Waits until another tab finishes reauthenticating, or until `signal` aborts.\n *\n * @remarks\n * Relies on `storage` events, which don't fire in the tab that changed the key, so when this tab holds the reauth lock\n * itself only `signal` ends the wait.\n *\n * @public\n * @param signal - Ends the wait when aborted\n */\nexport function waitForOtherTabReauth(signal) {\n return new Promise((resolve) => {\n const done = () => {\n stopListening();\n signal.removeEventListener('abort', done);\n resolve();\n };\n const stopListening = onOtherTabReauthComplete(done);\n if (signal.aborted) {\n done();\n return;\n }\n signal.addEventListener('abort', done);\n });\n}\n","/**\n * The SCDB decoder `decoder.wasm` inlined as base64 so it loads in any bundler/runtime\n * (webpack, Vite, Next, esbuild, SSR) with no asset-resolution or fetch config.\n * Generated from assembly/scdb/decoder.ts — do not edit by hand; run `npm run build:wasm`.\n */\nexport const SCDB_DECODER_WASM_BASE64 = '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';\n","/* oxlint-disable no-magic-numbers, no-plusplus -- wasm memory layout: region byte-offsets/sizes and index-loop counters read clearer inline than as named constants */\n/**\n * WASM fast-path decoder for the binary SCDB (`SCDB_V1`) payload.\n *\n * Instantiates the AssemblyScript decoder (`wasm/decoder.wasm`), which parses the binary blob at\n * near-native speed into a columnar result in linear memory; this module then assembles the legacy\n * `ROW` array of objects that ag-Grid consumes. Measured ~1.5x faster than native `JSON.parse` on a\n * full snapshot and ~2.5x on deltas, while the payload stays ~3x smaller on the wire. See\n * `wasm/README.md` and the benchmark for numbers.\n *\n * If wasm is unavailable (or instantiation fails), callers fall back to the pure-JS `decodeScdbToRows`\n * from `scdbDecoder.ts` — same output, no toolchain.\n */\nimport { __awaiter } from \"tslib\";\nimport { base64ToBytes } from './base64';\nimport { assertScdbMagic } from './scdbDecoder';\nimport { SCDB_DECODER_WASM_BASE64 } from './wasm/decoder.wasm.base64';\nconst OPS = ['INSERT', 'MODIFY', 'DELETE'];\nconst PAGE = 65536;\n// LONG (kind 3) columns carry a raw i64; reconstruct it exactly, then narrow to a JS number when it\n// fits the safe-integer range and keep a bigint otherwise — the same rule as the pure-JS decoder and\n// the row-mode customNumberParser. BigInt(...) (not literals) to compile at the ES2015 target.\nconst BIG_32 = BigInt(32);\nconst SAFE_MAX = BigInt(Number.MAX_SAFE_INTEGER);\nconst SAFE_MIN = -SAFE_MAX;\nlet defaultWasm;\n/**\n * Lazily instantiates (once) the bundled decoder from inlined base64 — no asset/fetch config, works\n * in any bundler and SSR. This is what the socket layer uses for the `SCDB_V1` fast-path. Rejects if\n * WebAssembly is unavailable; callers fall back to the pure-JS decoder.\n */\nexport function getDefaultScdbWasm() {\n if (!defaultWasm)\n defaultWasm = initScdbWasm();\n return defaultWasm;\n}\n/**\n * Instantiates the decoder. Defaults to the inlined `decoder.wasm`; pass your own bytes (bundler\n * import / fetch / fs.readFile) to override. Returns an object whose `decodeToRows` is synchronous.\n */\nexport function initScdbWasm() {\n return __awaiter(this, arguments, void 0, function* (wasmBytes = base64ToBytes(SCDB_DECODER_WASM_BASE64)) {\n // Generous initial memory; grown on demand per batch.\n const memory = new WebAssembly.Memory({ initial: 32 });\n const { instance } = yield WebAssembly.instantiate(wasmBytes, {\n env: {\n memory,\n abort() {\n throw new Error('scdb wasm abort');\n },\n },\n });\n const decode = instance.exports.decode;\n const decoder = new TextDecoder();\n // Layout: blob at BLOB_BASE, output above it (8-aligned). Memory grown per batch as needed.\n const BLOB_BASE = PAGE; // 64 KB\n function decodeToRows(blob, dictionary) {\n // Pre-parse to size output, then place blob + out and decode. Sparse layout regions:\n // nums n*c*8 + strOff/strLen 2*(n*c*4) + refOff/refLen 2*(n*4) + colIds c*4 + kinds c + ops n\n // + counts c*4 + idx (<=n*c)*4 + scratch (string-dict tables, <= n*8).\n // The wasm decoder does not validate its input and re-reads the previous blob left in memory.\n assertScdbMagic(blob);\n const { n, c } = preparse(blob);\n const outBytes = 64 + n * c * 8 + n * c * 4 * 2 + n * 4 * 2 + c * 4 + c + n + c * 4 + n * c * 4 + n * 8 + 4096;\n const outBase = align8(BLOB_BASE + blob.length + 64);\n const needed = outBase + outBytes;\n if (needed > memory.buffer.byteLength) {\n memory.grow(Math.ceil((needed - memory.buffer.byteLength) / PAGE));\n }\n const u8 = new Uint8Array(memory.buffer);\n u8.set(blob, BLOB_BASE);\n decode(BLOB_BASE, blob.length, outBase);\n return assemble(memory.buffer, u8, BLOB_BASE, outBase, dictionary, decoder);\n }\n return { decodeToRows };\n });\n}\nfunction align8(x) {\n return (x + 7) & ~7;\n}\n/** Reads only n (row count) and c (column count) by skipping refs + ops. No allocation. */\nfunction preparse(blob) {\n const flags = blob[4];\n let p = 5; // magic + flags\n let r = 0;\n let s = 0;\n const uv = () => {\n r = 0;\n s = 0;\n for (;;) {\n const b = blob[p++];\n if (s < 28)\n r |= (b & 0x7f) << s;\n else\n r += (b & 0x7f) * Math.pow(2, s);\n if ((b & 0x80) === 0)\n return r >>> 0;\n s += 7;\n }\n };\n const n = uv();\n for (let i = 0; i < n; i++) {\n const l = uv();\n p += l;\n }\n p += (flags & 0x02) !== 0 ? 1 : (n * 2 + 7) >> 3; // UNIFORM_OPS -> single op byte\n const c = uv();\n return { n, c };\n}\nfunction assemble(buffer, u8, blobBase, outBase, dictionary, decoder) {\n const dv = new DataView(buffer);\n const n = dv.getInt32(outBase, true);\n const c = dv.getInt32(outBase + 4, true);\n const base = outBase + 64;\n const numsOff = base;\n const strOffOff = numsOff + n * c * 8;\n const strLenOff = strOffOff + n * c * 4;\n const refOffOff = strLenOff + n * c * 4;\n const refLenOff = refOffOff + n * 4;\n const colIdsOff = refLenOff + n * 4;\n // i32 regions (counts, idx) precede the i8 ones (kinds, ops) so these offsets stay 4-aligned.\n const countsOff = colIdsOff + c * 4;\n const idxOff = countsOff + c * 4;\n const kindsOff = idxOff + n * c * 4;\n const opsOff = kindsOff + c;\n const nums = new Float64Array(buffer, numsOff, n * c);\n const strOff = new Int32Array(buffer, strOffOff, n * c);\n const strLen = new Int32Array(buffer, strLenOff, n * c);\n const refOff = new Int32Array(buffer, refOffOff, n);\n const refLen = new Int32Array(buffer, refLenOff, n);\n const colIds = new Int32Array(buffer, colIdsOff, c);\n const kinds = u8.subarray(kindsOff, kindsOff + c);\n const ops = u8.subarray(opsOff, opsOff + n);\n const counts = new Int32Array(buffer, countsOff, c);\n const idx = new Int32Array(buffer, idxOff, n * c);\n const rows = new Array(n);\n for (let i = 0; i < n; i++) {\n const ro = blobBase + refOff[i];\n rows[i] = {\n DETAILS: { OPERATION: OPS[ops[i]], ROW_REF: decoder.decode(u8.subarray(ro, ro + refLen[i])) },\n };\n }\n // Walk only the present cells (sum of counts), in column order, via the idx list. A negative idx\n // (high bit set) is an explicit change-to-null; otherwise the low 31 bits are the row index.\n let cursor = 0;\n for (let ci = 0; ci < c; ci++) {\n const field = dictionary[colIds[ci]];\n // Match the pure-JS decoder: a column id outside the dictionary is a hard error, not a silent\n // write to `rows[r][undefined]` (which would corrupt the row shape without any signal).\n if (field === undefined)\n throw new Error(`Unknown SCDB column id ${colIds[ci]}`);\n const kind = kinds[ci];\n const cb = ci * n;\n const p = counts[ci];\n if (kind === 1) {\n const cache = new Map();\n for (let k = 0; k < p; k++) {\n const raw = idx[cursor++];\n const r = raw & 0x7fffffff;\n if (raw < 0) {\n rows[r][field] = null;\n continue;\n }\n const off = strOff[cb + r];\n let s = cache.get(off);\n if (s === undefined) {\n const a = blobBase + off;\n s = decoder.decode(u8.subarray(a, a + strLen[cb + r]));\n cache.set(off, s);\n }\n rows[r][field] = s;\n }\n }\n else if (kind === 4) {\n // BYTES: raw payload copied out of wasm memory as a Uint8Array (matches the pure-JS decoder's\n // `cur.slice`), NOT UTF-8-decoded like kind 1. `slice` copies so the value survives wasm memory reuse.\n for (let k = 0; k < p; k++) {\n const raw = idx[cursor++];\n const r = raw & 0x7fffffff;\n if (raw < 0) {\n rows[r][field] = null;\n continue;\n }\n const a = blobBase + strOff[cb + r];\n rows[r][field] = u8.slice(a, a + strLen[cb + r]);\n }\n }\n else if (kind === 3) {\n // LONG: 8 bytes hold a little-endian i64 (not an f64). Reconstruct via signed-high/unsigned-low\n // words, then narrow to number when safe else keep bigint — matches pure-JS + customNumberParser.\n for (let k = 0; k < p; k++) {\n const raw = idx[cursor++];\n const r = raw & 0x7fffffff;\n if (raw < 0) {\n rows[r][field] = null;\n continue;\n }\n const off = numsOff + (cb + r) * 8;\n const v = (BigInt(dv.getInt32(off + 4, true)) << BIG_32) + BigInt(dv.getUint32(off, true));\n rows[r][field] = v >= SAFE_MIN && v <= SAFE_MAX ? Number(v) : v;\n }\n }\n else {\n const bool = kind === 2;\n for (let k = 0; k < p; k++) {\n const raw = idx[cursor++];\n const r = raw & 0x7fffffff;\n rows[r][field] = raw < 0 ? null : bool ? nums[cb + r] !== 0 : nums[cb + r];\n }\n }\n }\n return rows;\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 if (observer.closed) {\n return;\n }\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 a random number of milliseconds between half and all of 2 ^ attempts * baseInterval,\n * capped at 60 seconds, so clients dropped together do not reconnect together\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 interval = Math.min(baseInterval * Math.pow(2, attempts), MAX_RECONNECT_INTERVAL);\n return interval / 2 + (Math.random() * interval) / 2;\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 { from, Observable, of, Subject, Subscription, throwError } from 'rxjs';\nimport { exhaustMap, filter, map, switchMap, takeWhile } from 'rxjs/operators';\nimport { WebSocketSubject } from 'rxjs/webSocket';\nimport { getDefaultScdbWasm } from '../datasource/scdb';\nimport { MetaCache } from '../metadata';\nimport { Session } from '../session';\nimport { logger } from '../utils';\nimport { withErrorCode } from '../utils/error-code';\nimport { ConnectNackError, ConnectTransportError } from './connect.errors';\nimport { ConnectConfig } from './connect.types';\nimport { normaliseErrorCodes } from './errorCodes';\nimport { Http } from './http';\nimport { EventMessageType, MessageBuilder, MessageType, } from './message';\nimport { exponentialScheduler, linearScheduler, MAX_RECONNECT_ATTEMPTS, retryInterval, SocketReconnectStrategy, } from './reconnectStrategy';\nimport { abortedBeforeSend, isRejectedNack, settleWithin } from './requestLifecycle';\nimport { resourceNameOf, ScdbStreamDecoder } from './scdbStreamDecoder';\nimport { onOtherTabReauthComplete, SessionRefreshResult, tryRefreshSession, waitForOtherTabReauth, } 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}\nconst whenAborted = (signal) => new Promise((resolve) => {\n signal.addEventListener('abort', () => resolve(undefined), { once: true });\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.sessionCheckTimeout = 10000;\n this.scdbWasmRequested = false;\n this.heartbeatIsEnabled = true;\n this.heartbeatInterval = this.defaultInterval;\n this.socketMessages = () => this.wsMessages;\n }\n /** Makes SCDB columnar payloads transparent (no-op unless an encoding was negotiated). */\n get scdbDecoder() {\n var _a;\n (_a = this._scdbDecoder) !== null && _a !== void 0 ? _a : (this._scdbDecoder = new ScdbStreamDecoder(this.metaCache));\n return this._scdbDecoder;\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, _b;\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 // Pre-warm the WASM fast-path when binary is the app-wide default; per-datasource opt-ins warm it\n // lazily on the first SCDB_V1 payload (see the receive path).\n if (((_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.dataserverEncoding) === 'SCDB_V1')\n this.ensureScdbWasm();\n if (!((_b = this.config.isWebSocketExpression) === null || _b === void 0 ? void 0 : _b.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 const replacingLiveSocket = !!this.websocket && this.isConnected;\n const connection = 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 this.rejectPendingRequests();\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 const subject = 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 var _a;\n // Replaced or reset: the status describes another socket, or none, so leave it alone,\n // and settle with the outcome of the connect() that replaced this one, if any.\n if (this.websocket !== subject) {\n resolve((_a = this.connection) !== null && _a !== void 0 ? _a : false);\n return;\n }\n this.status.onClose(closeEvent);\n this.status.isConnecting = false;\n this.rejectPendingRequests(new ConnectTransportError('WebSocket connection closed before a reply arrived', {\n closeCode: closeEvent === null || closeEvent === void 0 ? void 0 : closeEvent.code,\n closeReason: closeEvent === null || closeEvent === void 0 ? void 0 : closeEvent.reason,\n }));\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 this.websocket = subject;\n const onNextMessage = (receivedMessage) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n normaliseErrorCodes(receivedMessage);\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(withErrorCode(`MessageType: ${receivedMessage.MESSAGE_TYPE} | Error Details:`, error), error);\n });\n }\n return;\n }\n const nacked = isRejectedNack(receivedMessage);\n switch (receivedMessage.MESSAGE_TYPE) {\n case EventMessageType.EVENT_LOGIN_AUTH_ACK: {\n this.applyServerHeartbeatInterval(receivedMessage.DETAILS);\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 // Resolve the SCDB column dictionary (from metadata) before LOGON_ACK is dropped.\n this.scdbDecoder.onLogonAck(receivedMessage, resourceNameOf(messageHandler.sentMessage));\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 }\n // A binary payload lazily warms the WASM fast-path (covers per-datasource opt-ins too).\n if ((receivedMessage === null || receivedMessage === void 0 ? void 0 : receivedMessage.ENCODING) === 'SCDB_V1')\n this.ensureScdbWasm();\n try {\n this.scdbDecoder.onMessage(receivedMessage, resourceNameOf(messageHandler.sentMessage));\n }\n catch (error) {\n logger.error(`Failed to decode ${MESSAGE_TYPE} for SourceRef: ${SOURCE_REF}`, error);\n // The server will not resend this batch, so the stream stops being handled.\n const nack = {\n SOURCE_REF,\n MESSAGE_TYPE: MessageType.MSG_NACK,\n ERROR: [\n { CODE: 'SCDB_DECODE_FAILED', TEXT: String((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error) },\n ],\n };\n messageHandler.onReceivedError.call(this, new ConnectNackError(nack, messageHandler.sentMessage));\n this.removeMessageHandler(SOURCE_REF);\n this.wsMessages.next(nack);\n return;\n }\n if (nacked) {\n messageHandler.onReceivedError.call(this, new ConnectNackError(receivedMessage, messageHandler.sentMessage));\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 this.connection = connection;\n if (replacingLiveSocket) {\n // Report the gap only now that the replacement is installed, so a subscriber that reacts by\n // connecting or disconnecting sees a consistent socket. Consumers re-subscribe on this one\n // false → true transition, whichever order the old close and the new open arrive in.\n this.status.isConnected = false;\n }\n return connection;\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 if (this.usesCookieAuth) {\n yield this.handleCookieBasedReauth();\n }\n else {\n const refreshTokenMessage = this.messageBuilder.createRefreshTokenMessage();\n const refreshTokenResult = yield this.send(refreshTokenMessage);\n this.session.setAuthResult(refreshTokenResult);\n this.updateSessionAndSubscriptions(refreshTokenResult);\n }\n });\n }\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 get usesCookieAuth() {\n return !this.session.getSessionStorageItem('refreshToken');\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(this.url, this.connectOptions, this.reconnectOptions));\n return;\n }\n if (result !== SessionRefreshResult.FAILED) {\n // Connect again to use new session token from obtained cookie\n yield this.connect(this.url, this.connectOptions, this.reconnectOptions);\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 /**\n * Reconfigures the heartbeat with the interval from the login ack. An explicit `heartbeatInterval`\n * connect option wins; a server interval of 0 (GSF's default when auth preferences don't set one)\n * means \"no preference\", so the current interval stays.\n */\n applyServerHeartbeatInterval(systemDetails) {\n var _a, _b;\n const serverIntervalSecs = (_a = systemDetails === null || systemDetails === void 0 ? void 0 : systemDetails.HEARTBEAT_INTERVAL_SECONDS) !== null && _a !== void 0 ? _a : 0;\n if (serverIntervalSecs > 0 && ((_b = this.connectOptions) === null || _b === void 0 ? void 0 : _b.heartbeatInterval) === undefined) {\n this.heartbeatInterval = serverIntervalSecs * this.secondsMultiplier;\n this.prepareHeartbeat();\n }\n }\n prepareHeartbeat() {\n var _a, _b, _c, _d;\n if (this.heartbeatTicker) {\n this.heartbeatTicker.stop();\n }\n const intervalInMillisecocnds = (_b = (_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.heartbeatInterval) !== null && _b !== void 0 ? _b : this.heartbeatInterval;\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 let pong;\n try {\n pong = yield this.send(ping, true, { timeout: intervalInMillisecocnds });\n }\n catch (error) {\n logger.debug('Heartbeat ping got no pong: ', error);\n return;\n }\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().catch((error) => logger.debug('Could not refresh the expired session: ', error));\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 ((_d = (_c = this.connectOptions) === null || _c === void 0 ? void 0 : _c.enableHeartbeat) !== null && _d !== void 0 ? _d : this.heartbeatIsEnabled) {\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(exhaustMap((tick, attempt) => {\n var _a, _b, _c;\n const attemptsAmount = ((_a = this.connectOptions) === null || _a === void 0 ? void 0 : _a.alwaysOn)\n ? attempt + 1\n : ((_c = (_b = this.reconnectOptions) === null || _b === void 0 ? void 0 : _b.reconnectAttempts) !== null && _c !== void 0 ? _c : MAX_RECONNECT_ATTEMPTS);\n if (attempt >= attemptsAmount) {\n this.status.reconnectionLimitReached = true;\n return throwError(() => new Error(`Max reconnect attempts ${attemptsAmount} reached.`));\n }\n return tick > 0 && this.user.isAuthenticated && this.usesCookieAuth\n ? from(this.refreshSessionBeforeReconnect()).pipe(map(() => attempt))\n : of(attempt);\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 // The router rejects a handshake carrying a dead session cookie with a 401, which the browser\n // reports as a plain 1006 close, so the session can only be checked over HTTP.\n refreshSessionBeforeReconnect() {\n return __awaiter(this, void 0, void 0, function* () {\n const signal = AbortSignal.timeout(this.sessionCheckTimeout);\n // Stops waiting at the timeout without aborting a refresh in flight, so its new cookie still lands.\n const result = yield Promise.race([\n tryRefreshSession({ reloadOnFailure: false, signal }),\n whenAborted(signal),\n ]).catch((error) => {\n logger.debug('Could not check the session before reconnecting: ', error);\n return undefined;\n });\n if (result === SessionRefreshResult.FAILED) {\n this.reloadPage();\n throw new Error('Session expired and could not be refreshed.');\n }\n if (result === SessionRefreshResult.HANDLED_BY_OTHER_TAB) {\n yield waitForOtherTabReauth(signal);\n }\n });\n }\n reloadPage() {\n window.location.reload();\n }\n reset() {\n var _a;\n this.status.isConnected = false;\n this.status.isConfigured = false;\n // Closes a socket still connecting too, which completing the subject alone does not.\n (_a = this.socketSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.websocket && this.websocket.complete();\n this.websocket = null;\n this.connection = undefined;\n this.cleanMessages();\n }\n cleanMessages() {\n this.rejectPendingRequests();\n this.wsMessages && this.wsMessages.complete();\n this.wsMessages = new SocketSubject();\n this.wsMessageHandlers = new Map();\n this.scdbDecoder.clear();\n }\n // Stream handlers are kept: they are re-sent on reconnect.\n rejectPendingRequests(error = new ConnectTransportError('WebSocket connection closed before a reply arrived')) {\n var _a;\n (_a = this.wsMessageHandlers) === null || _a === void 0 ? void 0 : _a.forEach((handler, sourceRef) => {\n if (handler.isSubscription)\n return;\n this.wsMessageHandlers.delete(sourceRef);\n handler.onReceivedError.call(this, error);\n });\n }\n send(message, needsHandling = true, options) {\n var _a, _b;\n const aborted = abortedBeforeSend(options === null || options === void 0 ? void 0 : options.signal);\n if (aborted) {\n return aborted;\n }\n if (!this.isConnected) {\n return Promise.reject(new ConnectTransportError('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 this.scdbDecoder.prepareRequest(message);\n const reply = new Promise((resolve, reject) => {\n if (needsHandling) {\n this.setMessageHandler(message, resolve, reject);\n }\n this.websocket.next(message);\n });\n if (!needsHandling) {\n return reply;\n }\n return settleWithin(reply, { timeout: (_a = options === null || options === void 0 ? void 0 : options.timeout) !== null && _a !== void 0 ? _a : (_b = this.connectOptions) === null || _b === void 0 ? void 0 : _b.requestTimeout, signal: options === null || options === void 0 ? void 0 : options.signal }, () => this.removeMessageHandler(message.SOURCE_REF));\n }\n sendForStream(message, onMessage, onError, onComplete) {\n if (!this.isConnected) {\n return throwError(() => new ConnectTransportError('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.scdbDecoder.prepareRequest(message);\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 * A stream torn down before its turn (subscribed and unsubscribed in one task) sends neither message: its\n * DATA_LOGOFF would reach the server ahead of the DATA_LOGON, which would then open a subscription nothing handles.\n */\n let logonSent = false;\n let tornDown = false;\n DOM.queueUpdate(() => {\n if (tornDown)\n return;\n logonSent = true;\n this.websocket.next(message);\n });\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 messagesSubscription = this.wsMessages\n .pipe(filter((msg) => msg.SOURCE_REF === message.SOURCE_REF))\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 tornDown = true;\n messagesSubscription.unsubscribe();\n if (logonSent) {\n this.sendDataLogoff(message.SOURCE_REF);\n }\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 ConnectTransportError('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.scdbDecoder.prepareRequest(message);\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 // Nothing awaits a logoff, and a closed socket has no server subscription left to end.\n this.send(this.messageBuilder.createDataLogoffMessage(sourceRef), false).catch((error) => logger.debug(`DATA_LOGOFF not sent for SourceRef: ${sourceRef}`, error));\n }\n removeMessageHandler(sourceRef) {\n this.wsMessageHandlers.delete(sourceRef);\n }\n /**\n * Wires the SCDB decoder's metadata-refresh hook, used to fetch a resource's missing or stale\n * metadata. The host passes a force-refresh, e.g. `Connect.getMetadata(resource, false)`.\n */\n setScdbMetadataRefresher(refresher) {\n this.scdbDecoder.setMetadataRefresher(refresher);\n }\n /**\n * Loads the bundled WASM decoder for the `SCDB_V1` binary encoding once (lazy, idempotent). Called\n * eagerly when the app-wide `dataserverEncoding` is binary, and on demand the first time a binary\n * payload is seen (so a per-datasource/grid `encoding: 'SCDB_V1'` also gets the fast-path, not just\n * the app-wide opt-in). On any failure (no WebAssembly, CSP, SSR) we silently keep the pure-JS\n * decoder — output is identical.\n */\n ensureScdbWasm() {\n if (this.scdbWasmRequested)\n return;\n this.scdbWasmRequested = true;\n getDefaultScdbWasm()\n .then((wasm) => this.scdbDecoder.setWasm(wasm))\n .catch((err) => logger.warn('SCDB WASM decoder unavailable, using pure-JS decoder', err));\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 MetaCache\n], DefaultSocket.prototype, \"metaCache\", 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 { __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","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 var _a;\n const resolvedRowId = (_a = row.DETAILS[rowId]) !== null && _a !== void 0 ? _a : row[rowId];\n const tmp = Object.assign(Object.assign({}, row), { [rowId]: resolvedRowId });\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 * 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}\nconst LITERAL_ESCAPES = { n: '\\n', r: '\\r', t: '\\t', b: '\\b', f: '\\f' };\n/**\n * A criteria value as the server reads it. A quoted string literal loses its quotes and has its\n * escapes decoded (`\\'`, `\\\\`, `\\n`, as foundation-criteria's serialisers write them); anything\n * else comes back trimmed.\n * @internal\n */\nfunction literalValue(text) {\n const trimmed = text.trim();\n const quoted = /^(['\"])([\\s\\S]*)\\1$/.exec(trimmed);\n if (!quoted) {\n return trimmed;\n }\n return quoted[2].replace(/\\\\([\\s\\S])/g, (_, char) => { var _a; return (_a = LITERAL_ESCAPES[char]) !== null && _a !== void 0 ? _a : char; });\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`] = literalValue(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`] = literalValue(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`] = literalValue(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`] = literalValue(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] = `*${literalValue(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 operatorAt = c.indexOf('=');\n const key = c.substr(0, operatorAt).trim().replace(/[\"']/g, '');\n reqFields[key] = literalValue(c.slice(operatorAt).replace(/^==?/, ''));\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","import { __awaiter, __decorate, __param, __rest } from \"tslib\";\nimport { observable } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\nimport { combineLatest, from, Subject, timer } from 'rxjs';\nimport { startWith, switchMap, takeWhile } 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 { withErrorCode } from '../utils/error-code';\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.availableSortableFields} */\n this.availableSortableFields = [];\n /** {@inheritDoc DatasourceMetadata.availableCriteriaFields} */\n this.availableCriteriaFields = [];\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 // Counts init() and destroy() calls, so an init() or metadata fetch still waiting on the server\n // when a later one runs can tell, and stop.\n this.generation = 0;\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 // The latest init() wins: one still waiting on the server stops, and takes this one's result.\n const generation = (this.generation += 1);\n const result = this.initialise(generation, options, fetchMeta, startStream).catch((error) => {\n if (generation === this.generation)\n throw error;\n // A request that failed once this was superseded is not its failure any more: a socket that\n // closes rejects every request still waiting for a reply.\n logger.debug(`${options === null || options === void 0 ? void 0 : options.resourceName} datasource initialisation failed after it was superseded:`, error);\n return this.interruptedInit(options === null || options === void 0 ? void 0 : options.resourceName);\n });\n this.latestInit = { generation, result };\n return result;\n });\n }\n initialise(generation, options, fetchMeta, startStream) {\n return __awaiter(this, void 0, void 0, function* () {\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 // A destroy() or another init() may run while this waits on the server (an element leaving the\n // document, a grid restarting or reloading): destroy() clears the options, init() replaces\n // them. Read the name once, and stop once either has run, rather than go on to send requests\n // and a DATA_LOGON with no resource name, or with another init()'s options.\n const { resourceName } = this.options;\n const superseded = () => generation !== this.generation;\n const connected = this.connect.isConnected || (yield this.connect.connect());\n if (superseded())\n return this.interruptedInit(resourceName);\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 (superseded())\n return this.interruptedInit(resourceName);\n if (!isValidResource) {\n logger.error(`${resourceName} datasource does not exist on ${this.connect.host}`);\n this.reportStatus();\n return false;\n }\n const resourceType = yield this.resources.getResourceTypeFor(resourceName);\n if (superseded())\n return this.interruptedInit(resourceName);\n this.resourceType = resourceType;\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(resourceName);\n if (superseded())\n return this.interruptedInit(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 // Recreate pollTrigger$ so pollTriggerEvents work after destroy/reinit.\n // A completed Subject ignores next(), so we need a fresh one each init.\n this.pollTrigger$ = new Subject();\n // Synchronously: opening the stream queues its DATA_LOGON, and nothing may come between that\n // and this datasource holding the stream.\n this.stream = 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 = 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 this.generation += 1;\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.availableSortableFields = [];\n this.availableCriteriaFields = [];\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 ENCODING: this.options.encoding,\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 ENCODING: this.allResourceParams.ENCODING,\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 ENCODING: DETAILS.ENCODING,\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.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 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 createDataserverStream() {\n // Named now: the stream can outlive the options, which destroy() clears.\n const { resourceName } = this.options;\n const onMessage = (message) => { };\n const onError = (error) => logger.error(withErrorCode(`${resourceName} stream failed`, error), error);\n return this.connect.stream(resourceName, onMessage, onError, this.dataserverOnlyParams);\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, _c, _d;\n const generation = this.generation;\n try {\n logger.debug(`Requesting metadata for ${resourceName} Datasource`);\n const meta = yield this.connect.getMetadata(resourceName);\n // Superseded while the request was out: the metadata is no longer this datasource's.\n if (generation !== this.generation)\n return;\n if (meta) {\n this.availableIndexes = (_a = meta.INDEXES) !== null && _a !== void 0 ? _a : [];\n this.availableSortableFields = (_b = meta.SORTABLE_FIELDS) !== null && _b !== void 0 ? _b : [];\n this.availableCriteriaFields = (_c = meta.CRITERIA_FIELDS) !== null && _c !== void 0 ? _c : [];\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: ((_d = this.fieldMetadata) === null || _d === void 0 ? void 0 : _d.length) > 0,\n });\n }\n catch (e) {\n // Nor is a failure: the request may have failed only because of the teardown (its socket\n // closing on a reconnect, say).\n if (generation !== this.generation) {\n logger.debug(`Metadata Fetch for ${resourceName} failed after it was superseded:`, e);\n return;\n }\n logger.error(withErrorCode(`Metadata Fetch failed for ${resourceName}:`, e), 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 // What an init() that a later init() or destroy() interrupted resolves with: the result of the\n // init() that has the datasource now, or false when destroy() came last, even after a later\n // init() finished. A grid restarting destroys and initialises again straight away, and its\n // first init() still waits on the server.\n interruptedInit(resourceName) {\n logger.debug(`${resourceName} datasource initialisation was superseded`);\n const latest = this.latestInit;\n return latest && latest.generation === this.generation ? latest.result : false;\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, \"availableSortableFields\", void 0);\n__decorate([\n observable\n], DefaultDatasource.prototype, \"availableCriteriaFields\", 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","/**\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","/**\n * Decodes a base64 string to bytes in both browser (`atob`) and Node/SSR (`Buffer`) runtimes.\n * The SCDB `RBUF` payload (over JSON transports) and the inlined wasm module both arrive as base64.\n */\nexport function base64ToBytes(b64) {\n var _a;\n if (typeof atob === 'function') {\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i += 1)\n out[i] = bin.charCodeAt(i);\n return out;\n }\n // Node / SSR (avoids a hard @types/node dependency)\n const buf = (_a = globalThis.Buffer) === null || _a === void 0 ? void 0 : _a.from(b64, 'base64');\n return buf ? Uint8Array.from(buf) : new Uint8Array(0);\n}\n","/* oxlint-disable no-magic-numbers, no-plusplus, max-depth -- binary SCDB codec: byte offsets, bit masks and index-loop counters read clearer inline than as named constants */\n/**\n * SCDB v1 (Sparse Columnar Delta Block) decoder.\n *\n * Decodes the binary `RBUF` payload that a Genesis dataserver sends when a client negotiates\n * `DETAILS.ENCODING = SCDB_V1`. The wire format is defined, language-neutrally, in the server repo\n * at `genesis-columnar/docs/scdb-v1.md` and is pinned by the shared golden vectors in\n * `scdb-golden-v1.json` (this directory). The Kotlin `ScdbReader` is the reference implementation;\n * this decoder must stay byte-for-byte compatible with it.\n *\n * Performance notes (see scdb-js-bench.mjs):\n * - single pass straight into the output objects — no per-column intermediate arrays;\n * - dense columns (flagged by the encoder) skip the presence bitmap and the per-row presence test;\n * - varints decode in Number space (exact for |v| < 2^53), using BigInt only past 49 bits;\n * - strings take a manual ASCII fast-path (TextDecoder has a fixed per-call overhead).\n *\n * Browser contract:\n * - operates over the `Uint8Array` the existing msgpack envelope decoder already produces for `RBUF`;\n * - `ROW_REF` decodes to a `string` (sent as decimal text) — matches the existing contract, no BigInt;\n * - 64-bit LONG *values* decode to `number` when safe, else `bigint` (the customNumberParser rule).\n */\nconst MAGIC = [0x53, 0x43, 0x44, 0x31]; // 'S','C','D','1'\nconst ENC_STRING_DICT = 1;\nconst OPS = ['INSERT', 'MODIFY', 'DELETE'];\n// BigInt(...) (not 1n literals) so this compiles at the package's ES2015 target.\nconst BIG_ONE = BigInt(1);\nconst SAFE_MAX = BigInt(Number.MAX_SAFE_INTEGER);\nconst SAFE_MIN = -SAFE_MAX;\nconst sharedDecoder = new TextDecoder();\nfunction bitSet(b, i) {\n return ((b[i >> 3] >> (i & 7)) & 1) === 1;\n}\nfunction byteLength(bits) {\n return (bits + 7) >> 3;\n}\nclass Cursor {\n constructor(bytes) {\n this.bytes = bytes;\n this.pos = 0;\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n }\n byte() {\n return this.bytes[this.pos++];\n }\n slice(len) {\n const out = this.bytes.subarray(this.pos, this.pos + len);\n this.pos += len;\n return out;\n }\n uvarint() {\n let r = 0;\n let s = 0;\n for (;;) {\n const x = this.byte();\n if (s < 28)\n r |= (x & 0x7f) << s;\n else\n r += (x & 0x7f) * Math.pow(2, s);\n if ((x & 0x80) === 0)\n return r >>> 0;\n s += 7;\n }\n }\n zigzag() {\n let r = 0;\n let shift = 0;\n let big = null;\n for (;;) {\n const b = this.byte();\n if (shift < 49)\n r += (b & 0x7f) * Math.pow(2, shift);\n else {\n if (big === null)\n big = BigInt(r);\n big += BigInt(b & 0x7f) << BigInt(shift);\n }\n shift += 7;\n if ((b & 0x80) === 0)\n break;\n }\n if (big === null)\n return r % 2 ? -(r + 1) / 2 : r / 2;\n const s = (big >> BIG_ONE) ^ -(big & BIG_ONE);\n return s >= SAFE_MIN && s <= SAFE_MAX ? Number(s) : s;\n }\n doubleBE() {\n const v = this.view.getFloat64(this.pos, false);\n this.pos += 8;\n return v;\n }\n string() {\n const len = this.uvarint();\n const b = this.bytes;\n const start = this.pos;\n const end = start + len;\n this.pos = end;\n for (let i = start; i < end; i++) {\n if (b[i] >= 0x80)\n return sharedDecoder.decode(b.subarray(start, end));\n }\n if (len <= 4096)\n return String.fromCharCode.apply(null, b.subarray(start, end));\n let out = '';\n for (let i = start; i < end; i += 4096) {\n out += String.fromCharCode.apply(null, b.subarray(i, Math.min(end, i + 4096)));\n }\n return out;\n }\n}\nfunction readTaggedValue(cur) {\n const tag = cur.byte();\n switch (tag) {\n case 0:\n return cur.string(); // STRING\n case 1:\n return cur.zigzag(); // INT\n case 2:\n return cur.zigzag(); // LONG (number when safe, else bigint)\n case 3:\n return cur.doubleBE(); // DOUBLE\n case 4:\n return cur.byte() !== 0; // BOOLEAN\n case 5:\n return cur.zigzag(); // SHORT\n case 6:\n return cur.string(); // BIGDECIMAL (kept as string)\n case 7:\n return cur.slice(cur.uvarint()); // BYTES\n case 8:\n return cur.zigzag(); // DATETIME (epoch millis)\n case 9:\n return null; // NULL (inline; replaces the null bitmap)\n default:\n throw new Error(`Unknown SCDB value tag ${tag}`);\n }\n}\n/**\n * Decodes an SCDB `RBUF` blob into delta records, using the column dictionary (ordered field-name\n * list) the client derives from the resource's metadata and validates against the server's\n * `DICT_HASH`. Each record's `cells` is a fresh target object passed to [decodeColumns].\n */\nexport function decodeScdb(bytes, dictionary) {\n const cur = readHeader(bytes);\n const flags = cur.byte();\n const n = cur.uvarint();\n const rowRefs = readRowRefs(cur, n);\n const ops = readOps(cur, n, flags);\n const records = new Array(n);\n const targets = new Array(n);\n for (let i = 0; i < n; i++) {\n const cells = {};\n records[i] = { rowRef: rowRefs[i], operation: ops[i], cells };\n targets[i] = cells;\n }\n decodeColumns(cur, n, dictionary, targets);\n return records;\n}\n/**\n * Reconstructs the legacy `ROW` array shape directly (the hot path used in the live socket flow):\n * `[{ ...cells, DETAILS: { OPERATION, ROW_REF } }]`. Builds straight into the row objects with no\n * intermediate record/cells allocation.\n */\nexport function decodeScdbToRows(bytes, dictionary) {\n const cur = readHeader(bytes);\n const flags = cur.byte();\n const n = cur.uvarint();\n const rowRefs = readRowRefs(cur, n);\n const ops = readOps(cur, n, flags);\n const rows = new Array(n);\n for (let i = 0; i < n; i++) {\n rows[i] = { DETAILS: { OPERATION: ops[i], ROW_REF: rowRefs[i] } };\n }\n decodeColumns(cur, n, dictionary, rows);\n return rows;\n}\n/** @internal */\nexport function assertScdbMagic(bytes) {\n for (let i = 0; i < MAGIC.length; i++) {\n if (bytes[i] !== MAGIC[i])\n throw new Error('Not an SCDB block (bad magic)');\n }\n}\n/** Validates the magic and leaves the cursor positioned at the flags byte (read by the caller). */\nfunction readHeader(bytes) {\n assertScdbMagic(bytes);\n const cur = new Cursor(bytes);\n cur.pos = MAGIC.length;\n return cur;\n}\nfunction readRowRefs(cur, n) {\n const refs = new Array(n);\n for (let i = 0; i < n; i++)\n refs[i] = cur.string();\n return refs;\n}\nconst FLAG_UNIFORM_OPS = 0x02;\nfunction readOps(cur, n, flags) {\n const ops = new Array(n);\n if ((flags & FLAG_UNIFORM_OPS) !== 0) {\n const op = OPS[cur.byte()];\n for (let i = 0; i < n; i++)\n ops[i] = op;\n return ops;\n }\n const packed = cur.slice(byteLength(n * 2));\n for (let i = 0; i < n; i++) {\n const lo = bitSet(packed, i * 2) ? 1 : 0;\n const hi = bitSet(packed, i * 2 + 1) ? 2 : 0;\n ops[i] = OPS[lo | hi];\n }\n return ops;\n}\nconst COL_FLAG_DENSE = 0x01;\nconst ENC_DELTA_ZIGZAG = 2;\n/** Single-pass column decode straight into the supplied per-row target objects. Nulls are inline in\n * the value stream (TAG_NULL for RAW_TAGGED, dict index 0 for STRING_DICT) — no null bitmap. */\nfunction decodeColumns(cur, n, dictionary, targets) {\n const columnCount = cur.uvarint();\n for (let c = 0; c < columnCount; c++) {\n const colId = cur.uvarint();\n const field = dictionary[colId];\n if (field === undefined)\n throw new Error(`Unknown SCDB column id ${colId}`);\n const encoding = cur.byte();\n const dense = (cur.byte() & COL_FLAG_DENSE) !== 0;\n const presence = dense ? null : cur.slice(byteLength(n));\n if (encoding === ENC_STRING_DICT) {\n const dictSize = cur.uvarint();\n const dict = new Array(dictSize);\n for (let i = 0; i < dictSize; i++)\n dict[i] = cur.string();\n for (let r = 0; r < n; r++) {\n if (dense || bitSet(presence, r)) {\n const idx = cur.uvarint();\n targets[r][field] = idx === 0 ? null : dict[idx - 1];\n }\n }\n }\n else if (encoding === ENC_DELTA_ZIGZAG) {\n // Cumulative sum of zigzag deltas. LONG (typeTag 2) accumulates in BigInt and narrows per cell\n // (number when safe, else bigint), so a running total that crosses 2^53 stays exact — matching the\n // WASM/Kotlin i64 accumulators and the customNumberParser rule. Deciding number-vs-bigint from the\n // first value alone would silently lose precision once the cumulative sum passes 2^53.\n // INT/SHORT/DATETIME are always < 2^53, so they accumulate in Number space.\n const typeTag = cur.byte();\n let present = 0;\n if (typeTag === 2) {\n let acc = BigInt(0);\n for (let r = 0; r < n; r++) {\n if (dense || bitSet(presence, r)) {\n const v = cur.zigzag();\n const delta = typeof v === 'bigint' ? v : BigInt(v);\n acc = present > 0 ? acc + delta : delta;\n targets[r][field] = acc >= SAFE_MIN && acc <= SAFE_MAX ? Number(acc) : acc;\n present++;\n }\n }\n }\n else {\n let acc = 0;\n for (let r = 0; r < n; r++) {\n if (dense || bitSet(presence, r)) {\n const v = cur.zigzag();\n acc = present > 0 ? acc + Number(v) : Number(v);\n targets[r][field] = acc;\n present++;\n }\n }\n }\n }\n else {\n for (let r = 0; r < n; r++) {\n if (dense || bitSet(presence, r)) {\n targets[r][field] = readTaggedValue(cur);\n }\n }\n }\n }\n}\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 this.cachedResources = null;\n this.cachedRequests = new Map();\n }\n getMetadataFor(resourceName) {\n return this.cachedMetadata.get(resourceName);\n }\n getJsonSchemaFor(resourceName) {\n return this.cachedJsonSchema.get(resourceName);\n }\n getResources() {\n return this.cachedResources;\n }\n hasMetadataFor(resourceName) {\n return this.cachedMetadata.has(resourceName);\n }\n hasJsonSchemaFor(resourceName) {\n return this.cachedJsonSchema.has(resourceName);\n }\n hasResources() {\n return this.cachedResources !== null;\n }\n setMetadataFor(resourceName, metadata) {\n this.cachedMetadata.set(resourceName, metadata);\n }\n setJsonSchemaFor(resourceName, schemaResponse) {\n this.cachedJsonSchema.set(resourceName, schemaResponse);\n }\n setResources(resources) {\n this.cachedResources = resources;\n }\n getRequestFor(key) {\n return this.cachedRequests.get(key);\n }\n hasRequestFor(key) {\n return this.cachedRequests.has(key);\n }\n setRequestFor(key, response) {\n this.cachedRequests.set(key, response);\n }\n}\n/**\n * The DI token for the MetaCache interface.\n * @internal\n */\nexport const MetaCache = DI.createInterface((x) => x.singleton(DefaultMetaCache));\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 { 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","/**\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 { 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","const errorCodeOf = (source) => {\n var _a, _b;\n const carrier = source;\n const nack = (_b = (_a = carrier === null || carrier === void 0 ? void 0 : carrier.receivedMessage) !== null && _a !== void 0 ? _a : carrier === null || carrier === void 0 ? void 0 : carrier.body) !== null && _b !== void 0 ? _b : source;\n const errors = nack === null || nack === void 0 ? void 0 : nack.ERROR;\n const entry = Array.isArray(errors) ? errors[0] : source;\n const code = entry === null || entry === void 0 ? void 0 : entry.CODE;\n return typeof code === 'string' || typeof code === 'number' ? String(code) : undefined;\n};\n/**\n * Appends a NACK's error code to a log message. Error monitoring reports only log messages, not the\n * logged objects, and the code is a server identifier rather than user data, so it keeps reports of\n * different failures apart without sending the NACK.\n *\n * @param message - The log message.\n * @param source - A NACK message, one of its `ERROR` entries, or an error carrying the NACK as\n * `receivedMessage` or `body`.\n * @internal\n */\nexport const withErrorCode = (message, source) => {\n const code = errorCodeOf(source);\n return code === undefined ? message : `${message} [${code}]`;\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 { createLogger } from '@genesislcap/foundation-logger';\nexport const logger = createLogger('foundation-criteria');\n","import { Serialisers } from './serialisers';\n/* oxlint-disable no-magic-numbers -- expression param tuple shapes (3-tuple vs 4-tuple) */\nexport const interleave = (source, obj) => source\n .flat()\n .flatMap((value, index, array) => (array.length - 1 !== index ? [value, obj] : value));\nexport const ensureArray = (value) => (Array.isArray(value) ? value : [value]);\nexport const isExpressionParams = (value) => ((Array.isArray(value) && value.length === 3) ||\n (value.length === 4 && Array.isArray(value[0])) ||\n typeof value[0] === 'string') &&\n typeof value[1] === 'function' &&\n Object.values(Serialisers).includes(value[1]);\n/* oxlint-enable no-magic-numbers */\n","import { logger } from './logger';\nimport { Join } from './types';\nimport { interleave } from './utils';\nconst DEFAULT_GROUP = 'default';\n/**\n * Builder class used to generate query criteria\n *\n * @public\n */\nexport class CriteriaBuilder {\n constructor() {\n this.expressions = {};\n this.And = (expression, options = {}) => this.withExpression(expression, options, Join.And());\n this.Or = (expression, options = {}) => this.withExpression(expression, options, Join.Or());\n this.Not = (expression, options = {}) => this.withExpression(expression, options, Join.Not());\n }\n withExpression(expression, options = {}, groupJoin = Join.And()) {\n const { condition, join: optionsJoin, groupName } = options;\n const addExpressionToGroup = (e, gName = DEFAULT_GROUP) => {\n var _a;\n const prev = (_a = this.expressions[gName]) !== null && _a !== void 0 ? _a : [];\n this.expressions[gName] = [\n ...prev,\n { join: groupJoin || optionsJoin, condition, expression: e },\n ];\n };\n // When expression is array of expressions\n if (Array.isArray(expression)) {\n // And a join option is present\n if (optionsJoin) {\n // Remove inline joins\n const withoutInline = expression.filter((e) => {\n const isJoin = e instanceof Join;\n if (isJoin) {\n logger.warn('Inline joins will be discarded when join is defined in ExpressionOptions');\n }\n return !isJoin;\n });\n if (groupName) {\n // Add every expression to the group\n withoutInline.forEach((exp) => {\n addExpressionToGroup(exp, groupName);\n });\n }\n else {\n // Merge join specified in options with expressions and add to group\n const joined = interleave(withoutInline, optionsJoin);\n addExpressionToGroup(joined, DEFAULT_GROUP);\n }\n }\n else {\n addExpressionToGroup(expression, DEFAULT_GROUP);\n }\n }\n else if (typeof expression === 'string') {\n addExpressionToGroup(expression, DEFAULT_GROUP);\n }\n else {\n addExpressionToGroup(expression, expression.group);\n }\n return this;\n }\n build(outputFn) {\n const parsedExpressions = Object.entries(this.expressions).reduce((acc, [groupName, expressions]) => (Object.assign(Object.assign({}, acc), { [groupName]: `(${expressions\n .filter(({ condition }) => (condition ? condition() : true))\n .map(({ expression, join }, index, arr) => this.parseExpression(expression, arr[index - 1], join))\n .join('')})` })), {});\n return outputFn\n ? outputFn(parsedExpressions)\n : `(${Object.values(parsedExpressions).join(' && ')})`;\n }\n reset() {\n this.expressions = {};\n }\n parseExpression(expression, previous, join) {\n const result = [];\n if (join && !!previous) {\n result.push(` ${join.operator} `);\n }\n if (typeof expression === 'string') {\n result.push(expression);\n }\n else if (Array.isArray(expression)) {\n expression.forEach((e, idx, arr) => {\n if (e instanceof Join) {\n const prev = arr[idx - 1];\n if (prev instanceof Join) {\n throw new Error('Adjacent Join operations detected');\n }\n }\n });\n result.push(`(${expression.map((e) => this.parseExpression(e, undefined)).join('')})`);\n }\n else if (expression instanceof Join) {\n result.push(` ${expression.operator} `);\n }\n else if (expression) {\n result.push(expression.serialiser(expression));\n }\n return result.join('');\n }\n}\n","import { Serialisers } from './serialisers';\n/**\n * @public\n */\nexport class ExpressionBuilder {\n constructor(opts) {\n this.serialiser = Serialisers.EQ;\n this.build = () => {\n if (!this.field) {\n throw new Error(`Missing required param 'field'`);\n }\n if (this.value === undefined) {\n throw new Error(`Missing required param 'value'`);\n }\n if (!this.serialiser) {\n throw new Error(`Missing required param 'serialise'`);\n }\n return {\n field: this.field,\n value: this.value,\n serialiser: this.serialiser,\n params: this.params,\n valueGetter: this.valueGetter,\n group: this.group,\n };\n };\n if (opts) {\n this.field = opts.field;\n this.value = opts.value;\n this.serialiser = opts.serialiser;\n this.params = opts.params;\n this.valueGetter = opts.valueGetter;\n this.group = opts.group;\n }\n }\n withField(field) {\n this.field = field;\n return this;\n }\n withValue(value) {\n this.value = value;\n return this;\n }\n withSerialiser(serialiser) {\n this.serialiser = serialiser;\n return this;\n }\n withParams(params) {\n this.params = params;\n return this;\n }\n withValueGetter(valueGetter) {\n this.valueGetter = valueGetter;\n return this;\n }\n withGroup(group) {\n this.group = group;\n return this;\n }\n}\n","import { Operator } from './types';\n/**\n * Escapes a string for the inside of a single-quoted criteria literal (`'...'`): `\\` and `'`,\n * which would otherwise end or break the literal, and line breaks, which a single-quoted Groovy\n * string can't hold raw.\n *\n * @remarks\n * Single quotes rather than double: a double-quoted string is a GString, which GSF's criteria\n * validator rejects (and a `$` in it starts interpolation).\n *\n * @public\n */\nexport const escapeCriteriaString = (value) => value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\").replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r');\nconst quote = (value) => `'${escapeCriteriaString(value)}'`;\nconst getValue = (e) => {\n const { value } = e;\n if (e.valueGetter) {\n return e.valueGetter(value);\n }\n else if (typeof value === 'function') {\n return value(e);\n }\n else if (Array.isArray(value)) {\n return value.join(',');\n }\n else if (typeof value === 'string') {\n return quote(value);\n }\n return value;\n};\nconst createSerialiser = (operator) => (e) => `${e.field} ${operator} ${getValue(e)}`;\nconst notEqual = (e) => createSerialiser(Operator.NE)(e);\nconst fieldContains = (e) => `${e.field}.contains(${getValue(e)})`;\n/**\n * Functions to to serialise an Expression to a string\n *\n * @remarks\n * For a string, number, boolean or null value, every serialiser but the deprecated `endsWith`\n * emits criteria GSF's criteria validator accepts: `Expr` calls and field methods are limited to\n * its whitelist, and a string is a single-quoted literal. Other values go in as they are: a\n * `valueGetter`'s result and a function value's are not quoted, and an array is joined with\n * commas, which GSF can't parse (it has no list syntax).\n *\n * `contains` is a case-sensitive substring match (`FIELD.contains('x')`, the same as\n * `fieldContains`). Unlike `containsIgnoreCase` it isn't null-safe: on a row whose field is null\n * the call throws, and GSF then counts the whole criteria as not matching that row, even across\n * `||` or under a negation. The whitelist has no null-safe case-sensitive match, so use\n * `containsIgnoreCase` for a field that can be null. `NOT` is a negated equality\n * (`FIELD != x`, the same as `NE`).\n *\n * @public\n */\nexport const Serialisers = {\n AND: (e) => createSerialiser(Operator.AND)(e),\n OR: (e) => createSerialiser(Operator.OR)(e),\n NOT: notEqual,\n GT: (e) => createSerialiser(Operator.GT)(e),\n GE: (e) => createSerialiser(Operator.GE)(e),\n LT: (e) => createSerialiser(Operator.LT)(e),\n LE: (e) => createSerialiser(Operator.LE)(e),\n NE: notEqual,\n EQ: (e) => createSerialiser(Operator.EQ)(e),\n equals: (e) => `${e.field}.equals(${getValue(e)})`,\n equalsIgnoreCase: (e) => `${e.field}.equalsIgnoreCase(${getValue(e)})`,\n contains: fieldContains,\n fieldContains,\n containsIgnoreCase: (e) => `Expr.containsIgnoreCase(${e.field}, ${getValue(e)})`,\n startsWith: (e) => `${e.field}.startsWith(${getValue(e)})`,\n /**\n * @deprecated GSF 8.14 and later reject `FIELD.endsWith(...)` (\"Field method FIELD.endsWith\n * is not supported\"), and its criteria whitelist has no suffix match to use instead. Use\n * `startsWith`, `containsIgnoreCase` or `contains`.\n */\n endsWith: (e) => `${e.field}.endsWith(${getValue(e)})`,\n dateIsToday: (e) => `Expr.dateIsToday(${e.field})`,\n dateIsEqual: (e) => `Expr.dateIsEqual(${e.field}, ${getValue(e)})`,\n dateIsGreaterEqual: (e) => `Expr.dateIsGreaterEqual(${e.field}, ${getValue(e)})`,\n dateIsLessEqual: (e) => `Expr.dateIsLessEqual(${e.field}, ${getValue(e)})`,\n dateTimeIsGreaterEqual: (e) => `Expr.dateTimeIsGreaterEqual(${e.field}, ${getValue(e)})`,\n dateTimeIsLessEqual: (e) => `Expr.dateTimeIsLessEqual(${e.field}, ${getValue(e)})`,\n};\n","/**\n * @internal\n */\n/**\n * @internal\n */\nexport var Operator;\n(function (Operator) {\n Operator[\"AND\"] = \"&&\";\n Operator[\"OR\"] = \"||\";\n Operator[\"NOT\"] = \"!\";\n Operator[\"GT\"] = \">\";\n Operator[\"GE\"] = \">=\";\n Operator[\"LT\"] = \"<\";\n Operator[\"LE\"] = \"<=\";\n Operator[\"NE\"] = \"!=\";\n Operator[\"EQ\"] = \"==\";\n})(Operator || (Operator = {}));\n/**\n * Used to describe how Expressions are joined\n * @public\n */\nexport class Join {\n constructor(type) {\n this.$$operator = type;\n }\n static And() {\n return new Join(Operator.AND);\n }\n static Or() {\n return new Join(Operator.OR);\n }\n static Not() {\n return new Join(Operator.NOT);\n }\n static GreaterThan() {\n return new Join(Operator.GT);\n }\n static GreaterThanOrEqual() {\n return new Join(Operator.GE);\n }\n static LessThan() {\n return new Join(Operator.LT);\n }\n static LessThanOrEqual() {\n return new Join(Operator.LE);\n }\n static NotEqual() {\n return new Join(Operator.NE);\n }\n static Equal() {\n return new Join(Operator.EQ);\n }\n get operator() {\n return this.$$operator;\n }\n}\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","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 rapidDesignSystemImport(): Promise<DesignSystemModule> {\n * let module: DesignSystemModule;\n * let type: ResourceType = ResourceType.remote;\n * try {\n * module = await import('foundationRapid/RapidDesignSystem');\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/rapid-design-system');\n * return assureDesignSystem(module);\n * } finally {\n * logger.debug(`Using '${type}' version of rapid-design-system`);\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","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]);\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","import { 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 * When `'true'`, request/reply and event traffic (`request`, `commitEvent`, metadata, schema and\n * resources lookups) is sent over HTTP even while the primary connection is a WebSocket.\n * Streaming (`stream`/`snapshot`) stays on the socket.\n * @remarks Optional. Can also be toggled per-session via the `?feature.forceHttpReqRep` URL flag.\n * @public\n */\nlet _FORCE_HTTP_REQREP;\ntry {\n _FORCE_HTTP_REQREP = FORCE_HTTP_REQREP;\n}\ncatch (_e) { }\nexport { _FORCE_HTTP_REQREP as FORCE_HTTP_REQREP };\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 (_f) { }\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 (_g) { }\nexport { _HTTP_CONFIG as HTTP_CONFIG };\n/**\n * The default Organisation value, used in auth/login flow [`genesislcap-foundation-auth`](https://link-to-docs).\n * @remarks Optional.\n * @public\n */\nlet _DEFAULT_ORGANISATION;\ntry {\n _DEFAULT_ORGANISATION = DEFAULT_ORGANISATION;\n}\ncatch (_h) { }\nexport { _DEFAULT_ORGANISATION as DEFAULT_ORGANISATION };\n/**\n * The default Password value, used in auth/login flow [`genesislcap-foundation-auth`](https://link-to-docs).\n * @remarks Optional.\n * @public\n */\nlet _DEFAULT_PASSWORD;\ntry {\n _DEFAULT_PASSWORD = DEFAULT_PASSWORD;\n}\ncatch (_j) { }\nexport { _DEFAULT_PASSWORD as DEFAULT_PASSWORD };\n/**\n * The default Username value, used in auth/login flow [`genesislcap-foundation-auth`](https://link-to-docs).\n * @remarks Optional.\n * @public\n */\nlet _DEFAULT_USER;\ntry {\n _DEFAULT_USER = DEFAULT_USER;\n}\ncatch (_k) { }\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","const FEATURE_PREFIX = 'feature.';\nconst isFeatureParamKey = (key) => key.toLowerCase().startsWith(FEATURE_PREFIX);\n/**\n * Returns true when `feature.<name>` is present in the given search string.\n * @internal\n */\nexport const isFeatureActivatedInSearch = (search, feature) => {\n if (!feature) {\n return false;\n }\n const featureKey = `${FEATURE_PREFIX}${feature}`.toLowerCase();\n const params = new URLSearchParams(search);\n for (const [key] of params.entries()) {\n if (key.toLowerCase() === featureKey) {\n return true;\n }\n }\n return false;\n};\n/**\n * Returns the names of all feature flags present in the given search string.\n * @internal\n */\nexport const getActivatedFeaturesFromSearch = (search) => {\n const params = new URLSearchParams(search);\n const features = [];\n for (const [key] of params.entries()) {\n if (isFeatureParamKey(key)) {\n const feature = key.slice(FEATURE_PREFIX.length);\n if (feature) {\n features.push(feature);\n }\n }\n }\n return features;\n};\n/**\n * Returns a new URL with `feature.*` query params rewritten to match the given feature list.\n * @internal\n */\nexport const applyActivatedFeaturesToUrl = (url, features) => {\n const next = new URL(url.href);\n const params = next.searchParams;\n for (const key of [...params.keys()]) {\n if (isFeatureParamKey(key)) {\n params.delete(key);\n }\n }\n for (const feature of features) {\n if (feature) {\n // Use an explicit value so routers/normalizers that drop empty query values\n // (e.g. some React Router redirect paths) still preserve the flag.\n params.set(`${FEATURE_PREFIX}${feature}`, 'true');\n }\n }\n return next;\n};\n/**\n * Returns true when `feature.<name>` is present in the current URL query string.\n * @public\n */\nexport const isFeatureActivated = (feature) => isFeatureActivatedInSearch(window.location.search, feature);\n/**\n * Returns the names of all feature flags currently present in the URL query string.\n * @example\n * // URL: ?feature.ai&feature.forceHttp=true\n * getActivatedFeatures(); // ['ai', 'forceHttp']\n * @public\n */\nexport const getActivatedFeatures = () => getActivatedFeaturesFromSearch(window.location.search);\n/**\n * Rewrites URL `feature.*` query params to match the given feature list (presence-only).\n * Removes any existing `feature.*` params, then adds each selected feature as `feature.<name>`.\n * Reloads by default so boot-time consumers (e.g. AI registration) pick up the change.\n * @public\n */\nexport const setActivatedFeatures = (features, options = {}) => {\n const { reload = true } = options;\n const url = applyActivatedFeaturesToUrl(new URL(window.location.href), features);\n if (reload) {\n window.location.assign(url.toString());\n return;\n }\n window.history.replaceState({}, '', url.toString());\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","/**\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 * @returns A cleanup function to disconnect the observer\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 return () => {\n observer.disconnect();\n };\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 * A no-operation function that executes an optional callback.\n *\n * This is a lower-level utility function. For preventing tree-shaking of custom elements,\n * prefer using {@link avoidTreeShaking} which provides a more explicit API.\n *\n * @param callback - An optional function to execute for its side effects.\n * @public\n */\nexport const noop = (fn) => {\n fn === null || fn === void 0 ? void 0 : fn();\n};\n/**\n * Explicitly prevents tree-shaking of custom element classes by referencing them.\n *\n * Bundlers may incorrectly remove code that it thinks has no side effects,\n * such as custom element definitions that are only referenced in templates.\n * By passing these classes to `avoidTreeShaking`, we create a side effect\n * that signals to the bundler to preserve the code.\n *\n * @param classes - One or more custom element classes that should not be tree-shaken.\n * @public\n */\nexport const avoidTreeShaking = (...classes) => {\n noop(() => {\n // Reference each class to prevent tree-shaking\n classes.forEach((cls) => {\n void cls;\n });\n });\n};\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"],"names":["DefaultTypedBroadcastChannel","BroadcastChannel","constructor","super","arguments","this","postMessage","args","type","detail","isMessageType","event","_a","data","registerTypedBroadcastChannel","name","Value","_microsoft_fast_foundation__WEBPACK_IMPORTED_MODULE_0__","DI","createInterface","x","transient","createTypedBroadcastChannel","CredentialManagerConfig","esm_index_js_","supportsCredentialsContainer","navigator","credentials","window","logger","v","warn","credentialSeparator","extractParts","input","separator","limit","split","map","opt","trim","filter","includesSeparator","value","includes","countSeparators","match","RegExp","length","prioritizeSeparatorInputs","inputs","find","createId","organisation","migrationFailedLogger","subtext","defaultCredentialRequestOptions","password","mediation","defaultCredentialManagerConfig","cookie","path","expires","storePasswords","DefaultCredentialManager","session","config","createBasicCredentials","auth_types","h","BASIC","username","mfaToken","getMFAToken","createRefreshCredentials","_b","_c","REFRESH","getUsername","refreshToken","getRefreshToken","createSSOCredentials","SSO","ssoToken","getSSOToken","validateBasicCredentials","validateRefreshCredentials","validateSSOCredentials","validateUserCredentialData","ensurePassword","baseResult","id","normaliseLegacyCredentialData","legacyData","_","err","legacyCookie","undefined","storeCredentialsInContainer","tslib_es6","sH","PasswordCredential","debug","store","getCredentialsFromContainer","options","get","storeCredentialsInCookie","rest","Tt","js_cookie","A","set","JSON","stringify","domain","location","hostname","secure","getCredentialsFromCookie","parse","storeCredentials","credential","Promise","resolve","getCredentials","getSessionStorageItem","getLocalStorageItem","removeCookie","remove","removeSSOToken","removeSessionStorageItem","removeUsername","removeLocalStorageItem","removeRefreshToken","removeMFAToken","removeAll","preventSilentAccess","Cg","Qj","N","optional","CredentialManager","singleton","fromDTOStringArray","arr","Array","isArray","loginDTOMapper","dto","MESSAGE_TYPE","DETAILS","queue","UPDATE_QUEUE_DETAILS","messageType","sourceRef","SOURCE_REF","userName","USER_NAME","updateQueue","UPDATE_QUEUE","zeroMqProxyModeEnabled","ZERO_MQ_PROXY_MODE_ENABLED","zeroMqProxyInboundPort","ZERO_MQ_PROXY_INBOUND_PORT","zeroMqProxyOutboundPort","ZERO_MQ_PROXY_OUTBOUND_PORT","userKVs","USER","details","system","SYSTEM","date","DATE","heartbeatIntervalSecs","HEARTBEAT_INTERVAL_SECONDS","failedLoginAttempts","FAILED_LOGIN_ATTEMPTS","rejectedLoginAttempts","REJECTED_LOGIN_ATTEMPTS","lastLoginDatetime","LAST_LOGIN_DATE_TIME","daysToPasswordExpiry","DAYS_TO_PASSWORD_EXPIRY","product","products","PRODUCT","p","NAME","version","VERSION","permission","PERMISSION","profile","PROFILE","Error","e","error","DefaultAuth","loggedUserResultChanged","isLoggedInSubject","next","isLoggedIn","isLoggedIn$","asObservable","currentUser","isAuthenticated","connect","messageBuilder","credentialManager","isWorking","BehaviorSubject","t","addAuthenticationChangeListener","login","loginMessage","createLoginMessage","authResult","send","ERROR","l","applyAuthResults","authToken","SESSION_AUTH_TOKEN","REFRESH_AUTH_TOKEN","profiles","permissions","sessionId","SESSION_ID","setAuthResult","error_code","O","received","isIgnorableError","removeAuthResults","unset","loggedUserResult","logout","logoutResult","success","logoutMessage","createLogoutMessage","deleteUserFromSessionStorage","CODE","OIDC_LOGOUT_URL","unexpectedLogoutNack","message","Go","LOGOUT_NACK","LOGOUT_ACK","x6","SESSION_NOT_FOUND","open","logoutError","sentMessage","receivedMessage","reAuthFromSession","isConnected","ensureConnection","refreshCredentials","refreshTokenMessage","createRefreshTokenMessage","refreshTokenResult","Gp","EVENT_LOGIN_AUTH_ACK","getLoggedUserFromMessage","hostUrl","result","sessionAuthToken","refreshAuthToken","index_js_","observable","prototype","dm","lT","user","KJ","Auth","AuthType","AuthError","sent","Object","setPrototypeOf","_d","_e","_f","_g","_h","toLowerCase","getMessageError","errorDetailFormatter","join","getDetailsError","hasPasswordExpiredError","hasErrorCode","hasMFAError","requiresTermsAndConditions","code","some","TEXT","ConnectError","cause","ConnectNackError","kind","texts","Boolean","nackText","_errorCodes__WEBPACK_IMPORTED_MODULE_1__","errors","warnings","WARNING","ConnectTransportError","closeCode","closeReason","ConnectHttpError","status","statusText","body","ConnectTimeoutError","timeout","ConnectAbortError","reason","RETRYABLE_STATUSES","Set","http_status_codes__WEBPACK_IMPORTED_MODULE_0__","REQUEST_TIMEOUT","TOO_MANY_REQUESTS","INTERNAL_SERVER_ERROR","BAD_GATEWAY","SERVICE_UNAVAILABLE","GATEWAY_TIMEOUT","RETRYABLE_NACK_STATUSES","TRANSIENT_ERROR_CODES","UNAVAILABLE","OPERATION_TIMEOUT","MAX_LOGON_LIMIT","statusOf","entry","Number","parseInt","String","STATUS_CODE","isFinite","isRetryable","statuses","source","nack","nackOf","every","has","DefaultConnectEvents","streamListeners","_genesislcap_foundation_utils__WEBPACK_IMPORTED_MODULE_0__","r","streamCompleteListeners","streamErrorListeners","commitListeners","metadataListeners","commitResponseListeners","addStreamListener","listener","complete","unsubscribe","subscribe","completeUnsubscribe","errorUnsubscribe","onStreamEvent","resourceName","stream","functions","publish","CustomEvent","onStreamErrorEvent","onStreamCompleteEvent","addCommitListener","onCommitEvent","eventName","addMetadataListener","onMetadataEvent","addCommitResponseListener","onCommitResponseEvent","response","ConnectEvents","_microsoft_fast_foundation__WEBPACK_IMPORTED_MODULE_1__","ConnectEventsEmitter","aliasTo","defaultHttpConnectConfig","polling","assign","POLLING_MAP","EVENT_AMEND_USER","TEMP_FREQUENCY","AMOUNT_OF_POLLS","QUERIES","POLLING_INTERVAL_MAP","ALL_TRADES","ALL_USERS","ALL_PROCESSES_STATUS","POLLING_FREQUENCY","HttpConnectConfig","instance","DefaultHttpTransport_1","DefaultHttpTransport","http","toHttpHost","host","normalised","startsWith","replace","endsWith","concat","post","call","init","getUrl","getBody","headers","createHTTPHeadersFromMessage","requestServer","requestMessage","url","queryParts","REQUEST","keys","forEach","key","isNaN","push","encodeURIComponent","request","aborted","requestLifecycle","nx","signal","controller","AbortController","then","reply","errorCodes","cV","connect_errors","GI","asConnectError","fb","abort","RI","networkFailure","K_","apiEndpoint","connect_message","DATA_LOGON","DATASOURCE_NAME","HttpTransport","updateState","state","update","ROW","row","eventData","ref","ROW_REF","OPERATION","unshift","item","DefaultHttpConnect_1","DefaultHttpConnect","_isConnected","isConnectedSubject","metaCache","serializer","transport","isConnected$","ongoingTurbo","streams","Map","inFlightRequests","iL","inFlightMetadata","dataserverEncodingStrippedWarned","ongoingRefresh","sessionGeneration","scdbDecoder","scdbStreamDecoder","d","setMetadataRefresher","getMetadata","handleSessionRefresh","sessionRefresh","$G","vE","HANDLED_BY_OTHER_TAB","setTimeout","REAUTH_WAIT_MS","SUCCESS","ALREADY_VALID","finally","checkHost","getMessage","HEARTBEAT_PING","HEARTBEAT_PONG","needsHandling","withinDeadline","waitForOngoingRefresh","AUTH_MESSAGES","retryAfterSessionRefresh","run","failureMessage","isUnauthorized","httpMode","setValidSession","valid","deprecated","connected","setSessionStorageItem","disconnect","clear","snapshot","params","snapshotMessage","createDataLogonMessage","stripDataserverColumnarEncoding","dataLogoff","catch","onMessage","onError","streamMessage","RESOURCE_NAME","interval$","loggedOnIn","subscriptionLost","justLoggedOn","logOnAgain","generation","status_codes","CONFLICT","nextReply","onSubscriptionLost","from","H","pipe","switchMap","n","ms","interval","Y","takeWhile","document","visibilityState","exhaustMap","retry","L","count","MAX_RETRIES","resetOnSuccess","delay","retryCount","pollRetryDelay","finalize","j","STREAM","NOT_FOUND","of","delete","empty","w","T","refreshed","r3","timer","RETRY_DELAY_MS","streamState","initialState","scan","S","streamWithoutAutoTeardown","getMoreRows","moreRowsMessage","createMoreRowsMessage","getMoreColumns","createMoreColumnsMessage","streamSourceRef","dataLogoffMessage","createDataLogoffMessage","res","resourceName_1","useCache","hasMetadataFor","getMetadataFor","fetchMetadata","metaRequestMessage","createMetaRequestMessage","setMetadataFor","getJSONSchema","JSON_SCHEMA_REQUEST","params_1","cacheKey","d2","hasRequestFor","getRequestFor","sendRequest","setRequestFor","createRequestMessage","scdbResourceName","prepareRequest","ENCODING","getAvailableResources","hasResources","getResources","createResourcesMessage","resources","setResources","commitEvent","commitMessage","createCommitMessage","maybeTurbo","_l","turbo","freq","duration","originalPollingIntervalMap","tempPollingMap","q","updateIntervals","handlePollingIntervalMapUpdate","pollingIntervalMap","resource","hasOwnProperty","newFreq","values","s","volatile","metadata","G","json","b_","UNAUTHORIZED","EVENT_LOGIN_AUTH","EVENT_LOGOUT","EVENT_CHANGE_USER_PASSWORD","EVENT_SELF_SERVICE_PASSWORD_RESET","EVENT_PASSWORD_RESET_ACTION","HttpConnect","DefaultConnect","socket","events","encoding","dataserverEncoding","scdbEncoding","httpScdbDecoder","refresh","setScdbMetadataRefresher","useHttpReqRep","variables","Tp","featureFlags","m4","httpHost","requestOverHttp","sendReqRep","vN","reset","reconnect","msg","requestTime","performance","now","firstMessageTime","sendForStream","toFixed","sendForStreamWithoutTeardown","viewNumber","callerOptions","metaResponse","asError","hasJsonSchemaFor","getJsonSchemaFor","jsonSchema","setJsonSchemaFor","defaultTimeout","requestTimeout","promise","yQ","connect_events","EQ","connect_types","R","isNackShaped","useHttpConnect","PF","WSConnect","Connect","getConnect","getOrCreateDOMContainer","defaultConnectConfig","alwaysOn","enableHeartbeat","enableHeartbeatLogging","verboseHeartbeat","enableMessageLogging","reconnectAttempts","reconnectInterval","reconnectStreams","isWebSocketExpression","ConnectConfig","stringifyCodes","entries","normaliseErrorCodes","createHttpError","tslib__WEBPACK_IMPORTED_MODULE_0__","_connect_errors__WEBPACK_IMPORTED_MODULE_3__","text","readBody","DefaultHttp","requestInit","fetch","method","_networkFailure__WEBPACK_IMPORTED_MODULE_4__","I","handleResponse","redirected","href","onResponse","ok","deserialize","_genesislcap_foundation_utils__WEBPACK_IMPORTED_MODULE_1__","Http","_microsoft_fast_foundation__WEBPACK_IMPORTED_MODULE_2__","MessageType","EventMessageType","MessageCode","sortKeys","sort","reduce","acc","buildRequestCacheKey","messageHasErrorCode","DefaultMessageBuilder","uuid","_auth_auth_types__WEBPACK_IMPORTED_MODULE_3__","PASSWORD","MFA_CODE","SSO_TOKEN","JWT","jwt","DOMAIN","loginResult","DATA_LOGOFF","RESOURCES_REQUEST","META_REQUEST","FEATURE","createChangePasswordMessage","oldPassword","newPassword","OLD_PASSWORD","NEW_PASSWORD","createForgotPasswordMessage","returnUrl","requester","RETURN_URL","createForgotPasswordTokenMessage","resetToken","RESET_TOKEN","MORE_ROWS","VIEW_NUMBER","MORE_COLUMNS","contentType","createHeartbeatPingMessage","verbose","VERBOSE","_session__WEBPACK_IMPORTED_MODULE_4__","k","MessageBuilder","networkFailures","WeakSet","markNetworkFailure","TypeError","add","isNetworkFailure","REJECTED_NACKS","_message__WEBPACK_IMPORTED_MODULE_1__","MSG_NACK","LOGON_NACK","INVALID_INDEX_NACK","isRejectedNack","settleWithin","onCancel","hasTimeout","reject","onAbort","cancel","_connect_errors__WEBPACK_IMPORTED_MODULE_0__","xY","cleanUp","clearTimeout","removeEventListener","addEventListener","once","AQ","Math","min","abortedBeforeSend","rejectEventNackIfAsked","rejectEventNack","InFlightRequests","start","waiting","release","OPS","transpose","payload","dictionary","rows","col","c","field","i","idx","vals","presentCount","present","decodeColumnarQueryUpdate","wasm","o","ops","opsArr","refs","decodeScdbjToRows","SCDBJ","bytes","toBytes","RBUF","decodeToRows","V$","rbuf","Uint8Array","base64","K","decodeColumnarReply","decodeScdbjToCells","REPLY","resourceNameOf","datasourceName","slice","ScdbStreamDecoder","byHash","expectedHashByResource","refreshing","setWasm","refresher","metadataRefresher","withoutEncoding","requestRefresh","onLogonAck","DICT_HASH","dictionaryFor","isQueryUpdate","expectedHash","decodeQueryUpdate","cached","names","replyFields","REPLY_FIELD","FIELD","TYPE","f","dictionaryFromMetadata","clientHash","fieldNames","joined","charCodeAt","imul","toString","padStart","dictionaryHash","REAUTH_ACTION_LOCK_KEY","TRANSIENT_CLIENT_ERRORS","SessionRefreshResult","performRefresh","_genesislcap_web_core__WEBPACK_IMPORTED_MODULE_2__","_http__WEBPACK_IMPORTED_MODULE_4__","refreshLoginResponse","aW","_utils__WEBPACK_IMPORTED_MODULE_3__","isRejectedByServer","tryRefreshSession","reloadOnFailure","lockTimestamp","localStorage","getItem","Date","removeItem","clearStaleLock","setItem","loginDetailsFetch","Be","reload","FAILED","onOtherTabReauthComplete","callback","handler","newValue","waitForOtherTabReauth","done","stopListening","SCDB_DECODER_WASM_BASE64","PAGE","BIG_32","BigInt","SAFE_MAX","MAX_SAFE_INTEGER","SAFE_MIN","defaultWasm","getDefaultScdbWasm","wasmBytes","memory","WebAssembly","Memory","initial","instantiate","env","decode","exports","decoder","TextDecoder","BLOB_BASE","blob","E0","flags","uv","b","pow","preparse","outBytes","outBase","needed","buffer","byteLength","grow","ceil","u8","blobBase","dv","DataView","getInt32","base","numsOff","strOffOff","strLenOff","refOffOff","refLenOff","colIdsOff","countsOff","idxOff","kindsOff","opsOff","nums","Float64Array","strOff","Int32Array","strLen","refOff","refLen","colIds","kinds","subarray","counts","ro","cursor","ci","cb","cache","raw","off","a","getUint32","bool","assemble","initScdbWasm","DEFAULT_RECONNECT_INTERVAL","MAX_RECONNECT_INTERVAL","SocketReconnectStrategy","exponentialScheduler","reconnectOptions","attempts","baseInterval","random","linearScheduler","Ticker","workerScript","tick","stop","runWorker","worker","terminate","Worker","URL","createObjectURL","Blob","onmessage","SocketSubject","Subject","B","Observable","SocketMessageHandler","isSubscription","_message","_onMessage","_onError","_isSubscription","onReceivedMessage","onReceivedError","whenAborted","DefaultSocket","isConfigured","isConnecting","isDisconnected","isDisconnectedByServer","isReconnecting","hasValidSession","defaultInterval","secondsMultiplier","sessionCheckTimeout","scdbWasmRequested","heartbeatIsEnabled","heartbeatInterval","socketMessages","wsMessages","_scdbDecoder","heartbeatLoggingIsEnabled","connectOptions","messageLoggingIsEnabled","ensureScdbWasm","test","replacingLiveSocket","websocket","connection","info","rejectPendingRequests","cleanMessages","socketSubscription","subject","WebSocketSubject","Q","openObserver","prepareHeartbeat","closeObserver","closeEvent","onClose","object","serialize","deserializer","connectObserver","responseMessageReceivedLog","logMessageTypeFlow","messageHandler","getMessageHandler","nacked","applyServerHeartbeatInterval","LOGON_ACK","LOGOFF_ACK","QUERY_UPDATE","sendDataLogoff","removeMessageHandler","handleExpiredSession","usesCookieAuth","handleCookieBasedReauth","updateSessionAndSubscriptions","Z8","wsMessageHandlers","mh","systemDetails","serverIntervalSecs","heartbeatTicker","intervalInMillisecocnds","sendHeartbeat","ping","pong","heartbeatPingCallback","IS_AUTHENTICATED","heartbeatPongCallback","notAlwaysOnAndHeartbeating","scheduler","reconnectStrategy","Exponential","reconnectObservable","observer","timeoutId","recursiveTimeout","closed","retryInterval","attempt","attemptsAmount","reconnectionLimitReached","throwError","$","refreshSessionBeforeReconnect","reconnectObserver","AbortSignal","race","reloadPage","Lj","sendingMessasgeLog","setMessageHandler","onComplete","sendingMessageLog","logonSent","tornDown","DOM","queueUpdate","subscriber","messagesSubscription","settingMessageHandlerLog","gettingMessageHandlerLog","logFunc","logMsg","socket_status","S5","Socket","getSocket","DefaultSocketStatus","rxjs__WEBPACK_IMPORTED_MODULE_4__","closedClean","isConnectedChanged","resetClosedState","isReconnectingChanged","closedCode","closedReason","wasClean","_microsoft_fast_element__WEBPACK_IMPORTED_MODULE_2__","_genesislcap_foundation_user__WEBPACK_IMPORTED_MODULE_1__","SocketStatus","_microsoft_fast_foundation__WEBPACK_IMPORTED_MODULE_3__","dataServerResultFilter","rowId","toRowData","resolvedRowId","tmp","inserts","deletes","updates","_utils__WEBPACK_IMPORTED_MODULE_0__","formatTimestampForReqRep","timestamp","isDate","year","getUTCFullYear","month","getUTCMonth","day","getUTCDate","getUTCHours","getUTCMinutes","LITERAL_ESCAPES","literalValue","trimmed","quoted","exec","char","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","criteria","isSnapshot","maxRows","maxView","pollingInterval","movingView","orderBy","reverse","pollTriggerEvents","criteriaToFields","filters","reqFields","exprMatch","fieldNameMatcher","fieldName","toISOString","setDate","getDate","fieldNameValueMatcher","processGroovyExpression","greaterEqualMatch","timestampStr","upperName","toUpperCase","lessEqualMatch","operatorAt","indexOf","substr","processEqualityExpression","DatasourceConfig","DefaultDatasource","initialized","isInitialized","auth","connectEvents","fetchMetadataRequired","startStreamRequired","originalFieldDef","fieldMetadata","requestFields","customRequestFields","availableIndexes","availableSortableFields","availableCriteriaFields","criteriaOnlyRequest","loadMoreCount","readOnly","_allParams","pollTrigger$","rxjs__WEBPACK_IMPORTED_MODULE_3__","triggerPoll","validResourceName","_utils__WEBPACK_IMPORTED_MODULE_15__","options_1","fetchMeta","startStream","initialise","interruptedInit","latestInit","invalidateCache","superseded","reportStatus","isValidResource","resourceType","getResourceTypeFor","fetchAndApplyMetadata","createStream","destroy","commitResponseUnsubscribe","allResourceParams","ORDER_BY","findIndex","validIndexes","index","CRITERIA_MATCH","MAX_ROWS","FIELDS","fields","MAX_VIEW","MOVING_VIEW","REVERSE","DISABLE_POLLING","disablePolling","OFFSET","offset","POLLING_INTERVAL","dataserverOnlyParams","requestOnlyParams","requestAutoSetup","buildRequestFields","baseRequestFields","fromEntries","criteriaFields","updateLoadMoreCount","overrideParams","_datasource_types__WEBPACK_IMPORTED_MODULE_18__","DATASERVER","REQUEST_SERVER","snapshotFiltered","createDataserverStream","createReqRepStream","_utils_error_code__WEBPACK_IMPORTED_MODULE_16__","pollInterval","fetchSnapshot$","pollingParams","defaultMaxRows","tempMaxRows","z","rxjs_operators__WEBPACK_IMPORTED_MODULE_9__","rxjs_operators__WEBPACK_IMPORTED_MODULE_8__","rxjs__WEBPACK_IMPORTED_MODULE_5__","rxjs_operators__WEBPACK_IMPORTED_MODULE_7__","Z","rxjs__WEBPACK_IMPORTED_MODULE_6__","meta","INDEXES","SORTABLE_FIELDS","CRITERIA_FIELDS","_metadata_metadata_utils__WEBPACK_IMPORTED_MODULE_13__","X","REQUEST_FIELD","CRITERIA_ONLY_REQUEST","normaliseStatus","metadataRequired","hasMetadata","eventEmitter","dispatchEvent","bubbles","composed","latest","_microsoft_fast_element__WEBPACK_IMPORTED_MODULE_1__","_connect__WEBPACK_IMPORTED_MODULE_11__","_auth__WEBPACK_IMPORTED_MODULE_10__","_resources__WEBPACK_IMPORTED_MODULE_14__","ME","_datasource_config__WEBPACK_IMPORTED_MODULE_17__","aB","_connect__WEBPACK_IMPORTED_MODULE_12__","a4","Datasource","getDatasource","ResourceType","DatasourceStatusChanged","base64ToBytes","b64","atob","bin","out","buf","globalThis","Buffer","MAGIC","BIG_ONE","sharedDecoder","bitSet","bits","Cursor","pos","view","byteOffset","byte","len","uvarint","zigzag","shift","big","doubleBE","getFloat64","string","end","fromCharCode","apply","readTaggedValue","cur","tag","decodeScdbToRows","readHeader","rowRefs","readRowRefs","readOps","decodeColumns","assertScdbMagic","op","packed","lo","hi","targets","columnCount","colId","dense","presence","dictSize","dict","delta","DefaultMetaCache","cachedMetadata","cachedJsonSchema","cachedResources","cachedRequests","schemaResponse","MetaCache","FieldTypeEnum","TYPES_MAP","STRING","ENUM","BOOLEAN","INT","NUMBER","LONG","DOUBLE","BIGDECIMAL","DATETIME","NANO_TIMESTAMP","toFieldMetadata","fieldDef","_metadata_types__WEBPACK_IMPORTED_MODULE_2__","VALID_VALUES","enumOptions","_utils__WEBPACK_IMPORTED_MODULE_1__","extractFieldDefinitions","_datasource_datasource_types__WEBPACK_IMPORTED_MODULE_0__","defaultGenesisResourcesConfig","throwWhenUnavailable","throwWhenUnknown","GenesisResourcesConfig","GenesisResourcesChannel","broadcast_channel","Es","DefaultGenesisResources","fetchResources","resourceItem","RESOURCE_TYPE","getAllResources","resourcesPromise","RESOURCES","postLoadedMessage","channel","close","GenesisResources","DefaultSession","storageKeyPrefix","setStorageKeyPrefix","prefix","captureReturnUrl","pathname","search","hash","storage","sessionStorage","setLocalStorageItem","Session","withErrorCode","carrier","errorCodeOf","createLogger","DEFAULT_GROUP","CriteriaBuilder","expressions","And","expression","withExpression","types","Or","Not","groupJoin","condition","optionsJoin","groupName","addExpressionToGroup","gName","prev","withoutInline","isJoin","exp","obj","flat","flatMap","array","group","build","outputFn","parsedExpressions","parseExpression","previous","operator","serialiser","ExpressionBuilder","opts","_serialisers__WEBPACK_IMPORTED_MODULE_0__","valueGetter","withField","withValue","withSerialiser","withParams","withValueGetter","withGroup","escapeCriteriaString","getValue","quote","createSerialiser","notEqual","_types__WEBPACK_IMPORTED_MODULE_0__","NE","fieldContains","Serialisers","AND","OR","NOT","GT","GE","LT","LE","equals","equalsIgnoreCase","contains","containsIgnoreCase","dateIsToday","dateIsEqual","dateIsGreaterEqual","dateIsLessEqual","dateTimeIsGreaterEqual","dateTimeIsLessEqual","Operator","Join","$$operator","GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual","NotEqual","Equal","defaultUserConfig","trackActionExclusions","trackPathExclusions","setUser","properties","rawProperties","structuredClone","unsetUser","UserConfig","UserChannel","DefaultUser","pathHistory","actionHistory","authenticationChangeListeners","isAnonymous","isAdmin","hasProfile","isBanned","hasPermission","hasKey","trackPath","urlPath","clearPaths","lastPath","trackAction","clearActions","lastAction","clearTrackingHistory","isAuthenticatedChanged","userNameChanged","notify","track","permissionChanged","profileChanged","hasAdminProfile","User","getCurrentDesignSystem","element","fallbackPrefix","current","tagName","parentElement","getRootNode","ShadowRoot","allProviders","querySelectorAll","providerElements","shadowProviders","fI","el","provider","providerTag","getCurrentDesignSystemPrefix","defaultEventMap","customUpdateTarget","target","targetName","bind","context","updateTarget","originalBind","changeEvent","changeHandler","unbind","originalUnbind","SyncDirective","_microsoft_fast_element__WEBPACK_IMPORTED_MODULE_0__","HTMLBindingDirective","binding","convert","keyAttr","conversionType","createBehavior","behavior","determineChangeEvent","checked","last","bindingObserver","propertySource","propertyName","msSinceEpoch","getTime","sync","_BUILDER","_PUBLIC_PATH","_FORCE_HTTP","_FORCE_HTTP_REQREP","_SOCKET_EXT","SOCKET_EXT","FORCE_HTTP","FORCE_HTTP_REQREP","GENESIS_SOCKET_URL","protocol","_HTTP_CONFIG","_DEFAULT_ORGANISATION","_DEFAULT_PASSWORD","_DEFAULT_USER","_API_HOST","_feature_flags__WEBPACK_IMPORTED_MODULE_0__","API_HOST","DEFAULT_ORGANISATION","DEFAULT_PASSWORD","_j","DEFAULT_USER","_k","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","FEATURE_PREFIX","isFeatureActivated","feature","featureKey","URLSearchParams","isFeatureActivatedInSearch","formatDateTimestamp","formatDateTimeTimestamp","formatTimestamp","withTime","defaultDateOptions","timeZone","getDateFormatter","locale","Intl","DateTimeFormat","format","createObserver","listeners","respondToVisibility","root","documentElement","IntersectionObserver","intersectionRatio","observe","JSONSerializerConfig","customNumberParser","isSafeInteger","utils","Fq","asIntN","parseFloat","defaultJSONSerializerConfig","qg","DefaultJSONSerializer","JSONSerializer","avoidTreeShaking","classes","fn","cls","UUIDService","withLogging","uuid__WEBPACK_IMPORTED_MODULE_2__","createRemoteId","UUID"],"sourceRoot":""}