{"version":3,"file":"libs-CLAEvXaY.js","sources":["../../src/libs/common/common.utils.ts","../../src/libs/config/config.ts","../../src/libs/api/types/error.utils.ts","../../src/libs/api/types/headers.constants.ts","../../src/libs/api/middleware/corraletion-baggage.middleware.ts","../../src/libs/paging/paging.utils.tsx","../../src/libs/api/gateways/plt/plt-gateway.dtos.ts","../../src/libs/api/gateways/plt/plt-gateway.utils.ts","../../src/libs/api/gateways/plt/PlatformGateway.ts","../../src/libs/api/gateways/tg/TgOpsGateway.ts","../../src/libs/api/gateways/sia/sia-ops-gateway.dtos.ts","../../src/libs/api/gateways/sia/sia-ops-gateway.utils.ts","../../src/libs/api/gateways/sia/SiaOpsGateway.ts","../../src/libs/api/gateways/field/field-ops-gateway.dtos.ts","../../src/libs/api/gateways/field/field-ops-gateway.utils.ts","../../src/libs/api/gateways/field/FieldOpsGateway.ts","../../src/libs/api/gateways/env/EnvGateway.ts","../../src/libs/api/gateways/best-health/practice/BestHealthOpsGateway.ts","../../src/libs/api/gateways/best-health/account/best-health-account-ops-gateway.utils.ts","../../src/libs/api/gateways/best-health/account/BestHealthAccountOpsGateway.ts","../../src/libs/api/gateways/ttm/reporting/TtmReportingOpsGateway.ts","../../src/libs/api/gateways/ttm/forms/TtmFormsOpsGateway.ts","../../src/libs/api/gateways/mon/OpsMonGateway.ts","../../src/libs/api/gateways/ttm/booking/TtmBookingOpsGateway.ts","../../src/libs/api/gateways/plt-comms/models/OutboundEmailAudit.ts","../../src/libs/api/gateways/plt-comms/models/OutboundSmsAudit.ts","../../src/libs/api/gateways/plt-comms/PltCommsOpsGateway.ts","../../src/libs/api/gateways/ttm/comms/TtmCommsOpsGateway.ts","../../src/libs/api/gateways/bp-mobile/bp-mobile.dtos.ts","../../src/libs/api/gateways/bp-mobile/BpMobileOpsGateway.ts","../../src/libs/api/gateways/plt-notifications/PlatformNotificationsGateway.ts","../../src/libs/api/gateways/plt-redirect/PlatformRedirectGateway.ts","../../src/libs/api/gateways/bp-id/BpIdOpsGateway.ts","../../src/libs/api/gateways/cam/cam-gateway.utils.ts","../../src/libs/api/gateways/cam/CamGateway.ts","../../src/libs/api/gateways/user-experience/UserExperienceGateway.ts","../../src/libs/api/gateways/plt-integrators/PlatformIntegratorsGateway.ts","../../src/libs/api/gateways-context/GatewaysContext.tsx","../../src/libs/api/gateways-context/useGateways.tsx","../../src/libs/react-query/ReactQueryProvider.tsx","../../src/libs/react-query/react-query-cache.utils.ts","../../src/libs/permissions/permissions.utils.ts","../../src/libs/api/gateways/env/env-gateway.hooks.ts","../../src/libs/permissions/permissions.constants.ts","../../src/libs/api/gateways/best-health/practice/best-health-ops-gateway.hooks.ts","../../src/libs/permissions/permissions.enum.ts","../../src/libs/api/gateways/tg/model/EntitySyncState.ts","../../src/libs/api/gateways/sia/models/SiteSyncState.ts","../../src/libs/api/gateways/tg/tg-ops-gateway.hooks.ts","../../src/libs/api/gateways/user-experience/user-experience.hooks.ts","../../src/libs/api/gateways/sia/models/CurrentSiteVersion.ts","../../src/libs/api/gateways/sia/sia-ops-gateway.hooks.ts","../../src/libs/api/gateways/plt/plt-gateway.hooks.ts","../../src/libs/api/gateways/sia/models/SiteComponentVersion.ts","../../src/libs/api/gateways/ttm/booking/ttm-booking-ops-gateway.dtos.ts","../../src/libs/api/gateways/ttm/booking/ttm-booking-ops-gateway.hooks.ts","../../src/libs/api/gateways/ttm/comms/ttm-comms-ops-gateway.hooks.ts","../../src/libs/api/gateways/cam/cam-gateway.hooks.ts","../../src/libs/api/gateways/plt-integrators/plt-integrators-gateway.hooks.ts","../../src/libs/api/gateways/plt-integrators/plt-integrators-gateway.dtos.ts","../../src/libs/api/gateways/plt-comms/plt-comms-gateway.hooks.ts","../../src/libs/api/gateways/plt-comms/plt-comms-gateway.dtos.ts","../../src/libs/validation/validation-messages.enum.ts","../../src/libs/validation/validation-rules.constants.ts","../../src/libs/common/guid.ts","../../src/libs/api/gateways/bp-id/bp-id.dtos.ts","../../src/libs/api/gateways/bp-id/bp-id.hooks.ts","../../src/libs/api/gateways/plt-notifications/plt-notifications-gateway.hooks.ts","../../src/libs/api/gateways/plt-notifications/plt-notifications-gateway.dtos.ts","../../src/libs/stripe/stripe.utils.ts","../../src/libs/api/gateways/ttm/forms/ttm-forms-ops-gateway.hooks.ts","../../src/libs/api/gateways/ttm/reporting/ttm-reporting-ops-gateway.hooks.ts","../../src/libs/hooks/useDebouncedValue.ts","../../src/libs/api/gateways/best-health/account/best-health-account-ops-gateway.hooks.ts","../../src/libs/api/gateways/bp-mobile/bp-mobile.constants.ts","../../src/libs/api/gateways/field/field-ops-gateway.hooks.ts","../../src/libs/api/gateways/mon/ops-mon-gateway.hooks.ts","../../src/libs/api/gateways/field/SoftwarePublisher.ts","../../src/libs/api/gateways/plt-redirect/plt-redirect-gateway.hooks.ts","../../src/libs/api/gateways/bp-mobile/bp-mobile.hooks.ts","../../src/libs/common/humanize-duration.ts"],"sourcesContent":["import { compareDatesPredicate, DateTime } from \"@bps/utils\";\nimport { IEnv } from \"@libs/config/config\";\n\nexport const convertBytes = (bytes: number) => {\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n\n if (bytes === 0) {\n return \"n/a\";\n }\n\n const i: number = Math.floor(Math.log(bytes) / Math.log(1024));\n\n if (i === 0) {\n return `${bytes} ${sizes[i]}`;\n }\n\n return `${(bytes / Math.pow(1024, i)).toFixed(1)} ${sizes[i]}`;\n};\n\nexport const compareDatesOrUndefinedPredicate = (\n a: string | Date | DateTime | undefined,\n b: string | Date | DateTime | undefined,\n isSortedDescending?: boolean\n) => {\n if (!a) {\n return 1;\n }\n\n if (!b) {\n return -1;\n }\n\n const dateA = a instanceof DateTime ? a : DateTime.fromJSDate(new Date(a));\n const dateB = b instanceof DateTime ? b : DateTime.fromJSDate(new Date(b));\n\n return compareDatesPredicate(dateA, dateB, isSortedDescending);\n};\n\nexport const toTitleCase = (str: string) => {\n return str.replace(/\\w\\S*/g, txt => {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n};\n\nexport const deepMerge = (...objects: T[]) => {\n return objects.reduce((src, dest) => {\n if (!dest) return src;\n\n Object.keys(src).forEach(key => {\n const destValue = dest[key];\n const srcValue = src[key];\n\n if (typeof srcValue === \"object\") {\n dest[key] = deepMerge(srcValue, destValue);\n } else if (destValue !== undefined) {\n dest[key] = destValue;\n } else {\n dest[key] = srcValue;\n }\n });\n\n return dest;\n });\n};\n\nexport const getEnv = (): IEnv => {\n if (/uat.\\.bpcloud.dev/.test(window.location.href)) {\n return \"uat\";\n } else if (/bpcloud.io/.test(window.location.href)) {\n return \"prod\";\n } else {\n return \"dev\";\n }\n};\n","import { AuthenticationOptions } from \"@bps/http-client\";\nimport { deepMerge, getEnv } from \"../common/common.utils\";\n\nexport type IEnv = \"dev\" | \"uat\" | \"prod\";\n\nexport interface IConfig {\n development: boolean;\n env: IEnv;\n version?: string;\n commitHash?: string;\n appInsights: { instrumentationKey: string };\n msal: AuthenticationOptions;\n notificationDuration: number;\n queryCacheDuration: number;\n platformBaseURL: string;\n platformIntegratorsBaseUrl: string;\n prosBaseURL: string;\n bhbBaseURL: string;\n tgOpsBaseUrl: string;\n siaOpsBaseUrl: string;\n fieldOpsBaseUrl: string;\n envBaseUrl: string;\n bestHealthOpsBaseUrl: string;\n bestHealthAccountOpsBaseUrl: string;\n bpIdOpsBaseUrl: string;\n camBaseURL: string;\n userExperienceBaseUrl: string;\n ttmBookingOpsBaseUrl: string;\n pltCommsOpsBaseUrl: string;\n ttmCommsOpsBaseUrl: string;\n bpMobileOpsBaseUrl: string;\n pltNotificationsOpsBaseUrl: string;\n ttmReportsOpsBaseUrl: string;\n ttmFormsOpsBaseUrl: string;\n platformRedirectApiUrl: string;\n seqUrl: string;\n azureMonitorUrl: string;\n azureResourcesSqlUrl: string;\n opsMonBaseURL: string;\n stripePublicAuKey: string;\n stripePublicNzKey: string;\n}\n\n// Runtime configuration loaded from the /public/config.js file\nconst runtimeConfig: Partial = window.appConfig || {};\n\n// Environment configuration extracted from .env files.\nconst envConfig: IConfig = {\n appInsights: {\n instrumentationKey: import.meta.env.VITE_APP_INSIGHTS_INSTRUMENTATION_KEY\n },\n\n msal: {\n clientId: import.meta.env.VITE_AUTH_CLIENT_ID,\n authority: import.meta.env.VITE_AUTH_AUTHORITY,\n scopes: import.meta.env.VITE_AUTH_SCOPE\n ? import.meta.env.VITE_AUTH_SCOPE?.split(\",\")\n : undefined,\n cacheLocation: \"localStorage\",\n postAuthenticateRedirectUrl: \"/\"\n },\n\n platformBaseURL: import.meta.env.VITE_PLATFORM_API_URL || undefined,\n platformIntegratorsBaseUrl:\n import.meta.env.VITE_PLATFORM_INTEGRATORS_API_URL || undefined,\n prosBaseURL: import.meta.env.VITE_PROS_API_URL || undefined,\n bhbBaseURL: import.meta.env.VITE_BHB_BASE_URL || undefined,\n tgOpsBaseUrl: import.meta.env.VITE_TG_OPS_API_URL || undefined,\n siaOpsBaseUrl: import.meta.env.VITE_SIA_OPS_API_URL || undefined,\n envBaseUrl: import.meta.env.VITE_ENV_API_URL || undefined,\n bestHealthOpsBaseUrl: import.meta.env.VITE_BH_OPS_API_URL || undefined,\n bestHealthAccountOpsBaseUrl:\n import.meta.env.VITE_BHA_OPS_API_URL || undefined,\n bpIdOpsBaseUrl: import.meta.env.VITE_BPID_OPS_API_URL || undefined,\n camBaseURL: import.meta.env.VITE_CAM_API_URL || undefined,\n userExperienceBaseUrl:\n import.meta.env.VITE_USEREXPERIENCE_API_URL || undefined,\n seqUrl: import.meta.env.VITE_SEQ_URL || undefined,\n azureMonitorUrl: import.meta.env.VITE_AZURE_MONITOR_URL || undefined,\n azureResourcesSqlUrl:\n import.meta.env.VITE_AZURE_RESOURCES_SQL_URL || undefined,\n opsMonBaseURL: import.meta.env.VITE_OPERATIONS_SYSTEM_API_URL || undefined,\n ttmBookingOpsBaseUrl:\n import.meta.env.VITE_TTM_BOOKING_OPS_API_URL || undefined,\n pltCommsOpsBaseUrl: import.meta.env.VITE_PLT_COMMS_OPS_API_URL || undefined,\n ttmCommsOpsBaseUrl: import.meta.env.VITE_TTM_COMMS_OPS_API_URL || undefined,\n bpMobileOpsBaseUrl: import.meta.env.VITE_BPMOBILE_OPS_API_URL || undefined,\n pltNotificationsOpsBaseUrl:\n import.meta.env.VITE_PLT_NOTIFICATIONS_OPS_API_URL || undefined,\n ttmReportsOpsBaseUrl:\n import.meta.env.VITE_TTM_REPORTS_OPS_API_URL || undefined,\n ttmFormsOpsBaseUrl: import.meta.env.VITE_TTM_FORMS_OPS_API_URL || undefined,\n fieldOpsBaseUrl: import.meta.env.VITE_FIELD_OPS_API_URL || undefined,\n platformRedirectApiUrl:\n import.meta.env.VITE_PLT_REDIRECT_OPS_API_URL || undefined,\n\n stripePublicAuKey: import.meta.env.VITE_STRIPE_PUBLIC_AU_KEY || undefined,\n stripePublicNzKey: import.meta.env.VITE_STRIPE_PUBLIC_NZ_KEY || undefined,\n\n development: /^https?:\\/\\/localhost/.test(window.location.toString()),\n env: getEnv(),\n notificationDuration: 4000,\n queryCacheDuration: 60000\n};\n\nconst config = deepMerge>(runtimeConfig, envConfig) as IConfig;\n\nexport { config };\n\nexport const IsDevelopmentEnvironment =\n config.env.toLocaleLowerCase() === \"dev\";\n","import { HttpError } from \"@bps/http-client\";\n\nconst getHttpErrorMessage = (error: HttpError) => {\n return `${error.message} (${error.httpStatusCode}): ${error.detail}`;\n};\n\nexport const getErrorAlertMessage = (error: unknown): string | undefined => {\n if (!error) return undefined;\n\n if (error instanceof HttpError) {\n if (Array.isArray(error)) {\n return error.map(e => getHttpErrorMessage(e)).join(\",\");\n }\n\n return getHttpErrorMessage(error) ?? \"The data could not be loaded.\";\n }\n\n return String(error);\n};\n","export const NO_AUTH = \"x-no-auth\";\nexport const CORRELATION_BAGGAGE = \"X-Correlation-Baggage\";\nexport const PAGING_PAGE_NUMBER = \"x-paging-page-number\";\nexport const PAGING_TOTAL_PAGES = \"x-paging-total-pages\";\nexport const PAGING_TOTAL_COUNT = \"x-paging-total-count\";\nexport const MIN_PAGE_ITEMS = 25;\n","import { IMiddleware, InternalAxiosRequestConfig } from \"@bps/http-client\";\nimport { CORRELATION_BAGGAGE } from \"../types/headers.constants\";\nimport { Baggage } from \"./baggage.type\";\n\nexport class CorrelationBaggageMiddleware\n implements IMiddleware {\n onFulfilled = async (\n config: InternalAxiosRequestConfig\n ): Promise => {\n const location = window.location;\n\n if (location) {\n const baggage: Baggage = {\n path: location.pathname\n };\n\n if (baggage && config.headers) {\n const encoded = btoa(JSON.stringify(baggage));\n config.headers[CORRELATION_BAGGAGE] = encoded;\n }\n }\n\n return config;\n };\n}\n","import { parse, stringify } from \"query-string\";\nimport { InfiniteData } from \"react-query\";\nimport { PagingOptions } from \"./paging-options.type\";\nimport { PagingResponse } from \"./paging-response.type\";\nimport { PagingTableStorageResponse } from \"./paging-table-storage-response.type\";\n\nexport function withPaging(queryString: {\n [key: string]: any;\n}): { [key: string]: any };\n\nexport function withPaging(\n queryString?: T\n): string | { [key: string]: any } {\n let qs = {};\n\n if (typeof queryString === \"string\") {\n qs = parse(queryString);\n } else if (typeof queryString === \"object\") {\n // Adding paging to querystring with $ symbol\n const { page, limit, ...output } = {\n $page: queryString.page,\n $limit: queryString.limit,\n $count: true,\n ...queryString\n };\n qs = output;\n }\n\n return typeof queryString === \"object\" ? qs : stringify(qs);\n}\n\nexport const getPagesResult = (\n respond:\n | InfiniteData | PagingTableStorageResponse>\n | undefined\n): T[] => {\n if (!respond) return [];\n return respond?.pages.reduce((acc: T[], pagingRespond) => {\n if (pagingRespond?.results) {\n return [...acc, ...pagingRespond.results];\n }\n return acc;\n }, [] as T[]);\n};\n","import { DateTime } from \"@bps/utils\";\nimport {\n Rollout,\n SecurityRole\n} from \"@libs/api/gateways/field/field-ops-gateway.dtos\";\nimport { ChangeLogDto } from \"@libs/api/types/common-dtos\";\nimport { guid } from \"@libs/common/guid\";\n\nexport enum ApplicationType {\n CAM = \"CAM\",\n OMNI = \"TI\",\n PROS = \"PR\",\n BPID = \"BPID\"\n}\n\n// Source - Platform Catalog BpId.CloudApplications table\nexport enum ApplicationName {\n BPID = \"Bp User Account\",\n CAM = \"Bp Business Account\",\n PARTNER = \"Bp Partner Documentation\",\n DEVEL = \"Bp Developer Portal\",\n FORUM = \"Bp User Forum\",\n EXTERNAL = \"Third Party Application\",\n MERC = \"Bp Online Teams\",\n TI = \"Bp Omni\",\n PR = \"Bp Premier Online\"\n}\n\nexport function getApplicationNameFromAppCode(appCode: string | undefined) {\n const internalAppCode = appCode as ApplicationType;\n\n switch (internalAppCode) {\n case ApplicationType.CAM:\n return ApplicationName.CAM as string;\n case ApplicationType.PROS:\n return ApplicationName.PR as string;\n case ApplicationType.OMNI:\n return ApplicationName.TI as string;\n }\n\n return \"Unknown Application\";\n}\n\nexport interface TenantSearchArgs {\n name?: string;\n tenantType?: string;\n tenantIds?: string[];\n featureCodes?: string[];\n countries?: string[];\n crmId?: string;\n crmIds?: string[];\n applications?: ApplicationType[];\n isInactive?: boolean;\n // sorting arguments\n sortField?:\n | \"Name\"\n | \"ApplicationCode\"\n | \"Country\"\n | \"UpdatedDate\"\n | \"IsInactive\"\n | \"IsTemporary\";\n sortAscending?: boolean;\n // paging arguments\n limit?: number;\n pageParam?: number;\n}\n\nexport interface Permission {\n id: guid;\n code: string;\n text: string;\n isActive: boolean;\n source: string;\n}\n\nexport interface SecurityRolesAndPermissionsDto {\n permissions: Permission[];\n securityRoles: SecurityRole[];\n}\n\nexport interface ProfileDto {\n businessRoleCode?: string;\n countryCode?: Country;\n defaultSecurityRoleCodes?: string[];\n requiredComponentCodes?: string[];\n requiredLicenceTypeCodes?: string[];\n}\n\nexport interface BusinessRoleDto {\n code?: string;\n text?: string;\n classCode?: string;\n profiles?: ProfileDto[];\n minMembersCount?: number;\n maxMembersCount?: number;\n}\n\nexport interface Tenant {\n id: guid;\n eTag: string;\n name: string;\n country: Country;\n permissions: string[];\n application: ApplicationType;\n customerTenantId?: guid;\n stripeCustomerId?: guid;\n crmId?: string;\n userLimit: number;\n changeLog: TenantChangeLog;\n resources: TenantResource[];\n tags: TenantTag[];\n childTenants?: TenantDto[];\n isInactive: boolean;\n isTemporary: boolean;\n siteAuthorityFieldDeviceId?: string;\n}\n\nexport interface TenantChangeLog {\n createdBy: string;\n createdDate: DateTime;\n updatedBy?: string;\n updatedDate?: DateTime;\n}\n\nexport interface TenantResource {\n id: guid;\n tenantId: guid;\n azResourceType: string;\n bpResourceName: string;\n connectionString: string;\n encryptionKey: string;\n}\n\nexport interface TenantTag {\n id: guid;\n tenantId: guid;\n tag: string;\n}\n\nexport interface NewTenantTag extends Omit {}\n\nexport interface UsedTenantTag extends Omit {}\n\nexport type TenantDto = Omit & {\n changeLog: TenantChangeLogDto;\n};\ntype TenantChangeLogDto = Omit<\n TenantChangeLog,\n \"createdDate\" | \"updatedDate\"\n> & {\n createdDate: string;\n updatedDate: string | undefined;\n};\n\nexport type CreateTenantDto = {\n name: string;\n country: Country;\n application: string;\n customerTenantId?: string;\n userLimit: number;\n tenantType: string;\n isInactive: boolean;\n};\n\nexport interface GetFeatureParams {\n source?: string;\n isActive?: boolean;\n}\n\nexport interface GetTenantFeatureParams {\n tenantIds?: string;\n featureCodes?: string[];\n}\n\nexport interface TenantFeatureDetailsWrapperDto {\n tenantFeatures: TenantFeatureDetailsDto[];\n}\n\nexport interface TenantFeatureDetails {\n id: string;\n tenantId: string;\n feature: string;\n lastActionId: string;\n lastAction: {\n id: string;\n tenantId: string;\n orchestrationId: string;\n feature: string;\n action: string;\n status: string;\n timestamp?: DateTime;\n };\n changeLog: {\n createdDate?: DateTime;\n createdBy?: string;\n updatedDate?: DateTime;\n updatedBy?: string;\n };\n}\n\nexport interface TenantFeatureDetailsDto\n extends Omit {\n lastAction: Omit & {\n timestamp: string;\n };\n changeLog: ChangeLogDto;\n}\n\nexport interface FeatureDto extends Omit {\n changeLog: ChangeLogDto;\n}\n\nexport interface LicenceTypeDto {\n code: string;\n text: string;\n countryCode: Country;\n source?: string;\n isInactive: boolean;\n gracePeriod?: number;\n sortOrder?: number;\n}\n\nexport interface LicenceDto {\n id: string;\n tenantId: string;\n productId?: string;\n userId?: string;\n username?: string;\n expiryDate: string;\n doNotRenew: boolean;\n isInactive: boolean;\n licenceTypeCode?: string;\n name?: string;\n displayName?: string;\n description?: string;\n source?: \"STRIPE\";\n changeLog: ChangeLogDto;\n}\n\nexport interface GetLicencesArgs {\n tenantId?: string;\n userIds?: string[];\n licenceType?: string;\n isExpired?: boolean;\n doNotRenew?: boolean;\n isInactive?: boolean;\n}\n\nexport interface SalesProductDto {\n id: string;\n sourceProductId?: string;\n name?: string;\n source?: string;\n displayName?: string;\n description?: string;\n isInactive: boolean;\n licenceType?: string;\n productCode?: string;\n applicationCode?: ApplicationType;\n productFamily?: string;\n iconName?: string;\n interval?: string;\n country?: string;\n components?: string[];\n changeLog: ChangeLogDto;\n}\n\nexport interface GetSalesProductsArgs {\n productCodes?: string[];\n productFamilyCodes?: string[];\n applicationCodes?: string[];\n licenceTypeCodes?: string[];\n isInactive?: boolean;\n country?: string;\n}\n\nexport type IpRanges = { ipRangeBegin: string; ipRangeEnd: string };\n\nexport interface TenantDefaultUsersAuthenticationDto {\n id: string;\n sessionMaxDuration?: number;\n deviceMfaMaxDuration?: number;\n longPasswordRequired?: boolean;\n requireAlternateEmailAuthenticationMethod?: boolean;\n requireAlternateEmailAuthenticationStrength?: boolean;\n requirePhoneAuthenticationMethod?: boolean;\n requirePhoneAuthenticationStrength?: boolean;\n requireTotpAuthenticationMethod?: boolean;\n requireTotpAuthenticationStrength?: boolean;\n quickPinRequired?: boolean;\n ipRanges?: IpRanges[];\n}\n\nexport interface UserDefaultAuthenticationDto\n extends Omit {\n userId: string;\n tenantId: string;\n}\n\nexport interface AddLicenceDto extends Omit {}\n\nexport interface AddSalesProductDto\n extends Omit {}\n\nexport enum CardBrand {\n Visa = \"visa\",\n Master = \"mastercard\"\n}\n\nexport enum PaymentType {\n Card = \"card\",\n Becs = \"au_becs_debit\"\n}\n\nexport const CardBrandLabels = {\n [CardBrand.Visa]: \"Visa\",\n [CardBrand.Master]: \"Master Card\"\n};\n\nexport interface PaymentMethodDto {\n id: string;\n type: PaymentType;\n brand: CardBrand;\n bsbNumber: string;\n expMonth: number;\n expYear: number;\n last4: string;\n isExpired: boolean;\n isDefault?: boolean;\n}\n\nexport interface PaymentMethodSetupDto {\n id: string;\n clientSecret: string;\n}\n\nexport interface PaymentMethodUpdateArgs {\n id: string;\n customerTenantId: string;\n expMonth: number;\n expYear: number;\n}\n\nexport interface BillingContactAddressDto {\n line1?: string;\n line2?: string;\n country?: string;\n state?: string;\n postCode?: string;\n city?: string;\n}\n\nexport interface BillingContactDto {\n name?: string;\n phone?: string;\n email?: string;\n address?: BillingContactAddressDto;\n}\n\nexport enum InvoiceStatus {\n Draft = \"draft\", // The starting status for all invoices. You can still edit the invoice at this point.\n Open = \"open\", // The invoice has been finalized, and is awaiting customer payment. You can no longer edit the invoice, but you can revise it.\n Paid = \"paid\", //This invoice was paid.\n Void = \"void\", //This invoice was a mistake, and must be canceled.\n Uncollectible = \"uncollectible\" // The customer is unlikely to pay this invoice (treat it as bad debt in your accounting process).\n}\n\nexport interface InvoiceDto {\n id: string;\n number: string;\n status: InvoiceStatus;\n subtotal?: number;\n total?: number;\n tax?: number;\n payment_date?: string;\n payment_method?: string;\n description?: string;\n created?: string;\n hostedInvoiceUrl?: string;\n invoicePdf?: string;\n errorMessage?: string;\n}\n\nexport enum Country {\n Australia = \"AU\",\n NewZealand = \"NZ\"\n}\n\nexport enum CountryText {\n AU = \"Australia\",\n NZ = \"New Zealand\"\n}\n\nexport interface StripeCustomerContact {\n name: string;\n email: string;\n phone: string;\n}\n\nexport interface StripeCustomerAddress {\n name: string;\n addressLine1: string;\n addressLine2: string;\n postcode: string;\n city: string;\n state: string;\n}\n\nexport interface StripeCustomerDto {\n stripeCustomerId?: string;\n tenantId: string;\n crmId?: string;\n name?: string;\n description?: string;\n country?: Country;\n contact?: Partial;\n billingContact?: Partial;\n billingAddress?: Partial;\n shippingAddress?: Partial;\n createTestClock?: boolean;\n testClockDate?: string;\n}\n\nexport interface AddStripeCustomerDto\n extends Partial> {\n country: Country;\n tenantId: string;\n email: string;\n name: string;\n crmId: string;\n useTestClock?: boolean;\n testClockDate?: Date;\n testClockTime?: string;\n}\n\nexport interface ProductChildTenant {\n childTenantId: string;\n childTenantName: string;\n quantity: number;\n previousQuantity: number;\n scheduledQuantity: number;\n previousScheduledQuantity: number;\n scheduleDate: string;\n}\n\nexport interface AddSubscriptionPayload extends PreviewSubscriptionPayload {}\n\nexport interface PreviewSubscriptionItemPayload {\n childTenantId: string;\n salesProductId: string;\n quantity: number;\n}\nexport interface PreviewSubscriptionPayload {\n customerTenantId: string;\n promotionCodeList?: string[];\n items: PreviewSubscriptionItemPayload[];\n}\n\nexport interface CancelCancelCustomerSubscriptionsArgs {\n customerTenantId: string;\n subscriptionId: string;\n cancelImmediately?: boolean;\n}\n\nexport interface ResetCustomerSubscriptionBillingDateArgs {\n customerTenantId: string;\n subscriptionId: string;\n}\n\nexport enum SubscriptionStatuses {\n Incomplete = \"incomplete\",\n IncompleteExpired = \"incomplete_expired\",\n Trialing = \"trialing\",\n Active = \"active\",\n PastDue = \"past_due\",\n Canceled = \"canceled\",\n Unpaid = \"unpaid\"\n}\n\nexport interface SubscriptionDto {\n customerTenantId: string;\n subscriptionId: string;\n status: SubscriptionStatuses;\n schedule?: string;\n description?: string;\n created?: string;\n currentPeriodStart?: string;\n currentPeriodEnd?: string;\n latestInvoiceId?: string;\n hostedInvoiceUrl?: string;\n invoicePdf?: string;\n childTenants: ProductChildTenant[];\n cancelAt?: string;\n cancelAtPeriodEnd?: boolean;\n cancelRequestDate?: string;\n promotionCodeList?: PromotionCodeDto[];\n coupon?: CouponDto;\n}\n\nexport interface SubscriptionPreviewItemDto {\n salesProductId: string;\n salesProductFamily: string;\n salesProductCode: string;\n salesProductName: string;\n salesProductDisplayName: string;\n salesProductDescription: string;\n salesProductInterval: string;\n salesProductIconName: string;\n salesProductPrice: number;\n amountExcludingTax: number;\n tax: number;\n amount: number;\n description: number;\n discountAmount: number;\n discountDescription: string;\n childTenants: ProductChildTenant[];\n}\n\nexport interface SubscriptionPreviewDto {\n subscriptionId: string;\n status: SubscriptionStatuses;\n schedule: string;\n description: string;\n promotionCodeList: string[];\n createdDate: string;\n currentPeriodStart: string;\n currentPeriodEnd: string;\n cancelAtPeriodEnd: boolean;\n taxType: string;\n taxPercentage: number;\n amountExcludingTax: number;\n tax: number;\n amount: number;\n subtotalExcludingTax: number;\n subtotal: number;\n clientSecret?: string;\n invoiceId?: string;\n invoiceNumber?: string;\n hostedInvoiceUrl?: string;\n invoicePdf?: string;\n discountAmount: number;\n discountDescription: string;\n items: SubscriptionPreviewItemDto[];\n}\n\nexport interface CustomerProductsDto {\n customerTenantId: string;\n customerTenantName: string;\n stripeCustomerId: string;\n stripeCustomerName: string;\n defaultPaymentMethodId: string;\n defaultPaymentMethodBrand: string;\n defaultPaymentMethodLast4: string;\n defaultPaymentMethodExpMonth: number;\n defaultPaymentMethodExpYear: number;\n taxType: string;\n taxPercentage: number;\n subscriptionList: CustomerProductsSubscription[];\n childTenantList: CustomerProductsChildTenant[];\n}\n\nexport interface CustomerProductsSubscription {\n subscriptionId: string;\n type: string;\n status: SubscriptionStatuses;\n renewalDate: string;\n licenceCount: number;\n userCount: number;\n description?: string;\n promotionCodeList?: string[];\n siteCount: number;\n totalExcludingTax: number;\n tax: number;\n total: number;\n createdDate: string;\n currentPeriodStart: string;\n currentPeriodEnd: string;\n cancellationDate: string;\n cancelAtPeriodEnd: boolean;\n latestInvoiceId?: string;\n schedule?: string;\n subscriptionItemList: CustomerProductsSubscriptionItem[];\n}\n\nexport interface CustomerProductsSubscriptionItem {\n childTenantId: string;\n childTenantName: string;\n applicationCode: ApplicationType;\n productId: string;\n productFamily: string;\n productCode: string;\n name: string;\n displayName: string;\n description: string;\n iconName: string;\n licenceType: string;\n sourceProductId: string;\n quantity: number;\n scheduleDate: string;\n scheduledQuantity: number;\n licenceCount: number;\n userCount: number;\n amount: number;\n amountIncludesTax: boolean;\n}\n\nexport interface CustomerProductsChildTenant {\n childTenantId: string;\n childTenantName: string;\n applicationCode: ApplicationType;\n productFamilyList: CustomerProductsProductFamily[];\n}\n\nexport interface CustomerProductsProductFamily {\n productFamily: string;\n productList: CustomerProductsItem[];\n subscriptionList: CustomerProductsSubscription[];\n}\n\nexport interface CustomerProductsItem\n extends Pick<\n CustomerProductsSubscriptionItem,\n | \"sourceProductId\"\n | \"productCode\"\n | \"name\"\n | \"displayName\"\n | \"iconName\"\n | \"description\"\n | \"licenceType\"\n | \"amount\"\n | \"amountIncludesTax\"\n > {\n salesProductId: string;\n}\n\nexport interface OrgUnitArgs {\n tenantId: string;\n hierarchyType?: string;\n}\n\nexport interface OrgUnitDto {\n id: string;\n tenantId: string;\n name: string;\n hierarchyType: string;\n addresses: AddressDto[];\n contact: ContactDto[];\n timeZone: string;\n tagLine: string;\n parentOrgUnitId: string;\n isInactive: string;\n eTag: string;\n changeLog: ChangeLogDto;\n}\n\nexport interface AddressDto {\n type?: string;\n street1?: string;\n street2?: string;\n suburb?: string;\n city?: string;\n state?: string;\n postCode?: string;\n country?: string;\n}\n\nexport interface ContactDto {\n type?: string;\n value?: string;\n preferred?: string;\n}\n\nexport interface RolloutDto\n extends Omit<\n Rollout,\n | \"initialDownloadStartUtc\"\n | \"initialDownloadEndUtc\"\n | \"initialInstallStartUtc\"\n | \"initialInstallEndUtc\"\n > {\n initialDownloadStartUtc: string;\n initialDownloadEndUtc: string;\n initialInstallStartUtc: string;\n initialInstallEndUtc: string;\n}\n\nexport interface RolloutArgsDto {\n deploymentRingId?: string;\n}\n\nexport function mapRolloutFromDto(rollout: RolloutDto) {\n return {\n ...rollout,\n initialDownloadStartUtc: DateTime.fromISO(\n rollout.initialDownloadStartUtc\n ).setZone(\"utc\"),\n initialDownloadEndUtc: DateTime.fromISO(\n rollout.initialDownloadEndUtc\n ).setZone(\"utc\"),\n initialInstallStartUtc: DateTime.fromISO(\n rollout.initialInstallStartUtc\n ).setZone(\"utc\"),\n initialInstallEndUtc: DateTime.fromISO(\n rollout.initialInstallEndUtc\n ).setZone(\"utc\")\n };\n}\n\nexport interface CouponDto {\n id: string;\n amountOff: number;\n created: string;\n currency: string;\n deleted: boolean;\n duration: string;\n durationInMonths: number;\n maxRedemptions: number;\n name: string;\n percentOff: number;\n redeemBy: string;\n timesRedeemed: number;\n valid: boolean;\n}\n\nexport interface PromotionCodeDto {\n id: string;\n active: boolean;\n code: string;\n created: string;\n expires_at: string;\n max_redemptions: number;\n timesRedeemed: number;\n coupon: CouponDto;\n}\n\nexport enum BaseUserStatuses {\n active = \"ACTIVE\",\n inactive = \"INACTIVE\"\n}\n\nexport interface PltUserSecurityRole {\n code?: string;\n securityRoleId?: string;\n}\n\nexport interface PltUser {\n id: string;\n tenantId: string;\n username: string;\n externalId?: number;\n status?: BaseUserStatuses;\n permissions: string[];\n roles: { roleId: string; code: string; isSystemManaged?: boolean }[];\n businessRoles: string[];\n securityRoles: PltUserSecurityRole[];\n businessRolesClasses: string[];\n loginAttempts?: number;\n lastLoginAttempt?: DateTime;\n title: string;\n firstName?: string;\n lastName?: string;\n isInactive?: boolean;\n bpIdUserId?: string;\n crmContactId?: string;\n changeLog: PltUserChangeLog;\n}\n\nexport interface NewPltUser\n extends Pick<\n PltUser,\n \"firstName\" | \"lastName\" | \"tenantId\" | \"status\" | \"crmContactId\"\n > {\n username?: string;\n}\n\nexport interface PltUserChangeLog {\n createdBy: string;\n createdDate: DateTime;\n updatedBy?: string;\n updatedDate?: DateTime;\n}\n\nexport interface Feature {\n source: string;\n featureDependencies: Array<{\n source: string;\n featureCode: string;\n dependentFeatureCode: string;\n }>;\n featurePermissions: Array<{\n source: string;\n featureCode: string;\n permissionCode: string;\n }>;\n id: guid;\n code: string;\n text: string;\n description: string;\n isSystemManaged: boolean;\n isRemovable: boolean;\n licenceCode: string;\n hasActionProcessor: boolean;\n changeLog: {\n createdDate?: DateTime;\n createdBy?: string;\n updatedDate?: DateTime;\n updatedBy?: string;\n };\n dependencies: Array;\n permissions: Array;\n}\n\nexport enum TenantFeature {\n SiteReplicationResource = \"PROS-SITE-REPLICATION-RESOURCE\",\n BhbIntegration = \"PROS-BHB-INTEGRATION\",\n AvailabilityCalculatorOnSite = \"PROS-PROVIDER-AVAILABILITY-CALC-ON-SITE\",\n TenantReplicationMessageIsolation = \"PROS-TENANT-REPLICATION-MESSAGE-ISOLATION\"\n}\n\nexport enum FeatureAction {\n Enable = \"ENABLE\",\n Disable = \"DISABLE\"\n}\n\nexport enum FeatureStatus {\n Initializing = \"INITIALIZING\",\n Completed = \"COMPLETED\",\n Unavailable = \"UNAVAILABLE\",\n Failed = \"FAILED\"\n}\n\nexport interface GetComponentsDefArgs {\n componentCode?: string;\n source?: string;\n scope?: string;\n}\n\nexport interface ComponentDefSettingDto {\n componentCode: string;\n key: string;\n isRequired: boolean;\n}\n\nexport interface ComponentDefDto {\n code: string;\n text: string;\n isActive: boolean;\n scope: string;\n implementationsLimit: string;\n source: string;\n implementations: string[];\n dependencies: string[];\n settings: ComponentDefSettingDto[];\n}\n\nexport interface GetComponentsArgs {\n code?: string;\n scopeId?: string;\n tenantId?: string;\n status?: string;\n}\n\nexport interface GetComponentArgs\n extends Pick {\n codeOrId: string;\n}\n\nexport enum ComponentStatus {\n Enabled = \"Enabled\",\n Disabled = \"Disabled\",\n RequiresConfig = \"RequiresConfig\",\n Configuring = \"Configuring\"\n}\n\nexport interface ComponentLiteDto {\n id: string;\n tenantId: string;\n code: string;\n scopeId: string;\n status: ComponentStatus;\n eTag: string;\n changeLog: ChangeLogDto;\n}\n\nexport interface ComponentImplementationDto {\n code: string;\n status: string;\n}\n\nexport interface ComponentSettingLiteDto {\n key: string;\n value: string;\n desiredValue?: string;\n}\n\nexport interface ComponentSettingDto extends ComponentSettingLiteDto {\n id: string;\n tenantId: string;\n code: string;\n scopeId: string;\n changeLog: ChangeLogDto;\n}\n\nexport interface ComponentSettingsDto extends ComponentSettingLiteDto {\n tenantId: string;\n code: string;\n scopeId: string;\n settings: ComponentSettingLiteDto[];\n}\n\nexport interface CreateSettingPayload {\n settings: ComponentSettingLiteDto[];\n}\n\nexport interface UpdateSettingArgs extends ComponentActionPayload {}\nexport interface DeleteSettingArgs extends GetComponentSettingArgs {}\n\nexport interface GetComponentSettingArgs extends ComponentActionPayload {\n key: string;\n}\n\nexport interface UpdateSettingPayload\n extends Omit {}\n\nexport interface ComponentDto extends ComponentLiteDto {\n implementations?: ComponentImplementationDto[];\n settings?: ComponentSettingLiteDto[];\n}\n\nexport interface ComponentActionDto {\n id: string;\n componentId: string;\n action: string;\n status: ComponentStatus;\n componentActionRequestId: string;\n componentWorkflowRunInstanceId: string;\n changeLog: ChangeLogDto;\n}\n\nexport interface CreateComponentPayload {\n code: string;\n tenantId: string;\n scopeId?: string;\n status?: string;\n}\n\nexport interface ComponentActionPayload {\n code: string;\n tenantId?: string;\n scopeId?: string;\n}\n\nexport interface GetComponentActionsArgs {\n componentId?: string;\n componentActionRequestId?: string;\n componentAction?: ComponentRequestActions;\n status?: ComponentRequestStatuses;\n componentWorkflowRunInstanceId?: string;\n}\n\nexport interface GetComponentsRequestsArgs\n extends Pick<\n GetComponentActionsArgs,\n \"status\" | \"componentWorkflowRunInstanceId\" | \"componentAction\"\n > {\n tenantId?: string;\n scopeId?: string;\n componentCode?: string;\n}\n\nexport enum ComponentRequestStatuses {\n InProgress = \"InProgress\",\n Succeeded = \"Succeeded\",\n Failed = \"Failed\"\n}\n\nexport enum ComponentRequestActions {\n Initialize = \"Initialize\",\n Disable = \"Disable\",\n ReConfigure = \"ReConfigure\",\n Archive = \"Archive\",\n Deinitialize = \"Deinitialize\"\n}\n\nexport interface ComponentRequestDto {\n id: string;\n code: string;\n tenantId: string;\n scopeId: string;\n action: ComponentRequestActions;\n status: ComponentRequestStatuses;\n statusReason: string;\n componentManagerWorkflowRunInstanceId: string;\n changeLog: ChangeLogDto;\n}\n\nexport interface ComponentWorkflowRunInstanceDto {\n workflowInstanceUrl: string | undefined;\n}\n","import { DateTime } from \"@bps/utils\";\n\nimport { Tenant, TenantDto } from \"./plt-gateway.dtos\";\n\nexport const toTenant = (dto: TenantDto): Tenant => {\n const { createdDate, updatedDate, ...changeLogRest } = dto.changeLog;\n\n return {\n ...dto,\n changeLog: {\n ...changeLogRest,\n createdDate: DateTime.fromISO(createdDate),\n updatedDate: updatedDate ? DateTime.fromISO(updatedDate) : undefined\n }\n };\n};\n\nexport const toTenantDto = (dto: Tenant): TenantDto => {\n return {\n ...dto,\n changeLog: {\n ...dto.changeLog,\n createdDate: dto.changeLog.createdDate.toISO(),\n updatedDate: dto.changeLog.updatedDate\n ? dto.changeLog.updatedDate?.toISO()\n : undefined\n }\n };\n};\n","import qs, { stringify } from \"query-string\";\n\nimport { AxiosInstance } from \"@bps/http-client\";\nimport { DateTime, getHourAndMinutesFromString } from \"@bps/utils\";\nimport {\n MIN_PAGE_ITEMS,\n PAGING_PAGE_NUMBER,\n PAGING_TOTAL_COUNT,\n PAGING_TOTAL_PAGES\n} from \"@libs/api/types/headers.constants\";\nimport { guid } from \"@libs/common/guid\";\nimport { PagingResponse } from \"@libs/paging/paging-response.type\";\nimport { withPaging } from \"@libs/paging/paging.utils\";\n\nimport { RefDataDto } from \"../../types/common-dtos\";\nimport { IPlatformGateway } from \"./platform-gateway.interface\";\nimport {\n AddLicenceDto,\n AddSalesProductDto,\n AddStripeCustomerDto,\n AddSubscriptionPayload,\n BillingContactDto,\n BusinessRoleDto,\n CancelCancelCustomerSubscriptionsArgs,\n ComponentActionDto,\n ComponentActionPayload,\n ComponentDefDto,\n ComponentDto,\n ComponentLiteDto,\n ComponentRequestDto,\n ComponentSettingDto,\n ComponentSettingsDto,\n ComponentWorkflowRunInstanceDto,\n CreateComponentPayload,\n CreateSettingPayload,\n CreateTenantDto,\n CustomerProductsDto,\n DeleteSettingArgs,\n Feature,\n FeatureAction,\n FeatureDto,\n GetComponentActionsArgs,\n GetComponentArgs,\n GetComponentsArgs,\n GetComponentsDefArgs,\n GetComponentSettingArgs,\n GetComponentsRequestsArgs,\n GetFeatureParams,\n GetLicencesArgs,\n GetSalesProductsArgs,\n GetTenantFeatureParams,\n InvoiceDto,\n LicenceDto,\n LicenceTypeDto,\n NewPltUser,\n NewTenantTag,\n OrgUnitArgs,\n OrgUnitDto,\n PaymentMethodDto,\n PaymentMethodSetupDto,\n PaymentMethodUpdateArgs,\n PltUser,\n PreviewSubscriptionPayload,\n PromotionCodeDto,\n ResetCustomerSubscriptionBillingDateArgs,\n SalesProductDto,\n SecurityRolesAndPermissionsDto,\n StripeCustomerDto,\n SubscriptionDto,\n SubscriptionPreviewDto,\n Tenant,\n TenantDefaultUsersAuthenticationDto,\n TenantDto,\n TenantFeatureDetails,\n TenantFeatureDetailsWrapperDto,\n TenantSearchArgs,\n TenantTag,\n UpdateSettingArgs,\n UpdateSettingPayload,\n UsedTenantTag,\n UserDefaultAuthenticationDto\n} from \"./plt-gateway.dtos\";\nimport { toTenant } from \"./plt-gateway.utils\";\n\nconst secondsPerDay = 24 * 60 * 60;\n\nexport class PlatformGateway implements IPlatformGateway {\n constructor(private api: AxiosInstance) {}\n\n // Tenant\n async getTenants(args?: TenantSearchArgs): Promise> {\n const page = args?.pageParam ?? 1;\n\n const encodedName = btoa(args?.name ?? \"\");\n\n const url = qs.stringifyUrl({\n url: \"tenants\",\n query: withPaging({\n encodedName,\n applications: args?.applications,\n isInactive: args?.isInactive,\n tenantType: args?.tenantType,\n tenantIds: args?.tenantIds,\n featureCodes: args?.featureCodes,\n crmId: args?.crmId,\n crmIds: args?.crmIds,\n countries: args?.countries,\n sortField: args?.sortField,\n sortAscending: args?.sortAscending,\n page: args?.pageParam ?? 1,\n limit: args?.limit ?? MIN_PAGE_ITEMS\n })\n });\n\n const response = await this.api.get(url);\n const totalPages = +response.headers[PAGING_TOTAL_PAGES];\n const pageNumber = +response.headers[PAGING_PAGE_NUMBER];\n\n const isMaxPages = pageNumber >= totalPages;\n\n const total = +response.headers[PAGING_TOTAL_COUNT];\n\n return {\n results: response.data.map(toTenant),\n next: !isMaxPages ? page + 1 : undefined,\n total,\n totalPages\n };\n }\n\n async getTenant(id: string): Promise {\n const { data } = await this.api.get(`tenants/${id}`);\n return toTenant(data);\n }\n\n async getTenantsByCrmId(crmId: string): Promise {\n const url = qs.stringifyUrl({\n url: \"tenants\",\n query: {\n crmId\n }\n });\n\n const { data } = await this.api.get(url);\n\n return data.map(dto => toTenant(dto));\n }\n\n async getTenantFeature(\n tenantId: string,\n featureCode: string\n ): Promise {\n const url = `featureManagement/${tenantId}/${featureCode}`;\n\n try {\n const { data } = await this.api.get(url);\n return data;\n } catch {\n // Workaround to see whether a feature is enabled or not since there isn't\n // an endpoint for a list of features for a tenant\n return undefined;\n }\n }\n\n async enableDisableFeature(\n tenantId: string,\n featureCode: string,\n action: FeatureAction\n ) {\n await this.api.post(\"featureManagement\", {\n tenantId,\n featureCode,\n isDisabled: action === FeatureAction.Disable\n });\n }\n\n async encryptTenantResources(tenantId: string) {\n await this.api.put(`tenants/${tenantId}/$encryptResources`);\n }\n\n async activateTenant(tenantId: string) {\n await this.api.put(`tenants/${tenantId}/$activate`);\n }\n\n async deactivateTenant(tenantId: string) {\n await this.api.put(`tenants/${tenantId}/$deactivate`);\n }\n\n updateTenantIsTemporary = async (\n tenantId: string,\n isTemporary: boolean\n ): Promise => {\n return (\n await this.api.put(\n `tenants/${tenantId}/isTemporary/${isTemporary}`\n )\n ).data;\n };\n\n updateTenantCustomerAccount = async (\n tenantId: string,\n customerTenantId: string\n ): Promise => {\n return (\n await this.api.put(\n `tenants/${tenantId}/customerTenantId/${customerTenantId}`\n )\n ).data;\n };\n\n updateTenant = async (payload: TenantDto): Promise => {\n const data = (\n await this.api.put(`tenants/${payload.id}`, payload)\n ).data;\n\n return toTenant(data);\n };\n\n createTenant = async (payload: CreateTenantDto): Promise => {\n const data = (await this.api.post(\"tenants\", payload)).data;\n\n return toTenant(data);\n };\n\n async getFeature(params?: GetFeatureParams): Promise {\n const { data } = await this.api.get(\"feature\", {\n params\n });\n return data.map(({ changeLog, ...feature }) => ({\n ...feature,\n changeLog: {\n ...changeLog,\n createdDate: changeLog?.createdDate\n ? DateTime.fromISO(changeLog.createdDate)\n : undefined,\n updatedDate: changeLog?.updatedDate\n ? DateTime.fromISO(changeLog.updatedDate)\n : undefined\n }\n }));\n }\n\n async getSecurityRolesAndPermissions(): Promise<\n SecurityRolesAndPermissionsDto\n > {\n const { data } = await this.api.get(\n \"securityRole\"\n );\n return data;\n }\n\n async getBusinessRole(businessRoles?: string[]): Promise {\n const query = businessRoles?.length\n ? `?${stringify({ businessRoles })}`\n : \"\";\n\n const { data } = await this.api.get(\n `businessRole${query}`\n );\n return data;\n }\n\n async getTenantFeatures(\n params?: GetTenantFeatureParams\n ): Promise {\n const { data } = await this.api.get(\n \"tenantFeature\",\n {\n params\n }\n );\n return (\n data.tenantFeatures.map(item => ({\n ...item,\n lastAction: {\n ...item.lastAction,\n timestamp: item.lastAction?.timestamp\n ? DateTime.fromISO(item.lastAction.timestamp)\n : undefined\n },\n changeLog: {\n ...item.changeLog,\n createdDate: item.changeLog?.createdDate\n ? DateTime.fromISO(item.changeLog.createdDate)\n : undefined,\n updatedDate: item.changeLog?.updatedDate\n ? DateTime.fromISO(item.changeLog.updatedDate)\n : undefined\n }\n })) || []\n );\n }\n\n getTenantDefaultUsersAuthentication = async (tenantId: string) => {\n const { data } = await this.api.get(\n `tenants/${tenantId}/userAuthentication/default`\n );\n return {\n ...data,\n sessionMaxDuration:\n data.sessionMaxDuration &&\n Math.ceil(data.sessionMaxDuration / secondsPerDay)\n };\n };\n\n addTenantDefaultUsersAuthentication = async (\n payload: TenantDefaultUsersAuthenticationDto\n ) => {\n const { data } = await this.api.post(\n \"tenants/userAuthentication/default\",\n {\n ...payload,\n sessionMaxDuration:\n payload.sessionMaxDuration &&\n payload.sessionMaxDuration * secondsPerDay\n }\n );\n return {\n ...data,\n sessionMaxDuration:\n data.sessionMaxDuration &&\n Math.ceil(data.sessionMaxDuration / secondsPerDay)\n };\n };\n\n updateTenantDefaultUsersAuthentication = async (\n payload: TenantDefaultUsersAuthenticationDto\n ) => {\n const { data } = await this.api.put(\n `tenants/${payload.id}/userAuthentication/default`,\n {\n ...payload,\n sessionMaxDuration:\n payload.sessionMaxDuration &&\n payload.sessionMaxDuration * secondsPerDay\n }\n );\n return {\n ...data,\n sessionMaxDuration:\n data.sessionMaxDuration &&\n Math.ceil(data.sessionMaxDuration / secondsPerDay)\n };\n };\n\n getChildTenants = async (customerTenantId: string) => {\n const query = stringify({ customerTenantId });\n const dto = (\n await this.api.get(`tenants/childTenants/?${query}`)\n ).data;\n\n return dto.map(toTenant);\n };\n\n // Users\n async getUser(tenantId: guid, userId: guid): Promise {\n const { data } = await this.api.get(\n `tenants/${tenantId}/users/${userId}`\n );\n return data;\n }\n\n async searchUsers(\n tenantId: string,\n searchTerm: string,\n bpIdUserId: string\n ): Promise {\n const { data } = await this.api.post(\"users/search\", {\n tenantId,\n searchTerm,\n bpIdUserId\n });\n return data || [];\n }\n\n createUser = async (user: NewPltUser): Promise => {\n const { tenantId, ...rest } = user;\n return (await this.api.post(`tenants/${tenantId}/users`, rest))\n .data;\n };\n\n updateUser = async (user: PltUser): Promise => {\n return (\n await this.api.put(\n `tenants/${user.tenantId}/users/${user.id}`,\n user\n )\n ).data;\n };\n\n getUserDefaultAuthentication = async (\n tenantId: string,\n userId: string\n ): Promise => {\n const { data } = await this.api.get(\n `tenants/${tenantId}/userAuthentication/users/${userId}`\n );\n return {\n ...data,\n sessionMaxDuration:\n data.sessionMaxDuration &&\n Math.ceil(data.sessionMaxDuration / secondsPerDay)\n };\n };\n\n addUserDefaultAuthentication = async (\n payload: UserDefaultAuthenticationDto\n ): Promise => {\n const { data } = await this.api.post(\n `tenants/${payload.tenantId}/userAuthentication/users/${payload.userId}`,\n {\n ...payload,\n sessionMaxDuration:\n payload.sessionMaxDuration &&\n payload.sessionMaxDuration * secondsPerDay\n }\n );\n return {\n ...data,\n sessionMaxDuration:\n data.sessionMaxDuration &&\n Math.ceil(data.sessionMaxDuration / secondsPerDay)\n };\n };\n\n updateUserDefaultAuthentication = async (\n payload: UserDefaultAuthenticationDto\n ): Promise => {\n const { data } = await this.api.put(\n `tenants/${payload.tenantId}/userAuthentication/users/${payload.userId}`,\n {\n ...payload,\n sessionMaxDuration:\n payload.sessionMaxDuration &&\n payload.sessionMaxDuration * secondsPerDay\n }\n );\n return {\n ...data,\n sessionMaxDuration:\n data.sessionMaxDuration &&\n Math.ceil(data.sessionMaxDuration / secondsPerDay)\n };\n };\n\n // Licences\n getLicence = async (id: string): Promise => {\n return (await this.api.get(`licences/${id}`)).data;\n };\n\n getLicences = (args: GetLicencesArgs): Promise => {\n const url = qs.stringifyUrl({\n url: \"licences\",\n query: {\n ...args\n }\n });\n return this.api.get(url).then(({ data }) => data);\n };\n\n addLicence = async (data: AddLicenceDto): Promise => {\n return (await this.api.post(\"licences\", data)).data;\n };\n\n updateLicence = async (data: LicenceDto): Promise => {\n return (await this.api.put(`licences/${data.id}`, data)).data;\n };\n\n removeLicence = async (id: string): Promise => {\n return (await this.api.put(`licences/${id}/remove`)).data;\n };\n\n // Licence types\n getLicenceTypes = async (): Promise => {\n return (await this.api.get(\"licenceTypes\")).data;\n };\n\n getLicenceType = async (code: string): Promise => {\n return (await this.api.get(`licenceTypes/${code}`)).data;\n };\n\n addLicenceType = async (data: LicenceTypeDto): Promise => {\n return (await this.api.post(\"licenceTypes\", data)).data;\n };\n\n updateLicenceType = async (data: LicenceTypeDto): Promise => {\n return (\n await this.api.put(`licenceTypes/${data.code}`, data)\n ).data;\n };\n\n disableLicenceType = async (code: string): Promise => {\n return (await this.api.put(`licenceTypes/${code}/disable`)).data;\n };\n\n enableLicenceType = async (code: string): Promise => {\n return (await this.api.put(`licenceTypes/${code}/enable`)).data;\n };\n\n // Sales Products\n getSalesProducts = async (\n args?: GetSalesProductsArgs\n ): Promise => {\n const url = qs.stringifyUrl({\n url: \"sales/product\",\n query: {\n licenceTypeCodes: args?.licenceTypeCodes ?? [],\n productCodes: args?.productCodes ?? [],\n productFamilyCodes: args?.productFamilyCodes ?? [],\n applicationCodes: args?.applicationCodes ?? [],\n isInactive: args?.isInactive ?? undefined\n }\n });\n\n return (await this.api.get(url)).data;\n };\n\n getSalesProduct = async (id: string): Promise => {\n return (await this.api.get(`sales/product/${id}`)).data;\n };\n\n addSalesProduct = async (\n data: AddSalesProductDto\n ): Promise => {\n return (await this.api.post(\"sales/product\", data)).data;\n };\n\n updateSalesProduct = async (\n data: SalesProductDto\n ): Promise => {\n return (\n await this.api.put(`sales/product/${data.id}`, data)\n ).data;\n };\n\n resyncStripeProducts = async (): Promise => {\n await this.api.post(\"sales/product/stripe/$resync\");\n };\n\n // Billing and payment methods\n getBillingHistory = async (tenantId: string) => {\n return (\n await this.api.get(`sales/billing/${tenantId}/history/`)\n ).data;\n };\n\n getInvoice = async (tenantId: string, invoiceId: string) => {\n return (\n await this.api.get(\n `sales/billing/${tenantId}/invoice/${stringify({\n invoiceId\n })}`\n )\n ).data;\n };\n\n getBillingContact = async (tenantId: string) => {\n return (\n await this.api.get(\n `sales/billing/${tenantId}/contact/`\n )\n ).data;\n };\n\n payInvoice = async (tenantId: string, invoiceNumber: string) => {\n return (\n await this.api.post(\n `sales/billing/${tenantId}/invoice/pay/${invoiceNumber}`\n )\n ).data;\n };\n\n getPaymentMethods = async (customerTenantId: string) => {\n return (\n await this.api.get(\n `sales/${customerTenantId}/paymentMethods`\n )\n ).data;\n };\n\n getDefaultPaymentMethod = async (customerTenantId: string) => {\n return (\n await this.api.get(\n `sales/${customerTenantId}/paymentMethods/default`\n )\n ).data;\n };\n\n updatePaymentMethod = async (payload: PaymentMethodUpdateArgs) => {\n const { customerTenantId, id, ...rest } = payload;\n return (\n await this.api.post(\n `sales/${customerTenantId}/paymentMethods/${id}`,\n { ...rest }\n )\n ).data;\n };\n\n setupPaymentMethod = async (customerTenantId: string) => {\n return (\n await this.api.post(\n `sales/${customerTenantId}/paymentMethods/setup`\n )\n ).data;\n };\n\n setupPaymentMethodAsDefault = async (\n customerTenantId: string,\n paymentMethodId: string\n ) => {\n return (\n await this.api.post(\n `sales/${customerTenantId}/paymentMethods/${paymentMethodId}/setDefault`\n )\n ).data;\n };\n\n deletePaymentMethod = async (\n customerTenantId: string,\n paymentMethodId: string\n ) => {\n return (\n await this.api.delete(\n `sales/${customerTenantId}/paymentMethods/${paymentMethodId}`\n )\n ).data;\n };\n\n // Stripe customer\n getStripeCustomer = async (customerTenantId: string) => {\n return (\n await this.api.get(\n `sales/customer/${customerTenantId}`\n )\n ).data;\n };\n\n addStripeCustomer = async (data: AddStripeCustomerDto) => {\n const time = getHourAndMinutesFromString(data.testClockTime);\n const clockDate = DateTime.fromJSDate(data.testClockDate);\n const clockDateTime = clockDate?.set({\n hour: time.hour,\n minute: time.minute\n });\n\n const payload: StripeCustomerDto = {\n tenantId: data.tenantId,\n crmId: data.crmId,\n name: data.name,\n country: data.country,\n contact: { email: data.email },\n billingAddress: {\n addressLine1: data.addressLine1,\n addressLine2: data.addressLine2,\n city: data.city,\n state: data.state,\n postcode: data.postcode\n },\n createTestClock: data.useTestClock,\n testClockDate: data.useTestClock\n ? clockDateTime?.setZone(\"UTC\")?.toString()\n : undefined\n };\n return (await this.api.post(\"sales/customer\", payload))\n .data;\n };\n\n getCustomerProducts = async (tenantId: string) => {\n return (\n await this.api.get(\n `sales/customer/${tenantId}/products`\n )\n ).data;\n };\n\n // Subscriptions\n getCustomerSubscriptions = async (customerTenantId: string) => {\n return (\n await this.api.get(\n `sales/subscriptions/${customerTenantId}`\n )\n ).data;\n };\n\n addCustomerSubscription = async (data: AddSubscriptionPayload) => {\n return (\n await this.api.post(\"/sales/subscriptions\", data)\n ).data;\n };\n\n getCustomerSubscriptionPreview = async (data: PreviewSubscriptionPayload) => {\n return (\n await this.api.post(\n \"/sales/subscriptions/preview\",\n data\n )\n ).data;\n };\n\n cancelCustomerSubscription = async (\n args: CancelCancelCustomerSubscriptionsArgs\n ) => {\n const { customerTenantId, subscriptionId, cancelImmediately } = args;\n const query = cancelImmediately\n ? `?${stringify({ cancelImmediately })}`\n : \"\";\n return (\n await this.api.post(\n `/sales/subscriptions/${customerTenantId}/cancel/${subscriptionId}${query}`\n )\n ).data;\n };\n\n undoCancellationCustomerSubscription = async (\n args: Omit\n ) => {\n const { customerTenantId, subscriptionId } = args;\n return (\n await this.api.post(\n `/sales/subscriptions/${customerTenantId}/undoCancellation/${subscriptionId}`\n )\n ).data;\n };\n\n resetCustomerSubscriptionBillingDate = async (\n args: ResetCustomerSubscriptionBillingDateArgs\n ) => {\n const { customerTenantId, subscriptionId } = args;\n return (\n await this.api.post(\n `/sales/subscriptions/${customerTenantId}/resetBillingDate/${subscriptionId}`\n )\n ).data;\n };\n\n // OrgUnit\n async getOrgUnits(args: OrgUnitArgs): Promise {\n const url = qs.stringifyUrl({\n url: \"orgUnit\",\n query: { tenantId: args.tenantId, hierarchyType: args.hierarchyType }\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n // RefData\n getApplicationsRefData = async (): Promise => {\n return (await this.api.get(\"applications\")).data;\n };\n\n getHierarchyTypesRefData = async (): Promise => {\n return (await this.api.get(\"organisationHierarchies\")).data;\n };\n\n async getTenantPromotionCodes(tenantId: string): Promise {\n return (\n await this.api.get(\n `sales/promotionCodes/tenant/${tenantId}`\n )\n ).data;\n }\n\n async getTenantPromotionCode(\n tenantId: string,\n promotionCodeId: string\n ): Promise {\n return (\n await this.api.get(\n `sales/promotionCodes/${promotionCodeId}/tenant/${tenantId}`\n )\n ).data;\n }\n\n getComponentsDefs(args?: GetComponentsDefArgs): Promise {\n const url = qs.stringifyUrl({\n url: \"componentDefs\",\n query: {\n ...args\n }\n });\n return this.api.get(url).then(({ data }) => data || []);\n }\n\n getComponents(args?: GetComponentsArgs): Promise {\n const url = qs.stringifyUrl({\n url: \"components\",\n query: {\n ...args\n }\n });\n return this.api.get(url).then(({ data }) => data);\n }\n\n getComponent(args: GetComponentArgs): Promise {\n const { codeOrId, ...restQuery } = args;\n const url = qs.stringifyUrl({\n url: `components/${codeOrId}`,\n query: {\n ...restQuery\n }\n });\n return this.api.get(url).then(({ data }) => data);\n }\n\n addOrUpdateComponent = (\n payload: CreateComponentPayload\n ): Promise => {\n const { code, tenantId, scopeId, status } = payload;\n const url = qs.stringifyUrl({\n url: `components/${code}`,\n query: {\n tenantId,\n scopeId\n }\n });\n return this.api\n .put(url, { status })\n .then(({ data }) => data);\n };\n\n archiveComponent = (\n payload: ComponentActionPayload\n ): Promise => {\n const { code, tenantId, scopeId } = payload;\n const url = qs.stringifyUrl({\n url: `components/${code}/$archive`,\n query: {\n tenantId,\n scopeId\n }\n });\n return this.api.post(url, {}).then(({ data }) => data);\n };\n\n reConfigureComponent = (\n payload: ComponentActionPayload\n ): Promise => {\n const { code, tenantId, scopeId } = payload;\n const url = qs.stringifyUrl({\n url: `components/${code}/$reConfigure`,\n query: {\n tenantId,\n scopeId\n }\n });\n return this.api.post(url, {}).then(({ data }) => data);\n };\n\n initializeComponent = (\n payload: ComponentActionPayload\n ): Promise => {\n const { code, tenantId, scopeId } = payload;\n const url = qs.stringifyUrl({\n url: `components/${code}/$initialize`,\n query: {\n tenantId,\n scopeId\n }\n });\n return this.api.post(url, {}).then(({ data }) => data);\n };\n\n deInitializeComponent = (\n payload: ComponentActionPayload\n ): Promise => {\n const { code, tenantId, scopeId } = payload;\n const url = qs.stringifyUrl({\n url: `components/${code}/$deInitialize`,\n query: {\n tenantId,\n scopeId\n }\n });\n return this.api.post(url, {}).then(({ data }) => data);\n };\n\n disableComponent = (\n payload: ComponentActionPayload\n ): Promise => {\n const { code, tenantId, scopeId } = payload;\n const url = qs.stringifyUrl({\n url: `components/${code}/$disable`,\n query: {\n tenantId,\n scopeId\n }\n });\n return this.api.post(url, {}).then(({ data }) => data);\n };\n\n getComponentActions(\n args: GetComponentActionsArgs\n ): Promise {\n const url = qs.stringifyUrl({\n url: \"components/actions\",\n query: {\n ...args\n }\n });\n return this.api.get(url).then(({ data }) => data);\n }\n\n getComponentAction(componentId: string): Promise {\n const url = qs.stringifyUrl({\n url: `components/actions/${componentId}`\n });\n return this.api.get(url).then(({ data }) => data);\n }\n\n getComponentSettings(\n args: ComponentActionPayload\n ): Promise {\n const { code, ...queryRest } = args;\n const url = qs.stringifyUrl({\n url: `components/${code}/settings`,\n query: { ...queryRest }\n });\n return this.api.get(url).then(({ data }) => data);\n }\n\n getComponentSetting(\n args: GetComponentSettingArgs\n ): Promise {\n const { code, key, ...queryRest } = args;\n const url = qs.stringifyUrl({\n url: `components/${code}/settings/${key}`,\n query: { ...queryRest }\n });\n return this.api.get(url).then(({ data }) => data);\n }\n\n createComponentSettings(\n args: ComponentActionPayload,\n payload: CreateSettingPayload\n ): Promise<\n Omit\n > {\n const { code, ...queryRest } = args;\n const url = qs.stringifyUrl({\n url: `components/${code}/settings/`,\n query: { ...queryRest }\n });\n\n return this.api\n .post<\n Omit\n >(url, payload)\n .then(({ data }) => data);\n }\n\n updateComponentSettings(\n args: UpdateSettingArgs,\n payload: UpdateSettingPayload\n ): Promise {\n const { code, ...queryRest } = args;\n const { key, ...restPayload } = payload;\n const url = qs.stringifyUrl({\n url: `components/${code}/settings/${key}`,\n query: { ...queryRest }\n });\n\n return this.api\n .put(url, restPayload)\n .then(({ data }) => data);\n }\n\n deleteComponentSettings(args: DeleteSettingArgs): Promise {\n const { code, key, ...queryRest } = args;\n const url = qs.stringifyUrl({\n url: `components/${code}/settings/${key}`,\n query: { ...queryRest }\n });\n\n return this.api.delete(url).then(({ data }) => data);\n }\n\n getComponentsRequests(\n args: GetComponentsRequestsArgs\n ): Promise {\n const url = qs.stringifyUrl({\n url: \"components/actionRequests\",\n query: { ...args }\n });\n return this.api.get(url).then(({ data }) => data);\n }\n\n getComponentRequests(\n componentActionRequestId: string\n ): Promise {\n return this.api\n .get(\n `components/actionRequests/${componentActionRequestId}`\n )\n .then(({ data }) => data);\n }\n\n getComponentWorkflowRunInstance(\n id: string\n ): Promise {\n return this.api\n .get(\n `components/componentWorkflowInstances/${id}`\n )\n .then(({ data }) => data);\n }\n\n getComponentManagerWorkflowRunInstance(\n id: string\n ): Promise {\n return this.api\n .get(\n `components/componentManagerWorkflowInstances/${id}`\n )\n .then(({ data }) => data);\n }\n\n getTenantTags = async (tenantId: string): Promise => {\n return this.api\n .post(`tenants/tags/tenant/${tenantId}`)\n .then(({ data }) => data);\n };\n\n addTenantTag = async (tag: NewTenantTag): Promise => {\n return (await this.api.post(\"tenants/tags\", tag)).data;\n };\n\n updateTenantTag = async (tag: TenantTag): Promise => {\n return (await this.api.put(`tenants/tags/${tag.id}`, tag)).data;\n };\n\n deleteTenantTag = async (tag: TenantTag): Promise => {\n await this.api.delete(`tenants/tags/${tag.id}`);\n return tag;\n };\n\n getUsedTenantTags = async (): Promise => {\n return this.api\n .post(\"tenants/tags/used\")\n .then(({ data }) => data);\n };\n}\n","import { AxiosInstance } from \"@bps/http-client\";\nimport { EntitySyncStateDto } from \"@libs/api/gateways/tg/model/EntitySyncState\";\nimport { SiteSyncStateDto } from \"@libs/api/gateways/sia/models/SiteSyncState\";\n\nimport { DateTime } from \"@bps/utils\";\nimport { ITgOpsGateway } from \"@libs/api/gateways/tg/tg-ops-gateway.interface\";\nimport {\n PremSettings,\n PremSettingsDto,\n PremSettingsUpdate\n} from \"@libs/api/gateways/tg/tg-ops-gateway.dtos\";\n\nexport class TgOpsGateway implements ITgOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n async getReplicationSyncState(siteId: string): Promise {\n const config = {\n headers: {\n \"X-Tenant\": siteId\n }\n };\n\n const { data } = await this.api.get(\n \"/siteState/sync\",\n config\n );\n return data;\n }\n\n async recalculateAvailability(siteId: string) {\n const config = {\n headers: {\n \"X-Tenant\": siteId\n }\n };\n await this.api.post(\"/availability/recalculate\", null, config);\n return \"Ok\";\n }\n\n async snapshotTables(siteId: string): Promise {\n const config = {\n headers: {\n \"X-Tenant\": siteId\n }\n };\n\n const { data } = await this.api.post(\n `/siteState/snapshot/${siteId}`,\n null,\n config\n );\n return data;\n }\n\n async getEntitySyncState(siteId: string): Promise {\n const config = {\n headers: {\n \"X-Tenant\": siteId\n }\n };\n\n const { data } = await this.api.get(\n \"/entitySyncState\",\n config\n );\n return data;\n }\n\n async getPremSettings(siteId: string): Promise {\n const config = {\n headers: {\n \"X-Tenant\": siteId\n },\n params: {\n tenantId: siteId\n }\n };\n\n const { data } = await this.api.get(\n \"/premSettings\",\n config\n );\n return data.map(({ ...dto }) => {\n const { created, updated, ...rest } = dto;\n return {\n created: DateTime.fromISO(created),\n updated: DateTime.fromISO(updated),\n ...rest\n };\n });\n }\n\n async updatePremSettings(\n siteId: string,\n updates: PremSettingsUpdate[]\n ): Promise {\n const config = {\n headers: {\n \"X-Tenant\": siteId\n },\n params: {\n tenantId: siteId\n }\n };\n\n const { data } = await this.api.put(\n \"/premSettings\",\n updates,\n config\n );\n\n return data.map(({ ...dto }) => {\n const { created, updated, ...rest } = dto;\n return {\n created: DateTime.fromISO(created),\n updated: DateTime.fromISO(updated),\n ...rest\n };\n });\n }\n}\n","import { DateTime } from \"@bps/utils\";\n\nexport interface SiteVersions {\n FailureMessage: string;\n IsSiteAgentDesiredVersionDownloaded: boolean;\n ResponseDateTimeUTC?: DateTime;\n SiteAgentInstalledVersion: string;\n SiteManagerInstalledVersion: string;\n Success: boolean;\n}\n\nexport enum SiteComponentType {\n Bootstrapper = \"sitebootstrapinstaller\",\n SiteAgent = \"siteagent\",\n SiteManager = \"sitemanager\"\n}\n\nexport enum SiteCommand {\n Configuration = \"CONFIGURATION\",\n ChangeState = \"CHANGESTATE\",\n UploadLog = \"UPLOADLOG\"\n}\n\nexport enum SiteComponentState {\n Download = \"Download\",\n Update = \"ApplyUpdate\",\n Install = \"Install\",\n Uninstall = \"Uninstall\",\n Start = \"Start\",\n Stop = \"Stop\",\n Restart = \"Restart\"\n}\n\nexport enum ProsDatabaseCommands {\n InstallUpdate = \"installupdate\",\n Enable = \"enable\",\n Uninstall = \"uninstall\",\n EnableChangeTracking = \"enablechangetracking\",\n DisableChangeTracking = \"disablechangetracking\"\n}\n\nexport interface SiteComponentVersionDto {\n component: SiteComponentType;\n versions: SiteComponentVersionResponse[];\n}\n\nexport interface SiteComponentVersionResponse {\n version: string;\n createdDate: DateTime;\n}\n\nexport interface SiteComponentVersionApproval {\n componentType: SiteComponentType;\n componentVersion: string;\n id: string;\n createdDate: DateTime;\n createdBy: string;\n}\n\nexport interface VersionApprovalRequest {\n componentType: SiteComponentType;\n componentVersion: string;\n}\n\nexport interface SiteCommandUpdateArgs {\n tenantId: string;\n commandType: string;\n componentType: string;\n subCommandType?: string;\n scheduled?: DateTime;\n}\n\nexport interface GetTenantsParams {\n isInactive?: boolean;\n application?: string;\n tenantIds?: string[];\n featureCodes?: string[];\n}\n\nexport interface SiteVersionsDto\n extends Omit {\n ResponseDateTimeUTC: string;\n}\n\nexport interface SiteAvailableReport {\n id: string;\n name: string;\n}\n\n// This is just a marker interface - we don't type the result as we just display it as JSON\nexport interface SiteServerReport {}\n\nexport enum ReportsType {\n server = \"server\",\n sql = \"sql\"\n}\n\nexport interface InstallerDetail {\n name: string;\n version: string;\n url: string;\n}\n\nexport interface SIATenantDetails {\n id: string;\n siteId: string;\n name?: string;\n tenantType?: string;\n}\n\nexport interface ProsTenant {\n id: string;\n name?: string;\n application?: string;\n}\n\nexport enum LogLevels {\n none = \"None\",\n trace = \"Trace\",\n debug = \"Debug\",\n information = \"Information\",\n warning = \"Warning\",\n error = \"Error\",\n critical = \"Critical\"\n}\n\nexport interface SiteComponent {\n type: SiteComponentType;\n name: string;\n}\n\nexport interface SequenceNumberSyncState {\n sequenceNumber: number | null;\n sentAt?: DateTime;\n receivedAt?: DateTime;\n processedAt?: DateTime;\n receiveDelayMillis?: number;\n processingDelayMillis?: number;\n status?: \"Queued\" | \"Dequeued\" | \"Processed\";\n}\n","import {\n SiteComponent,\n SiteComponentType\n} from \"@libs/api/gateways/sia/sia-ops-gateway.dtos\";\n\nexport const siteComponents: SiteComponent[] = [\n { type: SiteComponentType.SiteAgent, name: \"Site Agent\" },\n { type: SiteComponentType.SiteManager, name: \"Site Manager\" }\n];\nexport const getShortComponentTypeName = (component: SiteComponentType) => {\n switch (component) {\n case SiteComponentType.SiteAgent:\n return \"agent\";\n case SiteComponentType.SiteManager:\n return \"manager\";\n default:\n throw new Error(`Unsupported site component type: ${component}`);\n }\n};\n","import qs from \"query-string\";\n\nimport { AxiosInstance } from \"@bps/http-client\";\nimport { DateTime } from \"@bps/utils\";\nimport { CurrentSiteVersionDto } from \"@libs/api/gateways/sia/models/CurrentSiteVersion\";\nimport { SiteComponentLogDto } from \"@libs/api/gateways/sia/models/SiteComponentLog\";\nimport {\n GetTenantsParams,\n InstallerDetail,\n ProsTenant,\n ReportsType,\n SIATenantDetails,\n SiteAvailableReport,\n SiteCommandUpdateArgs,\n SiteComponentType,\n SiteComponentVersionApproval,\n SiteComponentVersionDto,\n SiteServerReport,\n SiteVersionsDto,\n VersionApprovalRequest\n} from \"@libs/api/gateways/sia/sia-ops-gateway.dtos\";\nimport { ISiaOpsGateway } from \"@libs/api/gateways/sia/sia-ops-gateway.interface\";\nimport { getShortComponentTypeName } from \"@libs/api/gateways/sia/sia-ops-gateway.utils\";\nimport { guid } from \"@libs/common/guid\";\n\nexport class SiaOpsGateway implements ISiaOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n async postSiteCommandUpdate(args: SiteCommandUpdateArgs): Promise {\n const {\n tenantId,\n commandType,\n subCommandType,\n componentType,\n scheduled\n } = args;\n await this.api.post(\"site/siteCommandUpdate\", {\n tenantId,\n commandType,\n subCommandType,\n componentType: componentType?.toUpperCase(),\n scheduled\n });\n return \"OK\";\n }\n\n async approveBuild(\n siteId: string,\n component: SiteComponentType,\n version: string\n ) {\n // Returns a 204\n await this.api.put(\"site/buildnumber\", {\n componentType: component,\n desiredVersion: version,\n tenantId: siteId\n });\n\n return \"OK\";\n }\n\n async updateComponentState(\n siteId: string,\n state: string,\n componentType: SiteComponentType\n ): Promise {\n const { data } = await this.api.put(\"site/component-state\", {\n state,\n id: siteId,\n component: getShortComponentTypeName(componentType)\n });\n\n return data;\n }\n\n async getCurrentVersions(siteId: string): Promise {\n const url = qs.stringifyUrl({\n url: \"site/currentVersion\",\n query: {\n components: [\n SiteComponentType.SiteAgent,\n SiteComponentType.SiteManager\n ],\n tenantId: siteId\n }\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getVersions(\n siteId: string,\n desiredVersion: string\n ): Promise {\n const url = qs.stringifyUrl({\n url: `site/versions/${desiredVersion}`,\n query: {\n id: siteId\n }\n });\n\n const { data } = await this.api.get(url);\n const dataString = decodeURIComponent(data);\n try {\n return JSON.parse(dataString);\n } catch (e) {\n throw new Error(dataString);\n }\n }\n\n async getHealthCheck(siteId: string): Promise {\n const { data } = await this.api.get(`site/healthCheck/${siteId}`);\n return data;\n }\n\n async uploadLogs(\n siteId: string,\n componentType: SiteComponentType\n ): Promise {\n const component = getShortComponentTypeName(componentType);\n\n const { data } = await this.api.get(\n `site/log-upload/${component}/${siteId}`\n );\n return data;\n }\n\n async updateLogLevel(\n logLevel: string,\n siteId: string,\n componentType?: SiteComponentType\n ): Promise {\n const component = componentType && getShortComponentTypeName(componentType);\n\n const { data } = await this.api.put(\"site/logLevel\", {\n logLevel,\n id: siteId,\n component\n });\n return data;\n }\n\n async getSiteLogs(siteId: string): Promise {\n const { data } = await this.api.get(`site/logs/${siteId}`);\n return data;\n }\n\n async modifyPrOSDatabase(siteId: string, command: string) {\n const { data } = await this.api.post(\"site/modify-db\", {\n siteId,\n databaseCommand: command\n });\n return data;\n }\n\n async getPing(\n siteId: string,\n componentType: SiteComponentType\n ): Promise {\n const component = getShortComponentTypeName(componentType);\n\n const { data } = await this.api.get(`site/ping/${component}/${siteId}`);\n return data;\n }\n\n async getAvailableVersions(): Promise {\n const url = qs.stringifyUrl({\n url: \"site/versions\",\n query: {\n components: [SiteComponentType.SiteAgent, SiteComponentType.SiteManager]\n }\n });\n\n const { data } = await this.api.get(url);\n\n return data.map(({ versions, ...rest }) => ({\n versions: versions.map(({ createdDate, ...rest }) => ({\n createdDate: DateTime.fromISO(createdDate.toString()),\n ...rest\n })),\n ...rest\n }));\n }\n\n async getApprovedVersions(): Promise {\n const url = qs.stringifyUrl({\n url: \"site/approveBuildVersion\"\n });\n\n const { data } = await this.api.get(url);\n return data.map(({ createdDate, ...rest }) => ({\n createdDate: DateTime.fromISO(createdDate.toString()),\n ...rest\n }));\n }\n\n async postApprovedVersions({\n componentType,\n componentVersion\n }: VersionApprovalRequest): Promise {\n const url = qs.stringifyUrl({\n url: \"site/approveBuildVersion\"\n });\n\n const { data } = await this.api.post(url, {\n componentType,\n componentVersion\n });\n\n const { createdDate, ...rest } = data;\n\n return {\n createdDate: DateTime.fromISO(data.createdDate.toString()),\n ...rest\n };\n }\n\n async deleteApprovedVersions(approvalId: string): Promise {\n const url = qs.stringifyUrl({\n url: \"site/approveBuildVersion\",\n query: {\n approvalId\n }\n });\n\n const { data } = await this.api.delete(url);\n return data;\n }\n\n async getSiteActivity(siteId: string): Promise {\n const url = qs.stringifyUrl({\n url: \"site/activity\",\n query: {\n tenantId: siteId\n }\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getSiteReport(\n siteId: guid,\n componentType: SiteComponentType,\n report: string\n ): Promise {\n const component = getShortComponentTypeName(componentType);\n\n const { data } = await this.api.get(\n `site/reports/${component}/${report}/${siteId}`\n );\n return JSON.parse(data);\n }\n\n async getSiteAvailableReports(\n siteId: guid,\n componentType: SiteComponentType,\n type: ReportsType\n ): Promise {\n const component = getShortComponentTypeName(componentType);\n\n const { data } = await this.api.get(\n `site/reports/list/${component}/${type}/${siteId}`\n );\n return JSON.parse(data).Reports.map(r => ({ id: r.Action, name: r.Name }));\n }\n\n async checkUpdate(siteId: string): Promise {\n const { data } = await this.api.post(`site/check-update/${siteId}`);\n return data;\n }\n\n async getTenants(params?: GetTenantsParams): Promise {\n const { data } = await this.api.get(\"tenants\", {\n params\n });\n return data;\n }\n\n async getTenant(tenantId: guid): Promise {\n const { data } = await this.api.get(`tenants/tenant/${tenantId}`);\n return data;\n }\n\n async installPrerequisites(siteId: string): Promise {\n const { data } = await this.api.post(\n `site/install-prerequisites/${siteId}`\n );\n return data;\n }\n\n async deleteEntityEvents(siteId: string): Promise {\n const { data } = await this.api.post(`site/delete-entity-events/${siteId}`);\n return data;\n }\n\n async getSiteManagerInstallerDetail(): Promise {\n const { data } = await this.api.get(\"site/sitemanager\");\n return data;\n }\n\n async updateSiteComponentCredentials(tenantId: string): Promise {\n const url = qs.stringifyUrl({\n url: \"site/credentials\",\n query: {\n tenantId\n }\n });\n\n const { data } = await this.api.put(url);\n return data;\n }\n}\n","import { DateTime } from \"@bps/utils\";\nimport { ChangeLogDto } from \"@libs/api/types/common-dtos\";\nimport { guid } from \"@libs/common/guid\";\nimport { RJSFSchema } from \"@rjsf/utils\";\n\nexport interface SoftwarePackageVersionConfig {\n id?: string;\n softwarePackageVersionId: string;\n key: string;\n defaultValue: string;\n description: string;\n dataType: string;\n createdDate?: DateTime;\n createdBy?: string;\n}\n\nexport interface SoftwarePackageVersionConfigArgs {\n softwarePackageVersionId: string;\n}\n\nexport interface SecurityRole {\n id: guid;\n code: string;\n isInactive: boolean;\n text: string;\n description: string;\n rolePermissions?: {\n permissionCode: string;\n source: string;\n RoleId: string;\n }[];\n isSystemManaged: boolean;\n}\n\nexport interface FieldDeviceDetails\n extends Omit<\n FieldDeviceDetailsDto,\n | \"controllerCreatedDateTimeUtc\"\n | \"controllerStartDateTimeUtc\"\n | \"controllerLastObservedDateTimeUtc\"\n | \"recoveryAgentCreatedDateTimeUtc\"\n | \"recoveryAgentStartDateTimeUtc\"\n | \"recoveryAgentLastObservedDateTimeUtc\"\n | \"tokenExpiryUtc\"\n > {\n controllerCreatedDateTimeUtc?: DateTime;\n controllerStartDateTimeUtc?: DateTime;\n controllerLastObservedDateTimeUtc?: DateTime;\n recoveryAgentCreatedDateTimeUtc?: DateTime;\n recoveryAgentStartDateTimeUtc?: DateTime;\n recoveryAgentLastObservedDateTimeUtc?: DateTime;\n tokenExpiryUtc?: DateTime;\n}\n\nexport interface FieldDeviceDetailsDto {\n id: guid;\n cloudConnectorId: guid;\n etag: string;\n changelog: Changelog;\n tokenExpiryUtc: string;\n computerName: string;\n osName: string;\n osVersion: string;\n systemDomain: string;\n timezone: string;\n maintenanceScriptVersion: string;\n controllerStatus: string;\n controllerRunStatusSid: string;\n controllerVersion: string;\n controllerStartup: string;\n controllerCreatedDateTimeUtc: string;\n controllerStartDateTimeUtc: string;\n controllerLastObservedDateTimeUtc: string;\n recoveryAgentStatus: string;\n recoveryAgentRunStatusSid: string;\n recoveryAgentVersion: string;\n recoveryAgentStartup: string;\n recoveryAgentCreatedDateTimeUtc: string;\n recoveryAgentStartDateTimeUtc: string;\n recoveryAgentLastObservedDateTimeUtc: string;\n}\n\nexport interface FieldDevice {\n id: guid;\n cloudConnectorId: guid;\n etag: string;\n changeLog: Changelog;\n appRegistrationId?: guid;\n notBeforeTimeUtc?: DateTime;\n tokenExpiryUtc?: DateTime;\n authEnabled?: boolean;\n issueTimeUtc?: DateTime;\n}\n\nexport interface FieldDeviceDto\n extends Omit<\n FieldDevice,\n \"notBeforeTimeUtc\" | \"tokenExpiryUtc\" | \"issueTimeUtc\" | \"changeLog\"\n > {\n notBeforeTimeUtc: string;\n tokenExpiryUtc: string;\n issueTimeUtc: string;\n changeLog: ChangeLogDto;\n}\n\nexport interface FieldDeviceFilterArgs {\n searchTerm: string;\n}\n\nexport interface Changelog {\n createdDate?: DateTime;\n createdBy?: string;\n updatedDate?: DateTime;\n updatedBy?: string;\n}\n\nexport interface RolloutPackageDesiredConfig {\n id?: string;\n rolloutPackageId: string;\n key: string;\n value: string;\n eTag?: string;\n changeLog?: Changelog;\n}\n\nexport interface RolloutPackageDesiredConfigArgs {\n rolloutPackageId: string;\n}\n\nexport interface RolloutPackageDesiredConfigCreateRequest {\n rolloutPackageId: string;\n key: string;\n value: string;\n}\n\nexport interface RolloutPackageDesiredConfigUpdateRequest\n extends RolloutPackageDesiredConfigCreateRequest {\n id: string;\n eTag?: string;\n changeLog?: Changelog;\n}\n\nexport interface RolloutPackage {\n id?: string;\n rolloutId: string;\n softwarePackageVersionId: string;\n eTag?: string;\n changeLog?: Changelog;\n}\n\nexport interface RolloutPackageArgs {\n rolloutId: string;\n}\n\nexport interface RolloutPackageCreateRequest {\n rolloutId: string;\n softwarePackageVersionId: string;\n}\n\nexport interface RolloutPackageUpdateRequest {\n id: string;\n rolloutId: string;\n softwarePackageVersionId: string;\n eTag?: string;\n}\n\nexport interface Rollout {\n id?: string;\n deploymentRingId: string;\n isActive: boolean;\n displayName?: string;\n initialDownloadStartUtc?: DateTime;\n initialDownloadEndUtc?: DateTime;\n initialInstallStartUtc?: DateTime;\n initialInstallEndUtc?: DateTime;\n eTag?: string;\n}\n\nexport interface RolloutCreateRequest {\n deploymentRingId: string;\n isActive: boolean;\n displayName?: string;\n initialDownloadStartUtc: string;\n initialDownloadEndUtc: string;\n initialInstallStartUtc: string;\n initialInstallEndUtc: string;\n rolloutId?: string;\n}\n\nexport interface RolloutUpdateRequest {\n id: string;\n deploymentRingId: string;\n isActive: boolean;\n displayName?: string;\n initialDownloadStartUtc: string;\n initialDownloadEndUtc: string;\n initialInstallStartUtc: string;\n initialInstallEndUtc: string;\n eTag: string;\n}\n\nexport interface RingMember {\n id: string;\n name: string;\n deviceId: string;\n connectorId: string;\n lastUpdateSuccess: DateTime;\n lastUdpateAttempt: DateTime;\n}\n\nexport interface FieldService {\n code: string;\n name: string;\n approvedDefaultVersion: string;\n availableBuildVersions: string[];\n}\n\nexport interface SoftwarePackage {\n id: guid;\n code: string;\n displayName: string;\n description: string;\n softwarePackageType: SoftwarePackageType;\n softwarePublisherId: guid;\n isActive: boolean;\n}\n\nexport interface SoftwarePackageArgs {\n softwarePublisherCode?: string;\n softwarePackageType?: SoftwarePackageType;\n isActive?: boolean;\n}\n\nexport enum SoftwarePackageType {\n Service = \"SERVICE\",\n Module = \"MODULE\",\n Application = \"APPLICATION\",\n File = \"FILE\",\n Bundle = \"BUNDLE\",\n Dependency = \"DEPENDENCY\"\n}\n\nexport enum SoftwarePackageServiceCodes {\n FieldController = \"BestPracticeFieldController\",\n RecoveryAgent = \"BestPracticeFieldRecoveryAgent\"\n}\n\nexport interface FieldDeviceReportedConfig {\n fieldDeviceConfigReportId: string;\n fieldDeviceId: guid;\n softwarePackageType: SoftwarePackageType;\n softwarePackageCode: string;\n softwarePackageDisplayName: string;\n softwarePackageId: guid;\n softwarePackageVersion: string;\n softwarePackageVersionId?: guid;\n softwarePackageIsActive: boolean;\n softwarePublisherId: guid;\n softwarePublisherName: string;\n status: string;\n runStatus: string;\n startup: string;\n user: string;\n path: string;\n startDateTimeUtc: DateTime;\n createdDateTimeUtc: DateTime;\n lastObservedDateTimeUtc: DateTime;\n}\n\nexport interface FieldDeviceReportedConfigDto\n extends Omit<\n FieldDeviceReportedConfig,\n \"createdDateTimeUtc\" | \"startDateTimeUtc\" | \"lastObservedDateTimeUtc\"\n > {\n startDateTimeUtc: string;\n createdDateTimeUtc: string;\n lastObservedDateTimeUtc: string;\n}\n\nexport interface FieldDevicePropertyDto {\n id: number;\n fieldDeviceId?: guid;\n propertyType: string;\n propertyValue?: string;\n firstObservedUtc?: string;\n prevObservedUtc?: string;\n observationCount: number;\n lastSourceType?: string;\n lastSourceId?: string;\n lastObservedUtc?: string;\n}\n\nexport interface FieldDeviceClaimDto {\n id: string;\n key: string;\n value: string;\n eTag?: string;\n changeLog?: ChangeLogDto;\n}\n\nexport type FieldDeviceClaim = Omit & {\n changeLog?: Changelog;\n};\n\nexport interface FieldDeviceProperty\n extends Omit<\n FieldDevicePropertyDto,\n \"firstObservedUtc\" | \"prevObservedUtc\" | \"lastObservedUtc\"\n > {\n firstObservedUtc?: DateTime;\n prevObservedUtc?: DateTime;\n lastObservedUtc?: DateTime;\n}\n\nexport interface FieldDeviceIdentifierDto {\n id: number;\n fieldDeviceId?: guid;\n identifierType: string;\n identifierValue?: string;\n firstObservedUtc?: string;\n prevObservedUtc?: string;\n observationCount: number;\n lastSourceType?: string;\n lastSourceId?: string;\n lastObservedUtc?: string;\n authenticated: boolean;\n}\n\nexport interface FieldDeviceIdentifier\n extends Omit<\n FieldDeviceIdentifierDto,\n \"firstObservedUtc\" | \"prevObservedUtc\" | \"lastObservedUtc\"\n > {\n firstObservedUtc?: DateTime;\n prevObservedUtc?: DateTime;\n lastObservedUtc?: DateTime;\n}\n\nexport interface FieldDeviceDeploymentRingDetail {\n fieldDeviceId: string;\n id: string;\n deploymentRingId: string;\n name?: string;\n code: string;\n description?: string;\n sortOrder: number;\n isPublic: boolean;\n eTag: string;\n}\n\nexport interface AddFieldDeviceDeploymentRingRequest {\n deploymentRingId: string;\n fieldDeviceId: string;\n sortOrder: number;\n}\n\nexport interface DeploymentRingFieldDevice {\n id: string;\n deploymentRingId: string;\n fieldDeviceId: string;\n sortOrder: number;\n eTag: string;\n}\n\nexport interface FieldDeviceConfiguration {\n cloudConnectorId: guid;\n bundlesToInstall: FieldDeviceSoftwarePackageVersionConfig[];\n componentsToInstall: FieldDeviceComponentConfig[];\n configurationSettings: FieldDeviceConfigSetting[];\n configurationVersion: string;\n maintenance: FieldDeviceSoftwarePackageVersionConfig;\n files: FieldDeviceSoftwarePackageVersionConfig[];\n oneTimeActions: FieldDeviceActionRunnerConfig;\n options: FieldDeviceConfigOption;\n}\n\nexport interface FieldDeviceComponentConfig\n extends FieldDeviceDateRangeSoftwarePackageVersionConfig {\n modules?: {\n [code: string]: FieldDeviceDateRangeSoftwarePackageVersionConfig;\n };\n mustBeInstalledBy?: string;\n updatesFieldComponent?: string;\n}\n\nexport interface FieldDeviceDateRangeSoftwarePackageVersionConfig\n extends FieldDeviceSoftwarePackageVersionConfig {\n downloadEndUtc?: DateTime;\n downloadStartUtc?: DateTime;\n installEndUtc?: DateTime;\n installStartUtc?: DateTime;\n}\n\nexport interface FieldDeviceSoftwarePackageVersionConfig {\n id: guid;\n code: string;\n dependencies: { [id: number]: guid };\n dependencyCodes: { [id: number]: string };\n downloadUrl: string;\n executableName?: string;\n expectedThumbprint?: string;\n isZipped: boolean;\n launchArguments?: string;\n maximumWindowsVersion?: string;\n minimumWindowsVersion?: string;\n name: string;\n type?: SoftwarePackageType;\n version: string;\n}\n\nexport interface FieldDeviceConfigSetting {\n dataType: string;\n key: string;\n softwarePackageCode: string;\n value?: string;\n}\n\nexport interface FieldDeviceActionRunnerConfig {\n oneTimeActions: FieldDeviceConfigurationOneTimeAction[];\n}\n\nexport interface FieldDeviceConfigurationOneTimeAction {\n arguments: string;\n toBeRunBy: string;\n cannotBeRunAfterUtc?: DateTime;\n cannotBeRunBeforeUtc?: DateTime;\n id: number;\n maximumWindowsVersion?: string;\n minimumWindowsVersion?: string;\n}\n\nexport interface FieldDeviceConfigOption {\n applicationInsightsConnectionString: string;\n fieldGatewayApiBaseUrl: string;\n fieldGatewayEndpoint: string;\n fieldManagementApiBaseUrl: string;\n}\n\nexport interface FieldDeviceAuthAction {\n id: string;\n fieldDeviceId: string;\n deviceAction: string;\n deviceIdentifierType: string;\n deviceIdentifierValue: string;\n runDate?: DateTime;\n eTag: string;\n changeLog: Changelog;\n}\n\nexport type FieldDeviceAuthActionResponse = Omit<\n FieldDeviceAuthAction,\n \"changeLog\" | \"runDate\"\n> & {\n changeLog: ChangeLogDto;\n runDate?: string;\n};\n\nexport interface FieldDeviceAuthActionRequest {\n fieldDeviceId: string;\n deviceAction: string;\n deviceIdentifierType: string;\n deviceIdentifierValue: string;\n}\n\nexport interface DeviceConfigurationDiff {\n desiredConfig: DiffSoftwarePackage[];\n reportedConfig: DiffSoftwarePackage[];\n}\n\nexport interface DiffSoftwarePackage {\n softwarePackageCode: string;\n version: string;\n settings: DiffSoftwarePackageConfigurationSetting[];\n}\n\nexport interface DiffSoftwarePackageConfigurationSetting {\n key: string;\n value: string;\n}\n\nexport interface DeploymentRing {\n id: guid;\n code: string;\n isInactive: string;\n isPublic: boolean;\n displayName: string;\n description: string;\n selectorId?: guid;\n changeLog: Changelog;\n eTag?: string;\n}\n\nexport interface DeploymentRingCreateRequest {\n code: string;\n isPublic: boolean;\n displayName: string;\n description: string;\n}\n\nexport interface DeploymentRingUpdateRequest {\n code: string;\n isPublic: boolean;\n displayName: string;\n description: string;\n deploymentRingId: guid;\n selectorId?: guid;\n eTag: string;\n}\n\nexport interface CustomRJSFSchema extends RJSFSchema {\n \"x-messageType\": string;\n}\n\nexport enum ChannelPreference {\n Queued = \"Queued\",\n Realtime = \"Realtime\",\n RealtimeWithQueuedFallback = \"RealtimeWithQueuedFallback\"\n}\n\nexport interface DeviceCommand {\n fieldDeviceId: string;\n channelPreference?: string;\n targetSoftwarePackageCode: string;\n routedMessageData: RoutedMessageData;\n}\n\nexport interface RoutedMessageData {\n messageType: string;\n value: string;\n}\n\nexport interface CommandResponse {\n Status?: number;\n Value?: string;\n ValueType?: string;\n ErrorMessage?: string;\n}\n\nexport interface SelectorArgs {\n selectorId?: string;\n name?: string;\n}\n\nexport interface SelectorCreateRequest {\n name: string;\n description: string;\n rules: SelectorCreateRequestRule[];\n}\n\nexport interface SelectorCreateRequestRule {\n attributeType?: string;\n valueDataType?: string;\n comparisonOperator?: string;\n value?: string;\n}\n\nexport type SelectorRuleDto = {\n id?: guid;\n selectorId?: guid;\n attributeType?: string;\n valueDataType?: string;\n comparisonOperator?: string;\n value?: string;\n etag?: string;\n changeLog?: ChangeLogDto;\n};\nexport type SelectorDto = {\n id: guid;\n name: string;\n description?: string;\n deviceCount: string;\n etag?: string;\n changeLog?: ChangeLogDto;\n rules: SelectorRuleDto[];\n};\n\nexport interface SoftwarePackageDefault {\n id: guid;\n softwarePackageId: guid;\n softwarePackageVersionId: guid;\n changeLog: Changelog;\n eTag?: string;\n}\n\nexport interface SoftwarePackageDefaultRequest {\n softwarePackageId: guid;\n softwarePackageVersionId: guid;\n}\n\nexport interface SoftwarePackageVersion {\n id: guid;\n certificateThumbprint: string;\n datePublishedUtc: DateTime;\n executableName: string;\n launchArguments: string;\n maximumWindowsVersion: string;\n minimumWindowsVersion: string;\n softwarePackageId: guid;\n url: string;\n version: string;\n virusScanIssueCount: number;\n softwarePublisherCode: string;\n softwarePublisherDescription: string;\n softwarePublisherDisplayName: string;\n softwarePublisherId: string;\n}\n\nexport interface SoftwarePackageVersionArgs {\n datePublishedFrom?: string;\n datePublishedTo?: string;\n softwarePackageId?: string;\n softwarePublisherId?: string;\n softwarePackageType?: string;\n version?: string;\n}\n\nexport interface SoftwarePublisher {\n id: guid;\n code: string;\n description: string;\n displayName: string;\n}\n\nexport interface CombinedSoftwarePackage {\n id: guid;\n softwarePackageCode: string;\n softwarePackageType: SoftwarePackageType;\n currentVersion?: string;\n desiredVersion?: string;\n name: string;\n}\n\nexport interface SoftwarePackageLogArgs {\n fieldDeviceId: guid;\n searchKeyword?: string;\n}\n\nexport interface SoftwarePackageLogDto {\n blobDownloadUrl: string;\n blobName: string;\n blobFileSize: number;\n blobCreationDate: string;\n blobLastModifiedDate: string;\n}\n\nexport interface SoftwarePackageLog\n extends Omit<\n SoftwarePackageLogDto,\n \"blobCreationDate\" | \"blobLastModifiedDate\"\n > {\n blobCreationDate?: DateTime;\n blobLastModifiedDate?: DateTime;\n}\n","import {\n CombinedSoftwarePackage,\n FieldDeviceDateRangeSoftwarePackageVersionConfig,\n FieldDeviceIdentifier,\n FieldDeviceIdentifierDto,\n FieldDeviceReportedConfig,\n SoftwarePackageServiceCodes\n} from \"@libs/api/gateways/field/field-ops-gateway.dtos\";\nimport { DateTime } from \"@bps/utils\";\n\nexport const mapFieldDeviceIdentifierDtoToIdentifier = (\n identifier: FieldDeviceIdentifierDto\n) => {\n return {\n ...identifier,\n lastObservedUtc: identifier.lastObservedUtc\n ? DateTime.fromISO(identifier.lastObservedUtc)\n : undefined,\n prevObservedUtc: identifier.prevObservedUtc\n ? DateTime.fromISO(identifier.prevObservedUtc)\n : undefined,\n firstObservedUtc: identifier.firstObservedUtc\n ? DateTime.fromISO(identifier.firstObservedUtc)\n : undefined\n } as FieldDeviceIdentifier;\n};\nexport const shorthandServiceName = (\n softwarePackage: CombinedSoftwarePackage\n) => {\n switch (softwarePackage.softwarePackageCode) {\n case SoftwarePackageServiceCodes.FieldController:\n return \"Controller\";\n case SoftwarePackageServiceCodes.RecoveryAgent:\n return \"Recovery Agent\";\n default:\n return softwarePackage.name;\n }\n};\nexport const combinedSoftwarePackages = (\n desiredSoftwarePackage: FieldDeviceDateRangeSoftwarePackageVersionConfig[],\n reportedSoftwarePackage: FieldDeviceReportedConfig[]\n) => {\n const combined = [] as CombinedSoftwarePackage[];\n\n // Look over desired modules and push\n desiredSoftwarePackage.forEach(desired => {\n combined.push({\n desiredVersion: desired.version,\n currentVersion: reportedSoftwarePackage.find(\n sp => sp.softwarePackageCode === desired.code\n )?.softwarePackageVersion,\n id: desired.id,\n softwarePackageCode: desired.code,\n softwarePackageType: desired.type!,\n name: desired.name\n });\n });\n\n // Look over reported modules and push if not already added.\n reportedSoftwarePackage.forEach(reported => {\n !combined.some(\n sp => sp.softwarePackageCode === reported.softwarePackageCode\n ) &&\n combined.push({\n desiredVersion: desiredSoftwarePackage.find(\n sp => sp.code === reported.softwarePackageCode\n )?.version,\n currentVersion: reported.softwarePackageVersion,\n id: reported.softwarePackageId,\n softwarePackageCode: reported.softwarePackageCode,\n softwarePackageType: reported.softwarePackageType,\n name: reported.softwarePackageDisplayName\n });\n });\n\n return combined;\n};\n","import qs, { stringify } from \"query-string\";\n\nimport { AxiosInstance } from \"@bps/http-client\";\nimport { DateTime } from \"@bps/utils\";\nimport {\n AddFieldDeviceDeploymentRingRequest,\n CommandResponse,\n CustomRJSFSchema,\n DeploymentRing,\n DeploymentRingCreateRequest,\n DeploymentRingFieldDevice,\n DeploymentRingUpdateRequest,\n DeviceCommand,\n DeviceConfigurationDiff,\n FieldDevice,\n FieldDeviceAuthAction,\n FieldDeviceAuthActionRequest,\n FieldDeviceAuthActionResponse,\n FieldDeviceClaim,\n FieldDeviceClaimDto,\n FieldDeviceConfiguration,\n FieldDeviceDeploymentRingDetail,\n FieldDeviceDetails,\n FieldDeviceDetailsDto,\n FieldDeviceDto,\n FieldDeviceFilterArgs,\n FieldDeviceIdentifier,\n FieldDeviceIdentifierDto,\n FieldDeviceProperty,\n FieldDevicePropertyDto,\n FieldDeviceReportedConfig,\n FieldDeviceReportedConfigDto,\n Rollout,\n RolloutCreateRequest,\n RolloutPackage,\n RolloutPackageArgs,\n RolloutPackageCreateRequest,\n RolloutPackageDesiredConfig,\n RolloutPackageDesiredConfigArgs,\n RolloutPackageDesiredConfigCreateRequest,\n RolloutPackageDesiredConfigUpdateRequest,\n RolloutPackageUpdateRequest,\n RolloutUpdateRequest,\n SelectorArgs,\n SelectorCreateRequest,\n SelectorDto,\n SoftwarePackage,\n SoftwarePackageArgs,\n SoftwarePackageDefault,\n SoftwarePackageDefaultRequest,\n SoftwarePackageLog,\n SoftwarePackageLogArgs,\n SoftwarePackageLogDto,\n SoftwarePackageVersion,\n SoftwarePackageVersionArgs,\n SoftwarePackageVersionConfig,\n SoftwarePackageVersionConfigArgs,\n SoftwarePublisher\n} from \"@libs/api/gateways/field/field-ops-gateway.dtos\";\nimport { IFieldOpsGateway } from \"@libs/api/gateways/field/field-ops-gateway.interface\";\nimport { mapFieldDeviceIdentifierDtoToIdentifier } from \"@libs/api/gateways/field/field-ops-gateway.utils\";\nimport {\n mapRolloutFromDto,\n RolloutArgsDto,\n RolloutDto\n} from \"@libs/api/gateways/plt/plt-gateway.dtos\";\nimport { RefDataDto, RefDataResponse } from \"@libs/api/types/common-dtos\";\nimport { guid } from \"@libs/common/guid\";\nimport { PagingResponse } from \"@libs/paging/paging-response.type\";\nimport { withPaging } from \"@libs/paging/paging.utils\";\n\nimport {\n MIN_PAGE_ITEMS,\n PAGING_PAGE_NUMBER,\n PAGING_TOTAL_COUNT,\n PAGING_TOTAL_PAGES\n} from \"../../types/headers.constants\";\n\nexport class FieldOpsGateway implements IFieldOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n async getDevices(\n filterArgs?: FieldDeviceFilterArgs,\n pageParam = 1\n ): Promise> {\n const queryString = withPaging({\n ...filterArgs,\n page: pageParam,\n limit: MIN_PAGE_ITEMS\n });\n\n const response = await this.api.get(`/devices?${stringify(queryString)}`);\n\n const isMaxPages =\n +response.headers[PAGING_PAGE_NUMBER] >=\n +response.headers[PAGING_TOTAL_PAGES];\n\n const total = response.headers[PAGING_TOTAL_COUNT];\n\n const data: PagingResponse = {\n results:\n response.data !== \"\" && response.data !== undefined // Data is empty string when no results\n ? response?.data?.map(details => ({\n ...details,\n tokenExpiryUtc: details.tokenExpiryUtc\n ? DateTime.fromISO(details.tokenExpiryUtc)\n : null,\n controllerCreatedDateTimeUtc: details.controllerCreatedDateTimeUtc\n ? DateTime.fromISO(details.controllerCreatedDateTimeUtc)\n : null,\n controllerStartDateTimeUtc: details.controllerStartDateTimeUtc\n ? DateTime.fromISO(details.controllerStartDateTimeUtc)\n : null,\n controllerLastObservedDateTimeUtc: details.controllerLastObservedDateTimeUtc\n ? DateTime.fromISO(details.controllerLastObservedDateTimeUtc)\n : null,\n recoveryAgentCreatedDateTimeUtc: details.recoveryAgentCreatedDateTimeUtc\n ? DateTime.fromISO(details.recoveryAgentCreatedDateTimeUtc)\n : null,\n recoveryAgentStartDateTimeUtc: details.recoveryAgentStartDateTimeUtc\n ? DateTime.fromISO(details.recoveryAgentStartDateTimeUtc)\n : null,\n recoveryAgentLastObservedDateTimeUtc: details.recoveryAgentLastObservedDateTimeUtc\n ? DateTime.fromISO(details.recoveryAgentLastObservedDateTimeUtc)\n : null\n }))\n : null,\n next: isMaxPages ? undefined : pageParam + 1,\n total: total ? +total : undefined\n };\n\n return data;\n }\n\n async getDeviceDetails(fieldDeviceId: guid): Promise {\n const url = qs.stringifyUrl({\n url: `devices/${fieldDeviceId}/details`,\n query: {\n fieldDeviceId\n }\n });\n\n const { data } = await this.api.get(url);\n\n return {\n ...data,\n tokenExpiryUtc: data.tokenExpiryUtc\n ? DateTime.fromISO(data.tokenExpiryUtc)\n : undefined,\n controllerCreatedDateTimeUtc: data.controllerCreatedDateTimeUtc\n ? DateTime.fromISO(data.controllerCreatedDateTimeUtc)\n : undefined,\n controllerStartDateTimeUtc: data.controllerStartDateTimeUtc\n ? DateTime.fromISO(data.controllerStartDateTimeUtc)\n : undefined,\n controllerLastObservedDateTimeUtc: data.controllerLastObservedDateTimeUtc\n ? DateTime.fromISO(data.controllerLastObservedDateTimeUtc)\n : undefined,\n recoveryAgentCreatedDateTimeUtc: data.recoveryAgentCreatedDateTimeUtc\n ? DateTime.fromISO(data.recoveryAgentCreatedDateTimeUtc)\n : undefined,\n recoveryAgentStartDateTimeUtc: data.recoveryAgentStartDateTimeUtc\n ? DateTime.fromISO(data.recoveryAgentStartDateTimeUtc)\n : undefined,\n recoveryAgentLastObservedDateTimeUtc: data.recoveryAgentLastObservedDateTimeUtc\n ? DateTime.fromISO(data.recoveryAgentLastObservedDateTimeUtc)\n : undefined\n };\n }\n\n async getDevice(fieldDeviceId: guid): Promise {\n const { data } = await this.api.get(\n `devices/${fieldDeviceId}`\n );\n\n return {\n ...data,\n issueTimeUtc: data.issueTimeUtc\n ? DateTime.fromISO(data.issueTimeUtc)\n : undefined,\n notBeforeTimeUtc: data.notBeforeTimeUtc\n ? DateTime.fromISO(data.notBeforeTimeUtc)\n : undefined,\n tokenExpiryUtc: data.tokenExpiryUtc\n ? DateTime.fromISO(data.tokenExpiryUtc)\n : undefined,\n changeLog: {\n ...data.changeLog,\n createdDate: data.changeLog.createdDate\n ? DateTime.fromISO(data.changeLog.createdDate)\n : undefined,\n updatedDate: data.changeLog.updatedDate\n ? DateTime.fromISO(data.changeLog.updatedDate)\n : undefined\n }\n };\n }\n\n async getDeviceLogs(\n args?: SoftwarePackageLogArgs,\n pageParam = 1\n ): Promise> {\n const queryString = withPaging({\n ...args,\n page: pageParam,\n limit: MIN_PAGE_ITEMS\n });\n\n const response = await this.api.get(\n `/deviceLog/GetByArgs?${stringify(queryString)}`\n );\n\n const isMaxPages =\n +response.headers[PAGING_PAGE_NUMBER] >=\n +response.headers[PAGING_TOTAL_PAGES];\n\n const total = response.headers[PAGING_TOTAL_COUNT];\n\n const data: PagingResponse = {\n results: response?.data?.map(details => ({\n ...details,\n blobLastModifiedDate: details.blobLastModifiedDate\n ? DateTime.fromISO(details.blobLastModifiedDate)\n : undefined,\n blobCreationDate: details.blobCreationDate\n ? DateTime.fromISO(details.blobCreationDate)\n : undefined\n })),\n next: isMaxPages ? undefined : pageParam + 1,\n total: total ? +total : undefined\n };\n\n return data;\n }\n\n async postDeploymentRing({\n code,\n description,\n displayName,\n isPublic\n }: DeploymentRingCreateRequest): Promise {\n // Create a Deployment Ring\n const { data } = await this.api.post(\"deploymentRings\", {\n code,\n description,\n displayName,\n isPublic\n });\n return data;\n }\n\n async getDeploymentRings(): Promise {\n // Get Deployment Rings\n const { data } = await this.api.get(\"deploymentRings\");\n\n return data;\n }\n\n async getDeploymentRing(deploymentRingId: string): Promise {\n // Get Deployment Ring\n const { data } = await this.api.get(\n `deploymentRings/${deploymentRingId}`\n );\n\n return data;\n }\n\n async deleteDeploymentRings(deploymentRingId: guid): Promise {\n // Delete Deployment Rings\n const url = qs.stringifyUrl({\n url: `deploymentRings/${deploymentRingId}`\n });\n\n const { data } = await this.api.delete(url);\n return data;\n }\n\n async updateDeploymentRings({\n code,\n description,\n displayName,\n isPublic,\n deploymentRingId,\n selectorId,\n eTag\n }: DeploymentRingUpdateRequest): Promise {\n // Update Deployment Rings\n const url = qs.stringifyUrl({\n url: `deploymentRings/${deploymentRingId}`\n });\n\n const { data } = await this.api.put(url, {\n code,\n description,\n displayName,\n isPublic,\n selectorId,\n eTag\n });\n return data;\n }\n\n async getRollouts(deploymentRingId?: string): Promise {\n const rolloutArgsDto: RolloutArgsDto = {\n deploymentRingId\n };\n\n const { data } = await this.api.get(\n `/rollouts?${stringify(rolloutArgsDto)}`\n );\n\n return !!data ? data.map(mapRolloutFromDto) : [];\n }\n\n async getRollout(rolloutId?: string): Promise {\n const { data } = await this.api.get(`/rollouts/${rolloutId}`);\n return mapRolloutFromDto(data);\n }\n\n async postRollout(request: RolloutCreateRequest): Promise {\n // Create a Rollout\n const { data } = await this.api.post(\"rollouts\", request);\n return mapRolloutFromDto(data);\n }\n\n async updateRollout(request: RolloutUpdateRequest): Promise {\n // Update a Rollout\n const { data } = await this.api.put(\n `rollouts/${request.id}`,\n request\n );\n\n return mapRolloutFromDto(data);\n }\n\n async deleteRollout(rolloutId: guid): Promise {\n // Delete Rollout\n const url = qs.stringifyUrl({\n url: `rollouts/${rolloutId}`\n });\n\n const { data } = await this.api.delete(url);\n return data;\n }\n\n async getRolloutPackages(rolloutId: string): Promise {\n const rolloutPackageArgs: RolloutPackageArgs = {\n rolloutId\n };\n\n const { data } = await this.api.get(\n `/rolloutPackage?${stringify(rolloutPackageArgs)}`\n );\n\n return data;\n }\n\n async updateRolloutPackage(\n request: RolloutPackageUpdateRequest\n ): Promise {\n // Update a Rollout Device Configuration\n const { data } = await this.api.put(\n `rolloutPackage/${request.id}`,\n request\n );\n\n return data;\n }\n\n async postRolloutPackage(\n request: RolloutPackageCreateRequest\n ): Promise {\n // Create a Rollout Device Configuration\n const { data } = await this.api.post(\n \"rolloutPackage\",\n request\n );\n\n return data;\n }\n\n async deleteRolloutPackage(rolloutPackageId: string): Promise {\n // Delete Rollout Device Configuration\n await this.api.delete(`rolloutPackage/${rolloutPackageId}`);\n }\n\n async getRolloutPackageDesiredConfigs(\n rolloutPackageId: string\n ): Promise {\n const rolloutPackageDesiredConfigArgs: RolloutPackageDesiredConfigArgs = {\n rolloutPackageId\n };\n\n const { data } = await this.api.get(\n `/rolloutPackageDesiredConfig?${stringify(\n rolloutPackageDesiredConfigArgs\n )}`\n );\n\n return !!data ? data : [];\n }\n\n async createRolloutPackageDesiredConfig(\n request: RolloutPackageDesiredConfigCreateRequest\n ): Promise {\n // Create a Rollout Package Desired Config\n const { data } = await this.api.post(\n \"rolloutPackageDesiredConfig\",\n request\n );\n\n return data;\n }\n\n async updateRolloutPackageDesiredConfig(\n request: RolloutPackageDesiredConfigUpdateRequest\n ): Promise {\n // Update a Rollout Package Desired Config\n const { data } = await this.api.put(\n `rolloutPackageDesiredConfig/${request.id}`,\n request\n );\n\n return data;\n }\n\n async deleteRolloutPackageDesiredConfig(\n rolloutPackageDesiredConfigId: string\n ): Promise {\n // Delete a Rollout Package Desired Config\n await this.api.delete(\n `rolloutPackageDesiredConfig/${rolloutPackageDesiredConfigId}`\n );\n }\n\n async getDeviceIdentifiers(\n fieldDeviceId: guid\n ): Promise {\n // Get Field Device Identifiers\n const url = qs.stringifyUrl({\n url: `identifiers/${fieldDeviceId}`\n });\n\n const { data } = await this.api.get(url);\n return data.map(mapFieldDeviceIdentifierDtoToIdentifier);\n }\n\n async getMostRecentDeviceIdentifierHistory(\n fieldDeviceId: guid\n ): Promise {\n // Get Field Device Identifiers\n const url = qs.stringifyUrl({\n url: `identifiers/${fieldDeviceId}/history/recent`\n });\n\n const { data } = await this.api.get(url);\n return data.map(mapFieldDeviceIdentifierDtoToIdentifier);\n }\n\n async getDeviceIdentifierHistory(\n fieldDeviceId: guid,\n identifierType: string\n ): Promise {\n // Get Field Device Identifier History\n const url = qs.stringifyUrl({\n url: `identifiers/${fieldDeviceId}/${identifierType}/history`\n });\n\n const { data } = await this.api.get(url);\n return data.map(mapFieldDeviceIdentifierDtoToIdentifier);\n }\n\n async getMostRecentDevicePropertyHistory(\n fieldDeviceId: guid\n ): Promise {\n // Get Field Device Properties\n const url = qs.stringifyUrl({\n url: `properties/${fieldDeviceId}/history/recent`\n });\n\n const { data } = await this.api.get(url);\n return data.map(property => {\n return {\n ...property,\n lastObservedUtc: property.lastObservedUtc\n ? DateTime.fromISO(property.lastObservedUtc)\n : undefined,\n prevObservedUtc: property.prevObservedUtc\n ? DateTime.fromISO(property.prevObservedUtc)\n : undefined,\n firstObservedUtc: property.firstObservedUtc\n ? DateTime.fromISO(property.firstObservedUtc)\n : undefined\n };\n });\n }\n\n async getDeviceClaims(fieldDeviceId: guid): Promise {\n // Get Field Device Claims\n const url = qs.stringifyUrl({\n url: `devices/fieldDevice/${fieldDeviceId}/claims`\n });\n\n const { data } = await this.api.get(url);\n return data?.map(claim => ({\n ...claim,\n changeLog: {\n ...claim.changeLog,\n createdDate: claim.changeLog?.createdDate\n ? DateTime.fromISO(claim.changeLog?.createdDate)\n : undefined,\n updatedDate: claim.changeLog?.updatedDate\n ? DateTime.fromISO(claim.changeLog?.updatedDate)\n : undefined\n }\n }));\n }\n\n async getFieldDeviceDesiredConfig(\n fieldDeviceId: string\n ): Promise {\n // Get Field Device Desired Config\n const url = qs.stringifyUrl({\n url: `devices/${fieldDeviceId}/desiredConfig`\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getSoftwarePackgeCommandJson(\n softwarePackageVersionId?: string\n ): Promise {\n // Get Software Package Command Json\n const url = qs.stringifyUrl({\n url: `softwarePackageVersions/${softwarePackageVersionId}/commands`\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getDeviceConfigurationDiff(\n fieldDeviceId: string\n ): Promise {\n // Get Device Configuration Diff\n const url = qs.stringifyUrl({\n url: `deviceConfigurationDiff/${fieldDeviceId}`\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getSoftwarePackages(\n args?: SoftwarePackageArgs\n ): Promise {\n // Get Software Packages\n const url = qs.stringifyUrl({\n url: \"softwarePackage\",\n query: { ...args }\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getSelectors(args?: SelectorArgs): Promise {\n // Get Selectors\n const url = qs.stringifyUrl({\n url: \"selectors\",\n query: { ...args }\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getSelector(selectorId: string): Promise {\n const { data } = await this.api.get(`selectors/${selectorId}`);\n return data;\n }\n\n async postSelector(request: SelectorCreateRequest): Promise {\n const { data } = await this.api.post(\"selectors\", request);\n return data;\n }\n\n async putSelector(selector: SelectorDto): Promise {\n const { data } = await this.api.put(\n `selectors/${selector.id}`,\n selector\n );\n return data;\n }\n\n async updateSelectorDeviceCount(selector: SelectorDto): Promise {\n const { data } = await this.api.put(\n `selectors/${selector.id}/deviceCount`,\n selector\n );\n return data;\n }\n\n async getSoftwarePublishers(): Promise {\n // Get Software Publishers\n const { data } = await this.api.get(\n \"/softwarePublishers\"\n );\n\n return data;\n }\n\n async getSoftwarePackageVersions(\n args?: SoftwarePackageVersionArgs\n ): Promise {\n // Get Software Package Versions\n const queryString = withPaging({\n ...args,\n page: 1,\n limit: 200\n });\n\n const { data } = await this.api.get(\n `/softwarePackageVersions?${stringify(queryString)}`\n );\n\n return data;\n }\n\n async getSoftwarePackageVersionsForRollout(\n rolloutId: string\n ): Promise {\n // Get Software Package Versions for Rollout\n const { data } = await this.api.get(\n `/softwarePackageVersions/${rolloutId}`\n );\n\n return data;\n }\n\n async getSoftwarePackageVersionConfig(\n softwarePackageVersionId: string\n ): Promise {\n const softwarePackageVersionConfigArgs: SoftwarePackageVersionConfigArgs = {\n softwarePackageVersionId\n };\n\n const { data } = await this.api.get(\n `/softwarePackageVersionConfig?${stringify(\n softwarePackageVersionConfigArgs\n )}`\n );\n\n return !!data ? data : [];\n }\n\n async getSoftwarePackageDefaults(): Promise {\n // Get Software Package Defaults\n const url = qs.stringifyUrl({\n url: \"softwarePackageDefaults\"\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async updateSoftwarePackageDefault(\n request: SoftwarePackageDefault\n ): Promise {\n return (\n await this.api.put(\n `softwarePackageDefaults/${request.id}`,\n request\n )\n ).data;\n }\n\n async postSoftwarePackageDefault(\n request: SoftwarePackageDefaultRequest\n ): Promise {\n const { data } = await this.api.post(\n \"softwarePackageDefaults\",\n request\n );\n\n return data;\n }\n\n async regenerateSoftwarePackageDefaultConfig(): Promise {\n await this.api.post(\"softwarePackageDefaults/regenerate\");\n }\n\n async purgeFieldmanCDN(): Promise {\n await this.api.get(\"CDN/purge\");\n }\n\n async clearDeviceFieldConfigurationCache(\n fieldDeviceId: string\n ): Promise {\n await this.api.post(`devices/${fieldDeviceId}/clearConfigCache`);\n }\n\n async getFieldDeviceAuthActions(\n fieldDeviceId: string,\n showExecuted: boolean\n ): Promise {\n // Get Auth Actions\n const url = qs.stringifyUrl({\n url: \"fieldDeviceAuthAction\",\n query: {\n fieldDeviceId,\n isExecuted: showExecuted === false ? false : undefined\n }\n });\n\n const { data } = await this.api.get(url);\n\n if (!data) {\n return undefined;\n }\n\n return data?.map(authAction => ({\n ...authAction,\n runDate: authAction.runDate\n ? DateTime.fromISO(authAction.runDate)\n : undefined,\n changeLog: {\n ...authAction.changeLog,\n createdDate: authAction.changeLog.createdDate\n ? DateTime.fromISO(authAction.changeLog.createdDate)\n : undefined,\n updatedDate: authAction.changeLog.updatedDate\n ? DateTime.fromISO(authAction.changeLog.updatedDate)\n : undefined\n }\n }));\n }\n\n async postFieldDeviceAuthActions(\n request: FieldDeviceAuthActionRequest\n ): Promise {\n // Post Auth Actions\n const url = qs.stringifyUrl({\n url: \"fieldDeviceAuthAction\"\n });\n\n const { data } = await this.api.post(\n url,\n request\n );\n\n return {\n ...data,\n runDate: data.runDate ? DateTime.fromISO(data.runDate) : undefined,\n changeLog: {\n ...data.changeLog,\n createdDate: data.changeLog.createdDate\n ? DateTime.fromISO(data.changeLog.createdDate)\n : undefined,\n updatedDate: data.changeLog.updatedDate\n ? DateTime.fromISO(data.changeLog.updatedDate)\n : undefined\n }\n };\n }\n\n async updateFieldDeviceAuthActions(\n request: FieldDeviceAuthAction\n ): Promise {\n // Update Auth Action\n const { data } = await this.api.put(\n `fieldDeviceAuthAction/${request.id}`,\n request\n );\n return data;\n }\n\n async deleteFieldDeviceAuthActions(authActionId: string): Promise {\n // Delete Auth Action\n await this.api.delete(`fieldDeviceAuthAction/${authActionId}`);\n }\n\n async getAuthActionRefData(): Promise {\n // Get Auth Actions\n const url = qs.stringifyUrl({\n url: \"ref/AuthActionTypes\"\n });\n\n const { data } = await this.api.get(url);\n\n return data?.map(refData => ({\n ...refData,\n changeLog: {\n ...refData.changeLog,\n createdDate: refData.changeLog.createdDate\n ? DateTime.fromISO(refData.changeLog.createdDate)\n : undefined,\n updatedDate: refData.changeLog.updatedDate\n ? DateTime.fromISO(refData.changeLog.updatedDate)\n : undefined\n }\n }));\n }\n\n async getSelectorDataTypeRefData(): Promise {\n // Get Auth Actions\n const url = qs.stringifyUrl({\n url: \"ref/selectorRuleDataType\"\n });\n\n const { data } = await this.api.get(url);\n\n return data?.map(refData => ({\n ...refData,\n changeLog: {\n ...refData.changeLog,\n createdDate: refData.changeLog.createdDate\n ? DateTime.fromISO(refData.changeLog.createdDate)\n : undefined,\n updatedDate: refData.changeLog.updatedDate\n ? DateTime.fromISO(refData.changeLog.updatedDate)\n : undefined\n }\n }));\n }\n\n async getFieldDeviceDeploymentRingDetails(\n fieldDeviceId?: string,\n deploymentRingId?: string\n ): Promise {\n // Get Field Device Deployment Ring Details\n const url = qs.stringifyUrl({\n url: \"deploymentRingFieldDevice/details\",\n query: {\n fieldDeviceId,\n deploymentRingId\n }\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getFieldDeviceReportedConfig(\n fieldDeviceId: string\n ): Promise {\n // Get Field Device reported config\n const url = qs.stringifyUrl({\n url: `devices/${fieldDeviceId}/reportedConfig`\n });\n\n const { data } = await this.api.get(url);\n\n return data?.map(\n config =>\n ({\n ...config,\n createdDateTimeUtc: config.createdDateTimeUtc\n ? DateTime.fromISO(config.createdDateTimeUtc)\n : undefined,\n startDateTimeUtc: config.startDateTimeUtc\n ? DateTime.fromISO(config.startDateTimeUtc)\n : undefined,\n lastObservedDateTimeUtc: config.lastObservedDateTimeUtc\n ? DateTime.fromISO(config.lastObservedDateTimeUtc)\n : undefined\n } as FieldDeviceReportedConfig)\n );\n }\n\n async postFieldDeviceDeploymentRing(\n request: AddFieldDeviceDeploymentRingRequest\n ): Promise {\n // Create a link between the Field Device and a Deployment Ring\n const { data } = await this.api.post(\n \"deploymentRingFieldDevice\",\n request\n );\n return data;\n }\n\n async deleteFieldDeviceDeploymentRing(\n deploymentRingFieldDeviceId: string\n ): Promise {\n // Delete Field Device Deployment Ring link\n await this.api.delete(\n `deploymentRingFieldDevice/${deploymentRingFieldDeviceId}`\n );\n }\n\n async updateFieldDeviceDeploymentRing(\n request: DeploymentRingFieldDevice\n ): Promise {\n // Update the Field Device Deployment Ring\n const url = qs.stringifyUrl({\n url: `deploymentRingFieldDevice/${request.id}`\n });\n\n const { data } = await this.api.put(\n url,\n request\n );\n return data;\n }\n\n async dispatchDeviceCommand(\n request: DeviceCommand\n ): Promise {\n const { data } = await this.api.post(\n \"fieldGateway/command/dispatch\",\n request\n );\n\n return data;\n }\n}\n","import { AxiosInstance } from \"@bps/http-client\";\nimport { stringify } from \"query-string\";\n\nimport { GetRolesArgs, IEnvGateway } from \"./env-gateway.inferface\";\nimport { AadUser, EnvRoleDto, EnvUser, NewEnvUser } from \"./env-gateway.dtos\";\n\nexport class EnvGateway implements IEnvGateway {\n constructor(private api: AxiosInstance) {}\n\n getCurrentUser = async (): Promise => {\n const { data } = await this.api.get(\"users/me\");\n return data;\n };\n\n getUsers = async (): Promise => {\n const { data } = await this.api.get(\"users\");\n return data;\n };\n\n searchUsers = async (name: string): Promise => {\n const { data } = await this.api.get(`users/search?name=${name}`);\n return data;\n };\n\n updateUser = async (newUser: NewEnvUser): Promise => {\n const { data } = await this.api.put(`users/${newUser.id}`, newUser);\n return data;\n };\n\n createUser = async (user: EnvUser): Promise => {\n const { data } = await this.api.post(\"users\", user);\n return data;\n };\n\n getRoles = async (args?: GetRolesArgs): Promise => {\n const query = args\n ? `?${stringify({ isInactive: args.isInactive, roles: args.roles })}`\n : \"\";\n return (await this.api.get(`roles${query}`)).data;\n };\n\n getAllRoles = async (): Promise => {\n return (await this.api.get(\"roles/all\")).data;\n };\n}\n","import { AxiosInstance } from \"@bps/http-client\";\nimport { guid } from \"@libs/common/guid\";\nimport qs from \"query-string\";\n\nimport { DateTime } from \"@bps/utils\";\nimport { IBestHealthOpsGateway } from \"@libs/api/gateways/best-health/practice/best-health-ops-gateway.interface\";\nimport {\n AppointmentStats,\n AppointmentStatsDto,\n EntitySequence,\n LocationAppointmentStats,\n LocationAppointmentStatsDto,\n PracticeLocation,\n PracticeLocationDto,\n PracticeLocationUpdate,\n Provider,\n ProviderDto\n} from \"@libs/api/gateways/best-health/practice/best-health-ops-gateway.dtos\";\nimport { EntitySequenceDto } from \"@libs/api/gateways/tg/model/EntitySyncState\";\n\nexport class BestHealthOpsGateway implements IBestHealthOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n public async getPracticeLocations(\n tenantId: guid\n ): Promise {\n const { data } = await this.api.get(\n `/location/${tenantId}`\n );\n\n return data.map(({ onlineBookingsEnabled, providers, ...rest }) => ({\n ...rest,\n\n bookingSettings: {\n enabled: !!onlineBookingsEnabled\n },\n providers:\n providers?.map(provider => ({\n ...provider,\n firstAvailable: provider.firstAvailable\n ? DateTime.fromISO(provider.firstAvailable)\n : undefined,\n lastAvailable: provider.lastAvailable\n ? DateTime.fromISO(provider.lastAvailable)\n : undefined\n })) || []\n }));\n }\n\n public async putPracticeLocation(\n locationId: guid,\n updates: PracticeLocationUpdate\n ): Promise {\n const { data } = await this.api.put(\n `/location/${locationId}`,\n updates\n );\n return {\n ...data,\n bookingSettings: {\n enabled: !!data.onlineBookingsEnabled\n },\n providers:\n data.providers?.map(provider => ({\n ...provider,\n firstAvailable: provider.firstAvailable\n ? DateTime.fromISO(provider.firstAvailable)\n : undefined,\n lastAvailable: provider.lastAvailable\n ? DateTime.fromISO(provider.lastAvailable)\n : undefined\n })) || []\n };\n }\n\n public async getLocationAppointmentStats(\n tenantId: guid\n ): Promise {\n const url = qs.stringifyUrl({\n url: `/appointmentStats/${tenantId}/locations`,\n query: {\n browserTime: DateTime.now().toISO()\n }\n });\n\n const { data } = await this.api.get(url);\n\n return data.map(({ lastCreated, ...rest }) => ({\n ...rest,\n lastCreated: lastCreated ? DateTime.fromISO(lastCreated) : undefined\n }));\n }\n\n public async getAppointmentStats(tenantId: guid): Promise {\n const url = qs.stringifyUrl({\n url: `/appointmentStats/${tenantId}`,\n query: {\n browserTime: DateTime.now().toISO()\n }\n });\n\n const { data } = await this.api.get(url);\n\n const { lastCreated, ...stats } = data;\n return {\n ...stats,\n lastCreated: lastCreated ? DateTime.fromISO(lastCreated) : undefined\n };\n }\n\n public async getAllAppointmentStats(): Promise {\n const url = qs.stringifyUrl({\n url: \"/appointmentStats\",\n query: {\n browserTime: DateTime.now().toISO()\n }\n });\n\n const { data } = await this.api.get(url);\n\n return data.map(({ lastCreated, ...rest }) => ({\n ...rest,\n lastCreated: lastCreated ? DateTime.fromISO(lastCreated) : undefined\n }));\n }\n\n public async getPracticeOutage(tenantId: guid): Promise {\n const { data } = await this.api.get(\n `/tenant/PracticeOutage/${tenantId}`\n );\n return data;\n }\n\n public async putPracticeOutage(\n tenantId: guid,\n practiceOutage: boolean\n ): Promise {\n const { data } = await this.api.put(\n `/tenant/PracticeOutage/${tenantId}`,\n null,\n { params: { practiceOutage } }\n );\n return data;\n }\n\n public async getProviders(tenantId: guid): Promise {\n const { data } = await this.api.get(`/provider/${tenantId}`);\n return data.map(({ firstAvailable, lastAvailable, ...rest }) => ({\n ...rest,\n firstAvailable: firstAvailable\n ? DateTime.fromISO(firstAvailable)\n : undefined,\n lastAvailable: lastAvailable ? DateTime.fromISO(lastAvailable) : undefined\n }));\n }\n\n public async getSyncState(tenantId: guid): Promise {\n const { data } = await this.api.get(\n `/syncstate/${tenantId}`\n );\n\n return data.map(es => ({\n ...es,\n updatedDate: es.updatedDate ? DateTime.fromISO(es.updatedDate) : undefined\n }));\n }\n\n public async postTtmSnapshot(tenantId: guid) {\n const { data } = await this.api.post(\"/snapshot\", tenantId);\n return data;\n }\n public async postRecalculate(tenantId: guid) {\n const { data } = await this.api.post(\"/recalculate\", tenantId);\n return data;\n }\n}\n","import { DateTime } from \"@bps/utils\";\nimport {\n ConsumerUser,\n ConsumerUserDto\n} from \"./best-health-account-ops-gateway.dtos\";\n\nexport const convertIdentityDto = (dto: ConsumerUserDto): ConsumerUser => {\n return {\n ...dto,\n createdDateTime: dto.createdDateTime\n ? DateTime.fromISO(dto.createdDateTime)\n : undefined,\n deletedDateTime: dto.deletedDateTime\n ? DateTime.fromISO(dto.deletedDateTime)\n : undefined,\n lastPasswordChangeDateTime: dto.lastPasswordChangeDateTime\n ? DateTime.fromISO(dto.lastPasswordChangeDateTime)\n : undefined\n };\n};\n","import { AxiosInstance } from \"@bps/http-client\";\nimport { BpIdUsersSearchArgs } from \"../../bp-id/bp-id.dtos\";\n\nimport { DateTime } from \"@bps/utils\";\nimport {\n ConsumerUser,\n ConsumerUserDto,\n ConsumerUserProfile,\n ConsumerUserProfileDto,\n MobileAppSettings,\n ResultsResponse\n} from \"./best-health-account-ops-gateway.dtos\";\nimport { IBestHealthAccountOpsGateway } from \"./best-health-account-ops-gateway.interface\";\nimport { convertIdentityDto } from \"./best-health-account-ops-gateway.utils\";\n\nexport class BestHealthAccountOpsGateway\n implements IBestHealthAccountOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n public async postProfileSearch(\n searchText: string\n ): Promise> {\n const { data } = await this.api.post<\n ResultsResponse\n >(\"/user/profile/search\", undefined, {\n params: {\n searchText\n }\n });\n\n return {\n ...data,\n records:\n data?.records?.map(\n ({\n dateOfBirth,\n updatedOn,\n privacyPolicyAgreementDate,\n devices,\n dependants,\n ...rest\n }) => ({\n ...rest,\n dependants: dependants?.map(({ dOB, ...rest }) => ({\n ...rest,\n dOB: dOB ? DateTime.fromISO(dOB) : undefined\n })),\n devices: devices?.map(({ lastSeenDateTimeUtc, ...rest }) => ({\n ...rest,\n lastSeenDateTimeUtc: lastSeenDateTimeUtc\n ? DateTime.fromISO(lastSeenDateTimeUtc)\n : undefined\n })),\n dateOfBirth: dateOfBirth\n ? DateTime.fromISO(dateOfBirth)\n : undefined,\n updatedOn: updatedOn ? DateTime.fromISO(updatedOn) : undefined,\n privacyPolicyAgreementDate: updatedOn\n ? DateTime.fromISO(privacyPolicyAgreementDate)\n : undefined\n })\n ) || []\n };\n }\n\n public async getProfile(id: string): Promise {\n const { data } = await this.api.get(\n `/user/profile/${id}`\n );\n return {\n ...data,\n dependants: data.dependants?.map(({ dOB, ...rest }) => ({\n ...rest,\n dOB: dOB ? DateTime.fromISO(dOB) : undefined\n })),\n devices: data.devices?.map(({ lastSeenDateTimeUtc, ...rest }) => ({\n ...rest,\n lastSeenDateTimeUtc: lastSeenDateTimeUtc\n ? DateTime.fromISO(lastSeenDateTimeUtc)\n : undefined\n })),\n dateOfBirth: data.dateOfBirth\n ? DateTime.fromISO(data.dateOfBirth)\n : undefined,\n updatedOn: data.updatedOn ? DateTime.fromISO(data.updatedOn) : undefined,\n privacyPolicyAgreementDate: data.updatedOn\n ? DateTime.fromISO(data.privacyPolicyAgreementDate)\n : undefined\n };\n }\n\n public async getIdentity(userName: string): Promise {\n const { data } = await this.api.get(\n `/user/identity/${userName}`\n );\n return convertIdentityDto(data);\n }\n\n public async deleteUser(id: string): Promise {\n const { data } = await this.api.delete(`/user/${id}`);\n return data;\n }\n\n public async postIdentitySearch(\n values: BpIdUsersSearchArgs\n ): Promise> {\n const { data } = await this.api.post>(\n \"/user/identity/search\",\n values\n );\n return {\n ...data,\n records: data?.records?.map(convertIdentityDto) || []\n };\n }\n\n public async getMobileAppSettings(): Promise {\n const { data } = await this.api.get(\n \"bha/MobileAppSettings/\"\n );\n return data;\n }\n\n public async putMobileAppSettings(\n updates: MobileAppSettings\n ): Promise {\n const { data } = await this.api.put(\n \"bha/MobileAppSettings/\",\n updates\n );\n return data;\n }\n\n public async postMobileAppSettings(\n updates: MobileAppSettings\n ): Promise {\n const { data } = await this.api.post(\n \"bha/MobileAppSettings/\",\n updates\n );\n return data;\n }\n}\n","import { AxiosInstance } from \"@bps/http-client\";\n\nimport {\n PowerBiDataset,\n TtmReportingSnapshotOptions\n} from \"./ttm-reporting-ops-gateway.dtos\";\nimport { ITtmReportingOpsGateway } from \"./ttm-reporting-ops-gateway\";\n\nexport class TtmReportingOpsGateway implements ITtmReportingOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n async postSnapshot(\n tenantId: string,\n options?: TtmReportingSnapshotOptions\n ): Promise {\n const url = `tenants/${tenantId}/snapshot`;\n await this.api.post(url, options);\n }\n\n async postBillingSnapshot(\n tenantId: string,\n options?: TtmReportingSnapshotOptions\n ): Promise {\n const url = `tenants/${tenantId}/snapshot/billing`;\n await this.api.post(url, options);\n }\n\n async postIngestData(\n tenantId: string,\n type: string,\n options?: TtmReportingSnapshotOptions\n ): Promise {\n const url = `tenants/${tenantId}/snapshot/ingest/${type}`;\n await this.api.post(url, options);\n }\n\n async getDatasets(): Promise {\n const { data } = await this.api.get(\"datasets\");\n return data;\n }\n\n async postDatasetRefresh(datasetId: string): Promise {\n const url = `datasets/refresh/${datasetId}`;\n await this.api.post(url);\n }\n}\n","import { AxiosInstance } from \"@bps/http-client\";\n\nimport { TtmFormsRefreshOptions } from \"./ttm-forms-ops-gateway.dtos\";\nimport { ITTmFormsOpsGateway } from \"@libs/api/gateways/ttm/forms/ttm-forms-ops-gateway.interface\";\n\nexport class TtmFormsOpsGateway implements ITTmFormsOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n async requestRefresh(\n tenantId: string,\n options?: TtmFormsRefreshOptions\n ): Promise {\n const url = `tenants/${tenantId}/refreshFormDesign`;\n await this.api.post(url, options);\n }\n}\n","import { AxiosInstance } from \"@bps/http-client\";\n\nimport { PoisonMessage } from \"./ops-mon-gateway.dtos\";\nimport { IOpsMonGateway } from \"./ops-mon-gateway.interface\";\n\nexport class OpsMonGateway implements IOpsMonGateway {\n constructor(private api: AxiosInstance) {}\n\n async getPoisonMessages(): Promise {\n const { data } = await this.api.get(\"eventHubs/poisonMessages\");\n return data;\n }\n\n async skipPoisonMessage(message: PoisonMessage) {\n await this.api.post(\"eventHubs/poisonMessages/skip\", {\n source: message.source,\n partitionKey: message.partitionKey,\n rowKey: message.rowKey\n });\n }\n}\n","import { AxiosInstance } from \"@bps/http-client\";\nimport { stringify } from \"query-string\";\n\nimport { DateTime } from \"@bps/utils\";\n\nimport {\n AppointmentReminderJob,\n AppointmentReminderJobDto,\n AppointmentReminderJobRun,\n AppointmentReminderJobRunDto,\n BookingTenantSettings,\n BookingTenantSettingsDto,\n CalendarEventReminderSearchArgs,\n CalendarEventReminderSearchArgsDto,\n CalendarEventReminderSearchDto\n} from \"./ttm-booking-ops-gateway.dtos\";\nimport { ITtmBookingOpsGateway } from \"@libs/api/gateways/ttm/booking/ttm-booking-ops-gateway.interface\";\n\nexport class TtmBookingOpsGateway implements ITtmBookingOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n async getTenantSettings(tenantId: string): Promise {\n const url = `tenants/${tenantId}/settings/`;\n const { data } = await this.api.get(url);\n const { changeLog, ...dto } = data;\n\n return {\n ...dto,\n changeLog: {\n ...changeLog,\n createdDate: changeLog?.createdDate\n ? DateTime.fromISO(changeLog?.createdDate)\n : undefined,\n updatedDate: changeLog?.updatedDate\n ? DateTime.fromISO(changeLog?.updatedDate)\n : undefined\n }\n };\n }\n\n async getAppointmentReminderJobs(\n tenantId: string\n ): Promise {\n const url = `tenants/${tenantId}/appointmentReminderJobs/`;\n const { data } = await this.api.get(url);\n\n return data.map(({ changeLog, ...dto }) => ({\n ...dto,\n changeLog: {\n ...changeLog,\n createdDate: changeLog?.createdDate\n ? DateTime.fromISO(changeLog?.createdDate)\n : undefined,\n updatedDate: changeLog?.updatedDate\n ? DateTime.fromISO(changeLog?.updatedDate)\n : undefined\n }\n }));\n }\n\n async getAppointmentReminderJobRuns(\n tenantId: string,\n jobId: string\n ): Promise {\n const url = `tenants/${tenantId}/appointmentReminderJobs/${jobId}/runSummaries`;\n const { data } = await this.api.get(url);\n\n return data.map(({ changeLog, ...dto }) => ({\n ...dto,\n changeLog: {\n ...changeLog,\n createdDate: changeLog?.createdDate\n ? DateTime.fromISO(changeLog?.createdDate)\n : undefined,\n updatedDate: changeLog?.updatedDate\n ? DateTime.fromISO(changeLog?.updatedDate)\n : undefined\n }\n }));\n }\n\n async getCalendarEventRemindersBySearchArgs(\n tenantId: string,\n searchArgs: CalendarEventReminderSearchArgs\n ): Promise {\n const searchArgsDto: CalendarEventReminderSearchArgsDto = {\n ...searchArgs,\n startDateTime: searchArgs?.startDateTime\n ? DateTime.fromJSDate(searchArgs?.startDateTime).toISO()\n : undefined,\n endDateTime: searchArgs?.endDateTime\n ? DateTime.fromJSDate(searchArgs?.endDateTime)\n .endOf(\"day\")\n .toISO()\n : undefined\n };\n\n const url = `tenants/${tenantId}/calendarevents/reminders?${stringify(\n searchArgsDto\n )}`;\n return this.api\n .get(url)\n .then(x => x.data);\n }\n}\n","import { DateTime } from \"@bps/utils\";\n\nimport { OutboundEmailAuditDto } from \"../plt-comms-gateway.dtos\";\n\nexport class OutboundEmailAudit {\n private dto: OutboundEmailAuditDto;\n constructor(dto: OutboundEmailAuditDto) {\n this.dto = dto;\n }\n\n get id() {\n return this.dto.id;\n }\n\n get sourceTenantId() {\n return this.dto.sourceTenantId;\n }\n\n get sourceId() {\n return this.dto.sourceId;\n }\n\n get subject() {\n return this.dto.subject;\n }\n\n get email() {\n return this.dto.to;\n }\n\n get etag() {\n return this.dto.etag;\n }\n\n get createdDate(): DateTime | undefined {\n return this.dto.changeLog.createdDate\n ? DateTime.fromISO(this.dto.changeLog.createdDate)\n : undefined;\n }\n}\n","import { DateTime } from \"@bps/utils\";\n\nimport { OutboundSmsAuditDto } from \"../plt-comms-gateway.dtos\";\n\nexport class OutboundSmsAudit {\n private dto: OutboundSmsAuditDto;\n constructor(dto: OutboundSmsAuditDto) {\n this.dto = dto;\n }\n\n get id() {\n return this.dto.id;\n }\n\n get outboundSmsId() {\n return this.dto.outboundSmsId;\n }\n\n get content() {\n return this.dto.content;\n }\n\n get vendorCode() {\n return this.dto.vendorCode;\n }\n\n get outboundSmsAuditType() {\n return this.dto.outboundSmsAuditType;\n }\n\n get createdDate(): DateTime | undefined {\n return this.dto.changeLog.createdDate\n ? DateTime.fromISO(this.dto.changeLog.createdDate)\n : undefined;\n }\n}\n","import { AxiosInstance } from \"@bps/http-client\";\nimport { withPaging } from \"@libs/paging/paging.utils\";\nimport qs, { stringify } from \"query-string\";\n\nimport { DateTime } from \"@bps/utils\";\n\nimport { OutboundEmailAudit } from \"./models/OutboundEmailAudit\";\nimport { OutboundSmsAudit } from \"./models/OutboundSmsAudit\";\nimport {\n AddMessageCreditsEventDto,\n CreateOutboundEmailRequestArgs,\n CreateOutboundSmsRequestArgs,\n MessageCreditsBalance,\n MessageCreditsBalanceDto,\n MessageCreditsEvent,\n MessageCreditsEventDto,\n OutboundEmailAuditArgs,\n OutboundEmailAuditDto,\n OutboundEmailRequest,\n OutboundSmsAuditArgs,\n OutboundSmsAuditDto,\n OutboundSmsRequest\n} from \"./plt-comms-gateway.dtos\";\nimport { PagingResponse } from \"@libs/paging/paging-response.type\";\nimport {\n PAGING_PAGE_NUMBER,\n PAGING_TOTAL_COUNT,\n PAGING_TOTAL_PAGES\n} from \"@libs/api/types/headers.constants\";\nimport { IPltCommsOpsGateway } from \"./plt-comms-ops-gateway.interface\";\n\nexport class PltCommsOpsGateway implements IPltCommsOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n // Message Credits Events/Balances\n getMessageCreditsBalances = async (\n tenantId: string\n ): Promise => {\n const url = qs.stringifyUrl({\n url: `tenants/${tenantId}/messageCreditsBalance`,\n query: {}\n });\n\n const { data } = await this.api.get(url);\n\n //Treat the single balance as a list of 0..1\n const asList = data ? [data] : [];\n\n return asList.map(({ changeLog, ...dto }) => ({\n ...dto,\n changeLog: {\n ...changeLog,\n createdDate: changeLog?.createdDate\n ? DateTime.fromISO(changeLog?.createdDate)\n : undefined,\n updatedDate: changeLog?.updatedDate\n ? DateTime.fromISO(changeLog?.updatedDate)\n : undefined\n }\n }));\n };\n\n getMessageCreditsEvents = async (\n tenantId: string\n // filter?: { doNotRenew?: boolean; isInactive: boolean }\n ): Promise => {\n const url = qs.stringifyUrl({\n url: `tenants/${tenantId}/messageCreditsEvents`,\n query: {}\n });\n\n const { data } = await this.api.get(url);\n\n return data.map(({ changeLog, ...dto }) => ({\n ...dto,\n changeLog: {\n ...changeLog,\n createdDate: changeLog?.createdDate\n ? DateTime.fromISO(changeLog?.createdDate)\n : undefined,\n updatedDate: changeLog?.updatedDate\n ? DateTime.fromISO(changeLog?.updatedDate)\n : undefined\n }\n }));\n };\n\n addMessageCreditsEvents = async (\n request: AddMessageCreditsEventDto\n ): Promise => {\n const { data } = await this.api.post(\n \"messageCreditsEvents\",\n request\n );\n return [data].map(({ changeLog, ...dto }) => ({\n ...dto,\n changeLog: {\n ...changeLog,\n createdDate: changeLog?.createdDate\n ? DateTime.fromISO(changeLog?.createdDate)\n : undefined,\n updatedDate: changeLog?.updatedDate\n ? DateTime.fromISO(changeLog?.updatedDate)\n : undefined\n }\n }))[0];\n };\n\n getOutboundSmsAudits = async (\n args: OutboundSmsAuditArgs,\n pageParam = 1\n ): Promise> => {\n const fromDateFilter = args?.fromDate\n ? { fromDate: DateTime.fromJSDate(args?.fromDate).toISO() }\n : undefined;\n\n const toDateFilter = args?.toDate\n ? { toDate: DateTime.fromJSDate(args?.toDate).toISO() }\n : undefined;\n\n const url = qs.stringifyUrl({\n url: \"/outboundSmsAudit\",\n query: withPaging({\n phone: args.phone,\n tenantId: args.tenantId,\n ...fromDateFilter,\n ...toDateFilter,\n page: pageParam,\n limit: 150\n })\n });\n\n const response = await this.api.get(url);\n\n const isMaxPages =\n +response.headers[PAGING_PAGE_NUMBER] >\n +response.headers[PAGING_TOTAL_PAGES];\n\n const total = response.headers[PAGING_TOTAL_COUNT];\n\n return {\n results: response.data.map(dto => new OutboundSmsAudit(dto)),\n next: isMaxPages ? undefined : 2, // Not able to increment to next page\n total: total ? +total : undefined\n };\n };\n\n getOutboundEmailAudits = async (\n args: OutboundEmailAuditArgs\n ): Promise> => {\n const queryString = withPaging({\n ...{\n searchTerm: args?.searchTerm!,\n endDate: DateTime.fromJSDate(args?.endDate!).toISO(),\n startDate: DateTime.fromJSDate(args?.startDate!).toISO()\n },\n page: 1,\n limit: 150\n });\n\n const response = await this.api.get(\n `/outboundEmail?${stringify(queryString)}`\n );\n\n const isMaxPages =\n +response.headers[PAGING_PAGE_NUMBER] >\n +response.headers[PAGING_TOTAL_PAGES];\n\n const total = response.headers[PAGING_TOTAL_COUNT];\n\n const data: PagingResponse = {\n results: response.data.map(dto => new OutboundEmailAudit(dto)),\n next: isMaxPages ? undefined : 2, // Not able to increment to next page\n total: total ? +total : undefined\n };\n\n return data;\n };\n\n createOutboundSmsRequest = async (\n args: CreateOutboundSmsRequestArgs\n ): Promise => {\n const { data } = await this.api.post(\n \"outboundSmsRequest\",\n args\n );\n return data;\n };\n\n createOutboundEmailRequest = async (\n args: CreateOutboundEmailRequestArgs\n ): Promise => {\n const { data } = await this.api.post(\n \"outboundEmailRequest\",\n args\n );\n return data;\n };\n}\n","import { AxiosInstance } from \"@bps/http-client\";\nimport { DateTime } from \"@bps/utils\";\n\nimport { ChangeLogDto } from \"../../../types/common-dtos\";\nimport { CommPreference } from \"./ttm-comms-ops-gateway.dtos\";\nimport { ITtmCommsOpsGateway } from \"./ttm-comms-ops-gateway.interface\";\n\ninterface CommPreferenceDto extends Omit {\n changeLog: ChangeLogDto;\n}\n\nexport class TtmCommsOpsGateway implements ITtmCommsOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n async getCommsPreferenes(tenantId: string): Promise {\n const url = `tenants/${tenantId}/commsPreferences/`;\n const { data } = await this.api.get(url);\n\n return data.map(({ changeLog, ...dto }) => ({\n ...dto,\n changeLog: {\n ...changeLog,\n createdDate: changeLog?.createdDate\n ? DateTime.fromISO(changeLog?.createdDate)\n : undefined,\n updatedDate: changeLog?.updatedDate\n ? DateTime.fromISO(changeLog?.updatedDate)\n : undefined\n }\n }));\n }\n}\n","import { DateTime } from \"@bps/utils\";\n\nexport interface BpMobileMaintenanceSettings {\n forceUpgradeVersionNumber?: string;\n forceUpgradeMessage?: string;\n maintenanceMode?: boolean;\n enableFieldManagement?: boolean;\n maintenanceModeMessage?: string;\n}\n\nexport interface BpMobileNotification {\n partitionKey?: string;\n rowKey?: string;\n startTime?: DateTime;\n endTime?: DateTime;\n outageMessage?: string;\n dateUtc?: string;\n}\n\nexport interface BpMobileCreateNotification {\n partitionKey?: string;\n rowKey?: string;\n startTime?: string;\n endTime?: string;\n outageMessage?: string;\n dateUtc?: string;\n}\n\nexport function mapNotificationFromDto(\n notification: BpMobileCreateNotification\n) {\n return {\n ...notification,\n startTime: DateTime.fromISO(notification?.startTime!).setZone(\"utc\"),\n endTime: DateTime.fromISO(notification.endTime!).setZone(\"utc\")\n };\n}\n","import { AxiosInstance } from \"@bps/http-client\";\n\nimport {\n BpMobileCreateNotification,\n BpMobileMaintenanceSettings,\n BpMobileNotification,\n mapNotificationFromDto\n} from \"./bp-mobile.dtos\";\nimport { IBpMobileOpsGateway } from \"./BpMobileOpsGateway.interface\";\n\nexport class BpMobileOpsGateway implements IBpMobileOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n public async getMobileAppSettings(): Promise {\n const { data } = await this.api.get(\n \"settings\"\n );\n return data;\n }\n\n public async putMobileAppSettings(\n updates: BpMobileMaintenanceSettings\n ): Promise {\n const { data } = await this.api.put(\n \"settings\",\n updates\n );\n return data;\n }\n\n public async getMobileAppNotifications(): Promise {\n const { data } = await this.api.get(\n \"notifications\"\n );\n\n const notifications = data.map(i => mapNotificationFromDto(i));\n\n return notifications;\n }\n\n public async putMobileAppNotifications(\n updates: BpMobileCreateNotification\n ): Promise {\n const { data } = await this.api.put(\n \"notifications\",\n updates\n );\n return mapNotificationFromDto(data);\n }\n\n public async deleteMobileAppNotification(\n partitionKey: string,\n rowKey: string\n ): Promise {\n await this.api.delete(`notifications/${partitionKey}/${rowKey}`);\n }\n}\n","import { AxiosInstance } from \"@bps/http-client\";\nimport {\n AddNotificationDto,\n NotificationDto\n} from \"./plt-notifications-gateway.dtos\";\nimport { IPlatformNotificationsGateway } from \"./plt-notifications-gateway.interface\";\n\nexport class PlatformNotificationsGateway\n implements IPlatformNotificationsGateway {\n constructor(private api: AxiosInstance) {}\n\n addNotification = async (\n notification: AddNotificationDto\n ): Promise => {\n const { data } = await this.api.post(\n \"notifications\",\n notification\n );\n return data;\n };\n\n batchAddNotification = async (\n notifications: AddNotificationDto[]\n ): Promise => {\n await this.api.post(\"notifications/$batch\", notifications);\n };\n}\n","import qs from \"query-string\";\n\nimport { AxiosInstance } from \"@bps/http-client\";\nimport { MIN_PAGE_ITEMS } from \"@libs/api/types/headers.constants\";\nimport { PagingTableStorageResponse } from \"@libs/paging/paging-table-storage-response.type\";\n\nimport {\n AddRedirectLinkCreatePayload,\n AddRedirectLinkDto,\n GetRedirectLinksArgs,\n RedirectLinkDto,\n RedirectLinkUsageDto,\n UpdateRedirectLinkCreatePayload\n} from \"./plt-redirect-gateway.dtos\";\nimport { IPlatformRedirectGateway } from \"./plt-redirect-gateway.interface\";\n\nexport class PlatformRedirectGateway implements IPlatformRedirectGateway {\n constructor(private api: AxiosInstance) {}\n\n getRedirectLinkUsage = async (linkId: string, redirectUrl: string) => {\n const url = qs.stringifyUrl({\n url: \"redirectLinkUsage\",\n query: { linkId, redirectUrl }\n });\n\n return (await this.api.get(url)).data;\n };\n\n getAllRedirectLinks = async () => {\n return (await this.api.get(\"redirectLink/all\")).data;\n };\n\n getRedirectLinks = async (\n args: GetRedirectLinksArgs\n ): Promise<\n PagingTableStorageResponse\n > => {\n const url = qs.stringifyUrl({\n url: \"redirectLink\",\n query: {\n ...args,\n pageLength: MIN_PAGE_ITEMS\n }\n });\n\n const data = (await this.api.get(url)).data;\n return { results: data.list, args: data.args };\n };\n\n getRedirectLink = async (linkId: string) => {\n return (await this.api.get(`redirectLink/${linkId}`)).data;\n };\n\n addRedirectLink = async (\n payload: AddRedirectLinkCreatePayload\n ): Promise => {\n return (await this.api.post(\"redirectLink/\", payload))\n .data;\n };\n\n updateRedirectLink = async (payload: UpdateRedirectLinkCreatePayload) => {\n return (await this.api.put(\"redirectLink/\", payload)).data;\n };\n\n deleteRedirectLink = async (linkId: string) => {\n return (await this.api.delete(`redirectLink/${linkId}`)).data;\n };\n}\n","import { AxiosInstance } from \"@bps/http-client\";\nimport {\n BpIdUserDto,\n BpIdUserSignInLogArgs,\n BpIdUserSignInLog,\n BpIdAuditLogArgs,\n BpIdAuditLog,\n CloudApplicationsRefDataDto,\n InvitationsArgs,\n ResultsResponse,\n BpIdUsersSearchArgs,\n UserGroupDto,\n UserGroupSearch,\n UserInviteArgs,\n UserInviteDto,\n UserInviteResponse\n} from \"./bp-id.dtos\";\nimport qs from \"query-string\";\nimport { withPaging } from \"@libs/paging/paging.utils\";\nimport { PagingTableStorageResponse } from \"@libs/paging/paging-table-storage-response.type\";\nimport { IBpIdOpsGateway } from \"./BpIdOpsGateway.interface\";\nimport { DateTime } from \"@bps/utils\";\nimport {\n MIN_PAGE_ITEMS,\n PAGING_PAGE_NUMBER,\n PAGING_TOTAL_COUNT,\n PAGING_TOTAL_PAGES\n} from \"@libs/api/types/headers.constants\";\nimport { PagingResponse } from \"@libs/paging/paging-response.type\";\n\nexport class BpIdOpsGateway implements IBpIdOpsGateway {\n constructor(private api: AxiosInstance) {}\n\n public async getUserDetails(bpIdUserId: string): Promise {\n const { data } = await this.api.get(`/users/details/${bpIdUserId}`);\n return data;\n }\n\n public async getUserSignInLogs(\n args: BpIdUserSignInLogArgs\n ): Promise<\n PagingTableStorageResponse\n > {\n const url = qs.stringifyUrl({\n url: \"users/signInLogs\",\n query: {\n userId: args.userId,\n startDate: args?.startDate\n ? DateTime.fromJSDate(args?.startDate).toISO()\n : undefined,\n endDate: args?.endDate\n ? DateTime.fromJSDate(args?.endDate)\n .endOf(\"day\")\n .toISO()\n : undefined,\n pageLength: MIN_PAGE_ITEMS,\n nextPageToken: args.nextPageToken\n }\n });\n\n const data = (await this.api.get(url)).data;\n return { results: data.list, args: data.args };\n }\n\n public async getAuditLogs(\n args: BpIdAuditLogArgs\n ): Promise> {\n const url = qs.stringifyUrl({\n url: \"users/auditLogs\",\n query: {\n startDate: args?.startDate\n ? DateTime.fromJSDate(args?.startDate).toISO()\n : undefined,\n endDate: args?.endDate\n ? DateTime.fromJSDate(args?.endDate)\n .endOf(\"day\")\n .toISO()\n : undefined,\n pageLength: MIN_PAGE_ITEMS,\n nextPageToken: args.nextPageToken\n }\n });\n\n const data = (await this.api.get(url)).data;\n return { results: data.list, args: data.args };\n }\n\n public deleteUser = (bpIdUserId: string): Promise => {\n return this.api.delete(`/users/${bpIdUserId}`);\n };\n\n public postIdentitySearch(\n values: BpIdUsersSearchArgs\n ): Promise> {\n return this.api\n .post>(\"/users/$search\", values)\n .then(({ data }) => data);\n }\n\n public async postAudit(id: string, text: string): Promise {\n return (await this.api.post(\"/audit\", { Id: id, text })).data;\n }\n\n public async getGroup(groupId: string): Promise {\n return (await this.api.get(`/groups/${groupId}`)).data;\n }\n\n public async getAllGroups(): Promise {\n return (await this.api.get(\"/groups/\")).data;\n }\n\n public async getUserGroups(userId: string): Promise {\n return (await this.api.get(`/users/${userId}/groups`)).data?.groups;\n }\n\n public async updateUserGroups(\n userId: string,\n addGroupIds: string[],\n removeGroupIds: string[]\n ): Promise {\n return (\n await this.api.put(`/users/${userId}/groups`, {\n userId,\n addGroupIds,\n removeGroupIds\n })\n ).data;\n }\n\n public async addUserToGroup(\n userId: string,\n groupId: string\n ): Promise {\n return (await this.api.post(`/groups/${groupId}/members/${userId}`)).data;\n }\n\n public async removeUserFromGroup(\n userId: string,\n groupId: string\n ): Promise {\n return (await this.api.delete(`/groups/${groupId}/members/${userId}`)).data;\n }\n\n public fetchInvitations = async (\n args?: InvitationsArgs\n ): Promise> => {\n const page = args?.pageParam ?? 1;\n\n const encodedName = btoa(args?.name ?? \"\");\n\n const url = qs.stringifyUrl({\n url: \"invites\",\n query: withPaging({\n tenantId: args?.tenantId,\n userId: args?.userId,\n encodedName,\n createdStartDate: args?.createdStartDate,\n createdEndDate: args?.createdEndDate,\n expiryStartDate: args?.expiryStartDate,\n expiryEndDate: args?.expiryEndDate,\n isExpired: args?.isExpired,\n isRedeemed: args?.isRedeemed,\n isCancelled: args?.isCancelled,\n sortField: args?.sortField,\n sortAscending: args?.sortAscending,\n page: args?.pageParam ?? 1,\n limit: args?.limit ?? MIN_PAGE_ITEMS\n })\n });\n\n const response = await this.api.get(url);\n\n const totalPages = +response.headers[PAGING_TOTAL_PAGES];\n const pageNumber = +response.headers[PAGING_PAGE_NUMBER];\n\n const isMaxPages = pageNumber >= totalPages;\n\n const total = +response.headers[PAGING_TOTAL_COUNT];\n\n return {\n results: response.data,\n next: !isMaxPages ? page + 1 : undefined,\n total,\n totalPages\n };\n };\n\n public sendUserInvite = async (\n payload: UserInviteArgs\n ): Promise => {\n return (await this.api.post(\"/invites/$sendInvite\", payload)).data;\n };\n\n public resendUserInvite = async (id: string): Promise => {\n return (await this.api.post(`/invites/${id}/$reSendInvite`)).data;\n };\n\n public cancelUserInvite = async (id: string): Promise => {\n return (await this.api.put(`/invites/${id}/$cancel`)).data;\n };\n\n public getCloudApplicationsRefData = (): Promise<\n CloudApplicationsRefDataDto[]\n > => {\n return this.api.get(\"ref/cloudApplications\").then(({ data }) => data);\n };\n\n public logoutAllSessions = (bpIdUserId: string): Promise => {\n return this.api\n .get(`/users/logoutAllSessions/${bpIdUserId}`)\n .then(({ data }) => data);\n };\n\n public userRemoveTenant = (\n tenantId: string,\n userId: string\n ): Promise => {\n return this.api\n .put(`/users/remove/tenant/${tenantId}/${userId}`)\n .then(({ data }) => data);\n };\n}\n","import { CustomerAccount, CustomerAccountDto } from \"./cam-gateway.dtos\";\n\nexport const toCustomerAccount = (dto: CustomerAccountDto): CustomerAccount => {\n return {\n id: dto.id!,\n crmId: dto.crmId,\n tenantName: dto.tenantName,\n businessName: dto.businessName ?? \"\",\n customerTenantId: dto.customerTenantId,\n customerTenantCrmId: dto.customerTenantCrmId,\n headOfficeId: dto.headOfficeId,\n headOfficeBusinessName: dto.headOfficeBusinessName,\n headOfficeCrmId: dto.headOfficeCrmId,\n billingClientId: dto.billingClientId,\n billingClientBusinessName: dto.billingClientBusinessName,\n billingClientCrmId: dto.billingClientCrmId,\n email1: dto.email_1,\n email2: dto.email_2,\n contactName: dto.contact_name,\n addressLine1: dto.address_line1,\n addressLine2: dto.address_line2,\n addressLine3: dto.address_line3,\n city: dto.city,\n state: dto.state,\n postcode: dto.postcode,\n country: dto.country ?? \"\",\n existsInCrm: dto.existsInCrm ?? false,\n tenants: [],\n caTenants: []\n };\n};\n","import { AxiosInstance } from \"@bps/http-client\";\nimport qs from \"query-string\";\n\nimport {\n CustomerAccount,\n CustomerAccountDto,\n CustomerAccountSearchArgs,\n CustomerAccountUser,\n CustomerAccountUserCreateArgs,\n CustomerAccountUserDto,\n ServiceAgreementDto,\n ServiceAgreementsArgs\n} from \"./cam-gateway.dtos\";\nimport { toCustomerAccount } from \"./cam-gateway.utils\";\nimport { PltUser, Tenant } from \"@libs/api/gateways/plt/plt-gateway.dtos\";\nimport { ICamGateway } from \"@libs/api/gateways/cam/cam-gateway.interface\";\n\nexport class CamGateway implements ICamGateway {\n constructor(private api: AxiosInstance) {}\n\n createCustomerAccountUser = async (\n args: CustomerAccountUserCreateArgs\n ): Promise => {\n const { data } = await this.api.post(\"users\", args);\n\n return {\n tenantUserId: data?.userId,\n tenantId: data?.tenantId,\n firstName: data?.firstName,\n lastName: data?.lastName,\n bpIdUserId: data?.bpIdUserId\n };\n };\n\n async getCustomerAccounts(\n args: CustomerAccountSearchArgs\n ): Promise {\n const { data } = await this.api.post(\n \"account/search\",\n args\n );\n\n return data.map(toCustomerAccount);\n }\n\n async getCustomerAccount(crmId: string): Promise {\n const url = qs.stringifyUrl({\n url: `account/${crmId}`\n });\n\n const { data } = await this.api.get(url);\n\n const { ...dto } = data;\n return toCustomerAccount(dto);\n }\n\n async getCustomerAccountUsers(crmId: string): Promise {\n const url = qs.stringifyUrl({\n url: \"account/users\",\n query: { crmId }\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getAllCustomerAccountUsers(\n crmId: string\n ): Promise {\n const url = qs.stringifyUrl({\n url: \"users/all\",\n query: { crmId }\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async createCustomerAccount(\n crmId: string,\n businessName?: string\n ): Promise {\n const url = qs.stringifyUrl({\n url: \"account\",\n query: {\n crmId,\n name: businessName\n }\n });\n\n const { data: dto } = await this.api.post(url);\n\n return {\n id: dto.id!,\n crmId: dto.crmId,\n tenantName: dto.tenantName ?? \"\",\n businessName: dto.businessName ?? \"\",\n customerTenantId: dto.customerTenantId,\n customerTenantCrmId: dto.customerTenantCrmId,\n headOfficeId: dto.headOfficeId,\n headOfficeBusinessName: dto.headOfficeBusinessName,\n headOfficeCrmId: dto.headOfficeCrmId,\n billingClientId: dto.billingClientId,\n billingClientBusinessName: dto.billingClientBusinessName,\n billingClientCrmId: dto.billingClientCrmId,\n email1: dto.email_1,\n email2: dto.email_2,\n contactName: dto.contact_name,\n addressLine1: dto.address_line1,\n addressLine2: dto.address_line2,\n addressLine3: dto.address_line3,\n city: dto.city,\n state: dto.state,\n postcode: dto.postcode,\n country: dto.country ?? \"\",\n existsInCrm: dto.existsInCrm ?? false,\n tenants: [],\n caTenants: []\n };\n }\n\n async getServiceAgreements(\n args: ServiceAgreementsArgs\n ): Promise {\n const url = qs.stringifyUrl({\n url: \"serviceAgreement\",\n query: { ...args }\n });\n\n return (await this.api.get(url)).data;\n }\n\n async resetCustomerAccount(tenantId: string): Promise {\n const url = qs.stringifyUrl({\n url: `customers/${tenantId}/reset`\n });\n\n const { data } = await this.api.put(url);\n\n return data;\n }\n}\n","import qs from \"query-string\";\n\nimport { AxiosInstance } from \"@bps/http-client\";\nimport { IUserExperienceGateway } from \"@libs/api/gateways/user-experience/user-experience-gateway.interface\";\nimport { LogEntry } from \"@libs/api/gateways/user-experience/user-experience.dtos\";\n\nexport class UserExperienceGateway implements IUserExperienceGateway {\n constructor(private api: AxiosInstance) {}\n\n async getTenantSeqLogs(\n tenantId: string,\n siteId?: string\n ): Promise {\n const url = qs.stringifyUrl({\n url: \"/logs/tenant/seq\",\n query: { tenantId, siteId: Number(siteId?.replace(\"BPS-\", \"\")) } // Strip BPS off siteId\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getTenantAzureMonitorLogs(\n tenantId: string,\n siteId?: string\n ): Promise {\n const url = qs.stringifyUrl({\n url: \"/logs/tenant/azure\",\n query: { tenantId, siteId: Number(siteId?.replace(\"BPS-\", \"\")) } // Strip BPS off siteId\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getDeviceSeqLogs(\n cloudConnectorId: string,\n fieldDeviceId?: string\n ): Promise {\n const url = qs.stringifyUrl({\n url: \"/logs/fieldDevice/seq\",\n query: { cloudConnectorId, fieldDeviceId }\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n\n async getDeviceAzureMonitorLogs(\n cloudConnectorId: string,\n fieldDeviceId?: string\n ): Promise {\n const url = qs.stringifyUrl({\n url: \"/logs/fieldDevice/azure\",\n query: { cloudConnectorId, fieldDeviceId }\n });\n\n const { data } = await this.api.get(url);\n return data;\n }\n}\n","import { AxiosInstance } from \"@bps/http-client\";\nimport qs from \"query-string\";\n\nimport {\n ApplicationArgs,\n ApplicationCloudApplicationDto,\n ApplicationCreateRequest,\n ApplicationDto,\n ApplicationUpdateRequest,\n CallbackCreateRequest,\n CallbackDto,\n CallbackTypesDto,\n CallbackTypesUpdateRequest,\n CallbackUpdateRequest,\n CertificateCreateRequest,\n CertificateDto,\n CertificateIdentifier,\n CertificateUpdateRequest,\n CloudApplicationScopeDto,\n CloudApplicationScopeUpdateRequest,\n CloudApplicationSecretCreateRequest,\n CloudApplicationSecretDeleteRequest,\n CloudApplicationSecretDto,\n ConsentCreateRequest,\n ConsentDto,\n ConsentPatchRequest,\n ConsentUpdateRequest,\n TenantConsentArgs,\n TenantSettingDto,\n TenantSettingUpdateRequest\n} from \"./plt-integrators-gateway.dtos\";\nimport { IPlatformIntegratorsGateway } from \"./plt-integrators-gateway.interface\";\n\nexport class PlatformIntegratorsGateway implements IPlatformIntegratorsGateway {\n constructor(private api: AxiosInstance) {}\n\n getApplications = async (tenantId: string) => {\n const url = qs.stringifyUrl({\n url: `tenants/${tenantId}/applications`\n });\n\n const { data } = await this.api.get(url);\n\n return data;\n };\n\n getApplication = async (args: ApplicationArgs) => {\n const url = qs.stringifyUrl({\n url: `tenants/${args.tenantId}/applications/${args.applicationId}`\n });\n\n const { data } = await this.api.get(url);\n\n return data;\n };\n getGatewayScopes = async () => {\n const url = qs.stringifyUrl({\n url: \"integratorGateway/definedScopes\"\n });\n\n const { data } = await this.api.get(url);\n\n return data;\n };\n\n updateApplicationScopes = async (\n request: CloudApplicationScopeUpdateRequest\n ) => {\n return (\n await this.api.put(\n `tenants/${request.tenantId}/applications/${request.applicationId}/scopes`,\n request.scopes\n )\n ).data;\n };\n\n createApplicationSecret = async (\n request: CloudApplicationSecretCreateRequest\n ) => {\n return (\n await this.api.post(\n `tenants/${request.tenantId}/applications/${request.applicationId}/secrets`,\n request.secret\n )\n ).data;\n };\n\n deleteApplicationSecret = async (\n request: CloudApplicationSecretDeleteRequest\n ) => {\n return (\n await this.api.delete(\n `tenants/${request.tenantId}/applications/${request.applicationId}/secrets/${request.id}`\n )\n ).data;\n };\n\n createApplication = async (request: ApplicationCreateRequest) => {\n return (\n await this.api.post(\n `tenants/${request.tenantId}/applications`,\n request\n )\n ).data;\n };\n\n getCallbackTypes = async (): Promise => {\n const result = await this.api.get(\"/callbackTypes\");\n return result.data;\n };\n\n patchApplication = async (request: ApplicationUpdateRequest) => {\n return (\n await this.api.put(\n `tenants/${request.tenantId}/applications/${request.applicationId}`,\n request\n )\n ).data;\n };\n\n patchCallbackTypes = async (request: CallbackTypesUpdateRequest) => {\n return (\n await this.api.put(\n `/callbackTypes/${request.code}`,\n request\n )\n ).data;\n };\n\n getCertificates = async (tenantId: string) => {\n const { data } = await this.api.get(\n `tenants/${tenantId}/certificates`\n );\n\n return data;\n };\n\n getCertificate = async (request: CertificateIdentifier) => {\n const { data } = await this.api.get(\n `tenants/${request.tenantId}/certificates/${request.id}`\n );\n\n return data;\n };\n\n createCertificate = async (request: CertificateCreateRequest) => {\n return (\n await this.api.post(\n `tenants/${request.tenantId}/certificates`,\n request\n )\n ).data;\n };\n\n updateCertificate = async (request: CertificateUpdateRequest) => {\n return (\n await this.api.put(\n `tenants/${request.tenantId}/certificates/${request.id}`,\n request\n )\n ).data;\n };\n\n deleteCertificate = async (request: CertificateIdentifier) => {\n return (\n await this.api.delete(\n `tenants/${request.tenantId}/certificates/${request.id}`\n )\n ).data;\n };\n\n deployCertificateToGateway = async (request: CertificateIdentifier) => {\n return (\n await this.api.post(\n `tenants/${request.tenantId}/certificates/${request.id}/$deployToGateway`\n )\n ).data;\n };\n\n removeCertificateFromGateway = async (request: CertificateIdentifier) => {\n return (\n await this.api.post(\n `tenants/${request.tenantId}/certificates/${request.id}/$removeFromGateway`\n )\n ).data;\n };\n\n updateTenantSetting = async (request: TenantSettingUpdateRequest) => {\n return (\n await this.api.put(\n `tenants/${request.tenantId}/settings`,\n {\n value: {\n allowCertificateFromTenantId: request.allowCertificateFromTenantId\n }\n }\n )\n ).data;\n };\n\n getTenantSetting = async (tenantId: string) => {\n const { data } = await this.api.get(\n `tenants/${tenantId}/settings`\n );\n\n return data;\n };\n\n getConsents = async (tenantId: string) => {\n const { data } = await this.api.get(\n `tenants/${tenantId}/consents`\n );\n return data;\n };\n\n getConsent = async (args: TenantConsentArgs) => {\n const { data } = await this.api.get(\n `tenants/${args.tenantId}/consents/${args.tenantConsentId}`\n );\n return data;\n };\n\n patchTenantConsentLocation = async (request: ConsentPatchRequest) => {\n return (\n await this.api.patch(\n `tenants/${request.tenantId}/consents/${request.id}`,\n {\n locations: request.locations\n }\n )\n ).data;\n };\n\n createTenantConsent = async (request: ConsentCreateRequest) => {\n return (\n await this.api.post(\n `tenants/${request.tenantId}/consents`,\n request\n )\n ).data;\n };\n\n updateTenantConsent = async (request: ConsentUpdateRequest) => {\n return (\n await this.api.put(\n `tenants/${request.tenantId}/consents/${request.tenantConsentId}`,\n request\n )\n ).data;\n };\n\n getCallbacks = async (tenantId: string): Promise => {\n const url = qs.stringifyUrl({\n url: `tenants/${tenantId}/callbacks`,\n query: {\n tenantId\n }\n });\n return (await this.api.get(url)).data;\n };\n\n createCallback = async (request: CallbackCreateRequest) => {\n return (\n await this.api.post(\n `tenants/${request.tenantId}/callbacks`,\n request\n )\n ).data;\n };\n\n updateCallback = async (request: CallbackUpdateRequest) => {\n return (\n await this.api.put(\n `tenants/${request.tenantId}/callbacks/${request.id}`,\n request\n )\n ).data;\n };\n}\n","import { IGatewaysContext } from \"./GatewaysContext.inteface\";\nimport { createContext } from \"react\";\n\nexport const GatewaysContext = createContext(\n {} as IGatewaysContext\n);\n","import { GatewaysContext } from \"./GatewaysContext\";\nimport { useContext } from \"react\";\n\nexport const useGateways = () => useContext(GatewaysContext);\n","import { PropsWithChildren } from \"react\";\nimport { QueryClient, QueryClientProvider } from \"react-query\";\nimport { config } from \"@libs/config/config\";\nimport { AxiosHelper, EndpointConfig } from \"@bps/http-client\";\nimport { OpsApiSchemaInterface } from \"@libs/api/types/ops-api-schema.interface\";\nimport { CorrelationBaggageMiddleware } from \"@libs/api/middleware/corraletion-baggage.middleware\";\nimport { NO_AUTH } from \"@libs/api/types/headers.constants\";\nimport { PlatformGateway } from \"@libs/api/gateways/plt/PlatformGateway\";\nimport { TgOpsGateway } from \"@libs/api/gateways/tg/TgOpsGateway\";\nimport { SiaOpsGateway } from \"@libs/api/gateways/sia/SiaOpsGateway\";\nimport { FieldOpsGateway } from \"@libs/api/gateways/field/FieldOpsGateway\";\nimport { EnvGateway } from \"@libs/api/gateways/env/EnvGateway\";\nimport { BestHealthOpsGateway } from \"@libs/api/gateways/best-health/practice/BestHealthOpsGateway\";\nimport { BestHealthAccountOpsGateway } from \"@libs/api/gateways/best-health/account/BestHealthAccountOpsGateway\";\nimport { TtmReportingOpsGateway } from \"@libs/api/gateways/ttm/reporting/TtmReportingOpsGateway\";\nimport { TtmFormsOpsGateway } from \"@libs/api/gateways/ttm/forms/TtmFormsOpsGateway\";\nimport { OpsMonGateway } from \"@libs/api/gateways/mon/OpsMonGateway\";\nimport { TtmBookingOpsGateway } from \"@libs/api/gateways/ttm/booking/TtmBookingOpsGateway\";\nimport { PltCommsOpsGateway } from \"@libs/api/gateways/plt-comms/PltCommsOpsGateway\";\nimport { TtmCommsOpsGateway } from \"@libs/api/gateways/ttm/comms/TtmCommsOpsGateway\";\nimport { BpMobileOpsGateway } from \"@libs/api/gateways/bp-mobile/BpMobileOpsGateway\";\nimport { PlatformNotificationsGateway } from \"@libs/api/gateways/plt-notifications/PlatformNotificationsGateway\";\nimport { PlatformRedirectGateway } from \"@libs/api/gateways/plt-redirect/PlatformRedirectGateway\";\nimport { BpIdOpsGateway } from \"@libs/api/gateways/bp-id/BpIdOpsGateway\";\nimport { CamGateway } from \"@libs/api/gateways/cam/CamGateway\";\nimport { UserExperienceGateway } from \"@libs/api/gateways/user-experience/UserExperienceGateway\";\nimport { PlatformIntegratorsGateway } from \"@libs/api/gateways/plt-integrators/PlatformIntegratorsGateway\";\nimport { GatewaysContext } from \"@libs/api/gateways-context\";\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n retry: false,\n staleTime: config.queryCacheDuration\n }\n }\n});\n\nexport const ReactQueryProvider = ({\n children\n}: PropsWithChildren) => {\n const TRACE_ID = \"OpsConsole\";\n\n const opsEndpoints: EndpointConfig = {\n platform: { baseURL: config.platformBaseURL },\n platformIntegration: { baseURL: config.platformIntegratorsBaseUrl },\n tg: { baseURL: config.tgOpsBaseUrl },\n sia: { baseURL: config.siaOpsBaseUrl },\n field: { baseURL: config.fieldOpsBaseUrl },\n bestHealth: { baseURL: config.bestHealthOpsBaseUrl },\n bestHealthAccount: { baseURL: config.bestHealthAccountOpsBaseUrl }, //\n bpId: { baseURL: config.bpIdOpsBaseUrl },\n cam: { baseURL: config.camBaseURL },\n userExperience: { baseURL: config.userExperienceBaseUrl },\n ttmReporting: { baseURL: config.ttmReportsOpsBaseUrl },\n ttmForms: { baseURL: config.ttmFormsOpsBaseUrl },\n mon: { baseURL: config.opsMonBaseURL },\n ttmBooking: { baseURL: config.ttmBookingOpsBaseUrl },\n pltComms: { baseURL: config.pltCommsOpsBaseUrl },\n ttmComms: { baseURL: config.ttmCommsOpsBaseUrl },\n bpMobile: { baseURL: config.bpMobileOpsBaseUrl },\n pltNotifications: { baseURL: config.pltNotificationsOpsBaseUrl },\n pltRedirect: { baseURL: config.platformRedirectApiUrl },\n env: { baseURL: config.envBaseUrl }\n };\n\n const axiosHelper = new AxiosHelper(\n opsEndpoints,\n { request: [new CorrelationBaggageMiddleware()] },\n {\n noAuthHeader: NO_AUTH,\n traceId: TRACE_ID\n }\n );\n\n const api = axiosHelper.initialize();\n\n const platformGateway = new PlatformGateway(api.platform);\n const tgOpsGateway = new TgOpsGateway(api.tg);\n const siaOpsGateway = new SiaOpsGateway(api.sia);\n const fieldOpsGateway = new FieldOpsGateway(api.field);\n const envGateway = new EnvGateway(api.env);\n const bestHealthOpsGateway = new BestHealthOpsGateway(api.bestHealth);\n const bestHealthAccountOpsGateway = new BestHealthAccountOpsGateway(\n api.bestHealthAccount\n );\n\n const ttmReportingOpsGateway = new TtmReportingOpsGateway(api.ttmReporting);\n const ttmFormsOpsGateway = new TtmFormsOpsGateway(api.ttmForms);\n const opsMonGateway = new OpsMonGateway(api.mon);\n const ttmBookingOpsGateway = new TtmBookingOpsGateway(api.ttmBooking);\n const pltCommsOpsGateway = new PltCommsOpsGateway(api.pltComms);\n const ttmCommsOpsGateway = new TtmCommsOpsGateway(api.ttmComms);\n const bpMobileOpsGateway = new BpMobileOpsGateway(api.bpMobile);\n const pltNotificationsOpsGateway = new PlatformNotificationsGateway(\n api.pltNotifications\n );\n\n const pltRedirectOpsGateway = new PlatformRedirectGateway(api.pltRedirect);\n const bpIdOpsGateway = new BpIdOpsGateway(api.bpId);\n const camGateway = new CamGateway(api.cam);\n const userExperienceGateway = new UserExperienceGateway(api.userExperience);\n const platformIntegratorsGateway = new PlatformIntegratorsGateway(\n api.platformIntegration\n );\n\n return (\n \n {children}\n \n );\n};\n","import { QueryClient, QueryKey } from \"react-query\";\n\ntype UpsertOptions = {\n queryClient: QueryClient; // React query client instance\n queryKey: QueryKey; // The key that points to the collection within the react-query cache\n item: TItem; // Item to be inserted\n isIdentityEqual?: (other: TItem) => boolean; // Function which checks if the identity of an existing item is equal to\n asFirstItem?: boolean;\n};\n\ntype DeleteOptions = Omit, \"item\"> & {\n id: string; // Item id to be deleted\n};\n\n/**\n * Updates an array of items in the cache, provided the current state of those items is 'success'.\n *\n * @param queryClient React query client instance\n * @param queryKey The key that points to the collection within the react-query cache\n * @param applyUpdate The update function\n */\nexport const cacheUpdateItemArray = (\n queryClient: QueryClient,\n queryKey: QueryKey,\n applyUpdate: (items: T[]) => T[]\n) => {\n const queryState = queryClient.getQueryState(queryKey);\n if (queryState?.status !== \"success\") return;\n\n const data = queryState.data ?? [];\n queryClient.setQueryData(queryKey, applyUpdate(data));\n};\n\n/**\n * Inserts or updates a single item in a cached array of items. If the cached state\n * is not 'success' then no upsert will be performed.\n *\n * the identity of the item to be updated. Defaults to `other => other[\"id\"] === item[\"id\"]`\n * @param options\n */\nexport const cacheUpsertSingleItemInArray = (\n options: UpsertOptions\n) => {\n const { queryClient, queryKey, item, isIdentityEqual } = options;\n if (!item) return;\n\n cacheUpdateItemArray(queryClient, queryKey, prev => {\n const checkIdentity =\n isIdentityEqual ?? ((other: TItem) => item[\"id\"] === other[\"id\"]);\n\n let hasUpdated = false;\n\n const next = prev?.map(prevItem => {\n if (checkIdentity(prevItem)) {\n hasUpdated = true;\n return item;\n }\n\n return prevItem;\n });\n\n if (!hasUpdated) {\n if (!options.asFirstItem) {\n next.push(item);\n } else {\n next.unshift(item);\n }\n }\n\n return next;\n });\n};\n\n/**\n * Deletes a single item from a cached array of items. If the cached state is not 'success'\n * then this is a no-op.\n *\n * the identity of the item to be updated. Defaults to `other => other[\"id\"] === item[\"id\"]`\n * @param options\n */\nexport const cacheDeleteSingleItemInArray = (\n options: DeleteOptions\n) => {\n const { queryClient, queryKey, id, isIdentityEqual } = options;\n\n cacheUpdateItemArray(queryClient, queryKey, prev => {\n const checkIdentity =\n isIdentityEqual ?? ((other: TItem & { id: string }) => other.id === id);\n\n return prev.filter(item => !checkIdentity(item));\n });\n};\n","import { Permissions } from \"@libs/permissions/permissions.enum\";\nimport { PermissionsOperator } from \"@libs/permissions/permissions-operator.type\";\n\nexport const verifyHasPermissions = (\n userPermissions: Permissions[] = [],\n requiredPermissions: Permissions | Permissions[] = [],\n operator: PermissionsOperator = \"and\"\n): boolean => {\n // No permissions required\n if (!requiredPermissions) return true;\n if (Array.isArray(requiredPermissions) && !requiredPermissions.length)\n return true;\n\n // Permissions required but the user doesn\"t have any permissions\n if (!userPermissions?.length) return false;\n\n const requiredPermissionsArray = Array.isArray(requiredPermissions)\n ? requiredPermissions\n : [requiredPermissions];\n return operator === \"or\"\n ? requiredPermissionsArray!.some(p => userPermissions.includes(p))\n : requiredPermissionsArray!.every(p => userPermissions.includes(p));\n};\n","import { useRootStore } from \"@stores/StoresProvider\";\n\nimport { useMutation, useQuery, useQueryClient } from \"react-query\";\nimport { Permissions } from \"@libs/permissions/permissions.enum\";\nimport { GetRolesArgs } from \"./env-gateway.inferface\";\nimport {\n EnvRoleDto,\n EnvRoleImpersonation,\n EnvUser,\n NewEnvUser\n} from \"@libs/api/gateways/env/env-gateway.dtos\";\nimport { cacheUpsertSingleItemInArray } from \"@libs/react-query/react-query-cache.utils\";\nimport { verifyHasPermissions } from \"@libs/permissions/permissions.utils\";\nimport { useGateways } from \"@libs/api/gateways-context\";\nimport { HttpError } from \"@bps/http-client\";\n\nconst CacheKeys = {\n User: \"env-user\",\n Users: \"env-users\",\n Roles: \"env-roles\"\n};\n\ntype PermissionsCheckQueryResult = Omit<\n ReturnType,\n \"data\"\n> & { data: boolean | undefined };\n\nexport const useCurrentUserQuery = () => {\n const { envGateway } = useGateways();\n\n return useQuery(CacheKeys.User, envGateway.getCurrentUser, {\n cacheTime: Infinity\n });\n};\n\nexport const useCurrentUserImpersonation = () => {\n const queryClient = useQueryClient();\n const { data } = useCurrentUserQuery();\n const { data: allRoles } = useEnvAllRoles();\n\n return (value: string | undefined) => {\n const activeRole = allRoles?.find(r => r.code === value);\n const impersonationPermissions = activeRole\n ? (activeRole.permissions as Permissions[])\n : [];\n\n const newRole = activeRole\n ? ({\n role: value,\n permissions: impersonationPermissions\n } as EnvRoleImpersonation)\n : undefined;\n\n queryClient.setQueryData(CacheKeys.User, {\n ...data,\n impersonatingRole: newRole\n });\n };\n};\n\nexport const useUsersQuery = () => {\n const { envGateway } = useGateways();\n return useQuery(CacheKeys.Users, envGateway.getUsers);\n};\n\nexport const useUpsertUserMutation = () => {\n const { envGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n EnvUser,\n unknown,\n { user: EnvUser | NewEnvUser; isCreate: boolean }\n >(\n ({ user, isCreate }) =>\n isCreate ? envGateway.createUser(user) : envGateway.updateUser(user),\n {\n onSuccess: dto => {\n // We need to update the item that was modified\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [CacheKeys.Users, dto.id],\n item: dto\n });\n\n // To refresh the view, we need to invalidate the list query data as well\n queryClient.invalidateQueries(CacheKeys.Users);\n\n feedback.success(\"User has been updated successfully!\");\n }\n }\n );\n};\n\nexport const usePermissionsCheckQuery = (\n permissions: Permissions | Permissions[] = [],\n operator: \"and\" | \"or\" = \"and\"\n): PermissionsCheckQueryResult => {\n const { data, ...query } = useCurrentUserQuery();\n\n if (!data) {\n return {\n data: undefined,\n ...query\n };\n }\n\n const hasPermissions = verifyHasPermissions(\n data.impersonatingRole\n ? data.impersonatingRole.permissions\n : data.permissions,\n permissions,\n operator\n );\n\n return {\n data: hasPermissions,\n ...query\n };\n};\n\nexport const useEnvRoles = (args?: GetRolesArgs) => {\n const { envGateway } = useGateways();\n return useQuery(\n CacheKeys.Roles,\n () => envGateway.getRoles(args),\n {\n cacheTime: Infinity,\n staleTime: Infinity\n }\n );\n};\n\nexport const useEnvAllRoles = () => {\n const { envGateway } = useGateways();\n return useQuery(\n CacheKeys.Roles,\n () => envGateway.getAllRoles(),\n {\n cacheTime: Infinity,\n staleTime: Infinity\n }\n );\n};\n","export const NO_ACTION_PERMISSION: string =\n \"You do not have permissions to perform this action.\";\n\nexport const NO_RESOURCE_PERMISSION: string =\n \"You do not have permission to access this resource.\";\n","import { guid } from \"@libs/common/guid\";\nimport { useMutation, useQuery, useQueryClient } from \"react-query\";\nimport {\n AppointmentStats,\n EntitySequence,\n LocationAppointmentStats,\n PracticeLocation,\n PracticeLocationUpdate,\n Provider\n} from \"./best-health-ops-gateway.dtos\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nconst BestHealthCacheKeys = {\n AppointmentStats: \"bh-appointment-stats\",\n AllAppointmentStats: \"bh-appointment-stats-all\",\n LocationAppointmentStats: \"bh-location-appointment-stats\",\n PracticeLocations: \"bh-practice-locations\",\n BhbProviders: \"bhb-providers\",\n SyncState: \"bh-sync-state\",\n PracticeOutage: \"bhb-practice-outage\"\n};\n\nexport const usePracticeLocationsQuery = (tenantId: guid) => {\n const { bestHealthOpsGateway } = useGateways();\n\n return useQuery(\n [BestHealthCacheKeys.PracticeLocations, tenantId],\n async () => {\n return await bestHealthOpsGateway.getPracticeLocations(tenantId);\n }\n );\n};\n\nexport const useAppointmentStatsQuery = (tenantId: guid) => {\n const { bestHealthOpsGateway } = useGateways();\n\n return useQuery(\n [BestHealthCacheKeys.AppointmentStats, tenantId],\n async () => {\n return await bestHealthOpsGateway.getAppointmentStats(tenantId);\n }\n );\n};\n\nexport const useLocationAppointmentStatsQuery = (tenantId: guid) => {\n const { bestHealthOpsGateway } = useGateways();\n\n return useQuery(\n [BestHealthCacheKeys.LocationAppointmentStats, tenantId],\n async () => {\n return await bestHealthOpsGateway.getLocationAppointmentStats(tenantId);\n }\n );\n};\n\nexport const useAllAppointmentStatsQuery = () => {\n const { bestHealthOpsGateway } = useGateways();\n\n return useQuery(\n [BestHealthCacheKeys.AllAppointmentStats],\n async () => {\n return await bestHealthOpsGateway.getAllAppointmentStats();\n }\n );\n};\n\nexport const useBhbEntitySyncStateQuery = (tenantId: guid) => {\n const { bestHealthOpsGateway } = useGateways();\n\n return useQuery(\n [BestHealthCacheKeys.SyncState, tenantId],\n async () => {\n return await bestHealthOpsGateway.getSyncState(tenantId);\n }\n );\n};\n\nexport const useGetPracticeOutageQuery = (tenantId: guid) => {\n const { bestHealthOpsGateway } = useGateways();\n\n return useQuery(\n [BestHealthCacheKeys.PracticeOutage, tenantId],\n async () => {\n return await bestHealthOpsGateway.getPracticeOutage(tenantId);\n }\n );\n};\n\nexport interface PutPracticeMutationArgs {\n practiceOutage: boolean;\n}\n\nexport const usePutPracticeOutageQuery = (tenantId: guid) => {\n const { bestHealthOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ practiceOutage }) =>\n bestHealthOpsGateway.putPracticeOutage(tenantId, practiceOutage),\n {\n onSuccess: async (_, { practiceOutage }: PutPracticeMutationArgs) => {\n queryClient.setQueryData(\n [BestHealthCacheKeys.PracticeOutage, practiceOutage],\n {\n practiceOutage\n }\n );\n }\n }\n );\n};\n\nexport const useGetProviders = (tenantId: string) => {\n const { bestHealthOpsGateway } = useGateways();\n return useQuery(\n [BestHealthCacheKeys.BhbProviders, tenantId],\n async () => {\n return await bestHealthOpsGateway.getProviders(tenantId);\n }\n );\n};\n\nexport interface PutLocationMutationArgs {\n locationId: string;\n updates: PracticeLocationUpdate;\n}\n\nexport const usePutLocation = (tenantId: guid) => {\n const { bestHealthOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ locationId, updates }) =>\n bestHealthOpsGateway.putPracticeLocation(locationId, updates),\n {\n onSuccess: async (response, { locationId }: PutLocationMutationArgs) => {\n queryClient.setQueriesData(\n [BestHealthCacheKeys.PracticeLocations, tenantId],\n (data: PracticeLocation[]) => {\n const newData = [...data];\n const i = newData.findIndex(location => location.id === locationId);\n if (i && newData[i]) {\n newData[i] = {\n ...newData[i],\n ...response\n };\n }\n\n return newData;\n }\n );\n }\n }\n );\n};\n\nexport const usePostTtmSnapshot = (tenantId: guid) => {\n const { bestHealthOpsGateway } = useGateways();\n\n return useMutation(() =>\n bestHealthOpsGateway.postTtmSnapshot(tenantId)\n );\n};\nexport const usePostTtmRecalculate = (tenantId: guid) => {\n const { bestHealthOpsGateway } = useGateways();\n\n return useMutation(() =>\n bestHealthOpsGateway.postRecalculate(tenantId)\n );\n};\n","// TODO: The platform permissions here are just placeholders.\nexport enum Permissions {\n BhbPracticeRead = \"BH.BOOKING.PRACTICE.READ\",\n BhbPracticeWrite = \"BH.BOOKING.PRACTICE.WRITE\",\n BhbPracticeManagementRead = \"BHB.PRACTICEMANAGEMENT.READ\",\n BhbPracticeManagementWrite = \"BHB.PRACTICEMANAGEMENT.WRITE\",\n BhBannerRead = \"BH.BANNER.READ\",\n BhBannerWrite = \"BH.BANNER.WRITE\",\n BhMobileAppRead = \"BH.MOBILE-APP.READ\",\n BhMobileAppWrite = \"BH.MOBILE-APP.WRITE\",\n BhMobileNotificationsRead = \"BH.MOBILE-NOTIFICATIONS.READ\",\n BhMobileNotificationsWrite = \"BH.MOBILE-NOTIFICATIONS.WRITE\",\n BhMobileSettingsRead = \"BH.MOBILE-SETTINGS.READ\",\n BhMobileSettingsWrite = \"BH.MOBILE-SETTINGS.WRITE\",\n BhUserDelete = \"BH.USER.DELETE\",\n BhUserRead = \"BH.USER.READ\",\n EnvSecurityRead = \"ENV.SECURITY.READ\",\n EnvSecurityWrite = \"ENV.SECURITY.WRITE\",\n OpsConsolePreRelease = \"OPS.CONSOLE.PRERELEASE\",\n OpsEventHubPoisonMessageRead = \"OPS.EH-POISON-MESSAGE.READ\",\n OpsEventHubPoisonMessageWrite = \"OPS.EH-POISON-MESSAGE.WRITE\",\n OpsEventHubPoisonMessageValueRead = \"OPS.EH-POISON-MESSAGE-VALUE.READ\",\n PltBpidUserRead = \"PLT.BPID.USER.READ\",\n PltBpidUserWrite = \"PLT.BPID.USER.WRITE\",\n PltBpidUserClear = \"PLT.BPID.USER.CLEAR\",\n PltCatalogOpsRead = \"PLT.CATALOG-OPS.READ\",\n PltCatalogOpsWrite = \"PLT.CATALOG-OPS.WRITE\",\n PltCatalogTenantCreate = \"PLT.CATALOG-TENANT.CREATE\",\n PltCatalogTenantActivate = \"PLT.CATALOG-TENANT.ACTIVATE\",\n PltCatalogTenantDeactivate = \"PLT.CATALOG-TENANT.DEACTIVATE\",\n PltCatalogTenantRead = \"PLT.CATALOG-TENANT.READ\",\n PltCatalogTenantWrite = \"PLT.CATALOG-TENANT.WRITE\",\n PltCatalogTenantProvision = \"PLT.CATALOG-TENANT.PROVISION\",\n PltCatalogUserRead = \"PLT.CATALOG-USER.READ\",\n PltCatalogUserWrite = \"PLT.CATALOG-USER.WRITE\",\n PltCatalogUserAuthenticationWrite = \"PLT.CATALOG-USERAUTHENTICATION.WRITE\",\n PltCommsWrite = \"PLT.COMMS.WRITE\",\n PltCommsCreditsRead = \"PLT.COMMS-CREDITS.READ\",\n PltCommsCreditsWrite = \"PLT.COMMS-CREDITS.WRITE\",\n PltCommsSmsAuditRead = \"PLT.COMMS-SMSAUDIT.READ\",\n PltCustomerRead = \"PLT.CUSTOMER.READ\",\n PltCustomerWrite = \"PLT.CUSTOMER.WRITE\",\n PltFeatureRead = \"PLT.FEATURE.READ\",\n PltFieldManagementRead = \"PLT.FIELD-MANAGEMENT.READ\",\n PltFieldManagementWrite = \"PLT.FIELD-MANAGEMENT.WRITE\",\n PltIntegAppRead = \"PLT.INTEG-APP.READ\",\n PltIntegAppWrite = \"PLT.INTEG-APP.WRITE\",\n PltIntegConsentRead = \"PLT.INTEG-CONSENT.READ\",\n PltIntegConsentWrite = \"PLT.INTEG-CONSENT.WRITE\",\n PltInvitationRead = \"PLT.INVITATION.READ\",\n PltInvitationWrite = \"PLT.INVITATION.WRITE\",\n PltLicencingRead = \"PLT.LICENCING.READ\",\n PltLicencingWrite = \"PLT.LICENCING.WRITE\",\n PltNotificationsWrite = \"PLT.NOTIFICATIONS.WRITE\",\n PltOrgUnitRead = \"PLT.ORGUNIT.READ\",\n PltRedirectRead = \"PLT.REDIRECT.READ\",\n PltRedirectWrite = \"PLT.REDIRECT.WRITE\",\n PltSalesRead = \"PLT.SALES.READ\",\n PltSalesWrite = \"PLT.SALES.WRITE\",\n PltComponentsRead = \"PLT.COMPONENT.READ\",\n PltComponentsWrite = \"PLT.COMPONENT.WRITE\",\n ProsSiteManagementRead = \"PROS.SITEMANAGEMENT.READ\",\n ProsSiteManagementWrite = \"PROS.SITEMANAGEMENT.WRITE\",\n ProsSiteManagementProvision = \"PROS.SITEMANAGEMENT.PROVISION\",\n TiCalculateWrite = \"TI.BOOKING-AVAILABILITYCALC.WRITE\",\n TiReportsWrite = \"TI.REPORTS.WRITE\",\n TiFormsAllowed = \"TI.FORMDESIGN.WRITE\",\n TiReportsRead = \"TI.REPORTS.READ\",\n TiSettingsRead = \"TI.SETTINGS.READ\",\n TiBhbConfigAllowed = \"TI.BHB-CONFIG.ALLOWED\"\n}\n","import { DateTime } from \"@bps/utils\";\nimport {\n EntitySequence,\n EntitySnapshot\n} from \"@libs/api/gateways/tg/tg-ops-gateway.dtos\";\n\nexport interface EntitySyncStateDto {\n entitySequences: EntitySequenceDto[];\n entitySnapshots: EntitySnapshotDto[];\n}\n\nexport interface EntitySequenceDto extends Omit {\n updatedDate?: string;\n}\n\nexport interface EntitySnapshotDto\n extends Omit {\n snapshotActiveUtc?: string;\n processingStartedUtc?: string;\n}\n\nexport class EntitySyncState {\n entitySequences: EntitySequence[];\n entitySnapshots: EntitySnapshot[];\n\n constructor(dto: EntitySyncStateDto) {\n this.entitySequences =\n dto.entitySequences?.map(es => ({\n ...es,\n updatedDate: es.updatedDate\n ? DateTime.fromISO(es.updatedDate)\n : undefined\n })) ?? [];\n\n this.entitySnapshots =\n dto.entitySnapshots?.map(es => ({\n ...es,\n snapshotActive: es.snapshotActiveUtc\n ? DateTime.fromISO(es.snapshotActiveUtc)\n : undefined,\n processingStarted: es.processingStartedUtc\n ? DateTime.fromISO(es.processingStartedUtc)\n : undefined\n })) ?? [];\n }\n}\n","export interface SiteSyncStateDto {\n SequenceNumber: number | null;\n RecoveryModeDateUtc: string | null;\n LastSequenceNumberSent: number | null;\n LastSequenceNumberSentAtUtc: string | null;\n LastSequenceNumberReceived: number | null;\n LastSequenceNumberReceivedAtUtc: string | null;\n SequenceNumberProcessedAtUtc: string | null;\n}\n\nexport class SiteSyncState {\n sequenceNumber: number | null;\n recoveryModeDateUtc: string | null;\n lastSequenceNumberSent: number | null;\n lastSequenceNumberSentAtUtc: string | null;\n lastSequenceNumberReceived: number | null;\n lastSequenceNumberReceivedAtUtc: string | null;\n sequenceNumberProcessedAtUtc: string | null;\n\n public get outOfSync() {\n return this.recoveryModeDateUtc != null;\n }\n\n constructor(dto: SiteSyncStateDto) {\n Object.assign(this, dto);\n }\n}\n","import { guid } from \"@libs/common/guid\";\nimport { useMutation, useQuery, useQueryClient } from \"react-query\";\nimport { EntitySyncState } from \"@libs/api/gateways/tg/model/EntitySyncState\";\nimport { PremSettingsArgs } from \"@libs/api/gateways/sia/sia-ops-gateway.hooks\";\nimport { HttpError } from \"@bps/http-client\";\nimport { SiteSyncState } from \"@libs/api/gateways/sia/models/SiteSyncState\";\nimport {\n PremSettings,\n PremSettingsUpdate\n} from \"@libs/api/gateways/tg/tg-ops-gateway.dtos\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nexport const TgCacheKeys = {\n SiteSyncState: \"pros-site-sync-state\",\n EntitySyncState: \"pros-entity-sync-state\",\n PremSetting: \"pros-prem-settings\"\n};\n\nexport const useProsEntitySyncStateQuery = (siteId: guid) => {\n const { tgOpsGateway } = useGateways();\n\n return useQuery(\n [TgCacheKeys.EntitySyncState, siteId],\n async () => {\n const dto = await tgOpsGateway.getEntitySyncState(siteId);\n return new EntitySyncState(dto);\n }\n );\n};\n\nexport const usePremSettingsQuery = (siteId: guid) => {\n const { tgOpsGateway } = useGateways();\n\n return useQuery(\n [TgCacheKeys.PremSetting, siteId],\n async () => {\n return await tgOpsGateway.getPremSettings(siteId);\n }\n );\n};\n\nexport const usePremSettingsMutation = () => {\n const { tgOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ siteId, updates }) => tgOpsGateway.updatePremSettings(siteId, updates),\n {\n onSuccess: async (\n response: PremSettings[],\n { siteId }: PremSettingsArgs\n ) => {\n await queryClient.invalidateQueries([TgCacheKeys.PremSetting, siteId]);\n }\n }\n );\n};\n\nexport const useRecalculateAvailabilityMutation = () => {\n const { tgOpsGateway } = useGateways();\n\n return useMutation(siteId =>\n tgOpsGateway.recalculateAvailability(siteId)\n );\n};\n\nexport const useSnapshotTablesMutation = () => {\n const { tgOpsGateway } = useGateways();\n\n return useMutation(siteId =>\n tgOpsGateway.snapshotTables(siteId)\n );\n};\n\nexport const useSiteSyncStateQuery = (siteId: guid) => {\n const { tgOpsGateway } = useGateways();\n\n return useQuery(\n [TgCacheKeys.SiteSyncState, siteId],\n async () => {\n const dto = await tgOpsGateway.getReplicationSyncState(siteId);\n return new SiteSyncState(dto);\n }\n );\n};\n","import { useQuery } from \"react-query\";\n\nimport { useGateways } from \"@libs/api/gateways-context\";\nimport { LogEntry } from \"@libs/api/gateways/user-experience/user-experience.dtos\";\nimport { guid } from \"@libs/common/guid\";\n\nconst CacheKeys = {\n TenantSeqLogs: \"tenant-seq-logs\",\n TenantAzureMonitorLogs: \"tenant-azure-logs\",\n FieldDeviceSeqLogs: \"fieldDevice-seq-logs\",\n FieldDeviceAzureMonitorLogs: \"fieldDevice-azure-logs\"\n};\n\nexport const useTenantSeqLogsQuery = (tenantId: guid, siteId?: string) => {\n const { userExperienceGateway } = useGateways();\n\n return useQuery([CacheKeys.TenantSeqLogs, tenantId], async () => {\n return await userExperienceGateway.getTenantSeqLogs(tenantId, siteId);\n });\n};\n\nexport const useTenantAzureMonitorLogsQuery = (\n tenantId: guid,\n siteId?: string\n) => {\n const { userExperienceGateway } = useGateways();\n\n return useQuery(\n [CacheKeys.TenantAzureMonitorLogs, tenantId],\n async () => {\n return await userExperienceGateway.getTenantAzureMonitorLogs(\n tenantId,\n siteId\n );\n }\n );\n};\n\nexport const useFieldDeviceSeqLogsQuery = (\n cloudConnectorId: string,\n fieldDeviceId: string\n) => {\n const { userExperienceGateway } = useGateways();\n\n return useQuery(\n [CacheKeys.FieldDeviceSeqLogs, fieldDeviceId],\n async () => {\n return await userExperienceGateway.getDeviceSeqLogs(\n cloudConnectorId,\n fieldDeviceId\n );\n }\n );\n};\n\nexport const useFieldDeviceAzureMonitorLogsQuery = (\n cloudConnectorId: string,\n fieldDeviceId: string\n) => {\n const { userExperienceGateway } = useGateways();\n\n return useQuery(\n [CacheKeys.FieldDeviceAzureMonitorLogs, fieldDeviceId],\n async () => {\n return await userExperienceGateway.getDeviceAzureMonitorLogs(\n cloudConnectorId,\n fieldDeviceId\n );\n }\n );\n};\n","import { SiteComponentType } from \"@libs/api/gateways/sia/sia-ops-gateway.dtos\";\n\nimport { siteComponents } from \"@libs/api/gateways/sia/sia-ops-gateway.utils\";\n\nexport interface CurrentSiteVersionDto {\n component: SiteComponentType;\n version: string | null;\n desiredVersion: string | null;\n}\n\nexport class CurrentSiteVersion {\n componentType: SiteComponentType;\n displayText: string | undefined;\n version: string | null;\n desiredVersion: string | null;\n\n constructor(dto: CurrentSiteVersionDto) {\n const siteComponent = siteComponents.find(sc => sc.type === dto.component);\n if (!siteComponent) {\n throw new Error(`Unknown site component: ${dto.component}`);\n }\n\n this.componentType = siteComponent.type;\n this.displayText = siteComponent.name;\n this.version = dto.version ?? null;\n this.desiredVersion = dto.desiredVersion ?? null;\n }\n}\n","import { CurrentSiteVersion } from \"@libs/api/gateways/sia/models/CurrentSiteVersion\";\n\nimport { guid } from \"@libs/common/guid\";\nimport { useMutation, useQuery, useQueryClient } from \"react-query\";\n\nimport { DateTime } from \"@bps/utils\";\n\nimport {\n GetTenantsParams,\n InstallerDetail,\n LogLevels,\n ProsDatabaseCommands,\n ProsTenant,\n ReportsType,\n SIATenantDetails,\n SiteAvailableReport,\n SiteComponentState,\n SiteComponentType,\n SiteComponentVersionApproval,\n SiteComponentVersionDto,\n SiteServerReport,\n SiteVersions,\n VersionApprovalRequest\n} from \"@libs/api/gateways/sia/sia-ops-gateway.dtos\";\nimport { SiteComponentLogDto } from \"@libs/api/gateways/sia/models/SiteComponentLog\";\nimport { PremSettingsUpdate } from \"@libs/api/gateways/tg/tg-ops-gateway.dtos\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nexport const SiaCacheKeys = {\n AvailableComponentVersions: \"pros-available-component-versions\",\n SiteAvailableReports: \"pros-site-available-reports\",\n SiteComponentVersions: \"pros-site-component-versions\",\n ComponentVersions: \"pros-component-versions\",\n SiteVersions: \"pros-site-versions\",\n SiteLogs: \"pros-site-logs\",\n SiteServerReport: \"pros-site-server-report\",\n SiteManagerInstallerDetail: \"site-manager-installer-detail\",\n PremSetting: \"pros-prem-settings\",\n SIATenant: \"sia-tenant\",\n ApprovedComponentVersions: \"approved-component-versions\"\n};\ninterface SiteArgs {\n siteId: guid;\n}\n\nexport interface SiteDatabaseCommandArgs extends SiteArgs {\n command: ProsDatabaseCommands;\n}\n\nexport interface PremSettingsArgs extends SiteArgs {\n updates: PremSettingsUpdate[];\n}\n\nexport interface SiteComponentArgs extends SiteArgs {\n componentType: SiteComponentType;\n}\n\nexport interface SiteCommandUpdateArgs {\n tenantId: string;\n commandType: string;\n subCommandType?: string;\n componentType: string;\n scheduled?: DateTime;\n}\n\nexport interface SiteComponentLogLevelArgs extends SiteComponentArgs {\n logLevel: LogLevels;\n}\n\nexport interface SiteComponentStateArgs extends SiteComponentArgs {\n state: SiteComponentState;\n}\n\nexport interface SiteComponentVersionArgs extends SiteArgs {\n component: SiteComponentType;\n version: string;\n}\n\n// ----- QUERIES ---------------------------------------------------------------\n\nexport const useApprovedComponentVersionsQuery = () => {\n const { siaOpsGateway } = useGateways();\n\n return useQuery(\n [SiaCacheKeys.ApprovedComponentVersions],\n () => {\n return siaOpsGateway.getApprovedVersions();\n }\n );\n};\n\nexport const useAvailableComponentVersionsQuery = () => {\n const { siaOpsGateway } = useGateways();\n\n return useQuery(\n [SiaCacheKeys.AvailableComponentVersions],\n () => {\n return siaOpsGateway.getAvailableVersions();\n }\n );\n};\n\nexport const useSiteActivity = (siteId: guid) => {\n const { siaOpsGateway } = useGateways();\n\n return useQuery(\n [SiaCacheKeys.AvailableComponentVersions, siteId],\n async () => {\n return await siaOpsGateway.getSiteActivity(siteId);\n }\n );\n};\n\nexport const useSiteComponentVersionsQuery = (siteId: guid) => {\n const { siaOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useQuery(\n [SiaCacheKeys.SiteComponentVersions, siteId],\n async () => {\n const dtos = await siaOpsGateway.getCurrentVersions(siteId);\n return dtos.map(dto => new CurrentSiteVersion(dto));\n },\n {\n onSuccess: data => {\n const componentData = {};\n for (const component of data) {\n if (!componentData[component.componentType]) {\n componentData[component.componentType] = {};\n }\n if (component.version?.length) {\n componentData[component.componentType][component.version] = true;\n }\n }\n for (const componentType of Object.keys(componentData)) {\n const versions = Object.keys(componentData[componentType]);\n queryClient.setQueryData(\n [SiaCacheKeys.ComponentVersions, componentType],\n (prev: string[]) =>\n [...new Set([...(prev || []), ...versions])].sort().reverse()\n );\n }\n }\n }\n );\n};\n\nexport const useComponentVersions = (componentType?: SiteComponentType) => {\n return useQuery(\n [SiaCacheKeys.ComponentVersions, componentType],\n async () => [],\n { keepPreviousData: true }\n );\n};\n\nexport const useSiteVersionsQuery = (siteId: guid, desiredVersion?: string) => {\n const { siaOpsGateway } = useGateways();\n return useQuery(\n [SiaCacheKeys.SiteVersions, siteId],\n async () => {\n const data = await siaOpsGateway.getVersions(\n siteId,\n desiredVersion || \"unknown\"\n );\n return {\n ...data,\n ResponseDateTimeUTC: data?.ResponseDateTimeUTC\n ? DateTime.fromISO(data.ResponseDateTimeUTC)\n : undefined\n };\n },\n {\n enabled: !!desiredVersion\n }\n );\n};\n\nexport const useLogFilesQuery = (siteId: guid) => {\n const { siaOpsGateway } = useGateways();\n\n return useQuery(\n [SiaCacheKeys.SiteLogs, siteId],\n async () => await siaOpsGateway.getSiteLogs(siteId)\n );\n};\n\nexport const useSiteAvailableReportsQuery = (\n siteId: guid,\n component: SiteComponentType,\n options: { type: ReportsType; forceRefresh?: boolean }\n) => {\n const { type, forceRefresh } = options;\n const { siaOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n if (forceRefresh) {\n queryClient.removeQueries([SiaCacheKeys.SiteAvailableReports, siteId]);\n }\n\n return useQuery(\n [SiaCacheKeys.SiteAvailableReports, siteId, component, type],\n async () =>\n await siaOpsGateway.getSiteAvailableReports(siteId, component, type)\n );\n};\n\nexport const useSiteReportQuery = (\n siteId: guid,\n component: SiteComponentType,\n options: { report: string; enabled?: boolean }\n) => {\n const { report, enabled = true } = options;\n const { siaOpsGateway } = useGateways();\n\n return useQuery(\n [SiaCacheKeys.SiteServerReport, siteId, report],\n async () => await siaOpsGateway.getSiteReport(siteId, component, report),\n {\n enabled\n }\n );\n};\n\nexport const useTenantsQuery = (params?: GetTenantsParams) => {\n const { siaOpsGateway } = useGateways();\n return useQuery(\n [SiaCacheKeys.SiteLogs, params],\n async () => await siaOpsGateway.getTenants(params)\n );\n};\n\nexport const useSIATenantQuery = (tenantId: guid) => {\n const { siaOpsGateway } = useGateways();\n return useQuery(\n [SiaCacheKeys.SIATenant, tenantId],\n async () => await siaOpsGateway.getTenant(tenantId)\n );\n};\n\nexport const useSiteManagerInstallerDetailQuery = () => {\n const { siaOpsGateway } = useGateways();\n return useQuery(\n [SiaCacheKeys.SiteManagerInstallerDetail],\n async () => await siaOpsGateway.getSiteManagerInstallerDetail()\n );\n};\n\n// ----- MUTATIONS WITH CACHE EXPIRY -------------------------------------------\nexport const useUpdateSiteComponentVersionMutation = () => {\n const { siaOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ siteId, component, version }) => {\n return siaOpsGateway.approveBuild(siteId, component, version);\n },\n {\n onSuccess: async (\n response: string,\n { siteId, component, version }: SiteComponentVersionArgs\n ) => {\n queryClient.setQueryData(\n [SiaCacheKeys.SiteComponentVersions, siteId],\n prev => {\n if (!prev) return [];\n\n return prev.map(currentVersion => {\n if (currentVersion.componentType !== component) {\n return currentVersion;\n }\n\n return new CurrentSiteVersion({\n component,\n version: currentVersion.version,\n desiredVersion: version || null\n });\n });\n }\n );\n if (component === SiteComponentType.SiteAgent) {\n queryClient.removeQueries([SiaCacheKeys.SiteVersions, siteId]);\n }\n },\n onError: e => {\n throw e;\n }\n }\n );\n};\n\nexport const useLogFilesUploadMutation = () => {\n const { siaOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ siteId, componentType }) =>\n siaOpsGateway.uploadLogs(siteId, componentType),\n {\n onSuccess: async (response: string, { siteId }: SiteComponentArgs) => {\n await queryClient.invalidateQueries([SiaCacheKeys.SiteLogs, siteId]);\n }\n }\n );\n};\n\nexport const useApprovedComponentVersionsMutation = () => {\n const { siaOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n return useMutation<\n SiteComponentVersionApproval,\n Error,\n VersionApprovalRequest\n >(request => siaOpsGateway.postApprovedVersions(request), {\n onSuccess: async () => {\n await queryClient.refetchQueries([\n SiaCacheKeys.ApprovedComponentVersions\n ]);\n }\n });\n};\n\nexport const useDeleteComponentVersionsMutation = () => {\n const { siaOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n return useMutation(\n approvalId => siaOpsGateway.deleteApprovedVersions(approvalId),\n {\n onSuccess: async () => {\n await queryClient.refetchQueries([\n SiaCacheKeys.ApprovedComponentVersions\n ]);\n }\n }\n );\n};\n\n// ----- PLAIN MUTATIONS -------------------------------------------------------\nexport const useHealthCheckMutation = () => {\n const { siaOpsGateway } = useGateways();\n\n return useMutation(siteId =>\n siaOpsGateway.getHealthCheck(siteId)\n );\n};\n\nexport const usePingMutation = () => {\n const { siaOpsGateway } = useGateways();\n\n return useMutation(\n ({ siteId, componentType }) => siaOpsGateway.getPing(siteId, componentType)\n );\n};\n\nexport const useSiteCommandUpdateMutation = () => {\n const { siaOpsGateway } = useGateways();\n\n return useMutation(\n ({ tenantId, commandType, componentType, subCommandType, scheduled }) =>\n siaOpsGateway.postSiteCommandUpdate({\n tenantId,\n commandType,\n componentType,\n subCommandType,\n scheduled\n })\n );\n};\n\nexport const useLogLevelUpdateMutation = () => {\n const { siaOpsGateway } = useGateways();\n\n return useMutation(\n async ({ siteId, componentType, logLevel }) => {\n return await siaOpsGateway.updateLogLevel(\n logLevel.toString(),\n siteId,\n componentType\n );\n }\n );\n};\n\nexport const useComponentStateUpdateMutation = () => {\n const { siaOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n return useMutation(\n ({ siteId, state, componentType }) => {\n return siaOpsGateway.updateComponentState(siteId, state, componentType);\n },\n {\n onSuccess: async (\n response: string,\n { siteId, state, componentType }: SiteComponentStateArgs\n ) => {\n if (state === SiteComponentState.Update) {\n queryClient.setQueryData(\n [SiaCacheKeys.SiteComponentVersions, siteId],\n prev => {\n if (!prev) return [];\n return prev.map(currentVersion => {\n if (currentVersion.componentType !== componentType) {\n return currentVersion;\n }\n return new CurrentSiteVersion({\n component: componentType,\n version: currentVersion.desiredVersion,\n desiredVersion: currentVersion.desiredVersion\n });\n });\n }\n );\n }\n\n queryClient.removeQueries([SiaCacheKeys.SiteVersions, siteId]);\n return;\n },\n onError: e => {\n throw e;\n }\n }\n );\n};\n\nexport const useModifyDatabaseMutation = () => {\n const { siaOpsGateway } = useGateways();\n\n return useMutation(\n ({ siteId, command }) => siaOpsGateway.modifyPrOSDatabase(siteId, command)\n );\n};\n\nexport const useCheckUpdateMutation = () => {\n const { siaOpsGateway } = useGateways();\n\n return useMutation(siteId =>\n siaOpsGateway.checkUpdate(siteId)\n );\n};\n\nexport const useProsBannerMutation = () => {\n // @TODO Replace when api ready\n return useMutation(() => Promise.resolve(\"\"));\n};\n\nexport const useInstallPrerequisites = () => {\n const { siaOpsGateway } = useGateways();\n\n return useMutation(siteId =>\n siaOpsGateway.installPrerequisites(siteId)\n );\n};\n\nexport const useDeleteEntityEventsMutation = () => {\n const { siaOpsGateway } = useGateways();\n\n return useMutation(siteId =>\n siaOpsGateway.deleteEntityEvents(siteId)\n );\n};\n\nexport const useSiteComponentCredentialMutation = () => {\n const { siaOpsGateway } = useGateways();\n\n return useMutation(tenantId =>\n siaOpsGateway.updateSiteComponentCredentials(tenantId)\n );\n};\n","import { AxiosError } from \"axios\";\nimport {\n QueryClient,\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient\n} from \"react-query\";\nimport {\n UseInfiniteQueryOptions,\n UseQueryOptions\n} from \"react-query/types/react/types\";\n\nimport { HttpError, HttpStatusCode, NotFoundError } from \"@bps/http-client\";\nimport { useGateways } from \"@libs/api/gateways-context\";\nimport {\n AddLicenceDto,\n AddSalesProductDto,\n AddStripeCustomerDto,\n AddSubscriptionPayload,\n BillingContactDto,\n BusinessRoleDto,\n CancelCancelCustomerSubscriptionsArgs,\n ComponentActionDto,\n ComponentActionPayload,\n ComponentDefDto,\n ComponentDto,\n ComponentLiteDto,\n ComponentRequestDto,\n ComponentSettingDto,\n ComponentSettingsDto,\n ComponentWorkflowRunInstanceDto,\n CreateComponentPayload,\n CreateSettingPayload,\n CreateTenantDto,\n CustomerProductsDto,\n Feature,\n FeatureAction,\n GetComponentActionsArgs,\n GetComponentArgs,\n GetComponentsArgs,\n GetComponentsDefArgs,\n GetComponentSettingArgs,\n GetComponentsRequestsArgs,\n GetFeatureParams,\n GetLicencesArgs,\n GetSalesProductsArgs,\n GetTenantFeatureParams,\n InvoiceDto,\n LicenceDto,\n LicenceTypeDto,\n NewPltUser,\n NewTenantTag,\n PaymentMethodDto,\n PaymentMethodSetupDto,\n PaymentMethodUpdateArgs,\n PltUser,\n PreviewSubscriptionPayload,\n PromotionCodeDto,\n ResetCustomerSubscriptionBillingDateArgs,\n SalesProductDto,\n SecurityRolesAndPermissionsDto,\n StripeCustomerDto,\n SubscriptionDto,\n SubscriptionPreviewDto,\n Tenant,\n TenantDefaultUsersAuthenticationDto,\n TenantDto,\n TenantFeature,\n TenantFeatureDetails,\n TenantSearchArgs,\n TenantTag,\n UpdateSettingArgs,\n UpdateSettingPayload,\n UsedTenantTag,\n UserDefaultAuthenticationDto\n} from \"@libs/api/gateways/plt/plt-gateway.dtos\";\nimport { guid } from \"@libs/common/guid\";\nimport { PagingResponse } from \"@libs/paging/paging-response.type\";\nimport {\n cacheDeleteSingleItemInArray,\n cacheUpsertSingleItemInArray\n} from \"@libs/react-query/react-query-cache.utils\";\nimport { useRootStore } from \"@stores/StoresProvider\";\n\nimport { RefDataDto } from \"../../types/common-dtos\";\n\nexport const PltCacheKeys = {\n Tenants: \"plt-tenants\",\n TenantTags: \"plt-tenanttags\",\n UsedTenantTags: \"plt-usedtenanttags\",\n Users: \"plt-users\",\n TenantFeature: \"tenant-feature\",\n UsersSearch: \"plt-users-search\",\n User: \"plt-user\",\n UserDefaultAuthentication: \"user-default-auth\",\n Feature: \"feature\",\n SecurityRolesAndPermissions: \"security-roles-and-permissions\",\n BusinessRoles: \"business-roles\",\n TenantFeatures: \"tenant-features\",\n TenantLicences: \"tenant-licences\",\n Licence: \"licence\",\n LicenceTypes: \"licence-types\",\n SalesProducts: \"sales-products\",\n SalesProductsGroups: \"sales-products-groups\",\n ApplicationsRef: \"applications-ref-data\",\n TenantDefaultUserAuthentication: \"tenant-default-user-auth\",\n BillingContact: \"billing-contact\",\n BillingHistory: \"billing-history\",\n BillingInvoice: \"billing-invoice\",\n TenantPaymentMethods: \"tenant-payment-methods\",\n TenantDefaultPaymentMethod: \"tenant-default-payment-methods\",\n TenantStripeCustomer: \"tenant-stripe-customer\",\n ChildTenants: \"child-tenants\",\n CustomerSubscriptionsProducts: \"customer-subscriptions-products\",\n HierarchyTypesRef: \"hierarchyTypes-ref-data\",\n TenantPromotionCodes: \"tenant-promotion-codes\",\n ComponentsDefs: \"components-defs\",\n ComponentsLite: \"components-lite\",\n Components: \"components\",\n ComponentActions: \"component-actions\",\n ComponentActionsRequests: \"components-actions-requests\",\n ComponentSettings: \"component-settings\",\n ComponentSetting: \"component-setting\",\n ComponentWorkflowRunInstance: \"component-workflow-run-instance\",\n ComponentManagerWorkflowRunInstance: \"component-manager-workflow-run-instance\"\n};\n\n// Tenant\nexport const useTenantsPltQuery = (\n args?: Omit,\n options?: Omit<\n UseInfiniteQueryOptions, HttpError>,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { platformGateway } = useGateways();\n\n return useInfiniteQuery, AxiosError>(\n [PltCacheKeys.Tenants, args],\n page => {\n return platformGateway.getTenants({\n ...args,\n pageParam: page.pageParam\n });\n },\n {\n ...options,\n getNextPageParam: lastPage => {\n return lastPage.next;\n }\n }\n );\n};\n\nexport const useTenantQuery = (\n id: string,\n options?: Omit, \"queryKey\" | \"queryFn\">\n) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.Tenants, id],\n () => platformGateway.getTenant(id),\n {\n ...options\n }\n );\n};\n\nexport const useUpdateTenantCustomerAccount = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n Tenant,\n HttpError,\n { tenantId: guid; customerTenantId: string }\n >(\n ({ tenantId, customerTenantId }) => {\n return platformGateway.updateTenantCustomerAccount(\n tenantId,\n customerTenantId\n );\n },\n {\n onSuccess: async tenantUpdate => {\n queryClient.setQueryData(\n [PltCacheKeys.Tenants, tenantUpdate.id],\n tenantUpdate\n );\n\n await queryClient.invalidateQueries([\n PltCacheKeys.ChildTenants,\n tenantUpdate.customerTenantId\n ]);\n feedback.success(\"Tenant details updated!\");\n },\n onError: err => {\n feedback.error(err);\n }\n }\n );\n};\n\nexport const useTenantFeatureQuery = (tenantId: guid, featureCode: string) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.TenantFeature, { tenantId, featureCode }],\n async () => {\n return await platformGateway.getTenantFeature(tenantId, featureCode);\n }\n );\n};\n\nexport const useEnableDisableTenantFeatureMutation = () => {\n const { platformGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation<\n any,\n Error,\n { tenantId: guid; featureCode: TenantFeature; action: FeatureAction }\n >(\n ({ tenantId, featureCode, action }) =>\n platformGateway.enableDisableFeature(tenantId, featureCode, action),\n {\n onSuccess: async (_, { tenantId, featureCode, action }) => {\n // Set the cache so that the link is disabled until the cache time expires and is\n // rechecked since provisioning a feature is an asynchronous process\n queryClient.setQueryData(\n [PltCacheKeys.TenantFeature, { tenantId, featureCode, action }],\n {\n id: \"unknown\",\n tenantId,\n feature: featureCode,\n action\n }\n );\n }\n }\n );\n};\n\nexport const useEncryptTenantResourcesMutation = () => {\n const { platformGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ tenantId }) => platformGateway.encryptTenantResources(tenantId),\n {\n onSuccess: async (_, { tenantId }) => {\n // Set the cache so that the link is disabled until the cache time expires and is rechecked since this is an asynchronous process\n queryClient.setQueryData([PltCacheKeys.TenantFeature, { tenantId }], {\n id: \"unknown\",\n tenantId\n });\n }\n }\n );\n};\n\nexport const useActivateTenantMutation = () => {\n const { platformGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ tenantId }) => platformGateway.activateTenant(tenantId),\n {\n onSuccess: async (_, { tenantId }) => {\n // Set the cache so that the link is disabled until the cache time expires and is rechecked since this is an asynchronous process\n queryClient.setQueryData([PltCacheKeys.TenantFeature, { tenantId }], {\n id: \"unknown\",\n tenantId\n });\n }\n }\n );\n};\n\nexport const useDeactivateTenantMutation = () => {\n const { platformGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ tenantId }) => platformGateway.deactivateTenant(tenantId),\n {\n onSuccess: async (_, { tenantId }) => {\n // Set the cache so that the link is disabled until the cache time expires and is rechecked since this is an asynchronous process\n queryClient.setQueryData([PltCacheKeys.TenantFeature, { tenantId }], {\n id: \"unknown\",\n tenantId\n });\n }\n }\n );\n};\n\nexport const useUpdateTenantIsTemporary = () => {\n const { platformGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ tenantId, isTemporary }) => {\n return platformGateway.updateTenantIsTemporary(tenantId, isTemporary);\n },\n {\n onSuccess: async tenantUpdate => {\n const tenants = queryClient.getQueryData([\n PltCacheKeys.Tenants,\n null\n ]);\n\n const tenant = tenants?.find(t => t.id === tenantUpdate.id);\n if (tenant) {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltCacheKeys.Tenants, null],\n item: {\n ...tenant,\n isTemporary: tenantUpdate.isTemporary,\n eTag: tenantUpdate.eTag\n }\n });\n }\n }\n }\n );\n};\n\nexport const useTenantDefaultUserAuth = (tenantId: guid) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.TenantDefaultUserAuthentication, tenantId],\n async () => {\n try {\n return await platformGateway.getTenantDefaultUsersAuthentication(\n tenantId\n );\n } catch (e) {\n if (e instanceof NotFoundError) {\n return undefined;\n }\n return e;\n }\n }\n );\n};\n\nexport const useAddTenantDefaultUserAuth = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n\n const queryClient = useQueryClient();\n\n return useMutation<\n TenantDefaultUsersAuthenticationDto,\n HttpError,\n TenantDefaultUsersAuthenticationDto\n >(platformGateway.addTenantDefaultUsersAuthentication, {\n onSuccess: async dto => {\n queryClient.setQueryData(\n [PltCacheKeys.TenantDefaultUserAuthentication, dto.id],\n dto\n );\n feedback.success(\"Tenant details have been updated successfully!\");\n }\n });\n};\n\nexport const useUpdateTenantDefaultUserAuth = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n TenantDefaultUsersAuthenticationDto,\n HttpError,\n TenantDefaultUsersAuthenticationDto\n >(platformGateway.updateTenantDefaultUsersAuthentication, {\n onSuccess: async dto => {\n queryClient.setQueryData(\n [PltCacheKeys.TenantDefaultUserAuthentication, dto.id],\n dto\n );\n feedback.success(\"Tenant details have been updated successfully!\");\n }\n });\n};\n\nexport const useChildTenants = (\n customerTenantId: string,\n options?: Omit, \"queryKey\" | \"queryFn\">\n) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.ChildTenants, customerTenantId],\n async () => {\n try {\n return await platformGateway.getChildTenants(customerTenantId);\n } catch (e) {\n if (e instanceof NotFoundError) {\n return undefined;\n }\n return e;\n }\n },\n options\n );\n};\n\nexport const useUpdateTenant = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.updateTenant,\n {\n onSuccess: async dto => {\n const prevData = queryClient.getQueryData([\n PltCacheKeys.Tenants,\n dto.id\n ]);\n // update current get tenant query\n queryClient.setQueryData([PltCacheKeys.Tenants, dto.id], {\n ...prevData,\n ...dto\n });\n\n // get all search tenant queries where query key contains CacheKeys.Tenants and data is in array\n const queries = queryClient.getQueryCache().getAll();\n const tenantQueries = queries.filter(\n s =>\n s.queryKey.includes(PltCacheKeys.Tenants) &&\n Array.isArray(s.state.data)\n );\n\n // update all search tenants queries\n tenantQueries.forEach(query => {\n const prevData = queryClient.getQueryData(query.queryKey);\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: query.queryKey,\n item: {\n ...prevData,\n ...dto\n }\n });\n });\n\n feedback.success(\"Tenant details have been updated successfully!\");\n }\n }\n );\n};\n\nexport const useCreateTenant = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.createTenant,\n {\n onSuccess: async dto => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltCacheKeys.Tenants],\n item: dto\n });\n\n await queryClient.invalidateQueries([\n PltCacheKeys.ChildTenants,\n dto.customerTenantId\n ]);\n\n feedback.success(\"Tenant has been created successfully!\");\n }\n }\n );\n};\n\n// Plt Users\nexport const useUser = (tenantId: guid, userId: string) => {\n const { platformGateway } = useGateways();\n return useQuery([PltCacheKeys.User, userId], () =>\n platformGateway.getUser(tenantId, userId)\n );\n};\n\nexport const useSearchUsers = (\n tenantId?: string,\n searchTerm?: string,\n bpIdUserId?: string\n) => {\n const { platformGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useQuery(\n [PltCacheKeys.UsersSearch, tenantId, searchTerm, bpIdUserId],\n async () =>\n searchTerm || tenantId || bpIdUserId\n ? await platformGateway.searchUsers(tenantId, searchTerm, bpIdUserId)\n : [],\n {\n onSuccess: data => {\n queryClient.setQueryData([PltCacheKeys.UsersSearch], data);\n }\n }\n );\n};\n\nexport const useCreateUser = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.createUser,\n {\n onSuccess: async dto => {\n const queries = queryClient.getQueryCache().getAll();\n const userSearchQuery = queries.filter(q =>\n q.queryKey.includes(PltCacheKeys.UsersSearch)\n );\n\n userSearchQuery.forEach(query => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: query.queryKey,\n item: dto,\n asFirstItem: true\n });\n });\n\n feedback.success(\"A new user has been created successfully!\");\n }\n }\n );\n};\n\nexport const useUpdateUser = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(platformGateway.updateUser, {\n onSuccess: async dto => {\n const queries = queryClient.getQueryCache().getAll();\n const userSearchQuery = queries.filter(q =>\n q.queryKey.includes(PltCacheKeys.UsersSearch)\n );\n\n userSearchQuery.forEach(query => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: query.queryKey,\n item: dto\n });\n });\n\n // Force invalidate of the query for the updated user\n // Because the user data is being used on a form, we want to use \"Refetch\" in place of invalidate\n // as the form values are loaded before the \"invalidate\" action gets the new values from the api\n await queryClient.refetchQueries([PltCacheKeys.User, dto.id]);\n\n feedback.success(\"The user data has been updated successfully!\");\n }\n });\n};\n\nexport const useUserDefaultAuth = (tenantId: guid, userId: guid) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.UserDefaultAuthentication, tenantId, userId],\n async () => {\n try {\n return await platformGateway.getUserDefaultAuthentication(\n tenantId,\n userId\n );\n } catch (e) {\n if (e instanceof NotFoundError) {\n return undefined;\n }\n return e;\n }\n }\n );\n};\n\nexport const useAddUserDefaultAuth = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n UserDefaultAuthenticationDto,\n HttpError,\n UserDefaultAuthenticationDto\n >(platformGateway.addUserDefaultAuthentication, {\n onSuccess: async dto => {\n queryClient.setQueryData(\n [PltCacheKeys.UserDefaultAuthentication, dto.tenantId, dto.userId],\n dto\n );\n feedback.success(\"User auth details have been updated successfully!\");\n }\n });\n};\n\nexport const useUpdateUserDefaultAuth = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n UserDefaultAuthenticationDto,\n HttpError,\n UserDefaultAuthenticationDto\n >(platformGateway.updateUserDefaultAuthentication, {\n onSuccess: async dto => {\n queryClient.setQueryData(\n [PltCacheKeys.UserDefaultAuthentication, dto.tenantId, dto.userId],\n dto\n );\n feedback.success(\"User auth details have been updated successfully!\");\n }\n });\n};\n\nexport const useFeature = (params?: GetFeatureParams) => {\n const { platformGateway } = useGateways();\n return useQuery([PltCacheKeys.Feature, params], async () => {\n return await platformGateway.getFeature(params);\n });\n};\n\nexport const useSecurityRolesAndPermissions = () => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.SecurityRolesAndPermissions],\n () => platformGateway.getSecurityRolesAndPermissions()\n );\n};\n\nexport const useTenantFeatures = (params: GetTenantFeatureParams) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.TenantFeatures],\n async () => {\n return await platformGateway.getTenantFeatures(params);\n }\n );\n};\n\nexport const useBusinessRoles = (businessRoles?: string[]) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.BusinessRoles],\n async () => {\n return await platformGateway.getBusinessRole(businessRoles);\n },\n {\n cacheTime: Infinity,\n staleTime: Infinity\n }\n );\n};\n\n// Licences types\nexport const useLicenceTypes = () => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.LicenceTypes],\n platformGateway.getLicenceTypes\n );\n};\n\nexport const useLicenceType = (\n code: string,\n options?: Omit, \"queryKey\" | \"queryFn\">\n) => {\n const { platformGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useQuery(\n [PltCacheKeys.LicenceTypes, code],\n () => platformGateway.getLicenceType(code),\n {\n ...options,\n initialData: () => {\n const cache = queryClient.getQueryData([\n PltCacheKeys.LicenceTypes\n ]);\n return cache?.find(d => d.code === code);\n }\n }\n );\n};\n\nexport const useAddLicenceType = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.addLicenceType,\n {\n onSuccess: async dto => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltCacheKeys.LicenceTypes],\n item: dto,\n isIdentityEqual: item => item.code === dto.code\n });\n feedback.success(\"A new licence type has been added successfully!\");\n queryClient.invalidateQueries([PltCacheKeys.LicenceTypes, dto.code]);\n }\n }\n );\n};\n\nexport const useUpdateLicenceType = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.updateLicenceType,\n {\n onSuccess: async dto => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltCacheKeys.LicenceTypes],\n item: dto,\n isIdentityEqual: item => item.code === dto.code\n });\n feedback.success(\"The licence type has been updated successfully!\");\n queryClient.invalidateQueries([PltCacheKeys.LicenceTypes, dto.code]);\n }\n }\n );\n};\n\nexport const useToggleLicenceType = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ code, disable }) =>\n disable\n ? platformGateway.disableLicenceType(code)\n : platformGateway.enableLicenceType(code),\n {\n onSuccess: async (dto, args) => {\n await queryClient.invalidateQueries([PltCacheKeys.LicenceTypes]);\n feedback.success(\n `A new licence type has been ${\n args.disable ? \"disabled\" : \"enabled\"\n }!`\n );\n },\n onError: error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\n// Licences\n\nconst updateLicencesQueryKey = (\n queryClient: QueryClient,\n dto: LicenceDto,\n asFirstItem?: boolean\n) => {\n const queries = queryClient.getQueryCache().getAll();\n const userSearchQuery = queries.filter(q =>\n q.queryKey.includes(PltCacheKeys.TenantLicences)\n );\n\n userSearchQuery.forEach(query => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: query.queryKey,\n item: dto,\n asFirstItem\n });\n });\n};\nexport const useLicence = (\n id: string,\n options?: Omit, \"queryKey\" | \"queryFn\">\n) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.Licence, id],\n () => platformGateway.getLicence(id),\n {\n ...options\n }\n );\n};\n\nexport const useLicences = (args: GetLicencesArgs) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.TenantLicences, args],\n () => platformGateway.getLicences(args)\n );\n};\n\nexport const useAddLicence = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.addLicence,\n {\n onSuccess: dto => {\n updateLicencesQueryKey(queryClient, dto, true);\n feedback.success(\"A new licence has been added successfully!\");\n }\n }\n );\n};\n\nexport const useUpdateLicence = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.updateLicence,\n {\n onSuccess: async dto => {\n updateLicencesQueryKey(queryClient, dto);\n queryClient.setQueryData([PltCacheKeys.Licence, dto.id], dto);\n feedback.success(\"The licence has been updated successfully!\");\n }\n }\n );\n};\n\nexport const useRemoveLicence = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(platformGateway.removeLicence, {\n onSuccess: async dto => {\n cacheDeleteSingleItemInArray({\n queryClient,\n queryKey: [PltCacheKeys.TenantLicences, dto.tenantId],\n id: dto.id\n });\n feedback.success(\"The licence has been inactivated!\");\n }\n });\n};\n\n// Products\nconst getSalesProductsCurrentQueryKey = (queryClient: QueryClient) => {\n const queries = queryClient.getQueryCache();\n const query = queries\n .getAll()\n .find(s => s.queryKey.includes(PltCacheKeys.SalesProducts));\n\n if (query) {\n return query.queryKey;\n }\n\n return [PltCacheKeys.SalesProducts];\n};\n\nexport const useSalesProducts = (\n args?: GetSalesProductsArgs,\n options?: Omit, \"queryKey\" | \"queryFn\">\n) => {\n const queryKey = args\n ? [PltCacheKeys.SalesProducts, args]\n : PltCacheKeys.SalesProducts;\n\n const { platformGateway } = useGateways();\n return useQuery(\n queryKey,\n async () => {\n return await platformGateway.getSalesProducts(args);\n },\n options\n );\n};\n\nexport const useSalesProduct = (\n id: string,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { platformGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useQuery(\n [PltCacheKeys.SalesProducts, id],\n () => platformGateway.getSalesProduct(id),\n {\n ...options,\n initialData: () => {\n const cache = queryClient.getQueryData(\n PltCacheKeys.SalesProducts\n );\n return cache?.find(d => d.id === id);\n }\n }\n );\n};\n\nexport const useAddSalesProduct = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.addSalesProduct,\n {\n onSuccess: dto => {\n const queryKey = getSalesProductsCurrentQueryKey(queryClient);\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey,\n item: dto\n });\n feedback.success(\"A new product has been added successfully!\");\n }\n }\n );\n};\n\nexport const useUpdateSalesProduct = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.updateSalesProduct,\n {\n onSuccess: dto => {\n const queryKey = getSalesProductsCurrentQueryKey(queryClient);\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey,\n item: dto\n });\n queryClient.setQueryData([PltCacheKeys.SalesProducts, dto.id], dto);\n feedback.success(\"The product has been updated successfully!\");\n }\n }\n );\n};\n\nexport const useResyncStripeProducts = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n\n return useMutation(\n () => platformGateway.resyncStripeProducts(),\n {\n onSuccess: () => {\n feedback.success(\"The Stripe products have been synced successfully!\");\n },\n onError: () => {\n feedback.error(\"Error occurred while syncing the Stripe products!\");\n }\n }\n );\n};\n\nexport const useApplicationsRefData = () => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.ApplicationsRef],\n platformGateway.getApplicationsRefData,\n {\n cacheTime: Infinity,\n staleTime: Infinity\n }\n );\n};\n\nexport const useHierarchyTypesRefData = () => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.HierarchyTypesRef],\n platformGateway.getHierarchyTypesRefData,\n {\n cacheTime: Infinity,\n staleTime: Infinity\n }\n );\n};\n\n// Billing and payment methods\nexport const useBillingContact = (\n tenantId: string,\n options?: Omit, \"queryKey\" | \"queryFn\">\n) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.BillingContact, tenantId],\n () => platformGateway.getBillingContact(tenantId),\n options\n );\n};\n\nexport const useBillingHistory = (\n tenantId: string,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.BillingHistory, tenantId],\n () => platformGateway.getBillingHistory(tenantId),\n options\n );\n};\n\nexport const useBillingInvoice = (\n tenantId: string,\n invoiceId: string,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.BillingHistory, tenantId, invoiceId],\n () => platformGateway.getInvoice(tenantId, invoiceId),\n options\n );\n};\n\nexport const usePayInvoice = () => {\n const queryClient = useQueryClient();\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n\n return useMutation<\n InvoiceDto,\n AxiosError,\n { tenantId: string; invoiceNumber: string }\n >(\n ({ tenantId, invoiceNumber }) =>\n platformGateway.payInvoice(tenantId, invoiceNumber),\n {\n onSuccess: (dto, args) => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltCacheKeys.BillingHistory, args.tenantId],\n item: dto\n });\n feedback.success(\"The invoice has been paid!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useTenantPaymentMethods = (\n customerTenantId: string,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.TenantPaymentMethods, customerTenantId],\n () => platformGateway.getPaymentMethods(customerTenantId),\n options\n );\n};\n\nexport const useTenantDefaultPaymentMethod = (\n customerTenantId: string,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { platformGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useQuery(\n [PltCacheKeys.TenantDefaultPaymentMethod, customerTenantId],\n () => platformGateway.getDefaultPaymentMethod(customerTenantId),\n {\n ...options,\n onSuccess: async dto => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltCacheKeys.TenantPaymentMethods, customerTenantId],\n item: dto\n });\n await invalidateCustomerSubscriptionsProductsQuery(\n queryClient,\n customerTenantId\n );\n }\n }\n );\n};\n\nexport const useUpdateTenantPaymentMethods = () => {\n const queryClient = useQueryClient();\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n\n return useMutation(\n platformGateway.updatePaymentMethod,\n {\n onSuccess: async (dto, args) => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltCacheKeys.TenantPaymentMethods, args.customerTenantId],\n item: dto\n });\n await invalidateCustomerSubscriptionsProductsQuery(\n queryClient,\n args.customerTenantId\n );\n feedback.success(\"The method has been updated!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useDeleteTenantPaymentMethods = (customerTenantId: string) => {\n const queryClient = useQueryClient();\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n\n return useMutation(\n async paymentMethodId => {\n await platformGateway.deletePaymentMethod(\n customerTenantId,\n paymentMethodId\n );\n\n const methods =\n queryClient.getQueryData([\n PltCacheKeys.TenantPaymentMethods,\n customerTenantId\n ]) ?? [];\n\n const cardToBeDeleted = methods.find(m => m.id === paymentMethodId);\n const remainedCards = methods.filter(m => m.id !== paymentMethodId);\n\n // In a case we delete the default payment method, we are setting the first remaining as default one!\n if (\n cardToBeDeleted &&\n cardToBeDeleted.isDefault &&\n remainedCards.length\n ) {\n await platformGateway.setupPaymentMethodAsDefault(\n customerTenantId,\n remainedCards[0].id\n );\n }\n },\n {\n onSuccess: async () => {\n await queryClient.invalidateQueries([\n PltCacheKeys.TenantPaymentMethods,\n customerTenantId\n ]);\n\n queryClient.removeQueries([\n PltCacheKeys.TenantDefaultPaymentMethod,\n customerTenantId\n ]);\n\n await invalidateCustomerSubscriptionsProductsQuery(\n queryClient,\n customerTenantId\n );\n feedback.success(\"The method has been deleted!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useTenantPaymentMethodsAsDefault = (customerTenantId: string) => {\n const queryClient = useQueryClient();\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n\n return useMutation(\n paymentMethodId =>\n platformGateway.setupPaymentMethodAsDefault(\n customerTenantId,\n paymentMethodId\n ),\n {\n onSuccess: async dto => {\n await queryClient.invalidateQueries([\n PltCacheKeys.TenantPaymentMethods,\n customerTenantId\n ]);\n\n await invalidateCustomerSubscriptionsProductsQuery(\n queryClient,\n customerTenantId\n );\n\n queryClient.setQueryData(\n [PltCacheKeys.TenantDefaultPaymentMethod, customerTenantId],\n dto\n );\n\n feedback.success(\"The method has been updated!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useSetupTenantPaymentMethods = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n\n return useMutation(\n platformGateway.setupPaymentMethod,\n {\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\n// Stripe customer\nexport const useStripeCustomer = (\n tenantId: string,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.TenantStripeCustomer, tenantId],\n () => platformGateway.getStripeCustomer(tenantId),\n {\n ...options,\n onError: e => {\n if (e instanceof NotFoundError) {\n return undefined;\n }\n return e;\n }\n }\n );\n};\n\nexport const useAddStripeCustomer = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.addStripeCustomer,\n {\n onSuccess: data => {\n queryClient.setQueryData(\n [PltCacheKeys.TenantStripeCustomer, data.tenantId],\n data\n );\n queryClient.invalidateQueries([PltCacheKeys.Tenants, data.tenantId]);\n\n feedback.success(\"A new Stripe customer has been created!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\n// Subscriptions\n\nconst invalidateCustomerSubscriptionsProductsQuery = async (\n queryClient: QueryClient,\n customerTenantId: string\n) => {\n await queryClient.invalidateQueries([\n PltCacheKeys.CustomerSubscriptionsProducts,\n customerTenantId\n ]);\n};\nexport const useCustomerProducts = (\n customerTenantId: string,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.CustomerSubscriptionsProducts, customerTenantId],\n () => platformGateway.getCustomerProducts(customerTenantId),\n {\n ...options\n }\n );\n};\n\nexport const useCustomerSubscriptionPreview = () => {\n const { platformGateway } = useGateways();\n\n return useMutation<\n SubscriptionPreviewDto,\n HttpError,\n PreviewSubscriptionPayload\n >(platformGateway.getCustomerSubscriptionPreview);\n};\n\nexport const useAddCustomerSubscription = (customerTenantId: string) => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.addCustomerSubscription,\n {\n onSuccess: async () => {\n await invalidateCustomerSubscriptionsProductsQuery(\n queryClient,\n customerTenantId\n );\n\n await queryClient.refetchQueries([\n PltCacheKeys.BillingHistory,\n customerTenantId\n ]);\n feedback.success(\"A new subscription has been updated!\");\n }\n }\n );\n};\n\nexport const useCancelCustomerSubscriptions = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n SubscriptionDto,\n AxiosError,\n CancelCancelCustomerSubscriptionsArgs\n >(platformGateway.cancelCustomerSubscription, {\n onSuccess: async dto => {\n await invalidateCustomerSubscriptionsProductsQuery(\n queryClient,\n dto.customerTenantId\n );\n feedback.success(\"The subscription has been canceled!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n });\n};\n\nexport const useUndoCancellationCustomerSubscription = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n SubscriptionDto,\n AxiosError,\n Omit\n >(platformGateway.undoCancellationCustomerSubscription, {\n onSuccess: async dto => {\n await invalidateCustomerSubscriptionsProductsQuery(\n queryClient,\n dto.customerTenantId\n );\n feedback.success(\"The subscription cancellation has been updated!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n });\n};\n\nexport const useResetCustomerSubscriptionBillingDate = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n SubscriptionDto,\n AxiosError,\n ResetCustomerSubscriptionBillingDateArgs\n >(platformGateway.resetCustomerSubscriptionBillingDate, {\n onSuccess: async dto => {\n await invalidateCustomerSubscriptionsProductsQuery(\n queryClient,\n dto.customerTenantId\n );\n feedback.success(\"The subscription billing date has been reset!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n });\n};\n\nexport const useTenantPromotionCodes = (\n tenantId: string,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltCacheKeys.TenantPromotionCodes, tenantId],\n () => platformGateway.getTenantPromotionCodes(tenantId),\n options\n );\n};\n\nexport const useTenantPromotionCode = (\n tenantId: string,\n promotionCodeId: string\n) => {\n const { platformGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useQuery(\n [PltCacheKeys.TenantPromotionCodes, tenantId, promotionCodeId],\n () => platformGateway.getTenantPromotionCode(tenantId, promotionCodeId),\n {\n onSuccess: (dto: PromotionCodeDto) => {\n cacheUpsertSingleItemInArray({\n queryClient,\n item: dto,\n queryKey: [PltCacheKeys.TenantPromotionCodes, tenantId]\n });\n }\n }\n );\n};\n\n// COMPONENTS\nconst invalidateComponentsQueries = async (queryClient: QueryClient) => {\n const queries = queryClient.getQueryCache().getAll();\n const componentsQueries = queries.filter(\n q =>\n q.queryKey.includes(PltCacheKeys.ComponentsLite) ||\n q.queryKey.includes(PltCacheKeys.Components)\n );\n\n setTimeout(async () => {\n await Promise.all(\n componentsQueries.map(query => queryClient.invalidateQueries(query))\n );\n }, 1000);\n};\n\nexport const useComponentsDefs = (args?: GetComponentsDefArgs) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.ComponentsDefs, args],\n () => platformGateway.getComponentsDefs(args),\n {\n cacheTime: Infinity,\n staleTime: Infinity\n }\n );\n};\n\nexport const useComponents = (args?: GetComponentsArgs) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.ComponentsLite, args],\n () => platformGateway.getComponents(args)\n );\n};\n\nexport const useComponent = (args?: GetComponentArgs) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.Components, args?.tenantId, args],\n () => platformGateway.getComponent(args)\n );\n};\n\nexport const useAddOrUpdateComponent = (message: string) => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.addOrUpdateComponent,\n {\n onSuccess: async () => {\n await invalidateComponentsQueries(queryClient);\n feedback.success(message);\n }\n }\n );\n};\n\nexport const useInitializeComponent = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.initializeComponent,\n {\n onSuccess: async () => {\n await invalidateComponentsQueries(queryClient);\n feedback.success(\"Component initialized\");\n },\n onError: e => {\n feedback.error(e);\n }\n }\n );\n};\n\nexport const useDeInitializeComponent = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.deInitializeComponent,\n {\n onSuccess: async () => {\n await invalidateComponentsQueries(queryClient);\n feedback.success(\"Component de-initialized\");\n },\n onError: e => {\n feedback.error(e);\n }\n }\n );\n};\n\nexport const useArchiveComponent = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.archiveComponent,\n {\n onSuccess: async () => {\n await invalidateComponentsQueries(queryClient);\n feedback.success(\"Component archived\");\n },\n onError: e => {\n feedback.error(e);\n }\n }\n );\n};\n\nexport const useReConfigureComponent = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.archiveComponent,\n {\n onSuccess: async () => {\n await invalidateComponentsQueries(queryClient);\n feedback.success(\"Component re-configured\");\n },\n onError: e => {\n feedback.error(e);\n }\n }\n );\n};\n\nexport const useDisableComponent = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.disableComponent,\n {\n onSuccess: async () => {\n await invalidateComponentsQueries(queryClient);\n feedback.success(\"Component disabled\");\n },\n onError: e => {\n feedback.error(e);\n }\n }\n );\n};\n\nexport const useComponentActions = (args: GetComponentActionsArgs) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.ComponentActions, args.componentId],\n () => platformGateway.getComponentActions(args)\n );\n};\n\nexport const useComponentSettings = (args: ComponentActionPayload) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.ComponentSettings, args],\n () => platformGateway.getComponentSettings(args)\n );\n};\n\nexport const useComponentSetting = (args: GetComponentSettingArgs) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.ComponentSetting, args],\n () => platformGateway.getComponentSetting(args)\n );\n};\n\nexport const useCreateComponentSetting = (args: ComponentActionPayload) => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n Omit,\n HttpError,\n CreateSettingPayload\n >(payload => platformGateway.createComponentSettings(args, payload), {\n onSuccess: async () => {\n await invalidateComponentsQueries(queryClient);\n feedback.success(\"Component updated\");\n }\n });\n};\n\nexport const useUpdateComponentSetting = (args: UpdateSettingArgs) => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n payload => platformGateway.updateComponentSettings(args, payload),\n {\n onSuccess: async () => {\n await invalidateComponentsQueries(queryClient);\n feedback.success(\"Component updated\");\n }\n }\n );\n};\n\nexport const useComponentsRequests = (\n args: GetComponentsRequestsArgs,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.ComponentActionsRequests, args],\n () => platformGateway.getComponentsRequests(args),\n options\n );\n};\n\nexport const useComponentWorkflowRunInstance = (id: string) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.ComponentWorkflowRunInstance, id],\n async () => {\n try {\n return await platformGateway.getComponentWorkflowRunInstance(id);\n } catch (e) {\n if ((e as HttpError).httpStatusCode === HttpStatusCode.NotFound)\n return { workflowInstanceUrl: undefined };\n throw e;\n }\n }\n );\n};\n\nexport const useComponentManagerWorkflowRunInstance = (id: string) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.ComponentManagerWorkflowRunInstance, id],\n async () => {\n try {\n return await platformGateway.getComponentManagerWorkflowRunInstance(id);\n } catch (e) {\n if ((e as HttpError).httpStatusCode === HttpStatusCode.NotFound)\n return { workflowInstanceUrl: undefined };\n throw e;\n }\n }\n );\n};\n\nexport const useTenantTagQuery = (tenantId: string) => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.TenantTags, tenantId],\n () => platformGateway.getTenantTags(tenantId)\n );\n};\n\nexport const useAddTenantTag = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.addTenantTag,\n {\n onSuccess: async dto => {\n await queryClient.invalidateQueries([\n PltCacheKeys.TenantTags,\n dto.tenantId\n ]);\n await queryClient.invalidateQueries([PltCacheKeys.UsedTenantTags]);\n feedback.success(\"A new tag has been added successfully!\");\n }\n }\n );\n};\n\nexport const useDeleteTenantTag = () => {\n const { platformGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformGateway.deleteTenantTag,\n {\n onSuccess: async dto => {\n await queryClient.invalidateQueries([\n PltCacheKeys.TenantTags,\n dto.tenantId\n ]);\n await queryClient.invalidateQueries([PltCacheKeys.UsedTenantTags]);\n feedback.success(\"A tag has been deleted successfully!\");\n }\n }\n );\n};\n\nexport const useUsedTenantTagsQuery = () => {\n const { platformGateway } = useGateways();\n return useQuery(\n [PltCacheKeys.UsedTenantTags],\n () => platformGateway.getUsedTenantTags()\n );\n};\n","import { IDropdownOption } from \"@bps/fluent-ui\";\n\nimport { SiteComponentVersionDto } from \"@libs/api/gateways/sia/sia-ops-gateway.dtos\";\n\nexport class SiteComponentVersion {\n component: string;\n versions: IDropdownOption[];\n\n constructor(dto: SiteComponentVersionDto) {\n this.component = dto.component;\n const dropDownOptions: IDropdownOption[] = [];\n if (dto.versions !== undefined) {\n dto.versions.forEach(v => {\n dropDownOptions.push({ key: v.version, text: v.version });\n });\n }\n this.versions = dropDownOptions;\n }\n}\n","import { DateTime } from \"@bps/utils\";\nimport { ChangeLogDto } from \"@libs/api/types/common-dtos\";\n\nexport type AttendeeType = \"PATIENT\" | \"USER\" | \"CONTACT\";\n\nexport enum AppointmentStatusCode {\n Booked = \"BO\",\n Waiting = \"W\",\n WithProvider = \"WP\",\n Finalised = \"BILL\",\n Completed = \"CPL\",\n DidNotAttend = \"NA\",\n UrgentBooked = \"UBO\",\n UrgentWaiting = \"UW\"\n}\n\nexport enum CalendarEventStatus {\n Confirmed = \"CONFIRMED\",\n Cancelled = \"CANCELLED\"\n}\n\nexport interface BookingTenantSettings {\n appointmentConfirmationSettings?: AppointmentConfirmationSettings;\n eTag: string;\n changeLog: {\n createdDate?: DateTime;\n createdBy?: string;\n updatedDate?: DateTime;\n updatedBy?: string;\n };\n}\n\nexport type AppointmentReminderJob = {\n id: string;\n orgUnitId: string;\n jobName: string;\n jobSchedule: AppointmentReminderJobSchedule;\n appointmentReminderOptions: AppointmentReminderJobOptions;\n status: string;\n eTag: string;\n changeLog: {\n createdDate?: DateTime;\n createdBy?: string;\n updatedDate?: DateTime;\n updatedBy?: string;\n };\n};\n\nexport type AppointmentReminderJobRun = {\n id: string;\n jobId: string;\n calendarEventCount?: number;\n eTag: string;\n changeLog: {\n createdDate?: DateTime;\n createdBy?: string;\n updatedDate?: DateTime;\n updatedBy?: string;\n };\n};\n\nexport type AppointmentReminderJobOptions = {\n appointmentTypes: string[];\n sendBefore: number;\n templateId: string;\n};\n\nexport interface AppointmentReminderJobSchedule {\n daysOfWeek: number[];\n hour: number;\n minute: number;\n}\n\nexport enum BookedByTypeEnum {\n onlineBooking = \"OLB\",\n user = \"USR\"\n}\n\nexport enum CalendarEventType {\n Appointment = \"APPT\",\n Meeting = \"MEETING\",\n Unavailable = \"UNAVAILABLE\",\n TemporaryReservation = \"TEMPRESERVE\"\n}\n\n//can make type strong\nexport interface AppointmentConfirmationSettings {\n isActive: boolean;\n}\n\nexport interface AppointmentReminderJobDto\n extends Omit {\n changeLog: ChangeLogDto;\n}\n\nexport interface AppointmentReminderJobRunDto\n extends Omit {\n changeLog: ChangeLogDto;\n}\n\nexport interface BookingTenantSettingsDto\n extends Omit {\n changeLog: ChangeLogDto;\n}\n\nexport interface CalendarEventAttendeeDto {\n type: AttendeeType;\n attendeeId: string;\n attendeeStatus?: AppointmentStatusCode;\n cancellationReasonId?: string;\n cancellationText?: string;\n status?: CalendarEventStatus;\n cancellationDateTime?: string;\n}\n\nexport interface CalendarEventDto {\n id: string;\n startTime: string;\n endTime: string;\n type: CalendarEventType;\n attendees: CalendarEventAttendeeDto[];\n isPartOfRecurrence?: boolean;\n changeLog?: ChangeLogDto;\n orgUnitId: string;\n appointmentTypeId?: string;\n maxParticipants?: number;\n groupDescription?: string;\n appointmentStatus?: AppointmentStatusCode;\n bookedBy?: string;\n bookedByType?: BookedByTypeEnum;\n status?: CalendarEventStatus;\n}\n\nexport type CalendarEventReminderMessageDto = {\n id: string;\n orgUnitId: string;\n calendarEventReminderId?: string;\n content?: string;\n deliveryStatusCode?: string;\n deliveryStatusUpdatedDateTime?: string;\n replyStatusCode?: string;\n deliveryChannelCode?: string;\n outboundCommContentId?: string;\n deliveryAddress?: string;\n contactHasOptedOut?: boolean;\n eTag: string;\n changeLog?: ChangeLogDto;\n};\n\nexport type CalendarEventReminderDto = {\n id: string;\n outboundCommId?: string;\n deliveryStatusCode: string;\n replyStatusCode: string;\n calendarEventId: string;\n contactId: string;\n orgUnitId: string;\n eTag: string;\n changeLog?: ChangeLogDto;\n};\n\nexport interface CalendarEventReminderSearchDto {\n patientId: string;\n providerId: string;\n calendarEvent: CalendarEventDto;\n reminder: CalendarEventReminderDto;\n message: CalendarEventReminderMessageDto;\n}\n\nexport enum DateType {\n CalendarEvent = \"CalendarEvent\",\n Reply = \"Reply\",\n Sent = \"Sent\"\n}\n\nexport type CalendarEventReminderSearchArgs = {\n dateType: DateType;\n orgUnitId?: string | undefined;\n phoneNumber?: string | undefined;\n startDateTime?: Date | undefined;\n endDateTime?: Date | undefined;\n};\n\nexport interface CalendarEventReminderSearchArgsDto\n extends Omit<\n CalendarEventReminderSearchArgs,\n \"startDateTime\" | \"endDateTime\"\n > {\n startDateTime?: string | undefined;\n endDateTime?: string | undefined;\n}\n","import { stringify } from \"query-string\";\nimport { useQuery } from \"react-query\";\n\nimport {\n AppointmentReminderJob,\n AppointmentReminderJobRun,\n BookingTenantSettings,\n CalendarEventReminderSearchArgs,\n CalendarEventReminderSearchDto\n} from \"./ttm-booking-ops-gateway.dtos\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nexport const TtmBookingCacheKeys = {\n AppointmentReminderSearch: \"ttm-booking-appointmentremindersearch\",\n AppointmentReminderJobs: \"ttm-booking-appointmentreminderjobs\",\n AppointmentReminderJobRuns: \"ttm-booking-appointmentreminderjobruns\",\n BookingTenantSettings: \"ttm-booking-tenantsettings\"\n};\n\nexport const useAppointmentReminderJobs = (tenantId: string) => {\n const { ttmBookingOpsGateway } = useGateways();\n\n return useQuery(\n [TtmBookingCacheKeys.AppointmentReminderJobs, tenantId],\n async () => {\n return await ttmBookingOpsGateway.getAppointmentReminderJobs(tenantId);\n }\n );\n};\n\nexport const useAppointmentReminderJobRuns = (\n tenantId: string,\n jobId: string\n) => {\n const { ttmBookingOpsGateway } = useGateways();\n\n return useQuery(\n [TtmBookingCacheKeys.AppointmentReminderJobRuns, jobId],\n async () => {\n return await ttmBookingOpsGateway.getAppointmentReminderJobRuns(\n tenantId,\n jobId\n );\n }\n );\n};\n\nexport const useBookingTenantSettings = (tenantId: string) => {\n const { ttmBookingOpsGateway } = useGateways();\n\n return useQuery(\n [TtmBookingCacheKeys.BookingTenantSettings, tenantId],\n async () => {\n return await ttmBookingOpsGateway.getTenantSettings(tenantId);\n }\n );\n};\n\nexport const useAppointmentReminderSearch = (\n tenantId: string,\n searchArgs: CalendarEventReminderSearchArgs\n) => {\n const { ttmBookingOpsGateway } = useGateways();\n\n return useQuery(\n [\n TtmBookingCacheKeys.AppointmentReminderSearch,\n tenantId,\n stringify(searchArgs)\n ],\n async () => {\n return await ttmBookingOpsGateway.getCalendarEventRemindersBySearchArgs(\n tenantId,\n searchArgs\n );\n },\n {\n staleTime: 10000,\n enabled: !!searchArgs.startDateTime && !!searchArgs.endDateTime\n }\n );\n};\n","import { useQuery } from \"react-query\";\n\nimport { CommPreference } from \"./ttm-comms-ops-gateway.dtos\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nexport const TtmCommsCacheKeys = {\n CommPreferences: \"ttm-comms-commspreferences\"\n};\n\nexport const useCommPreferences = (tenantId: string) => {\n const { ttmCommsOpsGateway } = useGateways();\n\n return useQuery(\n [TtmCommsCacheKeys.CommPreferences, tenantId],\n async () => {\n return await ttmCommsOpsGateway.getCommsPreferenes(tenantId);\n }\n );\n};\n","import { useRootStore } from \"@stores/StoresProvider\";\nimport { cacheUpsertSingleItemInArray } from \"@libs/react-query/react-query-cache.utils\";\nimport { useMutation, useQuery, useQueryClient } from \"react-query\";\n\nimport { ApplicationType, Tenant } from \"../plt/plt-gateway.dtos\";\nimport {\n CustomerAccount,\n CustomerAccountApplication,\n CustomerAccountSearchArgs,\n CustomerAccountUser,\n CustomerAccountUserCreateArgs,\n ServiceAgreementDto,\n ServiceAgreementsArgs\n} from \"./cam-gateway.dtos\";\nimport { HttpError } from \"@bps/http-client\";\nimport { PltCacheKeys } from \"../plt/plt-gateway.hooks\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nexport const CamCacheKeys = {\n CustomerAccounts: \"customer-accounts\",\n CustomerAccount: \"customer-account\",\n CustomerAccountUsers: \"env-users\",\n CustomerAccountAllUsers: \"customer-users-all\",\n CustomerAccountApplications: \"env-applications\",\n CustomerServiceAgreements: \"env-service-agreements\"\n};\n\nexport const useCustomerAccountsQuery = (args: CustomerAccountSearchArgs) => {\n const { camGateway, platformGateway } = useGateways();\n\n return useQuery(\n [CamCacheKeys.CustomerAccounts, args],\n async () => {\n if ((args.crmId.replace(/\\D+/g, \"\").length ?? 0) < 2) {\n return [];\n } else {\n const customerAccounts = await camGateway.getCustomerAccounts(args);\n\n return Promise.all(\n customerAccounts.map(async customerAccount => {\n const tenants = await platformGateway.getTenantsByCrmId(\n customerAccount.crmId\n );\n return {\n ...customerAccount,\n tenants,\n caTenants: tenants.filter(\n t => t.application === ApplicationType.CAM\n )\n };\n })\n );\n }\n }\n );\n};\n\nexport const useCustomerAccountQuery = (crmId: string) => {\n const { camGateway, platformGateway } = useGateways();\n\n return useQuery(\n [CamCacheKeys.CustomerAccount, crmId],\n async () => {\n const [customerAccount, tenants] = await Promise.all([\n camGateway.getCustomerAccount(crmId),\n platformGateway.getTenantsByCrmId(crmId)\n ]);\n\n return {\n ...customerAccount,\n tenants,\n caTenants: tenants.filter(t => t.application === ApplicationType.CAM)\n };\n }\n );\n};\n\nexport const useCustomerAccountCreateMutation = (crmId: string) => {\n const { camGateway } = useGateways();\n\n const queryClient = useQueryClient();\n\n return useMutation<\n CustomerAccount,\n unknown,\n { crmId: string; name?: string }\n >(({ crmId, name }) => camGateway.createCustomerAccount(crmId, name), {\n onSuccess: async () => {\n queryClient.invalidateQueries([CamCacheKeys.CustomerAccount, crmId]);\n queryClient.invalidateQueries([\n CamCacheKeys.CustomerAccountApplications,\n crmId\n ]);\n }\n });\n};\n\nexport const useCreateCustomerAccountUser = () => {\n const { camGateway } = useGateways();\n\n const queryClient = useQueryClient();\n\n return useMutation<\n CustomerAccountUser,\n HttpError,\n CustomerAccountUserCreateArgs\n >(camGateway.createCustomerAccountUser, {\n onSuccess: async dto => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: CamCacheKeys.CustomerAccountAllUsers,\n item: dto,\n asFirstItem: true\n });\n }\n });\n};\n\nexport const useCustomerAccountUsersQuery = (crmId: string) => {\n const { camGateway } = useGateways();\n\n return useQuery(\n [CamCacheKeys.CustomerAccountUsers, crmId],\n async () => {\n return await camGateway.getCustomerAccountUsers(crmId);\n }\n );\n};\n\nexport const useCustomerAccountAllUsersQuery = (crmId: string) => {\n const { camGateway } = useGateways();\n\n return useQuery(\n [CamCacheKeys.CustomerAccountAllUsers, crmId],\n async () => {\n return await camGateway.getAllCustomerAccountUsers(crmId);\n }\n );\n};\n\nexport const useCustomerAccountApplicationsQuery = (crmId: string) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [CamCacheKeys.CustomerAccountApplications, crmId],\n async () => {\n const tenants = await platformGateway.getTenantsByCrmId(crmId);\n\n return tenants.map(tenant => {\n const customerAccountTenant = tenants.find(\n customerAccountTenant =>\n customerAccountTenant.id === tenant.customerTenantId\n );\n\n return {\n crmId: tenant.crmId,\n tenantId: tenant.id,\n tenantName: tenant.name,\n appType: tenant.application,\n customerAccountTenantId: customerAccountTenant?.id,\n customerAccountTenantName: customerAccountTenant?.name\n };\n });\n }\n );\n};\n\nexport const useServiceAgreements = (args: ServiceAgreementsArgs) => {\n const { camGateway } = useGateways();\n\n return useQuery(\n [CamCacheKeys.CustomerServiceAgreements, args],\n () => camGateway.getServiceAgreements(args)\n );\n};\n\nexport const useCustomerAccountReset = (tenantId: string, crmId: string) => {\n const { camGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n () => camGateway.resetCustomerAccount(tenantId),\n {\n onSuccess: async () => {\n feedback.success(\"Stripe Customer Account reset successfully!\");\n queryClient.invalidateQueries([\n PltCacheKeys.TenantStripeCustomer,\n tenantId\n ]);\n queryClient.invalidateQueries([PltCacheKeys.Tenants, tenantId]);\n queryClient.invalidateQueries([CamCacheKeys.CustomerAccount, crmId]);\n queryClient.invalidateQueries([\n CamCacheKeys.CustomerAccountApplications,\n crmId\n ]);\n },\n onError: () => {\n feedback.error(\n \"Error occurred while resetting the Stripe Customer Account!\"\n );\n }\n }\n );\n};\n","import { AxiosError } from \"axios\";\nimport { useRootStore } from \"@stores/StoresProvider\";\nimport { cacheUpsertSingleItemInArray } from \"@libs/react-query/react-query-cache.utils\";\nimport {\n ApplicationCreateRequest,\n ApplicationUpdateRequest,\n CallbackCreateRequest,\n CallbackDto,\n CallbackTypesDto,\n CallbackTypesUpdateRequest,\n CallbackUpdateRequest,\n CertificateCreateRequest,\n CertificateDto,\n CertificateIdentifier,\n ConsentCreateRequest,\n ConsentPatchRequest,\n ConsentUpdateRequest,\n TenantConsentArgs,\n TenantSettingDto,\n TenantSettingUpdateRequest\n} from \"@libs/api/gateways/plt-integrators/plt-integrators-gateway.dtos\";\nimport { useMutation, useQuery, useQueryClient } from \"react-query\";\n\nimport { OrgUnitArgs, OrgUnitDto } from \"../plt/plt-gateway.dtos\";\nimport {\n ApplicationArgs,\n ApplicationCloudApplicationDto,\n ApplicationDto,\n CloudApplicationScopeDto,\n CloudApplicationScopeUpdateRequest,\n CloudApplicationSecretCreateRequest,\n CloudApplicationSecretDeleteRequest,\n CloudApplicationSecretDto,\n ConsentDto\n} from \"./plt-integrators-gateway.dtos\";\nimport { HttpError } from \"@bps/http-client\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nexport const PltIntegratorsCacheKeys = {\n Applications: \"plt-integ-applications\",\n Application: \"plt-integ-application\",\n GatewayScopes: \"plt-integ-gateway-scopes\",\n callbackTypes: \"callback-types\",\n Certificates: \"plt-integ-certificates\",\n Certificate: \"plt-integ-certificate\",\n TenantSetting: \"plt-integ-tenant-setting\",\n Consent: \"plt-integ-tenant-consent\",\n Callback: \"plt-integ-tenant-callback\"\n};\n\nexport const useApplicationsQuery = (tenantId: string) => {\n const { platformIntegratorsGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.Applications, tenantId],\n async () => {\n const applications = await platformIntegratorsGateway.getApplications(\n tenantId\n );\n return applications.sort((left, right) =>\n left.changeLog!.createdDate!.localeCompare(\n right.changeLog!.createdDate!\n )\n );\n }\n );\n};\n\nexport const useApplicationQuery = (args: ApplicationArgs) => {\n const { platformIntegratorsGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.Application, args],\n async () => {\n return await platformIntegratorsGateway.getApplication(args);\n }\n );\n};\n\nexport const useGatewayScopesQuery = () => {\n const { platformIntegratorsGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.GatewayScopes],\n async () => {\n return await platformIntegratorsGateway.getGatewayScopes();\n }\n );\n};\n\nexport const useUpdateApplicationScopes = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.updateApplicationScopes,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Application,\n { applicationId: request.applicationId, tenantId: request.tenantId }\n ]);\n feedback.success(\"Scopes have been updated\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useCreateApplicationSecret = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n CloudApplicationSecretDto,\n HttpError,\n CloudApplicationSecretCreateRequest\n >(platformIntegratorsGateway.createApplicationSecret, {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Application,\n { applicationId: request.applicationId, tenantId: request.tenantId }\n ]);\n feedback.success(\"Secret has been created\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n });\n};\n\nexport const useDeleteApplicationSecret = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.deleteApplicationSecret,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Application,\n { applicationId: request.applicationId, tenantId: request.tenantId }\n ]);\n feedback.success(\"Secret has been deleted\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useCreateApplication = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.createApplication,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n [PltIntegratorsCacheKeys.Applications, request.tenantId]\n ]);\n feedback.success(\"Application has been created\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useUpdateApplication = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.patchApplication,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Applications,\n request.tenantId\n ]);\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Application,\n { applicationId: request.applicationId, tenantId: request.tenantId }\n ]);\n feedback.success(\"Application has been updated\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\n//Callback Type\nexport const useCallbackTypes = () => {\n const { platformIntegratorsGateway } = useGateways();\n return useQuery(\n [PltIntegratorsCacheKeys.callbackTypes],\n async () => {\n return await platformIntegratorsGateway.getCallbackTypes();\n }\n );\n};\n\nexport const useCallbackTypesQuery = () => {\n const { platformIntegratorsGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.callbackTypes],\n async () => {\n const callbackTypes = await platformIntegratorsGateway.getCallbackTypes();\n return callbackTypes.sort((left, right) =>\n left.changeLog!.createdDate!.localeCompare(\n right.changeLog!.createdDate!\n )\n );\n }\n );\n};\n\nexport const useUpdateCallbackType = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.patchCallbackTypes,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.callbackTypes,\n { code: request.code }\n ]);\n feedback.success(\"CallbackType has been updated\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useCertificatesQuery = (tenantId: string) => {\n const { platformIntegratorsGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.Certificates, tenantId],\n async () => {\n const certificates = await platformIntegratorsGateway.getCertificates(\n tenantId\n );\n return certificates.sort((left, right) =>\n left.changeLog!.createdDate!.localeCompare(\n right.changeLog!.createdDate!\n )\n );\n }\n );\n};\n\nexport const useCertificateQuery = (request: CertificateIdentifier) => {\n const { platformIntegratorsGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.Certificate, request],\n async () => {\n return await platformIntegratorsGateway.getCertificate(request);\n }\n );\n};\n\nexport const useCreateCertificate = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.createCertificate,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Certificates,\n request.tenantId\n ]);\n feedback.success(\"Certificate has been created\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useUpdateCertificate = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.updateCertificate,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Certificate,\n request\n ]);\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Certificates,\n request.tenantId\n ]);\n feedback.success(\"Certificate has been updated\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useDeleteCertificate = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.deleteCertificate,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Certificate,\n request\n ]);\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Certificates,\n request.tenantId\n ]);\n feedback.success(\"Certificate has been deleted\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useDeployCertificateToGateway = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.deployCertificateToGateway,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Certificate,\n request\n ]);\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Certificates,\n request.tenantId\n ]);\n feedback.success(\"Certificate has been deployed to gateway\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useRemoveCertificateFromGateway = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.removeCertificateFromGateway,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Certificate,\n request\n ]);\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.Certificates,\n request.tenantId\n ]);\n feedback.success(\"Certificate has been removed from gateway\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useUpdateTenantSetting = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.updateTenantSetting,\n {\n onSuccess: async (dto, request) => {\n queryClient.invalidateQueries([\n PltIntegratorsCacheKeys.TenantSetting,\n request.tenantId\n ]);\n feedback.success(\"Tenant setting has been updated\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useTenantSettingQuery = (tenantId: string) => {\n const { platformIntegratorsGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.TenantSetting, tenantId],\n async () => {\n return await platformIntegratorsGateway.getTenantSetting(tenantId);\n }\n );\n};\n\nexport const useOrgUnitsQuery = (args: OrgUnitArgs) => {\n const { platformGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.Consent],\n async () => {\n return await platformGateway.getOrgUnits(args);\n }\n );\n};\n\nexport const useConsentsQuery = (tenantId: string) => {\n const { platformIntegratorsGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.Consent, tenantId],\n async () => {\n const consents = await platformIntegratorsGateway.getConsents(tenantId);\n return consents.sort((left, right) =>\n left.changeLog!.createdDate!.localeCompare(\n right.changeLog!.createdDate!\n )\n );\n }\n );\n};\n\nexport const useConsentQuery = (args: TenantConsentArgs) => {\n const { platformIntegratorsGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.Consent, args],\n () => {\n return platformIntegratorsGateway.getConsent(args);\n }\n );\n};\n\nexport const useCreateConsent = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.createTenantConsent,\n {\n onSuccess: async (dto, request) => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltIntegratorsCacheKeys.Consent, request.tenantId],\n item: dto\n });\n feedback.success(\"Tenant Consent has been created\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useUpdateConsent = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.updateTenantConsent,\n {\n onSuccess: async (dto, request) => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltIntegratorsCacheKeys.Consent, request.tenantId],\n item: dto\n });\n feedback.success(\"Tenant Consent has been created\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const usePatchConsentLocation = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n ConsentDto,\n HttpError,\n ConsentPatchRequest,\n TenantConsentArgs\n >(platformIntegratorsGateway.patchTenantConsentLocation, {\n onSuccess: (dto, request) => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltIntegratorsCacheKeys.Consent, request.tenantId],\n item: dto\n });\n feedback.success(\"Location has been removed\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n });\n};\n\nexport const useCallbacksQuery = (tenantId: string) => {\n const { platformIntegratorsGateway } = useGateways();\n\n return useQuery(\n [PltIntegratorsCacheKeys.Callback, tenantId],\n async () => {\n const callbacks = await platformIntegratorsGateway.getCallbacks(tenantId);\n return callbacks.sort((left, right) =>\n left.changeLog!.createdDate!.localeCompare(\n right.changeLog!.createdDate!\n )\n );\n }\n );\n};\n\nexport const useCreateCallback = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.createCallback,\n {\n onSuccess: async (dto, request) => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltIntegratorsCacheKeys.Callback, request.tenantId],\n item: dto\n });\n feedback.success(\"Callback has been created\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n\nexport const useUpdateCallback = () => {\n const { platformIntegratorsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n platformIntegratorsGateway.updateCallback,\n {\n onSuccess: async (dto, request) => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltIntegratorsCacheKeys.Callback, request.tenantId],\n item: dto\n });\n feedback.success(\"Callback has been updated\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n","import { ChangeLogDto } from \"@libs/api/types/common-dtos\";\n\nexport interface ApplicationDto {\n id: string;\n name: string;\n isEnabled: boolean;\n ipRanges?: IpRangeDto[];\n changeLog: ChangeLogDto;\n}\n\nexport interface ApplicationCloudApplicationDto {\n id: string;\n name: string;\n isEnabled: boolean;\n ipRanges?: IpRangeDto[];\n cloudApplication: CloudApplicationDto;\n changeLog: ChangeLogDto;\n}\n\nexport interface CloudApplicationScopeDto {\n id: string;\n value: string;\n description: string;\n}\n\nexport interface CloudApplicationDto {\n id: string;\n tenantId: string;\n secrets: CloudApplicationSecretDto[];\n scopes: string[];\n}\n\nexport interface CloudApplicationSecretDto {\n id: string;\n secretText: string;\n displayName: string;\n startDateTime?: string;\n endDateTime?: string;\n}\n\nexport interface IpRangeDto {\n ipRangeBegin?: string;\n ipRangeEnd?: string;\n isInactive: boolean;\n}\n\nexport interface ApplicationArgs {\n applicationId: string;\n tenantId: string;\n}\n\nexport interface CloudApplicationScopeUpdateRequest {\n applicationId: string;\n tenantId: string;\n scopes: string[];\n}\n\nexport interface CloudApplicationSecretCreateRequest {\n applicationId: string;\n tenantId: string;\n secret: CloudApplicationSecret;\n}\n\nexport interface CloudApplicationSecretDeleteRequest {\n applicationId: string;\n tenantId: string;\n id: string;\n}\n\nexport interface CloudApplicationSecret {\n displayName: string;\n startDateTime: Date;\n endDateTime: Date;\n}\n\nexport interface ApplicationCreateRequest {\n tenantId: string;\n name: string;\n ipRanges?: IpRangeDto[];\n}\n\nexport interface ApplicationUpdateRequest {\n applicationId: string;\n tenantId: string;\n name: string;\n isEnabled: boolean;\n ipRanges?: IpRangeDto[];\n}\n\nexport interface CallbackTypesDto {\n code: string;\n description?: string;\n ipRanges?: IpRangeDto[];\n changeLog: ChangeLogDto;\n}\n\nexport interface CallbackTypesUpdateRequest {\n code: string;\n description?: string;\n ipRanges?: IpRangeDto[];\n}\n\nexport interface CertificateDto {\n id: string;\n content: string;\n isDeployedToApimAppGateway: boolean;\n metadata?: CertificateMetadataDto;\n changeLog: ChangeLogDto;\n}\n\nexport interface CertificateMetadataDto {\n friendlyName: string;\n subject: string;\n issuer: string;\n notAfter: string;\n notBefore: string;\n keyExchangeAlgorithm: string;\n version: string;\n}\n\nexport interface CertificateCreateRequest {\n tenantId: string;\n content: string;\n}\n\nexport interface CertificateUpdateRequest {\n id: string;\n tenantId: string;\n content: string;\n}\n\nexport interface CertificateIdentifier {\n id: string;\n tenantId: string;\n}\n\nexport interface TenantSettingDto {\n value?: TenantSettingValueDto;\n changeLog: ChangeLogDto;\n}\n\nexport interface TenantSettingValueDto {\n allowCertificateFromTenantId?: string;\n}\n\nexport interface TenantSettingUpdateRequest {\n tenantId: string;\n allowCertificateFromTenantId?: string;\n}\n\nexport interface ConsentDto {\n id: string;\n applicationId: string;\n isEnabled: boolean;\n hasAllLocationAccess: boolean;\n locations: string[];\n changeLog: ChangeLogDto;\n}\n\nexport interface ConsentLocation {\n locationId: string;\n locationName?: string;\n}\n\nexport interface ConsentPatchRequest {\n locations: string[];\n tenantId: string;\n id: string;\n}\n\nexport interface TenantConsentArgs {\n tenantConsentId: string;\n tenantId: string;\n}\n\nexport enum HierarchyTypes {\n Location = \"L\",\n Practice = \"P\",\n Department = \"D\",\n Group = \"G\"\n}\n\nexport interface ConsentCreateRequest {\n tenantId: string;\n applicationId: string;\n hasAllLocationAccess: boolean;\n isEnabled: boolean;\n}\n\nexport interface ConsentUpdateRequest {\n tenantId: string;\n applicationId: string;\n hasAllLocationAccess: boolean;\n isEnabled: boolean;\n tenantConsentId: string;\n}\n\nexport interface CallbackDto {\n tenantId: string;\n id: string;\n key: string;\n type: string;\n isEnabled: boolean;\n locationId: string;\n userId: string;\n propertyBag: string;\n changeLog: ChangeLogDto;\n}\n\nexport interface CallbackCreateRequest {\n tenantId: string;\n type: string;\n key: string;\n locationId: string;\n userId: string;\n propertyBag: string;\n isEnabled: boolean;\n}\n\nexport interface CallbackUpdateRequest {\n id: string;\n tenantId: string;\n type: string;\n key: string;\n locationId: string;\n userId: string;\n propertyBag: string;\n isEnabled: boolean;\n}\n\nexport interface CallbackFilterRequest {\n tenantId: string;\n key?: string;\n isEnabled?: boolean;\n}\n","import { useRootStore } from \"@stores/StoresProvider\";\nimport {\n cacheDeleteSingleItemInArray,\n cacheUpsertSingleItemInArray\n} from \"@libs/react-query/react-query-cache.utils\";\nimport {\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient\n} from \"react-query\";\n\nimport { OutboundEmailAudit } from \"./models/OutboundEmailAudit\";\nimport { OutboundSmsAudit } from \"./models/OutboundSmsAudit\";\n\nimport { HttpError } from \"@bps/http-client\";\nimport { PagingResponse } from \"@libs/paging/paging-response.type\";\nimport {\n AddMessageCreditsEventDto,\n CreateOutboundEmailRequestArgs,\n CreateOutboundSmsRequestArgs,\n MessageCreditsBalance,\n MessageCreditsEvent,\n OutboundEmailAuditArgs,\n OutboundEmailRequest,\n OutboundSmsAuditArgs,\n OutboundSmsRequest\n} from \"@libs/api/gateways/plt-comms/plt-comms-gateway.dtos\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nexport const PltCommsCacheKeys = {\n MessageCreditsEvents: \"message-credits-events\",\n MessageCreditsBalances: \"message-credits-balances\",\n OutboundSmsAudit: \"outbound-sms-audit\",\n OutboundEmailAudit: \"outbound-email-audit\"\n};\n\n// MessageCreditsEvents/Balances\n\nexport const useMessageCreditsBalances = (tenantId: string) => {\n const { pltCommsOpsGateway } = useGateways();\n return useQuery(\n [PltCommsCacheKeys.MessageCreditsBalances, tenantId],\n async () => {\n return await pltCommsOpsGateway.getMessageCreditsBalances(tenantId);\n }\n );\n};\n\nexport const useMessageCreditsEvents = (tenantId: string) => {\n const { pltCommsOpsGateway } = useGateways();\n return useQuery(\n [PltCommsCacheKeys.MessageCreditsEvents, tenantId],\n () =>\n pltCommsOpsGateway.getMessageCreditsEvents(\n tenantId\n // , filter\n )\n );\n};\n\nexport const useAddMessageCreditsEvent = () => {\n const { pltCommsOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n pltCommsOpsGateway.addMessageCreditsEvents,\n {\n onSuccess: async dto => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [PltCommsCacheKeys.MessageCreditsEvents, dto.tenantId],\n item: dto\n });\n\n //would prefer to Delete/Clear & Refetch Balances\n cacheDeleteSingleItemInArray({\n queryClient,\n queryKey: [PltCommsCacheKeys.MessageCreditsBalances, dto.tenantId],\n id: dto.tenantId\n });\n feedback.success(\n \"A new message credits event has been added successfully!\"\n );\n }\n }\n );\n};\n\nexport const useOutboundEmailAuditQuery = (args?: OutboundEmailAuditArgs) => {\n const { pltCommsOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n\n return useQuery>(\n [PltCommsCacheKeys.OutboundEmailAudit, args],\n async () => {\n // Only send request for emails if we have started to input filters\n if (!args) {\n return {} as PagingResponse;\n }\n return await pltCommsOpsGateway.getOutboundEmailAudits(args);\n },\n {\n onError: (error: Error) => {\n feedback.error(error.message.replace(/\\/n/g, \" \"));\n }\n }\n );\n};\n\nexport const useOutboundSmsAuditQuery = (args: OutboundSmsAuditArgs) => {\n const { pltCommsOpsGateway } = useGateways();\n\n return useInfiniteQuery, HttpError>(\n [PltCommsCacheKeys.OutboundSmsAudit, args],\n async page => {\n return await pltCommsOpsGateway.getOutboundSmsAudits(\n args,\n page.pageParam ?? 1\n );\n },\n {\n getNextPageParam: lastPage => lastPage.next\n }\n );\n};\n\nexport const useCreateOutboundSmsRequest = () => {\n const { pltCommsOpsGateway } = useGateways();\n return useMutation<\n OutboundSmsRequest,\n HttpError,\n CreateOutboundSmsRequestArgs\n >(pltCommsOpsGateway.createOutboundSmsRequest);\n};\n\nexport const useCreateOutboundEmailRequest = () => {\n const { pltCommsOpsGateway } = useGateways();\n return useMutation<\n OutboundEmailRequest,\n HttpError,\n CreateOutboundEmailRequestArgs\n >(pltCommsOpsGateway.createOutboundEmailRequest);\n};\n","import { ChangeLogDto } from \"../../types/common-dtos\";\n\nimport { DateTime } from \"@bps/utils\";\n\nexport interface MessageCreditsBalanceDto\n extends Omit {\n changeLog: ChangeLogDto;\n}\n\nexport interface MessageCreditsEventDto\n extends Omit {\n changeLog: ChangeLogDto;\n}\n\nexport interface AddMessageCreditsEventDto\n extends Omit {}\n\nexport interface MessageCreditsBalance {\n id: string;\n tenantId: string;\n units: number;\n source?: string;\n details?: string;\n eventId?: string;\n changeLog: {\n createdDate?: DateTime;\n createdBy?: string;\n updatedDate?: DateTime;\n updatedBy?: string;\n };\n}\n\nexport interface MessageCreditsEvent {\n id: string;\n tenantId: string;\n units: number;\n source?: string;\n details?: string;\n changeLog: {\n createdDate?: DateTime;\n createdBy?: string;\n updatedDate?: DateTime;\n updatedBy?: string;\n };\n}\n\nexport interface OutboundSmsAuditDto {\n id: string;\n outboundSmsId: string;\n content: OutboundSmsAuditContentDto;\n vendorCode: SmsVendor;\n changeLog: ChangeLogDto;\n outboundSmsAuditType: OutboundSmsAuditType;\n}\n\nexport interface OutboundEmailAuditDto {\n id: string;\n sourceTenantId: string;\n sourceId: string;\n subject: string;\n to: string;\n etag: string;\n changeLog: ChangeLogDto;\n}\n\nexport interface OutboundEmailAuditArgs {\n searchTerm?: string;\n startDate?: Date;\n endDate?: Date;\n}\n\ninterface OutboundSmsAuditContentDto {\n request: {\n body: string;\n };\n response: {\n body: string;\n statusCode: string;\n };\n}\nexport interface OutboundSmsAuditArgs {\n phone?: string;\n tenantId?: string;\n fromDate?: Date;\n toDate?: Date;\n}\n\nexport enum OutboundSmsAuditType {\n SmsRequest = \"SMSREQUEST\",\n SmsCallback = \"SMSCALLBACK\"\n}\n\nexport interface CreateOutboundSmsRequestArgs {\n sourceTenantId: string;\n phone: string;\n text: string;\n}\n\nexport interface OutboundSmsRequest {\n id: string;\n phone: string;\n text: string;\n sourceTenantId: string;\n sourceId: string;\n}\n\nexport interface CreateOutboundEmailRequestArgs {\n sourceTenantId: string;\n to: string;\n subject: string;\n body: string;\n}\n\nexport interface OutboundEmailRequest {\n id: string;\n to: string;\n subject: string;\n body: string;\n sourceTenantId: string;\n sourceId: string;\n}\n\nenum SmsVendor {\n MessageMedia = \"MessageMedia\"\n}\n\n// Source: https://support.messagemedia.com/hc/en-us/articles/4413635760527-Messaging-API\nexport const MessageMediaDeliveryReportErrorCodeMap = {\n \"101\": \"Message being processed by the gateway.\",\n \"102\":\n \"Message is being rerouted to a different provider after failing via the first provider.\",\n \"151\": \"Message held for screening.\",\n \"200\": \"Message submitted to downstream provider for delivery.\",\n \"210\": \"Message accepted by downstream provider.\",\n \"211\": \"Message is enroute for delivery by provider.\",\n \"212\": \"Message submitted. Delivery pending.\",\n \"213\": \"Message scheduled for delivery by downstream provider.\",\n \"220\": \"Message delivered.\",\n \"221\": \"Message delivered to the handset.\",\n \"320\": \"Message validity period has expired (prior to submission).\",\n \"401\": \"Message validity period has expired (before delivery).\",\n \"301\": \"Usage threshold reached. Message discarded.\",\n \"302\": \"Destination address blocked. Message discarded.\",\n \"303\": \"Source address blocked. Message discarded.\",\n \"304\": \"Message dropped. Contact support.\",\n \"305\": \"Message discarded due to duplicate detection.\",\n \"402\": \"Message rejected by downstream provider.\",\n \"403\": \"Message skipped by downstream provider.\",\n \"410\": \"Invalid source address.\",\n \"411\": \"Invalid destination address.\",\n \"412\": \"Destination address blocked.\",\n \"413\": \"SMS service unavailable on destination.\",\n \"414\": \"Destination unreachable.\",\n \"330\": \"Gateway failure.\",\n \"331\": \"Message discarded.\",\n \"332\": \"No available route to destination.\",\n \"333\": \"Source address unsupported for this destination.\",\n \"400\": \"Message failed; undeliverable.\",\n \"405\": \"Message cancelled or deleted by provider.\"\n};\n","export enum ValidationMessages {\n required = \"Required.\",\n positiveNumber = \"Please enter a number greater than 0\",\n email = \"Please enter a valid email.\",\n ipRange = \"Please enter a valid IP range.\",\n guid = \"Does not match GUID pattern.\"\n}\n","export const IP_REGEX = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\nexport const NUMBER_FORMAT_REGEX = /^\\d+\\.\\d{1,3}(\\.\\d{1,3})*$/;\nexport const DECIMAL_NUMBER_REGEX = /^(\\d+(\\.\\d{1,5})?)$/;\nexport const PIN_LENGTH = 6;\n","export type guid = string;\ntype NullableGuid = guid | null | undefined;\n\nexport class Guid {\n public static readonly empty = \"00000000-0000-0000-0000-000000000000\";\n public static isGuid = (value: NullableGuid) => {\n if (value == null || value.length < 32) return false;\n\n const naked = this.toNaked(value);\n return naked!.length === 32 && /^[\\da-f]+$/i.test(naked!);\n };\n\n public static toNaked = (id: guid) =>\n id ? id.replace(/[{}-]/g, \"\").toLowerCase() : null;\n\n public static areEqual = (left: guid, right: guid) =>\n this.toNaked(left) === this.toNaked(right);\n\n public static isNullOrEmpty = (id: guid): boolean => {\n return id == null || !/[^0]/.test(this.toNaked(id)!);\n };\n}\n","import { ChangeLogDto, RefDataDto } from \"../../types/common-dtos\";\n\n// This enumeration needs to align with the BpId definition\n// https://dev.azure.com/bpcloud-dev/BpCloud/_git/Bps.Platform.BpId?path=/Bps.Platform.BpId.System.Business/Constants/SingInTypes.cs\nexport enum SignInTypeKeys {\n email = \"emailAddress\",\n federated = \"federated\"\n}\n\n// This enumeration needs to align with the BpId definition\n// https://dev.azure.com/bpcloud-dev/BpCloud/_git/Bps.Platform.BpId?path=/Bps.Platform.BpId.System.Business/Constants/Issuers.cs\nexport enum IssuerType {\n bpCloudRemoteAuth = \"bpcloud-remote-authn\"\n}\n\nexport interface MfaMethodDto {\n mfaMethod: string;\n name: string;\n value: string;\n}\n\ntype SignInType = \"emailAddress\" | \"userPrincipalName\" | \"federated\";\n\nexport interface BpIdUserDto {\n id: string;\n signInEmail: string;\n firstName: string;\n lastName: string;\n userPrincipalName: string;\n displayName: string;\n accountEnabled: boolean;\n createdDate?: string;\n creationType: string;\n deletedDate?: string;\n lastPasswordChangeDate?: string;\n lastPinCodeChangeDate?: string;\n userType: string;\n signInIdentities: {\n signInType: SignInType;\n issuer: string;\n issuerAssignedId: string;\n }[];\n otherMails?: string[];\n mfaMethods?: MfaMethodDto[];\n}\n\nexport interface BpIdUserSignInLogArgs {\n userId?: string;\n startDate?: Date | undefined;\n endDate?: Date | undefined;\n pageLength?: number;\n nextPageToken?: string;\n}\n\nexport interface BpIdUserSignInLogStatus {\n additionalDetails: string;\n errorCode: number;\n failureReason: string;\n}\n\nexport interface BpIdUserSignInLogDeviceDetail {\n browser: string;\n deviceId: string;\n displayName: string;\n isCompliant: boolean;\n isManaged: boolean;\n operatingSystem: string;\n trustType: string;\n}\n\nexport interface BpIdUserSignInLog {\n id: string;\n appDisplayName: string;\n appId: string;\n clientAppUsed: string;\n correlationId: string;\n createdDateTime: string;\n ipAddress: string;\n resourceDisplayName: string;\n resourceId: string;\n userDisplayName: string;\n userId: string;\n userPrincipalName: string;\n status: BpIdUserSignInLogStatus;\n deviceDetail: BpIdUserSignInLogDeviceDetail;\n}\n\nexport interface BpIdAuditLogArgs {\n startDate?: Date | undefined;\n endDate?: Date | undefined;\n pageLength?: number;\n nextPageToken?: string;\n}\n\nexport interface BpIdAuditLog {\n id: string;\n activityDateTime: string;\n activityDisplayName: string;\n servicePrincipalName: string;\n category: string;\n correlationId: string;\n loggedByService: string;\n operationType: string;\n result: string;\n resultReason: string;\n additionalDetails: string;\n}\n\nexport interface UserGroup {\n id: string;\n displayName: string;\n description: string;\n mailEnabled: boolean;\n securityIdentifier: string;\n securityEnabled: boolean;\n createdDateTime: string;\n}\n\nexport interface UserGroupDto\n extends Omit<\n UserGroup,\n | \"createdDateTime\"\n | \"securityIdentifier\"\n | \"securityEnabled\"\n | \"mailEnabled\"\n | \"description\"\n > {}\n\nexport interface UserGroupSearch {\n groups: UserGroup[];\n tooManyResults: boolean;\n}\n\nexport interface BpIdUsersSearchArgs {\n profileIdPrefix?: string;\n objectId?: string;\n givenNamePrefix?: string;\n surnamePrefix?: string;\n email?: string;\n mobile?: string;\n userPrincipalNamePrefix?: string;\n}\n\nexport interface ResultsResponse {\n records?: T[];\n tooManyResults?: boolean;\n hasError?: boolean;\n errorMessage?: string;\n}\n\nexport enum InviteStatus {\n Pending = \"Pending\",\n Expired = \"Expired\",\n Redeemed = \"Redeemed\"\n}\n\nexport interface UserInviteDto {\n id: string;\n code?: string;\n shortLinkId?: string;\n isCancelled?: boolean;\n redeemedOn?: string;\n fullUrl?: string;\n shortUrl?: string;\n changeLog?: ChangeLogDto;\n isValid?: boolean;\n tenantId?: string;\n tenantName?: string;\n userId?: string;\n status?: InviteStatus;\n expiresAfter?: string;\n firstName?: string;\n lastName?: string;\n signInEmail?: string;\n signInBpIdUserId?: string;\n issuer?: string;\n issuerAssignedId?: string;\n groups?: string[];\n signInType: string;\n hasPin?: boolean;\n redirectUrl?: string;\n}\n\nexport interface UserInviteArgs\n extends Pick<\n UserInviteDto,\n | \"userId\"\n | \"tenantId\"\n | \"signInBpIdUserId\"\n | \"expiresAfter\"\n | \"firstName\"\n | \"lastName\"\n | \"signInEmail\"\n | \"issuer\"\n | \"issuerAssignedId\"\n | \"groups\"\n | \"signInType\"\n | \"redirectUrl\"\n > {\n generateShortLinkId?: boolean;\n useShortLinkPin?: boolean;\n shortLinkPin?: string;\n}\n\nexport interface UserInviteResponse {\n id: string;\n pin: string;\n}\n\nexport interface InvitationsArgs {\n tenantId?: string;\n userId?: string;\n name?: string;\n createdStartDate?: string;\n createdEndDate?: string;\n expiryStartDate?: string;\n expiryEndDate?: string;\n isExpired?: boolean;\n isRedeemed?: boolean;\n isCancelled?: boolean;\n sortField?: \"Firstname\" | \"ExpiresAfter\" | \"RedeemedOnDate\" | \"TenantName\";\n sortAscending?: boolean;\n // paging arguments\n limit?: number;\n pageParam?: number;\n}\n\nexport interface CloudApplicationsRefDataDto extends RefDataDto {\n primaryUrl?: string;\n isMultiTenant?: boolean;\n}\n","import { useRootStore } from \"@stores/StoresProvider\";\nimport {\n cacheDeleteSingleItemInArray,\n cacheUpsertSingleItemInArray\n} from \"@libs/react-query/react-query-cache.utils\";\nimport {\n BpIdUserDto,\n BpIdUserSignInLog,\n BpIdUserSignInLogArgs,\n BpIdAuditLog,\n BpIdAuditLogArgs,\n InvitationsArgs,\n ResultsResponse,\n BpIdUsersSearchArgs,\n UserGroupDto,\n UserGroupSearch,\n UserInviteArgs,\n UserInviteDto,\n UserInviteResponse,\n CloudApplicationsRefDataDto\n} from \"./bp-id.dtos\";\nimport {\n QueryClient,\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient\n} from \"react-query\";\nimport { HttpError } from \"@bps/http-client\";\nimport { UseQueryOptions } from \"react-query/types/react/types\";\nimport { useGateways } from \"@libs/api/gateways-context\";\nimport { PagingTableStorageResponse } from \"@libs/paging/paging-table-storage-response.type\";\nimport { PagingResponse } from \"@libs/paging/paging-response.type\";\nimport { PltCacheKeys } from \"../plt/plt-gateway.hooks\";\n\nexport const BpIdCacheKeys = {\n BpIdentities: \"bp-identities\",\n BpIdSignInLogs: \"bp-signinlogs\",\n BpIdAuditLogs: \"bp-auditlogs\",\n UserGroup: \"user-group\",\n UserGroups: \"user-groups\",\n BusinessUserGroups: \"business-user-groups\",\n Invitations: \"users-invitations\",\n CloudApplicationsRefData: \"cloud-applications-ref-data\"\n} as const;\n\nexport interface UserGroupMutationArgs {\n userId: string;\n groupId: string;\n}\n\nexport interface UpdateUserGroupsMutationArgs {\n userId: string;\n addGroupIds: string[];\n removeGroupIds: string[];\n}\nconst invalidateInvitationsQueries = (queryClient: QueryClient) => {\n const queries = queryClient.getQueryCache().getAll();\n const userSearchQuery = queries.filter(q =>\n q.queryKey.includes(BpIdCacheKeys.Invitations)\n );\n userSearchQuery.forEach(query => {\n queryClient.invalidateQueries(query);\n });\n};\n\nconst invalidateBpIdentitiesQueries = (queryClient: QueryClient) => {\n const queries = queryClient.getQueryCache().getAll();\n const userSearchQuery = queries.filter(q =>\n q.queryKey.includes(BpIdCacheKeys.BpIdentities)\n );\n\n const invalidateQueries = userSearchQuery.map(query =>\n queryClient.invalidateQueries(query)\n );\n return Promise.all(invalidateQueries);\n};\n\nexport const useDeleteUserMutation = () => {\n const { bpIdOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(bpIdOpsGateway.deleteUser, {\n onSuccess: async () => {\n await invalidateBpIdentitiesQueries(queryClient);\n feedback.success(\"User has been deleted!\");\n }\n });\n};\nexport const useBusinessUserSearch = (values?: BpIdUsersSearchArgs) => {\n const { bpIdOpsGateway } = useGateways();\n return useQuery, HttpError>(\n [BpIdCacheKeys.BpIdentities, values],\n async () => {\n return values\n ? await bpIdOpsGateway.postIdentitySearch(values)\n : { records: [], tooManyResults: false };\n },\n {\n enabled: Boolean(values)\n }\n );\n};\n\n// TODO: Add methods here for other API operations\n\n// Audit\n\nexport const useGetGroup = (groupId: string) => {\n const { bpIdOpsGateway } = useGateways();\n\n return useQuery(\n [BpIdCacheKeys.UserGroup, { groupId }],\n async () => {\n return await bpIdOpsGateway.getGroup(groupId);\n }\n );\n};\n\nexport const useGetAllGroups = () => {\n const { bpIdOpsGateway } = useGateways();\n\n return useQuery(\n [BpIdCacheKeys.UserGroups],\n async () => {\n return await bpIdOpsGateway.getAllGroups();\n }\n );\n};\n\nexport const useGetUserGroups = (userId: string) => {\n const { bpIdOpsGateway } = useGateways();\n\n return useQuery(\n [BpIdCacheKeys.BusinessUserGroups, userId],\n async () => {\n return await bpIdOpsGateway.getUserGroups(userId);\n }\n );\n};\n\nexport const useUpdateUserGroupsMutation = () => {\n const { bpIdOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ userId, addGroupIds, removeGroupIds }) =>\n bpIdOpsGateway.updateUserGroups(userId, addGroupIds, removeGroupIds),\n {\n onSuccess: async (_dto, args) => {\n await invalidateBpIdentitiesQueries(queryClient);\n await queryClient.invalidateQueries([\n BpIdCacheKeys.BusinessUserGroups,\n args.userId\n ]);\n feedback.success(\"User groups updated!\");\n },\n onError: error => {\n feedback.error(error);\n }\n }\n );\n};\n\nexport const useAddUserToGroupMutation = () => {\n const { bpIdOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ userId, groupId }) => bpIdOpsGateway.addUserToGroup(userId, groupId),\n {\n onSuccess: (dto, args) => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [BpIdCacheKeys.BusinessUserGroups, args.userId],\n item: dto\n });\n }\n }\n );\n};\n\nexport const useRemoveUserFromGroupMutation = () => {\n const { bpIdOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ userId, groupId }) =>\n bpIdOpsGateway.removeUserFromGroup(userId, groupId),\n {\n onSuccess: args => {\n cacheDeleteSingleItemInArray({\n queryClient,\n queryKey: [BpIdCacheKeys.BusinessUserGroups, args.userId],\n id: args.groupId\n });\n }\n }\n );\n};\n\nexport const useSendUserInvite = () => {\n const queryClient = useQueryClient();\n const { bpIdOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n return useMutation(\n bpIdOpsGateway.sendUserInvite,\n {\n onSuccess: () => {\n feedback.success(\"Invite has been sent!\");\n invalidateInvitationsQueries(queryClient);\n }\n }\n );\n};\n\nexport const useReSendUserInvite = () => {\n const { bpIdOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(bpIdOpsGateway.resendUserInvite, {\n onSuccess: () => {\n feedback.success(\"Invite has been re-sent!\");\n invalidateInvitationsQueries(queryClient);\n },\n onError: error => {\n feedback.error(error?.message);\n }\n });\n};\n\nexport const useCancelUserInvite = () => {\n const { bpIdOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(bpIdOpsGateway.cancelUserInvite, {\n onSuccess: () => {\n feedback.success(\"Invite has been canceled!\");\n invalidateInvitationsQueries(queryClient);\n },\n onError: error => {\n feedback.error(error?.message);\n }\n });\n};\n\nexport const useInvites = (args?: InvitationsArgs) => {\n const { bpIdOpsGateway } = useGateways();\n return useInfiniteQuery, HttpError>(\n [BpIdCacheKeys.Invitations, args],\n async page => {\n return await bpIdOpsGateway.fetchInvitations({\n ...args,\n pageParam: page.pageParam\n });\n },\n {\n getNextPageParam: lastPage => {\n return lastPage.next;\n }\n }\n );\n};\n\nexport const useCloudApplicationsRefData = () => {\n const { bpIdOpsGateway } = useGateways();\n return useQuery(\n [BpIdCacheKeys.CloudApplicationsRefData],\n bpIdOpsGateway.getCloudApplicationsRefData,\n { staleTime: Infinity, cacheTime: Infinity }\n );\n};\n\nexport const useLogoutAllSessions = () => {\n const { bpIdOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n return useMutation(\n bpIdOpsGateway.logoutAllSessions,\n {\n onSuccess: () => {\n feedback.success(\"All sessions logged out!\");\n }\n }\n );\n};\n\nexport const useBpIdUserDetails = (\n bpIdUserId: string,\n options?: Omit, \"queryKey\" | \"queryFn\">\n) => {\n const { bpIdOpsGateway } = useGateways();\n return useQuery(\n [BpIdCacheKeys.BpIdentities, bpIdUserId],\n () => bpIdOpsGateway.getUserDetails(bpIdUserId),\n options\n );\n};\n\nexport const useUserSignInLogs = (\n args: Pick\n) => {\n const { bpIdOpsGateway } = useGateways();\n return useInfiniteQuery<\n PagingTableStorageResponse,\n HttpError\n >(\n [BpIdCacheKeys.BpIdSignInLogs, args],\n context => {\n return bpIdOpsGateway.getUserSignInLogs({\n ...args,\n nextPageToken: context.pageParam\n });\n },\n {\n getNextPageParam: lastPage => {\n return lastPage.args.nextPageToken;\n }\n }\n );\n};\n\nexport const useAuditLogs = (\n args: Pick\n) => {\n const { bpIdOpsGateway } = useGateways();\n return useInfiniteQuery<\n PagingTableStorageResponse,\n HttpError\n >(\n [BpIdCacheKeys.BpIdAuditLogs, args],\n context => {\n return bpIdOpsGateway.getAuditLogs({\n ...args,\n nextPageToken: context.pageParam\n });\n },\n {\n getNextPageParam: lastPage => {\n return lastPage.args.nextPageToken;\n }\n }\n );\n};\n\nexport const useClearBpId = (tenantId: string, userId: string) => {\n const { bpIdOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n () => bpIdOpsGateway.userRemoveTenant(tenantId, userId),\n {\n onSuccess: async () => {\n await queryClient.invalidateQueries([PltCacheKeys.User, userId]);\n feedback.success(\"BpId cleared!\");\n }\n }\n );\n};\n","import { useRootStore } from \"@stores/StoresProvider\";\nimport { useMutation } from \"react-query\";\nimport {\n NotificationDto,\n AddNotificationDto\n} from \"./plt-notifications-gateway.dtos\";\nimport { HttpError } from \"@bps/http-client\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nexport const useAddNotification = () => {\n const { pltNotificationsOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n return useMutation(\n pltNotificationsOpsGateway.addNotification,\n {\n onSuccess: () => {\n feedback.success(\"Notification succesfully sent\");\n },\n onError: () => {\n feedback.error(\"Error sending notification\");\n }\n }\n );\n};\n\nexport const useBatchAddNotification = () => {\n const { pltNotificationsOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n return useMutation(\n pltNotificationsOpsGateway.batchAddNotification,\n {\n onSuccess: () => {\n feedback.success(\"Notifications successfully sent\");\n },\n onError: () => {\n feedback.error(\"Error sending notifications\");\n }\n }\n );\n};\n","import { ChangeLogDto } from \"../../types/common-dtos\";\n\nexport interface NotificationDto {\n id: string;\n tenantId: string;\n userId: string;\n title: string;\n description: string | undefined;\n type: NotificationType;\n priority: NotificationPriority;\n readDateTime?: string;\n changeLog: ChangeLogDto;\n eTag: string;\n}\n\nexport type AddNotificationDto = Omit<\n NotificationDto,\n \"id\" | \"eTag\" | \"changeLog\"\n>;\n\nexport enum NotificationType {\n System = \"System\"\n}\n\nexport enum NotificationPriority {\n Low = \"Low\",\n Normal = \"Normal\",\n High = \"High\"\n}\n","import { config } from \"@libs/config/config\";\n\nexport const stripeAccountBaseUrl = () => {\n return config.env === \"prod\"\n ? \"https://dashboard.stripe.com/\"\n : \"https://dashboard.stripe.com/test/\";\n};\n","import { useRootStore } from \"@stores/StoresProvider\";\nimport { guid } from \"@libs/common/guid\";\nimport { useMutation } from \"react-query\";\n\nimport { TtmFormsRefreshOptions } from \"./ttm-forms-ops-gateway.dtos\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nexport const usePostTtmFormsRefresh = (tenantId: guid) => {\n const { ttmFormsOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n\n return useMutation(\n (options: TtmFormsRefreshOptions) =>\n ttmFormsOpsGateway.requestRefresh(tenantId, options),\n {\n onSuccess: () => {\n feedback.success(\"Forms design refresh has been initiated.\");\n },\n onError: error => {\n feedback.error(error.message);\n }\n }\n );\n};\n","import { guid } from \"@libs/common/guid\";\nimport { useMutation, useQuery } from \"react-query\";\n\nimport {\n PowerBiDataset,\n TtmReportingSnapshotOptions\n} from \"./ttm-reporting-ops-gateway.dtos\";\nimport { useGateways } from \"@libs/api/gateways-context\";\nimport { useRootStore } from \"@stores/StoresProvider\";\n\nexport const useGetDatasets = () => {\n const { ttmReportingOpsGateway } = useGateways();\n\n return useQuery([], async () => {\n return await ttmReportingOpsGateway.getDatasets();\n });\n};\n\nexport const usePostTtmReportSnapshot = (tenantId: guid) => {\n const { ttmReportingOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n\n return useMutation(\n (options: TtmReportingSnapshotOptions) =>\n ttmReportingOpsGateway.postSnapshot(tenantId, options),\n {\n onSuccess: () => {\n feedback.success(\"Report data snapshot has been initiated.\");\n },\n onError: error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const usePostTtmReportBillingSnapshot = (tenantId: guid) => {\n const { ttmReportingOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n return useMutation(\n (options: TtmReportingSnapshotOptions) =>\n ttmReportingOpsGateway.postBillingSnapshot(tenantId, options),\n {\n onSuccess: () => {\n feedback.success(\"Report billing data snapshot has been initiated.\");\n },\n onError: error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const usePostTtmReportDataIngest = (tenantId: guid, type: string) => {\n const { ttmReportingOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n return useMutation(\n () => ttmReportingOpsGateway.postIngestData(tenantId, type),\n {\n onSuccess: () => {\n feedback.success(\"Report data ingestion has been initiated.\");\n },\n onError: error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const usePostDatasetRefresh = (datasetId: guid) => {\n const { ttmReportingOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n return useMutation(\n () => ttmReportingOpsGateway.postDatasetRefresh(datasetId),\n {\n onSuccess: () => {\n feedback.success(\"Dataset refresh has been initiated.\");\n },\n onError: error => {\n feedback.error(error.message);\n }\n }\n );\n};\n","import { useState } from \"react\";\nimport { useDebounce } from \"react-use\";\n\n/**\n * Simple hook that provides debounced updates to a value.\n *\n * @param liveValue The current 'live' value\n * @param delayMillis Debounce delay in milliseconds. Default is 1000.\n */\nexport const useDebouncedValue = (\n liveValue: T,\n delayMillis: number = 1000\n): T => {\n const [value, setValue] = useState(liveValue);\n useDebounce(() => setValue(liveValue), delayMillis, [liveValue]);\n\n return value;\n};\n","import { BpIdUsersSearchArgs } from \"@libs/api/gateways/bp-id/bp-id.dtos\";\nimport { useMutation, useQuery, useQueryClient } from \"react-query\";\nimport {\n ConsumerUser,\n ConsumerUserProfile,\n MobileAppSettings,\n ResultsResponse\n} from \"@libs/api/gateways/best-health/account/best-health-account-ops-gateway.dtos\";\nimport { useGateways } from \"@libs/api/gateways-context\";\nimport { HttpError } from \"@bps/http-client\";\n\nconst BestHealthAccountCacheKeys = {\n BhaProfile: \"bha-full-profile\",\n BhaProfiles: \"bha-profiles\",\n MobileAppSettings: \"bha-mobile-app-settings\",\n BhaIdentities: \"bha-identities\"\n};\n\nexport const useCUIdentitySearch = (values?: BpIdUsersSearchArgs) => {\n const { bestHealthAccountOpsGateway } = useGateways();\n return useQuery>(\n [BestHealthAccountCacheKeys.BhaProfiles, values],\n async () => {\n return values\n ? await bestHealthAccountOpsGateway.postIdentitySearch(values)\n : { records: [], tooManyResults: false };\n },\n {\n enabled: Boolean(values)\n }\n );\n};\n\nexport const useBhBannerMutation = () => {\n // @TODO Replace when api ready\n return useMutation(() => Promise.resolve(\"\"));\n};\n\nexport const useGetMobileAppSettings = () => {\n const { bestHealthAccountOpsGateway } = useGateways();\n\n return useQuery(\n [BestHealthAccountCacheKeys.MobileAppSettings],\n async () => {\n return await bestHealthAccountOpsGateway.getMobileAppSettings();\n }\n );\n};\n\nexport const usePutMobileAppSettings = () => {\n const { bestHealthAccountOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n updates => bestHealthAccountOpsGateway.putMobileAppSettings(updates),\n {\n onSuccess: async (response, updates) => {\n queryClient.setQueriesData(\n [BestHealthAccountCacheKeys.MobileAppSettings],\n (data: MobileAppSettings[]) => {\n const newData = [...data];\n const i = newData.findIndex(\n setting =>\n setting.mobileAppSettingsId === updates.mobileAppSettingsId\n );\n if (i && newData[i]) {\n newData[i] = {\n ...newData[i],\n ...response\n };\n }\n\n return newData;\n }\n );\n }\n }\n );\n};\n\nexport const usePostMobileAppSettings = () => {\n const { bestHealthAccountOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n updates => bestHealthAccountOpsGateway.postMobileAppSettings(updates),\n {\n onSuccess: async (response, updates) => {\n queryClient.setQueriesData(\n [BestHealthAccountCacheKeys.MobileAppSettings],\n (data: MobileAppSettings[]) => {\n const newData = [...data];\n const i = newData.findIndex(\n setting =>\n setting.mobileAppSettingsId === updates.mobileAppSettingsId\n );\n if (i && newData[i]) {\n newData[i] = {\n ...newData[i],\n ...response\n };\n }\n\n return newData;\n }\n );\n }\n }\n );\n};\n\nexport const useDeleteUserMutation = () => {\n const { bestHealthAccountOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n id => bestHealthAccountOpsGateway.deleteUser(id),\n {\n onSuccess: async (response: void, id) => {\n queryClient.setQueriesData(\n [BestHealthAccountCacheKeys.BhaProfiles],\n (data: ConsumerUserProfile[]) => {\n return data.filter(profile => profile.id !== id);\n }\n );\n }\n }\n );\n};\n\nexport const useConsumerUserProfileSearch = (search: string) => {\n const { bestHealthAccountOpsGateway } = useGateways();\n return useQuery>(\n [BestHealthAccountCacheKeys.BhaProfiles, search],\n async () => {\n return await bestHealthAccountOpsGateway.postProfileSearch(search);\n },\n {\n enabled: Boolean(search)\n }\n );\n};\n\nexport const useConsumerUser = (userName: string) => {\n const { bestHealthAccountOpsGateway } = useGateways();\n return useQuery(\n [BestHealthAccountCacheKeys.BhaIdentities, userName],\n async () => {\n return await bestHealthAccountOpsGateway.getIdentity(userName);\n },\n {\n enabled: Boolean(userName)\n }\n );\n};\n\nexport const useBhaProfile = (id: string) => {\n const { bestHealthAccountOpsGateway } = useGateways();\n return useQuery(\n [BestHealthAccountCacheKeys.BhaProfile, id],\n async () => {\n return await bestHealthAccountOpsGateway.getProfile(id);\n },\n {\n enabled: Boolean(id)\n }\n );\n};\n","export const MAINTENANCE_MODE = \"MaintenanceMode\";\nexport const MAINTENANCE_MODE_DESCRIPTION = \"MaintenanceModeDescription\";\nexport const VERSION_UPGRADE_MESSAGES = \"VersionUpgradeMessages\";\nexport const MINIMUM_VERSION_NUMBER = \"MinimumVersionNumber\";\n","import {\n InfiniteData,\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient,\n UseQueryOptions\n} from \"react-query\";\n\nimport { HttpError, HttpStatusCode, NotFoundError } from \"@bps/http-client\";\nimport { useGateways } from \"@libs/api/gateways-context\";\nimport {\n AddFieldDeviceDeploymentRingRequest,\n CommandResponse,\n CustomRJSFSchema,\n DeploymentRing,\n DeploymentRingCreateRequest,\n DeploymentRingFieldDevice,\n DeploymentRingUpdateRequest,\n DeviceCommand,\n DeviceConfigurationDiff,\n FieldDevice,\n FieldDeviceAuthAction,\n FieldDeviceAuthActionRequest,\n FieldDeviceClaim,\n FieldDeviceConfiguration,\n FieldDeviceDeploymentRingDetail,\n FieldDeviceDetails,\n FieldDeviceFilterArgs,\n FieldDeviceIdentifier,\n FieldDeviceProperty,\n FieldDeviceReportedConfig,\n FieldService,\n Rollout,\n RolloutCreateRequest,\n RolloutPackage,\n RolloutPackageCreateRequest,\n RolloutPackageDesiredConfig,\n RolloutPackageDesiredConfigCreateRequest,\n RolloutPackageDesiredConfigUpdateRequest,\n RolloutPackageUpdateRequest,\n RolloutUpdateRequest,\n SelectorArgs,\n SelectorCreateRequest,\n SelectorDto,\n SoftwarePackage,\n SoftwarePackageArgs,\n SoftwarePackageDefault,\n SoftwarePackageDefaultRequest,\n SoftwarePackageLog,\n SoftwarePackageLogArgs,\n SoftwarePackageVersion,\n SoftwarePackageVersionArgs,\n SoftwarePackageVersionConfig,\n SoftwarePublisher\n} from \"@libs/api/gateways/field/field-ops-gateway.dtos\";\nimport { RefDataDto } from \"@libs/api/types/common-dtos\";\nimport { guid } from \"@libs/common/guid\";\nimport { PagingResponse } from \"@libs/paging/paging-response.type\";\nimport {\n cacheDeleteSingleItemInArray,\n cacheUpsertSingleItemInArray\n} from \"@libs/react-query/react-query-cache.utils\";\nimport { useRootStore } from \"@stores/StoresProvider\";\n\nexport const FieldOpsCacheKeys = {\n FieldDevice: \"field-device\",\n FieldDeviceDetails: \"field-device-details\",\n FieldDevices: \"field-devices\",\n FieldServices: \"field-services\",\n DeploymentRing: \"deployment-ring\",\n DeploymentRings: \"deployment-rings\",\n Rollouts: \"rollouts\",\n Rollout: \"rollout\",\n RolloutPackages: \"rollout-packages\",\n RingMembers: \"ring-members\",\n FieldDeviceIdentifiers: \"field-device-identifiers\",\n FieldDeviceIdentifierHistory: \"field-device-identifier-history\",\n FieldDeviceProperties: \"field-device-properties\",\n FieldDeviceClaims: \"field-device-claims\",\n SoftwarePackages: \"software-packages\",\n SoftwarePublishers: \"software-publishers\",\n SoftwarePackageVersions: \"software-package-versions\",\n SoftwarePackageVersionsRollout: \"software-package-versions-rollout\",\n SoftwarePackageVersionConfig: \"software-package-version-config\",\n SoftwarePackageDefaults: \"software-package-defaults\",\n FieldDeviceAuthActions: \"field-device-auth-actions\",\n AuthActionsRefData: \"auth-actions-ref-data\",\n FieldDeviceDeploymentRingDetails: \"field-device-deployment-ring-details\",\n FieldDeviceDeploymentRing: \"field-device-deployment-ring\",\n RolloutPackageDesiredConfig: \"rollout-package-desired-config\",\n FieldDeviceReportedConfig: \"field-device-reported-config\",\n FieldDeviceDesiredConfig: \"field-device-desired-config\",\n DeviceConfigurationDiff: \"device-configuration-diff\",\n Selectors: \"selectors\",\n Selector: \"selector\",\n SelectorDataTypeRefData: \"selector-datatype-ref-data\",\n DeviceLogs: \"onsite-device-logs\"\n};\n\n// ----- Field Devices ---------------------------------------------------------------\n\nexport const useFieldDevices = (filterArgs?: FieldDeviceFilterArgs) => {\n const { fieldOpsGateway } = useGateways();\n\n return useInfiniteQuery, HttpError>(\n [FieldOpsCacheKeys.FieldDevices, filterArgs],\n async page => {\n return await fieldOpsGateway.getDevices(filterArgs, page.pageParam);\n },\n {\n getNextPageParam: lastPage => lastPage.next\n }\n );\n};\n\nexport const useFieldDeviceQuery = (\n id: string,\n options?: Omit, \"queryKey\" | \"queryFn\">\n) => {\n const { fieldOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useQuery(\n [FieldOpsCacheKeys.FieldDevice, id],\n () => fieldOpsGateway.getDevice(id),\n {\n ...options,\n initialData: () => {\n const cache = queryClient.getQueryData<\n InfiniteData>\n >([FieldOpsCacheKeys.FieldDevice, null]);\n\n const devicesFlattened = cache?.pages.reduce(\n (acc: FieldDevice[], curVal) => {\n return curVal.results !== null && curVal.results !== undefined\n ? acc.concat(...curVal.results)\n : [];\n },\n []\n );\n\n return devicesFlattened?.find(d => d.id === id);\n }\n }\n );\n};\n\nexport const useFieldDevicesDetails = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useQuery(\n [FieldOpsCacheKeys.FieldDeviceDetails, fieldDeviceId],\n async () => {\n return await fieldOpsGateway.getDeviceDetails(fieldDeviceId);\n },\n {\n initialData: () => {\n // Don't send request if we already have the data in previous cache of data collection, instead initialise from that data.\n const cache = queryClient.getQueryData([\n FieldOpsCacheKeys.FieldDevices\n ]);\n return cache?.find(d => d.id === fieldDeviceId);\n }\n }\n );\n};\n\n// ----- Field Device Identifiers --------------------------------------------\n\nexport const useFieldDeviceIdentifiers = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.FieldDeviceIdentifiers, fieldDeviceId],\n async () => {\n return await fieldOpsGateway.getDeviceIdentifiers(fieldDeviceId);\n }\n );\n};\n\nexport const useMostRecentFieldDeviceIdentifiers = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.FieldDeviceIdentifiers, fieldDeviceId],\n async () => {\n return await fieldOpsGateway.getMostRecentDeviceIdentifierHistory(\n fieldDeviceId\n );\n }\n );\n};\n\nexport const useFieldDeviceIdentifierHistory = (\n fieldDeviceId: string,\n identifierType: string\n) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [\n FieldOpsCacheKeys.FieldDeviceIdentifierHistory,\n fieldDeviceId,\n identifierType\n ],\n async () => {\n return await fieldOpsGateway.getDeviceIdentifierHistory(\n fieldDeviceId,\n identifierType\n );\n }\n );\n};\n\n// ----- Field Device Properties --------------------------------------------\n\nexport const useFieldDeviceProperties = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.FieldDeviceProperties, fieldDeviceId],\n async () => {\n return await fieldOpsGateway.getMostRecentDevicePropertyHistory(\n fieldDeviceId\n );\n }\n );\n};\n\n// ----- Field Device Claims --------------------------------------------\n\nexport const useFieldDeviceClaims = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.FieldDeviceClaims, fieldDeviceId],\n async () => {\n return await fieldOpsGateway.getDeviceClaims(fieldDeviceId);\n }\n );\n};\n\n// ----- Rings ---------------------------------------------------------------\n\nexport const useDeploymentRings = () => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.DeploymentRings],\n async () => {\n return await fieldOpsGateway.getDeploymentRings();\n }\n );\n};\n\nexport const useDeploymentRing = (deploymentRingId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.DeploymentRing, deploymentRingId],\n async () => {\n return await fieldOpsGateway.getDeploymentRing(deploymentRingId);\n }\n );\n};\n\nexport const useCreateDeploymentRing = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n request => fieldOpsGateway.postDeploymentRing(request),\n {\n onSuccess: async deploymentRing => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [FieldOpsCacheKeys.DeploymentRings],\n item: deploymentRing\n });\n\n feedback.success(\"A deployment ring has been created.\");\n },\n onError: async (error, request) => {\n if (error.httpStatusCode === HttpStatusCode.Conflict) {\n feedback.error(\n `A deployment ring already exists with code: ${request.code}`\n );\n } else {\n feedback.error(error.message);\n }\n }\n }\n );\n};\n\nexport const useUpdateDeploymentRing = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n request => fieldOpsGateway.updateDeploymentRings(request),\n {\n onSuccess: async deploymentRing => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [FieldOpsCacheKeys.DeploymentRings],\n item: deploymentRing\n });\n\n feedback.success(\"A deployment ring has been updated.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useDeleteDeploymentRing = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n request => fieldOpsGateway.deleteDeploymentRings(request),\n {\n onSuccess: async (_, request) => {\n cacheDeleteSingleItemInArray({\n queryClient,\n id: request,\n queryKey: [FieldOpsCacheKeys.DeploymentRings]\n });\n\n feedback.success(\"A deployment ring has been deleted.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\n// ----- Rollouts ---------------------------------------------------------------\nexport const useRollouts = (deploymentRingId?: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.Rollouts, deploymentRingId],\n async () => {\n return await fieldOpsGateway.getRollouts(deploymentRingId);\n }\n );\n};\n\nexport const useRollout = (rolloutId?: string, ringId?: string) => {\n const { fieldOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useQuery(\n [FieldOpsCacheKeys.Rollout, rolloutId],\n async () => {\n return await fieldOpsGateway.getRollout(rolloutId);\n },\n {\n initialData: () => {\n // Don't send request if we already have the data in previous cache of rollout collection, instead initialise from that data.\n const cache = queryClient.getQueryData([\n FieldOpsCacheKeys.Rollouts,\n ringId\n ]);\n return cache?.find(d => d.id === rolloutId);\n }\n }\n );\n};\n\nexport const useCreateRollout = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n request => fieldOpsGateway.postRollout(request),\n {\n onSuccess: async rollout => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [FieldOpsCacheKeys.Rollout, rollout.deploymentRingId],\n item: rollout,\n asFirstItem: true\n });\n\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [FieldOpsCacheKeys.Rollouts, rollout.deploymentRingId],\n item: rollout,\n asFirstItem: true\n });\n\n feedback.success(\"A rollout has been created.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useUpdateRollout = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n request => fieldOpsGateway.updateRollout(request),\n {\n onSuccess: async rollout => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [FieldOpsCacheKeys.Rollout, rollout.deploymentRingId],\n item: rollout\n });\n\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [FieldOpsCacheKeys.Rollouts, rollout.deploymentRingId],\n item: rollout\n });\n\n feedback.success(\"A rollout has been updated.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useDeleteRollout = (deploymentRingId: string) => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n request => fieldOpsGateway.deleteRollout(request),\n {\n onSuccess: async (_, request) => {\n cacheDeleteSingleItemInArray({\n queryClient,\n id: request,\n queryKey: [FieldOpsCacheKeys.Rollouts, deploymentRingId]\n });\n\n cacheDeleteSingleItemInArray({\n queryClient,\n id: request,\n queryKey: [FieldOpsCacheKeys.Rollout, deploymentRingId]\n });\n\n feedback.success(\"A rollout has been deleted.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\n// ----- Rollout Packages ---------------------------------------------------------------\nexport const useRolloutPackages = (rolloutId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.RolloutPackages, rolloutId],\n async () => {\n return await fieldOpsGateway.getRolloutPackages(rolloutId);\n }\n );\n};\n\nexport const useCreateRolloutPackage = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n request => fieldOpsGateway.postRolloutPackage(request),\n {\n onSuccess: async (_, args) => {\n const { rolloutId } = args;\n await queryClient.refetchQueries([\n FieldOpsCacheKeys.SoftwarePackageVersionsRollout,\n rolloutId\n ]);\n\n await queryClient.refetchQueries([\n FieldOpsCacheKeys.RolloutPackages,\n rolloutId\n ]);\n\n feedback.success(\"Added software package version to rollout.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useUpdateRolloutPackage = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n request => fieldOpsGateway.updateRolloutPackage(request),\n {\n onSuccess: async (dto, args) => {\n const { rolloutId } = args;\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [FieldOpsCacheKeys.RolloutPackages, rolloutId],\n item: dto\n });\n\n await queryClient.refetchQueries([\n FieldOpsCacheKeys.SoftwarePackageVersionsRollout,\n rolloutId\n ]);\n\n feedback.success(\"Updated software package version for rollout.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useDeleteRolloutPackage = (rolloutId: string) => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n rolloutPackageId => fieldOpsGateway.deleteRolloutPackage(rolloutPackageId),\n {\n onSuccess: async (_, rolloutPackageId) => {\n cacheDeleteSingleItemInArray({\n queryClient,\n id: rolloutPackageId,\n queryKey: [FieldOpsCacheKeys.RolloutPackages, rolloutId]\n });\n\n await queryClient.invalidateQueries([\n FieldOpsCacheKeys.SoftwarePackageVersionsRollout\n ]);\n\n feedback.success(\"Removed software package version from rollout.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\n// ----- Rollout Package Desired Config ------------------------------------------------------------\n\nexport const useRolloutPackageDesiredConfig = (rolloutPackageId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.RolloutPackageDesiredConfig, rolloutPackageId],\n async () => {\n return await fieldOpsGateway.getRolloutPackageDesiredConfigs(\n rolloutPackageId\n );\n }\n );\n};\n\nexport const useCreateRolloutPackageDesiredConfig = (\n rolloutPackageId: string\n) => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation<\n RolloutPackageDesiredConfig,\n Error,\n RolloutPackageDesiredConfigCreateRequest\n >(request => fieldOpsGateway.createRolloutPackageDesiredConfig(request), {\n onSuccess: async dto => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [\n FieldOpsCacheKeys.RolloutPackageDesiredConfig,\n rolloutPackageId\n ],\n item: dto\n });\n\n feedback.success(\"Created rollout package desired config.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n });\n};\n\nexport const useUpdateRolloutPackageDesiredConfig = (\n rolloutPackageId: string\n) => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation<\n RolloutPackageDesiredConfig,\n Error,\n RolloutPackageDesiredConfigUpdateRequest\n >(request => fieldOpsGateway.updateRolloutPackageDesiredConfig(request), {\n onSuccess: async dto => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [\n FieldOpsCacheKeys.RolloutPackageDesiredConfig,\n rolloutPackageId\n ],\n item: dto\n });\n\n feedback.success(\"Updated rollout package desired config.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n });\n};\n\nexport const useDeleteRolloutPackageDesiredConfig = (\n rolloutPackageId: string\n) => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n rolloutPackageDesiredConfigId =>\n fieldOpsGateway.deleteRolloutPackageDesiredConfig(\n rolloutPackageDesiredConfigId\n ),\n {\n onSuccess: async (_, rolloutPackageDesiredConfigId) => {\n cacheDeleteSingleItemInArray({\n queryClient,\n queryKey: [\n FieldOpsCacheKeys.RolloutPackageDesiredConfig,\n rolloutPackageId\n ],\n id: rolloutPackageDesiredConfigId\n });\n\n feedback.success(\"Deleted rollout package desired config.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\n// ----- Software Packages ------------------------------------------------------------\n\nexport const useSoftwarePackages = (args?: SoftwarePackageArgs) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.SoftwarePackages, args],\n async () => {\n return await fieldOpsGateway.getSoftwarePackages(args);\n }\n );\n};\n\n// ----- Software Publishers ------------------------------------------------------------\n\nexport const useSoftwarePublishers = () => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.SoftwarePublishers],\n async () => {\n return await fieldOpsGateway.getSoftwarePublishers();\n }\n );\n};\n\n// ----- Software Package Versions ----------------------------------------------------\n\nexport const useSoftwarePackageVersions = (\n args?: SoftwarePackageVersionArgs\n) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.SoftwarePackageVersions, args],\n async () => {\n return await fieldOpsGateway.getSoftwarePackageVersions(args);\n }\n );\n};\n\nexport const useSoftwarePackageVersionsForRollout = (rolloutId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.SoftwarePackageVersionsRollout, rolloutId],\n async () => {\n return await fieldOpsGateway.getSoftwarePackageVersionsForRollout(\n rolloutId\n );\n }\n );\n};\n\n// ----- Software Package Version Config ------------------------------------------------------------\n\nexport const useSoftwarePackageVersionConfig = (\n softwarePackageVersionId: string\n) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.SoftwarePackageVersionConfig, softwarePackageVersionId],\n async () => {\n return await fieldOpsGateway.getSoftwarePackageVersionConfig(\n softwarePackageVersionId\n );\n }\n );\n};\n\n// ----- Software Package Defaults ----------------------------------------------------\n\nexport const useSoftwarePackageDefaults = () => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.SoftwarePackageDefaults],\n async () => {\n return await fieldOpsGateway.getSoftwarePackageDefaults();\n }\n );\n};\n\nexport const useUpdateSoftwarePackageDefault = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n request => fieldOpsGateway.updateSoftwarePackageDefault(request),\n {\n onSuccess: async softwarePackageDefault => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [FieldOpsCacheKeys.SoftwarePackageDefaults],\n item: softwarePackageDefault\n });\n\n feedback.success(\"Updated software package default version.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useCreateSoftwarePackageDefault = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation<\n SoftwarePackageDefault,\n Error,\n SoftwarePackageDefaultRequest\n >(request => fieldOpsGateway.postSoftwarePackageDefault(request), {\n onSuccess: async softwarePackageDefault => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [FieldOpsCacheKeys.SoftwarePackageDefaults],\n item: softwarePackageDefault\n });\n\n feedback.success(\"Created software package default version.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n });\n};\n\nexport const useRegenerateDefaultFieldConfig = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n return async () => {\n try {\n await fieldOpsGateway.regenerateSoftwarePackageDefaultConfig();\n feedback.success(\"Regenerated default field configuration.\");\n } catch {\n feedback.error(\"Error regenerating default field configuration.\");\n }\n };\n};\n\nexport const usePurgeFieldmanCDN = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n return async () => {\n try {\n await fieldOpsGateway.purgeFieldmanCDN();\n feedback.success(\"Successfully sent request to purge Fieldman CDN.\");\n } catch {\n feedback.error(\"Error requesting to purge Fieldman CDN.\");\n }\n };\n};\n\n// ----- Auth Actions ------------------------------------------------------------\nexport const useFieldDeviceAuthActions = (\n fieldDeviceId: string,\n showExecuted: boolean\n) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.FieldDeviceAuthActions, fieldDeviceId, showExecuted],\n async () => {\n return await fieldOpsGateway.getFieldDeviceAuthActions(\n fieldDeviceId,\n showExecuted\n );\n }\n );\n};\n\nexport const useCreateFieldDeviceAuthActions = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n FieldDeviceAuthAction,\n Error,\n FieldDeviceAuthActionRequest\n >(request => fieldOpsGateway.postFieldDeviceAuthActions(request), {\n onSuccess: async fieldDeviceAuthAction => {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [\n FieldOpsCacheKeys.FieldDeviceAuthActions,\n fieldDeviceAuthAction.fieldDeviceId,\n false\n ],\n item: fieldDeviceAuthAction\n });\n\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [\n FieldOpsCacheKeys.FieldDeviceAuthActions,\n fieldDeviceAuthAction.fieldDeviceId,\n true\n ],\n item: fieldDeviceAuthAction\n });\n\n feedback.success(\"An auth action has been created.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n });\n};\n\nexport const useUpdateFieldDeviceAuthActions = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n request => fieldOpsGateway.updateFieldDeviceAuthActions(request),\n {\n onSuccess: async fieldDeviceAuthAction => {\n if (!!fieldDeviceAuthAction.runDate) {\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [\n FieldOpsCacheKeys.FieldDeviceAuthActions,\n fieldDeviceAuthAction.fieldDeviceId,\n false\n ],\n item: fieldDeviceAuthAction\n });\n }\n\n cacheUpsertSingleItemInArray({\n queryClient,\n queryKey: [\n FieldOpsCacheKeys.FieldDeviceAuthActions,\n fieldDeviceAuthAction.fieldDeviceId,\n true\n ],\n item: fieldDeviceAuthAction\n });\n\n feedback.success(\"An auth action has been updated.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useDeleteFieldDeviceAuthActions = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n request => fieldOpsGateway.deleteFieldDeviceAuthActions(request),\n {\n onSuccess: async (_, args) => {\n // Remove record from both caches (executed/ not executed) for deleted auth action.\n cacheDeleteSingleItemInArray({\n queryClient,\n id: args,\n queryKey: [\n FieldOpsCacheKeys.FieldDeviceAuthActions,\n fieldDeviceId,\n true\n ]\n });\n cacheDeleteSingleItemInArray({\n queryClient,\n id: args,\n queryKey: [\n FieldOpsCacheKeys.FieldDeviceAuthActions,\n fieldDeviceId,\n false\n ]\n });\n\n feedback.success(\"An auth action has been deleted.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useAuthActionsRefData = () => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.AuthActionsRefData],\n async () => {\n return await fieldOpsGateway.getAuthActionRefData();\n }\n );\n};\n\n// ----- Field Services and Modules ---------------------------------------------------------------\n\nexport const useFieldServices = () => {\n return useQuery(\n [FieldOpsCacheKeys.FieldServices],\n async () => {\n /* Mock data until api is ready */\n return await [\n {\n code: \"fieldController\",\n name: \"Field Controller\",\n approvedDefaultVersion: \"1.25.1\",\n availableBuildVersions: [\n \"1.25.1\",\n \"1.24.7\",\n \"1.24.6\",\n \"1.24.5\",\n \"1.23.2\"\n ]\n },\n {\n code: \"fieldRecoveryAgent\",\n name: \"Field Recovery Agent\",\n approvedDefaultVersion: \"1.12.2\",\n availableBuildVersions: [\n \"1.12.2\",\n \"1.11.7\",\n \"1.10.6\",\n \"1.9.5\",\n \"1.6.5\",\n \"1.2.2\"\n ]\n }\n ];\n }\n );\n};\n\n// ----------- Field Device Reported Configuration -----------------------------\n\nexport const useFieldDeviceReportedConfig = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.FieldDeviceReportedConfig, fieldDeviceId],\n async () => {\n return await fieldOpsGateway.getFieldDeviceReportedConfig(fieldDeviceId);\n }\n );\n};\n\n// ----- Field Device Deployment Rings ---------------------------------------------------------------\n\nexport const useFieldDeviceDeploymentRingDetail = (\n fieldDeviceId?: string,\n deploymentRingId?: string\n) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [\n FieldOpsCacheKeys.FieldDeviceDeploymentRingDetails,\n fieldDeviceId,\n deploymentRingId\n ],\n async () => {\n return await fieldOpsGateway.getFieldDeviceDeploymentRingDetails(\n fieldDeviceId,\n deploymentRingId\n );\n }\n );\n};\n\nexport const useAddDeviceDeploymentRing = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation<\n DeploymentRingFieldDevice,\n Error,\n AddFieldDeviceDeploymentRingRequest\n >(request => fieldOpsGateway.postFieldDeviceDeploymentRing(request), {\n onSuccess: async () => {\n await queryClient.refetchQueries([\n FieldOpsCacheKeys.FieldDeviceDeploymentRingDetails,\n fieldDeviceId\n ]);\n\n feedback.success(\"A deployment ring has been added.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n });\n};\n\nexport const useDeleteDeviceDeploymentRing = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation(\n deploymentRingFieldDeviceId =>\n fieldOpsGateway.deleteFieldDeviceDeploymentRing(\n deploymentRingFieldDeviceId\n ),\n {\n onSuccess: async () => {\n await queryClient.refetchQueries([\n FieldOpsCacheKeys.FieldDeviceDeploymentRingDetails,\n fieldDeviceId\n ]);\n\n feedback.success(\"A deployment ring has been removed.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useUpdateFieldDeviceDeploymentRing = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n return useMutation<\n DeploymentRingFieldDevice,\n Error,\n DeploymentRingFieldDevice\n >(request => fieldOpsGateway.updateFieldDeviceDeploymentRing(request), {\n onSuccess: async () => {\n await queryClient.refetchQueries([\n FieldOpsCacheKeys.FieldDeviceDeploymentRingDetails,\n fieldDeviceId\n ]);\n feedback.success(\"A deployment ring has been updated.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n });\n};\n\n// ----------- Field Device Configuration -----------------------------\n\nexport const useClearDeviceFieldConfigurationCache = (\n fieldDeviceId: string\n) => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return async () => {\n try {\n await fieldOpsGateway.clearDeviceFieldConfigurationCache(fieldDeviceId);\n\n // Clear desired and dif react cache\n await queryClient.refetchQueries([\n FieldOpsCacheKeys.FieldDeviceDesiredConfig,\n fieldDeviceId\n ]);\n await queryClient.refetchQueries([\n FieldOpsCacheKeys.DeviceConfigurationDiff,\n fieldDeviceId\n ]);\n\n feedback.success(\n \"Field configuration cache cleared for this field device.\"\n );\n } catch {\n feedback.error(\"Error requesting to purge field configuration cache.\");\n }\n };\n};\n\n// ----------- Field Device Desired Configuration -----------------------------\n\nexport const useFieldDeviceConfiguration = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.FieldDeviceDesiredConfig, fieldDeviceId],\n async () => {\n return await fieldOpsGateway.getFieldDeviceDesiredConfig(fieldDeviceId);\n }\n );\n};\n\n// ----------- Software Package Command Json -----------------------------\n\nexport const useSoftwarePackageCommandJson = (\n softwarePackageVersionId?: string\n) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.FieldDeviceDesiredConfig, softwarePackageVersionId],\n async () => {\n try {\n return await fieldOpsGateway.getSoftwarePackgeCommandJson(\n softwarePackageVersionId\n );\n } catch (e) {\n if (e instanceof NotFoundError) {\n return [];\n }\n return e;\n }\n }\n );\n};\n\n// ----------- Device Configuration Diff -----------------------------\n\nexport const useDeviceConfigurationDiff = (fieldDeviceId: string) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.DeviceConfigurationDiff, fieldDeviceId],\n async () => {\n return await fieldOpsGateway.getDeviceConfigurationDiff(fieldDeviceId);\n }\n );\n};\n\n// ----------- Selectors -----------------------------\n\nexport const useSelectors = (args?: SelectorArgs) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.Selectors, args],\n async () => {\n return await fieldOpsGateway.getSelectors(args);\n }\n );\n};\n\nexport const useCreateSelector = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n request => fieldOpsGateway.postSelector(request),\n {\n onSuccess: async () => {\n // Doing full refetch here because we would have to pass filter args here + upsert for every possible arg.\n await queryClient.refetchQueries([FieldOpsCacheKeys.Selectors]);\n\n feedback.success(\"A selector has been created.\");\n },\n onError: async error => {\n feedback.error(error.detail as string);\n }\n }\n );\n};\n\nexport const useUpdateSelector = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n // Returns a Selector and takes a selector\n return useMutation(\n request => fieldOpsGateway.putSelector(request),\n {\n onSuccess: async () => {\n // Doing full refetch here because we would have to pass filter args here + upsert for every possible arg.\n await queryClient.refetchQueries([FieldOpsCacheKeys.Selectors]);\n\n feedback.success(\"Selector has been updated.\");\n },\n onError: async error => {\n feedback.error(error.detail as string);\n }\n }\n );\n};\n\nexport const useSelector = (selectorId: guid) => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.Selector, selectorId],\n async () => {\n return await fieldOpsGateway.getSelector(selectorId);\n }\n );\n};\n\nexport const useUpdateSelectorDeviceCount = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n request => fieldOpsGateway.updateSelectorDeviceCount(request),\n {\n onSuccess: async () => {\n await queryClient.refetchQueries([FieldOpsCacheKeys.Selectors]);\n\n feedback.success(\"Device count has been updated.\");\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useSelectorDataTypeRefData = () => {\n const { fieldOpsGateway } = useGateways();\n\n return useQuery(\n [FieldOpsCacheKeys.SelectorDataTypeRefData],\n async () => {\n return await fieldOpsGateway.getSelectorDataTypeRefData();\n }\n );\n};\n\n// ----------- Field Gateway --------------------------------\n\nexport const useDispatchDeviceCommand = () => {\n const { fieldOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n return useMutation(\n command => fieldOpsGateway.dispatchDeviceCommand(command),\n {\n onSuccess: async () => {\n feedback.success(\"Successfully sent command to device.\");\n },\n onError: async error => {\n feedback.success(\"Error sending command to device.\");\n throw error;\n }\n }\n );\n};\n\n// ----------- Device Logs -----------------------------\n\nexport const useDeviceLogs = (args: SoftwarePackageLogArgs) => {\n const { fieldOpsGateway } = useGateways();\n\n return useInfiniteQuery, HttpError>(\n [FieldOpsCacheKeys.DeviceLogs, args],\n async page => {\n return await fieldOpsGateway.getDeviceLogs(args, page.pageParam);\n },\n {\n getNextPageParam: lastPage => lastPage.next\n }\n );\n};\n","import { useMutation, useQuery, useQueryClient } from \"react-query\";\n\nimport { PoisonMessage } from \"@libs/api/gateways/mon/ops-mon-gateway.dtos\";\nimport { useGateways } from \"@libs/api/gateways-context\";\n\nconst CacheKeys = {\n PoisonMessages: \"poison-messages\"\n};\n\nexport const usePoisonMessagesQuery = () => {\n const { opsMonGateway } = useGateways();\n return useQuery(CacheKeys.PoisonMessages, async () => {\n try {\n const data = await opsMonGateway.getPoisonMessages();\n\n if (data.length > 0) {\n return data;\n }\n return [];\n } catch (e) {\n if (e.code === 204) {\n return [];\n }\n\n throw e;\n }\n });\n};\n\nexport const useSkipPoisonMessagesMutation = () => {\n const { opsMonGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n msg => opsMonGateway.skipPoisonMessage(msg),\n {\n onSuccess: async () => {\n queryClient.invalidateQueries(CacheKeys.PoisonMessages);\n },\n onError: () => {}\n }\n );\n};\n","export enum SoftwarePublishers {\n FieldManagement = \"BPS-FM\"\n}\n","import {\n QueryClient,\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient\n} from \"react-query\";\nimport { UseQueryOptions } from \"react-query/types/react/types\";\n\nimport { HttpError, NotFoundError } from \"@bps/http-client\";\nimport { useGateways } from \"@libs/api/gateways-context\";\nimport { PagingTableStorageResponse } from \"@libs/paging/paging-table-storage-response.type\";\nimport { useRootStore } from \"@stores/StoresProvider\";\n\nimport {\n AddRedirectLinkCreatePayload,\n AddRedirectLinkDto,\n GetRedirectLinksArgs,\n RedirectLinkDto,\n RedirectLinkUsageDto,\n UpdateRedirectLinkCreatePayload\n} from \"./plt-redirect-gateway.dtos\";\n\nenum PltRedirectCacheKeys {\n Links = \"plt-redirect-links\",\n UsedLinks = \"plt-redirect-used-links\"\n}\n\nconst invalidateRedirectsLinks = async (queryClient: QueryClient) => {\n const queries = queryClient.getQueryCache().getAll();\n\n const redirectsQueries = queries.filter(s =>\n s.queryKey.includes(PltRedirectCacheKeys.Links)\n );\n\n if (redirectsQueries.length) {\n await Promise.all(\n redirectsQueries.map(query =>\n queryClient.invalidateQueries(query.queryKey)\n )\n );\n }\n};\n\nexport const useUsedRedirectLinks = (\n linkId: string,\n redirectUrl?: string,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { pltRedirectOpsGateway } = useGateways();\n return useQuery(\n [PltRedirectCacheKeys.UsedLinks, linkId],\n () => pltRedirectOpsGateway.getRedirectLinkUsage(linkId, redirectUrl),\n {\n ...options,\n onError: e => {\n if (e instanceof NotFoundError) {\n return [];\n }\n return e;\n }\n }\n );\n};\n\nexport const useRedirectLinks = (args: GetRedirectLinksArgs) => {\n const { pltRedirectOpsGateway } = useGateways();\n return useInfiniteQuery<\n PagingTableStorageResponse,\n HttpError\n >(\n [PltRedirectCacheKeys.Links, args],\n context => {\n return pltRedirectOpsGateway.getRedirectLinks({\n ...args,\n nextPageToken: context.pageParam\n });\n },\n {\n getNextPageParam: lastPage => {\n return lastPage.args.nextPageToken;\n }\n }\n );\n};\n\nexport const useRedirectLink = (\n linkId: string,\n options?: Omit<\n UseQueryOptions,\n \"queryKey\" | \"queryFn\"\n >\n) => {\n const { pltRedirectOpsGateway } = useGateways();\n return useQuery(\n [PltRedirectCacheKeys.Links, linkId],\n () => pltRedirectOpsGateway.getRedirectLink(linkId),\n {\n ...options,\n onError: e => {\n if (e instanceof NotFoundError) {\n return undefined;\n }\n return e;\n }\n }\n );\n};\n\nexport const useAddRedirectLink = () => {\n const { pltRedirectOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n AddRedirectLinkDto,\n HttpError,\n AddRedirectLinkCreatePayload\n >(pltRedirectOpsGateway.addRedirectLink, {\n onSuccess: () => {\n invalidateRedirectsLinks(queryClient);\n feedback.success(\"A new redirect link has been created!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n });\n};\n\nexport const useUpdatedRedirectLink = () => {\n const { pltRedirectOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation<\n RedirectLinkDto,\n HttpError,\n UpdateRedirectLinkCreatePayload\n >(pltRedirectOpsGateway.updateRedirectLink, {\n onSuccess: () => {\n invalidateRedirectsLinks(queryClient);\n feedback.success(\"Redirect link has been updated!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n });\n};\n\nexport const useDeleteRedirectLink = () => {\n const { pltRedirectOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n pltRedirectOpsGateway.deleteRedirectLink,\n {\n onSuccess: () => {\n invalidateRedirectsLinks(queryClient);\n feedback.success(\"Redirect link has been deleted!\");\n },\n onError: e => {\n feedback.error(e.message);\n }\n }\n );\n};\n","import { formatISO } from \"date-fns\"; // Make sure to install date-fns if not already installed\nimport { useMutation, useQuery, useQueryClient } from \"react-query\";\n\nimport { useGateways } from \"@libs/api/gateways-context\";\nimport {\n BpMobileCreateNotification,\n BpMobileMaintenanceSettings,\n BpMobileNotification\n} from \"@libs/api/gateways/bp-mobile/bp-mobile.dtos\";\nimport { useRootStore } from \"@stores/StoresProvider\";\n\nconst CacheKeys = {\n BpMobileAppSettings: \"bpMobileAppSettings\",\n BpMobileAppNotifications: \"bpMobileAppNotifications\"\n};\n\nexport const useGetBpMobileAppSettings = () => {\n const { bpMobileOpsGateway } = useGateways();\n return useQuery(\n CacheKeys.BpMobileAppSettings,\n () => bpMobileOpsGateway.getMobileAppSettings()\n );\n};\n\nexport const usePutBpMobileAppSettings = () => {\n const { bpMobileOpsGateway } = useGateways();\n const queryClient = useQueryClient();\n\n return useMutation(\n async (updates: BpMobileMaintenanceSettings) => {\n // Add the current UTC date to the updates object\n const updatesWithDate = {\n ...updates,\n dateUtc: formatISO(new Date(), { representation: \"complete\" })\n };\n\n return bpMobileOpsGateway.putMobileAppSettings(updatesWithDate);\n },\n {\n onSuccess: response => {\n queryClient.setQueryData(CacheKeys.BpMobileAppSettings, response);\n },\n onError: (error: Error) => {\n throw error;\n }\n }\n );\n};\n\nexport const useGetBpMobileAppNotifications = () => {\n const { bpMobileOpsGateway } = useGateways();\n return useQuery(\n CacheKeys.BpMobileAppNotifications,\n () => bpMobileOpsGateway.getMobileAppNotifications()\n );\n};\n\nexport const useUpsertNotification = () => {\n const { bpMobileOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n request => bpMobileOpsGateway.putMobileAppNotifications(request),\n {\n onSuccess: async updatedNotification => {\n const existingNotifications =\n queryClient.getQueryData([\n CacheKeys.BpMobileAppNotifications\n ]) || [];\n\n const notificationExists = existingNotifications.some(\n notification =>\n notification.partitionKey === updatedNotification.partitionKey &&\n notification.rowKey === updatedNotification.rowKey\n );\n\n let updatedNotifications;\n\n if (notificationExists) {\n updatedNotifications = existingNotifications.map(notification =>\n notification.partitionKey === updatedNotification.partitionKey &&\n notification.rowKey === updatedNotification.rowKey\n ? updatedNotification\n : notification\n );\n feedback.success(\"Updated notification successfully.\");\n } else {\n updatedNotifications = [\n updatedNotification,\n ...existingNotifications\n ];\n feedback.success(\"Added new notification successfully.\");\n }\n\n queryClient.setQueryData(\n [CacheKeys.BpMobileAppNotifications],\n updatedNotifications\n );\n },\n onError: async error => {\n feedback.error(error.message);\n }\n }\n );\n};\n\nexport const useDeleteNotification = () => {\n const { bpMobileOpsGateway } = useGateways();\n const { feedback } = useRootStore();\n const queryClient = useQueryClient();\n\n return useMutation(\n ({ partitionKey, rowKey }) =>\n bpMobileOpsGateway.deleteMobileAppNotification(partitionKey, rowKey),\n {\n onSuccess: async (_, { partitionKey, rowKey }) => {\n const existingNotifications =\n queryClient.getQueryData([\n CacheKeys.BpMobileAppNotifications\n ]) || [];\n\n const updatedNotifications = existingNotifications.filter(\n notification =>\n !(\n notification.partitionKey === partitionKey &&\n notification.rowKey === rowKey\n )\n );\n\n queryClient.setQueryData(\n [CacheKeys.BpMobileAppNotifications],\n updatedNotifications\n );\n\n feedback.success(\"Deleted notification successfully.\");\n },\n onError: async error => {\n feedback.error(`Failed to delete notification: ${error.message}`);\n }\n }\n );\n};\n","import {\n HumanizeDuration,\n HumanizeDurationLanguage\n} from \"humanize-duration-ts\";\n\nconst langService = new HumanizeDurationLanguage();\nconst humanizer = new HumanizeDuration(langService);\n\n// eslint-disable-next-line import/no-default-export\nexport default humanizer;\n"],"names":["convertBytes","bytes","sizes","i","compareDatesOrUndefinedPredicate","a","b","isSortedDescending","dateA","DateTime","dateB","compareDatesPredicate","toTitleCase","str","txt","deepMerge","objects","src","dest","key","destValue","srcValue","getEnv","runtimeConfig","envConfig","config","IsDevelopmentEnvironment","getHttpErrorMessage","error","getErrorAlertMessage","HttpError","NO_AUTH","CORRELATION_BAGGAGE","PAGING_PAGE_NUMBER","PAGING_TOTAL_PAGES","PAGING_TOTAL_COUNT","MIN_PAGE_ITEMS","CorrelationBaggageMiddleware","__publicField","location","baggage","encoded","withPaging","queryString","qs","parse","page","limit","output","stringify","getPagesResult","respond","acc","pagingRespond","ApplicationType","getApplicationNameFromAppCode","appCode","CardBrand","PaymentType","CardBrandLabels","InvoiceStatus","Country","CountryText","SubscriptionStatuses","mapRolloutFromDto","rollout","BaseUserStatuses","TenantFeature","FeatureAction","FeatureStatus","ComponentRequestStatuses","ComponentRequestActions","toTenant","dto","createdDate","updatedDate","changeLogRest","toTenantDto","_a","secondsPerDay","PlatformGateway","api","tenantId","isTemporary","customerTenantId","payload","data","query","user","rest","userId","id","args","url","code","invoiceId","invoiceNumber","paymentMethodId","time","getHourAndMinutesFromString","clockDate","clockDateTime","subscriptionId","cancelImmediately","scopeId","status","tag","encodedName","response","totalPages","isMaxPages","total","crmId","featureCode","action","params","changeLog","feature","businessRoles","item","_b","_c","searchTerm","bpIdUserId","promotionCodeId","codeOrId","restQuery","componentId","queryRest","restPayload","componentActionRequestId","TgOpsGateway","siteId","created","updated","updates","SiteComponentType","SiteCommand","SiteComponentState","ProsDatabaseCommands","ReportsType","LogLevels","siteComponents","getShortComponentTypeName","component","SiaOpsGateway","commandType","subCommandType","componentType","scheduled","version","state","desiredVersion","dataString","logLevel","command","versions","componentVersion","approvalId","report","type","r","SoftwarePackageType","SoftwarePackageServiceCodes","ChannelPreference","mapFieldDeviceIdentifierDtoToIdentifier","identifier","shorthandServiceName","softwarePackage","combinedSoftwarePackages","desiredSoftwarePackage","reportedSoftwarePackage","combined","desired","sp","reported","FieldOpsGateway","filterArgs","pageParam","details","fieldDeviceId","description","displayName","isPublic","deploymentRingId","selectorId","eTag","rolloutArgsDto","rolloutId","request","rolloutPackageArgs","rolloutPackageId","rolloutPackageDesiredConfigArgs","rolloutPackageDesiredConfigId","identifierType","property","claim","_d","softwarePackageVersionId","selector","softwarePackageVersionConfigArgs","showExecuted","authAction","authActionId","refData","deploymentRingFieldDeviceId","EnvGateway","name","newUser","BestHealthOpsGateway","onlineBookingsEnabled","providers","provider","locationId","lastCreated","stats","practiceOutage","firstAvailable","lastAvailable","es","convertIdentityDto","BestHealthAccountOpsGateway","searchText","dateOfBirth","updatedOn","privacyPolicyAgreementDate","devices","dependants","dOB","lastSeenDateTimeUtc","userName","values","TtmReportingOpsGateway","options","datasetId","TtmFormsOpsGateway","OpsMonGateway","message","TtmBookingOpsGateway","jobId","searchArgs","searchArgsDto","x","OutboundEmailAudit","OutboundSmsAudit","PltCommsOpsGateway","fromDateFilter","toDateFilter","TtmCommsOpsGateway","mapNotificationFromDto","notification","BpMobileOpsGateway","partitionKey","rowKey","PlatformNotificationsGateway","notifications","PlatformRedirectGateway","linkId","redirectUrl","BpIdOpsGateway","text","groupId","addGroupIds","removeGroupIds","toCustomerAccount","CamGateway","businessName","UserExperienceGateway","cloudConnectorId","PlatformIntegratorsGateway","GatewaysContext","createContext","useGateways","useContext","queryClient","QueryClient","ReactQueryProvider","children","TRACE_ID","opsEndpoints","AxiosHelper","platformGateway","tgOpsGateway","siaOpsGateway","fieldOpsGateway","envGateway","bestHealthOpsGateway","bestHealthAccountOpsGateway","ttmReportingOpsGateway","ttmFormsOpsGateway","opsMonGateway","ttmBookingOpsGateway","pltCommsOpsGateway","ttmCommsOpsGateway","bpMobileOpsGateway","pltNotificationsOpsGateway","pltRedirectOpsGateway","bpIdOpsGateway","camGateway","userExperienceGateway","platformIntegratorsGateway","jsx","QueryClientProvider","cacheUpdateItemArray","queryKey","applyUpdate","queryState","cacheUpsertSingleItemInArray","isIdentityEqual","prev","checkIdentity","other","hasUpdated","next","prevItem","cacheDeleteSingleItemInArray","verifyHasPermissions","userPermissions","requiredPermissions","operator","requiredPermissionsArray","p","CacheKeys","useCurrentUserQuery","useQuery","useCurrentUserImpersonation","useQueryClient","allRoles","useEnvAllRoles","value","activeRole","impersonationPermissions","newRole","useUsersQuery","useUpsertUserMutation","feedback","useRootStore","useMutation","isCreate","usePermissionsCheckQuery","permissions","NO_ACTION_PERMISSION","NO_RESOURCE_PERMISSION","BestHealthCacheKeys","usePracticeLocationsQuery","useAppointmentStatsQuery","useLocationAppointmentStatsQuery","useAllAppointmentStatsQuery","useBhbEntitySyncStateQuery","useGetPracticeOutageQuery","usePutPracticeOutageQuery","_","useGetProviders","usePutLocation","newData","usePostTtmSnapshot","usePostTtmRecalculate","Permissions","EntitySyncState","SiteSyncState","TgCacheKeys","useProsEntitySyncStateQuery","usePremSettingsQuery","usePremSettingsMutation","useRecalculateAvailabilityMutation","useSnapshotTablesMutation","useSiteSyncStateQuery","useTenantSeqLogsQuery","useTenantAzureMonitorLogsQuery","useFieldDeviceSeqLogsQuery","useFieldDeviceAzureMonitorLogsQuery","CurrentSiteVersion","siteComponent","sc","SiaCacheKeys","useApprovedComponentVersionsQuery","useAvailableComponentVersionsQuery","useSiteActivity","useSiteComponentVersionsQuery","componentData","useComponentVersions","useSiteVersionsQuery","useLogFilesQuery","useSiteAvailableReportsQuery","forceRefresh","useSiteReportQuery","enabled","useTenantsQuery","useSIATenantQuery","useSiteManagerInstallerDetailQuery","useUpdateSiteComponentVersionMutation","currentVersion","e","useLogFilesUploadMutation","useApprovedComponentVersionsMutation","useDeleteComponentVersionsMutation","useHealthCheckMutation","usePingMutation","useSiteCommandUpdateMutation","useLogLevelUpdateMutation","useComponentStateUpdateMutation","useModifyDatabaseMutation","useCheckUpdateMutation","useProsBannerMutation","useInstallPrerequisites","useDeleteEntityEventsMutation","useSiteComponentCredentialMutation","PltCacheKeys","useTenantsPltQuery","useInfiniteQuery","lastPage","useTenantQuery","useUpdateTenantCustomerAccount","tenantUpdate","err","useTenantFeatureQuery","useEnableDisableTenantFeatureMutation","useEncryptTenantResourcesMutation","useActivateTenantMutation","useDeactivateTenantMutation","useUpdateTenantIsTemporary","tenants","tenant","t","useTenantDefaultUserAuth","NotFoundError","useAddTenantDefaultUserAuth","useUpdateTenantDefaultUserAuth","useChildTenants","useUpdateTenant","prevData","s","useCreateTenant","useUser","useSearchUsers","useCreateUser","q","useUpdateUser","useUserDefaultAuth","useAddUserDefaultAuth","useUpdateUserDefaultAuth","useFeature","useSecurityRolesAndPermissions","useTenantFeatures","useBusinessRoles","useLicenceTypes","useLicenceType","cache","d","useAddLicenceType","useUpdateLicenceType","useToggleLicenceType","disable","updateLicencesQueryKey","asFirstItem","useLicence","useLicences","useAddLicence","useUpdateLicence","getSalesProductsCurrentQueryKey","useSalesProducts","useSalesProduct","useAddSalesProduct","useUpdateSalesProduct","useResyncStripeProducts","useApplicationsRefData","useBillingHistory","usePayInvoice","useTenantPaymentMethods","useTenantDefaultPaymentMethod","invalidateCustomerSubscriptionsProductsQuery","useUpdateTenantPaymentMethods","useDeleteTenantPaymentMethods","methods","cardToBeDeleted","m","remainedCards","useTenantPaymentMethodsAsDefault","useSetupTenantPaymentMethods","useStripeCustomer","useAddStripeCustomer","useCustomerProducts","useCustomerSubscriptionPreview","useAddCustomerSubscription","useCancelCustomerSubscriptions","useUndoCancellationCustomerSubscription","useTenantPromotionCodes","invalidateComponentsQueries","componentsQueries","useComponentsDefs","useComponents","useComponent","useAddOrUpdateComponent","useInitializeComponent","useDeInitializeComponent","useArchiveComponent","useReConfigureComponent","useDisableComponent","useComponentActions","useCreateComponentSetting","useUpdateComponentSetting","useComponentsRequests","useComponentWorkflowRunInstance","HttpStatusCode","useComponentManagerWorkflowRunInstance","useTenantTagQuery","useAddTenantTag","useDeleteTenantTag","useUsedTenantTagsQuery","SiteComponentVersion","dropDownOptions","v","DateType","TtmBookingCacheKeys","useAppointmentReminderJobs","useAppointmentReminderJobRuns","useBookingTenantSettings","useAppointmentReminderSearch","TtmCommsCacheKeys","useCommPreferences","CamCacheKeys","useCustomerAccountsQuery","customerAccounts","customerAccount","useCustomerAccountQuery","useCustomerAccountCreateMutation","useCreateCustomerAccountUser","useCustomerAccountAllUsersQuery","useCustomerAccountApplicationsQuery","customerAccountTenant","useServiceAgreements","useCustomerAccountReset","PltIntegratorsCacheKeys","useApplicationsQuery","left","right","useApplicationQuery","useGatewayScopesQuery","useUpdateApplicationScopes","useCreateApplicationSecret","useDeleteApplicationSecret","useCreateApplication","useUpdateApplication","useCallbackTypes","useCallbackTypesQuery","useUpdateCallbackType","useCertificatesQuery","useCreateCertificate","useDeleteCertificate","useDeployCertificateToGateway","useRemoveCertificateFromGateway","useUpdateTenantSetting","useTenantSettingQuery","useOrgUnitsQuery","useConsentsQuery","useCreateConsent","useUpdateConsent","usePatchConsentLocation","useCallbacksQuery","useCreateCallback","useUpdateCallback","HierarchyTypes","PltCommsCacheKeys","useMessageCreditsBalances","useMessageCreditsEvents","useAddMessageCreditsEvent","useOutboundEmailAuditQuery","useOutboundSmsAuditQuery","useCreateOutboundSmsRequest","useCreateOutboundEmailRequest","OutboundSmsAuditType","MessageMediaDeliveryReportErrorCodeMap","ValidationMessages","IP_REGEX","NUMBER_FORMAT_REGEX","DECIMAL_NUMBER_REGEX","PIN_LENGTH","_Guid","naked","Guid","SignInTypeKeys","IssuerType","InviteStatus","BpIdCacheKeys","invalidateInvitationsQueries","invalidateBpIdentitiesQueries","invalidateQueries","useDeleteUserMutation","useBusinessUserSearch","useGetAllGroups","useGetUserGroups","useUpdateUserGroupsMutation","_dto","useSendUserInvite","useReSendUserInvite","useCancelUserInvite","useInvites","useCloudApplicationsRefData","useLogoutAllSessions","useBpIdUserDetails","useUserSignInLogs","context","useAuditLogs","useClearBpId","useBatchAddNotification","NotificationType","NotificationPriority","stripeAccountBaseUrl","usePostTtmFormsRefresh","useGetDatasets","usePostTtmReportSnapshot","usePostTtmReportBillingSnapshot","usePostTtmReportDataIngest","usePostDatasetRefresh","useDebouncedValue","liveValue","delayMillis","setValue","useState","useDebounce","BestHealthAccountCacheKeys","useCUIdentitySearch","useBhBannerMutation","useGetMobileAppSettings","usePutMobileAppSettings","setting","usePostMobileAppSettings","profile","useConsumerUserProfileSearch","search","useConsumerUser","useBhaProfile","MAINTENANCE_MODE","MAINTENANCE_MODE_DESCRIPTION","VERSION_UPGRADE_MESSAGES","MINIMUM_VERSION_NUMBER","FieldOpsCacheKeys","useFieldDevices","useFieldDeviceQuery","devicesFlattened","curVal","useFieldDevicesDetails","useFieldDeviceIdentifiers","useMostRecentFieldDeviceIdentifiers","useFieldDeviceIdentifierHistory","useFieldDeviceProperties","useFieldDeviceClaims","useDeploymentRings","useDeploymentRing","useCreateDeploymentRing","deploymentRing","useUpdateDeploymentRing","useDeleteDeploymentRing","useRollouts","useRollout","ringId","useCreateRollout","useUpdateRollout","useDeleteRollout","useRolloutPackages","useCreateRolloutPackage","useUpdateRolloutPackage","useDeleteRolloutPackage","useRolloutPackageDesiredConfig","useCreateRolloutPackageDesiredConfig","useUpdateRolloutPackageDesiredConfig","useDeleteRolloutPackageDesiredConfig","useSoftwarePackages","useSoftwarePublishers","useSoftwarePackageVersions","useSoftwarePackageVersionsForRollout","useSoftwarePackageVersionConfig","useSoftwarePackageDefaults","useUpdateSoftwarePackageDefault","softwarePackageDefault","useCreateSoftwarePackageDefault","useRegenerateDefaultFieldConfig","usePurgeFieldmanCDN","useFieldDeviceAuthActions","useCreateFieldDeviceAuthActions","fieldDeviceAuthAction","useUpdateFieldDeviceAuthActions","useDeleteFieldDeviceAuthActions","useAuthActionsRefData","useFieldDeviceReportedConfig","useFieldDeviceDeploymentRingDetail","useAddDeviceDeploymentRing","useDeleteDeviceDeploymentRing","useUpdateFieldDeviceDeploymentRing","useClearDeviceFieldConfigurationCache","useFieldDeviceConfiguration","useSoftwarePackageCommandJson","useDeviceConfigurationDiff","useSelectors","useCreateSelector","useUpdateSelector","useSelector","useUpdateSelectorDeviceCount","useSelectorDataTypeRefData","useDispatchDeviceCommand","useDeviceLogs","usePoisonMessagesQuery","useSkipPoisonMessagesMutation","msg","SoftwarePublishers","invalidateRedirectsLinks","redirectsQueries","useUsedRedirectLinks","useRedirectLinks","useRedirectLink","useAddRedirectLink","useUpdatedRedirectLink","useDeleteRedirectLink","useGetBpMobileAppSettings","usePutBpMobileAppSettings","updatesWithDate","formatISO","useGetBpMobileAppNotifications","useUpsertNotification","updatedNotification","existingNotifications","notificationExists","updatedNotifications","useDeleteNotification","langService","HumanizeDurationLanguage","humanizer","HumanizeDuration"],"mappings":"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"}