{"version":3,"file":"tpSession-1c0895ce.js","sources":["../../src/app/services/generated/tradeportalService.ts","../../src/tradeportal/tpBranding.ts","../../src/tradeportal/tpSession.ts"],"sourcesContent":["import Guid from \"@/app/types/common/guid\";\nimport { Instant, LocalDate, LocalTime } from \"@js-joda/core\";\nimport {ModelObject, BaseModelObject, ValidationRule} from \"@/app/services/modelObject\";\nimport ServiceBase from \"@/app/services/serviceBase\";\nimport converters from \"@/app/services/converters\"\nimport { EnumBillingPlanStatus } from \"./enums/enumBillingPlanStatus.generated\";\nimport { EnumDateFormat } from \"./enums/enumDateFormat.generated\";\nimport { EnumDiscountBasis } from \"./enums/enumDiscountBasis.generated\";\nimport { EnumItemMainPurpose } from \"./enums/enumItemMainPurpose.generated\";\nimport { EnumStandardOrder } from \"./enums/enumStandardOrder.generated\";\nimport { EnumStockLevelDisplay } from \"./enums/enumStockLevelDisplay.generated\";\nimport { EnumTpPaymentMethod } from \"./enums/enumTpPaymentMethod.generated\";\nimport { EnumTpSessionErrorReason } from \"./enums/enumTpSessionErrorReason.generated\";\n\n// Model Objects\n\nexport class TpOutlet extends ModelObject {\n\n public id: Guid = Guid.createEmpty();\n /**\n * Name\n * Not Nullable\n * Not Empty\n * Max Length : 1000\n */\n public businessName: string = \"\";\n /**\n * Telephone number\n * Not Nullable\n * Max Length : 1000\n */\n public telephoneNumber: string = \"\";\n /**\n * Email Address\n * Not Nullable\n * Max Length : 1000\n */\n public emailAddress: string = \"\";\n /**\n * Outlet Standard Order Type 0=Full Price - Duty Paid 1=Price Excluding Duty - Duty Suspended 2=Full Price - Duty Paid Elsewhere 3=Export - Duty Suspended\n */\n public standardOrderType: EnumStandardOrder = EnumStandardOrder.fullPriceDutyPaid;\n public vatDescription: string = \"\";\n public onHold: boolean = false;\n private _creditRemaining: number | null = null;\n public get creditRemaining(): number | null { return this._creditRemaining }\n public set creditRemaining(value: number | null) {\n this._creditRemaining = value === undefined ? null : value;\n }\n public payOnAccountAllowed: boolean = false;\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.id = Guid.fromString(jsonSerializedObject.id);\n this.businessName = jsonSerializedObject.businessName;\n this.telephoneNumber = jsonSerializedObject.telephoneNumber;\n this.emailAddress = jsonSerializedObject.emailAddress;\n this.standardOrderType = EnumStandardOrder.getByValue(jsonSerializedObject.standardOrderType, this.standardOrderType);\n this.vatDescription = jsonSerializedObject.vatDescription;\n this.onHold = jsonSerializedObject.onHold;\n this.creditRemaining = jsonSerializedObject.creditRemaining == null ? null : jsonSerializedObject.creditRemaining;\n this.payOnAccountAllowed = jsonSerializedObject.payOnAccountAllowed;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.id = this.id.toString();\n toRet.businessName = this.businessName;\n toRet.telephoneNumber = this.telephoneNumber;\n toRet.emailAddress = this.emailAddress;\n toRet.standardOrderType = this.standardOrderType.value;\n toRet.vatDescription = this.vatDescription;\n toRet.onHold = this.onHold;\n toRet.creditRemaining = this.creditRemaining == null ? null : this.creditRemaining;\n toRet.payOnAccountAllowed = this.payOnAccountAllowed;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"id\", rule: (v: any) => !v.isEmpty() || \"TpOutlet.Id cannot be empty\"},\n {field: \"businessName\", rule: (v: any) => v == null || v.length !== 0 || \"BusinessName cannot be empty\"},\n {field: \"businessName\", rule: (v: any) => v == null || v.length <= 1000 || \"BusinessName has too many characters (1000)\"},\n {field: \"telephoneNumber\", rule: (v: any) => v == null || v.length <= 1000 || \"TelephoneNumber has too many characters (1000)\"},\n {field: \"emailAddress\", rule: (v: any) => v == null || v.length <= 1000 || \"EmailAddress has too many characters (1000)\"},\n ];\n}\n\n\nexport class TpProductBrand extends ModelObject {\n\n public id: Guid = Guid.createEmpty();\n private _imageId: Guid | null = null;\n /**\n * Alternative Logo for Label Printing\n */\n public get imageId(): Guid | null { return this._imageId }\n public set imageId(value: Guid | null) {\n this._imageId = value === undefined ? null : value;\n }\n /**\n * Ingredients and Allergens\n * Not Nullable\n * Max Length : 100000\n */\n public ingredientsAndAllergens: string = \"\";\n /**\n * Product Brand Name\n * Not Nullable\n * Not Empty\n * Max Length : 1000\n */\n public name: string = \"\";\n /**\n * Tasting Notes\n * Not Nullable\n * Max Length : 100000\n */\n public tastingNotes: string = \"\";\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.id = Guid.fromString(jsonSerializedObject.id);\n this.imageId = jsonSerializedObject.imageId == null ? null : Guid.fromString(jsonSerializedObject.imageId);\n this.ingredientsAndAllergens = jsonSerializedObject.ingredientsAndAllergens;\n this.name = jsonSerializedObject.name;\n this.tastingNotes = jsonSerializedObject.tastingNotes;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.id = this.id.toString();\n toRet.imageId = this.imageId == null ? null : this.imageId.toString();\n toRet.ingredientsAndAllergens = this.ingredientsAndAllergens;\n toRet.name = this.name;\n toRet.tastingNotes = this.tastingNotes;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"id\", rule: (v: any) => !v.isEmpty() || \"TpProductBrand.Id cannot be empty\"},\n {field: \"imageId\", rule: (v: any) => v == null || !v.isEmpty() || \"TpProductBrand.ImageId cannot be empty\"},\n {field: \"ingredientsAndAllergens\", rule: (v: any) => v == null || v.length <= 100000 || \"IngredientsAndAllergens has too many characters (100000)\"},\n {field: \"name\", rule: (v: any) => v == null || v.length !== 0 || \"Name cannot be empty\"},\n {field: \"name\", rule: (v: any) => v == null || v.length <= 1000 || \"Name has too many characters (1000)\"},\n {field: \"tastingNotes\", rule: (v: any) => v == null || v.length <= 100000 || \"TastingNotes has too many characters (100000)\"},\n ];\n}\n\n\nexport class TpVatCode extends ModelObject {\n\n public id: Guid = Guid.createEmpty();\n /**\n * Name\n * Not Nullable\n * Not Empty\n * Max Length : 1000\n */\n public name: string = \"\";\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.id = Guid.fromString(jsonSerializedObject.id);\n this.name = jsonSerializedObject.name;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.id = this.id.toString();\n toRet.name = this.name;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"id\", rule: (v: any) => !v.isEmpty() || \"TpVatCode.Id cannot be empty\"},\n {field: \"name\", rule: (v: any) => v == null || v.length !== 0 || \"Name cannot be empty\"},\n {field: \"name\", rule: (v: any) => v == null || v.length <= 1000 || \"Name has too many characters (1000)\"},\n ];\n}\n\n\nexport class TpTenant extends ModelObject {\n\n public tenantId: Guid = Guid.createEmpty();\n /**\n * Tenant's trade portal store name\n * Not Nullable\n * Max Length : 1000\n */\n public storeName: string = \"\";\n /**\n * Tenant's trade portal store code. Used in the trade portal url.\n * Not Nullable\n * Max Length : 32\n */\n public storeCode: string = \"\";\n /**\n * The public api key provided by Stripe to be used for the trade portal checkout.\n * Not Nullable\n * Preserves leading and trailing whitespce.\n */\n public stripePublicApiKey: string = \"\";\n public storeDescription: string = \"\";\n public termsAndConditionsLink: string = \"\";\n /**\n * Font name to be used in trade portal title and headers. \n * Not Nullable\n * Preserves leading and trailing whitespce.\n */\n public brandFont: string = \"\";\n /**\n * Font name to be used in trade portal body.\n * Not Nullable\n * Preserves leading and trailing whitespce.\n */\n public bodyFont: string = \"\";\n /**\n * Hex colour code for brand colour.\n * Not Nullable\n */\n public brandColour: string = \"\";\n /**\n * Hex colour code for secondary colour.\n * Not Nullable\n */\n public secondaryColour: string = \"\";\n public onBrandColour: string = \"\";\n public onSecondaryColour: string = \"\";\n public stockLevelDisplay: EnumStockLevelDisplay = EnumStockLevelDisplay.off;\n private _lowStockThreshold: number | null = null;\n /**\n * This threshold is used when StockLevelDisplay is set to ShowStatus, triggering the Low Stock status when the available stock falls below this value.\n * Not Negative\n */\n public get lowStockThreshold(): number | null { return this._lowStockThreshold }\n public set lowStockThreshold(value: number | null) {\n this._lowStockThreshold = value === undefined ? null : value;\n }\n /**\n * Accepted payment methods for trade portal users when completing an order.\n */\n public paymentMethods: EnumTpPaymentMethod[] = [];\n public telephoneNumber: string = \"\";\n public emailAddress: string = \"\";\n public website: string = \"\";\n public address: string = \"\";\n public currencySymbolPrefix: string = \"\";\n public currencySymbolSuffix: string = \"\";\n public currencyMaxDecimalPlaces: number = 0;\n public dateFormat: EnumDateFormat = EnumDateFormat.yYYYMMDD;\n public timeFormat: string = \"\";\n public timezone: string = \"\";\n public logoBase64: string = \"\";\n public billingStatus: EnumBillingPlanStatus = EnumBillingPlanStatus.trialling;\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tenantId = Guid.fromString(jsonSerializedObject.tenantId);\n this.storeName = jsonSerializedObject.storeName;\n this.storeCode = jsonSerializedObject.storeCode;\n this.stripePublicApiKey = jsonSerializedObject.stripePublicApiKey;\n this.storeDescription = jsonSerializedObject.storeDescription;\n this.termsAndConditionsLink = jsonSerializedObject.termsAndConditionsLink;\n this.brandFont = jsonSerializedObject.brandFont;\n this.bodyFont = jsonSerializedObject.bodyFont;\n this.brandColour = jsonSerializedObject.brandColour;\n this.secondaryColour = jsonSerializedObject.secondaryColour;\n this.onBrandColour = jsonSerializedObject.onBrandColour;\n this.onSecondaryColour = jsonSerializedObject.onSecondaryColour;\n this.stockLevelDisplay = EnumStockLevelDisplay.getByValue(jsonSerializedObject.stockLevelDisplay, this.stockLevelDisplay);\n this.lowStockThreshold = jsonSerializedObject.lowStockThreshold == null ? null : jsonSerializedObject.lowStockThreshold;\n this.paymentMethods = jsonSerializedObject.paymentMethods.map((v: any) => EnumTpPaymentMethod.getByValue(v));\n this.telephoneNumber = jsonSerializedObject.telephoneNumber;\n this.emailAddress = jsonSerializedObject.emailAddress;\n this.website = jsonSerializedObject.website;\n this.address = jsonSerializedObject.address;\n this.currencySymbolPrefix = jsonSerializedObject.currencySymbolPrefix;\n this.currencySymbolSuffix = jsonSerializedObject.currencySymbolSuffix;\n this.currencyMaxDecimalPlaces = jsonSerializedObject.currencyMaxDecimalPlaces;\n this.dateFormat = EnumDateFormat.getByValue(jsonSerializedObject.dateFormat, this.dateFormat);\n this.timeFormat = jsonSerializedObject.timeFormat;\n this.timezone = jsonSerializedObject.timezone;\n this.logoBase64 = jsonSerializedObject.logoBase64;\n this.billingStatus = EnumBillingPlanStatus.getByValue(jsonSerializedObject.billingStatus, this.billingStatus);\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tenantId = this.tenantId.toString();\n toRet.storeName = this.storeName;\n toRet.storeCode = this.storeCode;\n toRet.stripePublicApiKey = this.stripePublicApiKey;\n toRet.storeDescription = this.storeDescription;\n toRet.termsAndConditionsLink = this.termsAndConditionsLink;\n toRet.brandFont = this.brandFont;\n toRet.bodyFont = this.bodyFont;\n toRet.brandColour = this.brandColour;\n toRet.secondaryColour = this.secondaryColour;\n toRet.onBrandColour = this.onBrandColour;\n toRet.onSecondaryColour = this.onSecondaryColour;\n toRet.stockLevelDisplay = this.stockLevelDisplay.value;\n toRet.lowStockThreshold = this.lowStockThreshold == null ? null : this.lowStockThreshold;\n toRet.paymentMethods = this.paymentMethods.map(v => v.value);\n toRet.telephoneNumber = this.telephoneNumber;\n toRet.emailAddress = this.emailAddress;\n toRet.website = this.website;\n toRet.address = this.address;\n toRet.currencySymbolPrefix = this.currencySymbolPrefix;\n toRet.currencySymbolSuffix = this.currencySymbolSuffix;\n toRet.currencyMaxDecimalPlaces = this.currencyMaxDecimalPlaces;\n toRet.dateFormat = this.dateFormat.value;\n toRet.timeFormat = this.timeFormat;\n toRet.timezone = this.timezone;\n toRet.logoBase64 = this.logoBase64;\n toRet.billingStatus = this.billingStatus.value;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tenantId\", rule: (v: any) => !v.isEmpty() || \"TpTenant.TenantId cannot be empty\"},\n {field: \"storeName\", rule: (v: any) => v == null || v.length <= 1000 || \"StoreName has too many characters (1000)\"},\n {field: \"storeCode\", rule: (v: any) => v == null || v.length <= 32 || \"StoreCode has too many characters (32)\"},\n {field: \"storeDescription\", rule: (v: any) => v == null || v.length <= 10000 || \"StoreDescription has too many characters (10000)\"},\n {field: \"termsAndConditionsLink\", rule: (v: any) => v == null || v.length <= 1000 || \"TermsAndConditionsLink has too many characters (1000)\"},\n {field: \"currencyMaxDecimalPlaces\", rule: (v: any) => v == null || v >= -2147483648 || \"CurrencyMaxDecimalPlaces is not greater than minimum allowed value: -2147483648\"},\n {field: \"currencyMaxDecimalPlaces\", rule: (v: any) => v == null || v <= 2147483647 || \"CurrencyMaxDecimalPlaces is above maximum allowed value: 2147483647\"},\n ];\n}\n\n\nexport class TpSession extends ModelObject {\n\n public id: Guid = Guid.createEmpty();\n public tenantId: Guid = Guid.createEmpty();\n /**\n * The session token expected on every request for this session\n * Not Nullable\n * Not Empty\n * Max Length : 33\n * Preserves leading and trailing whitespce.\n */\n public token: string = \"\";\n /**\n * Contact id in Brewman of the user for this session\n */\n public outletContactId: Guid = Guid.createEmpty();\n /**\n * Last Access timestamp\n */\n public lastAccess: Instant = Instant.ofEpochMilli(0);\n /**\n * A string that identifies a browser instance. This is not guaranteed to be unique, and can be changed by the user at any time.\n * Not Nullable\n * Preserves leading and trailing whitespce.\n */\n public browserInstanceId: string = \"\";\n /**\n * Determines whether this session is for a tenant viewing TP as the specified contact.\n */\n public isMorphedUser: boolean = false;\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.id = Guid.fromString(jsonSerializedObject.id);\n this.tenantId = Guid.fromString(jsonSerializedObject.tenantId);\n this.token = jsonSerializedObject.token;\n this.outletContactId = Guid.fromString(jsonSerializedObject.outletContactId);\n this.lastAccess = Instant.parse(jsonSerializedObject.lastAccess);\n this.browserInstanceId = jsonSerializedObject.browserInstanceId;\n this.isMorphedUser = jsonSerializedObject.isMorphedUser;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.id = this.id.toString();\n toRet.tenantId = this.tenantId.toString();\n toRet.token = this.token;\n toRet.outletContactId = this.outletContactId.toString();\n toRet.lastAccess = this.lastAccess.toString();\n toRet.browserInstanceId = this.browserInstanceId;\n toRet.isMorphedUser = this.isMorphedUser;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"id\", rule: (v: any) => !v.isEmpty() || \"TpSession.Id cannot be empty\"},\n {field: \"tenantId\", rule: (v: any) => !v.isEmpty() || \"TpSession.TenantId cannot be empty\"},\n {field: \"token\", rule: (v: any) => v == null || v.length !== 0 || \"Token cannot be empty\"},\n {field: \"token\", rule: (v: any) => v == null || v.length <= 33 || \"Token has too many characters (33)\"},\n {field: \"outletContactId\", rule: (v: any) => !v.isEmpty() || \"TpSession.OutletContactId cannot be empty\"},\n ];\n}\n\n\nexport class TpSignInResult extends ModelObject {\n\n private _tpSession: TpSession | null = null;\n public get tpSession(): TpSession | null { return this._tpSession }\n public set tpSession(value: TpSession | null) {\n this._tpSession = value === undefined ? null : value;\n }\n public mustChangePassword: boolean = false;\n public errorReason: EnumTpSessionErrorReason = EnumTpSessionErrorReason.none;\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tpSession = jsonSerializedObject.tpSession == null ? null : new TpSession(jsonSerializedObject.tpSession);\n this.mustChangePassword = jsonSerializedObject.mustChangePassword;\n this.errorReason = EnumTpSessionErrorReason.getByValue(jsonSerializedObject.errorReason, this.errorReason);\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tpSession = this.tpSession == null ? null : this.tpSession?.toJsonSerializedObject() ?? null;\n toRet.mustChangePassword = this.mustChangePassword;\n toRet.errorReason = this.errorReason.value;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tpSession\", rule: (v: any) => (v === null) || v.validate()},\n ];\n}\n\n\nexport class TpItemTieredDiscount extends ModelObject {\n\n private _qty: number | null = null;\n public get qty(): number | null { return this._qty }\n public set qty(value: number | null) {\n this._qty = value === undefined ? null : value;\n }\n private _discount: number | null = null;\n public get discount(): number | null { return this._discount }\n public set discount(value: number | null) {\n this._discount = value === undefined ? null : value;\n }\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.qty = jsonSerializedObject.qty == null ? null : jsonSerializedObject.qty;\n this.discount = jsonSerializedObject.discount == null ? null : jsonSerializedObject.discount;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.qty = this.qty == null ? null : this.qty;\n toRet.discount = this.discount == null ? null : this.discount;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class TpItem extends ModelObject {\n\n public version: number = 0;\n /**\n * Brewman stock item id of this additional fields belongs to.\n */\n public itemId: Guid = Guid.createEmpty();\n /**\n * Main purpose - mainly for grouping items for management. Immutable\n */\n public mainPurpose: EnumItemMainPurpose = EnumItemMainPurpose.unknown;\n /**\n * Code\n * Not Nullable\n * Not Empty\n * Max Length : 1000\n */\n public code: string = \"\";\n /**\n * Name\n * Not Nullable\n * Not Empty\n * Max Length : 1000\n */\n public name: string = \"\";\n private _productBrandId: Guid | null = null;\n /**\n * Product Brand Id. Optional even for Products.\n */\n public get productBrandId(): Guid | null { return this._productBrandId }\n public set productBrandId(value: Guid | null) {\n this._productBrandId = value === undefined ? null : value;\n }\n private _packageTypeId: Guid | null = null;\n /**\n * Package Type Id. Optional even for Products\n */\n public get packageTypeId(): Guid | null { return this._packageTypeId }\n public set packageTypeId(value: Guid | null) {\n this._packageTypeId = value === undefined ? null : value;\n }\n private _imageId: Guid | null = null;\n public get imageId(): Guid | null { return this._imageId }\n public set imageId(value: Guid | null) {\n this._imageId = value === undefined ? null : value;\n }\n public description: string = \"\";\n public tastingNotes: string = \"\";\n public ingredientsAllergens: string = \"\";\n /**\n * Abv.\n * Not Negative\n * Maximum : 100\n */\n public abv: number = 0;\n public unitListNetPrice: number = 0;\n public outletNetPrice: number = 0;\n public stockLevel: number = 0;\n public flatDiscount: number = 0;\n public tieredDiscountBasis: EnumDiscountBasis = EnumDiscountBasis.none;\n public tieredDiscounts: TpItemTieredDiscount[] = [];\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.version = jsonSerializedObject.version;\n this.itemId = Guid.fromString(jsonSerializedObject.itemId);\n this.mainPurpose = EnumItemMainPurpose.getByValue(jsonSerializedObject.mainPurpose, this.mainPurpose);\n this.code = jsonSerializedObject.code;\n this.name = jsonSerializedObject.name;\n this.productBrandId = jsonSerializedObject.productBrandId == null ? null : Guid.fromString(jsonSerializedObject.productBrandId);\n this.packageTypeId = jsonSerializedObject.packageTypeId == null ? null : Guid.fromString(jsonSerializedObject.packageTypeId);\n this.imageId = jsonSerializedObject.imageId == null ? null : Guid.fromString(jsonSerializedObject.imageId);\n this.description = jsonSerializedObject.description;\n this.tastingNotes = jsonSerializedObject.tastingNotes;\n this.ingredientsAllergens = jsonSerializedObject.ingredientsAllergens;\n this.abv = jsonSerializedObject.abv;\n this.unitListNetPrice = jsonSerializedObject.unitListNetPrice;\n this.outletNetPrice = jsonSerializedObject.outletNetPrice;\n this.stockLevel = jsonSerializedObject.stockLevel;\n this.flatDiscount = jsonSerializedObject.flatDiscount;\n this.tieredDiscountBasis = EnumDiscountBasis.getByValue(jsonSerializedObject.tieredDiscountBasis, this.tieredDiscountBasis);\n this.tieredDiscounts = jsonSerializedObject.tieredDiscounts.map((v: any) => new TpItemTieredDiscount(v));\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.version = this.version;\n toRet.itemId = this.itemId.toString();\n toRet.mainPurpose = this.mainPurpose.value;\n toRet.code = this.code;\n toRet.name = this.name;\n toRet.productBrandId = this.productBrandId == null ? null : this.productBrandId.toString();\n toRet.packageTypeId = this.packageTypeId == null ? null : this.packageTypeId.toString();\n toRet.imageId = this.imageId == null ? null : this.imageId.toString();\n toRet.description = this.description;\n toRet.tastingNotes = this.tastingNotes;\n toRet.ingredientsAllergens = this.ingredientsAllergens;\n toRet.abv = this.abv;\n toRet.unitListNetPrice = this.unitListNetPrice;\n toRet.outletNetPrice = this.outletNetPrice;\n toRet.stockLevel = this.stockLevel;\n toRet.flatDiscount = this.flatDiscount;\n toRet.tieredDiscountBasis = this.tieredDiscountBasis.value;\n toRet.tieredDiscounts = this.tieredDiscounts.map(v => v.toJsonSerializedObject());\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"version\", rule: (v: any) => v == null || v >= -9223372036854775808 || \"Version is not greater than minimum allowed value: -9223372036854775808\"},\n {field: \"version\", rule: (v: any) => v == null || v <= 9223372036854775807 || \"Version is above maximum allowed value: 9223372036854775807\"},\n {field: \"itemId\", rule: (v: any) => !v.isEmpty() || \"TpItem.ItemId cannot be empty\"},\n {field: \"code\", rule: (v: any) => v == null || v.length !== 0 || \"Code cannot be empty\"},\n {field: \"code\", rule: (v: any) => v == null || v.length <= 1000 || \"Code has too many characters (1000)\"},\n {field: \"name\", rule: (v: any) => v == null || v.length !== 0 || \"Name cannot be empty\"},\n {field: \"name\", rule: (v: any) => v == null || v.length <= 1000 || \"Name has too many characters (1000)\"},\n {field: \"productBrandId\", rule: (v: any) => v == null || !v.isEmpty() || \"TpItem.ProductBrandId cannot be empty\"},\n {field: \"packageTypeId\", rule: (v: any) => v == null || !v.isEmpty() || \"TpItem.PackageTypeId cannot be empty\"},\n {field: \"imageId\", rule: (v: any) => v == null || !v.isEmpty() || \"TpItem.ImageId cannot be empty\"},\n {field: \"description\", rule: (v: any) => v == null || v.length <= 10000 || \"Description has too many characters (10000)\"},\n {field: \"tastingNotes\", rule: (v: any) => v == null || v.length <= 10000 || \"TastingNotes has too many characters (10000)\"},\n {field: \"ingredientsAllergens\", rule: (v: any) => v == null || v.length <= 10000 || \"IngredientsAllergens has too many characters (10000)\"},\n {field: \"tieredDiscounts\", rule: (v: any) => !!v || \"tieredDiscounts is required\"},\n {field: \"tieredDiscounts\", rule: (v: any) => {\n if (v === null) {\n return true;\n }\n\n return (v as TpItemTieredDiscount[]).reduce((acc: Array, curr: TpItemTieredDiscount) => acc.concat(curr.validate()), new Array());\n }},\n ];\n}\n\n\nexport class TpPackageType extends ModelObject {\n\n public id: Guid = Guid.createEmpty();\n private _litres: number | null = null;\n /**\n * Litres usually dispensed into this package, if relevant\n * Greater Than : 0\n */\n public get litres(): number | null { return this._litres }\n public set litres(value: number | null) {\n this._litres = value === undefined ? null : value;\n }\n /**\n * Package Type\n * Not Nullable\n * Not Empty\n * Max Length : 1000\n */\n public name: string = \"\";\n public displayName: string = \"\";\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.id = Guid.fromString(jsonSerializedObject.id);\n this.litres = jsonSerializedObject.litres == null ? null : jsonSerializedObject.litres;\n this.name = jsonSerializedObject.name;\n this.displayName = jsonSerializedObject.displayName;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.id = this.id.toString();\n toRet.litres = this.litres == null ? null : this.litres;\n toRet.name = this.name;\n toRet.displayName = this.displayName;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"id\", rule: (v: any) => !v.isEmpty() || \"TpPackageType.Id cannot be empty\"},\n {field: \"litres\", rule: (v: any) => v == null || v > 0 || \"Litres is not greater than minimum allowed value: 0\"},\n {field: \"name\", rule: (v: any) => v == null || v.length !== 0 || \"Name cannot be empty\"},\n {field: \"name\", rule: (v: any) => v == null || v.length <= 1000 || \"Name has too many characters (1000)\"},\n {field: \"displayName\", rule: (v: any) => v == null || v.length <= 1000 || \"DisplayName has too many characters (1000)\"},\n ];\n}\n\n\nexport class TpItemImage extends ModelObject {\n\n public itemId: Guid = Guid.createEmpty();\n public base64String: string = \"\";\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.itemId = Guid.fromString(jsonSerializedObject.itemId);\n this.base64String = jsonSerializedObject.base64String;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.itemId = this.itemId.toString();\n toRet.base64String = this.base64String;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"itemId\", rule: (v: any) => !v.isEmpty() || \"TpItemImage.ItemId cannot be empty\"},\n ];\n}\n\n\nexport class GetCurrentTpOutletRequest extends ModelObject {\n\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class GetCurrentTpOutletResponse extends ModelObject {\n\n public tpOutlet: TpOutlet = new TpOutlet();\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tpOutlet = new TpOutlet(jsonSerializedObject.tpOutlet);\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tpOutlet = this.tpOutlet.toJsonSerializedObject();\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tpOutlet\", rule: (v: any) => !!v || \"tpOutlet is required\"},\n {field: \"tpOutlet\", rule: (v: any) => v.validate()},\n ];\n}\n\n\nexport class GetAllTpProductBrandsRequest extends ModelObject {\n\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class GetAllTpProductBrandsResponse extends ModelObject {\n\n public tpProductBrands: TpProductBrand[] = [];\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tpProductBrands = jsonSerializedObject.tpProductBrands.map((v: any) => new TpProductBrand(v));\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tpProductBrands = this.tpProductBrands.map(v => v.toJsonSerializedObject());\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tpProductBrands\", rule: (v: any) => !!v || \"tpProductBrands is required\"},\n {field: \"tpProductBrands\", rule: (v: any) => {\n if (v === null) {\n return true;\n }\n\n return (v as TpProductBrand[]).reduce((acc: Array, curr: TpProductBrand) => acc.concat(curr.validate()), new Array());\n }},\n ];\n}\n\n\nexport class GetAllVatCodesRequest extends ModelObject {\n\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class GetAllVatCodesResponse extends ModelObject {\n\n public tpVatCodes: TpVatCode[] = [];\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tpVatCodes = jsonSerializedObject.tpVatCodes.map((v: any) => new TpVatCode(v));\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tpVatCodes = this.tpVatCodes.map(v => v.toJsonSerializedObject());\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tpVatCodes\", rule: (v: any) => !!v || \"tpVatCodes is required\"},\n {field: \"tpVatCodes\", rule: (v: any) => {\n if (v === null) {\n return true;\n }\n\n return (v as TpVatCode[]).reduce((acc: Array, curr: TpVatCode) => acc.concat(curr.validate()), new Array());\n }},\n ];\n}\n\n\nexport class GetTpTenantFromStoreCodeRequest extends ModelObject {\n\n public tpStoreCode: string = \"\";\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tpStoreCode = jsonSerializedObject.tpStoreCode;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tpStoreCode = this.tpStoreCode;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class GetTpTenantFromStoreCodeResponse extends ModelObject {\n\n private _tenant: TpTenant | null = null;\n public get tenant(): TpTenant | null { return this._tenant }\n public set tenant(value: TpTenant | null) {\n this._tenant = value === undefined ? null : value;\n }\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tenant = jsonSerializedObject.tenant == null ? null : new TpTenant(jsonSerializedObject.tenant);\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tenant = this.tenant == null ? null : this.tenant?.toJsonSerializedObject() ?? null;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tenant\", rule: (v: any) => (v === null) || v.validate()},\n ];\n}\n\n\nexport class GetTpTenantRequest extends ModelObject {\n\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class GetTpTenantResponse extends ModelObject {\n\n public tenant: TpTenant = new TpTenant();\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tenant = new TpTenant(jsonSerializedObject.tenant);\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tenant = this.tenant.toJsonSerializedObject();\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tenant\", rule: (v: any) => !!v || \"tenant is required\"},\n {field: \"tenant\", rule: (v: any) => v.validate()},\n ];\n}\n\n\nexport class SignInAndCreateSessionRequest extends ModelObject {\n\n public tenantId: Guid = Guid.createEmpty();\n public email: string = \"\";\n public password: string = \"\";\n private _browserInstanceId: string | null = null;\n /**\n * An optional string that represents a browser instance. Not guaranteed to be unique.\n * Nullable\n * Preserves leading and trailing whitespce.\n */\n public get browserInstanceId(): string | null { return this._browserInstanceId }\n public set browserInstanceId(value: string | null) {\n this._browserInstanceId = value === undefined ? null : value;\n }\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tenantId = Guid.fromString(jsonSerializedObject.tenantId);\n this.email = jsonSerializedObject.email;\n this.password = jsonSerializedObject.password;\n this.browserInstanceId = jsonSerializedObject.browserInstanceId == null ? null : jsonSerializedObject.browserInstanceId;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tenantId = this.tenantId.toString();\n toRet.email = this.email;\n toRet.password = this.password;\n toRet.browserInstanceId = this.browserInstanceId == null ? null : this.browserInstanceId;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tenantId\", rule: (v: any) => !v.isEmpty() || \".TenantId cannot be empty\"},\n ];\n}\n\n\nexport class SignInAndCreateSessionResponse extends ModelObject {\n\n public result: TpSignInResult = new TpSignInResult();\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.result = new TpSignInResult(jsonSerializedObject.result);\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.result = this.result.toJsonSerializedObject();\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"result\", rule: (v: any) => !!v || \"result is required\"},\n {field: \"result\", rule: (v: any) => v.validate()},\n ];\n}\n\n\nexport class ExpireTpSessionRequest extends ModelObject {\n\n public sessionId: Guid = Guid.createEmpty();\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.sessionId = Guid.fromString(jsonSerializedObject.sessionId);\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.sessionId = this.sessionId.toString();\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"sessionId\", rule: (v: any) => !v.isEmpty() || \".SessionId cannot be empty\"},\n ];\n}\n\n\nexport class GetTpSessionRequest extends ModelObject {\n\n public sessionToken: string = \"\";\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.sessionToken = jsonSerializedObject.sessionToken;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.sessionToken = this.sessionToken;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class GetTpSessionResponse extends ModelObject {\n\n public tpSession: TpSession = new TpSession();\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tpSession = new TpSession(jsonSerializedObject.tpSession);\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tpSession = this.tpSession.toJsonSerializedObject();\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tpSession\", rule: (v: any) => !!v || \"tpSession is required\"},\n {field: \"tpSession\", rule: (v: any) => v.validate()},\n ];\n}\n\n\nexport class ChangeTpPasswordRequest extends ModelObject {\n\n public oldPassword: string = \"\";\n public newPassword: string = \"\";\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.oldPassword = jsonSerializedObject.oldPassword;\n this.newPassword = jsonSerializedObject.newPassword;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.oldPassword = this.oldPassword;\n toRet.newPassword = this.newPassword;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class ChangeTpPasswordResponse extends ModelObject {\n\n public error: string = \"\";\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.error = jsonSerializedObject.error;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.error = this.error;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class CreateTpSessionFromBmSessionRequest extends ModelObject {\n\n public tenantId: Guid = Guid.createEmpty();\n public contactId: Guid = Guid.createEmpty();\n private _browserInstanceId: string | null = null;\n /**\n * An optional string that represents a browser instance. Not guaranteed to be unique.\n * Nullable\n * Preserves leading and trailing whitespce.\n */\n public get browserInstanceId(): string | null { return this._browserInstanceId }\n public set browserInstanceId(value: string | null) {\n this._browserInstanceId = value === undefined ? null : value;\n }\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tenantId = Guid.fromString(jsonSerializedObject.tenantId);\n this.contactId = Guid.fromString(jsonSerializedObject.contactId);\n this.browserInstanceId = jsonSerializedObject.browserInstanceId == null ? null : jsonSerializedObject.browserInstanceId;\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tenantId = this.tenantId.toString();\n toRet.contactId = this.contactId.toString();\n toRet.browserInstanceId = this.browserInstanceId == null ? null : this.browserInstanceId;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tenantId\", rule: (v: any) => !v.isEmpty() || \".TenantId cannot be empty\"},\n {field: \"contactId\", rule: (v: any) => !v.isEmpty() || \".ContactId cannot be empty\"},\n ];\n}\n\n\nexport class CreateTpSessionFromBmSessionResponse extends ModelObject {\n\n public tpSession: TpSession = new TpSession();\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tpSession = new TpSession(jsonSerializedObject.tpSession);\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tpSession = this.tpSession.toJsonSerializedObject();\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tpSession\", rule: (v: any) => !!v || \"tpSession is required\"},\n {field: \"tpSession\", rule: (v: any) => v.validate()},\n ];\n}\n\n\nexport class GetAllTpItemsRequest extends ModelObject {\n\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class GetAllTpItemsResponse extends ModelObject {\n\n public tpItems: TpItem[] = [];\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tpItems = jsonSerializedObject.tpItems.map((v: any) => new TpItem(v));\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tpItems = this.tpItems.map(v => v.toJsonSerializedObject());\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tpItems\", rule: (v: any) => !!v || \"tpItems is required\"},\n {field: \"tpItems\", rule: (v: any) => {\n if (v === null) {\n return true;\n }\n\n return (v as TpItem[]).reduce((acc: Array, curr: TpItem) => acc.concat(curr.validate()), new Array());\n }},\n ];\n}\n\n\nexport class GetAllTpPackageTypesRequest extends ModelObject {\n\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class GetAllTpPackageTypesResponse extends ModelObject {\n\n public tpPackageTypes: TpPackageType[] = [];\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tpPackageTypes = jsonSerializedObject.tpPackageTypes.map((v: any) => new TpPackageType(v));\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tpPackageTypes = this.tpPackageTypes.map(v => v.toJsonSerializedObject());\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tpPackageTypes\", rule: (v: any) => !!v || \"tpPackageTypes is required\"},\n {field: \"tpPackageTypes\", rule: (v: any) => {\n if (v === null) {\n return true;\n }\n\n return (v as TpPackageType[]).reduce((acc: Array, curr: TpPackageType) => acc.concat(curr.validate()), new Array());\n }},\n ];\n}\n\n\nexport class GetTpItemImagesRequest extends ModelObject {\n\n public itemIds: readonly Guid[] = [];\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.itemIds = jsonSerializedObject.itemIds.map((v: any) => Guid.fromString(v));\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.itemIds = this.itemIds.map(v => v.toString());\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n ];\n}\n\n\nexport class GetTpItemImagesResponse extends ModelObject {\n\n public tpItemImages: TpItemImage[] = [];\n\n public constructor(jsonSerializedObject?: any) {\n super();\n if (jsonSerializedObject) {\n this.tpItemImages = jsonSerializedObject.tpItemImages.map((v: any) => new TpItemImage(v));\n }\n\n }\n\n public toJsonSerializedObject(): any {\n const toRet = {} as any;\n toRet.tpItemImages = this.tpItemImages.map(v => v.toJsonSerializedObject());\n return toRet;\n }\n\n public toProto(): any {\n return this.toJsonSerializedObject();\n }\n\n public toBinary(): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(this.toJsonSerializedObject()));\n }\n\n public validationRules: ValidationRule = [\n {field: \"tpItemImages\", rule: (v: any) => !!v || \"tpItemImages is required\"},\n {field: \"tpItemImages\", rule: (v: any) => {\n if (v === null) {\n return true;\n }\n\n return (v as TpItemImage[]).reduce((acc: Array, curr: TpItemImage) => acc.concat(curr.validate()), new Array());\n }},\n ];\n}\n\n\nexport class TradePortalService extends ServiceBase {\n\n public async getCurrentTpOutlet(opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new GetCurrentTpOutletRequest();\n const extractor = (response:any) => new GetCurrentTpOutletResponse(response).tpOutlet;\n return this.makeTpJsonRequest(\"tradePortal/v1/getCurrentTpOutlet\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async getAllTpProductBrands(opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new GetAllTpProductBrandsRequest();\n const extractor = (response:any) => new GetAllTpProductBrandsResponse(response).tpProductBrands;\n return this.makeTpJsonRequest(\"tradePortal/v1/getAllTpProductBrands\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async getAllVatCodes(opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new GetAllVatCodesRequest();\n const extractor = (response:any) => new GetAllVatCodesResponse(response).tpVatCodes;\n return this.makeTpJsonRequest(\"tradePortal/v1/getAllVatCodes\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async getTpTenantFromStoreCode(tpStoreCode: string, opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new GetTpTenantFromStoreCodeRequest();\n req.tpStoreCode = tpStoreCode;\n const extractor = (response:any) => new GetTpTenantFromStoreCodeResponse(response).tenant;\n return this.makeJsonRequest(\"tradePortal/v1/getTpTenantFromStoreCode\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async getTpTenant(opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new GetTpTenantRequest();\n const extractor = (response:any) => new GetTpTenantResponse(response).tenant;\n return this.makeTpJsonRequest(\"tradePortal/v1/getTpTenant\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async signInAndCreateSession(tenantId: Guid, email: string, password: string, browserInstanceId: string | null, opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new SignInAndCreateSessionRequest();\n req.tenantId = tenantId;\n req.email = email;\n req.password = password;\n req.browserInstanceId = browserInstanceId;\n const extractor = (response:any) => new SignInAndCreateSessionResponse(response).result;\n return this.makeJsonRequest(\"tradePortal/v1/signInAndCreateSession\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async expireTpSession(sessionId: Guid, opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new ExpireTpSessionRequest();\n req.sessionId = sessionId;\n const extractor = null;\n return this.makeTpJsonRequest(\"tradePortal/v1/expireTpSession\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async changeTpPassword(oldPassword: string, newPassword: string, opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new ChangeTpPasswordRequest();\n req.oldPassword = oldPassword;\n req.newPassword = newPassword;\n const extractor = (response:any) => new ChangeTpPasswordResponse(response).error;\n return this.makeTpJsonRequest(\"tradePortal/v1/changeTpPassword\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async createTpSessionFromBmSession(tenantId: Guid, contactId: Guid, browserInstanceId: string | null, opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new CreateTpSessionFromBmSessionRequest();\n req.tenantId = tenantId;\n req.contactId = contactId;\n req.browserInstanceId = browserInstanceId;\n const extractor = (response:any) => new CreateTpSessionFromBmSessionResponse(response).tpSession;\n return this.makeJsonRequest(\"tradePortal/v1/createTpSessionFromBmSession\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async getAllTpItems(opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new GetAllTpItemsRequest();\n const extractor = (response:any) => new GetAllTpItemsResponse(response).tpItems;\n return this.makeTpJsonRequest(\"tradePortal/v1/getAllTpItems\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async getAllTpPackageTypes(opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new GetAllTpPackageTypesRequest();\n const extractor = (response:any) => new GetAllTpPackageTypesResponse(response).tpPackageTypes;\n return this.makeTpJsonRequest(\"tradePortal/v1/getAllTpPackageTypes\", req.toJsonSerializedObject(), extractor, opts);\n };\n\n public async getTpItemImages(itemIds: readonly Guid[], opts?: {requestTimeoutMs?: number, sessionToken?: string}): Promise {\n const req = new GetTpItemImagesRequest();\n req.itemIds = itemIds;\n const extractor = (response:any) => new GetTpItemImagesResponse(response).tpItemImages;\n return this.makeTpJsonRequest(\"tradePortal/v1/getTpItemImages\", req.toJsonSerializedObject(), extractor, opts);\n };\n}\n\nexport const tradePortalService = new TradePortalService();","import type { TpTenant } from \"@/app/services/generated/tradeportalService\";\nimport type { Framework } from \"vuetify\";\n\nfunction colourToVuetify(colour: string) {\n //Vuetify seems to only like #rrggbb format values.\n if (colour.startsWith(\"#\") && colour.length === 9) {\n // Have been provided with #rrggbbaa - trim the aa\n return colour.substring(0, 7);\n }\n return colour;\n}\n\nfunction loadGoogleFonts(brandFont: string, bodyFont: string) {\n const fonts = [brandFont, bodyFont].filter((x) => x);\n\n if (fonts.length > 0) {\n const fontString = fonts.map((font) => font.replace(/ /g, \"+\")).join(\"|\");\n\n const existingLinks = document.querySelectorAll(\n 'link[rel=\"stylesheet\"][data-google-font]'\n );\n existingLinks.forEach((link) => link.remove());\n\n const link = document.createElement(\"link\");\n link.href = `https://fonts.googleapis.com/css?family=${fontString}&display=swap`;\n link.rel = \"stylesheet\";\n link.setAttribute(\"data-google-font\", \"true\");\n\n document.head.appendChild(link);\n\n const app = document.getElementById(\"app\");\n if (app && bodyFont) {\n app.style.fontFamily = bodyFont;\n }\n }\n}\n\nexport class TpBranding {\n private _primaryBg = \"rgb(40, 40, 120)\";\n private _primaryFg = \"rgb(255, 255, 255)\";\n private _secondaryBg = \"rgb(47, 128, 203)\";\n private _secondaryFg = \"rgb(255, 255, 255)\";\n private _brandFont = \"\";\n private _bodyFont = \"\";\n\n public get primaryBg() {\n return this._primaryBg;\n }\n public get primaryFg() {\n return this._primaryFg;\n }\n\n public get secondaryBg() {\n return this._secondaryBg;\n }\n public get secondaryFg() {\n return this._secondaryFg;\n }\n\n public get premierSystemsBrandBg() {\n return \"rgb(0, 46, 93)\";\n }\n\n public get premierSystemsBrandFg() {\n return \"rgb(255, 255, 255)\";\n }\n\n public get surfaceFg() {\n return \"rgba(28, 27, 27)\";\n }\n\n public get surfaceVariantBg() {\n return \"rgb(243, 243, 243)\";\n }\n\n public get surfaceVariantFg() {\n return \"rgb(103, 103, 103)\";\n }\n\n public get inBasketBg() {\n return \"rgb(169, 224, 123)\";\n }\n\n public get pageBg() {\n return \"rgb(255, 255, 255)\";\n }\n\n public get pageFg() {\n return \"rgb(0, 0, 0)\";\n }\n\n public get warningBannerBg() {\n return \"rgb(252, 242, 222)\";\n }\n public get warningTriangleColour() {\n return \"rgb(255, 187, 50)\";\n }\n\n public get errorFg() {\n return \"rgb(228, 0, 0\";\n }\n\n public get errorBannerBg() {\n return \"rgb(252, 222, 222)\";\n }\n\n public get successFg() {\n return \"rgb(0, 128, 0\";\n }\n\n public get successBannerBg() {\n return \"rgb(222, 252, 222)\";\n }\n\n public get brandFont() {\n return this._brandFont;\n }\n public get bodyFont() {\n return this._bodyFont;\n }\n\n public setTenantBranding(tenant: TpTenant, vuetify: Framework) {\n if (tenant.brandColour) {\n this._primaryBg = tenant.brandColour;\n vuetify.theme.themes.light.primary = colourToVuetify(tenant.brandColour);\n }\n\n if (tenant.onBrandColour) {\n this._primaryFg = tenant.onBrandColour;\n }\n\n if (tenant.secondaryColour) {\n this._secondaryBg = tenant.secondaryColour;\n vuetify.theme.themes.light.secondary = colourToVuetify(\n tenant.secondaryColour\n );\n }\n\n if (tenant.onSecondaryColour) {\n this._secondaryFg = tenant.onSecondaryColour;\n }\n\n if (tenant.brandFont) {\n this._brandFont = tenant.brandFont;\n }\n\n if (tenant.bodyFont) {\n this._bodyFont = tenant.bodyFont;\n }\n\n loadGoogleFonts(this._brandFont, this._bodyFont);\n }\n}\n\nconst tpBranding = new TpBranding();\n\nexport { tpBranding };\n","import { tenantService } from \"@/app/services/extensions/tenantServiceExtended\";\nimport { tradePortalService } from \"@/app/services/generated/tradeportalService\";\nimport { useVuetify } from \"@/plugins/vuetify\";\nimport { tpBranding } from \"@tp/tpBranding\";\nimport { tpSessionData } from \"@tp/tpSessionData\";\nimport Cookies from \"js-cookie\";\n\nconst cookieName = (storeCode: string) =>\n \"tpsession_\" + storeCode.toLocaleLowerCase();\n\nconst ensureSessionEstablishedForStore = async (storeCode: string) => {\n if (!storeCode) {\n return false;\n }\n\n if (\n tpSessionData.tenantOrDefault.storeCode.toLocaleLowerCase() ===\n storeCode.toLocaleLowerCase()\n ) {\n // Already established for the given code, so OK.\n return true;\n }\n\n const fromCookie = Cookies.get(cookieName(storeCode));\n if (fromCookie) {\n const parts = fromCookie.split(\"-\");\n return loadTpSession(\n storeCode,\n parts[0],\n parts[1]?.toLocaleLowerCase() === \"true\"\n );\n }\n\n return false;\n};\n\nconst storeTpSessionCookie = (\n storeCode: string,\n sessionToken: string,\n isMorphedUser: boolean\n) => {\n Cookies.set(cookieName(storeCode), sessionToken + \"-\" + isMorphedUser);\n};\n\nconst loadTpSession = async (\n storeCode: string,\n sessionToken: string,\n isMorphedUser: boolean\n) => {\n const { $vuetify } = useVuetify();\n\n try {\n const tenant = await tradePortalService.getTpTenant({ sessionToken });\n tpSessionData.setStore(tenant);\n tpSessionData.setSession(sessionToken);\n tpSessionData.setIsMorphedUser(isMorphedUser);\n tenantService.configureForTpTenant(tenant);\n\n tpBranding.setTenantBranding(tenant, $vuetify);\n\n storeTpSessionCookie(storeCode, sessionToken, isMorphedUser);\n return true;\n } catch {\n clearTpSession(storeCode);\n return false;\n }\n};\n\nconst clearTpSession = (storeCode: string) => {\n tpSessionData.setSession(\"\");\n Cookies.remove(cookieName(storeCode));\n};\n\nexport {\n ensureSessionEstablishedForStore,\n loadTpSession,\n storeTpSessionCookie,\n clearTpSession,\n};\n"],"names":["link","Cookies"],"mappings":"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"}