@snugdesk/core 0.2.44 → 0.2.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"snugdesk-core.mjs","sources":["../../../projects/snugdesk-core/src/app.config.ts","../../../projects/snugdesk-core/src/lib/components/footer/footer.component.ts","../../../projects/snugdesk-core/src/lib/components/footer/footer.component.html","../../../projects/snugdesk-core/src/lib/components/error/error.component.ts","../../../projects/snugdesk-core/src/lib/components/error/error.component.html","../../../projects/snugdesk-core/src/lib/components/loader/loader.component.ts","../../../projects/snugdesk-core/src/lib/components/loader/loader.component.html","../../../projects/snugdesk-core/src/lib/pipes/domain-name.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/epoch-formatter.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/safe-html.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/search.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/search-inner.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/singularize.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/custom-pipes.module.ts","../../../projects/snugdesk-core/src/lib/snugdesk-core.module.ts","../../../projects/snugdesk-core/src/lib/services/authentication.service.ts","../../../projects/snugdesk-core/src/lib/helpers/appsync-helper.service.ts","../../../projects/snugdesk-core/src/lib/helpers/opensearch-helper.service.ts","../../../projects/snugdesk-core/src/lib/helpers/s3-helper.service.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/billing.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/common.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/interaction-endpoint.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/interaction-widget.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/interaction.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/tenant.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/user.model.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/common.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/entity.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/interaction-endpoint.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/interaction-widget.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/user.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/team.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/interaction.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/entity-conversation.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/tenant.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/ticket.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/user-session.service.ts","../../../projects/snugdesk-core/src/lib/services/encrypted-storage.service.ts","../../../projects/snugdesk-core/src/lib/services/ip-registry.service.ts","../../../projects/snugdesk-core/src/lib/utilities/clean-deep.helper.ts","../../../projects/snugdesk-core/src/lib/utilities/custom.validators.ts","../../../projects/snugdesk-core/src/lib/utilities/reference-number-generator.ts","../../../projects/snugdesk-core/src/lib/utilities/email/html-sanitizer.util.ts","../../../projects/snugdesk-core/src/lib/services/email/entity-resolver.service.ts","../../../projects/snugdesk-core/src/lib/services/email/conversation-resolver.service.ts","../../../projects/snugdesk-core/src/lib/services/email/template.service.ts","../../../projects/snugdesk-core/src/public-api.ts","../../../projects/snugdesk-core/src/snugdesk-core.ts"],"sourcesContent":["import { AmplifyConfig } from './lib/helpers/appsync-helper.service';\n\nexport const SnugdeskAppConfig = {\n appDomain: 'snugdesk.com',\n appLogoURL: 'https://assets.snugdesk.com/logo/snugdesk.svg',\n appName: 'Snugdesk',\n appSupportEmail: 'support@snug.in',\n companyName: 'Snug Technologies Pvt. Ltd.',\n companyAddress: '403, Tower B, Global Business Park, MG Road, Gurugram, Haryana 122002, India',\n};\n\nexport const SnugdeskAPIConfig = {\n endpoint: 'https://api.snugdesk.com',\n};\n\nexport const SnugdeskUtilityConfig = {\n countryEndpoint: 'https://snugdesk-assets.s3.amazonaws.com/metadata/countries.json',\n ipLookupEndpoint: 'https://ipapi.co/json/',\n};\n\nexport const SnugdeskAmplifyConfig: AmplifyConfig = {\n aws_project_region: 'ap-south-1',\n aws_appsync_graphqlEndpoint: 'https://sgbnsklbvrh67mcvh3wqkzgyou.appsync-api.ap-south-1.amazonaws.com/graphql',\n aws_appsync_region: 'ap-south-1',\n aws_appsync_authenticationType: 'AWS_LAMBDA',\n};\n\nexport const GoogleMapsConfig = {\n apiKey: 'AIzaSyDOPOMzdMNj6QHFbBWzGmiaXP6yFFUMwok',\n};\n","import { Component } from '@angular/core';\n\nimport { SnugdeskAppConfig } from '../../../app.config';\n\n@Component({\n selector: 'sd-app-footer',\n templateUrl: './footer.component.html',\n styleUrl: './footer.component.css',\n standalone: false,\n})\nexport class FooterComponent {\n appConfig = SnugdeskAppConfig;\n}\n","<div class=\"sd_container_widget_footer\">\n <div class=\"sd_container_widget_footer_inner\"><span>Powered by</span>\n <svg width=\"16px\" shape-rendering=\"geometricPrecision\" text-rendering=\"geometricPrecision\" image-rendering=\"optimizeQuality\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" viewBox=\"0 0 877.098 808.09\">\n <g id=\"Layer_x0020_1\">\n <metadata id=\"CorelCorpID_0Corel-Layer\" />\n <g id=\"_258513600\">\n <path id=\"_258516096\" fill=\"#CBA96B\" fill-rule=\"nonzero\" d=\"M637.653 218.973c-109.109,-5.73516 -241.809,27.9446 -336.907,14.3602 -52.1167,-7.44554 -85.2507,-24.8291 -102.132,-36.1086 -57.8931,61.7431 -93.4412,144.67 -93.4412,235.995 0,171.801 125.437,314.25 289.707,340.911 -8.09408,-36.1447 -12.5046,-73.6839 -12.5046,-112.274 0,-189.17 102.668,-354.272 255.277,-442.882z\" />\n <path id=\"_258516024\" fill=\"#FAE5C5\" fill-rule=\"nonzero\" d=\"M778.919 331.111c0,0 -0.795844,-6.58187 -3.83616,-16.5262 -2.95236,-8.04746 -6.16964,-15.955 -9.68789,-23.7089 -15.0903,-29.1696 -46.4069,-64.5259 -110.487,-70.6637 -5.67476,-0.538334 -11.4438,-0.931487 -17.2553,-1.23986 -152.609,88.61 -255.277,253.712 -255.277,442.882 0,38.5905 4.41052,76.1297 12.5046,112.274 18.155,2.95342 36.7635,4.54405 55.7504,4.54405 190.788,0 345.456,-154.667 345.456,-345.455 0,-36.1033 -5.58044,-70.8873 -15.8766,-103.59 -0.812799,0.942084 -1.29073,1.48254 -1.29073,1.48254z\" />\n <path id=\"_258515952\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M718.294 758.328c-2.63444,0 -5.25511,-1.08726 -7.14458,-3.21411 -3.49387,-3.94743 -3.12509,-9.97401 0.819158,-13.4658 65.9724,-58.4336 110.727,-134.554 129.411,-220.127 1.1233,-5.15126 6.21627,-8.39928 11.3601,-7.28658 5.14278,1.12647 8.40352,6.20885 7.28234,11.3569 -19.557,89.5542 -66.3836,169.202 -135.403,230.332 -1.81317,1.60864 -4.07353,2.40449 -6.32542,2.40449z\" />\n <path id=\"_258515880\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M846.577 557.445c-1.40412,0 -2.83367,-0.181211 -4.25474,-0.555289 -8.91854,-2.3462 -14.2415,-11.4735 -11.9059,-20.3942 8.82422,-33.5198 13.3004,-68.2667 13.3004,-103.269 0,-9.21738 7.47309,-16.6926 16.6915,-16.6926 9.21738,0 16.6905,7.47521 16.6905,16.6926 0,37.8699 -4.83547,75.4727 -14.3877,111.768 -1.97001,7.49217 -8.73203,12.4506 -16.1341,12.4506z\" />\n <path id=\"_258515808\" fill=\"#F7AB54\" fill-rule=\"nonzero\" d=\"M532.463 51.2668c-26.5225,-4.561 -53.5261,-9.03723 -81.5311,-9.03723 -6.4971,0 -12.9486,0.180151 -19.3652,0.504423l0 0.0169554c-0.116568,0 -0.240555,0 -0.357123,0 -130.335,0 -188.497,-1.54718 -257.657,-42.7509 0,0 -0.329571,1.31722 -0.822337,3.71429 105.693,109.444 253.934,177.522 418.097,177.522 47.2367,0 97.7691,-5.74258 146.957,-18.847 -36.3757,-51.8856 -112.688,-95.2088 -205.32,-111.122z\" />\n <path id=\"_258515736\" fill=\"#2F3033\" fill-rule=\"nonzero\" d=\"M450.631 674.55c-105.869,0 -197.899,-65.1882 -228.997,-162.207 -3.11979,-9.71968 2.56768,-20.0233 12.7017,-23.017 10.134,-3.00111 20.8689,2.47231 23.9845,12.1909 26.1177,81.4633 103.4,136.2 192.311,136.2 88.9109,0 166.199,-54.7363 192.311,-136.2 3.11555,-9.72604 13.8494,-15.192 23.9834,-12.1909 10.134,2.99369 15.8257,13.2973 12.7007,23.017 -31.0962,97.0188 -123.128,162.207 -228.995,162.207z\" />\n <path id=\"_258515664\" fill=\"#2F3033\" fill-rule=\"nonzero\" d=\"M797.457 379.399c-3.54474,-22.8781 -9.31169,-45.0272 -17.0582,-66.2288l-67.6584 -15.8236c-1.42849,-0.334869 -2.86758,-0.470512 -4.33952,-0.402691 -13.9946,0.640066 -92.4705,4.71678 -166.073,18.4538 -26.3148,4.92024 -43.3412,11.6303 -54.3844,18.4867 -10.9956,-6.30741 -23.7185,-9.93692 -37.3125,-9.93692 -13.6279,0 -26.3794,3.64647 -37.3919,9.98779 -11.039,-6.87329 -28.0877,-13.6078 -54.4671,-18.5375 -72.9686,-13.6184 -152.425,-17.8138 -166.135,-18.4538 -1.38822,-0.0678216 -2.73936,0.0582842 -4.09261,0.376198l-67.5376 15.8162c-7.76133,21.2165 -13.5177,43.3698 -17.0624,66.2649l79.7232 1.80999c5.1502,0.116568 9.58086,3.65919 10.7773,8.67586 7.72424,32.4018 30.8281,83.0475 99.862,83.0475 35.6455,0 71.0166,-2.26143 95.0255,-24.3903 22.8082,-21.0194 36.8822,-41.2323 42.4966,-76.6882 5.34519,-3.70475 11.7957,-5.92167 18.8025,-5.92167 6.93158,0 13.3121,2.17347 18.6255,5.80828 5.5974,35.5258 19.6863,55.7599 42.5135,76.8016 24.012,22.1289 59.3799,24.3903 95.0276,24.3903 60.3485,0 89.2023,-58.4993 98.3519,-81.955 2.26778,-5.821 7.86518,-9.66564 14.1058,-9.80658l78.2015 -1.77396z\" />\n <path id=\"_258515592\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M450.057 339.132c17.4407,0 33.2718,5.6631 45.1798,14.8603 -10.2729,-13.4138 -26.4038,-22.1024 -44.6054,-22.1024 -17.2235,0 -32.6222,7.76663 -42.9279,19.965 11.5307,-7.94572 26.2745,-12.7229 42.3535,-12.7229z\" />\n <path id=\"_258515520\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M410.435 364.515c0,0 6.9072,42.8802 -31.6589,82.3079 0,0 36.63,-28.5094 42.593,-65.4044 7.97222,-49.2893 -46.9092,-57.4703 -46.9092,-57.4703 0,0 31.3696,7.94254 35.9751,40.5668z\" />\n <path id=\"_258515184\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M492.553 364.515c0,0 -6.90826,42.8802 31.6578,82.3079 0,0 -36.63,-28.5094 -42.593,-65.4044 -7.96798,-49.2893 46.9092,-57.4703 46.9092,-57.4703 0,0 -31.3696,7.94254 -35.9741,40.5668z\" />\n <path id=\"_258515160\" fill=\"#CBA96B\" fill-rule=\"nonzero\" d=\"M188.23 665.933c17.7089,39.6385 -18.9233,142.158 -18.9233,142.158 0,0 115.812,-69.4928 177.475,-60.7925l-183.871 -122.549c0,0 16.2814,16.8643 25.3186,41.1836z\" />\n <path id=\"_258514632\" fill=\"#CBA96B\" fill-rule=\"nonzero\" d=\"M63.5965 269.786c0,0 -52.8637,99.5451 -63.5965,202.805 0,0 47.9064,27.7358 58.601,-17.1408 11.9366,-50.0756 2.16393,-110.872 17.7184,-166.98 15.5513,-56.1118 -12.7229,-18.6838 -12.7229,-18.6838z\" />\n <path id=\"_258513552\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M66.4885 532.215c-8.90158,0 -16.8664,-6.26184 -18.6859,-15.3277 -5.49249,-27.3597 -8.27847,-55.5056 -8.27847,-83.6611 0,-26.7556 2.51894,-53.5409 7.48687,-79.6066 1.97318,-10.3534 11.9567,-17.1461 22.3144,-15.174 10.3492,1.97742 17.1398,11.9642 15.1677,22.3186 -4.51967,23.7153 -6.80971,48.0982 -6.80971,72.4621 0,25.6397 2.53271,51.2593 7.5282,76.152 2.07704,10.3301 -4.61717,20.3867 -14.9472,22.4585 -1.26742,0.255391 -2.53059,0.378317 -3.77575,0.378317z\" />\n <path id=\"_258513720\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M834.909 532.215c-1.2494,0 -2.51576,-0.122927 -3.77258,-0.378317 -10.3396,-2.07174 -17.0338,-12.1284 -14.9525,-22.4585 4.98913,-24.9001 7.53138,-50.5175 7.53138,-76.152 0,-24.3755 -2.29322,-48.7563 -6.81289,-72.4621 -1.97742,-10.3523 4.81851,-20.3412 15.1655,-22.3154 10.365,-1.99226 20.3465,4.81533 22.3144,15.1708 4.97323,26.0541 7.48899,52.8383 7.48899,79.6066 0,28.1481 -2.7828,56.294 -8.27529,83.6611 -1.82482,9.06372 -9.78538,15.3277 -18.687,15.3277z\" />\n <path id=\"_258513864\" fill=\"#2F3033\" fill-rule=\"nonzero\" d=\"M700.271 792.515c-8.44803,0 -16.8187,-3.72701 -22.4691,-10.8695 -9.80658,-12.3955 -7.70305,-30.3947 4.69241,-40.197 5.70867,-4.51437 11.3665,-9.25553 16.8251,-14.0857 11.8306,-10.4763 29.9146,-9.37421 40.3984,2.45323 10.4763,11.8317 9.38163,29.9167 -2.45535,40.3952 -6.24065,5.53594 -12.7282,10.9617 -19.2592,16.1309 -5.25511,4.15195 -11.5191,6.17282 -17.7322,6.17282z\" />\n <path id=\"_258514920\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M755.671 188.913c0,0 -11.9313,-19.0769 -17.8879,-26.5331 -11.0486,2.67153 -32.069,7.57482 -43.3507,9.61265 -0.0264928,0.00741799 -0.0508662,0.00741799 -0.077359,0.0169554 -5.57091,1.00249 -11.1768,1.92656 -16.8081,2.77327 -0.163196,0.0243734 -0.317914,0.0413288 -0.470512,0.0678216 -5.50521,0.812799 -11.0252,1.56731 -16.5813,2.23493 -0.690932,0.084777 -1.39458,0.135643 -2.09611,0.22042 -5.01456,0.581782 -10.0387,1.13071 -15.0977,1.58427 -1.63514,0.145181 -3.28723,0.229958 -4.92024,0.36878 -4.13394,0.33275 -8.26788,0.677156 -12.4294,0.931487 -2.875,0.172733 -5.76907,0.25751 -8.65149,0.385735 -2.94494,0.138822 -5.88034,0.308376 -8.8433,0.402691 -5.85385,0.169554 -11.7331,0.25751 -17.6304,0.25751 -6.52889,0 -13.0186,-0.14624 -19.4966,-0.359242 -2.67153,-0.0868964 -5.33247,-0.206644 -8.00189,-0.317914 -4.73797,-0.188629 -9.46853,-0.530916 -14.2023,-0.829755 -0.885919,-0.0604036 -1.77608,-0.11127 -2.662,-0.171673 -6.37523,-0.488527 -12.7197,-1.07773 -19.0399,-1.7623 -1.5387,-0.171673 -3.06681,-0.361362 -4.59809,-0.540453 -5.12583,-0.5892 -10.2453,-1.26636 -15.3552,-2.0018 -1.43061,-0.206644 -2.86228,-0.393153 -4.28654,-0.609335 -6.318,-0.95798 -12.6085,-2.00074 -18.8586,-3.15582 -0.545752,-0.104912 -1.08409,-0.216181 -1.6256,-0.325332 -5.39076,-1.07031 -10.7963,-2.10565 -16.168,-3.29676 -1.79303,-0.393153 -3.59031,-0.786307 -5.37804,-1.19853 -12.5247,-2.84851 -24.8979,-6.10924 -37.1016,-9.76525 -3.2459,-0.965398 -6.46319,-2.01133 -9.75995,-2.85804 -3.20245,-0.822337 -6.32754,-1.87569 -9.3721,-3.17596 -0.837173,-0.359242 -1.71991,-0.606155 -2.58676,-0.907114 -6.19402,-2.13108 -12.3393,-4.35542 -18.439,-6.68467 -0.69835,-0.263868 -1.38716,-0.547871 -2.08657,-0.812799 -5.51686,-2.13214 -10.9924,-4.34058 -16.4245,-6.63274 -0.715306,-0.300958 -1.43167,-0.592379 -2.14486,-0.890158 -12.0065,-5.11947 -23.8054,-10.6395 -35.388,-16.5273 -0.707888,-0.359242 -1.42107,-0.728022 -2.13002,-1.08726 -11.6017,-5.96512 -22.9777,-12.3001 -34.1121,-19.0017 -0.545752,-0.324272 -1.08832,-0.657022 -1.63196,-0.984473 -5.51474,-3.34551 -10.9807,-6.76944 -16.3768,-10.2866l0 0c-36.7,-23.9665 -70.545,-51.9344 -100.87,-83.339 -3.40168,16.6142 -14.4672,85.7424 23.4006,138.715l0 0.00741799 0.00211942 0c0,0 0.00529856,0.00953741 0.00741799,0.00953741 0.632648,0.890158 1.32252,1.74747 1.97954,2.62809 0.684574,0.907114 1.3416,1.82165 2.0569,2.72134 0.483229,0.599797 1.01203,1.189 1.51009,1.78879 0.950562,1.14767 1.88205,2.3017 2.88454,3.43241 0.594499,0.667619 1.24198,1.30768 1.84814,1.97742 0.963278,1.03428 1.90006,2.07916 2.91209,3.08906 1.01414,1.0258 2.09823,2.02829 3.16112,3.02972 0.666559,0.624171 1.29815,1.26636 1.97954,1.89265 1.04594,0.948443 2.16605,1.86615 3.25862,2.79022 0.766172,0.640066 1.49207,1.30768 2.27732,1.94033 0.849889,0.694112 1.76654,1.35431 2.63974,2.02087 1.1021,0.84671 2.16923,1.70402 3.30948,2.52635 0.667619,0.487468 1.38504,0.941025 2.06962,1.41154 1.41154,0.982353 2.81142,1.97742 4.29183,2.91845 0.999309,0.650663 2.06962,1.25046 3.10284,1.87357 1.23033,0.754515 2.42356,1.51645 3.69734,2.23387 0.505483,0.291421 1.05547,0.556349 1.56731,0.840352 4.23355,2.33561 8.66421,4.57054 13.3831,6.63274 1.22503,0.530916 2.52317,1.0258 3.77787,1.54082 1.46452,0.598737 2.89619,1.22291 4.4084,1.78773 0.841412,0.325332 1.74429,0.609335 2.60053,0.917711 1.99862,0.717425 3.98876,1.45287 6.06791,2.11942 0.549991,0.189689 1.14767,0.345466 1.70508,0.51502 8.45332,2.65352 17.5287,4.92978 27.3575,6.70056 3.49599,0.633708 7.07994,1.20807 10.7529,1.72097 13.9628,1.93503 29.2078,3.01276 45.9534,3.01276 4.96157,0 9.7875,-0.0243734 14.552,-0.0678216 53.9309,-0.460975 95.3752,-3.3116 129.213,-4.20176 0.0233137,0 0.0508662,0 0.0720604,-0.0105971l0.00529856 0c1.39988,-0.10915 2.95766,-0.237376 4.53875,-0.365601 0.631589,-0.0508662 1.3151,-0.104912 1.97742,-0.155778 1.28331,-0.101732 2.63762,-0.213002 4.02055,-0.314735 0.720604,-0.0614633 1.43803,-0.11233 2.18301,-0.163196 1.74747,-0.137763 3.57123,-0.267047 5.45434,-0.395273 0.391034,-0.0243734 0.747097,-0.0582842 1.14555,-0.084777 2.16605,-0.14624 4.44655,-0.281883 6.7758,-0.419646 0.827635,-0.0508662 1.68388,-0.0953741 2.53059,-0.14624 1.65951,-0.084777 3.35823,-0.179091 5.0951,-0.25645 0.967517,-0.0508662 1.94563,-0.092195 2.93752,-0.135643 1.92444,-0.0858367 3.90398,-0.163196 5.91002,-0.231017 0.784187,-0.0264928 1.54082,-0.0604036 2.33455,-0.077359 2.66094,-0.084777 5.39606,-0.14624 8.17886,-0.197106 1.04806,-0.0169554 2.13214,-0.0169554 3.19927,-0.0339108 1.90536,-0.0264928 3.83404,-0.0339108 5.78921,-0.0339108 1.23033,-0.00953741 2.46701,0 3.71641,0.00741799 2.02087,0.00953741 4.06612,0.0339108 6.12938,0.0678216 1.12965,0.0169554 2.24129,0.0264928 3.38896,0.0540453 3.01276,0.0752396 6.06791,0.169554 9.15909,0.297779 1.17098,0.0508662 2.36952,0.118688 3.55851,0.172733 2.1332,0.101732 4.28018,0.22042 6.45365,0.359242 1.37127,0.0752396 2.74889,0.169554 4.13394,0.273406 2.16711,0.152599 4.35754,0.325332 6.55538,0.511841 1.26954,0.104912 2.52635,0.206644 3.80225,0.325332 78.1856,7.31943 143.473,20.2341 180.576,119.988 0.162136,-0.0243734 -0.0604036,0.00953741 0.101732,-0.00741799 -1.32676,-47.3999 -18.0162,-100.661 -34.5095,-132.356z\" />\n <path id=\"_258514728\" fill=\"#CBA96B\" fill-rule=\"nonzero\" d=\"M166.531 125.26c-6.82137,6.44411 -13.0641,13.1712 -19.3896,19.4288 -4.55888,4.32257 -8.25834,9.23645 -12.2111,13.736 -3.88385,4.5716 -7.68291,9.04041 -11.3834,13.3884 -6.99622,9.02769 -13.3068,17.8615 -19.4182,26.035 -5.61648,8.51585 -10.578,16.6894 -15.3287,24.154 -2.45747,3.66131 -4.41794,7.48051 -6.31271,11.11 -1.91172,3.62634 -3.73866,7.07676 -5.466,10.364 -7.32049,13.1383 -11.2775,23.5023 -14.5424,30.5557 -3.12721,7.05239 -4.79732,10.8175 -4.79732,10.8175 -0.062523,0.155778 -0.137763,0.334869 -0.198166,0.498065 -1.86403,4.92978 0.623111,10.4318 5.55607,12.298 4.9319,1.85768 10.4371,-0.633708 12.3001,-5.56349 0,0 1.45287,-3.85311 4.17739,-11.0655 2.85592,-7.10431 6.29363,-18.2228 12.6477,-30.4794 1.50267,-3.159 3.08906,-6.47802 4.74645,-9.97189 1.64149,-3.50129 3.32538,-7.17213 5.56243,-10.8186 4.27276,-7.36818 8.72249,-15.4474 13.7975,-23.905 5.57303,-8.11316 11.3135,-16.9194 17.7237,-25.9502 3.47374,-4.32257 7.03119,-8.74793 10.6798,-13.2824 3.71641,-4.46881 7.18591,-9.34772 11.5021,-13.6449 4.52709,-4.69664 9.01073,-9.67093 13.7127,-14.6007 -1.28861,-4.48364 -2.40873,-8.89205 -3.35823,-13.1033z\" />\n </g>\n </g>\n </svg>\n <a href=\"https://www.{{ this.appConfig['appDomain'] }}\" target=\"_blank\" title=\"{{ this.appConfig['appName'] | titlecase }}\" rel=\"noopener\">{{ this.appConfig['appDomain'] | titlecase }}</a>\n </div>\n</div>\n","import {\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\n\n@Component({\n selector: 'sd-app-error',\n templateUrl: './error.component.html',\n styleUrl: './error.component.css',\n standalone: false,\n})\nexport class ErrorComponent implements OnChanges {\n @Input('error') error!: any | null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n // console.debug('changes:', changes);\n this.cdr.detectChanges();\n }\n}\n","<main class=\"container_error\" [ngSwitch]=\"error?.status\">\n <ng-container *ngSwitchCase=\"400\">\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image\" src=\"https://assets.snugdesk.com/error-images/error_bad-request.png\" alt=\"Bad Request\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">Invalid Request</h1>\n <span class=\"sd_error_message\">Oops! Invalid or missing parameters. Please check and try again.</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"403\">\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image\" src=\"https://assets.snugdesk.com/error-images/error_forbidden.png\" alt=\"Access Forbidden\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">Access Denied</h1>\n <span class=\"sd_error_message\">Oops! You don't have permission to access this page.</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"404\">\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image\" src=\"https://assets.snugdesk.com/error-images/error_page-not-found.png\" alt=\"Page Not Found\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">Page Not Found</h1>\n <span class=\"sd_error_message\">Oops! The page you're looking for can't be found. It may have been removed, or you may have typed the URL\n incorrectly.</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"409\">\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image\" src=\"https://assets.snugdesk.com/error-images/error_bad-request.png\" alt=\"Configuration Error\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">Configuration Error</h1>\n <span class=\"sd_error_message\">Oops! Invalid configuration detected. Please review your settings or contact support.</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"0\">\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image sd_error_image_grayscale\" src=\"https://assets.snugdesk.com/error-images/error_no-internet.png\" alt=\"No Internet\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">No Internet</h1>\n <span class=\"sd_error_message\">Oops! You are not connected to the internet. Please check your network connection and try again.</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image\" src=\"https://assets.snugdesk.com/error-images/error_internal-server.png\" alt=\"Internal Server Error\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">Internal Server Error</h1>\n <span class=\"sd_error_message\">Oops! We're sorry, but the server encountered an error.</span>\n </div>\n </ng-container>\n</main>\n\n<sd-app-footer></sd-app-footer>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'sd-app-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.css'],\n standalone: false,\n})\nexport class LoaderComponent {}\n","<div class=\"sd_container_loader\">\n <!-- <div class=\"sd_loader_logo\">\n <span class=\"sd_logo\"></span>\n </div> -->\n <div class=\"sd_container_css_loader\">\n <div class=\"sd_cssload_loader\">\n <div class=\"sd_cssload_dot\"></div>\n <div class=\"sd_cssload_dot\"></div>\n <div class=\"sd_cssload_dot\"></div>\n <div class=\"sd_cssload_dot\"></div>\n <div class=\"sd_cssload_dot\"></div>\n </div>\n </div>\n <sd-app-footer></sd-app-footer>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'domainName',\n standalone: false\n})\nexport class DomainNamePipe implements PipeTransform {\n transform(value: string, args?: any): string {\n return value.replace(/[/ /^\\W\\s\\_]/gi, '');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport momentTimezone from 'moment-timezone';\n\n@Pipe({\n name: 'formatEpochTimestamp',\n standalone: false\n})\nexport class FormatEpochTimestampPipe implements PipeTransform {\n transform(value: string | number, format?: any, timezone?: any): string {\n // console.debug(`Got value: ${value}`);\n // console.debug(`Got format: ${format}`);\n // console.debug(`Got timezone: ${timezone}`);\n\n if (!value) {\n return '';\n } else {\n const myEpochTimestamp: number = Number(value);\n // console.debug(`Parsed myEpochTimestamp: ${myEpochTimestamp}`);\n\n if (timezone) {\n const myTimezone = timezone;\n // console.debug(`Parsed myTimezone: ${myTimezone}`);\n\n return momentTimezone\n .unix(myEpochTimestamp)\n .tz(myTimezone)\n .format(this.getFormatString(format));\n } else {\n return momentTimezone\n .unix(myEpochTimestamp)\n .format(this.getFormatString(format));\n }\n }\n }\n\n getFormatString(format: string): string {\n switch (format) {\n case 'short':\n return 'M/D/yy h:mm A';\n case 'medium':\n return 'MMM D, y h:mm A';\n case 'long':\n return 'dddd, MMMM D, y h:mm A z';\n case 'full':\n return 'dddd, MMMM D, y h:mm:ss A z Z';\n case 'shortDate':\n return 'M/D/yy';\n case 'mediumDate':\n return 'MMM D, y';\n case 'longDate':\n return 'dddd, MMMM D, y';\n case 'fullDate':\n return 'dddd, MMMM D, y';\n case 'shortTime':\n return 'h:mm A';\n case 'mediumTime':\n return 'h:mm A';\n case 'longTime':\n return 'h:mm A z';\n case 'fullTime':\n return 'h:mm:ss A z Z';\n case 'iso':\n return 'yyyy-MM-DDThh:mm:ss';\n case 'timeDate':\n return 'h:mm A D/M/YYYY';\n case 'dateTime':\n return 'D/M/YY h:mm A';\n case 'date':\n return 'DD MMM YYYY'\n case 'mediumTimeDate':\n return 'h:mm A MMM D, y';\n case 'dayDateTime':\n return 'ddd MMM DD, YYYY hh:mm A'\n default:\n return 'MMMM d, y, h:mm:ss A z Z';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml',\n standalone: false\n})\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitized: DomSanitizer) {}\n\n transform(value: any, args?: any): any {\n return this.sanitized.bypassSecurityTrustHtml(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'SearchFilter',\n standalone: false\n})\nexport class SearchPipe implements PipeTransform {\n transform(items: any[], field: string, value: string): any[] {\n if (!items) return [];\n if (!value) return items;\n\n return items.filter((item) => {\n return item[field].toLowerCase().includes(value.toLowerCase());\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'SearchFilterInnerField',\n standalone: false\n})\nexport class SearchInnerFieldPipe implements PipeTransform {\n transform(\n items: any[],\n field: string,\n innerfield: string,\n value: string\n ): any[] {\n if (!items) return [];\n if (!value) return items;\n\n const query = value.toLowerCase();\n return items.filter((item) => {\n const innerValue = item?.[field]?.[innerfield];\n if (innerValue === null || innerValue === undefined) return false;\n return String(innerValue).toLowerCase().includes(query);\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'singularize',\n standalone: false\n})\nexport class SingularizePipe implements PipeTransform {\n public transform(value: any, count: number = 1): string {\n return count > 1 ? plural(value) : singular(value);\n }\n}\n\n/**\n * Returns the singular of an English word.\n *\n * @export\n * @param {string} word\n * @param {number} [amount]\n * @returns {string}\n */\nfunction singular(word: string, amount?: number): string {\n if (amount !== undefined && amount !== 1) {\n return word;\n }\n const singular: { [key: string]: string } = {\n '(quiz)zes$': '$1',\n '(matr)ices$': '$1ix',\n '(vert|ind)ices$': '$1ex',\n '^(ox)en$': '$1',\n '(alias)es$': '$1',\n '(octop|vir)i$': '$1us',\n '(cris|ax|test)es$': '$1is',\n '(shoe)s$': '$1',\n '(o)es$': '$1',\n '(bus)es$': '$1',\n '([m|l])ice$': '$1ouse',\n '(x|ch|ss|sh)es$': '$1',\n '(m)ovies$': '$1ovie',\n '(s)eries$': '$1eries',\n '([^aeiouy]|qu)ies$': '$1y',\n '([lr])ves$': '$1f',\n '(tive)s$': '$1',\n '(hive)s$': '$1',\n '(li|wi|kni)ves$': '$1fe',\n '(shea|loa|lea|thie)ves$': '$1f',\n '(^analy)ses$': '$1sis',\n '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$': '$1$2sis',\n '([ti])a$': '$1um',\n '(n)ews$': '$1ews',\n '(h|bl)ouses$': '$1ouse',\n '(corpse)s$': '$1',\n '(us)es$': '$1',\n s$: '',\n };\n const irregular: { [key: string]: string } = {\n move: 'moves',\n foot: 'feet',\n goose: 'geese',\n sex: 'sexes',\n child: 'children',\n man: 'men',\n tooth: 'teeth',\n person: 'people',\n };\n const uncountable: string[] = [\n 'sheep',\n 'fish',\n 'deer',\n 'moose',\n 'series',\n 'species',\n 'money',\n 'rice',\n 'information',\n 'equipment',\n 'bison',\n 'cod',\n 'offspring',\n 'pike',\n 'salmon',\n 'shrimp',\n 'swine',\n 'trout',\n 'aircraft',\n 'hovercraft',\n 'spacecraft',\n 'sugar',\n 'tuna',\n 'you',\n 'wood',\n ];\n // save some time in the case that singular and plural are the same\n if (uncountable.indexOf(word.toLowerCase()) >= 0) {\n return word;\n }\n // check for irregular forms\n for (const w in irregular) {\n const pattern = new RegExp(`${irregular[w]}$`, 'i');\n const replace = w;\n if (pattern.test(word)) {\n return word.replace(pattern, replace);\n }\n }\n // check for matches using regular expressions\n for (const reg in singular) {\n const pattern = new RegExp(reg, 'i');\n if (pattern.test(word)) {\n return word.replace(pattern, singular[reg]);\n }\n }\n return word;\n}\n\n/**\n * Returns the plural of an English word.\n *\n * @export\n * @param {string} word\n * @param {number} [amount]\n * @returns {string}\n */\nfunction plural(word: string, amount?: number): string {\n if (amount !== undefined && amount === 1) {\n return word;\n }\n const plural: { [key: string]: string } = {\n '(quiz)$': '$1zes',\n '^(ox)$': '$1en',\n '([m|l])ouse$': '$1ice',\n '(matr|vert|ind)ix|ex$': '$1ices',\n '(x|ch|ss|sh)$': '$1es',\n '([^aeiouy]|qu)y$': '$1ies',\n '(hive)$': '$1s',\n '(?:([^f])fe|([lr])f)$': '$1$2ves',\n '(shea|lea|loa|thie)f$': '$1ves',\n sis$: 'ses',\n '([ti])um$': '$1a',\n '(tomat|potat|ech|her|vet)o$': '$1oes',\n '(bu)s$': '$1ses',\n '(alias)$': '$1es',\n '(octop)us$': '$1i',\n '(ax|test)is$': '$1es',\n '(us)$': '$1es',\n '([^s]+)$': '$1s',\n };\n const irregular: { [key: string]: string } = {\n move: 'moves',\n foot: 'feet',\n goose: 'geese',\n sex: 'sexes',\n child: 'children',\n man: 'men',\n tooth: 'teeth',\n person: 'people',\n };\n const uncountable: string[] = [\n 'sheep',\n 'fish',\n 'deer',\n 'moose',\n 'series',\n 'species',\n 'money',\n 'rice',\n 'information',\n 'equipment',\n 'bison',\n 'cod',\n 'offspring',\n 'pike',\n 'salmon',\n 'shrimp',\n 'swine',\n 'trout',\n 'aircraft',\n 'hovercraft',\n 'spacecraft',\n 'sugar',\n 'tuna',\n 'you',\n 'wood',\n ];\n // save some time in the case that singular and plural are the same\n if (uncountable.indexOf(word.toLowerCase()) >= 0) {\n return word;\n }\n // check for irregular forms\n for (const w in irregular) {\n const pattern = new RegExp(`${w}$`, 'i');\n const replace = irregular[w];\n if (pattern.test(word)) {\n return word.replace(pattern, replace);\n }\n }\n // check for matches using regular expressions\n for (const reg in plural) {\n const pattern = new RegExp(reg, 'i');\n if (pattern.test(word)) {\n return word.replace(pattern, plural[reg]);\n }\n }\n return word;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DomainNamePipe } from './domain-name.pipe';\nimport { FormatEpochTimestampPipe } from './epoch-formatter.pipe';\nimport { SafeHtmlPipe } from './safe-html.pipe';\nimport { SearchPipe } from './search.pipe';\nimport { SearchInnerFieldPipe } from './search-inner.pipe';\nimport { SingularizePipe } from './singularize.pipe';\n\n@NgModule({\n declarations: [\n DomainNamePipe,\n FormatEpochTimestampPipe,\n SafeHtmlPipe,\n SearchPipe,\n SearchInnerFieldPipe,\n SingularizePipe,\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n DomainNamePipe,\n FormatEpochTimestampPipe,\n SafeHtmlPipe,\n SearchPipe,\n SearchInnerFieldPipe,\n SingularizePipe,\n ],\n providers: [],\n})\nexport class CustomPipesModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { ErrorComponent } from './components/error/error.component';\nimport { FooterComponent } from './components/footer/footer.component';\nimport { LoaderComponent } from './components/loader/loader.component';\n\nimport { CustomPipesModule } from './pipes/custom-pipes.module';\n\n@NgModule({\n declarations: [ErrorComponent, FooterComponent, LoaderComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),\n CustomPipesModule,\n ],\n exports: [ErrorComponent, FooterComponent, LoaderComponent],\n})\nexport class SnugdeskCoreModule {}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { JwtHelperService } from '@auth0/angular-jwt';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnugdeskAuthenticationService {\n isAuthenticated$ = new BehaviorSubject<boolean>(false);\n\n tenant$ = new BehaviorSubject<any>(undefined);\n user$ = new BehaviorSubject<any>(undefined);\n userSession$ = new BehaviorSubject<any>(undefined);\n\n tenantSubscription!: Subscription;\n userSubscription!: Subscription;\n userSessionSubscription!: Subscription;\n\n private readonly jwtHelper: JwtHelperService = new JwtHelperService();\n private readonly TOKEN_KEY = 'sd-authSessionToken';\n\n constructor() {\n this.isAuthenticated$.next(this.isAuthenticated());\n }\n\n // the host supplies a fresh token on every init, so persistence buys nothing.\n getToken(): string | null {\n return sessionStorage.getItem(this.TOKEN_KEY);\n }\n\n setToken(token: string): void {\n const isValid = this.checkToken(token);\n\n token ? sessionStorage.setItem(this.TOKEN_KEY, token) : sessionStorage.removeItem(this.TOKEN_KEY);\n this.isAuthenticated$.next(isValid);\n }\n\n checkToken(token: string): boolean {\n if (!token) {\n console.warn('Token validation error: Token is empty');\n return false;\n }\n\n if (this.jwtHelper.isTokenExpired(token)) {\n console.warn('Token validation error: Token is expired');\n return false;\n }\n\n const decodedToken = this.jwtHelper.decodeToken(token);\n const { tenantId, userId, userSessionId } = decodedToken || {};\n\n if (!tenantId || !userId || !userSessionId) {\n console.warn('Token validation error: Invalid token structure', decodedToken);\n return false;\n }\n\n return true;\n }\n\n getDecodedToken(): any {\n /* if (!this.isAuthenticated()) {\n let err: any = new Error(`User not authenticated`);\n err.status = 403;\n throw err;\n } */\n\n return this.jwtHelper.decodeToken(this.getToken());\n }\n\n getTenantId(): string {\n // return this.getDecodedAuthSessionToken().tenantId;\n return this.getDecodedToken()?.tenantId;\n }\n\n getUserId(): string {\n return this.getDecodedToken()?.userId;\n }\n\n getUserSessionId(): string {\n return this.getDecodedToken()?.userSessionId;\n }\n\n getUserPreferences(): any {\n if (!this.isAuthenticated()) {\n let err: any = new Error(`User not authenticated`);\n err.status = 403;\n throw err;\n }\n\n const tenant = this.tenant$.getValue();\n const user = this.user$.getValue();\n\n return tenant?.preferences?.allowUserToChangePreferences ? user?.preferences || tenant?.preferences : tenant?.preferences;\n }\n\n isAuthenticated(): boolean {\n try {\n const mySessionToken = this.getToken();\n // console.log(`Got sessionToken: ${sessionToken}`);\n\n if (!mySessionToken) {\n throw new Error('Session token not found');\n } else if (this.jwtHelper.isTokenExpired(mySessionToken)) {\n throw new Error('Session token expired');\n }\n\n this.isAuthenticated$.next(true);\n return true;\n } catch (err) {\n console.warn(err);\n this.isAuthenticated$.next(false);\n return false;\n }\n }\n\n /**\n * Establishes a session from a token issued by the host's backend. The token\n * carries tenantId, userId and userSessionId, so nothing else is needed — read\n * them back with getTenantId() / getUserId() once this resolves.\n */\n async authenticate(token: string): Promise<boolean> {\n if (!this.checkToken(token)) {\n console.error('A Snugdesk-issued token is required. Fetch one from your backend via POST /auth/library using your tenant integration credential, then pass it to the widget.');\n return false;\n }\n\n // A newly supplied token always replaces whatever is stored, so switching\n // user in the same tab works without the host clearing storage first.\n this.setToken(token);\n this.isAuthenticated$.next(true);\n return true;\n }\n\n async logout(userSessionId?: string): Promise<void> {\n await this.endUserSession(userSessionId);\n this.userSubscription?.unsubscribe();\n this.user$.next(null);\n }\n\n async endUserSession(userSessionId?: string) {\n try {\n if (!userSessionId) {\n const sessionToken = this.getToken();\n if (!sessionToken) return;\n\n const decodedToken = this.jwtHelper.decodeToken(sessionToken);\n userSessionId = decodedToken.userSessionId;\n }\n\n /*\n TODO: Uncomment when user session service is available\n\n // Update user session on logout\n const now = moment.utc().unix();\n const res_updateUserSession: any =\n await this.userSessionService.UpdateUserSession({\n id: userSessionId,\n temp_isLocked: null,\n temp_isAvailableTenantIdUnion: null,\n loggedOutAt: now,\n updatedAt: now,\n });\n // console.debug('res_updateUserSession: ', res_updateUserSession);\n */\n } catch (error) {\n console.error(error);\n } finally {\n sessionStorage.removeItem(this.TOKEN_KEY);\n this.userSessionSubscription?.unsubscribe();\n this.isAuthenticated$?.next(false);\n this.userSession$?.next(null);\n }\n }\n}\n","import { Inject, Injectable, InjectionToken, Optional, ValueProvider } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { SnugdeskAmplifyConfig } from '../../app.config';\nimport { SnugdeskAuthenticationService } from '../services/authentication.service';\n\nimport { Amplify, API } from 'aws-amplify';\nimport { GRAPHQL_AUTH_MODE, GraphQLResult } from '@aws-amplify/api-graphql';\n\nexport interface AmplifyConfig {\n aws_project_region: string;\n aws_appsync_graphqlEndpoint: string;\n aws_appsync_region: string;\n aws_appsync_authenticationType: string;\n aws_appsync_apiKey?: string;\n}\n\nexport const AMPLIFY_CONFIG = new InjectionToken<AmplifyConfig>('AMPLIFY_CONFIG');\n\nexport function provideAmplifyConfig(config: AmplifyConfig): ValueProvider {\n return {\n provide: AMPLIFY_CONFIG,\n useValue: config,\n };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AppSyncHelperService {\n private configured = false;\n private authMode = GRAPHQL_AUTH_MODE.AWS_LAMBDA;\n\n private readonly amplifyConfig?: AmplifyConfig | null;\n\n constructor(\n @Optional()\n @Inject(AMPLIFY_CONFIG)\n amplifyConfig: AmplifyConfig | null,\n private readonly authenticationService: SnugdeskAuthenticationService\n ) {\n this.amplifyConfig = amplifyConfig;\n // this.ensureConfigured();\n }\n\n async query<T>(statement: string, variables?: Record<string, unknown>): Promise<GraphQLResult<T>> {\n this.ensureConfigured();\n // console.debug('token: ', token);\n try {\n return (await API.graphql({\n query: statement,\n variables,\n authMode: this.authMode,\n ...(this.authMode === GRAPHQL_AUTH_MODE.AWS_LAMBDA ? { authToken: this.getToken() } : {}),\n })) as GraphQLResult<T>;\n } catch (err: any) {\n const normalizedErrors =\n err?.errors?.map((e: any) => ({\n message: e?.message,\n errorType: e?.errorType,\n data: e?.data,\n path: e?.path,\n })) ??\n err?.response?.data?.errors ??\n err?.errors;\n const errorMessage = err?.message ?? normalizedErrors?.[0]?.message;\n console.error('AppSync query failed', {\n statement,\n variables,\n message: errorMessage,\n status: err?.response?.status,\n response: err?.response?.data,\n errors: normalizedErrors,\n });\n if (err) {\n console.error('AppSync query failed (raw error)', err);\n }\n // Return partial data if available (e.g. non-nullable field errors on nested items)\n if (err?.data) {\n return { data: err.data, errors: normalizedErrors } as GraphQLResult<T>;\n }\n throw err;\n }\n }\n\n async mutate<T>(statement: string, variables?: Record<string, unknown>): Promise<GraphQLResult<T>> {\n return this.query<T>(statement, variables);\n }\n\n subscribe<T>(statement: string, variables?: Record<string, unknown>): Observable<GraphQLResult<T>> {\n this.ensureConfigured();\n try {\n return API.graphql({\n query: statement,\n variables,\n authMode: this.authMode,\n ...(this.authMode === GRAPHQL_AUTH_MODE.AWS_LAMBDA ? { authToken: this.getToken() } : {}),\n }) as unknown as Observable<GraphQLResult<T>>;\n } catch (err: any) {\n const normalizedErrors =\n err?.errors?.map((e: any) => ({\n message: e?.message,\n errorType: e?.errorType,\n data: e?.data,\n path: e?.path,\n })) ??\n err?.response?.data?.errors ??\n err?.errors;\n const errorMessage = err?.message ?? normalizedErrors?.[0]?.message;\n console.error('AppSync subscription failed', {\n statement,\n variables,\n message: errorMessage,\n status: err?.response?.status,\n response: err?.response?.data,\n errors: normalizedErrors,\n });\n if (err) {\n console.error('AppSync subscription failed (raw error)', err);\n }\n throw err;\n }\n }\n\n private ensureConfigured(): void {\n if (this.configured) {\n return;\n }\n\n if (this.amplifyConfig) {\n Amplify.configure(this.amplifyConfig);\n this.authMode = this.normalizeAuthMode(this.getAuthModeFromConfig(this.amplifyConfig));\n this.configured = true;\n return;\n }\n\n const hostConfig = this.getHostConfig();\n if (hostConfig.useHost) {\n this.authMode = this.normalizeAuthMode(hostConfig.authMode);\n this.configured = true;\n return;\n }\n\n Amplify.configure({\n ...SnugdeskAmplifyConfig,\n aws_appsync_authenticationType: this.normalizeAuthMode(SnugdeskAmplifyConfig.aws_appsync_authenticationType),\n API: {\n GraphQL: {\n endpoint: SnugdeskAmplifyConfig.aws_appsync_graphqlEndpoint,\n region: SnugdeskAmplifyConfig.aws_appsync_region,\n defaultAuthMode: this.normalizeAuthMode(SnugdeskAmplifyConfig.aws_appsync_authenticationType),\n graphql_headers: async () => this.buildAuthHeaders(),\n functionAuthProvider: async () => ({\n token: this.getToken(),\n }),\n },\n },\n });\n\n this.authMode = this.normalizeAuthMode(SnugdeskAmplifyConfig.aws_appsync_authenticationType);\n this.configured = true;\n }\n\n private getHostConfig(): { useHost: boolean; authMode?: string } {\n const existing = (Amplify as any).getConfig?.() ?? {};\n const existingEndpoint = existing?.API?.GraphQL?.endpoint ?? existing?.API?.GraphQL?.graphql_endpoint ?? existing?.aws_appsync_graphqlEndpoint;\n const existingAuthMode = existing?.API?.GraphQL?.defaultAuthMode ?? existing?.aws_appsync_authenticationType;\n\n return {\n useHost: existingEndpoint === SnugdeskAmplifyConfig.aws_appsync_graphqlEndpoint,\n authMode: existingAuthMode,\n };\n }\n\n private normalizeAuthMode(mode?: string): GRAPHQL_AUTH_MODE | undefined {\n if (!mode) {\n return undefined;\n }\n\n switch (mode) {\n case 'API_KEY':\n return GRAPHQL_AUTH_MODE.API_KEY;\n case 'AWS_IAM':\n return GRAPHQL_AUTH_MODE.AWS_IAM;\n case 'OPENID_CONNECT':\n return GRAPHQL_AUTH_MODE.OPENID_CONNECT;\n case 'AMAZON_COGNITO_USER_POOLS':\n return GRAPHQL_AUTH_MODE.AMAZON_COGNITO_USER_POOLS;\n case 'AWS_LAMBDA':\n return GRAPHQL_AUTH_MODE.AWS_LAMBDA;\n default:\n return undefined;\n }\n }\n\n private getAuthModeFromConfig(config: any): string | undefined {\n return (config as any)?.API?.GraphQL?.defaultAuthMode ?? (config as any)?.aws_appsync_authenticationType;\n }\n\n private buildAuthHeaders(): { Authorization: string } {\n const token = this.getToken();\n\n if (!token) {\n throw new Error('Missing authentication token for AppSync request.');\n }\n\n return {\n Authorization: token,\n };\n }\n\n private getToken(): string {\n const token = this.authenticationService.getToken();\n\n if (!token) {\n throw new Error('Missing authentication token for AppSync request.');\n }\n\n return token;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\nimport { SnugdeskAPIConfig } from '../../app.config';\n\nexport interface OpenSearchResponse {\n hits?: {\n total?: number | { value?: number };\n hits?: OpenSearchHit[];\n };\n}\n\nexport interface OpenSearchHit {\n id?: unknown;\n _id?: unknown;\n _source?: Record<string, unknown>;\n fields?: Record<string, unknown>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OpenSearchHelperService {\n private readonly jsonHeaders = new HttpHeaders({\n 'Content-Type': 'application/json',\n });\n\n constructor(private httpClient: HttpClient) {}\n\n private buildOpenSearchProxyEndpoint(index: string): string {\n return `${SnugdeskAPIConfig.endpoint}/opensearch/${index}`;\n }\n\n searchIndex(index: string, body: unknown): Promise<OpenSearchResponse> {\n return lastValueFrom(\n this.httpClient.post<OpenSearchResponse>(this.buildOpenSearchProxyEndpoint(index), body, {\n headers: this.jsonHeaders,\n })\n );\n }\n\n parseSearchResults(response: OpenSearchResponse | null | undefined): Array<Record<string, unknown>> {\n const hits = response?.hits?.hits ?? [];\n return hits.map(this.mapHitToSource);\n }\n\n parseTotalCount(response: OpenSearchResponse | null | undefined): number {\n const total = response?.hits?.total;\n if (typeof total === 'number') {\n return total;\n }\n if (total && typeof total.value === 'number') {\n return total.value;\n }\n return 0;\n }\n\n private mapHitToSource(hit: OpenSearchHit): Record<string, unknown> {\n const source = hit?.fields ?? hit?._source ?? {};\n const id = hit?.id ?? (source as { id?: unknown })?.id ?? hit?._id;\n return {\n ...source,\n id,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\nimport * as CryptoJS from 'crypto-js';\nimport { JwtHelperService } from '@auth0/angular-jwt';\n\nexport interface S3Credentials {\n accessKeyId: string;\n secretAccessKey: string;\n}\n\nexport interface S3Config {\n region: string;\n credentials: S3Credentials;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class S3HelperService {\n private readonly API_BASE = 'https://api.snugdesk.com/s3';\n private readonly jwt = new JwtHelperService();\n\n constructor(private http: HttpClient) {}\n\n async getS3Config(token: string, region: string): Promise<S3Config> {\n const decodedToken = this.parseToken(token);\n const { userSessionId } = decodedToken;\n\n const encryptedCredentials = await this.fetchEncryptedCredentials(token);\n if (!encryptedCredentials) {\n throw new Error('Invalid response: missing encrypted credentials.');\n }\n\n const credentials = this.decryptCredentials(\n encryptedCredentials,\n userSessionId\n );\n return { region, credentials };\n }\n\n /**\n * Validates and decodes the JWT token.\n * @throws Error if the token is empty, expired, or invalid.\n * @returns The decoded JWT payload.\n */\n private parseToken(token: string): any {\n if (!token) {\n throw new Error('Token validation failed: token is empty.');\n }\n\n if (this.jwt.isTokenExpired(token)) {\n throw new Error('Token validation failed: token is expired.');\n }\n\n const decoded = this.jwt.decodeToken(token);\n if (!decoded) {\n throw new Error('Token validation failed: unable to decode token.');\n }\n\n const { tenantId, userId, userSessionId } = decoded;\n if (!tenantId || !userId || !userSessionId) {\n throw new Error(\n 'Token validation failed: missing tenantId, userId, or userSessionId.'\n );\n }\n\n return decoded;\n }\n\n private async fetchEncryptedCredentials(\n token: string\n ): Promise<string | null> {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n });\n\n try {\n const res = await lastValueFrom(\n this.http.get<{\n data: { encrypted: boolean; credentials: string };\n message: string;\n }>(`${this.API_BASE}/credentials`, { headers })\n );\n\n return res?.data?.credentials || null;\n } catch (err: any) {\n console.error('Fetch error:', err.message || err);\n return null;\n }\n }\n\n private base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n\n private decryptCredentials(\n encryptedData: string,\n decryptionKey: string\n ): S3Credentials {\n try {\n // Decode Base64 → split into IV (first 16 bytes) + ciphertext\n const raw = this.base64ToBytes(encryptedData);\n const iv = raw.slice(0, 16);\n const ciphertext = raw.slice(16);\n\n // Derive 256-bit key from sessionId\n const derivedKeyHex = CryptoJS.SHA256(decryptionKey).toString(\n CryptoJS.enc.Hex\n );\n const derivedKey = CryptoJS.enc.Hex.parse(derivedKeyHex);\n\n // Convert IV & ciphertext into WordArrays\n const ivWordArray = CryptoJS.lib.WordArray.create(iv);\n const ciphertextWordArray = CryptoJS.lib.WordArray.create(ciphertext);\n\n // Perform AES-256-CBC decryption\n const decrypted = CryptoJS.AES.decrypt(\n { ciphertext: ciphertextWordArray },\n derivedKey,\n {\n iv: ivWordArray,\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n }\n );\n\n const plainText = decrypted.toString(CryptoJS.enc.Utf8);\n if (!plainText) {\n throw new Error('Failed to decrypt credentials: empty plaintext.');\n }\n\n return JSON.parse(plainText);\n } catch (err: any) {\n console.error('Decrypt error:', err.message || err);\n throw new Error('Decryption failed.');\n }\n }\n}\n","/**\n * Billing platform models (Stage 1) — mirrors the Amplify schema Billing* types.\n * Conventions: micros & timestamps are `number`; AWSJSON is `string | null`.\n * Reference: SNUGDESK_BILLING_PLATFORM_DESIGN.md v2.3.\n */\nimport { TenantBillingInformation } from './tenant.model';\n\n// ---------------------------------------------------------------------------\n// Enums\n// ---------------------------------------------------------------------------\n\nexport enum BillingAccountStatus {\n PENDING_KYC = 'PENDING_KYC',\n ACTIVE = 'ACTIVE',\n NO_BALANCE = 'NO_BALANCE',\n SUSPENDED = 'SUSPENDED',\n BLOCKED = 'BLOCKED',\n TERMINATED = 'TERMINATED',\n}\n\n// PREPAID pays before use; POSTPAID may run negative up to creditLimitMicros and is\n// not auto-suspended on balance. Absent = PREPAID.\nexport enum BillingMode {\n PREPAID = 'PREPAID',\n POSTPAID = 'POSTPAID',\n}\n\nexport enum BillingLedgerDirection {\n DEBIT = 'DEBIT',\n CREDIT = 'CREDIT',\n}\n\nexport enum BillingCreditClass {\n PAID = 'PAID',\n PROMO = 'PROMO',\n GOODWILL = 'GOODWILL',\n}\n\nexport enum BillingLedgerEntryType {\n TOPUP = 'TOPUP',\n USAGE_CHARGE = 'USAGE_CHARGE',\n SUBSCRIPTION_CHARGE = 'SUBSCRIPTION_CHARGE',\n REFUND = 'REFUND',\n ADJUSTMENT = 'ADJUSTMENT',\n CREDIT_NOTE = 'CREDIT_NOTE',\n REVERSAL = 'REVERSAL',\n RESERVATION = 'RESERVATION',\n RESERVATION_RELEASE = 'RESERVATION_RELEASE',\n WRITEOFF = 'WRITEOFF',\n FX_NOTE = 'FX_NOTE',\n}\n\nexport enum BillingEntityStatus {\n ACTIVE = 'ACTIVE',\n INACTIVE = 'INACTIVE',\n RETIRED = 'RETIRED',\n}\n\nexport enum BillingPriceBookType {\n DEFAULT_RETAIL = 'DEFAULT_RETAIL',\n CONTRACT = 'CONTRACT',\n PROMO = 'PROMO',\n}\n\nexport enum BillingPricingType {\n FLAT = 'FLAT',\n TIERED_VOLUME = 'TIERED_VOLUME',\n TIERED_GRADUATED = 'TIERED_GRADUATED',\n}\n\nexport enum BillingPeriodType {\n MONTHLY = 'MONTHLY',\n ANNUAL = 'ANNUAL',\n}\n\nexport enum BillingSubscriptionStatus {\n TRIALING = 'TRIALING',\n ACTIVE = 'ACTIVE',\n PAST_DUE = 'PAST_DUE',\n SUSPENDED = 'SUSPENDED',\n CANCELLED = 'CANCELLED',\n}\n\nexport enum BillingRatingStatus {\n PENDING = 'PENDING',\n RATED = 'RATED',\n UNRATABLE = 'UNRATABLE',\n ZERO_RATED = 'ZERO_RATED',\n}\n\nexport enum BillingChargeStatus {\n WALLET_DEBITED = 'WALLET_DEBITED',\n ACCRUED = 'ACCRUED',\n INCLUDED = 'INCLUDED',\n FAILED_NSF = 'FAILED_NSF',\n}\n\nexport enum BillingInvoiceType {\n SUBSCRIPTION = 'SUBSCRIPTION',\n USAGE = 'USAGE',\n TOPUP_RECEIPT = 'TOPUP_RECEIPT',\n CREDIT_NOTE = 'CREDIT_NOTE',\n}\n\nexport enum BillingInvoiceStatus {\n DRAFT = 'DRAFT',\n PENDING_APPROVAL = 'PENDING_APPROVAL',\n ISSUED = 'ISSUED',\n PAID = 'PAID',\n VOID = 'VOID',\n}\n\nexport enum BillingTaxTreatment {\n STANDARD = 'STANDARD',\n ZERO_RATED_EXPORT = 'ZERO_RATED_EXPORT',\n NOT_REGISTERED = 'NOT_REGISTERED',\n OUT_OF_SCOPE = 'OUT_OF_SCOPE',\n}\n\nexport enum BillingPaymentPurpose {\n TOPUP = 'TOPUP',\n AUTO_TOPUP = 'AUTO_TOPUP',\n MANUAL = 'MANUAL',\n}\n\nexport enum BillingPaymentRail {\n CARD = 'CARD',\n BANK_TRANSFER = 'BANK_TRANSFER',\n MANUAL = 'MANUAL',\n}\n\nexport enum BillingPaymentDirection {\n CHARGE = 'CHARGE',\n REFUND = 'REFUND',\n}\n\nexport enum BillingPaymentStatus {\n REQUIRES_ACTION = 'REQUIRES_ACTION',\n PROCESSING = 'PROCESSING',\n SUCCEEDED = 'SUCCEEDED',\n FAILED = 'FAILED',\n EXPIRED = 'EXPIRED',\n DISPUTED = 'DISPUTED',\n REFUNDED = 'REFUNDED',\n}\n\nexport enum BillingPaymentMethodStatus {\n ACTIVE = 'ACTIVE',\n DETACHED = 'DETACHED',\n EXPIRED = 'EXPIRED',\n}\n\nexport enum BillingReceiptMatchStatus {\n AUTO_MATCHED = 'AUTO_MATCHED',\n UNMATCHED = 'UNMATCHED',\n MANUALLY_MATCHED = 'MANUALLY_MATCHED',\n REFUND_REQUIRED = 'REFUND_REQUIRED',\n}\n\nexport enum BillingAdminActionType {\n MANUAL_CREDIT = 'MANUAL_CREDIT',\n MANUAL_DEBIT = 'MANUAL_DEBIT',\n REFUND = 'REFUND',\n WRITEOFF = 'WRITEOFF',\n RATE_OVERRIDE = 'RATE_OVERRIDE',\n BALANCE_ADJUST = 'BALANCE_ADJUST',\n CONFIG_CHANGE = 'CONFIG_CHANGE',\n PERIOD_LOCK = 'PERIOD_LOCK',\n RERATE_PERIOD = 'RERATE_PERIOD',\n}\n\nexport enum BillingAdminActionStatus {\n PENDING_APPROVAL = 'PENDING_APPROVAL',\n APPROVED = 'APPROVED',\n EXECUTED = 'EXECUTED',\n REJECTED = 'REJECTED',\n EXPIRED = 'EXPIRED',\n}\n\nexport enum BillingKycCaseType {\n ONBOARDING = 'ONBOARDING',\n RE_KYC = 'RE_KYC',\n}\n\nexport enum BillingKycCaseStatus {\n PENDING_SUBMISSION = 'PENDING_SUBMISSION',\n SUBMITTED = 'SUBMITTED',\n IN_REVIEW = 'IN_REVIEW',\n AUTO_APPROVED = 'AUTO_APPROVED',\n APPROVED = 'APPROVED',\n REJECTED = 'REJECTED',\n NEEDS_MORE_INFO = 'NEEDS_MORE_INFO',\n EXPIRED = 'EXPIRED',\n}\n\n// ---------------------------------------------------------------------------\n// Models (all money & timestamps are `number`; AWSJSON is `string | null`)\n// ---------------------------------------------------------------------------\n\nexport type BillingAccount = {\n id: string;\n tenantId: string;\n accountStatus: BillingAccountStatus;\n profile?: TenantBillingInformation | null;\n contractPriceBookId?: string | null;\n gatewayCustomerId?: string | null;\n bankTransferCode?: string | null;\n // Service state. All nullable — additive, no backfill.\n suspendedReason?: string | null; // why SUSPENDED: 'ARREARS_CEILING' (automatic) | 'admin-suspended' | operator text\n blockReason?: string | null; // why BLOCKED: compliance/abuse. Never cleared by a payment\n billingMode?: BillingMode | null; // absent = PREPAID\n creditLimitMicros?: number | null; // POSTPAID only: how far below zero this account may spend\n billingExempt?: boolean | null; // true = usage is free; bypasses the funds floor, not the status gate\n createdAt: number;\n updatedAt: number;\n updatedByUserId?: string | null;\n};\n\nexport type BillingWalletBalance = {\n billingAccountId: string;\n balanceMicros: number;\n reservedMicros: number;\n paidCreditMicros?: number | null;\n promoCreditMicros?: number | null;\n version: number;\n lastLedgerSeq?: string | null;\n lowBalanceThresholdMicros?: number | null;\n autoTopupConfig?: string | null;\n updatedAt: number;\n createdAt: number;\n};\n\nexport type BillingLedgerEntry = {\n billingAccountId: string;\n sk: string;\n entryId: string;\n txnId: string;\n idempotencyKey: string;\n direction: BillingLedgerDirection;\n account: string;\n amountMicros: number;\n balanceAfterMicros?: number | null;\n creditClass?: BillingCreditClass | null;\n entryType: BillingLedgerEntryType;\n refType?: string | null;\n refId?: string | null;\n description?: string | null;\n metadata?: string | null;\n createdAt: number;\n createdBy: string;\n approvedBy?: string | null;\n entryHash: string;\n prevHash: string;\n updatedAt: number;\n};\n\nexport type BillingIdempotencyKey = {\n idemKey: string;\n scope?: string | null;\n resultRef?: string | null;\n expiresAt?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingProduct = {\n id: string;\n productCode: string;\n name: string;\n unit: string;\n meterConfig?: string | null;\n taxCategory?: string | null;\n productStatus?: BillingEntityStatus | null;\n effectiveFrom?: number | null;\n effectiveTo?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingPriceBook = {\n id: string;\n name: string;\n bookType: BillingPriceBookType;\n bookStatus?: BillingEntityStatus | null;\n effectiveFrom?: number | null;\n effectiveTo?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingRateCard = {\n priceBookId: string;\n sk: string;\n productCode: string;\n dimensionKey: string;\n pricingType: BillingPricingType;\n unitPriceMicros?: number | null;\n tiers?: string | null;\n minChargeMicros?: number | null;\n incrementOverride?: string | null;\n buyPriceMicros?: number | null;\n fxCapture?: string | null;\n effectiveFrom: number;\n effectiveTo?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingPlanDefinition = {\n id: string;\n version: string;\n name: string;\n billingPeriod: BillingPeriodType;\n baseFeeMicros?: number | null;\n perSeatFeeMicros?: number | null;\n includedAllowances?: string | null;\n featureFlags?: string | null;\n trialDays?: number | null;\n planStatus?: BillingEntityStatus | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingSubscription = {\n billingAccountId: string;\n sk: string;\n planId: string;\n planVersion: string;\n seats: number;\n subStatus: BillingSubscriptionStatus;\n currentPeriodStart?: number | null;\n currentPeriodEnd?: number | null;\n cancelAtPeriodEnd?: boolean | null;\n allowanceUsage?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingUsageEvent = {\n billingAccountId: string;\n sk: string;\n eventId: string;\n tenantId: string;\n productCode: string;\n quantity: number;\n rawUnit?: string | null;\n dimensions?: string | null;\n sourceService?: string | null;\n sourceRef?: string | null;\n buyCostHint?: string | null;\n occurredAt: number;\n receivedAt: number;\n ratingStatus: BillingRatingStatus;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingRatedCharge = {\n billingAccountId: string;\n sk: string;\n tenantId: string;\n period: string;\n usageEventId?: string | null;\n productCode: string;\n quantity: number;\n rateCardRef?: string | null;\n grossMicros: number;\n allowanceAppliedMicros?: number | null;\n netMicros: number;\n marginMicros?: number | null;\n chargeStatus: BillingChargeStatus;\n ledgerTxnId?: string | null;\n invoiceId?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingInvoice = {\n id: string;\n invoiceNumber?: string | null;\n billingAccountId: string;\n periodStart?: number | null;\n periodEnd: number;\n invoiceType: BillingInvoiceType;\n invoiceStatus: BillingInvoiceStatus;\n profileSnapshot?: TenantBillingInformation | null;\n subtotalMicros?: number | null;\n taxMicros?: number | null;\n totalMicros?: number | null;\n taxTreatment?: BillingTaxTreatment | null;\n fxDisplay?: string | null;\n pdfKey?: string | null;\n peppolPayloadKey?: string | null;\n itemizedCsvKey?: string | null;\n dueAt?: number | null;\n issuedAt?: number | null;\n paidAt?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingInvoiceLine = {\n invoiceId: string;\n sk: string;\n productCode?: string | null;\n description?: string | null;\n quantity?: number | null;\n unitPriceMicros?: number | null;\n amountMicros: number;\n taxCode?: string | null;\n sourceChargeCount?: number | null;\n tenantId?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingPayment = {\n id: string;\n billingAccountId: string;\n rail: BillingPaymentRail;\n provider?: string | null;\n direction: BillingPaymentDirection;\n purpose?: BillingPaymentPurpose | null;\n amountMicros: number;\n payerCurrency?: string | null;\n payerAmountMinor?: number | null;\n fxRateMicros?: number | null;\n paymentStatus: BillingPaymentStatus;\n gatewayRefs?: string | null;\n feeMicros?: number | null;\n failureCode?: string | null;\n ledgerTxnId?: string | null;\n idempotencyKey?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingPaymentMethod = {\n billingAccountId: string;\n sk: string;\n gatewayPaymentMethodId: string;\n displayBrand?: string | null;\n displayLast4?: string | null;\n displayExpMonth?: number | null;\n displayExpYear?: number | null;\n isDefault?: boolean | null;\n methodStatus?: BillingPaymentMethodStatus | null;\n billingAddress?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingBankReceipt = {\n id: string;\n amountMicros: number;\n payerName?: string | null;\n payerBank?: string | null;\n referenceText?: string | null;\n matchStatus: BillingReceiptMatchStatus;\n receivedAt: number;\n provider?: string | null;\n matchedBillingAccountId?: string | null;\n matchedBy?: string | null;\n matchedAt?: number | null;\n ledgerTxnId?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingAdminAction = {\n id: string;\n actionType: BillingAdminActionType;\n payload?: string | null;\n makerUserId: string;\n makerAt: number;\n checkerUserId?: string | null;\n checkerAt?: number | null;\n actionStatus: BillingAdminActionStatus;\n ledgerTxnId?: string | null;\n reason?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingTaxRule = {\n jurisdiction: string;\n sk: string;\n rateBps: number;\n treatment: BillingTaxTreatment;\n f5Box?: string | null;\n invoiceWording?: string | null;\n notes?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingFxRate = {\n pair: string;\n fetchedAt: number;\n midRateMicros: number;\n source: string;\n providerPayloadRef?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingAuditLog = {\n id: string;\n objectRef: string;\n actorUserId: string;\n action: string;\n before?: string | null;\n after?: string | null;\n requestId?: string | null;\n sourceIp?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingPlatformConfig = {\n configKey: string;\n value?: string | null;\n valueType?: string | null;\n notes?: string | null;\n updatedBy?: string | null;\n updatedAt?: number | null;\n version?: number | null;\n createdAt: number;\n};\n\nexport type BillingKycCase = {\n id: string;\n billingAccountId: string;\n tenantId: string;\n caseType: BillingKycCaseType;\n caseStatus: BillingKycCaseStatus;\n submittedAt?: number | null;\n declaredProfile?: TenantBillingInformation | null;\n documents?: string | null;\n checks?: string | null;\n riskScore?: number | null;\n riskFactors?: string | null;\n decision?: string | null;\n slaDueAt?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type TenantBillingSnapshot = {\n id: string;\n billingAccountId: string;\n balanceMicros?: number | null;\n accountStatus?: BillingAccountStatus | null;\n lowBalance?: boolean | null;\n updatedAt: number;\n createdAt: number;\n};\n","import { GraphQLResult } from '@aws-amplify/api-graphql';\n\nexport enum ModelAttributeTypes {\n binary = 'binary',\n binarySet = 'binarySet',\n bool = 'bool',\n list = 'list',\n map = 'map',\n number = 'number',\n numberSet = 'numberSet',\n string = 'string',\n stringSet = 'stringSet',\n _null = '_null',\n}\n\nexport enum ModelSortDirection {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\nexport type ModelSizeInput = {\n ne?: number | null;\n eq?: number | null;\n le?: number | null;\n lt?: number | null;\n ge?: number | null;\n gt?: number | null;\n between?: Array<number | null> | null;\n};\n\nexport type ModelBooleanInput = {\n ne?: boolean | null;\n eq?: boolean | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n};\n\nexport type ModelIDInput = {\n ne?: string | null;\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n contains?: string | null;\n notContains?: string | null;\n between?: Array<string | null> | null;\n beginsWith?: string | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n size?: ModelSizeInput | null;\n};\n\nexport type ModelIntInput = {\n ne?: number | null;\n eq?: number | null;\n le?: number | null;\n lt?: number | null;\n ge?: number | null;\n gt?: number | null;\n between?: Array<number | null> | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n};\n\nexport type ModelStringInput = {\n ne?: string | null;\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n contains?: string | null;\n notContains?: string | null;\n between?: Array<string | null> | null;\n beginsWith?: string | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n size?: ModelSizeInput | null;\n};\n\nexport type ModelIDKeyConditionInput = {\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n between?: Array<string | null> | null;\n beginsWith?: string | null;\n};\n\nexport type ModelIntKeyConditionInput = {\n eq?: number | null;\n le?: number | null;\n lt?: number | null;\n ge?: number | null;\n gt?: number | null;\n between?: Array<number | null> | null;\n};\n\nexport type ModelStringKeyConditionInput = {\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n between?: Array<string | null> | null;\n beginsWith?: string | null;\n};\n\nexport type List<T> = {\n items: Array<T | null>;\n nextToken?: string | null;\n};\n\nexport interface SubscriptionResponse<T> {\n value: GraphQLResult<T>;\n}\n\nexport type Country = {\n code: string;\n nameEn: string;\n nameLocal?: string | null;\n currency?: Currency | null;\n officialLanguage?: Language | null;\n callingCode?: string | null;\n region?: string | null;\n flag?: string | null;\n};\n\nexport type Currency = {\n code: string;\n nameEn: string;\n};\n\nexport type Language = {\n code: string;\n nameEn: string;\n nameLocal?: string | null;\n};\n\nexport type PhoneNumber = {\n countryCode?: string | null;\n dialCode?: string | null;\n e164Number?: string | null;\n internationalNumber?: string | null;\n nationalNumber?: string | null;\n number?: string | null;\n};\n\nexport type S3Object = {\n key: string;\n bucket: string;\n location: string;\n};\n\nexport enum ProcessingStatus {\n PENDING = 'PENDING',\n IN_PROGRESS = \"IN_PROGRESS\",\n SUCCESS = 'SUCCESS',\n FAILED = 'FAILED',\n RETRYING = 'RETRYING',\n}\n\nexport type ModelProcessingStatusInput = {\n eq?: ProcessingStatus | null;\n ne?: ProcessingStatus | null;\n};\n","import { ModelIDInput, ModelIntInput, ModelStringInput, S3Object } from './common.model';\nimport { InteractionWidget } from './interaction-widget.model';\n\nexport enum RecordingMode {\n OFF = 'OFF',\n INBOUND = 'INBOUND',\n OUTBOUND = 'OUTBOUND',\n BOTH = 'BOTH',\n}\n\nexport enum RecordingNotify {\n NONE = 'NONE',\n ANNOUNCE = 'ANNOUNCE',\n CONSENT = 'CONSENT',\n}\n\nexport enum WorkingHoursFallbackAction {\n PLAY_MESSAGE = 'PLAY_MESSAGE',\n VOICEMAIL = 'VOICEMAIL',\n}\n\nexport enum RoutingRole {\n AGENT = 'AGENT',\n SUPERVISOR = 'SUPERVISOR',\n ADMINISTRATOR = 'ADMINISTRATOR',\n}\n\nexport enum RoutingStrategy {\n TICKET_ASSIGNEE = 'TICKET_ASSIGNEE',\n LAST_TALKED_TO = 'LAST_TALKED_TO',\n MOST_IDLE = 'MOST_IDLE',\n RANDOM_ACTIVE = 'RANDOM_ACTIVE',\n ROUND_ROBIN = 'ROUND_ROBIN',\n}\n\nexport enum RoutingFallback {\n ANNOUNCE_DISCONNECT = 'ANNOUNCE_DISCONNECT',\n VOICEMAIL_TICKET = 'VOICEMAIL_TICKET',\n VOICEMAIL = 'VOICEMAIL',\n}\n\nexport enum RoutingNoPickup {\n ANNOUNCE_DISCONNECT = 'ANNOUNCE_DISCONNECT',\n DISCONNECT = 'DISCONNECT',\n TRY_OTHERS = 'TRY_OTHERS',\n VOICEMAIL = 'VOICEMAIL',\n VOICEMAIL_TICKET = 'VOICEMAIL_TICKET',\n}\n\nexport type InteractionEndpoint = {\n id: string;\n externalId: string;\n tenantId: string;\n widgetId: string;\n widget?: InteractionWidget | null;\n address: string;\n configuration?: string | null;\n recordingConfig?: InteractionEndpointRecordingConfig | null;\n workingHoursActionConfig?: InteractionEndpointWorkingHoursActionConfig | null;\n routingConfig?: InteractionEndpointRoutingConfig | null;\n buyPrice?: InteractionEndpointPriceDetails | null;\n sellPrice?: InteractionEndpointPriceDetails | null;\n documents?: Array<InteractionEndpointRegulatoryComplianceDocument | null> | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\n// Cost fields are micro-USD (1 USD = 1_000_000 micros), matching the billing platform.\nexport type InteractionEndpointPriceDetails = {\n currency: string;\n upfrontCost: number;\n monthlyCost: number;\n inboundCost: number;\n outboundCost: number;\n};\n\nexport type InteractionEndpointRegulatoryComplianceDocument = {\n fileName: string;\n documentType?: string | null;\n contentType?: string | null;\n file?: S3Object | null;\n};\n\nexport type InteractionEndpointRecordingConfig = {\n mode?: RecordingMode | null;\n notify?: RecordingNotify | null;\n audioMediaName?: string | null;\n audioUrl?: string | null;\n};\n\nexport type InteractionEndpointWorkingHoursAction = {\n action?: WorkingHoursFallbackAction | null;\n audioMediaName?: string | null;\n audioUrl?: string | null;\n};\n\nexport type InteractionEndpointWorkingHoursActionConfig = {\n duringHours?: InteractionEndpointWorkingHoursAction | null;\n afterHours?: InteractionEndpointWorkingHoursAction | null;\n whenClosed?: InteractionEndpointWorkingHoursAction | null;\n};\n\nexport type InteractionEndpointRoutingAction = {\n action?: RoutingFallback | null;\n audioMediaName?: string | null;\n audioUrl?: string | null;\n};\n\nexport type InteractionEndpointRoutingFirstAction = {\n action?: RoutingNoPickup | null;\n audioMediaName?: string | null;\n audioUrl?: string | null;\n};\n\nexport type InteractionEndpointRoutingConfig = {\n answeringRoles?: Array<RoutingRole | null> | null;\n knownCallerStrategy?: RoutingStrategy | null;\n unknownCallerStrategy?: RoutingStrategy | null;\n ifNoPickup?: InteractionEndpointRoutingFirstAction | null;\n escalationRoles?: Array<RoutingRole | null> | null;\n noAnswer?: InteractionEndpointRoutingAction | null;\n};\n\nexport type CreateInteractionEndpointInput = {\n id?: string | null;\n externalId: string;\n tenantId: string;\n widgetId: string;\n address: string;\n configuration?: string | null;\n recordingConfig?: InteractionEndpointRecordingConfig | null;\n workingHoursActionConfig?: InteractionEndpointWorkingHoursActionConfig | null;\n routingConfig?: InteractionEndpointRoutingConfig | null;\n buyPrice?: InteractionEndpointPriceDetails | null;\n sellPrice?: InteractionEndpointPriceDetails | null;\n documents?: Array<InteractionEndpointRegulatoryComplianceDocument | null> | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UpdateInteractionEndpointInput = {\n id: string;\n externalId?: string | null;\n tenantId?: string | null;\n widgetId?: string | null;\n address?: string | null;\n configuration?: string | null;\n recordingConfig?: InteractionEndpointRecordingConfig | null;\n workingHoursActionConfig?: InteractionEndpointWorkingHoursActionConfig | null;\n routingConfig?: InteractionEndpointRoutingConfig | null;\n buyPrice?: InteractionEndpointPriceDetails | null;\n sellPrice?: InteractionEndpointPriceDetails | null;\n documents?: Array<InteractionEndpointRegulatoryComplianceDocument | null> | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId?: string | null;\n updatedByUserSessionId?: string | null;\n};\n\nexport type ModelInteractionEndpointConditionInput = {\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n address?: ModelStringInput | null;\n configuration?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelInteractionEndpointConditionInput | null> | null;\n or?: Array<ModelInteractionEndpointConditionInput | null> | null;\n not?: ModelInteractionEndpointConditionInput | null;\n};\n\nexport type ModelInteractionEndpointFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n address?: ModelStringInput | null;\n configuration?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelInteractionEndpointFilterInput | null> | null;\n or?: Array<ModelInteractionEndpointFilterInput | null> | null;\n not?: ModelInteractionEndpointFilterInput | null;\n};\n","import { ModelBooleanInput, ModelIDInput, ModelIntInput, ModelStringInput } from './common.model';\nimport { Entity } from './entity.model';\nimport { InteractionChannel, InteractionProvider, InteractionRouteConfiguration, ModelInteractionChannelInput, ModelInteractionProviderInput } from './interaction.model';\nimport { Tenant } from './tenant.model';\n\nexport type InteractionWidget = {\n id: string;\n tenantId: string;\n tenant?: Tenant | null;\n channel: InteractionChannel;\n provider: InteractionProvider;\n providerAccountId?: string | null;\n name: string;\n description?: string | null;\n configuration?: string | null;\n isRecordingEnabledByDefault: boolean;\n isRecordingEnabledOnDemand: boolean;\n isTranscriptionEnabledByDefault: boolean;\n isTranscriptionEnabledOnDemand: boolean;\n routeConfiguration?: InteractionRouteConfiguration | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type InteractionWidgetSession = {\n id: string;\n tenantId: string;\n widgetId: string;\n widget?: InteractionWidget | null;\n entityId: string;\n entity?: Entity | null;\n ipDetails?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type InteractionWidgetUserSetting = {\n id: string;\n widgetId: string;\n userId: string;\n configuration?: string | null;\n allowOverride?: boolean | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type ModelInteractionWidgetConditionInput = {\n tenantId?: ModelIDInput | null;\n channel?: ModelInteractionChannelInput | null;\n provider?: ModelInteractionProviderInput | null;\n providerAccountId?: ModelStringInput | null;\n name?: ModelStringInput | null;\n description?: ModelStringInput | null;\n configuration?: ModelStringInput | null;\n isRecordingEnabledByDefault?: ModelBooleanInput | null;\n isRecordingEnabledOnDemand?: ModelBooleanInput | null;\n isTranscriptionEnabledByDefault?: ModelBooleanInput | null;\n isTranscriptionEnabledOnDemand?: ModelBooleanInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionWidgetConditionInput | null> | null;\n or?: Array<ModelInteractionWidgetConditionInput | null> | null;\n not?: ModelInteractionWidgetConditionInput | null;\n};\n\nexport type ModelInteractionWidgetFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n channel?: ModelInteractionChannelInput | null;\n provider?: ModelInteractionProviderInput | null;\n providerAccountId?: ModelStringInput | null;\n name?: ModelStringInput | null;\n description?: ModelStringInput | null;\n configuration?: ModelStringInput | null;\n isRecordingEnabledByDefault?: ModelBooleanInput | null;\n isRecordingEnabledOnDemand?: ModelBooleanInput | null;\n isTranscriptionEnabledByDefault?: ModelBooleanInput | null;\n isTranscriptionEnabledOnDemand?: ModelBooleanInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionWidgetFilterInput | null> | null;\n or?: Array<ModelInteractionWidgetFilterInput | null> | null;\n not?: ModelInteractionWidgetFilterInput | null;\n};\n\nexport type ModelInteractionWidgetSessionFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n ipDetails?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionWidgetSessionFilterInput | null> | null;\n or?: Array<ModelInteractionWidgetSessionFilterInput | null> | null;\n not?: ModelInteractionWidgetSessionFilterInput | null;\n};\n\nexport type ModelInteractionWidgetUserSettingFilterInput = {\n id?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n configuration?: ModelStringInput | null;\n allowOverride?: ModelBooleanInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelInteractionWidgetUserSettingFilterInput | null> | null;\n or?: Array<ModelInteractionWidgetUserSettingFilterInput | null> | null;\n not?: ModelInteractionWidgetUserSettingFilterInput | null;\n};\n\n// ---------------------------------------------------------------------------\n// Web-chat widget configuration\n//\n// InteractionWidget.configuration is an AWSJSON blob rather than a column per\n// setting, so the shape lives here and is shared by the agent app (which writes\n// it) and the embedded widget (which reads it). Everything is optional — a\n// widget created before a setting existed simply won't carry the key, so always\n// fall back to the defaults in DEFAULT_WEB_CHAT_WIDGET_CONFIGURATION.\n// ---------------------------------------------------------------------------\n\nexport type WebChatWidgetCustomField = {\n element?: {\n field_name?: string;\n is_required?: boolean;\n [key: string]: any;\n };\n type?: string;\n addedComponents?: Array<Array<WebChatWidgetCustomField>>;\n [key: string]: any;\n};\n\nexport type WebChatWidgetConfiguration = {\n // Theme\n primaryColorCode?: string | null;\n welcomeTitle?: string | null;\n welcomeMessage?: string | null;\n imageURL?: string | null;\n // Capabilities\n isChatEnabled?: boolean | null;\n isVoiceEnabled?: boolean | null;\n isVideoEnabled?: boolean | null;\n isScreenShareEnabled?: boolean | null;\n isFileShareEnabled?: boolean | null;\n // Behaviour\n sessionTimeout?: number | null;\n // Pre-chat form definition\n customFields?: Array<WebChatWidgetCustomField> | null;\n};\n\nexport const DEFAULT_WEB_CHAT_WIDGET_CONFIGURATION: Required<Pick<WebChatWidgetConfiguration, 'primaryColorCode' | 'welcomeTitle' | 'welcomeMessage'>> = {\n primaryColorCode: '#ff6633',\n welcomeTitle: 'Welcome!',\n welcomeMessage: 'How can we help you today?',\n};\n\n/**\n * Reads InteractionWidget.configuration into a typed object. Accepts the raw\n * AWSJSON string, an already-parsed object, or null/undefined, and never throws\n * — malformed JSON yields {} so a bad record degrades to defaults instead of\n * taking the widget down.\n *\n * customFields entries are tolerated as either objects or JSON strings, because\n * the legacy InteractionWidget.customFields column stored [AWSJSON] (a list of\n * encoded strings) and older records were migrated across verbatim.\n */\nexport function parseWebChatWidgetConfiguration(configuration?: string | WebChatWidgetConfiguration | null): WebChatWidgetConfiguration {\n if (!configuration) {\n return {};\n }\n\n let parsed: any = configuration;\n if (typeof configuration === 'string') {\n try {\n parsed = JSON.parse(configuration);\n } catch (error) {\n console.warn('Unable to parse InteractionWidget.configuration; falling back to defaults', error);\n return {};\n }\n }\n\n if (!parsed || typeof parsed !== 'object') {\n return {};\n }\n\n if (Array.isArray(parsed.customFields)) {\n parsed = {\n ...parsed,\n customFields: parsed.customFields\n .map((field: any) => {\n if (typeof field !== 'string') {\n return field;\n }\n try {\n return JSON.parse(field);\n } catch {\n return null;\n }\n })\n .filter((field: any) => !!field),\n };\n }\n\n return <WebChatWidgetConfiguration>parsed;\n}\n","import { List, ModelBooleanInput, ModelIDInput, ModelIntInput, ModelProcessingStatusInput, ModelStringInput, ProcessingStatus, S3Object } from './common.model';\nimport { Entity } from './entity.model';\nimport { EntityConversation } from './entity-conversation.model';\nimport { InteractionEndpoint } from './interaction-endpoint.model';\nimport { InteractionWidget } from './interaction-widget.model';\nimport { Team } from './team.model';\nimport { User } from './user.model';\nimport { UserSession } from './user-session.model';\n\nexport enum InteractionChannel {\n EMAIL = 'EMAIL',\n PHONE = 'PHONE',\n SMS = 'SMS',\n WEB_CHAT = 'WEB_CHAT',\n SOCIAL_CHAT = 'SOCIAL_CHAT',\n}\n\nexport enum InteractionContext {\n INTERNAL = 'INTERNAL',\n EXTERNAL = 'EXTERNAL',\n}\n\nexport enum InteractionDirection {\n IN = 'IN',\n OUT = 'OUT',\n}\n\nexport enum InteractionMessageDirection {\n IN = 'IN',\n OUT = 'OUT',\n}\n\nexport enum InteractionStatus {\n INITIATED = 'INITIATED',\n QUEUED = 'QUEUED',\n RINGING = 'RINGING',\n CONNECTED_TO_AGENT = 'CONNECTED_TO_AGENT',\n CONNECTED_TO_BOT = 'CONNECTED_TO_BOT',\n HELD = 'HELD',\n DISCONNECTED = 'DISCONNECTED',\n CANCELLED = 'CANCELLED',\n REJECTED = 'REJECTED',\n NO_ANSWER = 'NO_ANSWER',\n MISSED = 'MISSED',\n FAILED = 'FAILED',\n}\n\n// Per-message delivery status, driven by the WhatsApp (and other provider) status webhooks.\n// Powers the single / double / blue read-receipt ticks on outbound messages.\n// RECEIVED is the terminal state of an inbound message.\nexport enum InteractionMessageStatus {\n QUEUED = 'QUEUED',\n SENT = 'SENT',\n DELIVERED = 'DELIVERED',\n READ = 'READ',\n FAILED = 'FAILED',\n RECEIVED = 'RECEIVED',\n}\n\n// Where a campaign-driven interaction currently sits in its flow.\nexport enum FlowRuntimeStatus {\n AWAITING_DISPATCH = 'AWAITING_DISPATCH',\n AWAITING_REPLY = 'AWAITING_REPLY',\n AWAITING_TIMER = 'AWAITING_TIMER',\n PAUSED_BY_AGENT = 'PAUSED_BY_AGENT',\n COMPLETED = 'COMPLETED',\n FAILED = 'FAILED',\n ABANDONED = 'ABANDONED',\n}\n\nexport enum InteractionProvider {\n AVAYA_IPO = 'AVAYA_IPO',\n EMAIL_SMTP = 'EMAIL_SMTP',\n EMAIL_SES = 'EMAIL_SES',\n FACEBOOK = 'FACEBOOK',\n INSTAGRAM = 'INSTAGRAM',\n OZONETEL = 'OZONETEL',\n SNUGDESK = 'SNUGDESK',\n TELEGRAM = 'TELEGRAM',\n TELNYX = 'TELNYX',\n WHATSAPP = 'WHATSAPP',\n}\n\nexport type InteractionRouteConfiguration = {\n teamId?: string | null;\n routingLogic?: InteractionRouteLogic | null;\n maxWaitTimeoutSeconds?: number | null;\n};\n\nexport enum InteractionRouteLogic {\n MOST_IDLE_AGENT = 'MOST_IDLE_AGENT',\n PARALLEL = 'PARALLEL',\n}\n\nexport type Interaction = {\n id: string;\n tenantId: string;\n widgetId: string;\n widget?: InteractionWidget | null;\n endpointId: string;\n endpoint?: InteractionEndpoint | null;\n entityConversationId?: string | null;\n entityConversation?: EntityConversation | null;\n entityId?: string | null;\n entity?: Entity | null;\n teamId?: string | null;\n team?: Team | null;\n hostId?: string | null;\n host?: InteractionHost | null;\n providerInteractionId?: string | null;\n channel: InteractionChannel;\n provider: InteractionProvider;\n context: InteractionContext;\n direction: InteractionDirection;\n status?: InteractionStatus | null;\n last_status?: InteractionStatus | null;\n subject?: string | null;\n metadata?: string | null;\n notes?: string | null;\n summary?: string | null;\n recording?: S3Object | null;\n transcription?: S3Object | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n aiProcessingStatus?: ProcessingStatus | null;\n aiProcessingCompletedAt?: number | null;\n postProcessingStatus?: ProcessingStatus | null;\n postProcessingCompletedAt?: number | null;\n reportProcessingStatus?: ProcessingStatus | null;\n reportProcessingCompletedAt?: number | null;\n routeConfiguration?: InteractionRouteConfiguration | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n // Campaign flow runtime state (set only for campaign-driven interactions)\n campaignId?: string | null;\n flowVersion?: number | null;\n currentCampaignFlowNodeId?: string | null;\n flowVariables?: string | null;\n flowStatus?: FlowRuntimeStatus | null;\n flowRetryCount?: number | null;\n flowReminderIndex?: number | null;\n flowTimeoutAt?: number | null;\n flowTimerScheduleArn?: string | null;\n // Human-agent takeover state\n isAgentHandling?: boolean | null;\n assignedAgentId?: string | null;\n agentHandlingStartedAt?: number | null;\n agentHandlingEndedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n // The hasMany connections (invitees, attendees, attendeeConnections, messages,\n // messageAttachments, campaignTargets) are fetched through their own list queries.\n};\n\nexport type InteractionHost = {\n id: string;\n interactionId: string;\n interaction?: Interaction | null;\n entityId?: string | null;\n entity?: Entity | null;\n teamId?: string | null;\n team?: Team | null;\n userId?: string | null;\n user?: User | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type InteractionInvitee = {\n id: string;\n interactionId: string;\n interaction?: Interaction | null;\n entityId?: string | null;\n entity?: Entity | null;\n teamId?: string | null;\n team?: Team | null;\n userId?: string | null;\n user?: User | null;\n isAdministrator: boolean;\n temp_expiringAt?: number | null;\n expiredAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type InteractionAttendee = {\n id: string;\n interactionId: string;\n interaction?: Interaction | null;\n entityId?: string | null;\n entity?: Entity | null;\n interactionWidgetSessionId?: string | null;\n teamId?: string | null;\n team?: Team | null;\n userId?: string | null;\n user?: User | null;\n userSessionId?: string | null;\n userSession?: UserSession | null;\n name: string;\n metadata?: string | null;\n customFields?: Array<string | null> | null;\n isAdministrator: boolean;\n joinedAt?: number | null;\n exitedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type InteractionAttendeeConnection = {\n id: string;\n connectionId: string;\n interactionId: string;\n interaction?: Interaction | null;\n interactionAttendeeId: string;\n interactionAttendee?: InteractionAttendee | null;\n connectedAt?: number | null;\n disconnectedAt?: number | null;\n duration?: number | null;\n metadata?: string | null;\n recording?: S3Object | null;\n transcript?: S3Object | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type InteractionMessage = {\n id: string;\n externalId?: string | null;\n endpointId?: string | null;\n endpoint?: InteractionEndpoint | null;\n campaignId?: string | null;\n campaignFlowNodeId?: string | null;\n entityConversationId: string;\n entityConversation?: EntityConversation | null;\n interactionId: string;\n interaction?: Interaction | null;\n interactionAttendeeId?: string | null;\n interactionAttendee?: InteractionAttendee | null;\n referenceMessageId?: string | null;\n body?: string | null;\n metadata?: string | null;\n direction?: InteractionMessageDirection | null;\n status?: InteractionMessageStatus | null;\n statusUpdatedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n messageAttachments?: List<InteractionMessageAttachment> | null;\n // Client-only: optimistic \"in flight\" flag, never sent to or returned by AppSync.\n temp_isSending?: boolean | null;\n};\n\nexport type InteractionMessageAttachment = {\n id: string;\n externalId?: string | null;\n interactionId: string;\n interactionMessageId: string;\n name: string;\n size?: number | null;\n type?: string | null;\n file: S3Object;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type CreateInteractionInput = {\n id?: string | null;\n tenantId: string;\n widgetId: string;\n endpointId: string;\n entityConversationId?: string | null;\n entityId?: string | null;\n teamId?: string | null;\n hostId?: string | null;\n providerInteractionId?: string | null;\n channel: InteractionChannel;\n provider: InteractionProvider;\n context: InteractionContext;\n direction: InteractionDirection;\n status?: InteractionStatus | null;\n last_status?: InteractionStatus | null;\n subject?: string | null;\n metadata?: string | null;\n notes?: string | null;\n summary?: string | null;\n recording?: S3Object | null;\n transcription?: S3Object | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n aiProcessingStatus?: ProcessingStatus | null;\n aiProcessingCompletedAt?: number | null;\n postProcessingStatus?: ProcessingStatus | null;\n postProcessingCompletedAt?: number | null;\n reportProcessingStatus?: ProcessingStatus | null;\n reportProcessingCompletedAt?: number | null;\n routeConfiguration?: InteractionRouteConfigurationInput | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n campaignId?: string | null;\n flowVersion?: number | null;\n currentCampaignFlowNodeId?: string | null;\n flowVariables?: string | null;\n flowStatus?: FlowRuntimeStatus | null;\n flowRetryCount?: number | null;\n flowReminderIndex?: number | null;\n flowTimeoutAt?: number | null;\n flowTimerScheduleArn?: string | null;\n isAgentHandling?: boolean | null;\n assignedAgentId?: string | null;\n agentHandlingStartedAt?: number | null;\n agentHandlingEndedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateInteractionInput = {\n id: string;\n tenantId?: string | null;\n widgetId?: string | null;\n endpointId?: string | null;\n entityConversationId?: string | null;\n entityId?: string | null;\n teamId?: string | null;\n hostId?: string | null;\n providerInteractionId?: string | null;\n channel?: InteractionChannel | null;\n provider?: InteractionProvider | null;\n context?: InteractionContext | null;\n direction?: InteractionDirection | null;\n status?: InteractionStatus | null;\n last_status?: InteractionStatus | null;\n subject?: string | null;\n metadata?: string | null;\n notes?: string | null;\n summary?: string | null;\n recording?: S3Object | null;\n transcription?: S3Object | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n aiProcessingStatus?: ProcessingStatus | null;\n aiProcessingCompletedAt?: number | null;\n postProcessingStatus?: ProcessingStatus | null;\n postProcessingCompletedAt?: number | null;\n reportProcessingStatus?: ProcessingStatus | null;\n reportProcessingCompletedAt?: number | null;\n routeConfiguration?: InteractionRouteConfigurationInput | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n campaignId?: string | null;\n flowVersion?: number | null;\n currentCampaignFlowNodeId?: string | null;\n flowVariables?: string | null;\n flowStatus?: FlowRuntimeStatus | null;\n flowRetryCount?: number | null;\n flowReminderIndex?: number | null;\n flowTimeoutAt?: number | null;\n flowTimerScheduleArn?: string | null;\n isAgentHandling?: boolean | null;\n assignedAgentId?: string | null;\n agentHandlingStartedAt?: number | null;\n agentHandlingEndedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionConditionInput = {\n tenantId?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n endpointId?: ModelIDInput | null;\n entityConversationId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n hostId?: ModelIDInput | null;\n providerInteractionId?: ModelStringInput | null;\n channel?: ModelInteractionChannelInput | null;\n provider?: ModelInteractionProviderInput | null;\n context?: ModelInteractionContextInput | null;\n direction?: ModelInteractionDirectionInput | null;\n status?: ModelInteractionStatusInput | null;\n last_status?: ModelInteractionStatusInput | null;\n subject?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n notes?: ModelStringInput | null;\n summary?: ModelStringInput | null;\n startedAt?: ModelIntInput | null;\n completedAt?: ModelIntInput | null;\n duration?: ModelIntInput | null;\n aiProcessingStatus?: ModelProcessingStatusInput | null;\n aiProcessingCompletedAt?: ModelIntInput | null;\n postProcessingStatus?: ModelProcessingStatusInput | null;\n postProcessingCompletedAt?: ModelIntInput | null;\n reportProcessingStatus?: ModelProcessingStatusInput | null;\n reportProcessingCompletedAt?: ModelIntInput | null;\n temp_isLocked?: ModelBooleanInput | null;\n temp_isAvailableTenantIdUnion?: ModelStringInput | null;\n campaignId?: ModelIDInput | null;\n flowVersion?: ModelIntInput | null;\n currentCampaignFlowNodeId?: ModelIDInput | null;\n flowVariables?: ModelStringInput | null;\n flowStatus?: ModelFlowRuntimeStatusInput | null;\n flowRetryCount?: ModelIntInput | null;\n flowReminderIndex?: ModelIntInput | null;\n flowTimeoutAt?: ModelIntInput | null;\n flowTimerScheduleArn?: ModelStringInput | null;\n isAgentHandling?: ModelBooleanInput | null;\n assignedAgentId?: ModelIDInput | null;\n agentHandlingStartedAt?: ModelIntInput | null;\n agentHandlingEndedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionConditionInput | null> | null;\n or?: Array<ModelInteractionConditionInput | null> | null;\n not?: ModelInteractionConditionInput | null;\n};\n\nexport type ModelInteractionFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n endpointId?: ModelIDInput | null;\n entityConversationId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n hostId?: ModelIDInput | null;\n providerInteractionId?: ModelStringInput | null;\n channel?: ModelInteractionChannelInput | null;\n provider?: ModelInteractionProviderInput | null;\n context?: ModelInteractionContextInput | null;\n direction?: ModelInteractionDirectionInput | null;\n status?: ModelInteractionStatusInput | null;\n last_status?: ModelInteractionStatusInput | null;\n subject?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n notes?: ModelStringInput | null;\n summary?: ModelStringInput | null;\n startedAt?: ModelIntInput | null;\n completedAt?: ModelIntInput | null;\n duration?: ModelIntInput | null;\n aiProcessingStatus?: ModelProcessingStatusInput | null;\n aiProcessingCompletedAt?: ModelIntInput | null;\n postProcessingStatus?: ModelProcessingStatusInput | null;\n postProcessingCompletedAt?: ModelIntInput | null;\n reportProcessingStatus?: ModelProcessingStatusInput | null;\n reportProcessingCompletedAt?: ModelIntInput | null;\n temp_isLocked?: ModelBooleanInput | null;\n temp_isAvailableTenantIdUnion?: ModelStringInput | null;\n campaignId?: ModelIDInput | null;\n flowVersion?: ModelIntInput | null;\n currentCampaignFlowNodeId?: ModelIDInput | null;\n flowVariables?: ModelStringInput | null;\n flowStatus?: ModelFlowRuntimeStatusInput | null;\n flowRetryCount?: ModelIntInput | null;\n flowReminderIndex?: ModelIntInput | null;\n flowTimeoutAt?: ModelIntInput | null;\n flowTimerScheduleArn?: ModelStringInput | null;\n isAgentHandling?: ModelBooleanInput | null;\n assignedAgentId?: ModelIDInput | null;\n agentHandlingStartedAt?: ModelIntInput | null;\n agentHandlingEndedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionFilterInput | null> | null;\n or?: Array<ModelInteractionFilterInput | null> | null;\n not?: ModelInteractionFilterInput | null;\n};\n\nexport type CreateInteractionHostInput = {\n id?: string | null;\n interactionId: string;\n entityId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateInteractionHostInput = {\n id: string;\n interactionId?: string | null;\n entityId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionHostConditionInput = {\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionHostConditionInput | null> | null;\n or?: Array<ModelInteractionHostConditionInput | null> | null;\n not?: ModelInteractionHostConditionInput | null;\n};\n\nexport type ModelInteractionHostFilterInput = {\n id?: ModelIDInput | null;\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionHostFilterInput | null> | null;\n or?: Array<ModelInteractionHostFilterInput | null> | null;\n not?: ModelInteractionHostFilterInput | null;\n};\n\nexport type CreateInteractionInviteeInput = {\n id?: string | null;\n interactionId: string;\n entityId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n isAdministrator: boolean;\n temp_expiringAt?: number | null;\n expiredAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateInteractionInviteeInput = {\n id: string;\n interactionId?: string | null;\n entityId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n isAdministrator?: boolean | null;\n temp_expiringAt?: number | null;\n expiredAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionInviteeConditionInput = {\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n isAdministrator?: ModelBooleanInput | null;\n temp_expiringAt?: ModelIntInput | null;\n expiredAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionInviteeConditionInput | null> | null;\n or?: Array<ModelInteractionInviteeConditionInput | null> | null;\n not?: ModelInteractionInviteeConditionInput | null;\n};\n\nexport type ModelInteractionInviteeFilterInput = {\n id?: ModelIDInput | null;\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n isAdministrator?: ModelBooleanInput | null;\n temp_expiringAt?: ModelIntInput | null;\n expiredAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionInviteeFilterInput | null> | null;\n or?: Array<ModelInteractionInviteeFilterInput | null> | null;\n not?: ModelInteractionInviteeFilterInput | null;\n};\n\nexport type CreateInteractionAttendeeInput = {\n id?: string | null;\n interactionId: string;\n entityId?: string | null;\n interactionWidgetSessionId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n userSessionId?: string | null;\n name: string;\n metadata?: string | null;\n customFields?: Array<string | null> | null;\n isAdministrator: boolean;\n joinedAt?: number | null;\n exitedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateInteractionAttendeeInput = {\n id: string;\n interactionId?: string | null;\n entityId?: string | null;\n interactionWidgetSessionId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n userSessionId?: string | null;\n name?: string | null;\n metadata?: string | null;\n customFields?: Array<string | null> | null;\n isAdministrator?: boolean | null;\n joinedAt?: number | null;\n exitedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionAttendeeConditionInput = {\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n interactionWidgetSessionId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n userSessionId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n customFields?: ModelStringInput | null;\n isAdministrator?: ModelBooleanInput | null;\n joinedAt?: ModelIntInput | null;\n exitedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionAttendeeConditionInput | null> | null;\n or?: Array<ModelInteractionAttendeeConditionInput | null> | null;\n not?: ModelInteractionAttendeeConditionInput | null;\n};\n\nexport type ModelInteractionAttendeeFilterInput = {\n id?: ModelIDInput | null;\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n interactionWidgetSessionId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n userSessionId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n customFields?: ModelStringInput | null;\n isAdministrator?: ModelBooleanInput | null;\n joinedAt?: ModelIntInput | null;\n exitedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionAttendeeFilterInput | null> | null;\n or?: Array<ModelInteractionAttendeeFilterInput | null> | null;\n not?: ModelInteractionAttendeeFilterInput | null;\n};\n\nexport type CreateInteractionMessageInput = {\n id?: string | null;\n externalId?: string | null;\n endpointId?: string | null;\n campaignId?: string | null;\n campaignFlowNodeId?: string | null;\n entityConversationId: string;\n interactionId: string;\n interactionAttendeeId?: string | null;\n referenceMessageId?: string | null;\n body?: string | null;\n metadata?: string | null;\n direction?: InteractionMessageDirection | null;\n status?: InteractionMessageStatus | null;\n statusUpdatedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateInteractionMessageInput = {\n id: string;\n externalId?: string | null;\n endpointId?: string | null;\n campaignId?: string | null;\n campaignFlowNodeId?: string | null;\n entityConversationId?: string | null;\n interactionId?: string | null;\n interactionAttendeeId?: string | null;\n referenceMessageId?: string | null;\n body?: string | null;\n metadata?: string | null;\n direction?: InteractionMessageDirection | null;\n status?: InteractionMessageStatus | null;\n statusUpdatedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionMessageConditionInput = {\n externalId?: ModelStringInput | null;\n endpointId?: ModelIDInput | null;\n campaignId?: ModelIDInput | null;\n campaignFlowNodeId?: ModelIDInput | null;\n entityConversationId?: ModelIDInput | null;\n interactionId?: ModelIDInput | null;\n interactionAttendeeId?: ModelIDInput | null;\n referenceMessageId?: ModelIDInput | null;\n body?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n direction?: ModelInteractionMessageDirectionInput | null;\n status?: ModelInteractionMessageStatusInput | null;\n statusUpdatedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionMessageConditionInput | null> | null;\n or?: Array<ModelInteractionMessageConditionInput | null> | null;\n not?: ModelInteractionMessageConditionInput | null;\n};\n\nexport type ModelInteractionMessageFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n endpointId?: ModelIDInput | null;\n campaignId?: ModelIDInput | null;\n campaignFlowNodeId?: ModelIDInput | null;\n entityConversationId?: ModelIDInput | null;\n interactionId?: ModelIDInput | null;\n interactionAttendeeId?: ModelIDInput | null;\n referenceMessageId?: ModelIDInput | null;\n body?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n direction?: ModelInteractionMessageDirectionInput | null;\n status?: ModelInteractionMessageStatusInput | null;\n statusUpdatedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionMessageFilterInput | null> | null;\n or?: Array<ModelInteractionMessageFilterInput | null> | null;\n not?: ModelInteractionMessageFilterInput | null;\n};\n\nexport type CreateInteractionMessageAttachmentInput = {\n id?: string | null;\n externalId?: string | null;\n interactionId: string;\n interactionMessageId: string;\n name: string;\n size?: number | null;\n type?: string | null;\n file: S3Object;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionMessageAttachmentConditionInput = {\n externalId?: ModelStringInput | null;\n interactionId?: ModelIDInput | null;\n interactionMessageId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n size?: ModelIntInput | null;\n type?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionMessageAttachmentConditionInput | null> | null;\n or?: Array<ModelInteractionMessageAttachmentConditionInput | null> | null;\n not?: ModelInteractionMessageAttachmentConditionInput | null;\n};\n\nexport type ModelInteractionMessageAttachmentFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n interactionId?: ModelIDInput | null;\n interactionMessageId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n size?: ModelIntInput | null;\n type?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionMessageAttachmentFilterInput | null> | null;\n or?: Array<ModelInteractionMessageAttachmentFilterInput | null> | null;\n not?: ModelInteractionMessageAttachmentFilterInput | null;\n};\n\nexport type ModelInteractionChannelInput = {\n eq?: InteractionChannel | null;\n ne?: InteractionChannel | null;\n};\n\nexport type ModelInteractionContextInput = {\n eq?: InteractionContext | null;\n ne?: InteractionContext | null;\n};\n\nexport type ModelInteractionDirectionInput = {\n eq?: InteractionDirection | null;\n ne?: InteractionDirection | null;\n};\n\nexport type ModelInteractionMessageDirectionInput = {\n eq?: InteractionMessageDirection | null;\n ne?: InteractionMessageDirection | null;\n};\n\nexport type ModelInteractionMessageStatusInput = {\n eq?: InteractionMessageStatus | null;\n ne?: InteractionMessageStatus | null;\n};\n\nexport type ModelFlowRuntimeStatusInput = {\n eq?: FlowRuntimeStatus | null;\n ne?: FlowRuntimeStatus | null;\n};\n\nexport type ModelInteractionProviderInput = {\n eq?: InteractionProvider | null;\n ne?: InteractionProvider | null;\n};\n\nexport type ModelInteractionStatusInput = {\n eq?: InteractionStatus | null;\n ne?: InteractionStatus | null;\n};\n\nexport type InteractionRouteConfigurationInput = {\n teamId?: string | null;\n routingLogic?: InteractionRouteLogic | null;\n maxWaitTimeoutSeconds?: number | null;\n};\n","import { Country, Language, ModelIDInput, ModelIntInput, ModelStringInput, PhoneNumber, S3Object } from './common.model';\n\nexport enum TenantComplianceDocumentStatus {\n ACTIVE = 'ACTIVE',\n EXPIRED = 'EXPIRED',\n REVOKED = 'REVOKED',\n PENDING_VERIFICATION = 'PENDING_VERIFICATION',\n}\n\nexport enum TenantComplianceDocumentType {\n PAN_CARD = 'PAN_CARD',\n GST_CERTIFICATE = 'GST_CERTIFICATE',\n TDS_REGISTRATION = 'TDS_REGISTRATION',\n GOVT_CERTIFICATE = 'GOVT_CERTIFICATE',\n OTHER = 'OTHER',\n}\n\nexport enum TenantSSOConfigurationProtocol {\n SAML = 'SAML',\n OIDC = 'OIDC',\n}\n\n// Which external system minted the externalIds carried on Tenant/User/Entity.\nexport enum TenantExternalCrmProvider {\n SAP = 'SAP',\n SALESFORCE = 'SALESFORCE',\n}\n\nexport enum TenantOnboardingStatus {\n NOT_STARTED = 'NOT_STARTED',\n IN_PROGRESS = 'IN_PROGRESS',\n COMPLETED = 'COMPLETED',\n}\n\nexport type Tenant = {\n id: string;\n externalId?: string | null;\n externalCrmProvider?: TenantExternalCrmProvider | null;\n tenantDomain: string;\n organizationName: string;\n websiteURL?: string | null;\n image?: S3Object | null;\n billingInformation?: TenantBillingInformation | null;\n contactInformation?: TenantContactInformation | null;\n preferences?: TenantPreferences | null;\n ssoConfiguration?: TenantSSOConfiguration | null;\n security?: TenantSecurity | null;\n profile?: TenantProfile | null;\n onboarding?: TenantOnboarding | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type TenantComplianceDocument = {\n id: string;\n tenantId: string;\n documentName?: string | null;\n documentType: TenantComplianceDocumentType;\n documentNumber?: string | null;\n legalEntityName?: string | null;\n issuedBy?: string | null;\n issueDate?: number | null;\n expiryDate?: number | null;\n status: TenantComplianceDocumentStatus;\n notes?: string | null;\n file: S3Object;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type TenantBillingInformation = {\n companyName: string;\n address?: string | null;\n state?: string | null;\n city?: string | null;\n postalCode?: string | null;\n country?: Country | null;\n companyIdentificationNumber?: string | null;\n taxIdentificationNumber?: string | null;\n billingEmail?: string | null;\n website?: string | null;\n};\n\nexport type TenantContactInformation = {\n name: string;\n email: string;\n phoneNumber?: PhoneNumber | null;\n address?: string | null;\n state?: string | null;\n city?: string | null;\n postalCode?: string | null;\n country?: Country | null;\n};\n\nexport type TenantPreferences = {\n timezoneName?: string | null;\n language?: Language | null;\n allowUserToChangePreferences?: boolean | null;\n brandColor?: string | null;\n workingHours?: TenantWorkingHours | null;\n availabilityConfig?: TenantAvailabilityCallingConfig | null;\n recordingExcludedUserIds?: Array<string | null> | null;\n};\n\nexport type TenantWorkingHours = {\n timezone?: string | null;\n days?: Array<TenantWorkingHoursDay | null> | null;\n};\n\n// `start` / `end` are AWSTime strings (e.g. \"09:00:00.000\").\nexport type TenantWorkingHoursDay = {\n day?: string | null;\n open?: boolean | null;\n start?: string | null;\n end?: string | null;\n};\n\nexport type TenantAvailabilityCallingConfig = {\n customStatuses?: Array<TenantAvailabilityStatus | null> | null;\n allowDialUnsavedNumber?: boolean | null;\n acwTime?: number | null;\n ringtone?: string | null;\n};\n\nexport type TenantAvailabilityStatus = {\n key?: string | null;\n name?: string | null;\n colour?: string | null;\n available?: boolean | null;\n};\n\nexport type TenantProfile = {\n businessType?: string | null;\n industry?: string | null;\n teamSize?: string | null;\n goals?: Array<string | null> | null;\n};\n\nexport type TenantOnboarding = {\n status: TenantOnboardingStatus;\n currentStep?: string | null;\n completedSteps?: Array<string | null> | null;\n startedAt?: number | null;\n completedAt?: number | null;\n};\n\nexport type TenantSecurity = {\n domainValidationTokenExpiry?: number | null;\n userValidationTokenExpiry?: number | null;\n secretTokenExpiry?: number | null;\n sessionTokenExpiry?: number | null;\n sessionIdleTimeout?: number | null;\n};\n\nexport type TenantSSOConfiguration = {\n provider: string;\n protocol?: TenantSSOConfigurationProtocol | null;\n displayName?: string | null;\n configuration?: string | null;\n isEnabled?: boolean | null;\n isDefaultLoginMode?: boolean | null;\n};\n\nexport type CreateTenantInput = {\n id?: string | null;\n externalId?: string | null;\n externalCrmProvider?: TenantExternalCrmProvider | null;\n tenantDomain: string;\n organizationName: string;\n websiteURL?: string | null;\n image?: S3Object | null;\n billingInformation?: TenantBillingInformation | null;\n contactInformation?: TenantContactInformation | null;\n preferences?: TenantPreferences | null;\n ssoConfiguration?: TenantSSOConfiguration | null;\n security?: TenantSecurity | null;\n profile?: TenantProfile | null;\n onboarding?: TenantOnboarding | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UpdateTenantInput = {\n id: string;\n externalId?: string | null;\n externalCrmProvider?: TenantExternalCrmProvider | null;\n tenantDomain?: string | null;\n organizationName?: string | null;\n websiteURL?: string | null;\n image?: S3Object | null;\n billingInformation?: TenantBillingInformation | null;\n contactInformation?: TenantContactInformation | null;\n preferences?: TenantPreferences | null;\n ssoConfiguration?: TenantSSOConfiguration | null;\n security?: TenantSecurity | null;\n profile?: TenantProfile | null;\n onboarding?: TenantOnboarding | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId?: string | null;\n updatedByUserSessionId?: string | null;\n};\n\nexport type ModelTenantConditionInput = {\n externalId?: ModelStringInput | null;\n externalCrmProvider?: ModelTenantExternalCrmProviderInput | null;\n tenantDomain?: ModelStringInput | null;\n organizationName?: ModelStringInput | null;\n websiteURL?: ModelStringInput | null;\n activatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelTenantConditionInput | null> | null;\n or?: Array<ModelTenantConditionInput | null> | null;\n not?: ModelTenantConditionInput | null;\n};\n\nexport type ModelTenantFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n externalCrmProvider?: ModelTenantExternalCrmProviderInput | null;\n tenantDomain?: ModelStringInput | null;\n organizationName?: ModelStringInput | null;\n websiteURL?: ModelStringInput | null;\n activatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelTenantFilterInput | null> | null;\n or?: Array<ModelTenantFilterInput | null> | null;\n not?: ModelTenantFilterInput | null;\n};\n\nexport type ModelTenantExternalCrmProviderInput = {\n eq?: TenantExternalCrmProvider | null;\n ne?: TenantExternalCrmProvider | null;\n};\n\nexport type CreateTenantComplianceDocumentInput = {\n id?: string | null;\n tenantId: string;\n documentName?: string | null;\n documentType: TenantComplianceDocumentType;\n documentNumber?: string | null;\n legalEntityName?: string | null;\n issuedBy?: string | null;\n issueDate?: number | null;\n expiryDate?: number | null;\n status: TenantComplianceDocumentStatus;\n notes?: string | null;\n file: S3Object;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UpdateTenantComplianceDocumentInput = {\n id: string;\n tenantId?: string | null;\n documentName?: string | null;\n documentType?: TenantComplianceDocumentType | null;\n documentNumber?: string | null;\n legalEntityName?: string | null;\n issuedBy?: string | null;\n issueDate?: number | null;\n expiryDate?: number | null;\n status?: TenantComplianceDocumentStatus | null;\n notes?: string | null;\n file?: S3Object | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId?: string | null;\n updatedByUserSessionId?: string | null;\n};\n\nexport type ModelTenantComplianceDocumentConditionInput = {\n tenantId?: ModelIDInput | null;\n documentName?: ModelStringInput | null;\n documentType?: ModelTenantComplianceDocumentTypeInput | null;\n documentNumber?: ModelStringInput | null;\n legalEntityName?: ModelStringInput | null;\n issuedBy?: ModelStringInput | null;\n issueDate?: ModelIntInput | null;\n expiryDate?: ModelIntInput | null;\n status?: ModelTenantComplianceDocumentStatusInput | null;\n notes?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelTenantComplianceDocumentConditionInput | null> | null;\n or?: Array<ModelTenantComplianceDocumentConditionInput | null> | null;\n not?: ModelTenantComplianceDocumentConditionInput | null;\n};\n\nexport type ModelTenantComplianceDocumentFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n documentName?: ModelStringInput | null;\n documentType?: ModelTenantComplianceDocumentTypeInput | null;\n documentNumber?: ModelStringInput | null;\n legalEntityName?: ModelStringInput | null;\n issuedBy?: ModelStringInput | null;\n issueDate?: ModelIntInput | null;\n expiryDate?: ModelIntInput | null;\n status?: ModelTenantComplianceDocumentStatusInput | null;\n notes?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelTenantComplianceDocumentFilterInput | null> | null;\n or?: Array<ModelTenantComplianceDocumentFilterInput | null> | null;\n not?: ModelTenantComplianceDocumentFilterInput | null;\n};\n\nexport type ModelTenantComplianceDocumentTypeInput = {\n eq?: TenantComplianceDocumentType | null;\n ne?: TenantComplianceDocumentType | null;\n};\n\nexport type ModelTenantComplianceDocumentStatusInput = {\n eq?: TenantComplianceDocumentStatus | null;\n ne?: TenantComplianceDocumentStatus | null;\n};\n","import { Language, ModelIDInput, ModelIntInput, ModelStringInput, PhoneNumber, S3Object } from './common.model';\n\nexport type User = {\n id: string;\n externalId?: string | null;\n tenantId: string;\n email: string;\n name?: string | null;\n image?: S3Object | null;\n phoneNumber?: PhoneNumber | null;\n preferences?: UserPreferences | null;\n notificationSettings?: UserNotificationSettings | null;\n type?: UserType | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UserNotificationSettings = {\n allowPush?: boolean | null;\n allowEmail?: boolean | null;\n allowSMS?: boolean | null;\n allowWhatsApp?: boolean | null;\n};\n\nexport type UserPreferences = {\n timezoneName?: string | null;\n language?: Language | null;\n};\n\nexport enum UserStatus {\n READY = 'READY',\n NOT_READY = 'NOT_READY',\n INVITED = 'INVITED',\n BUSY = 'BUSY',\n AFTER_CALL_WORK = 'AFTER_CALL_WORK',\n}\n\nexport enum UserType {\n AGENT = 'AGENT',\n SUPERVISOR = 'SUPERVISOR',\n ADMINISTRATOR = 'ADMINISTRATOR',\n}\n\nexport type CreateUserInput = {\n id?: string | null;\n externalId?: string | null;\n tenantId: string;\n email: string;\n name?: string | null;\n image?: S3Object | null;\n phoneNumber?: PhoneNumber | null;\n preferences?: UserPreferences | null;\n notificationSettings?: UserNotificationSettings | null;\n type?: UserType | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UpdateUserInput = {\n id: string;\n externalId?: string | null;\n tenantId?: string | null;\n email?: string | null;\n name?: string | null;\n image?: S3Object | null;\n phoneNumber?: PhoneNumber | null;\n preferences?: UserPreferences | null;\n notificationSettings?: UserNotificationSettings | null;\n type?: UserType | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId?: string | null;\n updatedByUserSessionId?: string | null;\n};\n\nexport type ModelUserConditionInput = {\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n email?: ModelStringInput | null;\n name?: ModelStringInput | null;\n type?: ModelUserTypeInput | null;\n activatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelUserConditionInput | null> | null;\n or?: Array<ModelUserConditionInput | null> | null;\n not?: ModelUserConditionInput | null;\n};\n\nexport type ModelUserFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n email?: ModelStringInput | null;\n name?: ModelStringInput | null;\n type?: ModelUserTypeInput | null;\n activatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelUserFilterInput | null> | null;\n or?: Array<ModelUserFilterInput | null> | null;\n not?: ModelUserFilterInput | null;\n};\n\nexport type ModelUserStatusInput = {\n eq?: UserStatus | null;\n ne?: UserStatus | null;\n};\n\nexport type ModelUserTypeInput = {\n eq?: UserType | null;\n ne?: UserType | null;\n};\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\nimport { Country, Language } from '../../models/dynamodb/common.model';\n\nexport const FIELDS_LANGUAGE = `\n code\n nameEn\n nameLocal\n`;\n\nexport const FIELDS_COUNTRY = `\n code\n nameEn\n nameLocal\n currency {\n code\n nameEn\n }\n officialLanguage {\n ${FIELDS_LANGUAGE}\n }\n callingCode\n region\n flag\n`;\n\nexport const FIELDS_PHONE_NUMBER = `\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CommonService {\n private countriesData!: Country[];\n private languagesData!: Language[];\n\n // private static readonly COUNTRY_ENDPOINT = `https://assets.snugdesk.com/metadata/countries.json`;\n private static readonly COUNTRY_ENDPOINT = `https://snugdesk-assets.s3.amazonaws.com/metadata/countries.json`;\n\n // private static readonly LANGUAGE_ENDPOINT = `https://assets.snugdesk.com/metadata/languages.json`;\n private static readonly LANGUAGE_ENDPOINT = `https://snugdesk-assets.s3.amazonaws.com/metadata/languages.json`;\n\n constructor(private httpClient: HttpClient) {}\n\n async getAllCountries(): Promise<Country[]> {\n if (!this.countriesData) {\n this.countriesData = await lastValueFrom(this.httpClient.get<Country[]>(CommonService.COUNTRY_ENDPOINT));\n this.countriesData.sort((a, b) => (a.nameEn ?? '').localeCompare(b.nameEn ?? ''));\n }\n return this.countriesData;\n }\n\n async getCountryFromCallingCode(countryCallingCode: string): Promise<Country | undefined> {\n const countries = await this.getAllCountries();\n return countries.find((country) => country.callingCode === countryCallingCode);\n }\n\n async getCountryFromCountryCode(countryCode: string): Promise<Country | undefined> {\n const countries = await this.getAllCountries();\n return countries.find((country) => country.code === countryCode);\n }\n\n async getAllLanguages(): Promise<Language[]> {\n if (!this.languagesData) {\n this.languagesData = await lastValueFrom(this.httpClient.get<Language[]>(CommonService.LANGUAGE_ENDPOINT));\n this.languagesData.sort((a, b) => (a.nameEn ?? '').localeCompare(b.nameEn ?? ''));\n }\n return this.languagesData;\n }\n\n async getLanguageFromLanguageCode(languageCode: string): Promise<Language | undefined> {\n const languages = await this.getAllLanguages();\n return languages?.find((language) => language.code === languageCode);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { List, ModelSortDirection, ModelStringKeyConditionInput, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport { Entity, EntityType, CreateEntityInput, UpdateEntityInput, ModelEntityConditionInput, ModelEntityFilterInput, ModelEntityTypeFilterInput } from '../../models/dynamodb/entity.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { Observable } from 'rxjs';\n\nexport const FIELDS_ENTITY_TYPE = `\n id\n externalId\n tenantId\n name\n description\n image {\n key\n bucket\n location\n }\n createdAt\n updatedAt\n deletedAt\n`;\n\n// Adds the custom-field definitions — only worth fetching when listing types, not\n// on every nested entityType read.\nexport const FIELDS_ENTITY_TYPE_EXPANDED = `\n ${FIELDS_ENTITY_TYPE}\n entityFields\n organizationFields\n`;\n\nexport const FIELDS_ENTITY = `\n id\n externalId\n tenantId\n entityTypeId\n entityType {\n ${FIELDS_ENTITY_TYPE}\n }\n parentId\n name\n image {\n key\n bucket\n location\n }\n email\n phoneNumber {\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n }\n phoneNumberE164\n isOrganization\n customFields\n metadata\n notes\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\n }\n }\n contactPreferences {\n allowCall\n allowEmail\n allowSMS\n allowWhatsApp\n }\n createdAt\n updatedAt\n blockedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_ENTITY_EXPANDED = `\n id\n externalId\n tenantId\n entityTypeId\n entityType {\n ${FIELDS_ENTITY_TYPE}\n }\n parentId\n parent {\n id\n externalId\n tenantId\n entityTypeId\n name\n image {\n key\n bucket\n location\n }\n isOrganization\n email\n phoneNumber {\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n }\n phoneNumberE164\n createdAt\n updatedAt\n blockedAt\n deletedAt\n }\n name\n image {\n key\n bucket\n location\n }\n isOrganization\n email\n phoneNumber {\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n }\n phoneNumberE164\n customFields\n metadata\n notes\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\n }\n }\n contactPreferences {\n allowCall\n allowEmail\n allowSMS\n allowWhatsApp\n }\n createdAt\n updatedAt\n blockedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_ENTITY_MINIMAL = `\n id\n externalId\n tenantId\n entityTypeId\n metadata\n name\n image {\n key\n bucket\n location\n }\n email\n phoneNumber {\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n }\n phoneNumberE164\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\n }\n }\n contactPreferences {\n allowCall\n allowEmail\n allowSMS\n allowWhatsApp\n }\n createdAt\n updatedAt\n blockedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\ntype __SubscriptionContainer = {\n OnEntityById: Entity;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EntityService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetEntity(id: string): Promise<Entity> {\n const statement = /* GraphQL */ `\n query GetEntity($id: ID!) {\n getEntity(id: $id) {\n ${FIELDS_ENTITY_EXPANDED}\n }\n }\n `;\n const response = await this.appSyncService.query<any>(statement, { id });\n return <Entity>response.data.getEntity;\n }\n\n async CreateEntity(input: CreateEntityInput, condition?: ModelEntityConditionInput): Promise<Entity> {\n const statement = /* GraphQL */ `\n mutation CreateEntity($input: CreateEntityInput!, $condition: ModelEntityConditionInput) {\n createEntity(input: $input, condition: $condition) {\n ${FIELDS_ENTITY_MINIMAL}\n }\n }\n `;\n const variables: { input: CreateEntityInput; condition?: ModelEntityConditionInput } = { input };\n if (condition) {\n variables.condition = condition;\n }\n const response = await this.appSyncService.query<any>(statement, variables);\n return <Entity>response.data.createEntity;\n }\n\n async UpdateEntity(input: UpdateEntityInput, condition?: ModelEntityConditionInput): Promise<Entity> {\n const statement = /* GraphQL */ `\n mutation UpdateEntity($input: UpdateEntityInput!, $condition: ModelEntityConditionInput) {\n updateEntity(input: $input, condition: $condition) {\n ${FIELDS_ENTITY_MINIMAL}\n }\n }\n `;\n const variables: { input: UpdateEntityInput; condition?: ModelEntityConditionInput } = { input };\n if (condition) {\n variables.condition = condition;\n }\n const response = await this.appSyncService.query<any>(statement, variables);\n return <Entity>response.data.updateEntity;\n }\n\n async ListEntitiesByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityFilterInput, limit?: number, nextToken?: string): Promise<List<Entity>> {\n const statement = `query ListEntitiesByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityFilterInput, $limit: Int, $nextToken: String) {\n listEntitiesByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Entity>>response.data.listEntitiesByTenantId;\n }\n\n async ListEntitiesByTenantIdAndExternalId(tenantId: string, externalId?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityFilterInput, limit?: number, nextToken?: string): Promise<List<Entity>> {\n const statement = `query ListEntitiesByTenantIdAndExternalId($tenantId: ID!, $externalId: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityFilterInput, $limit: Int, $nextToken: String) {\n listEntitiesByTenantIdAndExternalId(\n tenantId: $tenantId\n externalId: $externalId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (externalId) {\n gqlAPIServiceArguments.externalId = externalId;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Entity>>response.data.listEntitiesByTenantIdAndExternalId;\n }\n\n async ListEntitiesByTenantIdAndPhoneNumberE164(tenantId: string, phoneNumberE164?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityFilterInput, limit?: number, nextToken?: string): Promise<List<Entity>> {\n const statement = `query ListEntitiesByTenantIdAndPhoneNumberE164($tenantId: ID!, $phoneNumberE164: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityFilterInput, $limit: Int, $nextToken: String) {\n listEntitiesByTenantIdAndPhoneNumberE164(\n tenantId: $tenantId\n phoneNumberE164: $phoneNumberE164\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (phoneNumberE164) {\n gqlAPIServiceArguments.phoneNumberE164 = phoneNumberE164;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Entity>>response.data.listEntitiesByTenantIdAndPhoneNumberE164;\n }\n\n async ListEntityTypesByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityTypeFilterInput, limit?: number, nextToken?: string): Promise<List<EntityType>> {\n const statement = `query ListEntityTypesByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityTypeFilterInput, $limit: Int, $nextToken: String) {\n listEntityTypesByTenantId(tenantId: $tenantId, name: $name, sortDirection: $sortDirection, filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n ${FIELDS_ENTITY_TYPE_EXPANDED}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<EntityType>>response.data.listEntityTypesByTenantId;\n }\n\n OnEntityByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnEntityById'>>> {\n const statement = `subscription OnEntityById($id: ID!) {\n OnEntityById(id: $id) {\n ${FIELDS_ENTITY}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n id,\n };\n\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnEntityById'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, \"OnEntityById\">>>; */\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { List, ModelSortDirection, ModelStringKeyConditionInput } from '../../models/dynamodb/common.model';\nimport { CreateInteractionEndpointInput, InteractionEndpoint, ModelInteractionEndpointConditionInput, ModelInteractionEndpointFilterInput, UpdateInteractionEndpointInput } from '../../models/dynamodb/interaction-endpoint.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\n\nconst FIELDS_INTERACTION_ENDPOINT_PRICE_DETAILS = `\n currency\n upfrontCost\n monthlyCost\n inboundCost\n outboundCost\n`;\n\nconst FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION = `\n action\n audioMediaName\n audioUrl\n`;\n\nexport const FIELDS_INTERACTION_ENDPOINT_RECORDING_CONFIG = `\n mode\n notify\n audioMediaName\n audioUrl\n`;\n\nexport const FIELDS_INTERACTION_ENDPOINT_WORKING_HOURS_ACTION_CONFIG = `\n duringHours {\n ${FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION}\n }\n afterHours {\n ${FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION}\n }\n whenClosed {\n ${FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION}\n }\n`;\n\nexport const FIELDS_INTERACTION_ENDPOINT_ROUTING_CONFIG = `\n answeringRoles\n knownCallerStrategy\n unknownCallerStrategy\n ifNoPickup {\n ${FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION}\n }\n escalationRoles\n noAnswer {\n ${FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION}\n }\n`;\n\nexport const FIELDS_INTERACTION_ENDPOINT = `\n id\n externalId\n tenantId\n widgetId\n address\n configuration\n recordingConfig {\n ${FIELDS_INTERACTION_ENDPOINT_RECORDING_CONFIG}\n }\n workingHoursActionConfig {\n ${FIELDS_INTERACTION_ENDPOINT_WORKING_HOURS_ACTION_CONFIG}\n }\n routingConfig {\n ${FIELDS_INTERACTION_ENDPOINT_ROUTING_CONFIG}\n }\n # buyPrice is intentionally not selected here — it is our cost, not the tenant's price.\n sellPrice {\n ${FIELDS_INTERACTION_ENDPOINT_PRICE_DETAILS}\n }\n documents {\n fileName\n documentType\n contentType\n file {\n key\n bucket\n location\n }\n }\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_INTERACTION_ENDPOINT_MINIMAL = `\n id\n externalId\n tenantId\n widgetId\n address\n configuration\n createdAt\n updatedAt\n deletedAt\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InteractionEndpointService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetInteractionEndpoint(id: string): Promise<InteractionEndpoint> {\n const statement = `query GetInteractionEndpoint($id: ID!) {\n getInteractionEndpoint(id: $id) {\n ${FIELDS_INTERACTION_ENDPOINT}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n id,\n };\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionEndpoint>response.data.getInteractionEndpoint;\n }\n\n async CreateInteractionEndpoint(input: CreateInteractionEndpointInput, condition?: ModelInteractionEndpointConditionInput): Promise<InteractionEndpoint> {\n const statement = `mutation CreateInteractionEndpoint($input: CreateInteractionEndpointInput!, $condition: ModelInteractionEndpointConditionInput) {\n createInteractionEndpoint(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_ENDPOINT_MINIMAL}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n input,\n };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionEndpoint>response.data.createInteractionEndpoint;\n }\n\n async UpdateInteractionEndpoint(input: UpdateInteractionEndpointInput, condition?: ModelInteractionEndpointConditionInput): Promise<InteractionEndpoint> {\n const statement = `mutation UpdateInteractionEndpoint($input: UpdateInteractionEndpointInput!, $condition: ModelInteractionEndpointConditionInput) {\n updateInteractionEndpoint(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_ENDPOINT_MINIMAL}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n input,\n };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionEndpoint>response.data.updateInteractionEndpoint;\n }\n\n async ListInteractionEndpointsByTenantId(tenantId: string, address?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionEndpointFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionEndpoint>> {\n const statement = `query ListInteractionEndpointsByTenantId($tenantId: ID!, $address: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionEndpointFilterInput, $limit: Int, $nextToken: String) {\n listInteractionEndpointsByTenantId(\n tenantId: $tenantId\n address: $address\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_ENDPOINT}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (address) {\n gqlAPIServiceArguments.address = address;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionEndpoint>>response.data.listInteractionEndpointsByTenantId;\n }\n\n async ListInteractionEndpointsByWidgetId(widgetId: string, address?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionEndpointFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionEndpoint>> {\n const statement = `query ListInteractionEndpointsByWidgetId($widgetId: ID!, $address: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionEndpointFilterInput, $limit: Int, $nextToken: String) {\n listInteractionEndpointsByWidgetId(\n widgetId: $widgetId\n address: $address\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_ENDPOINT}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n widgetId,\n };\n if (address) {\n gqlAPIServiceArguments.address = address;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionEndpoint>>response.data.listInteractionEndpointsByWidgetId;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { List, ModelIntKeyConditionInput, ModelSortDirection, ModelStringKeyConditionInput } from '../../models/dynamodb/common.model';\nimport { InteractionWidget, InteractionWidgetUserSetting, ModelInteractionWidgetFilterInput, ModelInteractionWidgetUserSettingFilterInput } from '../../models/dynamodb/interaction-widget.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\n\nexport const FIELDS_INTERACTION_WIDGET = `\n id\n tenantId\n channel\n provider\n providerAccountId\n name\n description\n configuration\n isRecordingEnabledByDefault\n isRecordingEnabledOnDemand\n isTranscriptionEnabledByDefault\n isTranscriptionEnabledOnDemand\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_INTERACTION_WIDGET_SESSION = `\n id\n tenantId\n widgetId\n entityId\n ipDetails\n createdAt\n updatedAt\n`;\n\nexport const FIELDS_INTERACTION_WIDGET_USER_SETTING = `\n id\n widgetId\n userId\n configuration\n allowOverride\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InteractionWidgetService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetInteractionWidget(id: string): Promise<InteractionWidget> {\n const statement = `query GetInteractionWidget($id: ID!) {\n getInteractionWidget(id: $id) {\n ${FIELDS_INTERACTION_WIDGET}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionWidget>response.data.getInteractionWidget;\n }\n\n async ListInteractionWidgetsByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionWidgetFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionWidget>> {\n const statement = `query ListInteractionWidgetsByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionWidgetFilterInput, $limit: Int, $nextToken: String) {\n listInteractionWidgetsByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_WIDGET}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionWidget>>response.data.listInteractionWidgetsByTenantId;\n }\n\n async ListInteractionWidgetUserSettingsByUserId(userId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionWidgetUserSettingFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionWidgetUserSetting>> {\n const statement = `query ListInteractionWidgetUserSettingsByUserId($userId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionWidgetUserSettingFilterInput, $limit: Int, $nextToken: String) {\n listInteractionWidgetUserSettingsByUserId(\n userId: $userId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_WIDGET_USER_SETTING}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = { userId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionWidgetUserSetting>>response.data.listInteractionWidgetUserSettingsByUserId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { List, ModelSortDirection, ModelStringKeyConditionInput, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport { CreateUserInput, ModelUserConditionInput, ModelUserFilterInput, UpdateUserInput, User } from '../../models/dynamodb/user.model';\nimport { FIELDS_LANGUAGE, FIELDS_PHONE_NUMBER } from './common.service';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\n\nexport const FIELDS_USER = `\n id\n externalId\n tenantId\n email\n name\n image {\n key\n bucket\n location\n }\n phoneNumber {\n ${FIELDS_PHONE_NUMBER}\n }\n preferences {\n timezoneName\n language {\n ${FIELDS_LANGUAGE}\n }\n }\n notificationSettings {\n allowPush\n allowEmail\n allowSMS\n allowWhatsApp\n }\n type\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\ntype __SubscriptionContainer = {\n OnUserById: User;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetUser(id: string): Promise<User> {\n const statement = `query GetUser($id: ID!) {\n getUser(id: $id) {\n ${FIELDS_USER}\n }\n }`;\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <User>response.data.getUser;\n }\n\n async CreateUser(input: CreateUserInput, condition?: ModelUserConditionInput): Promise<User> {\n const statement = `mutation CreateUser($input: CreateUserInput!, $condition: ModelUserConditionInput) {\n createUser(input: $input, condition: $condition) {\n ${FIELDS_USER}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <User>response.data.createUser;\n }\n\n async UpdateUser(input: UpdateUserInput, condition?: ModelUserConditionInput): Promise<User> {\n const statement = `mutation UpdateUser($input: UpdateUserInput!, $condition: ModelUserConditionInput) {\n updateUser(input: $input, condition: $condition) {\n ${FIELDS_USER}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <User>response.data.updateUser;\n }\n\n async ListUsersByTenantIdAndEmail(tenantId: string, email?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelUserFilterInput, limit?: number, nextToken?: string): Promise<List<User>> {\n const statement = `query ListUsersByTenantIdAndEmail($tenantId: ID!, $email: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelUserFilterInput, $limit: Int, $nextToken: String) {\n listUsersByTenantIdAndEmail(\n tenantId: $tenantId\n email: $email\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_USER}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (email) {\n gqlAPIServiceArguments.email = email;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<User>>response.data.listUsersByTenantIdAndEmail;\n }\n\n async ListUsersByTenantIdAndExternalId(tenantId: string, externalId?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelUserFilterInput, limit?: number, nextToken?: string): Promise<List<User>> {\n const statement = `query ListUsersByTenantIdAndExternalId($tenantId: ID!, $externalId: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelUserFilterInput, $limit: Int, $nextToken: String) {\n listUsersByTenantIdAndExternalId(\n tenantId: $tenantId\n externalId: $externalId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_USER}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (externalId) {\n gqlAPIServiceArguments.externalId = externalId;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<User>>response.data.listUsersByTenantIdAndExternalId;\n }\n\n async ListUsersByTenantIdAndName(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelUserFilterInput, limit?: number, nextToken?: string): Promise<List<User>> {\n const statement = `query ListUsersByTenantIdAndName($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelUserFilterInput, $limit: Int, $nextToken: String) {\n listUsersByTenantIdAndName(tenantId: $tenantId, name: $name, sortDirection: $sortDirection, filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n ${FIELDS_USER}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<User>>response.data.listUsersByTenantIdAndName;\n }\n\n OnUserByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserById'>>> {\n const statement = `subscription OnUserById($id: ID!) {\n OnUserById(id: $id) {\n ${FIELDS_USER}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserById'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, \"OnUserById\">>>; */\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { CreateTeamMemberInput, ModelTeamMemberConditionInput, ModelTeamMemberFilterInput, Team, TeamMember, UpdateTeamMemberInput } from '../../models/dynamodb/team.model';\nimport { List, ModelIntKeyConditionInput, ModelSortDirection } from '../../models/dynamodb/common.model';\n\nimport { FIELDS_USER } from './user.service';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\n\nexport const FIELDS_TEAM = `\n id\n tenantId\n name\n description\n image {\n key\n bucket\n location\n }\n ticketFields\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_TEAM_MEMBER = `\n id\n teamId\n team {\n ${FIELDS_TEAM}\n }\n userId\n user {\n ${FIELDS_USER}\n }\n isManager\n createdAt\n updatedAt\n deletedAt\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TeamService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetTeam(id: string): Promise<Team> {\n const statement = `query GetTeam($id: ID!) {\n getTeam(id: $id) {\n ${FIELDS_TEAM}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Team>response.data.getTeam;\n }\n\n async CreateTeamMember(input: CreateTeamMemberInput, condition?: ModelTeamMemberConditionInput): Promise<TeamMember> {\n const statement = `mutation CreateTeamMember($input: CreateTeamMemberInput!, $condition: ModelTeamMemberConditionInput) {\n createTeamMember(input: $input, condition: $condition) {\n ${FIELDS_TEAM_MEMBER}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <TeamMember>response.data.createTeamMember;\n }\n\n async UpdateTeamMember(input: UpdateTeamMemberInput, condition?: ModelTeamMemberConditionInput): Promise<TeamMember> {\n const statement = `mutation UpdateTeamMember($input: UpdateTeamMemberInput!, $condition: ModelTeamMemberConditionInput) {\n updateTeamMember(input: $input, condition: $condition) {\n ${FIELDS_TEAM_MEMBER}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <TeamMember>response.data.updateTeamMember;\n }\n\n async ListTeamMembershipsByUserId(userId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTeamMemberFilterInput, limit?: number, nextToken?: string): Promise<List<TeamMember>> {\n const statement = `query ListTeamMembershipsByUserId($userId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTeamMemberFilterInput, $limit: Int, $nextToken: String) {\n listTeamMembershipsByUserId(\n userId: $userId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TEAM_MEMBER}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n userId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<TeamMember>>response.data.listTeamMembershipsByUserId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { List, ModelIDKeyConditionInput, ModelIntKeyConditionInput, ModelSortDirection, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport {\n CreateInteractionAttendeeInput,\n CreateInteractionInput,\n CreateInteractionMessageAttachmentInput,\n CreateInteractionMessageInput,\n Interaction,\n InteractionAttendee,\n InteractionInvitee,\n InteractionMessage,\n InteractionMessageAttachment,\n ModelInteractionAttendeeConditionInput,\n ModelInteractionAttendeeFilterInput,\n ModelInteractionConditionInput,\n ModelInteractionFilterInput,\n ModelInteractionInviteeFilterInput,\n ModelInteractionMessageAttachmentConditionInput,\n ModelInteractionMessageAttachmentFilterInput,\n ModelInteractionMessageConditionInput,\n ModelInteractionMessageFilterInput,\n UpdateInteractionAttendeeInput,\n UpdateInteractionInput,\n} from '../../models/dynamodb/interaction.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { FIELDS_ENTITY, FIELDS_ENTITY_MINIMAL } from './entity.service';\nimport { FIELDS_INTERACTION_ENDPOINT_MINIMAL } from './interaction-endpoint.service';\nimport { FIELDS_INTERACTION_WIDGET } from './interaction-widget.service';\nimport { FIELDS_TEAM } from './team.service';\nimport { FIELDS_USER } from './user.service';\n\ntype __SubscriptionContainer = {\n OnInteractionById: Interaction;\n OnInteractionByEntityId: Interaction;\n OnInteractionInviteeByInteractionId: InteractionInvitee;\n OnInteractionInviteeByUserId: InteractionInvitee;\n OnInteractionAttendeeByInteractionId: InteractionAttendee;\n OnInteractionMessageByInteractionId: InteractionMessage;\n OnInteractionMessageByEntityConversationId: InteractionMessage;\n};\n\nexport const FIELDS_INTERACTION_HOST = `\n id\n interactionId\n entityId\n teamId\n userId\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_MINIMAL = `\n id\n tenantId\n widgetId\n endpointId\n entityConversationId\n entityId\n teamId\n hostId\n providerInteractionId\n channel\n provider\n context\n direction\n status\n last_status\n subject\n metadata\n notes\n summary\n transcription {\n key\n bucket\n location\n }\n recording {\n key\n bucket\n location\n }\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n startedAt\n completedAt\n duration\n aiProcessingStatus\n aiProcessingCompletedAt\n postProcessingStatus\n postProcessingCompletedAt\n reportProcessingStatus\n reportProcessingCompletedAt\n temp_isLocked\n temp_isAvailableTenantIdUnion\n campaignId\n flowVersion\n currentCampaignFlowNodeId\n flowVariables\n flowStatus\n flowRetryCount\n flowReminderIndex\n flowTimeoutAt\n flowTimerScheduleArn\n isAgentHandling\n assignedAgentId\n agentHandlingStartedAt\n agentHandlingEndedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION = `\n id\n tenantId\n widgetId\n endpointId\n entityConversationId\n entityId\n teamId\n hostId\n host {\n ${FIELDS_INTERACTION_HOST}\n }\n providerInteractionId\n channel\n provider\n context\n direction\n status\n last_status\n subject\n metadata\n notes\n summary\n transcription {\n key\n bucket\n location\n }\n recording {\n key\n bucket\n location\n }\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n startedAt\n completedAt\n duration\n aiProcessingStatus\n aiProcessingCompletedAt\n postProcessingStatus\n postProcessingCompletedAt\n reportProcessingStatus\n reportProcessingCompletedAt\n temp_isLocked\n temp_isAvailableTenantIdUnion\n campaignId\n flowVersion\n currentCampaignFlowNodeId\n flowVariables\n flowStatus\n flowRetryCount\n flowReminderIndex\n flowTimeoutAt\n flowTimerScheduleArn\n isAgentHandling\n assignedAgentId\n agentHandlingStartedAt\n agentHandlingEndedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_EXPANDED = `\n id\n tenantId\n widgetId\n widget {\n ${FIELDS_INTERACTION_WIDGET}\n }\n endpointId\n endpoint {\n ${FIELDS_INTERACTION_ENDPOINT_MINIMAL}\n }\n entityConversationId\n entityConversation {\n id\n tenantId\n entityId\n entityAddress\n interactionChannel\n interactionProvider\n isCampaignEngaged\n campaignId\n lastCampaignFlowNodeId\n lastInteractionMessageId\n metadata\n lastActivityAt\n lastMessageAt\n archivedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n }\n entityId\n entity {\n ${FIELDS_ENTITY}\n }\n teamId\n team {\n ${FIELDS_TEAM}\n }\n hostId\n host {\n ${FIELDS_INTERACTION_HOST}\n }\n providerInteractionId\n channel\n provider\n context\n direction\n status\n last_status\n subject\n metadata\n notes\n summary\n transcription {\n key\n bucket\n location\n }\n recording {\n key\n bucket\n location\n }\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n startedAt\n completedAt\n duration\n aiProcessingStatus\n aiProcessingCompletedAt\n postProcessingStatus\n postProcessingCompletedAt\n reportProcessingStatus\n reportProcessingCompletedAt\n temp_isLocked\n temp_isAvailableTenantIdUnion\n campaignId\n flowVersion\n currentCampaignFlowNodeId\n flowVariables\n flowStatus\n flowRetryCount\n flowReminderIndex\n flowTimeoutAt\n flowTimerScheduleArn\n isAgentHandling\n assignedAgentId\n agentHandlingStartedAt\n agentHandlingEndedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_INVITEE = `\n id\n interactionId\n interaction {\n ${FIELDS_INTERACTION}\n }\n entityId\n entity {\n ${FIELDS_ENTITY_MINIMAL}\n }\n teamId\n userId\n isAdministrator\n temp_expiringAt\n expiredAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_ATTENDEE = `\n id\n interactionId\n entityId\n interactionWidgetSessionId\n teamId\n userId\n userSessionId\n name\n metadata\n customFields\n isAdministrator\n joinedAt\n exitedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_ATTENDEE_EXPANDED = `\n id\n interactionId\n entityId\n entity {\n ${FIELDS_ENTITY}\n }\n interactionWidgetSessionId\n teamId\n team {\n ${FIELDS_TEAM}\n }\n userId\n user {\n ${FIELDS_USER}\n }\n userSessionId\n name\n metadata\n customFields\n isAdministrator\n joinedAt\n exitedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_MESSAGE_ATTACHMENT = `\n id\n externalId\n interactionId\n interactionMessageId\n name\n size\n type\n file {\n key\n bucket\n location\n }\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_MESSAGE = `\n id\n externalId\n endpointId\n campaignId\n campaignFlowNodeId\n entityConversationId\n interactionId\n interactionAttendeeId\n body\n metadata\n referenceMessageId\n direction\n status\n statusUpdatedAt\n createdAt\n updatedAt\n deletedAt\n messageAttachments {\n items {\n ${FIELDS_INTERACTION_MESSAGE_ATTACHMENT}\n }\n nextToken\n }\n`;\n\nexport const FIELDS_INTERACTION_MESSAGE_EXPANDED = `\n id\n externalId\n endpointId\n endpoint {\n ${FIELDS_INTERACTION_ENDPOINT_MINIMAL}\n }\n campaignId\n campaignFlowNodeId\n entityConversationId\n interactionId\n interactionAttendeeId\n interactionAttendee {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n body\n metadata\n referenceMessageId\n direction\n status\n statusUpdatedAt\n createdAt\n updatedAt\n deletedAt\n messageAttachments {\n items {\n ${FIELDS_INTERACTION_MESSAGE_ATTACHMENT}\n }\n nextToken\n }\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InteractionService {\n public newInteractionInviteObservable$: BehaviorSubject<any> = new BehaviorSubject<any>(undefined);\n\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetInteraction(id: string): Promise<Interaction> {\n const statement = `query GetInteraction($id: ID!) {\n getInteraction(id: $id) {\n ${FIELDS_INTERACTION_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Interaction>response.data.getInteraction;\n }\n\n async GetInteractionAttendee(id: string): Promise<InteractionAttendee> {\n const statement = `query GetInteractionAttendee($id: ID!) {\n getInteractionAttendee(id: $id) {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionAttendee>response.data.getInteractionAttendee;\n }\n\n async GetInteractionMessage(id: string): Promise<InteractionMessage> {\n const statement = `query GetInteractionMessage($id: ID!) {\n getInteractionMessage(id: $id) {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n id,\n };\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionMessage>response.data.getInteractionMessage;\n }\n\n async CreateInteraction(input: CreateInteractionInput, condition?: ModelInteractionConditionInput): Promise<Interaction> {\n const statement = `mutation CreateInteraction($input: CreateInteractionInput!, $condition: ModelInteractionConditionInput) {\n createInteraction(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Interaction>response.data.createInteraction;\n }\n\n async UpdateInteraction(input: UpdateInteractionInput, condition?: ModelInteractionConditionInput): Promise<Interaction> {\n const statement = `mutation UpdateInteraction($input: UpdateInteractionInput!, $condition: ModelInteractionConditionInput) {\n updateInteraction(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Interaction>response.data.updateInteraction;\n }\n\n async CreateInteractionAttendee(input: CreateInteractionAttendeeInput, condition?: ModelInteractionAttendeeConditionInput): Promise<InteractionAttendee> {\n const statement = `mutation CreateInteractionAttendee($input: CreateInteractionAttendeeInput!, $condition: ModelInteractionAttendeeConditionInput) {\n createInteractionAttendee(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionAttendee>response.data.createInteractionAttendee;\n }\n\n async UpdateInteractionAttendee(input: UpdateInteractionAttendeeInput, condition?: ModelInteractionAttendeeConditionInput): Promise<InteractionAttendee> {\n const statement = `mutation UpdateInteractionAttendee($input: UpdateInteractionAttendeeInput!, $condition: ModelInteractionAttendeeConditionInput) {\n updateInteractionAttendee(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionAttendee>response.data.updateInteractionAttendee;\n }\n\n async CreateInteractionMessage(input: CreateInteractionMessageInput, condition?: ModelInteractionMessageConditionInput): Promise<InteractionMessage> {\n const statement = `mutation CreateInteractionMessage($input: CreateInteractionMessageInput!, $condition: ModelInteractionMessageConditionInput) {\n createInteractionMessage(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_MESSAGE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionMessage>response.data.createInteractionMessage;\n }\n\n async CreateInteractionMessageAttachment(input: CreateInteractionMessageAttachmentInput, condition?: ModelInteractionMessageAttachmentConditionInput): Promise<InteractionMessageAttachment> {\n const statement = `mutation CreateInteractionMessageAttachment($input: CreateInteractionMessageAttachmentInput!, $condition: ModelInteractionMessageAttachmentConditionInput) {\n createInteractionMessageAttachment(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_MESSAGE_ATTACHMENT}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionMessageAttachment>response.data.createInteractionMessageAttachment;\n }\n\n async ListInteractionsByTenantId(tenantId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionFilterInput, limit?: number, nextToken?: string): Promise<List<Interaction>> {\n const statement = `query ListInteractionsByTenantId($tenantId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionFilterInput, $limit: Int, $nextToken: String) {\n listInteractionsByTenantId(\n tenantId: $tenantId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Interaction>>response.data.listInteractionsByTenantId;\n }\n\n async ListInteractionsByEntityId(entityId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionFilterInput, limit?: number, nextToken?: string): Promise<List<Interaction>> {\n const statement = `query ListInteractionsByEntityId($entityId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionFilterInput, $limit: Int, $nextToken: String) {\n listInteractionsByEntityId(\n entityId: $entityId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n entityId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Interaction>>response.data.listInteractionsByEntityId;\n }\n\n async ListInteractionsByEntityConversationId(entityConversationId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionFilterInput, limit?: number, nextToken?: string): Promise<List<Interaction>> {\n const statement = `query ListInteractionsByEntityConversationId($entityConversationId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionFilterInput, $limit: Int, $nextToken: String) {\n listInteractionsByEntityConversationId(\n entityConversationId: $entityConversationId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n entityConversationId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Interaction>>response.data.listInteractionsByEntityConversationId;\n }\n\n async ListInteractionInviteesByUserId(userId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionInviteeFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionInvitee>> {\n const statement = `query ListInteractionInviteesByUserId($userId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionInviteeFilterInput, $limit: Int, $nextToken: String) {\n listInteractionInviteesByUserId(\n userId: $userId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_INVITEE}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { userId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionInvitee>>response.data.listInteractionInviteesByUserId;\n }\n\n async ListInteractionAttendeesByInteractionId(interactionId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionAttendeeFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionAttendee>> {\n const statement = `query ListInteractionAttendeesByInteractionId($interactionId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionAttendeeFilterInput, $limit: Int, $nextToken: String) {\n listInteractionAttendeesByInteractionId(\n interactionId: $interactionId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionAttendee>>response.data.listInteractionAttendeesByInteractionId;\n }\n\n async ListInteractionAttendeesByInteractionIdAndEntityId(interactionId: string, entityId?: ModelIDKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionAttendeeFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionAttendee>> {\n const statement = `query ListInteractionAttendeesByInteractionIdAndEntityId($interactionId: ID!, $entityId: ModelIDKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionAttendeeFilterInput, $limit: Int, $nextToken: String) {\n listInteractionAttendeesByInteractionIdAndEntityId(\n interactionId: $interactionId\n entityId: $entityId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n if (entityId) {\n gqlAPIServiceArguments.entityId = entityId;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionAttendee>>response.data.listInteractionAttendeesByInteractionIdAndEntityId;\n }\n\n async ListInteractionAttendeesByInteractionIdAndUserId(interactionId: string, userId?: ModelIDKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionAttendeeFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionAttendee>> {\n const statement = `query ListInteractionAttendeesByInteractionIdAndUserId($interactionId: ID!, $userId: ModelIDKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionAttendeeFilterInput, $limit: Int, $nextToken: String) {\n listInteractionAttendeesByInteractionIdAndUserId(\n interactionId: $interactionId\n userId: $userId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n if (userId) {\n gqlAPIServiceArguments.userId = userId;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionAttendee>>response.data.listInteractionAttendeesByInteractionIdAndUserId;\n }\n\n async ListInteractionMessagesByInteractionId(interactionId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionMessageFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionMessage>> {\n const statement = `query ListInteractionMessagesByInteractionId($interactionId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessagesByInteractionId(\n interactionId: $interactionId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionMessage>>response.data.listInteractionMessagesByInteractionId;\n }\n\n async ListInteractionMessagesByEntityConversationId(entityConversationId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionMessageFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionMessage>> {\n const statement = `query ListInteractionMessagesByEntityConversationId($entityConversationId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessagesByEntityConversationId(\n entityConversationId: $entityConversationId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { entityConversationId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionMessage>>response.data.listInteractionMessagesByEntityConversationId;\n }\n\n // The externalId index carries no sort key, so this query takes no key condition.\n async ListInteractionMessagesByExternalId(externalId: string, sortDirection?: ModelSortDirection, filter?: ModelInteractionMessageFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionMessage>> {\n const statement = `query ListInteractionMessagesByExternalId($externalId: String!, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessagesByExternalId(\n externalId: $externalId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { externalId };\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionMessage>>response.data.listInteractionMessagesByExternalId;\n }\n\n async ListInteractionMessagesByInteractionAttendeeId(interactionAttendeeId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionMessageFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionMessage>> {\n const statement = `query ListInteractionMessagesByInteractionAttendeeId($interactionAttendeeId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessagesByInteractionAttendeeId(\n interactionAttendeeId: $interactionAttendeeId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionAttendeeId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionMessage>>response.data.listInteractionMessagesByInteractionAttendeeId;\n }\n\n async ListInteractionMessageAttachmentsByInteractionMessageId(\n interactionMessageId: string,\n createdAt?: ModelIntKeyConditionInput,\n sortDirection?: ModelSortDirection,\n filter?: ModelInteractionMessageAttachmentFilterInput,\n limit?: number,\n nextToken?: string,\n ): Promise<List<InteractionMessageAttachment>> {\n const statement = `query ListInteractionMessageAttachmentsByInteractionMessageId($interactionMessageId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageAttachmentFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessageAttachmentsByInteractionMessageId(\n interactionMessageId: $interactionMessageId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_ATTACHMENT}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n interactionMessageId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionMessageAttachment>>response.data.listInteractionMessageAttachmentsByInteractionMessageId;\n }\n\n OnInteractionByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionById'>>> {\n const statement = `subscription OnInteractionById($id: ID!) {\n OnInteractionById(id: $id) {\n ${FIELDS_INTERACTION}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionById'>>>(statement, gqlAPIServiceArguments) as any;\n }\n\n OnInteractionInviteeByInteractionIdListener(interactionId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionInviteeByInteractionId'>>> {\n const statement = `subscription OnInteractionInviteeByInteractionId($interactionId: ID!) {\n OnInteractionInviteeByInteractionId(interactionId: $interactionId) {\n ${FIELDS_INTERACTION_INVITEE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionInviteeByInteractionId'>>>(statement, gqlAPIServiceArguments) as any;\n }\n\n OnInteractionAttendeeByInteractionIdListener(interactionId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionAttendeeByInteractionId'>>> {\n const statement = `subscription OnInteractionAttendeeByInteractionId($interactionId: ID!) {\n OnInteractionAttendeeByInteractionId(interactionId: $interactionId) {\n ${FIELDS_INTERACTION_ATTENDEE_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionAttendeeByInteractionId'>>>(statement, gqlAPIServiceArguments) as any;\n }\n\n OnInteractionMessageByInteractionIdListener(interactionId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionMessageByInteractionId'>>> {\n const statement = `subscription OnInteractionMessageByInteractionId($interactionId: ID!) {\n OnInteractionMessageByInteractionId(interactionId: $interactionId) {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionMessageByInteractionId'>>>(statement, gqlAPIServiceArguments) as any;\n }\n\n OnInteractionByEntityIdListener(entityId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionByEntityId'>>> {\n const statement = `subscription OnInteractionByEntityId($entityId: ID!) {\n OnInteractionByEntityId(entityId: $entityId) {\n ${FIELDS_INTERACTION}\n }\n }`;\n const gqlAPIServiceArguments: any = { entityId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionByEntityId'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionByEntityId'>>>; */\n }\n\n OnInteractionInviteeByUserIdListener(userId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionInviteeByUserId'>>> {\n const statement = `subscription OnInteractionInviteeByUserId($userId: ID!) {\n OnInteractionInviteeByUserId(userId: $userId) {\n ${FIELDS_INTERACTION_INVITEE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { userId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionInviteeByUserId'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, \"OnInteractionInviteeByUserId\">>>; */\n }\n\n OnInteractionMessageByEntityConversationIdListener(entityConversationId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionMessageByEntityConversationId'>>> {\n const statement = `subscription OnInteractionMessageByEntityConversationId($entityConversationId: ID!) {\n OnInteractionMessageByEntityConversationId(\n entityConversationId: $entityConversationId\n ) {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { entityConversationId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionMessageByEntityConversationId'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionMessageByEntityConversationId'>>>; */\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { List, ModelIntKeyConditionInput, ModelSortDirection, ModelStringKeyConditionInput, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport { CreateEntityConversationInput, EntityConversation, ModelEntityConversationConditionInput, ModelEntityConversationFilterInput, UpdateEntityConversationInput } from '../../models/dynamodb/entity-conversation.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { FIELDS_ENTITY } from './entity.service';\nimport { FIELDS_INTERACTION, FIELDS_INTERACTION_MESSAGE } from './interaction.service';\n\ntype __SubscriptionContainer = {\n OnEntityConversationByTenantId: EntityConversation;\n};\n\nexport const FIELDS_ENTITY_CONVERSATION = `\n id\n tenantId\n entityId\n entity {\n ${FIELDS_ENTITY}\n }\n entityAddress\n interactionWidgetId\n interactionChannel\n interactionProvider\n isCampaignEngaged\n campaignId\n lastCampaignFlowNodeId\n lastInteractionMessageId\n metadata\n lastActivityAt\n lastMessageAt\n archivedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_ENTITY_CONVERSATION_MINIMAL = `\n id\n tenantId\n entityId\n entityAddress\n interactionWidgetId\n interactionChannel\n interactionProvider\n isCampaignEngaged\n campaignId\n lastCampaignFlowNodeId\n lastInteractionMessageId\n metadata\n lastActivityAt\n lastMessageAt\n archivedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_ENTITY_CONVERSATION_EXPANDED = `\n id\n tenantId\n entityId\n entity {\n ${FIELDS_ENTITY}\n }\n entityAddress\n interactionWidgetId\n interactionChannel\n interactionProvider\n isCampaignEngaged\n campaignId\n lastCampaignFlowNodeId\n lastInteractionMessageId\n metadata\n lastActivityAt\n lastMessageAt\n archivedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n interactions (limit: 1, sortDirection: ${ModelSortDirection.DESC}) {\n items {\n ${FIELDS_INTERACTION}\n }\n nextToken\n }\n messages (limit: 1, sortDirection: ${ModelSortDirection.DESC}) {\n items {\n ${FIELDS_INTERACTION_MESSAGE}\n }\n nextToken\n }\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EntityConversationService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetEntityConversation(id: string): Promise<EntityConversation> {\n const statement = `query GetEntityConversation($id: ID!) {\n getEntityConversation(id: $id) {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <EntityConversation>response.data.getEntityConversation;\n }\n\n async CreateEntityConversation(input: CreateEntityConversationInput, condition?: ModelEntityConversationConditionInput): Promise<EntityConversation> {\n const statement = `mutation CreateEntityConversation($input: CreateEntityConversationInput!, $condition: ModelEntityConversationConditionInput) {\n createEntityConversation(input: $input, condition: $condition) {\n ${FIELDS_ENTITY_CONVERSATION_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <EntityConversation>response.data.createEntityConversation;\n }\n\n async UpdateEntityConversation(input: UpdateEntityConversationInput, condition?: ModelEntityConversationConditionInput): Promise<EntityConversation> {\n const statement = `mutation UpdateEntityConversation($input: UpdateEntityConversationInput!, $condition: ModelEntityConversationConditionInput) {\n updateEntityConversation(input: $input, condition: $condition) {\n ${FIELDS_ENTITY_CONVERSATION_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <EntityConversation>response.data.updateEntityConversation;\n }\n\n async ListEntityConversationsByEntityId(entityId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityConversationFilterInput, limit?: number, nextToken?: string): Promise<List<EntityConversation>> {\n const statement = `query ListEntityConversationsByEntityId($entityId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityConversationFilterInput, $limit: Int, $nextToken: String) {\n listEntityConversationsByEntityId(\n entityId: $entityId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n entityId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<EntityConversation>>response.data.listEntityConversationsByEntityId;\n }\n\n async ListEntityConversationsByTenantIdAndEntityAddress(tenantId: string, entityAddress?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityConversationFilterInput, limit?: number, nextToken?: string): Promise<List<EntityConversation>> {\n const statement = `query ListEntityConversationsByTenantIdAndEntityAddress($tenantId: ID!, $entityAddress: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityConversationFilterInput, $limit: Int, $nextToken: String) {\n listEntityConversationsByTenantIdAndEntityAddress(\n tenantId: $tenantId\n entityAddress: $entityAddress\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n if (entityAddress) {\n gqlAPIServiceArguments.entityAddress = entityAddress;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<EntityConversation>>response.data.listEntityConversationsByTenantIdAndEntityAddress;\n }\n\n async ListEntityConversationsByTenantIdAndArchivedAt(tenantId: string, archivedAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityConversationFilterInput, limit?: number, nextToken?: string): Promise<List<EntityConversation>> {\n const statement = `query ListEntityConversationsByTenantIdAndArchivedAt($tenantId: ID!, $archivedAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityConversationFilterInput, $limit: Int, $nextToken: String) {\n listEntityConversationsByTenantIdAndArchivedAt(\n tenantId: $tenantId\n archivedAt: $archivedAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n if (archivedAt) {\n gqlAPIServiceArguments.archivedAt = archivedAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<EntityConversation>>response.data.listEntityConversationsByTenantIdAndArchivedAt;\n }\n\n async ListEntityConversationsByTenantIdAndLastMessageAt(tenantId: string, lastMessageAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityConversationFilterInput, limit?: number, nextToken?: string): Promise<List<EntityConversation>> {\n const statement = `query ListEntityConversationsByTenantIdAndLastMessageAt($tenantId: ID!, $lastMessageAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityConversationFilterInput, $limit: Int, $nextToken: String) {\n listEntityConversationsByTenantIdAndLastMessageAt(\n tenantId: $tenantId\n lastMessageAt: $lastMessageAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n if (lastMessageAt) {\n gqlAPIServiceArguments.lastMessageAt = lastMessageAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<EntityConversation>>response.data.listEntityConversationsByTenantIdAndLastMessageAt;\n }\n\n OnEntityConversationByTenantIdListener(tenantId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnEntityConversationByTenantId'>>> {\n const statement = `subscription OnEntityConversationByTenantId($tenantId: ID!) {\n OnEntityConversationByTenantId(tenantId: $tenantId) {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnEntityConversationByTenantId'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnEntityConversationByTenantId'>>> */\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { List, ModelIntKeyConditionInput, ModelSortDirection, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport {\n CreateTenantComplianceDocumentInput,\n CreateTenantInput,\n ModelTenantComplianceDocumentConditionInput,\n ModelTenantComplianceDocumentFilterInput,\n ModelTenantConditionInput,\n Tenant,\n TenantComplianceDocument,\n UpdateTenantComplianceDocumentInput,\n UpdateTenantInput,\n} from '../../models/dynamodb/tenant.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { FIELDS_COUNTRY, FIELDS_LANGUAGE, FIELDS_PHONE_NUMBER } from './common.service';\n\nexport const FIELDS_TENANT_PREFERENCES = `\n timezoneName\n language {\n ${FIELDS_LANGUAGE}\n }\n allowUserToChangePreferences\n brandColor\n workingHours {\n timezone\n days {\n day\n open\n start\n end\n }\n }\n availabilityConfig {\n customStatuses {\n key\n name\n colour\n available\n }\n allowDialUnsavedNumber\n acwTime\n ringtone\n }\n recordingExcludedUserIds\n`;\n\nexport const FIELDS_TENANT_PROFILE = `\n businessType\n industry\n teamSize\n goals\n`;\n\nexport const FIELDS_TENANT_ONBOARDING = `\n status\n currentStep\n completedSteps\n startedAt\n completedAt\n`;\n\nexport const FIELDS_TENANT = `\n id\n externalId\n externalCrmProvider\n tenantDomain\n organizationName\n websiteURL\n image {\n key\n bucket\n location\n }\n preferences {\n ${FIELDS_TENANT_PREFERENCES}\n }\n security {\n domainValidationTokenExpiry\n userValidationTokenExpiry\n secretTokenExpiry\n sessionTokenExpiry\n sessionIdleTimeout\n }\n profile {\n ${FIELDS_TENANT_PROFILE}\n }\n onboarding {\n ${FIELDS_TENANT_ONBOARDING}\n }\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_TENANT_MINIMAL = `\n id\n externalId\n externalCrmProvider\n tenantDomain\n organizationName\n websiteURL\n image {\n key\n bucket\n location\n }\n preferences {\n ${FIELDS_TENANT_PREFERENCES}\n }\n onboarding {\n ${FIELDS_TENANT_ONBOARDING}\n }\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_TENANT_EXPANDED = `\n id\n externalId\n externalCrmProvider\n tenantDomain\n organizationName\n websiteURL\n image {\n key\n bucket\n location\n }\n billingInformation {\n companyName\n address\n state\n city\n postalCode\n country {\n ${FIELDS_COUNTRY}\n }\n companyIdentificationNumber\n taxIdentificationNumber\n billingEmail\n website\n }\n contactInformation {\n name\n email\n phoneNumber {\n ${FIELDS_PHONE_NUMBER}\n }\n address\n state\n city\n postalCode\n country {\n ${FIELDS_COUNTRY}\n }\n }\n preferences {\n ${FIELDS_TENANT_PREFERENCES}\n }\n ssoConfiguration {\n provider\n protocol\n displayName\n configuration\n isEnabled\n isDefaultLoginMode\n }\n security {\n domainValidationTokenExpiry\n userValidationTokenExpiry\n secretTokenExpiry\n sessionTokenExpiry\n sessionIdleTimeout\n }\n profile {\n ${FIELDS_TENANT_PROFILE}\n }\n onboarding {\n ${FIELDS_TENANT_ONBOARDING}\n }\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_TENANT_COMPLIANCE_DOCUMENT = `\n id\n tenantId\n documentName\n documentType\n documentNumber\n legalEntityName\n issuedBy\n issueDate\n expiryDate\n status\n notes\n file {\n key\n bucket\n location\n }\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\ntype __SubscriptionContainer = {\n OnTenantById: Tenant;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TenantService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetTenant(id: string): Promise<Tenant> {\n const statement = `query GetTenant($id: ID!) {\n getTenant(id: $id) {\n ${FIELDS_TENANT}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Tenant>response.data.getTenant;\n }\n\n async GetTenantExpanded(id: string): Promise<Tenant> {\n const statement = `query GetTenant($id: ID!) {\n getTenant(id: $id) {\n ${FIELDS_TENANT_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Tenant>response.data.getTenant;\n }\n\n async CreateTenant(input: CreateTenantInput, condition?: ModelTenantConditionInput): Promise<Tenant> {\n const statement = `mutation CreateTenant($input: CreateTenantInput!, $condition: ModelTenantConditionInput) {\n createTenant(input: $input, condition: $condition) {\n ${FIELDS_TENANT_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Tenant>response.data.createTenant;\n }\n\n async UpdateTenant(input: UpdateTenantInput, condition?: ModelTenantConditionInput): Promise<Tenant> {\n const statement = `mutation UpdateTenant($input: UpdateTenantInput!, $condition: ModelTenantConditionInput) {\n updateTenant(input: $input, condition: $condition) {\n ${FIELDS_TENANT_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Tenant>response.data.updateTenant;\n }\n\n async CreateTenantComplianceDocument(input: CreateTenantComplianceDocumentInput, condition?: ModelTenantComplianceDocumentConditionInput): Promise<TenantComplianceDocument> {\n const statement = `mutation CreateTenantComplianceDocument($input: CreateTenantComplianceDocumentInput!, $condition: ModelTenantComplianceDocumentConditionInput) {\n createTenantComplianceDocument(input: $input, condition: $condition) {\n ${FIELDS_TENANT_COMPLIANCE_DOCUMENT}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <TenantComplianceDocument>response.data.createTenantComplianceDocument;\n }\n\n async UpdateTenantComplianceDocument(input: UpdateTenantComplianceDocumentInput, condition?: ModelTenantComplianceDocumentConditionInput): Promise<TenantComplianceDocument> {\n const statement = `mutation UpdateTenantComplianceDocument($input: UpdateTenantComplianceDocumentInput!, $condition: ModelTenantComplianceDocumentConditionInput) {\n updateTenantComplianceDocument(input: $input, condition: $condition) {\n ${FIELDS_TENANT_COMPLIANCE_DOCUMENT}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <TenantComplianceDocument>response.data.updateTenantComplianceDocument;\n }\n\n async ListTenantComplianceDocumentsByTenantId(tenantId: string, updatedAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTenantComplianceDocumentFilterInput, limit?: number, nextToken?: string): Promise<List<TenantComplianceDocument>> {\n const statement = `query ListTenantComplianceDocumentsByTenantId($tenantId: ID!, $updatedAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTenantComplianceDocumentFilterInput, $limit: Int, $nextToken: String) {\n listTenantComplianceDocumentsByTenantId(\n tenantId: $tenantId\n updatedAt: $updatedAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TENANT_COMPLIANCE_DOCUMENT}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (updatedAt) {\n gqlAPIServiceArguments.updatedAt = updatedAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<TenantComplianceDocument>>response.data.listTenantComplianceDocumentsByTenantId;\n }\n\n OnTenantByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnTenantById'>>> {\n const statement = `subscription OnTenantById($id: ID!) {\n OnTenantById(id: $id) {\n ${FIELDS_TENANT}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnTenantById'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, \"OnTenantById\">>>; */\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ModelTicketFilterInput, ModelTicketPriorityFilterInput, ModelTicketStatusFilterInput, ModelTicketTypeFilterInput, Ticket, TicketPriority, TicketStatus, TicketType } from '../../models/dynamodb/ticket.model';\nimport { List, ModelSortDirection, ModelStringKeyConditionInput } from '../../models/dynamodb/common.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { FIELDS_ENTITY } from './entity.service';\n\nexport const FIELDS_TICKET_PRIORITY: string = `\n id\n externalId\n tenantId\n teamId\n name\n description\n colorCode\n isDefault\n createdAt\n updatedAt\n updatedByUserId\n updatedByUserSessionId\n deletedAt\n`;\n\nexport const FIELDS_TICKET_STATUS: string = `\n id\n externalId\n tenantId\n teamId\n name\n description\n percent\n colorCode\n isDefault\n createdAt\n updatedAt\n updatedByUserId\n updatedByUserSessionId\n deletedAt\n`;\n\nexport const FIELDS_TICKET_TYPE: string = `\n id\n externalId\n tenantId\n teamId\n name\n description\n colorCode\n createdAt\n updatedAt\n updatedByUserId\n updatedByUserSessionId\n deletedAt\n`;\n\nexport const FIELDS_TICKET: string = `\n id\n externalId\n referenceNumber\n tenantId\n entityId\n entity {\n ${FIELDS_ENTITY}\n }\n parentEntityId\n parentEntity {\n ${FIELDS_ENTITY}\n }\n subject\n description\n typeId\n type {\n ${FIELDS_TICKET_TYPE}\n }\n statusId\n status {\n ${FIELDS_TICKET_STATUS}\n }\n priorityId\n priority {\n ${FIELDS_TICKET_PRIORITY}\n }\n resolvedAt\n notes\n createdByUserId\n createdAt\n updatedAt\n updatedByUserId\n updatedByUserSessionId\n deletedAt\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TicketService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetTicket(id: string): Promise<Ticket> {\n const statement = `query GetTicket($id: ID!) {\n getTicket(id: $id) {\n ${FIELDS_TICKET}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n id,\n };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Ticket>response.data.getTicket;\n }\n\n async ListTicketsByTenantIdAndExternalId(tenantId: string, externalId?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTicketFilterInput, limit?: number, nextToken?: string): Promise<List<Ticket>> {\n const statement = `query ListTicketsByTenantIdAndExternalId($tenantId: ID!, $externalId: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTicketFilterInput, $limit: Int, $nextToken: String) {\n listTicketsByTenantIdAndExternalId(\n tenantId: $tenantId\n externalId: $externalId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TICKET}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (externalId) {\n gqlAPIServiceArguments.externalId = externalId;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Ticket>>response.data.listTicketsByTenantIdAndExternalId;\n }\n\n async ListTicketPrioritiesByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTicketPriorityFilterInput, limit?: number, nextToken?: string): Promise<List<TicketPriority>> {\n const statement = `query ListTicketPrioritiesByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTicketPriorityFilterInput, $limit: Int, $nextToken: String) {\n listTicketPrioritiesByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TICKET_PRIORITY}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<TicketPriority>>response.data.listTicketPrioritiesByTenantId;\n }\n\n async ListTicketStatusesByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTicketStatusFilterInput, limit?: number, nextToken?: string): Promise<List<TicketStatus>> {\n const statement = `query ListTicketStatusesByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTicketStatusFilterInput, $limit: Int, $nextToken: String) {\n listTicketStatusesByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TICKET_STATUS}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<TicketStatus>>response.data.listTicketStatusesByTenantId;\n }\n\n async ListTicketTypesByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTicketTypeFilterInput, limit?: number, nextToken?: string): Promise<List<TicketType>> {\n const statement = `query ListTicketTypesByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTicketTypeFilterInput, $limit: Int, $nextToken: String) {\n listTicketTypesByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TICKET_TYPE}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<TicketType>>response.data.listTicketTypesByTenantId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { List, ModelIntKeyConditionInput, ModelSortDirection, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport { ModelUserSessionConditionInput, ModelUserSessionFilterInput, UpdateUserSessionInput, UserSession } from '../../models/dynamodb/user-session.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\n\nexport const FIELDS_USER_SESSION = `\n id\n tenantId\n userId\n ipDetails\n status\n statusKey\n lastInteractionHandledAt\n teamIds\n temp_isLocked\n temp_isAvailableTenantIdUnion\n createdAt\n updatedAt\n expiryAt\n loggedOutAt\n blockedAt\n`;\n\ntype __SubscriptionContainer = {\n OnUserSessionById: UserSession;\n};\n@Injectable({\n providedIn: 'root',\n})\nexport class UserSessionService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetUserSession(id: string): Promise<UserSession> {\n const statement = `query GetUserSession($id: ID!) {\n getUserSession(id: $id) {\n ${FIELDS_USER_SESSION}\n }\n }`;\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <UserSession>response.data.getUserSession;\n }\n\n async UpdateUserSession(input: UpdateUserSessionInput, condition?: ModelUserSessionConditionInput): Promise<UserSession> {\n const statement = `mutation UpdateUserSession($input: UpdateUserSessionInput!, $condition: ModelUserSessionConditionInput) {\n updateUserSession(input: $input, condition: $condition) {\n ${FIELDS_USER_SESSION}\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n input,\n };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <UserSession>response.data.updateUserSession;\n }\n\n async ListUserSessionsByUserId(userId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelUserSessionFilterInput, limit?: number, nextToken?: string): Promise<List<UserSession>> {\n const statement = `query ListUserSessionsByUserId($userId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelUserSessionFilterInput, $limit: Int, $nextToken: String) {\n listUserSessionsByUserId(userId: $userId, createdAt: $createdAt, sortDirection: $sortDirection, filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n ${FIELDS_USER_SESSION}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n userId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<UserSession>>response.data.listUserSessionsByUserId;\n }\n\n OnUserSessionByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserSessionById'>>> {\n const statement = `subscription OnUserSessionById($id: ID!) {\n OnUserSessionById(id: $id) {\n ${FIELDS_USER_SESSION}\n }\n }`;\n const gqlAPIServiceArguments: any = { id };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserSessionById'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserSessionById'>>>; */\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { SnugdeskAuthenticationService } from './authentication.service';\n\nexport enum StorageType {\n SessionStorage = 'sessionStorage',\n LocalStorage = 'localStorage',\n}\n\nexport interface EncryptedStorageKeys {\n dataKey: string;\n cryptoKey: string;\n cryptoKeyCreatedAt: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EncryptedStorageService {\n private readonly DEFAULT_TTL_SECONDS = 60 * 60 * 12; // 12 hours\n\n constructor(private authenticationService: SnugdeskAuthenticationService) {}\n\n buildKeys(baseKey: string): EncryptedStorageKeys {\n const dataKey = this.scopedKey(baseKey);\n return {\n dataKey,\n cryptoKey: this.scopedKey(`${baseKey}_KEY`),\n cryptoKeyCreatedAt: this.scopedKey(`${baseKey}_KEY_CREATED_AT`),\n };\n }\n\n async getJsonByKey<T>(storageType: StorageType, baseKey: string, ttlSeconds?: number): Promise<T | null> {\n return this.getJson<T>(storageType, this.buildKeys(baseKey), ttlSeconds);\n }\n\n async setJsonByKey<T>(storageType: StorageType, baseKey: string, value: T, ttlSeconds?: number): Promise<void> {\n await this.setJson<T>(storageType, this.buildKeys(baseKey), value, ttlSeconds);\n }\n\n async updateJsonByKey<T>(storageType: StorageType, baseKey: string, value: T, ttlSeconds?: number): Promise<void> {\n await this.updateJson<T>(storageType, this.buildKeys(baseKey), ttlSeconds, () => value);\n }\n\n clearByKey(storageType: StorageType, baseKey: string): void {\n this.clear(storageType, this.buildKeys(baseKey));\n }\n\n async getJson<T>(storageType: StorageType, keys: EncryptedStorageKeys, ttlSeconds?: number): Promise<T | null> {\n const storage = this.getStorage(storageType);\n if (!storage) return null;\n\n try {\n const encrypted = storage.getItem(keys.dataKey);\n if (!encrypted) return null;\n\n const decrypted = await this.decryptString(encrypted, keys, ttlSeconds, storage);\n if (!decrypted) return null;\n\n return JSON.parse(decrypted) as T;\n } catch (err) {\n console.warn('Failed to read encrypted storage value:', err);\n return null;\n }\n }\n\n async setJson<T>(storageType: StorageType, keys: EncryptedStorageKeys, value: T, ttlSeconds?: number): Promise<void> {\n const storage = this.getStorage(storageType);\n if (!storage) return;\n\n try {\n const payload = JSON.stringify(value);\n const encrypted = await this.encryptString(payload, keys, ttlSeconds, storage);\n if (!encrypted) return;\n\n storage.setItem(keys.dataKey, encrypted);\n } catch (err) {\n console.warn('Failed to persist encrypted storage value:', err);\n }\n }\n\n async updateJson<T>(storageType: StorageType, keys: EncryptedStorageKeys, ttlSeconds: number | undefined, updater: (current: T | null) => T | null | Promise<T | null>): Promise<void> {\n const current = await this.getJson<T>(storageType, keys, ttlSeconds);\n const next = await updater(current);\n if (!next) return;\n await this.setJson(storageType, keys, next, ttlSeconds);\n }\n\n clear(storageType: StorageType, keys: EncryptedStorageKeys): void {\n const storage = this.getStorage(storageType);\n if (!storage) return;\n\n try {\n storage.removeItem(keys.dataKey);\n } catch (err) {\n console.warn('Failed to clear encrypted storage value:', err);\n }\n }\n\n private getStorage(storageType: StorageType): Storage | null {\n if (typeof window === 'undefined') return null;\n return storageType === StorageType.LocalStorage ? window.localStorage : window.sessionStorage;\n }\n\n private scopedKey(baseKey: string): string {\n const tenantId = this.authenticationService.getTenantId();\n return tenantId ? `${baseKey}:${tenantId}` : baseKey;\n }\n\n private nowSeconds(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n private resolveTtlSeconds(ttlSeconds?: number): number {\n return typeof ttlSeconds === 'number' && ttlSeconds > 0 ? ttlSeconds : this.DEFAULT_TTL_SECONDS;\n }\n\n private async getOrCreateCryptoKey(keys: EncryptedStorageKeys, ttlSeconds: number | undefined, storage: Storage): Promise<CryptoKey | null> {\n if (!window?.crypto?.subtle) return null;\n\n try {\n const createdAtRaw = storage.getItem(keys.cryptoKeyCreatedAt);\n const keyRaw = storage.getItem(keys.cryptoKey);\n const now = this.nowSeconds();\n const ttl = this.resolveTtlSeconds(ttlSeconds);\n\n if (createdAtRaw && keyRaw) {\n const createdAt = Number(createdAtRaw);\n const isExpired = !Number.isFinite(createdAt) || now - createdAt > ttl;\n\n if (!isExpired) {\n const jwk = JSON.parse(keyRaw);\n return await crypto.subtle.importKey('jwk', jwk, { name: 'AES-GCM' }, true, ['encrypt', 'decrypt']);\n }\n }\n\n const key = await crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt']);\n const jwk = await crypto.subtle.exportKey('jwk', key);\n\n storage.setItem(keys.cryptoKey, JSON.stringify(jwk));\n storage.setItem(keys.cryptoKeyCreatedAt, String(now));\n\n return key;\n } catch (err) {\n console.warn('Failed to create crypto key:', err);\n return null;\n }\n }\n\n private async encryptString(plainText: string, keys: EncryptedStorageKeys, ttlSeconds: number | undefined, storage: Storage): Promise<string | null> {\n const key = await this.getOrCreateCryptoKey(keys, ttlSeconds, storage);\n if (!key) return null;\n\n try {\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const encoded = new TextEncoder().encode(plainText);\n const cipherBuffer = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, encoded);\n\n const payload = {\n iv: this.bytesToBase64(iv),\n data: this.bytesToBase64(new Uint8Array(cipherBuffer)),\n };\n\n return JSON.stringify(payload);\n } catch (err) {\n console.warn('Failed to encrypt cache payload:', err);\n return null;\n }\n }\n\n private async decryptString(cipherText: string, keys: EncryptedStorageKeys, ttlSeconds: number | undefined, storage: Storage): Promise<string | null> {\n const key = await this.getOrCreateCryptoKey(keys, ttlSeconds, storage);\n if (!key) return null;\n\n try {\n const payload = JSON.parse(cipherText);\n const iv = this.base64ToBytes(payload?.iv);\n const data = this.base64ToBytes(payload?.data);\n if (!iv?.length || !data?.length) return null;\n\n // Re-wrap into fresh Uint8Arrays backed by ArrayBuffer (not SharedArrayBuffer).\n const ivBytes = new Uint8Array(iv);\n const dataBytes = new Uint8Array(data);\n\n const plainBuffer = await crypto.subtle.decrypt({ name: 'AES-GCM', iv: ivBytes }, key, dataBytes);\n return new TextDecoder().decode(plainBuffer);\n } catch (err) {\n console.warn('Failed to decrypt cache payload:', err);\n return null;\n }\n }\n\n private bytesToBase64(bytes: Uint8Array): string {\n let binary = '';\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n\n private base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64 || '');\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class SnugdeskIPRegistryService {\n private readonly IP_REGISTRY_API = 'https://api.ipregistry.co/?key=1lbzl1iexwbxc0';\n private readonly SESSION_KEY = 'sd-ip-details';\n\n constructor(private http: HttpClient) {}\n\n private get cachedIPDetails(): any | null {\n const value = sessionStorage.getItem(this.SESSION_KEY);\n return value ? JSON.parse(value) : null;\n }\n\n private set cachedIPDetails(details: any) {\n sessionStorage.setItem(this.SESSION_KEY, JSON.stringify(details));\n }\n\n // prettier-ignore\n async getIPDetails(): Promise<any> {\n if (this.cachedIPDetails) return this.cachedIPDetails;\n\n try {\n const ipDetails = await lastValueFrom(this.http.get(this.IP_REGISTRY_API));\n // console.log('Fetched IP details:', ipDetails);\n this.cachedIPDetails = ipDetails;\n } catch (error) {\n console.warn('Error fetching IP details:', error);\n this.cachedIPDetails = {};\n }\n\n return this.cachedIPDetails;\n }\n}\n","export class CleanDeep {\n public static clean(obj: any): typeof obj {\n Object.keys(obj).forEach((key) => {\n if (obj[key] === undefined || obj[key] === null) {\n delete obj[key];\n // obj[key] = null;\n } else if (typeof obj[key] === 'string') {\n if (String(obj[key]).trim().length === 0) {\n delete obj[key];\n // obj[key] = null;\n } else {\n obj[key] = String(obj[key]).trim();\n }\n }\n });\n return obj;\n }\n}\n","import {\n AbstractControl,\n ValidationErrors,\n ValidatorFn,\n FormGroup,\n} from '@angular/forms';\n\nexport class CustomValidators {\n /**\n * Validator that checks for whitespace-only input.\n * Usage: CustomValidators.whitespace\n */\n static readonly whitespace: ValidatorFn = (\n control: AbstractControl\n ): ValidationErrors | null => {\n const value: string = control.value || '';\n return value && value.trim().length === 0\n ? { whitespace: 'Whitespaces are not allowed' }\n : null;\n };\n\n /**\n * Validator that checks if the input is a valid HTTP/HTTPS URL.\n * Usage: CustomValidators.url\n */\n static readonly url: ValidatorFn = (\n control: AbstractControl\n ): ValidationErrors | null => {\n const value = control.value;\n const urlRegexPattern = /^(https?:\\/\\/)/i;\n\n if (!value) return null;\n\n const isValid =\n urlRegexPattern.test(value) && CustomValidators.#isValidUrl(value);\n return isValid ? null : { invalidUrl: true };\n };\n\n static readonly passwordStrength: ValidatorFn = (\n control: AbstractControl\n ): ValidationErrors | null => {\n const value: string = control.value || '';\n const hasUpperCase = /[A-Z]/.test(value);\n const hasNumber = /[0-9]/.test(value);\n const hasSpecial = /[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/.test(value);\n\n return value && (!hasUpperCase || !hasNumber || !hasSpecial)\n ? {\n passwordStrength:\n 'Password must contain at least one number, one uppercase letter, and one special character.',\n }\n : null;\n };\n\n /**\n * Cross-field validator to ensure two fields match.\n * Usage (form-level): validators: CustomValidators.mustMatch('field1', 'field2')\n */\n static mustMatch(controlName: string, matchingControlName: string) {\n return (formGroup: FormGroup) => {\n const control = formGroup.controls[controlName];\n const matchingControl = formGroup.controls[matchingControlName];\n\n if (matchingControl.errors && !matchingControl.errors['mustMatch']) {\n return;\n }\n\n matchingControl.setErrors(\n control.value !== matchingControl.value ? { mustMatch: true } : null\n );\n };\n }\n\n /**\n * Validator that ensures trimmed length is at least the specified minimum.\n * Usage: CustomValidators.trimLength(min)\n */\n static trimLength(minLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string = control.value || '';\n return value.trim().length < minLength\n ? {\n trimLength: `Minimum ${minLength} non-whitespace characters required`,\n }\n : null;\n };\n }\n\n // Helper method (private)\n static #isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n}\n","const EPOCH_START = 1735689600; // Jan 1 2025 00:00:00 UTC\n\nexport function generateReferenceNumber(): string {\n const secondsSinceStart = Math.floor(Date.now() / 1000) - EPOCH_START;\n const suffix = Math.floor(Math.random() * 100).toString().padStart(2, '0');\n return `TKT-${secondsSinceStart}${suffix}`;\n}\n","const DANGEROUS_TAGS = /(<\\s*\\/?\\s*(script|iframe|object|embed|applet|form|meta|link|base|svg)\\b[^>]*>)/gi;\nconst EVENT_HANDLERS = /\\s+on\\w+\\s*=\\s*(\"[^\"]*\"|'[^']*'|[^\\s>]*)/gi;\nconst DANGEROUS_PROTOCOLS = /(href|src|action)\\s*=\\s*[\"']\\s*(javascript|vbscript):/gi;\nconst DANGEROUS_DATA_URI = /(href|src|action)\\s*=\\s*[\"']\\s*data:(?!image\\/)/gi;\n\nexport function sanitizeHtmlBody(html: string): string {\n if (!html) {\n return '';\n }\n\n let sanitized = html;\n\n // Strip dangerous tags (script, iframe, object, embed, applet, form, meta, link, base, svg)\n sanitized = sanitized.replace(DANGEROUS_TAGS, '');\n\n // Remove event handlers (onclick, onerror, onload, etc.)\n sanitized = sanitized.replace(EVENT_HANDLERS, '');\n\n // Block javascript: and vbscript: protocols\n sanitized = sanitized.replace(DANGEROUS_PROTOCOLS, '$1=\"\"');\n\n // Block data: URIs except data:image/* (safe for inline images from CKEditor / email clients)\n sanitized = sanitized.replace(DANGEROUS_DATA_URI, '$1=\"\"');\n\n return sanitized;\n}\n","import { Injectable } from '@angular/core';\n\nimport { Entity, CreateEntityInput } from '../../models/dynamodb/entity.model';\nimport { EntityService } from '../dynamodb/entity.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailEntityResolverService {\n\n constructor(\n private entityService: EntityService,\n ) {}\n\n async resolveEntity(tenantId: string, senderEmail: string, senderName?: string): Promise<Entity | null> {\n try {\n const result = await this.entityService.ListEntitiesByTenantId(\n tenantId,\n undefined,\n undefined,\n { email: { eq: senderEmail } },\n );\n const entities = result?.items || [];\n\n if (entities.length > 0) {\n return entities[0];\n }\n\n // Entity not found - create new one\n const now = Math.floor(Date.now() / 1000);\n const input: CreateEntityInput = {\n tenantId,\n name: senderName || senderEmail.split('@')[0],\n email: senderEmail,\n isOrganization: false,\n contactPreferences: { allowEmail: true },\n metadata: JSON.stringify({ source: 'EMAIL' }),\n createdAt: now,\n updatedAt: now,\n updatedByUserId: 'SYSTEM',\n };\n\n return await this.entityService.CreateEntity(input);\n } catch (error) {\n console.error('EmailEntityResolverService.resolveEntity error:', error);\n return null;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { EntityConversation } from '../../models/dynamodb/entity-conversation.model';\nimport { EntityConversationService } from '../dynamodb/entity-conversation.service';\nimport { InteractionService } from '../dynamodb/interaction.service';\n\nexport interface EmailHeaders {\n messageId: string;\n inReplyTo?: string;\n references?: string[];\n subject: string;\n to?: string[];\n cc?: string[];\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailConversationResolverService {\n\n constructor(\n private entityConversationService: EntityConversationService,\n private interactionService: InteractionService,\n ) {}\n\n /**\n * Resolves an existing conversation or returns null if no match found.\n * 5-step matching:\n * 1. Parse encoded reply address (reply+{tenantId}_{conversationId}@reply.platform.com)\n * 2. Match In-Reply-To header → InteractionMessage.metadata.emailMessageId\n * 3. Match References header → conversation metadata.threadReferences\n * 4. Normalize subject (remove Re:, Fwd:, FW:) → match conversation metadata.subject\n * 5. No match → return null (caller creates new EntityConversation)\n */\n async resolveConversation(\n tenantId: string,\n entityId: string,\n emailHeaders: EmailHeaders,\n endpointId: string,\n ): Promise<EntityConversation | null> {\n try {\n // Step 1: Check for encoded reply address\n const allRecipients = [...(emailHeaders.to || []), ...(emailHeaders.cc || [])];\n const conversationId = this.parseReplyAddress(allRecipients);\n if (conversationId) {\n const conversation = await this.entityConversationService.GetEntityConversation(conversationId);\n if (conversation) {\n return conversation;\n }\n }\n\n // Step 2: Match In-Reply-To header\n if (emailHeaders.inReplyTo) {\n const conversation = await this.matchByInReplyTo(tenantId, emailHeaders.inReplyTo);\n if (conversation) {\n return conversation;\n }\n }\n\n // Step 3: Match References header\n if (emailHeaders.references && emailHeaders.references.length > 0) {\n const conversation = await this.matchByReferences(tenantId, emailHeaders.references);\n if (conversation) {\n return conversation;\n }\n }\n\n // Step 4: Normalize subject and match\n const normalizedSubject = this.normalizeSubject(emailHeaders.subject);\n if (normalizedSubject) {\n const conversation = await this.matchBySubject(tenantId, entityId, normalizedSubject);\n if (conversation) {\n return conversation;\n }\n }\n\n // Step 5: No match\n return null;\n } catch (error) {\n console.error('EmailConversationResolverService.resolveConversation error:', error);\n return null;\n }\n }\n\n parseReplyAddress(recipients: string[]): string | null {\n for (const addr of recipients) {\n const match = addr.match(/reply\\+([^_]+)_([^@]+)@/);\n if (match) {\n return match[2]; // conversationId\n }\n }\n return null;\n }\n\n normalizeSubject(subject: string): string {\n if (!subject) return '';\n return subject.replace(/^(Re:\\s*|Fwd:\\s*|FW:\\s*|Fw:\\s*)+/i, '').trim();\n }\n\n private async matchByInReplyTo(tenantId: string, inReplyTo: string): Promise<EntityConversation | null> {\n try {\n const messages = await this.interactionService.ListInteractionMessagesByExternalId(inReplyTo);\n const items = messages?.items || [];\n if (items.length > 0 && items[0].entityConversationId) {\n return await this.entityConversationService.GetEntityConversation(items[0].entityConversationId);\n }\n } catch (error) {\n console.error('matchByInReplyTo error:', error);\n }\n return null;\n }\n\n private async matchByReferences(tenantId: string, references: string[]): Promise<EntityConversation | null> {\n for (const ref of references.reverse()) {\n const result = await this.matchByInReplyTo(tenantId, ref);\n if (result) return result;\n }\n return null;\n }\n\n private async matchBySubject(tenantId: string, entityId: string, normalizedSubject: string): Promise<EntityConversation | null> {\n try {\n const result = await this.entityConversationService.ListEntityConversationsByEntityId(entityId);\n const items = result?.items || [];\n for (const conversation of items) {\n if (conversation.metadata) {\n try {\n const metadata = JSON.parse(conversation.metadata);\n if (metadata.subject && this.normalizeSubject(metadata.subject) === normalizedSubject) {\n return conversation;\n }\n } catch {\n // skip invalid metadata\n }\n }\n }\n } catch (error) {\n console.error('matchBySubject error:', error);\n }\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { List, ModelSortDirection } from '../../models/dynamodb/common.model';\nimport { InteractionMessageTemplate } from '../../models/email/email-template.model';\n\nexport const FIELDS_INTERACTION_MESSAGE_TEMPLATE = `\n id\n tenantId\n name\n subject\n body\n metadata\n variables\n interactionChannel\n InteractionProvider\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InteractionMessageTemplateService {\n\n constructor(\n private appSyncHelperService: AppSyncHelperService,\n ) {}\n\n async listTemplates(tenantId: string, interactionChannel?: string): Promise<List<InteractionMessageTemplate>> {\n const query = /* GraphQL */ `\n query ListMessageTemplatesByTenantId(\n $tenantId: ID!\n $name: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInteractionMessageTemplateFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listMessageTemplatesByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_TEMPLATE}\n }\n nextToken\n }\n }\n `;\n\n const filter: any = { deletedAt: { attributeExists: false } };\n if (interactionChannel) {\n filter.interactionChannel = { eq: interactionChannel };\n }\n\n const response: any = await this.appSyncHelperService.query(query, {\n tenantId,\n sortDirection: ModelSortDirection.ASC,\n filter,\n });\n\n return response?.data?.listMessageTemplatesByTenantId || { items: [], nextToken: null };\n }\n\n async getTemplate(templateId: string): Promise<InteractionMessageTemplate | null> {\n const query = /* GraphQL */ `\n query GetInteractionMessageTemplate($id: ID!) {\n getInteractionMessageTemplate(id: $id) {\n ${FIELDS_INTERACTION_MESSAGE_TEMPLATE}\n }\n }\n `;\n\n const response: any = await this.appSyncHelperService.query(query, { id: templateId });\n return response?.data?.getInteractionMessageTemplate || null;\n }\n\n renderTemplate(body: string, variables: Record<string, any>): string {\n if (!body || !variables) return body || '';\n\n let rendered = body;\n for (const [key, value] of Object.entries(variables)) {\n const placeholder = new RegExp(`\\\\{\\\\{\\\\s*${key}\\\\s*\\\\}\\\\}`, 'g');\n rendered = rendered.replace(placeholder, String(value ?? ''));\n }\n return rendered;\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/snugdesk-core.module';\n\nexport * from './lib/components/error/error.component';\nexport * from './lib/components/footer/footer.component';\nexport * from './lib/components/loader/loader.component';\n\nexport * from './lib/helpers/appsync-helper.service';\nexport * from './lib/helpers/opensearch-helper.service';\nexport * from './lib/helpers/s3-helper.service';\n\nexport * from './lib/pipes/custom-pipes.module';\nexport * from './lib/pipes/domain-name.pipe';\nexport * from './lib/pipes/epoch-formatter.pipe';\nexport * from './lib/pipes/safe-html.pipe';\nexport * from './lib/pipes/search-inner.pipe';\nexport * from './lib/pipes/search.pipe';\nexport * from './lib/pipes/singularize.pipe';\n\nexport * from './lib/models/dynamodb/billing.model';\nexport * from './lib/models/dynamodb/common.model';\nexport * from './lib/models/dynamodb/entity-conversation.model';\nexport * from './lib/models/dynamodb/entity.model';\nexport * from './lib/models/dynamodb/interaction-endpoint.model';\nexport * from './lib/models/dynamodb/interaction-widget.model';\nexport * from './lib/models/dynamodb/interaction.model';\nexport * from './lib/models/dynamodb/team.model';\nexport * from './lib/models/dynamodb/tenant.model';\nexport * from './lib/models/dynamodb/ticket.model';\nexport * from './lib/models/dynamodb/user.model';\nexport * from './lib/models/dynamodb/user-session.model';\n\n// AppSync - GraphQL services\nexport * from './lib/services/dynamodb/common.service';\nexport * from './lib/services/dynamodb/entity.service';\nexport * from './lib/services/dynamodb/entity-conversation.service';\nexport * from './lib/services/dynamodb/interaction.service';\nexport * from './lib/services/dynamodb/interaction-endpoint.service';\nexport * from './lib/services/dynamodb/interaction-widget.service';\nexport * from './lib/services/dynamodb/team.service';\nexport * from './lib/services/dynamodb/tenant.service';\nexport * from './lib/services/dynamodb/ticket.service';\nexport * from './lib/services/dynamodb/user-session.service';\nexport * from './lib/services/dynamodb/user.service';\n\n// Other services\nexport * from './lib/services/authentication.service';\nexport * from './lib/services/encrypted-storage.service';\nexport * from './lib/services/ip-registry.service';\n\nexport * from './lib/utilities/clean-deep.helper';\nexport * from './lib/utilities/custom.validators';\nexport * from './lib/utilities/reference-number-generator';\n\n// Email models\nexport * from './lib/models/email/index';\n\n// Email utilities\nexport * from './lib/utilities/email/index';\n\n// Email services\nexport * from './lib/services/email/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.FooterComponent","i1.FooterComponent","i1","i1.SnugdeskAuthenticationService","i1.AppSyncHelperService","i1.EntityService","i1.EntityConversationService","i2.InteractionService"],"mappings":"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"}
1
+ {"version":3,"file":"snugdesk-core.mjs","sources":["../../../projects/snugdesk-core/src/app.config.ts","../../../projects/snugdesk-core/src/lib/components/footer/footer.component.ts","../../../projects/snugdesk-core/src/lib/components/footer/footer.component.html","../../../projects/snugdesk-core/src/lib/components/error/error.component.ts","../../../projects/snugdesk-core/src/lib/components/error/error.component.html","../../../projects/snugdesk-core/src/lib/components/loader/loader.component.ts","../../../projects/snugdesk-core/src/lib/components/loader/loader.component.html","../../../projects/snugdesk-core/src/lib/pipes/domain-name.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/epoch-formatter.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/safe-html.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/search.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/search-inner.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/singularize.pipe.ts","../../../projects/snugdesk-core/src/lib/pipes/custom-pipes.module.ts","../../../projects/snugdesk-core/src/lib/snugdesk-core.module.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/user-session.service.ts","../../../projects/snugdesk-core/src/lib/services/authentication.service.ts","../../../projects/snugdesk-core/src/lib/helpers/appsync-helper.service.ts","../../../projects/snugdesk-core/src/lib/helpers/opensearch-helper.service.ts","../../../projects/snugdesk-core/src/lib/helpers/s3-helper.service.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/billing.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/common.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/interaction-endpoint.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/interaction-widget.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/interaction.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/tenant.model.ts","../../../projects/snugdesk-core/src/lib/models/dynamodb/user.model.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/common.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/entity.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/interaction-endpoint.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/interaction-widget.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/user.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/team.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/interaction.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/entity-conversation.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/tenant.service.ts","../../../projects/snugdesk-core/src/lib/services/dynamodb/ticket.service.ts","../../../projects/snugdesk-core/src/lib/services/encrypted-storage.service.ts","../../../projects/snugdesk-core/src/lib/services/ip-registry.service.ts","../../../projects/snugdesk-core/src/lib/utilities/clean-deep.helper.ts","../../../projects/snugdesk-core/src/lib/utilities/custom.validators.ts","../../../projects/snugdesk-core/src/lib/utilities/reference-number-generator.ts","../../../projects/snugdesk-core/src/lib/utilities/email/html-sanitizer.util.ts","../../../projects/snugdesk-core/src/lib/services/email/entity-resolver.service.ts","../../../projects/snugdesk-core/src/lib/services/email/conversation-resolver.service.ts","../../../projects/snugdesk-core/src/lib/services/email/template.service.ts","../../../projects/snugdesk-core/src/public-api.ts","../../../projects/snugdesk-core/src/snugdesk-core.ts"],"sourcesContent":["import { AmplifyConfig } from './lib/helpers/appsync-helper.service';\n\nexport const SnugdeskAppConfig = {\n appDomain: 'snugdesk.com',\n appLogoURL: 'https://assets.snugdesk.com/logo/snugdesk.svg',\n appName: 'Snugdesk',\n appSupportEmail: 'support@snug.in',\n companyName: 'Snug Technologies Pvt. Ltd.',\n companyAddress: '403, Tower B, Global Business Park, MG Road, Gurugram, Haryana 122002, India',\n};\n\nexport const SnugdeskAPIConfig = {\n endpoint: 'https://api.snugdesk.com',\n};\n\nexport const SnugdeskUtilityConfig = {\n countryEndpoint: 'https://snugdesk-assets.s3.amazonaws.com/metadata/countries.json',\n ipLookupEndpoint: 'https://ipapi.co/json/',\n};\n\nexport const SnugdeskAmplifyConfig: AmplifyConfig = {\n aws_project_region: 'ap-south-1',\n aws_appsync_graphqlEndpoint: 'https://sgbnsklbvrh67mcvh3wqkzgyou.appsync-api.ap-south-1.amazonaws.com/graphql',\n aws_appsync_region: 'ap-south-1',\n aws_appsync_authenticationType: 'AWS_LAMBDA',\n};\n\nexport const GoogleMapsConfig = {\n apiKey: 'AIzaSyDOPOMzdMNj6QHFbBWzGmiaXP6yFFUMwok',\n};\n","import { Component } from '@angular/core';\n\nimport { SnugdeskAppConfig } from '../../../app.config';\n\n@Component({\n selector: 'sd-app-footer',\n templateUrl: './footer.component.html',\n styleUrl: './footer.component.css',\n standalone: false,\n})\nexport class FooterComponent {\n appConfig = SnugdeskAppConfig;\n}\n","<div class=\"sd_container_widget_footer\">\n <div class=\"sd_container_widget_footer_inner\"><span>Powered by</span>\n <svg width=\"16px\" shape-rendering=\"geometricPrecision\" text-rendering=\"geometricPrecision\" image-rendering=\"optimizeQuality\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" viewBox=\"0 0 877.098 808.09\">\n <g id=\"Layer_x0020_1\">\n <metadata id=\"CorelCorpID_0Corel-Layer\" />\n <g id=\"_258513600\">\n <path id=\"_258516096\" fill=\"#CBA96B\" fill-rule=\"nonzero\" d=\"M637.653 218.973c-109.109,-5.73516 -241.809,27.9446 -336.907,14.3602 -52.1167,-7.44554 -85.2507,-24.8291 -102.132,-36.1086 -57.8931,61.7431 -93.4412,144.67 -93.4412,235.995 0,171.801 125.437,314.25 289.707,340.911 -8.09408,-36.1447 -12.5046,-73.6839 -12.5046,-112.274 0,-189.17 102.668,-354.272 255.277,-442.882z\" />\n <path id=\"_258516024\" fill=\"#FAE5C5\" fill-rule=\"nonzero\" d=\"M778.919 331.111c0,0 -0.795844,-6.58187 -3.83616,-16.5262 -2.95236,-8.04746 -6.16964,-15.955 -9.68789,-23.7089 -15.0903,-29.1696 -46.4069,-64.5259 -110.487,-70.6637 -5.67476,-0.538334 -11.4438,-0.931487 -17.2553,-1.23986 -152.609,88.61 -255.277,253.712 -255.277,442.882 0,38.5905 4.41052,76.1297 12.5046,112.274 18.155,2.95342 36.7635,4.54405 55.7504,4.54405 190.788,0 345.456,-154.667 345.456,-345.455 0,-36.1033 -5.58044,-70.8873 -15.8766,-103.59 -0.812799,0.942084 -1.29073,1.48254 -1.29073,1.48254z\" />\n <path id=\"_258515952\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M718.294 758.328c-2.63444,0 -5.25511,-1.08726 -7.14458,-3.21411 -3.49387,-3.94743 -3.12509,-9.97401 0.819158,-13.4658 65.9724,-58.4336 110.727,-134.554 129.411,-220.127 1.1233,-5.15126 6.21627,-8.39928 11.3601,-7.28658 5.14278,1.12647 8.40352,6.20885 7.28234,11.3569 -19.557,89.5542 -66.3836,169.202 -135.403,230.332 -1.81317,1.60864 -4.07353,2.40449 -6.32542,2.40449z\" />\n <path id=\"_258515880\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M846.577 557.445c-1.40412,0 -2.83367,-0.181211 -4.25474,-0.555289 -8.91854,-2.3462 -14.2415,-11.4735 -11.9059,-20.3942 8.82422,-33.5198 13.3004,-68.2667 13.3004,-103.269 0,-9.21738 7.47309,-16.6926 16.6915,-16.6926 9.21738,0 16.6905,7.47521 16.6905,16.6926 0,37.8699 -4.83547,75.4727 -14.3877,111.768 -1.97001,7.49217 -8.73203,12.4506 -16.1341,12.4506z\" />\n <path id=\"_258515808\" fill=\"#F7AB54\" fill-rule=\"nonzero\" d=\"M532.463 51.2668c-26.5225,-4.561 -53.5261,-9.03723 -81.5311,-9.03723 -6.4971,0 -12.9486,0.180151 -19.3652,0.504423l0 0.0169554c-0.116568,0 -0.240555,0 -0.357123,0 -130.335,0 -188.497,-1.54718 -257.657,-42.7509 0,0 -0.329571,1.31722 -0.822337,3.71429 105.693,109.444 253.934,177.522 418.097,177.522 47.2367,0 97.7691,-5.74258 146.957,-18.847 -36.3757,-51.8856 -112.688,-95.2088 -205.32,-111.122z\" />\n <path id=\"_258515736\" fill=\"#2F3033\" fill-rule=\"nonzero\" d=\"M450.631 674.55c-105.869,0 -197.899,-65.1882 -228.997,-162.207 -3.11979,-9.71968 2.56768,-20.0233 12.7017,-23.017 10.134,-3.00111 20.8689,2.47231 23.9845,12.1909 26.1177,81.4633 103.4,136.2 192.311,136.2 88.9109,0 166.199,-54.7363 192.311,-136.2 3.11555,-9.72604 13.8494,-15.192 23.9834,-12.1909 10.134,2.99369 15.8257,13.2973 12.7007,23.017 -31.0962,97.0188 -123.128,162.207 -228.995,162.207z\" />\n <path id=\"_258515664\" fill=\"#2F3033\" fill-rule=\"nonzero\" d=\"M797.457 379.399c-3.54474,-22.8781 -9.31169,-45.0272 -17.0582,-66.2288l-67.6584 -15.8236c-1.42849,-0.334869 -2.86758,-0.470512 -4.33952,-0.402691 -13.9946,0.640066 -92.4705,4.71678 -166.073,18.4538 -26.3148,4.92024 -43.3412,11.6303 -54.3844,18.4867 -10.9956,-6.30741 -23.7185,-9.93692 -37.3125,-9.93692 -13.6279,0 -26.3794,3.64647 -37.3919,9.98779 -11.039,-6.87329 -28.0877,-13.6078 -54.4671,-18.5375 -72.9686,-13.6184 -152.425,-17.8138 -166.135,-18.4538 -1.38822,-0.0678216 -2.73936,0.0582842 -4.09261,0.376198l-67.5376 15.8162c-7.76133,21.2165 -13.5177,43.3698 -17.0624,66.2649l79.7232 1.80999c5.1502,0.116568 9.58086,3.65919 10.7773,8.67586 7.72424,32.4018 30.8281,83.0475 99.862,83.0475 35.6455,0 71.0166,-2.26143 95.0255,-24.3903 22.8082,-21.0194 36.8822,-41.2323 42.4966,-76.6882 5.34519,-3.70475 11.7957,-5.92167 18.8025,-5.92167 6.93158,0 13.3121,2.17347 18.6255,5.80828 5.5974,35.5258 19.6863,55.7599 42.5135,76.8016 24.012,22.1289 59.3799,24.3903 95.0276,24.3903 60.3485,0 89.2023,-58.4993 98.3519,-81.955 2.26778,-5.821 7.86518,-9.66564 14.1058,-9.80658l78.2015 -1.77396z\" />\n <path id=\"_258515592\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M450.057 339.132c17.4407,0 33.2718,5.6631 45.1798,14.8603 -10.2729,-13.4138 -26.4038,-22.1024 -44.6054,-22.1024 -17.2235,0 -32.6222,7.76663 -42.9279,19.965 11.5307,-7.94572 26.2745,-12.7229 42.3535,-12.7229z\" />\n <path id=\"_258515520\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M410.435 364.515c0,0 6.9072,42.8802 -31.6589,82.3079 0,0 36.63,-28.5094 42.593,-65.4044 7.97222,-49.2893 -46.9092,-57.4703 -46.9092,-57.4703 0,0 31.3696,7.94254 35.9751,40.5668z\" />\n <path id=\"_258515184\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M492.553 364.515c0,0 -6.90826,42.8802 31.6578,82.3079 0,0 -36.63,-28.5094 -42.593,-65.4044 -7.96798,-49.2893 46.9092,-57.4703 46.9092,-57.4703 0,0 -31.3696,7.94254 -35.9741,40.5668z\" />\n <path id=\"_258515160\" fill=\"#CBA96B\" fill-rule=\"nonzero\" d=\"M188.23 665.933c17.7089,39.6385 -18.9233,142.158 -18.9233,142.158 0,0 115.812,-69.4928 177.475,-60.7925l-183.871 -122.549c0,0 16.2814,16.8643 25.3186,41.1836z\" />\n <path id=\"_258514632\" fill=\"#CBA96B\" fill-rule=\"nonzero\" d=\"M63.5965 269.786c0,0 -52.8637,99.5451 -63.5965,202.805 0,0 47.9064,27.7358 58.601,-17.1408 11.9366,-50.0756 2.16393,-110.872 17.7184,-166.98 15.5513,-56.1118 -12.7229,-18.6838 -12.7229,-18.6838z\" />\n <path id=\"_258513552\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M66.4885 532.215c-8.90158,0 -16.8664,-6.26184 -18.6859,-15.3277 -5.49249,-27.3597 -8.27847,-55.5056 -8.27847,-83.6611 0,-26.7556 2.51894,-53.5409 7.48687,-79.6066 1.97318,-10.3534 11.9567,-17.1461 22.3144,-15.174 10.3492,1.97742 17.1398,11.9642 15.1677,22.3186 -4.51967,23.7153 -6.80971,48.0982 -6.80971,72.4621 0,25.6397 2.53271,51.2593 7.5282,76.152 2.07704,10.3301 -4.61717,20.3867 -14.9472,22.4585 -1.26742,0.255391 -2.53059,0.378317 -3.77575,0.378317z\" />\n <path id=\"_258513720\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M834.909 532.215c-1.2494,0 -2.51576,-0.122927 -3.77258,-0.378317 -10.3396,-2.07174 -17.0338,-12.1284 -14.9525,-22.4585 4.98913,-24.9001 7.53138,-50.5175 7.53138,-76.152 0,-24.3755 -2.29322,-48.7563 -6.81289,-72.4621 -1.97742,-10.3523 4.81851,-20.3412 15.1655,-22.3154 10.365,-1.99226 20.3465,4.81533 22.3144,15.1708 4.97323,26.0541 7.48899,52.8383 7.48899,79.6066 0,28.1481 -2.7828,56.294 -8.27529,83.6611 -1.82482,9.06372 -9.78538,15.3277 -18.687,15.3277z\" />\n <path id=\"_258513864\" fill=\"#2F3033\" fill-rule=\"nonzero\" d=\"M700.271 792.515c-8.44803,0 -16.8187,-3.72701 -22.4691,-10.8695 -9.80658,-12.3955 -7.70305,-30.3947 4.69241,-40.197 5.70867,-4.51437 11.3665,-9.25553 16.8251,-14.0857 11.8306,-10.4763 29.9146,-9.37421 40.3984,2.45323 10.4763,11.8317 9.38163,29.9167 -2.45535,40.3952 -6.24065,5.53594 -12.7282,10.9617 -19.2592,16.1309 -5.25511,4.15195 -11.5191,6.17282 -17.7322,6.17282z\" />\n <path id=\"_258514920\" fill=\"#EE7738\" fill-rule=\"nonzero\" d=\"M755.671 188.913c0,0 -11.9313,-19.0769 -17.8879,-26.5331 -11.0486,2.67153 -32.069,7.57482 -43.3507,9.61265 -0.0264928,0.00741799 -0.0508662,0.00741799 -0.077359,0.0169554 -5.57091,1.00249 -11.1768,1.92656 -16.8081,2.77327 -0.163196,0.0243734 -0.317914,0.0413288 -0.470512,0.0678216 -5.50521,0.812799 -11.0252,1.56731 -16.5813,2.23493 -0.690932,0.084777 -1.39458,0.135643 -2.09611,0.22042 -5.01456,0.581782 -10.0387,1.13071 -15.0977,1.58427 -1.63514,0.145181 -3.28723,0.229958 -4.92024,0.36878 -4.13394,0.33275 -8.26788,0.677156 -12.4294,0.931487 -2.875,0.172733 -5.76907,0.25751 -8.65149,0.385735 -2.94494,0.138822 -5.88034,0.308376 -8.8433,0.402691 -5.85385,0.169554 -11.7331,0.25751 -17.6304,0.25751 -6.52889,0 -13.0186,-0.14624 -19.4966,-0.359242 -2.67153,-0.0868964 -5.33247,-0.206644 -8.00189,-0.317914 -4.73797,-0.188629 -9.46853,-0.530916 -14.2023,-0.829755 -0.885919,-0.0604036 -1.77608,-0.11127 -2.662,-0.171673 -6.37523,-0.488527 -12.7197,-1.07773 -19.0399,-1.7623 -1.5387,-0.171673 -3.06681,-0.361362 -4.59809,-0.540453 -5.12583,-0.5892 -10.2453,-1.26636 -15.3552,-2.0018 -1.43061,-0.206644 -2.86228,-0.393153 -4.28654,-0.609335 -6.318,-0.95798 -12.6085,-2.00074 -18.8586,-3.15582 -0.545752,-0.104912 -1.08409,-0.216181 -1.6256,-0.325332 -5.39076,-1.07031 -10.7963,-2.10565 -16.168,-3.29676 -1.79303,-0.393153 -3.59031,-0.786307 -5.37804,-1.19853 -12.5247,-2.84851 -24.8979,-6.10924 -37.1016,-9.76525 -3.2459,-0.965398 -6.46319,-2.01133 -9.75995,-2.85804 -3.20245,-0.822337 -6.32754,-1.87569 -9.3721,-3.17596 -0.837173,-0.359242 -1.71991,-0.606155 -2.58676,-0.907114 -6.19402,-2.13108 -12.3393,-4.35542 -18.439,-6.68467 -0.69835,-0.263868 -1.38716,-0.547871 -2.08657,-0.812799 -5.51686,-2.13214 -10.9924,-4.34058 -16.4245,-6.63274 -0.715306,-0.300958 -1.43167,-0.592379 -2.14486,-0.890158 -12.0065,-5.11947 -23.8054,-10.6395 -35.388,-16.5273 -0.707888,-0.359242 -1.42107,-0.728022 -2.13002,-1.08726 -11.6017,-5.96512 -22.9777,-12.3001 -34.1121,-19.0017 -0.545752,-0.324272 -1.08832,-0.657022 -1.63196,-0.984473 -5.51474,-3.34551 -10.9807,-6.76944 -16.3768,-10.2866l0 0c-36.7,-23.9665 -70.545,-51.9344 -100.87,-83.339 -3.40168,16.6142 -14.4672,85.7424 23.4006,138.715l0 0.00741799 0.00211942 0c0,0 0.00529856,0.00953741 0.00741799,0.00953741 0.632648,0.890158 1.32252,1.74747 1.97954,2.62809 0.684574,0.907114 1.3416,1.82165 2.0569,2.72134 0.483229,0.599797 1.01203,1.189 1.51009,1.78879 0.950562,1.14767 1.88205,2.3017 2.88454,3.43241 0.594499,0.667619 1.24198,1.30768 1.84814,1.97742 0.963278,1.03428 1.90006,2.07916 2.91209,3.08906 1.01414,1.0258 2.09823,2.02829 3.16112,3.02972 0.666559,0.624171 1.29815,1.26636 1.97954,1.89265 1.04594,0.948443 2.16605,1.86615 3.25862,2.79022 0.766172,0.640066 1.49207,1.30768 2.27732,1.94033 0.849889,0.694112 1.76654,1.35431 2.63974,2.02087 1.1021,0.84671 2.16923,1.70402 3.30948,2.52635 0.667619,0.487468 1.38504,0.941025 2.06962,1.41154 1.41154,0.982353 2.81142,1.97742 4.29183,2.91845 0.999309,0.650663 2.06962,1.25046 3.10284,1.87357 1.23033,0.754515 2.42356,1.51645 3.69734,2.23387 0.505483,0.291421 1.05547,0.556349 1.56731,0.840352 4.23355,2.33561 8.66421,4.57054 13.3831,6.63274 1.22503,0.530916 2.52317,1.0258 3.77787,1.54082 1.46452,0.598737 2.89619,1.22291 4.4084,1.78773 0.841412,0.325332 1.74429,0.609335 2.60053,0.917711 1.99862,0.717425 3.98876,1.45287 6.06791,2.11942 0.549991,0.189689 1.14767,0.345466 1.70508,0.51502 8.45332,2.65352 17.5287,4.92978 27.3575,6.70056 3.49599,0.633708 7.07994,1.20807 10.7529,1.72097 13.9628,1.93503 29.2078,3.01276 45.9534,3.01276 4.96157,0 9.7875,-0.0243734 14.552,-0.0678216 53.9309,-0.460975 95.3752,-3.3116 129.213,-4.20176 0.0233137,0 0.0508662,0 0.0720604,-0.0105971l0.00529856 0c1.39988,-0.10915 2.95766,-0.237376 4.53875,-0.365601 0.631589,-0.0508662 1.3151,-0.104912 1.97742,-0.155778 1.28331,-0.101732 2.63762,-0.213002 4.02055,-0.314735 0.720604,-0.0614633 1.43803,-0.11233 2.18301,-0.163196 1.74747,-0.137763 3.57123,-0.267047 5.45434,-0.395273 0.391034,-0.0243734 0.747097,-0.0582842 1.14555,-0.084777 2.16605,-0.14624 4.44655,-0.281883 6.7758,-0.419646 0.827635,-0.0508662 1.68388,-0.0953741 2.53059,-0.14624 1.65951,-0.084777 3.35823,-0.179091 5.0951,-0.25645 0.967517,-0.0508662 1.94563,-0.092195 2.93752,-0.135643 1.92444,-0.0858367 3.90398,-0.163196 5.91002,-0.231017 0.784187,-0.0264928 1.54082,-0.0604036 2.33455,-0.077359 2.66094,-0.084777 5.39606,-0.14624 8.17886,-0.197106 1.04806,-0.0169554 2.13214,-0.0169554 3.19927,-0.0339108 1.90536,-0.0264928 3.83404,-0.0339108 5.78921,-0.0339108 1.23033,-0.00953741 2.46701,0 3.71641,0.00741799 2.02087,0.00953741 4.06612,0.0339108 6.12938,0.0678216 1.12965,0.0169554 2.24129,0.0264928 3.38896,0.0540453 3.01276,0.0752396 6.06791,0.169554 9.15909,0.297779 1.17098,0.0508662 2.36952,0.118688 3.55851,0.172733 2.1332,0.101732 4.28018,0.22042 6.45365,0.359242 1.37127,0.0752396 2.74889,0.169554 4.13394,0.273406 2.16711,0.152599 4.35754,0.325332 6.55538,0.511841 1.26954,0.104912 2.52635,0.206644 3.80225,0.325332 78.1856,7.31943 143.473,20.2341 180.576,119.988 0.162136,-0.0243734 -0.0604036,0.00953741 0.101732,-0.00741799 -1.32676,-47.3999 -18.0162,-100.661 -34.5095,-132.356z\" />\n <path id=\"_258514728\" fill=\"#CBA96B\" fill-rule=\"nonzero\" d=\"M166.531 125.26c-6.82137,6.44411 -13.0641,13.1712 -19.3896,19.4288 -4.55888,4.32257 -8.25834,9.23645 -12.2111,13.736 -3.88385,4.5716 -7.68291,9.04041 -11.3834,13.3884 -6.99622,9.02769 -13.3068,17.8615 -19.4182,26.035 -5.61648,8.51585 -10.578,16.6894 -15.3287,24.154 -2.45747,3.66131 -4.41794,7.48051 -6.31271,11.11 -1.91172,3.62634 -3.73866,7.07676 -5.466,10.364 -7.32049,13.1383 -11.2775,23.5023 -14.5424,30.5557 -3.12721,7.05239 -4.79732,10.8175 -4.79732,10.8175 -0.062523,0.155778 -0.137763,0.334869 -0.198166,0.498065 -1.86403,4.92978 0.623111,10.4318 5.55607,12.298 4.9319,1.85768 10.4371,-0.633708 12.3001,-5.56349 0,0 1.45287,-3.85311 4.17739,-11.0655 2.85592,-7.10431 6.29363,-18.2228 12.6477,-30.4794 1.50267,-3.159 3.08906,-6.47802 4.74645,-9.97189 1.64149,-3.50129 3.32538,-7.17213 5.56243,-10.8186 4.27276,-7.36818 8.72249,-15.4474 13.7975,-23.905 5.57303,-8.11316 11.3135,-16.9194 17.7237,-25.9502 3.47374,-4.32257 7.03119,-8.74793 10.6798,-13.2824 3.71641,-4.46881 7.18591,-9.34772 11.5021,-13.6449 4.52709,-4.69664 9.01073,-9.67093 13.7127,-14.6007 -1.28861,-4.48364 -2.40873,-8.89205 -3.35823,-13.1033z\" />\n </g>\n </g>\n </svg>\n <a href=\"https://www.{{ this.appConfig['appDomain'] }}\" target=\"_blank\" title=\"{{ this.appConfig['appName'] | titlecase }}\" rel=\"noopener\">{{ this.appConfig['appDomain'] | titlecase }}</a>\n </div>\n</div>\n","import {\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\n\n@Component({\n selector: 'sd-app-error',\n templateUrl: './error.component.html',\n styleUrl: './error.component.css',\n standalone: false,\n})\nexport class ErrorComponent implements OnChanges {\n @Input('error') error!: any | null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n // console.debug('changes:', changes);\n this.cdr.detectChanges();\n }\n}\n","<main class=\"container_error\" [ngSwitch]=\"error?.status\">\n <ng-container *ngSwitchCase=\"400\">\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image\" src=\"https://assets.snugdesk.com/error-images/error_bad-request.png\" alt=\"Bad Request\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">Invalid Request</h1>\n <span class=\"sd_error_message\">Oops! Invalid or missing parameters. Please check and try again.</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"403\">\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image\" src=\"https://assets.snugdesk.com/error-images/error_forbidden.png\" alt=\"Access Forbidden\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">Access Denied</h1>\n <span class=\"sd_error_message\">Oops! You don't have permission to access this page.</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"404\">\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image\" src=\"https://assets.snugdesk.com/error-images/error_page-not-found.png\" alt=\"Page Not Found\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">Page Not Found</h1>\n <span class=\"sd_error_message\">Oops! The page you're looking for can't be found. It may have been removed, or you may have typed the URL\n incorrectly.</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"409\">\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image\" src=\"https://assets.snugdesk.com/error-images/error_bad-request.png\" alt=\"Configuration Error\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">Configuration Error</h1>\n <span class=\"sd_error_message\">Oops! Invalid configuration detected. Please review your settings or contact support.</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"0\">\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image sd_error_image_grayscale\" src=\"https://assets.snugdesk.com/error-images/error_no-internet.png\" alt=\"No Internet\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">No Internet</h1>\n <span class=\"sd_error_message\">Oops! You are not connected to the internet. Please check your network connection and try again.</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <div class=\"sd_container_error_image\">\n <img class=\"sd_error_image\" src=\"https://assets.snugdesk.com/error-images/error_internal-server.png\" alt=\"Internal Server Error\" />\n </div>\n <div class=\"sd_container_error_message\" aria-live=\"polite\">\n <h1 class=\"sd_error_title\">Internal Server Error</h1>\n <span class=\"sd_error_message\">Oops! We're sorry, but the server encountered an error.</span>\n </div>\n </ng-container>\n</main>\n\n<sd-app-footer></sd-app-footer>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'sd-app-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.css'],\n standalone: false,\n})\nexport class LoaderComponent {}\n","<div class=\"sd_container_loader\">\n <!-- <div class=\"sd_loader_logo\">\n <span class=\"sd_logo\"></span>\n </div> -->\n <div class=\"sd_container_css_loader\">\n <div class=\"sd_cssload_loader\">\n <div class=\"sd_cssload_dot\"></div>\n <div class=\"sd_cssload_dot\"></div>\n <div class=\"sd_cssload_dot\"></div>\n <div class=\"sd_cssload_dot\"></div>\n <div class=\"sd_cssload_dot\"></div>\n </div>\n </div>\n <sd-app-footer></sd-app-footer>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'domainName',\n standalone: false\n})\nexport class DomainNamePipe implements PipeTransform {\n transform(value: string, args?: any): string {\n return value.replace(/[/ /^\\W\\s\\_]/gi, '');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport momentTimezone from 'moment-timezone';\n\n@Pipe({\n name: 'formatEpochTimestamp',\n standalone: false\n})\nexport class FormatEpochTimestampPipe implements PipeTransform {\n transform(value: string | number, format?: any, timezone?: any): string {\n // console.debug(`Got value: ${value}`);\n // console.debug(`Got format: ${format}`);\n // console.debug(`Got timezone: ${timezone}`);\n\n if (!value) {\n return '';\n } else {\n const myEpochTimestamp: number = Number(value);\n // console.debug(`Parsed myEpochTimestamp: ${myEpochTimestamp}`);\n\n if (timezone) {\n const myTimezone = timezone;\n // console.debug(`Parsed myTimezone: ${myTimezone}`);\n\n return momentTimezone\n .unix(myEpochTimestamp)\n .tz(myTimezone)\n .format(this.getFormatString(format));\n } else {\n return momentTimezone\n .unix(myEpochTimestamp)\n .format(this.getFormatString(format));\n }\n }\n }\n\n getFormatString(format: string): string {\n switch (format) {\n case 'short':\n return 'M/D/yy h:mm A';\n case 'medium':\n return 'MMM D, y h:mm A';\n case 'long':\n return 'dddd, MMMM D, y h:mm A z';\n case 'full':\n return 'dddd, MMMM D, y h:mm:ss A z Z';\n case 'shortDate':\n return 'M/D/yy';\n case 'mediumDate':\n return 'MMM D, y';\n case 'longDate':\n return 'dddd, MMMM D, y';\n case 'fullDate':\n return 'dddd, MMMM D, y';\n case 'shortTime':\n return 'h:mm A';\n case 'mediumTime':\n return 'h:mm A';\n case 'longTime':\n return 'h:mm A z';\n case 'fullTime':\n return 'h:mm:ss A z Z';\n case 'iso':\n return 'yyyy-MM-DDThh:mm:ss';\n case 'timeDate':\n return 'h:mm A D/M/YYYY';\n case 'dateTime':\n return 'D/M/YY h:mm A';\n case 'date':\n return 'DD MMM YYYY'\n case 'mediumTimeDate':\n return 'h:mm A MMM D, y';\n case 'dayDateTime':\n return 'ddd MMM DD, YYYY hh:mm A'\n default:\n return 'MMMM d, y, h:mm:ss A z Z';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml',\n standalone: false\n})\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitized: DomSanitizer) {}\n\n transform(value: any, args?: any): any {\n return this.sanitized.bypassSecurityTrustHtml(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'SearchFilter',\n standalone: false\n})\nexport class SearchPipe implements PipeTransform {\n transform(items: any[], field: string, value: string): any[] {\n if (!items) return [];\n if (!value) return items;\n\n return items.filter((item) => {\n return item[field].toLowerCase().includes(value.toLowerCase());\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'SearchFilterInnerField',\n standalone: false\n})\nexport class SearchInnerFieldPipe implements PipeTransform {\n transform(\n items: any[],\n field: string,\n innerfield: string,\n value: string\n ): any[] {\n if (!items) return [];\n if (!value) return items;\n\n const query = value.toLowerCase();\n return items.filter((item) => {\n const innerValue = item?.[field]?.[innerfield];\n if (innerValue === null || innerValue === undefined) return false;\n return String(innerValue).toLowerCase().includes(query);\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'singularize',\n standalone: false\n})\nexport class SingularizePipe implements PipeTransform {\n public transform(value: any, count: number = 1): string {\n return count > 1 ? plural(value) : singular(value);\n }\n}\n\n/**\n * Returns the singular of an English word.\n *\n * @export\n * @param {string} word\n * @param {number} [amount]\n * @returns {string}\n */\nfunction singular(word: string, amount?: number): string {\n if (amount !== undefined && amount !== 1) {\n return word;\n }\n const singular: { [key: string]: string } = {\n '(quiz)zes$': '$1',\n '(matr)ices$': '$1ix',\n '(vert|ind)ices$': '$1ex',\n '^(ox)en$': '$1',\n '(alias)es$': '$1',\n '(octop|vir)i$': '$1us',\n '(cris|ax|test)es$': '$1is',\n '(shoe)s$': '$1',\n '(o)es$': '$1',\n '(bus)es$': '$1',\n '([m|l])ice$': '$1ouse',\n '(x|ch|ss|sh)es$': '$1',\n '(m)ovies$': '$1ovie',\n '(s)eries$': '$1eries',\n '([^aeiouy]|qu)ies$': '$1y',\n '([lr])ves$': '$1f',\n '(tive)s$': '$1',\n '(hive)s$': '$1',\n '(li|wi|kni)ves$': '$1fe',\n '(shea|loa|lea|thie)ves$': '$1f',\n '(^analy)ses$': '$1sis',\n '((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$': '$1$2sis',\n '([ti])a$': '$1um',\n '(n)ews$': '$1ews',\n '(h|bl)ouses$': '$1ouse',\n '(corpse)s$': '$1',\n '(us)es$': '$1',\n s$: '',\n };\n const irregular: { [key: string]: string } = {\n move: 'moves',\n foot: 'feet',\n goose: 'geese',\n sex: 'sexes',\n child: 'children',\n man: 'men',\n tooth: 'teeth',\n person: 'people',\n };\n const uncountable: string[] = [\n 'sheep',\n 'fish',\n 'deer',\n 'moose',\n 'series',\n 'species',\n 'money',\n 'rice',\n 'information',\n 'equipment',\n 'bison',\n 'cod',\n 'offspring',\n 'pike',\n 'salmon',\n 'shrimp',\n 'swine',\n 'trout',\n 'aircraft',\n 'hovercraft',\n 'spacecraft',\n 'sugar',\n 'tuna',\n 'you',\n 'wood',\n ];\n // save some time in the case that singular and plural are the same\n if (uncountable.indexOf(word.toLowerCase()) >= 0) {\n return word;\n }\n // check for irregular forms\n for (const w in irregular) {\n const pattern = new RegExp(`${irregular[w]}$`, 'i');\n const replace = w;\n if (pattern.test(word)) {\n return word.replace(pattern, replace);\n }\n }\n // check for matches using regular expressions\n for (const reg in singular) {\n const pattern = new RegExp(reg, 'i');\n if (pattern.test(word)) {\n return word.replace(pattern, singular[reg]);\n }\n }\n return word;\n}\n\n/**\n * Returns the plural of an English word.\n *\n * @export\n * @param {string} word\n * @param {number} [amount]\n * @returns {string}\n */\nfunction plural(word: string, amount?: number): string {\n if (amount !== undefined && amount === 1) {\n return word;\n }\n const plural: { [key: string]: string } = {\n '(quiz)$': '$1zes',\n '^(ox)$': '$1en',\n '([m|l])ouse$': '$1ice',\n '(matr|vert|ind)ix|ex$': '$1ices',\n '(x|ch|ss|sh)$': '$1es',\n '([^aeiouy]|qu)y$': '$1ies',\n '(hive)$': '$1s',\n '(?:([^f])fe|([lr])f)$': '$1$2ves',\n '(shea|lea|loa|thie)f$': '$1ves',\n sis$: 'ses',\n '([ti])um$': '$1a',\n '(tomat|potat|ech|her|vet)o$': '$1oes',\n '(bu)s$': '$1ses',\n '(alias)$': '$1es',\n '(octop)us$': '$1i',\n '(ax|test)is$': '$1es',\n '(us)$': '$1es',\n '([^s]+)$': '$1s',\n };\n const irregular: { [key: string]: string } = {\n move: 'moves',\n foot: 'feet',\n goose: 'geese',\n sex: 'sexes',\n child: 'children',\n man: 'men',\n tooth: 'teeth',\n person: 'people',\n };\n const uncountable: string[] = [\n 'sheep',\n 'fish',\n 'deer',\n 'moose',\n 'series',\n 'species',\n 'money',\n 'rice',\n 'information',\n 'equipment',\n 'bison',\n 'cod',\n 'offspring',\n 'pike',\n 'salmon',\n 'shrimp',\n 'swine',\n 'trout',\n 'aircraft',\n 'hovercraft',\n 'spacecraft',\n 'sugar',\n 'tuna',\n 'you',\n 'wood',\n ];\n // save some time in the case that singular and plural are the same\n if (uncountable.indexOf(word.toLowerCase()) >= 0) {\n return word;\n }\n // check for irregular forms\n for (const w in irregular) {\n const pattern = new RegExp(`${w}$`, 'i');\n const replace = irregular[w];\n if (pattern.test(word)) {\n return word.replace(pattern, replace);\n }\n }\n // check for matches using regular expressions\n for (const reg in plural) {\n const pattern = new RegExp(reg, 'i');\n if (pattern.test(word)) {\n return word.replace(pattern, plural[reg]);\n }\n }\n return word;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DomainNamePipe } from './domain-name.pipe';\nimport { FormatEpochTimestampPipe } from './epoch-formatter.pipe';\nimport { SafeHtmlPipe } from './safe-html.pipe';\nimport { SearchPipe } from './search.pipe';\nimport { SearchInnerFieldPipe } from './search-inner.pipe';\nimport { SingularizePipe } from './singularize.pipe';\n\n@NgModule({\n declarations: [\n DomainNamePipe,\n FormatEpochTimestampPipe,\n SafeHtmlPipe,\n SearchPipe,\n SearchInnerFieldPipe,\n SingularizePipe,\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n DomainNamePipe,\n FormatEpochTimestampPipe,\n SafeHtmlPipe,\n SearchPipe,\n SearchInnerFieldPipe,\n SingularizePipe,\n ],\n providers: [],\n})\nexport class CustomPipesModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { ErrorComponent } from './components/error/error.component';\nimport { FooterComponent } from './components/footer/footer.component';\nimport { LoaderComponent } from './components/loader/loader.component';\n\nimport { CustomPipesModule } from './pipes/custom-pipes.module';\n\n@NgModule({\n declarations: [ErrorComponent, FooterComponent, LoaderComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),\n CustomPipesModule,\n ],\n exports: [ErrorComponent, FooterComponent, LoaderComponent],\n})\nexport class SnugdeskCoreModule {}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { List, ModelIntKeyConditionInput, ModelSortDirection, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport { ModelUserSessionConditionInput, ModelUserSessionFilterInput, UpdateUserSessionInput, UserSession } from '../../models/dynamodb/user-session.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\n\nexport const FIELDS_USER_SESSION = `\n id\n tenantId\n userId\n ipDetails\n status\n statusKey\n lastInteractionHandledAt\n teamIds\n temp_isLocked\n temp_isAvailableTenantIdUnion\n createdAt\n updatedAt\n expiryAt\n loggedOutAt\n blockedAt\n`;\n\ntype __SubscriptionContainer = {\n OnUserSessionById: UserSession;\n};\n@Injectable({\n providedIn: 'root',\n})\nexport class UserSessionService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetUserSession(id: string): Promise<UserSession> {\n const statement = `query GetUserSession($id: ID!) {\n getUserSession(id: $id) {\n ${FIELDS_USER_SESSION}\n }\n }`;\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <UserSession>response.data.getUserSession;\n }\n\n async UpdateUserSession(input: UpdateUserSessionInput, condition?: ModelUserSessionConditionInput): Promise<UserSession> {\n const statement = `mutation UpdateUserSession($input: UpdateUserSessionInput!, $condition: ModelUserSessionConditionInput) {\n updateUserSession(input: $input, condition: $condition) {\n ${FIELDS_USER_SESSION}\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n input,\n };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <UserSession>response.data.updateUserSession;\n }\n\n async ListUserSessionsByUserId(userId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelUserSessionFilterInput, limit?: number, nextToken?: string): Promise<List<UserSession>> {\n const statement = `query ListUserSessionsByUserId($userId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelUserSessionFilterInput, $limit: Int, $nextToken: String) {\n listUserSessionsByUserId(userId: $userId, createdAt: $createdAt, sortDirection: $sortDirection, filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n ${FIELDS_USER_SESSION}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n userId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<UserSession>>response.data.listUserSessionsByUserId;\n }\n\n OnUserSessionByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserSessionById'>>> {\n const statement = `subscription OnUserSessionById($id: ID!) {\n OnUserSessionById(id: $id) {\n ${FIELDS_USER_SESSION}\n }\n }`;\n const gqlAPIServiceArguments: any = { id };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserSessionById'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserSessionById'>>>; */\n }\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { JwtHelperService } from '@auth0/angular-jwt';\n\nimport { UserSessionService } from './dynamodb/user-session.service';\nimport moment from 'moment';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnugdeskAuthenticationService {\n isAuthenticated$ = new BehaviorSubject<boolean>(false);\n\n tenant$ = new BehaviorSubject<any>(undefined);\n user$ = new BehaviorSubject<any>(undefined);\n userSession$ = new BehaviorSubject<any>(undefined);\n\n tenantSubscription!: Subscription;\n userSubscription!: Subscription;\n userSessionSubscription!: Subscription;\n\n private readonly jwtHelper: JwtHelperService = new JwtHelperService();\n private readonly TOKEN_KEY = 'sd-authSessionToken';\n\n // UserSessionService is resolved lazily (via Injector) inside endUserSession() rather than\n // constructor-injected, because AppSyncHelperService -> SnugdeskAuthenticationService ->\n // UserSessionService -> AppSyncHelperService would otherwise form a circular DI dependency\n // (NG0200) at bootstrap. Logout is a rare path, so lazy resolution is a clean break.\n constructor(private readonly injector: Injector) {\n this.isAuthenticated$.next(this.isAuthenticated());\n }\n\n // the host supplies a fresh token on every init, so persistence buys nothing.\n getToken(): string | null {\n return sessionStorage.getItem(this.TOKEN_KEY);\n }\n\n setToken(token: string): void {\n const isValid = this.checkToken(token);\n\n token ? sessionStorage.setItem(this.TOKEN_KEY, token) : sessionStorage.removeItem(this.TOKEN_KEY);\n this.isAuthenticated$.next(isValid);\n }\n\n checkToken(token: string): boolean {\n if (!token) {\n console.warn('Token validation error: Token is empty');\n return false;\n }\n\n if (this.jwtHelper.isTokenExpired(token)) {\n console.warn('Token validation error: Token is expired');\n return false;\n }\n\n const decodedToken = this.jwtHelper.decodeToken(token);\n const { tenantId, userId, userSessionId } = decodedToken || {};\n\n if (!tenantId || !userId || !userSessionId) {\n console.warn('Token validation error: Invalid token structure', decodedToken);\n return false;\n }\n\n return true;\n }\n\n getDecodedToken(): any {\n /* if (!this.isAuthenticated()) {\n let err: any = new Error(`User not authenticated`);\n err.status = 403;\n throw err;\n } */\n\n return this.jwtHelper.decodeToken(this.getToken());\n }\n\n getTenantId(): string {\n // return this.getDecodedAuthSessionToken().tenantId;\n return this.getDecodedToken()?.tenantId;\n }\n\n getUserId(): string {\n return this.getDecodedToken()?.userId;\n }\n\n getUserSessionId(): string {\n return this.getDecodedToken()?.userSessionId;\n }\n\n getUserPreferences(): any {\n if (!this.isAuthenticated()) {\n let err: any = new Error(`User not authenticated`);\n err.status = 403;\n throw err;\n }\n\n const tenant = this.tenant$.getValue();\n const user = this.user$.getValue();\n\n return tenant?.preferences?.allowUserToChangePreferences ? user?.preferences || tenant?.preferences : tenant?.preferences;\n }\n\n isAuthenticated(): boolean {\n try {\n const mySessionToken = this.getToken();\n // console.log(`Got sessionToken: ${sessionToken}`);\n\n if (!mySessionToken) {\n throw new Error('Session token not found');\n } else if (this.jwtHelper.isTokenExpired(mySessionToken)) {\n throw new Error('Session token expired');\n }\n\n this.isAuthenticated$.next(true);\n return true;\n } catch (err) {\n console.warn(err);\n this.isAuthenticated$.next(false);\n return false;\n }\n }\n\n /**\n * Establishes a session from a token issued by the host's backend. The token\n * carries tenantId, userId and userSessionId, so nothing else is needed — read\n * them back with getTenantId() / getUserId() once this resolves.\n */\n async authenticate(token: string): Promise<boolean> {\n if (!this.checkToken(token)) {\n console.error('A Snugdesk-issued token is required. Fetch one from your backend via POST /auth/library using your tenant integration credential, then pass it to the widget.');\n return false;\n }\n\n // A newly supplied token always replaces whatever is stored, so switching\n // user in the same tab works without the host clearing storage first.\n this.setToken(token);\n this.isAuthenticated$.next(true);\n return true;\n }\n\n async logout(userSessionId?: string): Promise<void> {\n await this.endUserSession(userSessionId);\n this.userSubscription?.unsubscribe();\n this.user$.next(null);\n }\n\n async endUserSession(userSessionId?: string) {\n try {\n if (!userSessionId) {\n const sessionToken = this.getToken();\n if (!sessionToken) return;\n\n const decodedToken = this.jwtHelper.decodeToken(sessionToken);\n userSessionId = decodedToken.userSessionId;\n }\n // CD - checked with claude, everything is in place, no change in status required as it has no relevance after logout.\n const now = moment.utc().unix();\n const userSessionService = this.injector.get(UserSessionService);\n await userSessionService.UpdateUserSession({\n id: userSessionId,\n temp_isLocked: null,\n temp_isAvailableTenantIdUnion: null,\n loggedOutAt: now,\n updatedAt: now,\n });\n } catch (error) {\n console.error(error);\n } finally {\n sessionStorage.removeItem(this.TOKEN_KEY);\n this.userSessionSubscription?.unsubscribe();\n this.isAuthenticated$?.next(false);\n this.userSession$?.next(null);\n }\n }\n}\n","import { Inject, Injectable, InjectionToken, Optional, ValueProvider } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { SnugdeskAmplifyConfig } from '../../app.config';\nimport { SnugdeskAuthenticationService } from '../services/authentication.service';\n\nimport { Amplify, API } from 'aws-amplify';\nimport { GRAPHQL_AUTH_MODE, GraphQLResult } from '@aws-amplify/api-graphql';\n\nexport interface AmplifyConfig {\n aws_project_region: string;\n aws_appsync_graphqlEndpoint: string;\n aws_appsync_region: string;\n aws_appsync_authenticationType: string;\n aws_appsync_apiKey?: string;\n}\n\nexport const AMPLIFY_CONFIG = new InjectionToken<AmplifyConfig>('AMPLIFY_CONFIG');\n\nexport function provideAmplifyConfig(config: AmplifyConfig): ValueProvider {\n return {\n provide: AMPLIFY_CONFIG,\n useValue: config,\n };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AppSyncHelperService {\n private configured = false;\n private authMode = GRAPHQL_AUTH_MODE.AWS_LAMBDA;\n\n private readonly amplifyConfig?: AmplifyConfig | null;\n\n constructor(\n @Optional()\n @Inject(AMPLIFY_CONFIG)\n amplifyConfig: AmplifyConfig | null,\n private readonly authenticationService: SnugdeskAuthenticationService\n ) {\n this.amplifyConfig = amplifyConfig;\n // this.ensureConfigured();\n }\n\n async query<T>(statement: string, variables?: Record<string, unknown>): Promise<GraphQLResult<T>> {\n this.ensureConfigured();\n // console.debug('token: ', token);\n try {\n return (await API.graphql({\n query: statement,\n variables,\n authMode: this.authMode,\n ...(this.authMode === GRAPHQL_AUTH_MODE.AWS_LAMBDA ? { authToken: this.getToken() } : {}),\n })) as GraphQLResult<T>;\n } catch (err: any) {\n const normalizedErrors =\n err?.errors?.map((e: any) => ({\n message: e?.message,\n errorType: e?.errorType,\n data: e?.data,\n path: e?.path,\n })) ??\n err?.response?.data?.errors ??\n err?.errors;\n const errorMessage = err?.message ?? normalizedErrors?.[0]?.message;\n console.error('AppSync query failed', {\n statement,\n variables,\n message: errorMessage,\n status: err?.response?.status,\n response: err?.response?.data,\n errors: normalizedErrors,\n });\n if (err) {\n console.error('AppSync query failed (raw error)', err);\n }\n // Return partial data if available (e.g. non-nullable field errors on nested items)\n if (err?.data) {\n return { data: err.data, errors: normalizedErrors } as GraphQLResult<T>;\n }\n throw err;\n }\n }\n\n async mutate<T>(statement: string, variables?: Record<string, unknown>): Promise<GraphQLResult<T>> {\n return this.query<T>(statement, variables);\n }\n\n subscribe<T>(statement: string, variables?: Record<string, unknown>): Observable<GraphQLResult<T>> {\n this.ensureConfigured();\n try {\n return API.graphql({\n query: statement,\n variables,\n authMode: this.authMode,\n ...(this.authMode === GRAPHQL_AUTH_MODE.AWS_LAMBDA ? { authToken: this.getToken() } : {}),\n }) as unknown as Observable<GraphQLResult<T>>;\n } catch (err: any) {\n const normalizedErrors =\n err?.errors?.map((e: any) => ({\n message: e?.message,\n errorType: e?.errorType,\n data: e?.data,\n path: e?.path,\n })) ??\n err?.response?.data?.errors ??\n err?.errors;\n const errorMessage = err?.message ?? normalizedErrors?.[0]?.message;\n console.error('AppSync subscription failed', {\n statement,\n variables,\n message: errorMessage,\n status: err?.response?.status,\n response: err?.response?.data,\n errors: normalizedErrors,\n });\n if (err) {\n console.error('AppSync subscription failed (raw error)', err);\n }\n throw err;\n }\n }\n\n private ensureConfigured(): void {\n if (this.configured) {\n return;\n }\n\n if (this.amplifyConfig) {\n Amplify.configure(this.amplifyConfig);\n this.authMode = this.normalizeAuthMode(this.getAuthModeFromConfig(this.amplifyConfig));\n this.configured = true;\n return;\n }\n\n const hostConfig = this.getHostConfig();\n if (hostConfig.useHost) {\n this.authMode = this.normalizeAuthMode(hostConfig.authMode);\n this.configured = true;\n return;\n }\n\n Amplify.configure({\n ...SnugdeskAmplifyConfig,\n aws_appsync_authenticationType: this.normalizeAuthMode(SnugdeskAmplifyConfig.aws_appsync_authenticationType),\n API: {\n GraphQL: {\n endpoint: SnugdeskAmplifyConfig.aws_appsync_graphqlEndpoint,\n region: SnugdeskAmplifyConfig.aws_appsync_region,\n defaultAuthMode: this.normalizeAuthMode(SnugdeskAmplifyConfig.aws_appsync_authenticationType),\n graphql_headers: async () => this.buildAuthHeaders(),\n functionAuthProvider: async () => ({\n token: this.getToken(),\n }),\n },\n },\n });\n\n this.authMode = this.normalizeAuthMode(SnugdeskAmplifyConfig.aws_appsync_authenticationType);\n this.configured = true;\n }\n\n private getHostConfig(): { useHost: boolean; authMode?: string } {\n const existing = (Amplify as any).getConfig?.() ?? {};\n const existingEndpoint = existing?.API?.GraphQL?.endpoint ?? existing?.API?.GraphQL?.graphql_endpoint ?? existing?.aws_appsync_graphqlEndpoint;\n const existingAuthMode = existing?.API?.GraphQL?.defaultAuthMode ?? existing?.aws_appsync_authenticationType;\n\n return {\n useHost: existingEndpoint === SnugdeskAmplifyConfig.aws_appsync_graphqlEndpoint,\n authMode: existingAuthMode,\n };\n }\n\n private normalizeAuthMode(mode?: string): GRAPHQL_AUTH_MODE | undefined {\n if (!mode) {\n return undefined;\n }\n\n switch (mode) {\n case 'API_KEY':\n return GRAPHQL_AUTH_MODE.API_KEY;\n case 'AWS_IAM':\n return GRAPHQL_AUTH_MODE.AWS_IAM;\n case 'OPENID_CONNECT':\n return GRAPHQL_AUTH_MODE.OPENID_CONNECT;\n case 'AMAZON_COGNITO_USER_POOLS':\n return GRAPHQL_AUTH_MODE.AMAZON_COGNITO_USER_POOLS;\n case 'AWS_LAMBDA':\n return GRAPHQL_AUTH_MODE.AWS_LAMBDA;\n default:\n return undefined;\n }\n }\n\n private getAuthModeFromConfig(config: any): string | undefined {\n return (config as any)?.API?.GraphQL?.defaultAuthMode ?? (config as any)?.aws_appsync_authenticationType;\n }\n\n private buildAuthHeaders(): { Authorization: string } {\n const token = this.getToken();\n\n if (!token) {\n throw new Error('Missing authentication token for AppSync request.');\n }\n\n return {\n Authorization: token,\n };\n }\n\n private getToken(): string {\n const token = this.authenticationService.getToken();\n\n if (!token) {\n throw new Error('Missing authentication token for AppSync request.');\n }\n\n return token;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\nimport { SnugdeskAPIConfig } from '../../app.config';\n\nexport interface OpenSearchResponse {\n hits?: {\n total?: number | { value?: number };\n hits?: OpenSearchHit[];\n };\n}\n\nexport interface OpenSearchHit {\n id?: unknown;\n _id?: unknown;\n _source?: Record<string, unknown>;\n fields?: Record<string, unknown>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OpenSearchHelperService {\n private readonly jsonHeaders = new HttpHeaders({\n 'Content-Type': 'application/json',\n });\n\n constructor(private httpClient: HttpClient) {}\n\n private buildOpenSearchProxyEndpoint(index: string): string {\n return `${SnugdeskAPIConfig.endpoint}/opensearch/${index}`;\n }\n\n searchIndex(index: string, body: unknown): Promise<OpenSearchResponse> {\n return lastValueFrom(\n this.httpClient.post<OpenSearchResponse>(this.buildOpenSearchProxyEndpoint(index), body, {\n headers: this.jsonHeaders,\n })\n );\n }\n\n parseSearchResults(response: OpenSearchResponse | null | undefined): Array<Record<string, unknown>> {\n const hits = response?.hits?.hits ?? [];\n return hits.map(this.mapHitToSource);\n }\n\n parseTotalCount(response: OpenSearchResponse | null | undefined): number {\n const total = response?.hits?.total;\n if (typeof total === 'number') {\n return total;\n }\n if (total && typeof total.value === 'number') {\n return total.value;\n }\n return 0;\n }\n\n private mapHitToSource(hit: OpenSearchHit): Record<string, unknown> {\n const source = hit?.fields ?? hit?._source ?? {};\n const id = hit?.id ?? (source as { id?: unknown })?.id ?? hit?._id;\n return {\n ...source,\n id,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\nimport * as CryptoJS from 'crypto-js';\nimport { JwtHelperService } from '@auth0/angular-jwt';\n\nexport interface S3Credentials {\n accessKeyId: string;\n secretAccessKey: string;\n}\n\nexport interface S3Config {\n region: string;\n credentials: S3Credentials;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class S3HelperService {\n private readonly API_BASE = 'https://api.snugdesk.com/s3';\n private readonly jwt = new JwtHelperService();\n\n constructor(private http: HttpClient) {}\n\n async getS3Config(token: string, region: string): Promise<S3Config> {\n const decodedToken = this.parseToken(token);\n const { userSessionId } = decodedToken;\n\n const encryptedCredentials = await this.fetchEncryptedCredentials(token);\n if (!encryptedCredentials) {\n throw new Error('Invalid response: missing encrypted credentials.');\n }\n\n const credentials = this.decryptCredentials(\n encryptedCredentials,\n userSessionId\n );\n return { region, credentials };\n }\n\n /**\n * Validates and decodes the JWT token.\n * @throws Error if the token is empty, expired, or invalid.\n * @returns The decoded JWT payload.\n */\n private parseToken(token: string): any {\n if (!token) {\n throw new Error('Token validation failed: token is empty.');\n }\n\n if (this.jwt.isTokenExpired(token)) {\n throw new Error('Token validation failed: token is expired.');\n }\n\n const decoded = this.jwt.decodeToken(token);\n if (!decoded) {\n throw new Error('Token validation failed: unable to decode token.');\n }\n\n const { tenantId, userId, userSessionId } = decoded;\n if (!tenantId || !userId || !userSessionId) {\n throw new Error(\n 'Token validation failed: missing tenantId, userId, or userSessionId.'\n );\n }\n\n return decoded;\n }\n\n private async fetchEncryptedCredentials(\n token: string\n ): Promise<string | null> {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n });\n\n try {\n const res = await lastValueFrom(\n this.http.get<{\n data: { encrypted: boolean; credentials: string };\n message: string;\n }>(`${this.API_BASE}/credentials`, { headers })\n );\n\n return res?.data?.credentials || null;\n } catch (err: any) {\n console.error('Fetch error:', err.message || err);\n return null;\n }\n }\n\n private base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n\n private decryptCredentials(\n encryptedData: string,\n decryptionKey: string\n ): S3Credentials {\n try {\n // Decode Base64 → split into IV (first 16 bytes) + ciphertext\n const raw = this.base64ToBytes(encryptedData);\n const iv = raw.slice(0, 16);\n const ciphertext = raw.slice(16);\n\n // Derive 256-bit key from sessionId\n const derivedKeyHex = CryptoJS.SHA256(decryptionKey).toString(\n CryptoJS.enc.Hex\n );\n const derivedKey = CryptoJS.enc.Hex.parse(derivedKeyHex);\n\n // Convert IV & ciphertext into WordArrays\n const ivWordArray = CryptoJS.lib.WordArray.create(iv);\n const ciphertextWordArray = CryptoJS.lib.WordArray.create(ciphertext);\n\n // Perform AES-256-CBC decryption\n const decrypted = CryptoJS.AES.decrypt(\n { ciphertext: ciphertextWordArray },\n derivedKey,\n {\n iv: ivWordArray,\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n }\n );\n\n const plainText = decrypted.toString(CryptoJS.enc.Utf8);\n if (!plainText) {\n throw new Error('Failed to decrypt credentials: empty plaintext.');\n }\n\n return JSON.parse(plainText);\n } catch (err: any) {\n console.error('Decrypt error:', err.message || err);\n throw new Error('Decryption failed.');\n }\n }\n}\n","/**\n * Billing platform models (Stage 1) — mirrors the Amplify schema Billing* types.\n * Conventions: micros & timestamps are `number`; AWSJSON is `string | null`.\n * Reference: SNUGDESK_BILLING_PLATFORM_DESIGN.md v2.3.\n */\nimport { TenantBillingInformation } from './tenant.model';\n\n// ---------------------------------------------------------------------------\n// Enums\n// ---------------------------------------------------------------------------\n\nexport enum BillingAccountStatus {\n PENDING_KYC = 'PENDING_KYC',\n ACTIVE = 'ACTIVE',\n NO_BALANCE = 'NO_BALANCE',\n SUSPENDED = 'SUSPENDED',\n BLOCKED = 'BLOCKED',\n TERMINATED = 'TERMINATED',\n}\n\n// PREPAID pays before use; POSTPAID may run negative up to creditLimitMicros and is\n// not auto-suspended on balance. Absent = PREPAID.\nexport enum BillingMode {\n PREPAID = 'PREPAID',\n POSTPAID = 'POSTPAID',\n}\n\nexport enum BillingLedgerDirection {\n DEBIT = 'DEBIT',\n CREDIT = 'CREDIT',\n}\n\nexport enum BillingCreditClass {\n PAID = 'PAID',\n PROMO = 'PROMO',\n GOODWILL = 'GOODWILL',\n}\n\nexport enum BillingLedgerEntryType {\n TOPUP = 'TOPUP',\n USAGE_CHARGE = 'USAGE_CHARGE',\n SUBSCRIPTION_CHARGE = 'SUBSCRIPTION_CHARGE',\n REFUND = 'REFUND',\n ADJUSTMENT = 'ADJUSTMENT',\n CREDIT_NOTE = 'CREDIT_NOTE',\n REVERSAL = 'REVERSAL',\n RESERVATION = 'RESERVATION',\n RESERVATION_RELEASE = 'RESERVATION_RELEASE',\n WRITEOFF = 'WRITEOFF',\n FX_NOTE = 'FX_NOTE',\n}\n\nexport enum BillingEntityStatus {\n ACTIVE = 'ACTIVE',\n INACTIVE = 'INACTIVE',\n RETIRED = 'RETIRED',\n}\n\nexport enum BillingPriceBookType {\n DEFAULT_RETAIL = 'DEFAULT_RETAIL',\n CONTRACT = 'CONTRACT',\n PROMO = 'PROMO',\n}\n\nexport enum BillingPricingType {\n FLAT = 'FLAT',\n TIERED_VOLUME = 'TIERED_VOLUME',\n TIERED_GRADUATED = 'TIERED_GRADUATED',\n}\n\nexport enum BillingPeriodType {\n MONTHLY = 'MONTHLY',\n ANNUAL = 'ANNUAL',\n}\n\nexport enum BillingSubscriptionStatus {\n TRIALING = 'TRIALING',\n ACTIVE = 'ACTIVE',\n PAST_DUE = 'PAST_DUE',\n SUSPENDED = 'SUSPENDED',\n CANCELLED = 'CANCELLED',\n}\n\nexport enum BillingRatingStatus {\n PENDING = 'PENDING',\n RATED = 'RATED',\n UNRATABLE = 'UNRATABLE',\n ZERO_RATED = 'ZERO_RATED',\n}\n\nexport enum BillingChargeStatus {\n WALLET_DEBITED = 'WALLET_DEBITED',\n ACCRUED = 'ACCRUED',\n INCLUDED = 'INCLUDED',\n FAILED_NSF = 'FAILED_NSF',\n}\n\nexport enum BillingInvoiceType {\n SUBSCRIPTION = 'SUBSCRIPTION',\n USAGE = 'USAGE',\n TOPUP_RECEIPT = 'TOPUP_RECEIPT',\n CREDIT_NOTE = 'CREDIT_NOTE',\n}\n\nexport enum BillingInvoiceStatus {\n DRAFT = 'DRAFT',\n PENDING_APPROVAL = 'PENDING_APPROVAL',\n ISSUED = 'ISSUED',\n PAID = 'PAID',\n VOID = 'VOID',\n}\n\nexport enum BillingTaxTreatment {\n STANDARD = 'STANDARD',\n ZERO_RATED_EXPORT = 'ZERO_RATED_EXPORT',\n NOT_REGISTERED = 'NOT_REGISTERED',\n OUT_OF_SCOPE = 'OUT_OF_SCOPE',\n}\n\nexport enum BillingPaymentPurpose {\n TOPUP = 'TOPUP',\n AUTO_TOPUP = 'AUTO_TOPUP',\n MANUAL = 'MANUAL',\n}\n\nexport enum BillingPaymentRail {\n CARD = 'CARD',\n BANK_TRANSFER = 'BANK_TRANSFER',\n MANUAL = 'MANUAL',\n}\n\nexport enum BillingPaymentDirection {\n CHARGE = 'CHARGE',\n REFUND = 'REFUND',\n}\n\nexport enum BillingPaymentStatus {\n REQUIRES_ACTION = 'REQUIRES_ACTION',\n PROCESSING = 'PROCESSING',\n SUCCEEDED = 'SUCCEEDED',\n FAILED = 'FAILED',\n EXPIRED = 'EXPIRED',\n DISPUTED = 'DISPUTED',\n REFUNDED = 'REFUNDED',\n}\n\nexport enum BillingPaymentMethodStatus {\n ACTIVE = 'ACTIVE',\n DETACHED = 'DETACHED',\n EXPIRED = 'EXPIRED',\n}\n\nexport enum BillingReceiptMatchStatus {\n AUTO_MATCHED = 'AUTO_MATCHED',\n UNMATCHED = 'UNMATCHED',\n MANUALLY_MATCHED = 'MANUALLY_MATCHED',\n REFUND_REQUIRED = 'REFUND_REQUIRED',\n}\n\nexport enum BillingAdminActionType {\n MANUAL_CREDIT = 'MANUAL_CREDIT',\n MANUAL_DEBIT = 'MANUAL_DEBIT',\n REFUND = 'REFUND',\n WRITEOFF = 'WRITEOFF',\n RATE_OVERRIDE = 'RATE_OVERRIDE',\n BALANCE_ADJUST = 'BALANCE_ADJUST',\n CONFIG_CHANGE = 'CONFIG_CHANGE',\n PERIOD_LOCK = 'PERIOD_LOCK',\n RERATE_PERIOD = 'RERATE_PERIOD',\n}\n\nexport enum BillingAdminActionStatus {\n PENDING_APPROVAL = 'PENDING_APPROVAL',\n APPROVED = 'APPROVED',\n EXECUTED = 'EXECUTED',\n REJECTED = 'REJECTED',\n EXPIRED = 'EXPIRED',\n}\n\nexport enum BillingKycCaseType {\n ONBOARDING = 'ONBOARDING',\n RE_KYC = 'RE_KYC',\n}\n\nexport enum BillingKycCaseStatus {\n PENDING_SUBMISSION = 'PENDING_SUBMISSION',\n SUBMITTED = 'SUBMITTED',\n IN_REVIEW = 'IN_REVIEW',\n AUTO_APPROVED = 'AUTO_APPROVED',\n APPROVED = 'APPROVED',\n REJECTED = 'REJECTED',\n NEEDS_MORE_INFO = 'NEEDS_MORE_INFO',\n EXPIRED = 'EXPIRED',\n}\n\n// ---------------------------------------------------------------------------\n// Models (all money & timestamps are `number`; AWSJSON is `string | null`)\n// ---------------------------------------------------------------------------\n\nexport type BillingAccount = {\n id: string;\n tenantId: string;\n accountStatus: BillingAccountStatus;\n profile?: TenantBillingInformation | null;\n contractPriceBookId?: string | null;\n gatewayCustomerId?: string | null;\n bankTransferCode?: string | null;\n // Service state. All nullable — additive, no backfill.\n suspendedReason?: string | null; // why SUSPENDED: 'ARREARS_CEILING' (automatic) | 'admin-suspended' | operator text\n blockReason?: string | null; // why BLOCKED: compliance/abuse. Never cleared by a payment\n billingMode?: BillingMode | null; // absent = PREPAID\n creditLimitMicros?: number | null; // POSTPAID only: how far below zero this account may spend\n billingExempt?: boolean | null; // true = usage is free; bypasses the funds floor, not the status gate\n createdAt: number;\n updatedAt: number;\n updatedByUserId?: string | null;\n};\n\nexport type BillingWalletBalance = {\n billingAccountId: string;\n balanceMicros: number;\n reservedMicros: number;\n paidCreditMicros?: number | null;\n promoCreditMicros?: number | null;\n version: number;\n lastLedgerSeq?: string | null;\n lowBalanceThresholdMicros?: number | null;\n autoTopupConfig?: string | null;\n updatedAt: number;\n createdAt: number;\n};\n\nexport type BillingLedgerEntry = {\n billingAccountId: string;\n sk: string;\n entryId: string;\n txnId: string;\n idempotencyKey: string;\n direction: BillingLedgerDirection;\n account: string;\n amountMicros: number;\n balanceAfterMicros?: number | null;\n creditClass?: BillingCreditClass | null;\n entryType: BillingLedgerEntryType;\n refType?: string | null;\n refId?: string | null;\n description?: string | null;\n metadata?: string | null;\n createdAt: number;\n createdBy: string;\n approvedBy?: string | null;\n entryHash: string;\n prevHash: string;\n updatedAt: number;\n};\n\nexport type BillingIdempotencyKey = {\n idemKey: string;\n scope?: string | null;\n resultRef?: string | null;\n expiresAt?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingProduct = {\n id: string;\n productCode: string;\n name: string;\n unit: string;\n meterConfig?: string | null;\n taxCategory?: string | null;\n productStatus?: BillingEntityStatus | null;\n effectiveFrom?: number | null;\n effectiveTo?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingPriceBook = {\n id: string;\n name: string;\n bookType: BillingPriceBookType;\n bookStatus?: BillingEntityStatus | null;\n effectiveFrom?: number | null;\n effectiveTo?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingRateCard = {\n priceBookId: string;\n sk: string;\n productCode: string;\n dimensionKey: string;\n pricingType: BillingPricingType;\n unitPriceMicros?: number | null;\n tiers?: string | null;\n minChargeMicros?: number | null;\n incrementOverride?: string | null;\n buyPriceMicros?: number | null;\n fxCapture?: string | null;\n effectiveFrom: number;\n effectiveTo?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingPlanDefinition = {\n id: string;\n version: string;\n name: string;\n billingPeriod: BillingPeriodType;\n baseFeeMicros?: number | null;\n perSeatFeeMicros?: number | null;\n includedAllowances?: string | null;\n featureFlags?: string | null;\n trialDays?: number | null;\n planStatus?: BillingEntityStatus | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingSubscription = {\n billingAccountId: string;\n sk: string;\n planId: string;\n planVersion: string;\n seats: number;\n subStatus: BillingSubscriptionStatus;\n currentPeriodStart?: number | null;\n currentPeriodEnd?: number | null;\n cancelAtPeriodEnd?: boolean | null;\n allowanceUsage?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingUsageEvent = {\n billingAccountId: string;\n sk: string;\n eventId: string;\n tenantId: string;\n productCode: string;\n quantity: number;\n rawUnit?: string | null;\n dimensions?: string | null;\n sourceService?: string | null;\n sourceRef?: string | null;\n buyCostHint?: string | null;\n occurredAt: number;\n receivedAt: number;\n ratingStatus: BillingRatingStatus;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingRatedCharge = {\n billingAccountId: string;\n sk: string;\n tenantId: string;\n period: string;\n usageEventId?: string | null;\n productCode: string;\n quantity: number;\n rateCardRef?: string | null;\n grossMicros: number;\n allowanceAppliedMicros?: number | null;\n netMicros: number;\n marginMicros?: number | null;\n chargeStatus: BillingChargeStatus;\n ledgerTxnId?: string | null;\n invoiceId?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingInvoice = {\n id: string;\n invoiceNumber?: string | null;\n billingAccountId: string;\n periodStart?: number | null;\n periodEnd: number;\n invoiceType: BillingInvoiceType;\n invoiceStatus: BillingInvoiceStatus;\n profileSnapshot?: TenantBillingInformation | null;\n subtotalMicros?: number | null;\n taxMicros?: number | null;\n totalMicros?: number | null;\n taxTreatment?: BillingTaxTreatment | null;\n fxDisplay?: string | null;\n pdfKey?: string | null;\n peppolPayloadKey?: string | null;\n itemizedCsvKey?: string | null;\n dueAt?: number | null;\n issuedAt?: number | null;\n paidAt?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingInvoiceLine = {\n invoiceId: string;\n sk: string;\n productCode?: string | null;\n description?: string | null;\n quantity?: number | null;\n unitPriceMicros?: number | null;\n amountMicros: number;\n taxCode?: string | null;\n sourceChargeCount?: number | null;\n tenantId?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingPayment = {\n id: string;\n billingAccountId: string;\n rail: BillingPaymentRail;\n provider?: string | null;\n direction: BillingPaymentDirection;\n purpose?: BillingPaymentPurpose | null;\n amountMicros: number;\n payerCurrency?: string | null;\n payerAmountMinor?: number | null;\n fxRateMicros?: number | null;\n paymentStatus: BillingPaymentStatus;\n gatewayRefs?: string | null;\n feeMicros?: number | null;\n failureCode?: string | null;\n ledgerTxnId?: string | null;\n idempotencyKey?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingPaymentMethod = {\n billingAccountId: string;\n sk: string;\n gatewayPaymentMethodId: string;\n displayBrand?: string | null;\n displayLast4?: string | null;\n displayExpMonth?: number | null;\n displayExpYear?: number | null;\n isDefault?: boolean | null;\n methodStatus?: BillingPaymentMethodStatus | null;\n billingAddress?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingBankReceipt = {\n id: string;\n amountMicros: number;\n payerName?: string | null;\n payerBank?: string | null;\n referenceText?: string | null;\n matchStatus: BillingReceiptMatchStatus;\n receivedAt: number;\n provider?: string | null;\n matchedBillingAccountId?: string | null;\n matchedBy?: string | null;\n matchedAt?: number | null;\n ledgerTxnId?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingAdminAction = {\n id: string;\n actionType: BillingAdminActionType;\n payload?: string | null;\n makerUserId: string;\n makerAt: number;\n checkerUserId?: string | null;\n checkerAt?: number | null;\n actionStatus: BillingAdminActionStatus;\n ledgerTxnId?: string | null;\n reason?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingTaxRule = {\n jurisdiction: string;\n sk: string;\n rateBps: number;\n treatment: BillingTaxTreatment;\n f5Box?: string | null;\n invoiceWording?: string | null;\n notes?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingFxRate = {\n pair: string;\n fetchedAt: number;\n midRateMicros: number;\n source: string;\n providerPayloadRef?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingAuditLog = {\n id: string;\n objectRef: string;\n actorUserId: string;\n action: string;\n before?: string | null;\n after?: string | null;\n requestId?: string | null;\n sourceIp?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type BillingPlatformConfig = {\n configKey: string;\n value?: string | null;\n valueType?: string | null;\n notes?: string | null;\n updatedBy?: string | null;\n updatedAt?: number | null;\n version?: number | null;\n createdAt: number;\n};\n\nexport type BillingKycCase = {\n id: string;\n billingAccountId: string;\n tenantId: string;\n caseType: BillingKycCaseType;\n caseStatus: BillingKycCaseStatus;\n submittedAt?: number | null;\n declaredProfile?: TenantBillingInformation | null;\n documents?: string | null;\n checks?: string | null;\n riskScore?: number | null;\n riskFactors?: string | null;\n decision?: string | null;\n slaDueAt?: number | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type TenantBillingSnapshot = {\n id: string;\n billingAccountId: string;\n balanceMicros?: number | null;\n accountStatus?: BillingAccountStatus | null;\n lowBalance?: boolean | null;\n updatedAt: number;\n createdAt: number;\n};\n","import { GraphQLResult } from '@aws-amplify/api-graphql';\n\nexport enum ModelAttributeTypes {\n binary = 'binary',\n binarySet = 'binarySet',\n bool = 'bool',\n list = 'list',\n map = 'map',\n number = 'number',\n numberSet = 'numberSet',\n string = 'string',\n stringSet = 'stringSet',\n _null = '_null',\n}\n\nexport enum ModelSortDirection {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\nexport type ModelSizeInput = {\n ne?: number | null;\n eq?: number | null;\n le?: number | null;\n lt?: number | null;\n ge?: number | null;\n gt?: number | null;\n between?: Array<number | null> | null;\n};\n\nexport type ModelBooleanInput = {\n ne?: boolean | null;\n eq?: boolean | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n};\n\nexport type ModelIDInput = {\n ne?: string | null;\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n contains?: string | null;\n notContains?: string | null;\n between?: Array<string | null> | null;\n beginsWith?: string | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n size?: ModelSizeInput | null;\n};\n\nexport type ModelIntInput = {\n ne?: number | null;\n eq?: number | null;\n le?: number | null;\n lt?: number | null;\n ge?: number | null;\n gt?: number | null;\n between?: Array<number | null> | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n};\n\nexport type ModelStringInput = {\n ne?: string | null;\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n contains?: string | null;\n notContains?: string | null;\n between?: Array<string | null> | null;\n beginsWith?: string | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n size?: ModelSizeInput | null;\n};\n\nexport type ModelIDKeyConditionInput = {\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n between?: Array<string | null> | null;\n beginsWith?: string | null;\n};\n\nexport type ModelIntKeyConditionInput = {\n eq?: number | null;\n le?: number | null;\n lt?: number | null;\n ge?: number | null;\n gt?: number | null;\n between?: Array<number | null> | null;\n};\n\nexport type ModelStringKeyConditionInput = {\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n between?: Array<string | null> | null;\n beginsWith?: string | null;\n};\n\nexport type List<T> = {\n items: Array<T | null>;\n nextToken?: string | null;\n};\n\nexport interface SubscriptionResponse<T> {\n value: GraphQLResult<T>;\n}\n\nexport type Country = {\n code: string;\n nameEn: string;\n nameLocal?: string | null;\n currency?: Currency | null;\n officialLanguage?: Language | null;\n callingCode?: string | null;\n region?: string | null;\n flag?: string | null;\n};\n\nexport type Currency = {\n code: string;\n nameEn: string;\n};\n\nexport type Language = {\n code: string;\n nameEn: string;\n nameLocal?: string | null;\n};\n\nexport type PhoneNumber = {\n countryCode?: string | null;\n dialCode?: string | null;\n e164Number?: string | null;\n internationalNumber?: string | null;\n nationalNumber?: string | null;\n number?: string | null;\n};\n\nexport type S3Object = {\n key: string;\n bucket: string;\n location: string;\n};\n\nexport enum ProcessingStatus {\n PENDING = 'PENDING',\n IN_PROGRESS = \"IN_PROGRESS\",\n SUCCESS = 'SUCCESS',\n FAILED = 'FAILED',\n RETRYING = 'RETRYING',\n}\n\nexport type ModelProcessingStatusInput = {\n eq?: ProcessingStatus | null;\n ne?: ProcessingStatus | null;\n};\n","import { ModelIDInput, ModelIntInput, ModelStringInput, S3Object } from './common.model';\nimport { InteractionWidget } from './interaction-widget.model';\n\nexport enum RecordingMode {\n OFF = 'OFF',\n INBOUND = 'INBOUND',\n OUTBOUND = 'OUTBOUND',\n BOTH = 'BOTH',\n}\n\nexport enum RecordingNotify {\n NONE = 'NONE',\n ANNOUNCE = 'ANNOUNCE',\n CONSENT = 'CONSENT',\n}\n\nexport enum WorkingHoursFallbackAction {\n PLAY_MESSAGE = 'PLAY_MESSAGE',\n VOICEMAIL = 'VOICEMAIL',\n}\n\nexport enum RoutingRole {\n AGENT = 'AGENT',\n SUPERVISOR = 'SUPERVISOR',\n ADMINISTRATOR = 'ADMINISTRATOR',\n}\n\nexport enum RoutingStrategy {\n TICKET_ASSIGNEE = 'TICKET_ASSIGNEE',\n LAST_TALKED_TO = 'LAST_TALKED_TO',\n MOST_IDLE = 'MOST_IDLE',\n RANDOM_ACTIVE = 'RANDOM_ACTIVE',\n ROUND_ROBIN = 'ROUND_ROBIN',\n}\n\nexport enum RoutingFallback {\n ANNOUNCE_DISCONNECT = 'ANNOUNCE_DISCONNECT',\n VOICEMAIL_TICKET = 'VOICEMAIL_TICKET',\n VOICEMAIL = 'VOICEMAIL',\n}\n\nexport enum RoutingNoPickup {\n ANNOUNCE_DISCONNECT = 'ANNOUNCE_DISCONNECT',\n DISCONNECT = 'DISCONNECT',\n TRY_OTHERS = 'TRY_OTHERS',\n VOICEMAIL = 'VOICEMAIL',\n VOICEMAIL_TICKET = 'VOICEMAIL_TICKET',\n}\n\nexport type InteractionEndpoint = {\n id: string;\n externalId: string;\n tenantId: string;\n widgetId: string;\n widget?: InteractionWidget | null;\n address: string;\n configuration?: string | null;\n recordingConfig?: InteractionEndpointRecordingConfig | null;\n workingHoursActionConfig?: InteractionEndpointWorkingHoursActionConfig | null;\n routingConfig?: InteractionEndpointRoutingConfig | null;\n buyPrice?: InteractionEndpointPriceDetails | null;\n sellPrice?: InteractionEndpointPriceDetails | null;\n documents?: Array<InteractionEndpointRegulatoryComplianceDocument | null> | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\n// Cost fields are micro-USD (1 USD = 1_000_000 micros), matching the billing platform.\nexport type InteractionEndpointPriceDetails = {\n currency: string;\n upfrontCost: number;\n monthlyCost: number;\n inboundCost: number;\n outboundCost: number;\n};\n\nexport type InteractionEndpointRegulatoryComplianceDocument = {\n fileName: string;\n documentType?: string | null;\n contentType?: string | null;\n file?: S3Object | null;\n};\n\nexport type InteractionEndpointRecordingConfig = {\n mode?: RecordingMode | null;\n notify?: RecordingNotify | null;\n audioMediaName?: string | null;\n audioUrl?: string | null;\n};\n\nexport type InteractionEndpointWorkingHoursAction = {\n action?: WorkingHoursFallbackAction | null;\n audioMediaName?: string | null;\n audioUrl?: string | null;\n};\n\nexport type InteractionEndpointWorkingHoursActionConfig = {\n duringHours?: InteractionEndpointWorkingHoursAction | null;\n afterHours?: InteractionEndpointWorkingHoursAction | null;\n whenClosed?: InteractionEndpointWorkingHoursAction | null;\n};\n\nexport type InteractionEndpointRoutingAction = {\n action?: RoutingFallback | null;\n audioMediaName?: string | null;\n audioUrl?: string | null;\n};\n\nexport type InteractionEndpointRoutingFirstAction = {\n action?: RoutingNoPickup | null;\n audioMediaName?: string | null;\n audioUrl?: string | null;\n};\n\nexport type InteractionEndpointRoutingConfig = {\n answeringRoles?: Array<RoutingRole | null> | null;\n knownCallerStrategy?: RoutingStrategy | null;\n unknownCallerStrategy?: RoutingStrategy | null;\n ifNoPickup?: InteractionEndpointRoutingFirstAction | null;\n escalationRoles?: Array<RoutingRole | null> | null;\n noAnswer?: InteractionEndpointRoutingAction | null;\n};\n\nexport type CreateInteractionEndpointInput = {\n id?: string | null;\n externalId: string;\n tenantId: string;\n widgetId: string;\n address: string;\n configuration?: string | null;\n recordingConfig?: InteractionEndpointRecordingConfig | null;\n workingHoursActionConfig?: InteractionEndpointWorkingHoursActionConfig | null;\n routingConfig?: InteractionEndpointRoutingConfig | null;\n buyPrice?: InteractionEndpointPriceDetails | null;\n sellPrice?: InteractionEndpointPriceDetails | null;\n documents?: Array<InteractionEndpointRegulatoryComplianceDocument | null> | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UpdateInteractionEndpointInput = {\n id: string;\n externalId?: string | null;\n tenantId?: string | null;\n widgetId?: string | null;\n address?: string | null;\n configuration?: string | null;\n recordingConfig?: InteractionEndpointRecordingConfig | null;\n workingHoursActionConfig?: InteractionEndpointWorkingHoursActionConfig | null;\n routingConfig?: InteractionEndpointRoutingConfig | null;\n buyPrice?: InteractionEndpointPriceDetails | null;\n sellPrice?: InteractionEndpointPriceDetails | null;\n documents?: Array<InteractionEndpointRegulatoryComplianceDocument | null> | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId?: string | null;\n updatedByUserSessionId?: string | null;\n};\n\nexport type ModelInteractionEndpointConditionInput = {\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n address?: ModelStringInput | null;\n configuration?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelInteractionEndpointConditionInput | null> | null;\n or?: Array<ModelInteractionEndpointConditionInput | null> | null;\n not?: ModelInteractionEndpointConditionInput | null;\n};\n\nexport type ModelInteractionEndpointFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n address?: ModelStringInput | null;\n configuration?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelInteractionEndpointFilterInput | null> | null;\n or?: Array<ModelInteractionEndpointFilterInput | null> | null;\n not?: ModelInteractionEndpointFilterInput | null;\n};\n","import { ModelBooleanInput, ModelIDInput, ModelIntInput, ModelStringInput } from './common.model';\nimport { Entity } from './entity.model';\nimport { InteractionChannel, InteractionProvider, InteractionRouteConfiguration, ModelInteractionChannelInput, ModelInteractionProviderInput } from './interaction.model';\nimport { Tenant } from './tenant.model';\n\nexport type InteractionWidget = {\n id: string;\n tenantId: string;\n tenant?: Tenant | null;\n channel: InteractionChannel;\n provider: InteractionProvider;\n providerAccountId?: string | null;\n name: string;\n description?: string | null;\n configuration?: string | null;\n isRecordingEnabledByDefault: boolean;\n isRecordingEnabledOnDemand: boolean;\n isTranscriptionEnabledByDefault: boolean;\n isTranscriptionEnabledOnDemand: boolean;\n routeConfiguration?: InteractionRouteConfiguration | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type InteractionWidgetSession = {\n id: string;\n tenantId: string;\n widgetId: string;\n widget?: InteractionWidget | null;\n entityId: string;\n entity?: Entity | null;\n ipDetails?: string | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type InteractionWidgetUserSetting = {\n id: string;\n widgetId: string;\n userId: string;\n configuration?: string | null;\n allowOverride?: boolean | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type ModelInteractionWidgetConditionInput = {\n tenantId?: ModelIDInput | null;\n channel?: ModelInteractionChannelInput | null;\n provider?: ModelInteractionProviderInput | null;\n providerAccountId?: ModelStringInput | null;\n name?: ModelStringInput | null;\n description?: ModelStringInput | null;\n configuration?: ModelStringInput | null;\n isRecordingEnabledByDefault?: ModelBooleanInput | null;\n isRecordingEnabledOnDemand?: ModelBooleanInput | null;\n isTranscriptionEnabledByDefault?: ModelBooleanInput | null;\n isTranscriptionEnabledOnDemand?: ModelBooleanInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionWidgetConditionInput | null> | null;\n or?: Array<ModelInteractionWidgetConditionInput | null> | null;\n not?: ModelInteractionWidgetConditionInput | null;\n};\n\nexport type ModelInteractionWidgetFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n channel?: ModelInteractionChannelInput | null;\n provider?: ModelInteractionProviderInput | null;\n providerAccountId?: ModelStringInput | null;\n name?: ModelStringInput | null;\n description?: ModelStringInput | null;\n configuration?: ModelStringInput | null;\n isRecordingEnabledByDefault?: ModelBooleanInput | null;\n isRecordingEnabledOnDemand?: ModelBooleanInput | null;\n isTranscriptionEnabledByDefault?: ModelBooleanInput | null;\n isTranscriptionEnabledOnDemand?: ModelBooleanInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionWidgetFilterInput | null> | null;\n or?: Array<ModelInteractionWidgetFilterInput | null> | null;\n not?: ModelInteractionWidgetFilterInput | null;\n};\n\nexport type ModelInteractionWidgetSessionFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n ipDetails?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionWidgetSessionFilterInput | null> | null;\n or?: Array<ModelInteractionWidgetSessionFilterInput | null> | null;\n not?: ModelInteractionWidgetSessionFilterInput | null;\n};\n\nexport type ModelInteractionWidgetUserSettingFilterInput = {\n id?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n configuration?: ModelStringInput | null;\n allowOverride?: ModelBooleanInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelInteractionWidgetUserSettingFilterInput | null> | null;\n or?: Array<ModelInteractionWidgetUserSettingFilterInput | null> | null;\n not?: ModelInteractionWidgetUserSettingFilterInput | null;\n};\n\n// ---------------------------------------------------------------------------\n// Web-chat widget configuration\n//\n// InteractionWidget.configuration is an AWSJSON blob rather than a column per\n// setting, so the shape lives here and is shared by the agent app (which writes\n// it) and the embedded widget (which reads it). Everything is optional — a\n// widget created before a setting existed simply won't carry the key, so always\n// fall back to the defaults in DEFAULT_WEB_CHAT_WIDGET_CONFIGURATION.\n// ---------------------------------------------------------------------------\n\nexport type WebChatWidgetCustomField = {\n element?: {\n field_name?: string;\n is_required?: boolean;\n [key: string]: any;\n };\n type?: string;\n addedComponents?: Array<Array<WebChatWidgetCustomField>>;\n [key: string]: any;\n};\n\nexport type WebChatWidgetConfiguration = {\n // Theme\n primaryColorCode?: string | null;\n welcomeTitle?: string | null;\n welcomeMessage?: string | null;\n imageURL?: string | null;\n // Capabilities\n isChatEnabled?: boolean | null;\n isVoiceEnabled?: boolean | null;\n isVideoEnabled?: boolean | null;\n isScreenShareEnabled?: boolean | null;\n isFileShareEnabled?: boolean | null;\n // Behaviour\n sessionTimeout?: number | null;\n // Pre-chat form definition\n customFields?: Array<WebChatWidgetCustomField> | null;\n};\n\nexport const DEFAULT_WEB_CHAT_WIDGET_CONFIGURATION: Required<Pick<WebChatWidgetConfiguration, 'primaryColorCode' | 'welcomeTitle' | 'welcomeMessage'>> = {\n primaryColorCode: '#ff6633',\n welcomeTitle: 'Welcome!',\n welcomeMessage: 'How can we help you today?',\n};\n\n/**\n * Reads InteractionWidget.configuration into a typed object. Accepts the raw\n * AWSJSON string, an already-parsed object, or null/undefined, and never throws\n * — malformed JSON yields {} so a bad record degrades to defaults instead of\n * taking the widget down.\n *\n * customFields entries are tolerated as either objects or JSON strings, because\n * the legacy InteractionWidget.customFields column stored [AWSJSON] (a list of\n * encoded strings) and older records were migrated across verbatim.\n */\nexport function parseWebChatWidgetConfiguration(configuration?: string | WebChatWidgetConfiguration | null): WebChatWidgetConfiguration {\n if (!configuration) {\n return {};\n }\n\n let parsed: any = configuration;\n if (typeof configuration === 'string') {\n try {\n parsed = JSON.parse(configuration);\n } catch (error) {\n console.warn('Unable to parse InteractionWidget.configuration; falling back to defaults', error);\n return {};\n }\n }\n\n if (!parsed || typeof parsed !== 'object') {\n return {};\n }\n\n if (Array.isArray(parsed.customFields)) {\n parsed = {\n ...parsed,\n customFields: parsed.customFields\n .map((field: any) => {\n if (typeof field !== 'string') {\n return field;\n }\n try {\n return JSON.parse(field);\n } catch {\n return null;\n }\n })\n .filter((field: any) => !!field),\n };\n }\n\n return <WebChatWidgetConfiguration>parsed;\n}\n","import { List, ModelBooleanInput, ModelIDInput, ModelIntInput, ModelProcessingStatusInput, ModelStringInput, ProcessingStatus, S3Object } from './common.model';\nimport { Entity } from './entity.model';\nimport { EntityConversation } from './entity-conversation.model';\nimport { InteractionEndpoint } from './interaction-endpoint.model';\nimport { InteractionWidget } from './interaction-widget.model';\nimport { Team } from './team.model';\nimport { User } from './user.model';\nimport { UserSession } from './user-session.model';\n\nexport enum InteractionChannel {\n EMAIL = 'EMAIL',\n PHONE = 'PHONE',\n SMS = 'SMS',\n WEB_CHAT = 'WEB_CHAT',\n SOCIAL_CHAT = 'SOCIAL_CHAT',\n}\n\nexport enum InteractionContext {\n INTERNAL = 'INTERNAL',\n EXTERNAL = 'EXTERNAL',\n}\n\nexport enum InteractionDirection {\n IN = 'IN',\n OUT = 'OUT',\n}\n\nexport enum InteractionMessageDirection {\n IN = 'IN',\n OUT = 'OUT',\n}\n\nexport enum InteractionStatus {\n INITIATED = 'INITIATED',\n QUEUED = 'QUEUED',\n RINGING = 'RINGING',\n CONNECTED_TO_AGENT = 'CONNECTED_TO_AGENT',\n CONNECTED_TO_BOT = 'CONNECTED_TO_BOT',\n HELD = 'HELD',\n DISCONNECTED = 'DISCONNECTED',\n CANCELLED = 'CANCELLED',\n REJECTED = 'REJECTED',\n NO_ANSWER = 'NO_ANSWER',\n MISSED = 'MISSED',\n FAILED = 'FAILED',\n}\n\n// Per-message delivery status, driven by the WhatsApp (and other provider) status webhooks.\n// Powers the single / double / blue read-receipt ticks on outbound messages.\n// RECEIVED is the terminal state of an inbound message.\nexport enum InteractionMessageStatus {\n QUEUED = 'QUEUED',\n SENT = 'SENT',\n DELIVERED = 'DELIVERED',\n READ = 'READ',\n FAILED = 'FAILED',\n RECEIVED = 'RECEIVED',\n}\n\n// Where a campaign-driven interaction currently sits in its flow.\nexport enum FlowRuntimeStatus {\n AWAITING_DISPATCH = 'AWAITING_DISPATCH',\n AWAITING_REPLY = 'AWAITING_REPLY',\n AWAITING_TIMER = 'AWAITING_TIMER',\n PAUSED_BY_AGENT = 'PAUSED_BY_AGENT',\n COMPLETED = 'COMPLETED',\n FAILED = 'FAILED',\n ABANDONED = 'ABANDONED',\n}\n\nexport enum InteractionProvider {\n AVAYA_IPO = 'AVAYA_IPO',\n EMAIL_SMTP = 'EMAIL_SMTP',\n EMAIL_SES = 'EMAIL_SES',\n FACEBOOK = 'FACEBOOK',\n INSTAGRAM = 'INSTAGRAM',\n OZONETEL = 'OZONETEL',\n SNUGDESK = 'SNUGDESK',\n TELEGRAM = 'TELEGRAM',\n TELNYX = 'TELNYX',\n WHATSAPP = 'WHATSAPP',\n}\n\nexport type InteractionRouteConfiguration = {\n teamId?: string | null;\n routingLogic?: InteractionRouteLogic | null;\n maxWaitTimeoutSeconds?: number | null;\n};\n\nexport enum InteractionRouteLogic {\n MOST_IDLE_AGENT = 'MOST_IDLE_AGENT',\n PARALLEL = 'PARALLEL',\n}\n\nexport type Interaction = {\n id: string;\n tenantId: string;\n widgetId: string;\n widget?: InteractionWidget | null;\n endpointId: string;\n endpoint?: InteractionEndpoint | null;\n entityConversationId?: string | null;\n entityConversation?: EntityConversation | null;\n entityId?: string | null;\n entity?: Entity | null;\n teamId?: string | null;\n team?: Team | null;\n hostId?: string | null;\n host?: InteractionHost | null;\n providerInteractionId?: string | null;\n channel: InteractionChannel;\n provider: InteractionProvider;\n context: InteractionContext;\n direction: InteractionDirection;\n status?: InteractionStatus | null;\n last_status?: InteractionStatus | null;\n subject?: string | null;\n metadata?: string | null;\n notes?: string | null;\n summary?: string | null;\n recording?: S3Object | null;\n transcription?: S3Object | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n aiProcessingStatus?: ProcessingStatus | null;\n aiProcessingCompletedAt?: number | null;\n postProcessingStatus?: ProcessingStatus | null;\n postProcessingCompletedAt?: number | null;\n reportProcessingStatus?: ProcessingStatus | null;\n reportProcessingCompletedAt?: number | null;\n routeConfiguration?: InteractionRouteConfiguration | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n // Campaign flow runtime state (set only for campaign-driven interactions)\n campaignId?: string | null;\n flowVersion?: number | null;\n currentCampaignFlowNodeId?: string | null;\n flowVariables?: string | null;\n flowStatus?: FlowRuntimeStatus | null;\n flowRetryCount?: number | null;\n flowReminderIndex?: number | null;\n flowTimeoutAt?: number | null;\n flowTimerScheduleArn?: string | null;\n // Human-agent takeover state\n isAgentHandling?: boolean | null;\n assignedAgentId?: string | null;\n agentHandlingStartedAt?: number | null;\n agentHandlingEndedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n // The hasMany connections (invitees, attendees, attendeeConnections, messages,\n // messageAttachments, campaignTargets) are fetched through their own list queries.\n};\n\nexport type InteractionHost = {\n id: string;\n interactionId: string;\n interaction?: Interaction | null;\n entityId?: string | null;\n entity?: Entity | null;\n teamId?: string | null;\n team?: Team | null;\n userId?: string | null;\n user?: User | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type InteractionInvitee = {\n id: string;\n interactionId: string;\n interaction?: Interaction | null;\n entityId?: string | null;\n entity?: Entity | null;\n teamId?: string | null;\n team?: Team | null;\n userId?: string | null;\n user?: User | null;\n isAdministrator: boolean;\n temp_expiringAt?: number | null;\n expiredAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type InteractionAttendee = {\n id: string;\n interactionId: string;\n interaction?: Interaction | null;\n entityId?: string | null;\n entity?: Entity | null;\n interactionWidgetSessionId?: string | null;\n teamId?: string | null;\n team?: Team | null;\n userId?: string | null;\n user?: User | null;\n userSessionId?: string | null;\n userSession?: UserSession | null;\n name: string;\n metadata?: string | null;\n customFields?: Array<string | null> | null;\n isAdministrator: boolean;\n joinedAt?: number | null;\n exitedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type InteractionAttendeeConnection = {\n id: string;\n connectionId: string;\n interactionId: string;\n interaction?: Interaction | null;\n interactionAttendeeId: string;\n interactionAttendee?: InteractionAttendee | null;\n connectedAt?: number | null;\n disconnectedAt?: number | null;\n duration?: number | null;\n metadata?: string | null;\n recording?: S3Object | null;\n transcript?: S3Object | null;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type InteractionMessage = {\n id: string;\n externalId?: string | null;\n endpointId?: string | null;\n endpoint?: InteractionEndpoint | null;\n campaignId?: string | null;\n campaignFlowNodeId?: string | null;\n entityConversationId: string;\n entityConversation?: EntityConversation | null;\n interactionId: string;\n interaction?: Interaction | null;\n interactionAttendeeId?: string | null;\n interactionAttendee?: InteractionAttendee | null;\n referenceMessageId?: string | null;\n body?: string | null;\n metadata?: string | null;\n direction?: InteractionMessageDirection | null;\n status?: InteractionMessageStatus | null;\n statusUpdatedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n messageAttachments?: List<InteractionMessageAttachment> | null;\n // Client-only: optimistic \"in flight\" flag, never sent to or returned by AppSync.\n temp_isSending?: boolean | null;\n};\n\nexport type InteractionMessageAttachment = {\n id: string;\n externalId?: string | null;\n interactionId: string;\n interactionMessageId: string;\n name: string;\n size?: number | null;\n type?: string | null;\n file: S3Object;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type CreateInteractionInput = {\n id?: string | null;\n tenantId: string;\n widgetId: string;\n endpointId: string;\n entityConversationId?: string | null;\n entityId?: string | null;\n teamId?: string | null;\n hostId?: string | null;\n providerInteractionId?: string | null;\n channel: InteractionChannel;\n provider: InteractionProvider;\n context: InteractionContext;\n direction: InteractionDirection;\n status?: InteractionStatus | null;\n last_status?: InteractionStatus | null;\n subject?: string | null;\n metadata?: string | null;\n notes?: string | null;\n summary?: string | null;\n recording?: S3Object | null;\n transcription?: S3Object | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n aiProcessingStatus?: ProcessingStatus | null;\n aiProcessingCompletedAt?: number | null;\n postProcessingStatus?: ProcessingStatus | null;\n postProcessingCompletedAt?: number | null;\n reportProcessingStatus?: ProcessingStatus | null;\n reportProcessingCompletedAt?: number | null;\n routeConfiguration?: InteractionRouteConfigurationInput | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n campaignId?: string | null;\n flowVersion?: number | null;\n currentCampaignFlowNodeId?: string | null;\n flowVariables?: string | null;\n flowStatus?: FlowRuntimeStatus | null;\n flowRetryCount?: number | null;\n flowReminderIndex?: number | null;\n flowTimeoutAt?: number | null;\n flowTimerScheduleArn?: string | null;\n isAgentHandling?: boolean | null;\n assignedAgentId?: string | null;\n agentHandlingStartedAt?: number | null;\n agentHandlingEndedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateInteractionInput = {\n id: string;\n tenantId?: string | null;\n widgetId?: string | null;\n endpointId?: string | null;\n entityConversationId?: string | null;\n entityId?: string | null;\n teamId?: string | null;\n hostId?: string | null;\n providerInteractionId?: string | null;\n channel?: InteractionChannel | null;\n provider?: InteractionProvider | null;\n context?: InteractionContext | null;\n direction?: InteractionDirection | null;\n status?: InteractionStatus | null;\n last_status?: InteractionStatus | null;\n subject?: string | null;\n metadata?: string | null;\n notes?: string | null;\n summary?: string | null;\n recording?: S3Object | null;\n transcription?: S3Object | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n aiProcessingStatus?: ProcessingStatus | null;\n aiProcessingCompletedAt?: number | null;\n postProcessingStatus?: ProcessingStatus | null;\n postProcessingCompletedAt?: number | null;\n reportProcessingStatus?: ProcessingStatus | null;\n reportProcessingCompletedAt?: number | null;\n routeConfiguration?: InteractionRouteConfigurationInput | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n campaignId?: string | null;\n flowVersion?: number | null;\n currentCampaignFlowNodeId?: string | null;\n flowVariables?: string | null;\n flowStatus?: FlowRuntimeStatus | null;\n flowRetryCount?: number | null;\n flowReminderIndex?: number | null;\n flowTimeoutAt?: number | null;\n flowTimerScheduleArn?: string | null;\n isAgentHandling?: boolean | null;\n assignedAgentId?: string | null;\n agentHandlingStartedAt?: number | null;\n agentHandlingEndedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionConditionInput = {\n tenantId?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n endpointId?: ModelIDInput | null;\n entityConversationId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n hostId?: ModelIDInput | null;\n providerInteractionId?: ModelStringInput | null;\n channel?: ModelInteractionChannelInput | null;\n provider?: ModelInteractionProviderInput | null;\n context?: ModelInteractionContextInput | null;\n direction?: ModelInteractionDirectionInput | null;\n status?: ModelInteractionStatusInput | null;\n last_status?: ModelInteractionStatusInput | null;\n subject?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n notes?: ModelStringInput | null;\n summary?: ModelStringInput | null;\n startedAt?: ModelIntInput | null;\n completedAt?: ModelIntInput | null;\n duration?: ModelIntInput | null;\n aiProcessingStatus?: ModelProcessingStatusInput | null;\n aiProcessingCompletedAt?: ModelIntInput | null;\n postProcessingStatus?: ModelProcessingStatusInput | null;\n postProcessingCompletedAt?: ModelIntInput | null;\n reportProcessingStatus?: ModelProcessingStatusInput | null;\n reportProcessingCompletedAt?: ModelIntInput | null;\n temp_isLocked?: ModelBooleanInput | null;\n temp_isAvailableTenantIdUnion?: ModelStringInput | null;\n campaignId?: ModelIDInput | null;\n flowVersion?: ModelIntInput | null;\n currentCampaignFlowNodeId?: ModelIDInput | null;\n flowVariables?: ModelStringInput | null;\n flowStatus?: ModelFlowRuntimeStatusInput | null;\n flowRetryCount?: ModelIntInput | null;\n flowReminderIndex?: ModelIntInput | null;\n flowTimeoutAt?: ModelIntInput | null;\n flowTimerScheduleArn?: ModelStringInput | null;\n isAgentHandling?: ModelBooleanInput | null;\n assignedAgentId?: ModelIDInput | null;\n agentHandlingStartedAt?: ModelIntInput | null;\n agentHandlingEndedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionConditionInput | null> | null;\n or?: Array<ModelInteractionConditionInput | null> | null;\n not?: ModelInteractionConditionInput | null;\n};\n\nexport type ModelInteractionFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n widgetId?: ModelIDInput | null;\n endpointId?: ModelIDInput | null;\n entityConversationId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n hostId?: ModelIDInput | null;\n providerInteractionId?: ModelStringInput | null;\n channel?: ModelInteractionChannelInput | null;\n provider?: ModelInteractionProviderInput | null;\n context?: ModelInteractionContextInput | null;\n direction?: ModelInteractionDirectionInput | null;\n status?: ModelInteractionStatusInput | null;\n last_status?: ModelInteractionStatusInput | null;\n subject?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n notes?: ModelStringInput | null;\n summary?: ModelStringInput | null;\n startedAt?: ModelIntInput | null;\n completedAt?: ModelIntInput | null;\n duration?: ModelIntInput | null;\n aiProcessingStatus?: ModelProcessingStatusInput | null;\n aiProcessingCompletedAt?: ModelIntInput | null;\n postProcessingStatus?: ModelProcessingStatusInput | null;\n postProcessingCompletedAt?: ModelIntInput | null;\n reportProcessingStatus?: ModelProcessingStatusInput | null;\n reportProcessingCompletedAt?: ModelIntInput | null;\n temp_isLocked?: ModelBooleanInput | null;\n temp_isAvailableTenantIdUnion?: ModelStringInput | null;\n campaignId?: ModelIDInput | null;\n flowVersion?: ModelIntInput | null;\n currentCampaignFlowNodeId?: ModelIDInput | null;\n flowVariables?: ModelStringInput | null;\n flowStatus?: ModelFlowRuntimeStatusInput | null;\n flowRetryCount?: ModelIntInput | null;\n flowReminderIndex?: ModelIntInput | null;\n flowTimeoutAt?: ModelIntInput | null;\n flowTimerScheduleArn?: ModelStringInput | null;\n isAgentHandling?: ModelBooleanInput | null;\n assignedAgentId?: ModelIDInput | null;\n agentHandlingStartedAt?: ModelIntInput | null;\n agentHandlingEndedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionFilterInput | null> | null;\n or?: Array<ModelInteractionFilterInput | null> | null;\n not?: ModelInteractionFilterInput | null;\n};\n\nexport type CreateInteractionHostInput = {\n id?: string | null;\n interactionId: string;\n entityId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateInteractionHostInput = {\n id: string;\n interactionId?: string | null;\n entityId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionHostConditionInput = {\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionHostConditionInput | null> | null;\n or?: Array<ModelInteractionHostConditionInput | null> | null;\n not?: ModelInteractionHostConditionInput | null;\n};\n\nexport type ModelInteractionHostFilterInput = {\n id?: ModelIDInput | null;\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionHostFilterInput | null> | null;\n or?: Array<ModelInteractionHostFilterInput | null> | null;\n not?: ModelInteractionHostFilterInput | null;\n};\n\nexport type CreateInteractionInviteeInput = {\n id?: string | null;\n interactionId: string;\n entityId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n isAdministrator: boolean;\n temp_expiringAt?: number | null;\n expiredAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateInteractionInviteeInput = {\n id: string;\n interactionId?: string | null;\n entityId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n isAdministrator?: boolean | null;\n temp_expiringAt?: number | null;\n expiredAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionInviteeConditionInput = {\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n isAdministrator?: ModelBooleanInput | null;\n temp_expiringAt?: ModelIntInput | null;\n expiredAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionInviteeConditionInput | null> | null;\n or?: Array<ModelInteractionInviteeConditionInput | null> | null;\n not?: ModelInteractionInviteeConditionInput | null;\n};\n\nexport type ModelInteractionInviteeFilterInput = {\n id?: ModelIDInput | null;\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n isAdministrator?: ModelBooleanInput | null;\n temp_expiringAt?: ModelIntInput | null;\n expiredAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionInviteeFilterInput | null> | null;\n or?: Array<ModelInteractionInviteeFilterInput | null> | null;\n not?: ModelInteractionInviteeFilterInput | null;\n};\n\nexport type CreateInteractionAttendeeInput = {\n id?: string | null;\n interactionId: string;\n entityId?: string | null;\n interactionWidgetSessionId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n userSessionId?: string | null;\n name: string;\n metadata?: string | null;\n customFields?: Array<string | null> | null;\n isAdministrator: boolean;\n joinedAt?: number | null;\n exitedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateInteractionAttendeeInput = {\n id: string;\n interactionId?: string | null;\n entityId?: string | null;\n interactionWidgetSessionId?: string | null;\n teamId?: string | null;\n userId?: string | null;\n userSessionId?: string | null;\n name?: string | null;\n metadata?: string | null;\n customFields?: Array<string | null> | null;\n isAdministrator?: boolean | null;\n joinedAt?: number | null;\n exitedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionAttendeeConditionInput = {\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n interactionWidgetSessionId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n userSessionId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n customFields?: ModelStringInput | null;\n isAdministrator?: ModelBooleanInput | null;\n joinedAt?: ModelIntInput | null;\n exitedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionAttendeeConditionInput | null> | null;\n or?: Array<ModelInteractionAttendeeConditionInput | null> | null;\n not?: ModelInteractionAttendeeConditionInput | null;\n};\n\nexport type ModelInteractionAttendeeFilterInput = {\n id?: ModelIDInput | null;\n interactionId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n interactionWidgetSessionId?: ModelIDInput | null;\n teamId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n userSessionId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n customFields?: ModelStringInput | null;\n isAdministrator?: ModelBooleanInput | null;\n joinedAt?: ModelIntInput | null;\n exitedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionAttendeeFilterInput | null> | null;\n or?: Array<ModelInteractionAttendeeFilterInput | null> | null;\n not?: ModelInteractionAttendeeFilterInput | null;\n};\n\nexport type CreateInteractionMessageInput = {\n id?: string | null;\n externalId?: string | null;\n endpointId?: string | null;\n campaignId?: string | null;\n campaignFlowNodeId?: string | null;\n entityConversationId: string;\n interactionId: string;\n interactionAttendeeId?: string | null;\n referenceMessageId?: string | null;\n body?: string | null;\n metadata?: string | null;\n direction?: InteractionMessageDirection | null;\n status?: InteractionMessageStatus | null;\n statusUpdatedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateInteractionMessageInput = {\n id: string;\n externalId?: string | null;\n endpointId?: string | null;\n campaignId?: string | null;\n campaignFlowNodeId?: string | null;\n entityConversationId?: string | null;\n interactionId?: string | null;\n interactionAttendeeId?: string | null;\n referenceMessageId?: string | null;\n body?: string | null;\n metadata?: string | null;\n direction?: InteractionMessageDirection | null;\n status?: InteractionMessageStatus | null;\n statusUpdatedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionMessageConditionInput = {\n externalId?: ModelStringInput | null;\n endpointId?: ModelIDInput | null;\n campaignId?: ModelIDInput | null;\n campaignFlowNodeId?: ModelIDInput | null;\n entityConversationId?: ModelIDInput | null;\n interactionId?: ModelIDInput | null;\n interactionAttendeeId?: ModelIDInput | null;\n referenceMessageId?: ModelIDInput | null;\n body?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n direction?: ModelInteractionMessageDirectionInput | null;\n status?: ModelInteractionMessageStatusInput | null;\n statusUpdatedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionMessageConditionInput | null> | null;\n or?: Array<ModelInteractionMessageConditionInput | null> | null;\n not?: ModelInteractionMessageConditionInput | null;\n};\n\nexport type ModelInteractionMessageFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n endpointId?: ModelIDInput | null;\n campaignId?: ModelIDInput | null;\n campaignFlowNodeId?: ModelIDInput | null;\n entityConversationId?: ModelIDInput | null;\n interactionId?: ModelIDInput | null;\n interactionAttendeeId?: ModelIDInput | null;\n referenceMessageId?: ModelIDInput | null;\n body?: ModelStringInput | null;\n metadata?: ModelStringInput | null;\n direction?: ModelInteractionMessageDirectionInput | null;\n status?: ModelInteractionMessageStatusInput | null;\n statusUpdatedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionMessageFilterInput | null> | null;\n or?: Array<ModelInteractionMessageFilterInput | null> | null;\n not?: ModelInteractionMessageFilterInput | null;\n};\n\nexport type CreateInteractionMessageAttachmentInput = {\n id?: string | null;\n externalId?: string | null;\n interactionId: string;\n interactionMessageId: string;\n name: string;\n size?: number | null;\n type?: string | null;\n file: S3Object;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type ModelInteractionMessageAttachmentConditionInput = {\n externalId?: ModelStringInput | null;\n interactionId?: ModelIDInput | null;\n interactionMessageId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n size?: ModelIntInput | null;\n type?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionMessageAttachmentConditionInput | null> | null;\n or?: Array<ModelInteractionMessageAttachmentConditionInput | null> | null;\n not?: ModelInteractionMessageAttachmentConditionInput | null;\n};\n\nexport type ModelInteractionMessageAttachmentFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n interactionId?: ModelIDInput | null;\n interactionMessageId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n size?: ModelIntInput | null;\n type?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelInteractionMessageAttachmentFilterInput | null> | null;\n or?: Array<ModelInteractionMessageAttachmentFilterInput | null> | null;\n not?: ModelInteractionMessageAttachmentFilterInput | null;\n};\n\nexport type ModelInteractionChannelInput = {\n eq?: InteractionChannel | null;\n ne?: InteractionChannel | null;\n};\n\nexport type ModelInteractionContextInput = {\n eq?: InteractionContext | null;\n ne?: InteractionContext | null;\n};\n\nexport type ModelInteractionDirectionInput = {\n eq?: InteractionDirection | null;\n ne?: InteractionDirection | null;\n};\n\nexport type ModelInteractionMessageDirectionInput = {\n eq?: InteractionMessageDirection | null;\n ne?: InteractionMessageDirection | null;\n};\n\nexport type ModelInteractionMessageStatusInput = {\n eq?: InteractionMessageStatus | null;\n ne?: InteractionMessageStatus | null;\n};\n\nexport type ModelFlowRuntimeStatusInput = {\n eq?: FlowRuntimeStatus | null;\n ne?: FlowRuntimeStatus | null;\n};\n\nexport type ModelInteractionProviderInput = {\n eq?: InteractionProvider | null;\n ne?: InteractionProvider | null;\n};\n\nexport type ModelInteractionStatusInput = {\n eq?: InteractionStatus | null;\n ne?: InteractionStatus | null;\n};\n\nexport type InteractionRouteConfigurationInput = {\n teamId?: string | null;\n routingLogic?: InteractionRouteLogic | null;\n maxWaitTimeoutSeconds?: number | null;\n};\n","import { Country, Language, ModelIDInput, ModelIntInput, ModelStringInput, PhoneNumber, S3Object } from './common.model';\n\nexport enum TenantComplianceDocumentStatus {\n ACTIVE = 'ACTIVE',\n EXPIRED = 'EXPIRED',\n REVOKED = 'REVOKED',\n PENDING_VERIFICATION = 'PENDING_VERIFICATION',\n}\n\nexport enum TenantComplianceDocumentType {\n PAN_CARD = 'PAN_CARD',\n GST_CERTIFICATE = 'GST_CERTIFICATE',\n TDS_REGISTRATION = 'TDS_REGISTRATION',\n GOVT_CERTIFICATE = 'GOVT_CERTIFICATE',\n OTHER = 'OTHER',\n}\n\nexport enum TenantSSOConfigurationProtocol {\n SAML = 'SAML',\n OIDC = 'OIDC',\n}\n\n// Which external system minted the externalIds carried on Tenant/User/Entity.\nexport enum TenantExternalCrmProvider {\n SAP = 'SAP',\n SALESFORCE = 'SALESFORCE',\n}\n\nexport enum TenantOnboardingStatus {\n NOT_STARTED = 'NOT_STARTED',\n IN_PROGRESS = 'IN_PROGRESS',\n COMPLETED = 'COMPLETED',\n}\n\nexport type Tenant = {\n id: string;\n externalId?: string | null;\n externalCrmProvider?: TenantExternalCrmProvider | null;\n tenantDomain: string;\n organizationName: string;\n websiteURL?: string | null;\n image?: S3Object | null;\n billingInformation?: TenantBillingInformation | null;\n contactInformation?: TenantContactInformation | null;\n preferences?: TenantPreferences | null;\n ssoConfiguration?: TenantSSOConfiguration | null;\n security?: TenantSecurity | null;\n profile?: TenantProfile | null;\n onboarding?: TenantOnboarding | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type TenantComplianceDocument = {\n id: string;\n tenantId: string;\n documentName?: string | null;\n documentType: TenantComplianceDocumentType;\n documentNumber?: string | null;\n legalEntityName?: string | null;\n issuedBy?: string | null;\n issueDate?: number | null;\n expiryDate?: number | null;\n status: TenantComplianceDocumentStatus;\n notes?: string | null;\n file: S3Object;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type TenantBillingInformation = {\n companyName: string;\n address?: string | null;\n state?: string | null;\n city?: string | null;\n postalCode?: string | null;\n country?: Country | null;\n companyIdentificationNumber?: string | null;\n taxIdentificationNumber?: string | null;\n billingEmail?: string | null;\n website?: string | null;\n};\n\nexport type TenantContactInformation = {\n name: string;\n email: string;\n phoneNumber?: PhoneNumber | null;\n address?: string | null;\n state?: string | null;\n city?: string | null;\n postalCode?: string | null;\n country?: Country | null;\n};\n\nexport type TenantPreferences = {\n timezoneName?: string | null;\n language?: Language | null;\n allowUserToChangePreferences?: boolean | null;\n brandColor?: string | null;\n};\n\nexport type TenantWorkingHours = {\n timezone?: string | null;\n days?: Array<TenantWorkingHoursDay | null> | null;\n};\n\n// `start` / `end` are AWSTime strings (e.g. \"09:00:00.000\").\nexport type TenantWorkingHoursDay = {\n day?: string | null;\n open?: boolean | null;\n start?: string | null;\n end?: string | null;\n};\n\nexport type TenantAvailabilityCallingConfig = {\n customStatuses?: Array<TenantAvailabilityStatus | null> | null;\n allowDialUnsavedNumber?: boolean | null;\n acwTime?: number | null;\n ringtone?: string | null;\n};\n\nexport type TenantAvailabilityStatus = {\n key?: string | null;\n name?: string | null;\n colour?: string | null;\n available?: boolean | null;\n};\n\nexport type TenantProfile = {\n businessType?: string | null;\n industry?: string | null;\n teamSize?: string | null;\n goals?: Array<string | null> | null;\n};\n\nexport type TenantOnboarding = {\n status: TenantOnboardingStatus;\n currentStep?: string | null;\n completedSteps?: Array<string | null> | null;\n startedAt?: number | null;\n completedAt?: number | null;\n};\n\nexport type TenantSecurity = {\n domainValidationTokenExpiry?: number | null;\n userValidationTokenExpiry?: number | null;\n secretTokenExpiry?: number | null;\n sessionTokenExpiry?: number | null;\n sessionIdleTimeout?: number | null;\n};\n\nexport type TenantSSOConfiguration = {\n provider: string;\n protocol?: TenantSSOConfigurationProtocol | null;\n displayName?: string | null;\n configuration?: string | null;\n isEnabled?: boolean | null;\n isDefaultLoginMode?: boolean | null;\n};\n\nexport type CreateTenantInput = {\n id?: string | null;\n externalId?: string | null;\n externalCrmProvider?: TenantExternalCrmProvider | null;\n tenantDomain: string;\n organizationName: string;\n websiteURL?: string | null;\n image?: S3Object | null;\n billingInformation?: TenantBillingInformation | null;\n contactInformation?: TenantContactInformation | null;\n preferences?: TenantPreferences | null;\n ssoConfiguration?: TenantSSOConfiguration | null;\n security?: TenantSecurity | null;\n profile?: TenantProfile | null;\n onboarding?: TenantOnboarding | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UpdateTenantInput = {\n id: string;\n externalId?: string | null;\n externalCrmProvider?: TenantExternalCrmProvider | null;\n tenantDomain?: string | null;\n organizationName?: string | null;\n websiteURL?: string | null;\n image?: S3Object | null;\n billingInformation?: TenantBillingInformation | null;\n contactInformation?: TenantContactInformation | null;\n preferences?: TenantPreferences | null;\n ssoConfiguration?: TenantSSOConfiguration | null;\n security?: TenantSecurity | null;\n profile?: TenantProfile | null;\n onboarding?: TenantOnboarding | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId?: string | null;\n updatedByUserSessionId?: string | null;\n};\n\nexport type ModelTenantConditionInput = {\n externalId?: ModelStringInput | null;\n externalCrmProvider?: ModelTenantExternalCrmProviderInput | null;\n tenantDomain?: ModelStringInput | null;\n organizationName?: ModelStringInput | null;\n websiteURL?: ModelStringInput | null;\n activatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelTenantConditionInput | null> | null;\n or?: Array<ModelTenantConditionInput | null> | null;\n not?: ModelTenantConditionInput | null;\n};\n\nexport type ModelTenantFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n externalCrmProvider?: ModelTenantExternalCrmProviderInput | null;\n tenantDomain?: ModelStringInput | null;\n organizationName?: ModelStringInput | null;\n websiteURL?: ModelStringInput | null;\n activatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelTenantFilterInput | null> | null;\n or?: Array<ModelTenantFilterInput | null> | null;\n not?: ModelTenantFilterInput | null;\n};\n\nexport type ModelTenantExternalCrmProviderInput = {\n eq?: TenantExternalCrmProvider | null;\n ne?: TenantExternalCrmProvider | null;\n};\n\nexport type CreateTenantComplianceDocumentInput = {\n id?: string | null;\n tenantId: string;\n documentName?: string | null;\n documentType: TenantComplianceDocumentType;\n documentNumber?: string | null;\n legalEntityName?: string | null;\n issuedBy?: string | null;\n issueDate?: number | null;\n expiryDate?: number | null;\n status: TenantComplianceDocumentStatus;\n notes?: string | null;\n file: S3Object;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UpdateTenantComplianceDocumentInput = {\n id: string;\n tenantId?: string | null;\n documentName?: string | null;\n documentType?: TenantComplianceDocumentType | null;\n documentNumber?: string | null;\n legalEntityName?: string | null;\n issuedBy?: string | null;\n issueDate?: number | null;\n expiryDate?: number | null;\n status?: TenantComplianceDocumentStatus | null;\n notes?: string | null;\n file?: S3Object | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId?: string | null;\n updatedByUserSessionId?: string | null;\n};\n\nexport type ModelTenantComplianceDocumentConditionInput = {\n tenantId?: ModelIDInput | null;\n documentName?: ModelStringInput | null;\n documentType?: ModelTenantComplianceDocumentTypeInput | null;\n documentNumber?: ModelStringInput | null;\n legalEntityName?: ModelStringInput | null;\n issuedBy?: ModelStringInput | null;\n issueDate?: ModelIntInput | null;\n expiryDate?: ModelIntInput | null;\n status?: ModelTenantComplianceDocumentStatusInput | null;\n notes?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelTenantComplianceDocumentConditionInput | null> | null;\n or?: Array<ModelTenantComplianceDocumentConditionInput | null> | null;\n not?: ModelTenantComplianceDocumentConditionInput | null;\n};\n\nexport type ModelTenantComplianceDocumentFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n documentName?: ModelStringInput | null;\n documentType?: ModelTenantComplianceDocumentTypeInput | null;\n documentNumber?: ModelStringInput | null;\n legalEntityName?: ModelStringInput | null;\n issuedBy?: ModelStringInput | null;\n issueDate?: ModelIntInput | null;\n expiryDate?: ModelIntInput | null;\n status?: ModelTenantComplianceDocumentStatusInput | null;\n notes?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelTenantComplianceDocumentFilterInput | null> | null;\n or?: Array<ModelTenantComplianceDocumentFilterInput | null> | null;\n not?: ModelTenantComplianceDocumentFilterInput | null;\n};\n\nexport type ModelTenantComplianceDocumentTypeInput = {\n eq?: TenantComplianceDocumentType | null;\n ne?: TenantComplianceDocumentType | null;\n};\n\nexport type ModelTenantComplianceDocumentStatusInput = {\n eq?: TenantComplianceDocumentStatus | null;\n ne?: TenantComplianceDocumentStatus | null;\n};\n","import { Language, ModelIDInput, ModelIntInput, ModelStringInput, PhoneNumber, S3Object } from './common.model';\n\nexport type User = {\n id: string;\n externalId?: string | null;\n tenantId: string;\n email: string;\n name?: string | null;\n image?: S3Object | null;\n phoneNumber?: PhoneNumber | null;\n preferences?: UserPreferences | null;\n notificationSettings?: UserNotificationSettings | null;\n type?: UserType | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UserNotificationSettings = {\n allowPush?: boolean | null;\n allowEmail?: boolean | null;\n allowSMS?: boolean | null;\n allowWhatsApp?: boolean | null;\n};\n\nexport type UserPreferences = {\n timezoneName?: string | null;\n language?: Language | null;\n};\n\nexport enum UserStatus {\n READY = 'READY',\n NOT_READY = 'NOT_READY',\n INVITED = 'INVITED',\n BUSY = 'BUSY',\n AFTER_CALL_WORK = 'AFTER_CALL_WORK',\n}\n\nexport enum UserType {\n AGENT = 'AGENT',\n SUPERVISOR = 'SUPERVISOR',\n ADMINISTRATOR = 'ADMINISTRATOR',\n}\n\nexport type CreateUserInput = {\n id?: string | null;\n externalId?: string | null;\n tenantId: string;\n email: string;\n name?: string | null;\n image?: S3Object | null;\n phoneNumber?: PhoneNumber | null;\n preferences?: UserPreferences | null;\n notificationSettings?: UserNotificationSettings | null;\n type?: UserType | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UpdateUserInput = {\n id: string;\n externalId?: string | null;\n tenantId?: string | null;\n email?: string | null;\n name?: string | null;\n image?: S3Object | null;\n phoneNumber?: PhoneNumber | null;\n preferences?: UserPreferences | null;\n notificationSettings?: UserNotificationSettings | null;\n type?: UserType | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId?: string | null;\n updatedByUserSessionId?: string | null;\n};\n\nexport type ModelUserConditionInput = {\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n email?: ModelStringInput | null;\n name?: ModelStringInput | null;\n type?: ModelUserTypeInput | null;\n activatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelUserConditionInput | null> | null;\n or?: Array<ModelUserConditionInput | null> | null;\n not?: ModelUserConditionInput | null;\n};\n\nexport type ModelUserFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n email?: ModelStringInput | null;\n name?: ModelStringInput | null;\n type?: ModelUserTypeInput | null;\n activatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n updatedByUserId?: ModelIDInput | null;\n updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelUserFilterInput | null> | null;\n or?: Array<ModelUserFilterInput | null> | null;\n not?: ModelUserFilterInput | null;\n};\n\nexport type ModelUserStatusInput = {\n eq?: UserStatus | null;\n ne?: UserStatus | null;\n};\n\nexport type ModelUserTypeInput = {\n eq?: UserType | null;\n ne?: UserType | null;\n};\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\nimport { Country, Language } from '../../models/dynamodb/common.model';\n\nexport const FIELDS_LANGUAGE = `\n code\n nameEn\n nameLocal\n`;\n\nexport const FIELDS_COUNTRY = `\n code\n nameEn\n nameLocal\n currency {\n code\n nameEn\n }\n officialLanguage {\n ${FIELDS_LANGUAGE}\n }\n callingCode\n region\n flag\n`;\n\nexport const FIELDS_PHONE_NUMBER = `\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CommonService {\n private countriesData!: Country[];\n private languagesData!: Language[];\n\n // private static readonly COUNTRY_ENDPOINT = `https://assets.snugdesk.com/metadata/countries.json`;\n private static readonly COUNTRY_ENDPOINT = `https://snugdesk-assets.s3.amazonaws.com/metadata/countries.json`;\n\n // private static readonly LANGUAGE_ENDPOINT = `https://assets.snugdesk.com/metadata/languages.json`;\n private static readonly LANGUAGE_ENDPOINT = `https://snugdesk-assets.s3.amazonaws.com/metadata/languages.json`;\n\n constructor(private httpClient: HttpClient) {}\n\n async getAllCountries(): Promise<Country[]> {\n if (!this.countriesData) {\n this.countriesData = await lastValueFrom(this.httpClient.get<Country[]>(CommonService.COUNTRY_ENDPOINT));\n this.countriesData.sort((a, b) => (a.nameEn ?? '').localeCompare(b.nameEn ?? ''));\n }\n return this.countriesData;\n }\n\n async getCountryFromCallingCode(countryCallingCode: string): Promise<Country | undefined> {\n const countries = await this.getAllCountries();\n return countries.find((country) => country.callingCode === countryCallingCode);\n }\n\n async getCountryFromCountryCode(countryCode: string): Promise<Country | undefined> {\n const countries = await this.getAllCountries();\n return countries.find((country) => country.code === countryCode);\n }\n\n async getAllLanguages(): Promise<Language[]> {\n if (!this.languagesData) {\n this.languagesData = await lastValueFrom(this.httpClient.get<Language[]>(CommonService.LANGUAGE_ENDPOINT));\n this.languagesData.sort((a, b) => (a.nameEn ?? '').localeCompare(b.nameEn ?? ''));\n }\n return this.languagesData;\n }\n\n async getLanguageFromLanguageCode(languageCode: string): Promise<Language | undefined> {\n const languages = await this.getAllLanguages();\n return languages?.find((language) => language.code === languageCode);\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { List, ModelSortDirection, ModelStringKeyConditionInput, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport { Entity, EntityType, CreateEntityInput, UpdateEntityInput, ModelEntityConditionInput, ModelEntityFilterInput, ModelEntityTypeFilterInput } from '../../models/dynamodb/entity.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { Observable } from 'rxjs';\n\nexport const FIELDS_ENTITY_TYPE = `\n id\n externalId\n tenantId\n name\n description\n image {\n key\n bucket\n location\n }\n createdAt\n updatedAt\n deletedAt\n`;\n\n// Adds the custom-field definitions — only worth fetching when listing types, not\n// on every nested entityType read.\nexport const FIELDS_ENTITY_TYPE_EXPANDED = `\n ${FIELDS_ENTITY_TYPE}\n entityFields\n organizationFields\n`;\n\nexport const FIELDS_ENTITY = `\n id\n externalId\n tenantId\n entityTypeId\n entityType {\n ${FIELDS_ENTITY_TYPE}\n }\n parentId\n name\n image {\n key\n bucket\n location\n }\n email\n phoneNumber {\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n }\n phoneNumberE164\n isOrganization\n customFields\n metadata\n notes\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\n }\n }\n contactPreferences {\n allowCall\n allowEmail\n allowSMS\n allowWhatsApp\n }\n createdAt\n updatedAt\n blockedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_ENTITY_EXPANDED = `\n id\n externalId\n tenantId\n entityTypeId\n entityType {\n ${FIELDS_ENTITY_TYPE}\n }\n parentId\n parent {\n id\n externalId\n tenantId\n entityTypeId\n name\n image {\n key\n bucket\n location\n }\n isOrganization\n email\n phoneNumber {\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n }\n phoneNumberE164\n createdAt\n updatedAt\n blockedAt\n deletedAt\n }\n name\n image {\n key\n bucket\n location\n }\n isOrganization\n email\n phoneNumber {\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n }\n phoneNumberE164\n customFields\n metadata\n notes\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\n }\n }\n contactPreferences {\n allowCall\n allowEmail\n allowSMS\n allowWhatsApp\n }\n createdAt\n updatedAt\n blockedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_ENTITY_MINIMAL = `\n id\n externalId\n tenantId\n entityTypeId\n metadata\n name\n image {\n key\n bucket\n location\n }\n email\n phoneNumber {\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n }\n phoneNumberE164\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\n }\n }\n contactPreferences {\n allowCall\n allowEmail\n allowSMS\n allowWhatsApp\n }\n createdAt\n updatedAt\n blockedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\ntype __SubscriptionContainer = {\n OnEntityById: Entity;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EntityService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetEntity(id: string): Promise<Entity> {\n const statement = /* GraphQL */ `\n query GetEntity($id: ID!) {\n getEntity(id: $id) {\n ${FIELDS_ENTITY_EXPANDED}\n }\n }\n `;\n const response = await this.appSyncService.query<any>(statement, { id });\n return <Entity>response.data.getEntity;\n }\n\n async CreateEntity(input: CreateEntityInput, condition?: ModelEntityConditionInput): Promise<Entity> {\n const statement = /* GraphQL */ `\n mutation CreateEntity($input: CreateEntityInput!, $condition: ModelEntityConditionInput) {\n createEntity(input: $input, condition: $condition) {\n ${FIELDS_ENTITY_MINIMAL}\n }\n }\n `;\n const variables: { input: CreateEntityInput; condition?: ModelEntityConditionInput } = { input };\n if (condition) {\n variables.condition = condition;\n }\n const response = await this.appSyncService.query<any>(statement, variables);\n return <Entity>response.data.createEntity;\n }\n\n async UpdateEntity(input: UpdateEntityInput, condition?: ModelEntityConditionInput): Promise<Entity> {\n const statement = /* GraphQL */ `\n mutation UpdateEntity($input: UpdateEntityInput!, $condition: ModelEntityConditionInput) {\n updateEntity(input: $input, condition: $condition) {\n ${FIELDS_ENTITY_MINIMAL}\n }\n }\n `;\n const variables: { input: UpdateEntityInput; condition?: ModelEntityConditionInput } = { input };\n if (condition) {\n variables.condition = condition;\n }\n const response = await this.appSyncService.query<any>(statement, variables);\n return <Entity>response.data.updateEntity;\n }\n\n async ListEntitiesByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityFilterInput, limit?: number, nextToken?: string): Promise<List<Entity>> {\n const statement = `query ListEntitiesByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityFilterInput, $limit: Int, $nextToken: String) {\n listEntitiesByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Entity>>response.data.listEntitiesByTenantId;\n }\n\n async ListEntitiesByTenantIdAndExternalId(tenantId: string, externalId?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityFilterInput, limit?: number, nextToken?: string): Promise<List<Entity>> {\n const statement = `query ListEntitiesByTenantIdAndExternalId($tenantId: ID!, $externalId: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityFilterInput, $limit: Int, $nextToken: String) {\n listEntitiesByTenantIdAndExternalId(\n tenantId: $tenantId\n externalId: $externalId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (externalId) {\n gqlAPIServiceArguments.externalId = externalId;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Entity>>response.data.listEntitiesByTenantIdAndExternalId;\n }\n\n async ListEntitiesByTenantIdAndPhoneNumberE164(tenantId: string, phoneNumberE164?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityFilterInput, limit?: number, nextToken?: string): Promise<List<Entity>> {\n const statement = `query ListEntitiesByTenantIdAndPhoneNumberE164($tenantId: ID!, $phoneNumberE164: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityFilterInput, $limit: Int, $nextToken: String) {\n listEntitiesByTenantIdAndPhoneNumberE164(\n tenantId: $tenantId\n phoneNumberE164: $phoneNumberE164\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (phoneNumberE164) {\n gqlAPIServiceArguments.phoneNumberE164 = phoneNumberE164;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Entity>>response.data.listEntitiesByTenantIdAndPhoneNumberE164;\n }\n\n async ListEntityTypesByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityTypeFilterInput, limit?: number, nextToken?: string): Promise<List<EntityType>> {\n const statement = `query ListEntityTypesByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityTypeFilterInput, $limit: Int, $nextToken: String) {\n listEntityTypesByTenantId(tenantId: $tenantId, name: $name, sortDirection: $sortDirection, filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n ${FIELDS_ENTITY_TYPE_EXPANDED}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<EntityType>>response.data.listEntityTypesByTenantId;\n }\n\n OnEntityByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnEntityById'>>> {\n const statement = `subscription OnEntityById($id: ID!) {\n OnEntityById(id: $id) {\n ${FIELDS_ENTITY}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n id,\n };\n\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnEntityById'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, \"OnEntityById\">>>; */\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { List, ModelSortDirection, ModelStringKeyConditionInput } from '../../models/dynamodb/common.model';\nimport { CreateInteractionEndpointInput, InteractionEndpoint, ModelInteractionEndpointConditionInput, ModelInteractionEndpointFilterInput, UpdateInteractionEndpointInput } from '../../models/dynamodb/interaction-endpoint.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\n\nconst FIELDS_INTERACTION_ENDPOINT_PRICE_DETAILS = `\n currency\n upfrontCost\n monthlyCost\n inboundCost\n outboundCost\n`;\n\nconst FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION = `\n action\n audioMediaName\n audioUrl\n`;\n\nexport const FIELDS_INTERACTION_ENDPOINT_RECORDING_CONFIG = `\n mode\n notify\n audioMediaName\n audioUrl\n`;\n\nexport const FIELDS_INTERACTION_ENDPOINT_WORKING_HOURS_ACTION_CONFIG = `\n duringHours {\n ${FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION}\n }\n afterHours {\n ${FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION}\n }\n whenClosed {\n ${FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION}\n }\n`;\n\nexport const FIELDS_INTERACTION_ENDPOINT_ROUTING_CONFIG = `\n answeringRoles\n knownCallerStrategy\n unknownCallerStrategy\n ifNoPickup {\n ${FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION}\n }\n escalationRoles\n noAnswer {\n ${FIELDS_INTERACTION_ENDPOINT_AUDIO_ACTION}\n }\n`;\n\nexport const FIELDS_INTERACTION_ENDPOINT = `\n id\n externalId\n tenantId\n widgetId\n address\n configuration\n recordingConfig {\n ${FIELDS_INTERACTION_ENDPOINT_RECORDING_CONFIG}\n }\n workingHoursActionConfig {\n ${FIELDS_INTERACTION_ENDPOINT_WORKING_HOURS_ACTION_CONFIG}\n }\n routingConfig {\n ${FIELDS_INTERACTION_ENDPOINT_ROUTING_CONFIG}\n }\n # buyPrice is intentionally not selected here — it is our cost, not the tenant's price.\n sellPrice {\n ${FIELDS_INTERACTION_ENDPOINT_PRICE_DETAILS}\n }\n documents {\n fileName\n documentType\n contentType\n file {\n key\n bucket\n location\n }\n }\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_INTERACTION_ENDPOINT_MINIMAL = `\n id\n externalId\n tenantId\n widgetId\n address\n configuration\n createdAt\n updatedAt\n deletedAt\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InteractionEndpointService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetInteractionEndpoint(id: string): Promise<InteractionEndpoint> {\n const statement = `query GetInteractionEndpoint($id: ID!) {\n getInteractionEndpoint(id: $id) {\n ${FIELDS_INTERACTION_ENDPOINT}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n id,\n };\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionEndpoint>response.data.getInteractionEndpoint;\n }\n\n async CreateInteractionEndpoint(input: CreateInteractionEndpointInput, condition?: ModelInteractionEndpointConditionInput): Promise<InteractionEndpoint> {\n const statement = `mutation CreateInteractionEndpoint($input: CreateInteractionEndpointInput!, $condition: ModelInteractionEndpointConditionInput) {\n createInteractionEndpoint(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_ENDPOINT_MINIMAL}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n input,\n };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionEndpoint>response.data.createInteractionEndpoint;\n }\n\n async UpdateInteractionEndpoint(input: UpdateInteractionEndpointInput, condition?: ModelInteractionEndpointConditionInput): Promise<InteractionEndpoint> {\n const statement = `mutation UpdateInteractionEndpoint($input: UpdateInteractionEndpointInput!, $condition: ModelInteractionEndpointConditionInput) {\n updateInteractionEndpoint(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_ENDPOINT_MINIMAL}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n input,\n };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionEndpoint>response.data.updateInteractionEndpoint;\n }\n\n async ListInteractionEndpointsByTenantId(tenantId: string, address?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionEndpointFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionEndpoint>> {\n const statement = `query ListInteractionEndpointsByTenantId($tenantId: ID!, $address: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionEndpointFilterInput, $limit: Int, $nextToken: String) {\n listInteractionEndpointsByTenantId(\n tenantId: $tenantId\n address: $address\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_ENDPOINT}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (address) {\n gqlAPIServiceArguments.address = address;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionEndpoint>>response.data.listInteractionEndpointsByTenantId;\n }\n\n async ListInteractionEndpointsByWidgetId(widgetId: string, address?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionEndpointFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionEndpoint>> {\n const statement = `query ListInteractionEndpointsByWidgetId($widgetId: ID!, $address: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionEndpointFilterInput, $limit: Int, $nextToken: String) {\n listInteractionEndpointsByWidgetId(\n widgetId: $widgetId\n address: $address\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_ENDPOINT}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n widgetId,\n };\n if (address) {\n gqlAPIServiceArguments.address = address;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionEndpoint>>response.data.listInteractionEndpointsByWidgetId;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { List, ModelIntKeyConditionInput, ModelSortDirection, ModelStringKeyConditionInput } from '../../models/dynamodb/common.model';\nimport { InteractionWidget, InteractionWidgetUserSetting, ModelInteractionWidgetFilterInput, ModelInteractionWidgetUserSettingFilterInput } from '../../models/dynamodb/interaction-widget.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\n\nexport const FIELDS_INTERACTION_WIDGET = `\n id\n tenantId\n channel\n provider\n providerAccountId\n name\n description\n configuration\n isRecordingEnabledByDefault\n isRecordingEnabledOnDemand\n isTranscriptionEnabledByDefault\n isTranscriptionEnabledOnDemand\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_INTERACTION_WIDGET_SESSION = `\n id\n tenantId\n widgetId\n entityId\n ipDetails\n createdAt\n updatedAt\n`;\n\nexport const FIELDS_INTERACTION_WIDGET_USER_SETTING = `\n id\n widgetId\n userId\n configuration\n allowOverride\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InteractionWidgetService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetInteractionWidget(id: string): Promise<InteractionWidget> {\n const statement = `query GetInteractionWidget($id: ID!) {\n getInteractionWidget(id: $id) {\n ${FIELDS_INTERACTION_WIDGET}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionWidget>response.data.getInteractionWidget;\n }\n\n async ListInteractionWidgetsByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionWidgetFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionWidget>> {\n const statement = `query ListInteractionWidgetsByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionWidgetFilterInput, $limit: Int, $nextToken: String) {\n listInteractionWidgetsByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_WIDGET}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionWidget>>response.data.listInteractionWidgetsByTenantId;\n }\n\n async ListInteractionWidgetUserSettingsByUserId(userId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionWidgetUserSettingFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionWidgetUserSetting>> {\n const statement = `query ListInteractionWidgetUserSettingsByUserId($userId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionWidgetUserSettingFilterInput, $limit: Int, $nextToken: String) {\n listInteractionWidgetUserSettingsByUserId(\n userId: $userId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_WIDGET_USER_SETTING}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = { userId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionWidgetUserSetting>>response.data.listInteractionWidgetUserSettingsByUserId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { List, ModelSortDirection, ModelStringKeyConditionInput, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport { CreateUserInput, ModelUserConditionInput, ModelUserFilterInput, UpdateUserInput, User } from '../../models/dynamodb/user.model';\nimport { FIELDS_LANGUAGE, FIELDS_PHONE_NUMBER } from './common.service';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\n\nexport const FIELDS_USER = `\n id\n externalId\n tenantId\n email\n name\n image {\n key\n bucket\n location\n }\n phoneNumber {\n ${FIELDS_PHONE_NUMBER}\n }\n preferences {\n timezoneName\n language {\n ${FIELDS_LANGUAGE}\n }\n }\n notificationSettings {\n allowPush\n allowEmail\n allowSMS\n allowWhatsApp\n }\n type\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\ntype __SubscriptionContainer = {\n OnUserById: User;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetUser(id: string): Promise<User> {\n const statement = `query GetUser($id: ID!) {\n getUser(id: $id) {\n ${FIELDS_USER}\n }\n }`;\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <User>response.data.getUser;\n }\n\n async CreateUser(input: CreateUserInput, condition?: ModelUserConditionInput): Promise<User> {\n const statement = `mutation CreateUser($input: CreateUserInput!, $condition: ModelUserConditionInput) {\n createUser(input: $input, condition: $condition) {\n ${FIELDS_USER}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <User>response.data.createUser;\n }\n\n async UpdateUser(input: UpdateUserInput, condition?: ModelUserConditionInput): Promise<User> {\n const statement = `mutation UpdateUser($input: UpdateUserInput!, $condition: ModelUserConditionInput) {\n updateUser(input: $input, condition: $condition) {\n ${FIELDS_USER}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <User>response.data.updateUser;\n }\n\n async ListUsersByTenantIdAndEmail(tenantId: string, email?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelUserFilterInput, limit?: number, nextToken?: string): Promise<List<User>> {\n const statement = `query ListUsersByTenantIdAndEmail($tenantId: ID!, $email: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelUserFilterInput, $limit: Int, $nextToken: String) {\n listUsersByTenantIdAndEmail(\n tenantId: $tenantId\n email: $email\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_USER}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (email) {\n gqlAPIServiceArguments.email = email;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<User>>response.data.listUsersByTenantIdAndEmail;\n }\n\n async ListUsersByTenantIdAndExternalId(tenantId: string, externalId?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelUserFilterInput, limit?: number, nextToken?: string): Promise<List<User>> {\n const statement = `query ListUsersByTenantIdAndExternalId($tenantId: ID!, $externalId: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelUserFilterInput, $limit: Int, $nextToken: String) {\n listUsersByTenantIdAndExternalId(\n tenantId: $tenantId\n externalId: $externalId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_USER}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (externalId) {\n gqlAPIServiceArguments.externalId = externalId;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<User>>response.data.listUsersByTenantIdAndExternalId;\n }\n\n async ListUsersByTenantIdAndName(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelUserFilterInput, limit?: number, nextToken?: string): Promise<List<User>> {\n const statement = `query ListUsersByTenantIdAndName($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelUserFilterInput, $limit: Int, $nextToken: String) {\n listUsersByTenantIdAndName(tenantId: $tenantId, name: $name, sortDirection: $sortDirection, filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n ${FIELDS_USER}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<User>>response.data.listUsersByTenantIdAndName;\n }\n\n OnUserByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserById'>>> {\n const statement = `subscription OnUserById($id: ID!) {\n OnUserById(id: $id) {\n ${FIELDS_USER}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserById'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, \"OnUserById\">>>; */\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { CreateTeamMemberInput, ModelTeamMemberConditionInput, ModelTeamMemberFilterInput, Team, TeamMember, UpdateTeamMemberInput } from '../../models/dynamodb/team.model';\nimport { List, ModelIntKeyConditionInput, ModelSortDirection } from '../../models/dynamodb/common.model';\n\nimport { FIELDS_USER } from './user.service';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\n\nexport const FIELDS_TEAM = `\n id\n tenantId\n name\n description\n image {\n key\n bucket\n location\n }\n ticketFields\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_TEAM_MEMBER = `\n id\n teamId\n team {\n ${FIELDS_TEAM}\n }\n userId\n user {\n ${FIELDS_USER}\n }\n isManager\n createdAt\n updatedAt\n deletedAt\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TeamService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetTeam(id: string): Promise<Team> {\n const statement = `query GetTeam($id: ID!) {\n getTeam(id: $id) {\n ${FIELDS_TEAM}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Team>response.data.getTeam;\n }\n\n async CreateTeamMember(input: CreateTeamMemberInput, condition?: ModelTeamMemberConditionInput): Promise<TeamMember> {\n const statement = `mutation CreateTeamMember($input: CreateTeamMemberInput!, $condition: ModelTeamMemberConditionInput) {\n createTeamMember(input: $input, condition: $condition) {\n ${FIELDS_TEAM_MEMBER}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <TeamMember>response.data.createTeamMember;\n }\n\n async UpdateTeamMember(input: UpdateTeamMemberInput, condition?: ModelTeamMemberConditionInput): Promise<TeamMember> {\n const statement = `mutation UpdateTeamMember($input: UpdateTeamMemberInput!, $condition: ModelTeamMemberConditionInput) {\n updateTeamMember(input: $input, condition: $condition) {\n ${FIELDS_TEAM_MEMBER}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <TeamMember>response.data.updateTeamMember;\n }\n\n async ListTeamMembershipsByUserId(userId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTeamMemberFilterInput, limit?: number, nextToken?: string): Promise<List<TeamMember>> {\n const statement = `query ListTeamMembershipsByUserId($userId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTeamMemberFilterInput, $limit: Int, $nextToken: String) {\n listTeamMembershipsByUserId(\n userId: $userId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TEAM_MEMBER}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = {\n userId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<TeamMember>>response.data.listTeamMembershipsByUserId;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { List, ModelIDKeyConditionInput, ModelIntKeyConditionInput, ModelSortDirection, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport {\n CreateInteractionAttendeeInput,\n CreateInteractionInput,\n CreateInteractionMessageAttachmentInput,\n CreateInteractionMessageInput,\n Interaction,\n InteractionAttendee,\n InteractionInvitee,\n InteractionMessage,\n InteractionMessageAttachment,\n ModelInteractionAttendeeConditionInput,\n ModelInteractionAttendeeFilterInput,\n ModelInteractionConditionInput,\n ModelInteractionFilterInput,\n ModelInteractionInviteeFilterInput,\n ModelInteractionMessageAttachmentConditionInput,\n ModelInteractionMessageAttachmentFilterInput,\n ModelInteractionMessageConditionInput,\n ModelInteractionMessageFilterInput,\n UpdateInteractionAttendeeInput,\n UpdateInteractionInput,\n} from '../../models/dynamodb/interaction.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { FIELDS_ENTITY, FIELDS_ENTITY_MINIMAL } from './entity.service';\nimport { FIELDS_INTERACTION_ENDPOINT_MINIMAL } from './interaction-endpoint.service';\nimport { FIELDS_INTERACTION_WIDGET } from './interaction-widget.service';\nimport { FIELDS_TEAM } from './team.service';\nimport { FIELDS_USER } from './user.service';\n\ntype __SubscriptionContainer = {\n OnInteractionById: Interaction;\n OnInteractionByEntityId: Interaction;\n OnInteractionInviteeByInteractionId: InteractionInvitee;\n OnInteractionInviteeByUserId: InteractionInvitee;\n OnInteractionAttendeeByInteractionId: InteractionAttendee;\n OnInteractionMessageByInteractionId: InteractionMessage;\n OnInteractionMessageByEntityConversationId: InteractionMessage;\n};\n\nexport const FIELDS_INTERACTION_HOST = `\n id\n interactionId\n entityId\n teamId\n userId\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_MINIMAL = `\n id\n tenantId\n widgetId\n endpointId\n entityConversationId\n entityId\n teamId\n hostId\n providerInteractionId\n channel\n provider\n context\n direction\n status\n last_status\n subject\n metadata\n notes\n summary\n transcription {\n key\n bucket\n location\n }\n recording {\n key\n bucket\n location\n }\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n startedAt\n completedAt\n duration\n aiProcessingStatus\n aiProcessingCompletedAt\n postProcessingStatus\n postProcessingCompletedAt\n reportProcessingStatus\n reportProcessingCompletedAt\n temp_isLocked\n temp_isAvailableTenantIdUnion\n campaignId\n flowVersion\n currentCampaignFlowNodeId\n flowVariables\n flowStatus\n flowRetryCount\n flowReminderIndex\n flowTimeoutAt\n flowTimerScheduleArn\n isAgentHandling\n assignedAgentId\n agentHandlingStartedAt\n agentHandlingEndedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION = `\n id\n tenantId\n widgetId\n endpointId\n entityConversationId\n entityId\n teamId\n hostId\n host {\n ${FIELDS_INTERACTION_HOST}\n }\n providerInteractionId\n channel\n provider\n context\n direction\n status\n last_status\n subject\n metadata\n notes\n summary\n transcription {\n key\n bucket\n location\n }\n recording {\n key\n bucket\n location\n }\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n startedAt\n completedAt\n duration\n aiProcessingStatus\n aiProcessingCompletedAt\n postProcessingStatus\n postProcessingCompletedAt\n reportProcessingStatus\n reportProcessingCompletedAt\n temp_isLocked\n temp_isAvailableTenantIdUnion\n campaignId\n flowVersion\n currentCampaignFlowNodeId\n flowVariables\n flowStatus\n flowRetryCount\n flowReminderIndex\n flowTimeoutAt\n flowTimerScheduleArn\n isAgentHandling\n assignedAgentId\n agentHandlingStartedAt\n agentHandlingEndedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_EXPANDED = `\n id\n tenantId\n widgetId\n widget {\n ${FIELDS_INTERACTION_WIDGET}\n }\n endpointId\n endpoint {\n ${FIELDS_INTERACTION_ENDPOINT_MINIMAL}\n }\n entityConversationId\n entityConversation {\n id\n tenantId\n entityId\n entityAddress\n interactionChannel\n interactionProvider\n isCampaignEngaged\n campaignId\n lastCampaignFlowNodeId\n lastInteractionMessageId\n metadata\n lastActivityAt\n lastMessageAt\n archivedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n }\n entityId\n entity {\n ${FIELDS_ENTITY}\n }\n teamId\n team {\n ${FIELDS_TEAM}\n }\n hostId\n host {\n ${FIELDS_INTERACTION_HOST}\n }\n providerInteractionId\n channel\n provider\n context\n direction\n status\n last_status\n subject\n metadata\n notes\n summary\n transcription {\n key\n bucket\n location\n }\n recording {\n key\n bucket\n location\n }\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n startedAt\n completedAt\n duration\n aiProcessingStatus\n aiProcessingCompletedAt\n postProcessingStatus\n postProcessingCompletedAt\n reportProcessingStatus\n reportProcessingCompletedAt\n temp_isLocked\n temp_isAvailableTenantIdUnion\n campaignId\n flowVersion\n currentCampaignFlowNodeId\n flowVariables\n flowStatus\n flowRetryCount\n flowReminderIndex\n flowTimeoutAt\n flowTimerScheduleArn\n isAgentHandling\n assignedAgentId\n agentHandlingStartedAt\n agentHandlingEndedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_INVITEE = `\n id\n interactionId\n interaction {\n ${FIELDS_INTERACTION}\n }\n entityId\n entity {\n ${FIELDS_ENTITY_MINIMAL}\n }\n teamId\n userId\n isAdministrator\n temp_expiringAt\n expiredAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_ATTENDEE = `\n id\n interactionId\n entityId\n interactionWidgetSessionId\n teamId\n userId\n userSessionId\n name\n metadata\n customFields\n isAdministrator\n joinedAt\n exitedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_ATTENDEE_EXPANDED = `\n id\n interactionId\n entityId\n entity {\n ${FIELDS_ENTITY}\n }\n interactionWidgetSessionId\n teamId\n team {\n ${FIELDS_TEAM}\n }\n userId\n user {\n ${FIELDS_USER}\n }\n userSessionId\n name\n metadata\n customFields\n isAdministrator\n joinedAt\n exitedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_MESSAGE_ATTACHMENT = `\n id\n externalId\n interactionId\n interactionMessageId\n name\n size\n type\n file {\n key\n bucket\n location\n }\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_INTERACTION_MESSAGE = `\n id\n externalId\n endpointId\n campaignId\n campaignFlowNodeId\n entityConversationId\n interactionId\n interactionAttendeeId\n body\n metadata\n referenceMessageId\n direction\n status\n statusUpdatedAt\n createdAt\n updatedAt\n deletedAt\n messageAttachments {\n items {\n ${FIELDS_INTERACTION_MESSAGE_ATTACHMENT}\n }\n nextToken\n }\n`;\n\nexport const FIELDS_INTERACTION_MESSAGE_EXPANDED = `\n id\n externalId\n endpointId\n endpoint {\n ${FIELDS_INTERACTION_ENDPOINT_MINIMAL}\n }\n campaignId\n campaignFlowNodeId\n entityConversationId\n interactionId\n interactionAttendeeId\n interactionAttendee {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n body\n metadata\n referenceMessageId\n direction\n status\n statusUpdatedAt\n createdAt\n updatedAt\n deletedAt\n messageAttachments {\n items {\n ${FIELDS_INTERACTION_MESSAGE_ATTACHMENT}\n }\n nextToken\n }\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InteractionService {\n public newInteractionInviteObservable$: BehaviorSubject<any> = new BehaviorSubject<any>(undefined);\n\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetInteraction(id: string): Promise<Interaction> {\n const statement = `query GetInteraction($id: ID!) {\n getInteraction(id: $id) {\n ${FIELDS_INTERACTION_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Interaction>response.data.getInteraction;\n }\n\n async GetInteractionAttendee(id: string): Promise<InteractionAttendee> {\n const statement = `query GetInteractionAttendee($id: ID!) {\n getInteractionAttendee(id: $id) {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionAttendee>response.data.getInteractionAttendee;\n }\n\n async GetInteractionMessage(id: string): Promise<InteractionMessage> {\n const statement = `query GetInteractionMessage($id: ID!) {\n getInteractionMessage(id: $id) {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n id,\n };\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionMessage>response.data.getInteractionMessage;\n }\n\n async CreateInteraction(input: CreateInteractionInput, condition?: ModelInteractionConditionInput): Promise<Interaction> {\n const statement = `mutation CreateInteraction($input: CreateInteractionInput!, $condition: ModelInteractionConditionInput) {\n createInteraction(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Interaction>response.data.createInteraction;\n }\n\n async UpdateInteraction(input: UpdateInteractionInput, condition?: ModelInteractionConditionInput): Promise<Interaction> {\n const statement = `mutation UpdateInteraction($input: UpdateInteractionInput!, $condition: ModelInteractionConditionInput) {\n updateInteraction(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Interaction>response.data.updateInteraction;\n }\n\n async CreateInteractionAttendee(input: CreateInteractionAttendeeInput, condition?: ModelInteractionAttendeeConditionInput): Promise<InteractionAttendee> {\n const statement = `mutation CreateInteractionAttendee($input: CreateInteractionAttendeeInput!, $condition: ModelInteractionAttendeeConditionInput) {\n createInteractionAttendee(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionAttendee>response.data.createInteractionAttendee;\n }\n\n async UpdateInteractionAttendee(input: UpdateInteractionAttendeeInput, condition?: ModelInteractionAttendeeConditionInput): Promise<InteractionAttendee> {\n const statement = `mutation UpdateInteractionAttendee($input: UpdateInteractionAttendeeInput!, $condition: ModelInteractionAttendeeConditionInput) {\n updateInteractionAttendee(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionAttendee>response.data.updateInteractionAttendee;\n }\n\n async CreateInteractionMessage(input: CreateInteractionMessageInput, condition?: ModelInteractionMessageConditionInput): Promise<InteractionMessage> {\n const statement = `mutation CreateInteractionMessage($input: CreateInteractionMessageInput!, $condition: ModelInteractionMessageConditionInput) {\n createInteractionMessage(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_MESSAGE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionMessage>response.data.createInteractionMessage;\n }\n\n async CreateInteractionMessageAttachment(input: CreateInteractionMessageAttachmentInput, condition?: ModelInteractionMessageAttachmentConditionInput): Promise<InteractionMessageAttachment> {\n const statement = `mutation CreateInteractionMessageAttachment($input: CreateInteractionMessageAttachmentInput!, $condition: ModelInteractionMessageAttachmentConditionInput) {\n createInteractionMessageAttachment(input: $input, condition: $condition) {\n ${FIELDS_INTERACTION_MESSAGE_ATTACHMENT}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <InteractionMessageAttachment>response.data.createInteractionMessageAttachment;\n }\n\n async ListInteractionsByTenantId(tenantId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionFilterInput, limit?: number, nextToken?: string): Promise<List<Interaction>> {\n const statement = `query ListInteractionsByTenantId($tenantId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionFilterInput, $limit: Int, $nextToken: String) {\n listInteractionsByTenantId(\n tenantId: $tenantId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Interaction>>response.data.listInteractionsByTenantId;\n }\n\n async ListInteractionsByEntityId(entityId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionFilterInput, limit?: number, nextToken?: string): Promise<List<Interaction>> {\n const statement = `query ListInteractionsByEntityId($entityId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionFilterInput, $limit: Int, $nextToken: String) {\n listInteractionsByEntityId(\n entityId: $entityId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n entityId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Interaction>>response.data.listInteractionsByEntityId;\n }\n\n async ListInteractionsByEntityConversationId(entityConversationId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionFilterInput, limit?: number, nextToken?: string): Promise<List<Interaction>> {\n const statement = `query ListInteractionsByEntityConversationId($entityConversationId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionFilterInput, $limit: Int, $nextToken: String) {\n listInteractionsByEntityConversationId(\n entityConversationId: $entityConversationId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n entityConversationId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Interaction>>response.data.listInteractionsByEntityConversationId;\n }\n\n async ListInteractionInviteesByUserId(userId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionInviteeFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionInvitee>> {\n const statement = `query ListInteractionInviteesByUserId($userId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionInviteeFilterInput, $limit: Int, $nextToken: String) {\n listInteractionInviteesByUserId(\n userId: $userId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_INVITEE}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { userId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionInvitee>>response.data.listInteractionInviteesByUserId;\n }\n\n async ListInteractionAttendeesByInteractionId(interactionId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionAttendeeFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionAttendee>> {\n const statement = `query ListInteractionAttendeesByInteractionId($interactionId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionAttendeeFilterInput, $limit: Int, $nextToken: String) {\n listInteractionAttendeesByInteractionId(\n interactionId: $interactionId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionAttendee>>response.data.listInteractionAttendeesByInteractionId;\n }\n\n async ListInteractionAttendeesByInteractionIdAndEntityId(interactionId: string, entityId?: ModelIDKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionAttendeeFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionAttendee>> {\n const statement = `query ListInteractionAttendeesByInteractionIdAndEntityId($interactionId: ID!, $entityId: ModelIDKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionAttendeeFilterInput, $limit: Int, $nextToken: String) {\n listInteractionAttendeesByInteractionIdAndEntityId(\n interactionId: $interactionId\n entityId: $entityId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n if (entityId) {\n gqlAPIServiceArguments.entityId = entityId;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionAttendee>>response.data.listInteractionAttendeesByInteractionIdAndEntityId;\n }\n\n async ListInteractionAttendeesByInteractionIdAndUserId(interactionId: string, userId?: ModelIDKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionAttendeeFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionAttendee>> {\n const statement = `query ListInteractionAttendeesByInteractionIdAndUserId($interactionId: ID!, $userId: ModelIDKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionAttendeeFilterInput, $limit: Int, $nextToken: String) {\n listInteractionAttendeesByInteractionIdAndUserId(\n interactionId: $interactionId\n userId: $userId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_ATTENDEE}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n if (userId) {\n gqlAPIServiceArguments.userId = userId;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionAttendee>>response.data.listInteractionAttendeesByInteractionIdAndUserId;\n }\n\n async ListInteractionMessagesByInteractionId(interactionId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionMessageFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionMessage>> {\n const statement = `query ListInteractionMessagesByInteractionId($interactionId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessagesByInteractionId(\n interactionId: $interactionId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionMessage>>response.data.listInteractionMessagesByInteractionId;\n }\n\n async ListInteractionMessagesByEntityConversationId(entityConversationId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionMessageFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionMessage>> {\n const statement = `query ListInteractionMessagesByEntityConversationId($entityConversationId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessagesByEntityConversationId(\n entityConversationId: $entityConversationId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { entityConversationId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionMessage>>response.data.listInteractionMessagesByEntityConversationId;\n }\n\n // The externalId index carries no sort key, so this query takes no key condition.\n async ListInteractionMessagesByExternalId(externalId: string, sortDirection?: ModelSortDirection, filter?: ModelInteractionMessageFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionMessage>> {\n const statement = `query ListInteractionMessagesByExternalId($externalId: String!, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessagesByExternalId(\n externalId: $externalId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { externalId };\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionMessage>>response.data.listInteractionMessagesByExternalId;\n }\n\n async ListInteractionMessagesByInteractionAttendeeId(interactionAttendeeId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionMessageFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionMessage>> {\n const statement = `query ListInteractionMessagesByInteractionAttendeeId($interactionAttendeeId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessagesByInteractionAttendeeId(\n interactionAttendeeId: $interactionAttendeeId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionAttendeeId };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionMessage>>response.data.listInteractionMessagesByInteractionAttendeeId;\n }\n\n async ListInteractionMessageAttachmentsByInteractionMessageId(\n interactionMessageId: string,\n createdAt?: ModelIntKeyConditionInput,\n sortDirection?: ModelSortDirection,\n filter?: ModelInteractionMessageAttachmentFilterInput,\n limit?: number,\n nextToken?: string,\n ): Promise<List<InteractionMessageAttachment>> {\n const statement = `query ListInteractionMessageAttachmentsByInteractionMessageId($interactionMessageId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageAttachmentFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessageAttachmentsByInteractionMessageId(\n interactionMessageId: $interactionMessageId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_ATTACHMENT}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n interactionMessageId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<InteractionMessageAttachment>>response.data.listInteractionMessageAttachmentsByInteractionMessageId;\n }\n\n OnInteractionByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionById'>>> {\n const statement = `subscription OnInteractionById($id: ID!) {\n OnInteractionById(id: $id) {\n ${FIELDS_INTERACTION}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionById'>>>(statement, gqlAPIServiceArguments) as any;\n }\n\n OnInteractionInviteeByInteractionIdListener(interactionId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionInviteeByInteractionId'>>> {\n const statement = `subscription OnInteractionInviteeByInteractionId($interactionId: ID!) {\n OnInteractionInviteeByInteractionId(interactionId: $interactionId) {\n ${FIELDS_INTERACTION_INVITEE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionInviteeByInteractionId'>>>(statement, gqlAPIServiceArguments) as any;\n }\n\n OnInteractionAttendeeByInteractionIdListener(interactionId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionAttendeeByInteractionId'>>> {\n const statement = `subscription OnInteractionAttendeeByInteractionId($interactionId: ID!) {\n OnInteractionAttendeeByInteractionId(interactionId: $interactionId) {\n ${FIELDS_INTERACTION_ATTENDEE_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionAttendeeByInteractionId'>>>(statement, gqlAPIServiceArguments) as any;\n }\n\n OnInteractionMessageByInteractionIdListener(interactionId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionMessageByInteractionId'>>> {\n const statement = `subscription OnInteractionMessageByInteractionId($interactionId: ID!) {\n OnInteractionMessageByInteractionId(interactionId: $interactionId) {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { interactionId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionMessageByInteractionId'>>>(statement, gqlAPIServiceArguments) as any;\n }\n\n OnInteractionByEntityIdListener(entityId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionByEntityId'>>> {\n const statement = `subscription OnInteractionByEntityId($entityId: ID!) {\n OnInteractionByEntityId(entityId: $entityId) {\n ${FIELDS_INTERACTION}\n }\n }`;\n const gqlAPIServiceArguments: any = { entityId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionByEntityId'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionByEntityId'>>>; */\n }\n\n OnInteractionInviteeByUserIdListener(userId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionInviteeByUserId'>>> {\n const statement = `subscription OnInteractionInviteeByUserId($userId: ID!) {\n OnInteractionInviteeByUserId(userId: $userId) {\n ${FIELDS_INTERACTION_INVITEE}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { userId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionInviteeByUserId'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, \"OnInteractionInviteeByUserId\">>>; */\n }\n\n OnInteractionMessageByEntityConversationIdListener(entityConversationId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionMessageByEntityConversationId'>>> {\n const statement = `subscription OnInteractionMessageByEntityConversationId($entityConversationId: ID!) {\n OnInteractionMessageByEntityConversationId(\n entityConversationId: $entityConversationId\n ) {\n ${FIELDS_INTERACTION_MESSAGE_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { entityConversationId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionMessageByEntityConversationId'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnInteractionMessageByEntityConversationId'>>>; */\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { List, ModelIntKeyConditionInput, ModelSortDirection, ModelStringKeyConditionInput, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport { CreateEntityConversationInput, EntityConversation, ModelEntityConversationConditionInput, ModelEntityConversationFilterInput, UpdateEntityConversationInput } from '../../models/dynamodb/entity-conversation.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { FIELDS_ENTITY } from './entity.service';\nimport { FIELDS_INTERACTION, FIELDS_INTERACTION_MESSAGE } from './interaction.service';\n\ntype __SubscriptionContainer = {\n OnEntityConversationByTenantId: EntityConversation;\n};\n\nexport const FIELDS_ENTITY_CONVERSATION = `\n id\n tenantId\n entityId\n entity {\n ${FIELDS_ENTITY}\n }\n entityAddress\n interactionWidgetId\n interactionChannel\n interactionProvider\n isCampaignEngaged\n campaignId\n lastCampaignFlowNodeId\n lastInteractionMessageId\n metadata\n lastActivityAt\n lastMessageAt\n archivedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_ENTITY_CONVERSATION_MINIMAL = `\n id\n tenantId\n entityId\n entityAddress\n interactionWidgetId\n interactionChannel\n interactionProvider\n isCampaignEngaged\n campaignId\n lastCampaignFlowNodeId\n lastInteractionMessageId\n metadata\n lastActivityAt\n lastMessageAt\n archivedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport const FIELDS_ENTITY_CONVERSATION_EXPANDED = `\n id\n tenantId\n entityId\n entity {\n ${FIELDS_ENTITY}\n }\n entityAddress\n interactionWidgetId\n interactionChannel\n interactionProvider\n isCampaignEngaged\n campaignId\n lastCampaignFlowNodeId\n lastInteractionMessageId\n metadata\n lastActivityAt\n lastMessageAt\n archivedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n interactions (limit: 1, sortDirection: ${ModelSortDirection.DESC}) {\n items {\n ${FIELDS_INTERACTION}\n }\n nextToken\n }\n messages (limit: 1, sortDirection: ${ModelSortDirection.DESC}) {\n items {\n ${FIELDS_INTERACTION_MESSAGE}\n }\n nextToken\n }\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EntityConversationService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetEntityConversation(id: string): Promise<EntityConversation> {\n const statement = `query GetEntityConversation($id: ID!) {\n getEntityConversation(id: $id) {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <EntityConversation>response.data.getEntityConversation;\n }\n\n async CreateEntityConversation(input: CreateEntityConversationInput, condition?: ModelEntityConversationConditionInput): Promise<EntityConversation> {\n const statement = `mutation CreateEntityConversation($input: CreateEntityConversationInput!, $condition: ModelEntityConversationConditionInput) {\n createEntityConversation(input: $input, condition: $condition) {\n ${FIELDS_ENTITY_CONVERSATION_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <EntityConversation>response.data.createEntityConversation;\n }\n\n async UpdateEntityConversation(input: UpdateEntityConversationInput, condition?: ModelEntityConversationConditionInput): Promise<EntityConversation> {\n const statement = `mutation UpdateEntityConversation($input: UpdateEntityConversationInput!, $condition: ModelEntityConversationConditionInput) {\n updateEntityConversation(input: $input, condition: $condition) {\n ${FIELDS_ENTITY_CONVERSATION_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <EntityConversation>response.data.updateEntityConversation;\n }\n\n async ListEntityConversationsByEntityId(entityId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityConversationFilterInput, limit?: number, nextToken?: string): Promise<List<EntityConversation>> {\n const statement = `query ListEntityConversationsByEntityId($entityId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityConversationFilterInput, $limit: Int, $nextToken: String) {\n listEntityConversationsByEntityId(\n entityId: $entityId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n entityId,\n };\n if (createdAt) {\n gqlAPIServiceArguments.createdAt = createdAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<EntityConversation>>response.data.listEntityConversationsByEntityId;\n }\n\n async ListEntityConversationsByTenantIdAndEntityAddress(tenantId: string, entityAddress?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityConversationFilterInput, limit?: number, nextToken?: string): Promise<List<EntityConversation>> {\n const statement = `query ListEntityConversationsByTenantIdAndEntityAddress($tenantId: ID!, $entityAddress: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityConversationFilterInput, $limit: Int, $nextToken: String) {\n listEntityConversationsByTenantIdAndEntityAddress(\n tenantId: $tenantId\n entityAddress: $entityAddress\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n if (entityAddress) {\n gqlAPIServiceArguments.entityAddress = entityAddress;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<EntityConversation>>response.data.listEntityConversationsByTenantIdAndEntityAddress;\n }\n\n async ListEntityConversationsByTenantIdAndArchivedAt(tenantId: string, archivedAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityConversationFilterInput, limit?: number, nextToken?: string): Promise<List<EntityConversation>> {\n const statement = `query ListEntityConversationsByTenantIdAndArchivedAt($tenantId: ID!, $archivedAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityConversationFilterInput, $limit: Int, $nextToken: String) {\n listEntityConversationsByTenantIdAndArchivedAt(\n tenantId: $tenantId\n archivedAt: $archivedAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n if (archivedAt) {\n gqlAPIServiceArguments.archivedAt = archivedAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<EntityConversation>>response.data.listEntityConversationsByTenantIdAndArchivedAt;\n }\n\n async ListEntityConversationsByTenantIdAndLastMessageAt(tenantId: string, lastMessageAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelEntityConversationFilterInput, limit?: number, nextToken?: string): Promise<List<EntityConversation>> {\n const statement = `query ListEntityConversationsByTenantIdAndLastMessageAt($tenantId: ID!, $lastMessageAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelEntityConversationFilterInput, $limit: Int, $nextToken: String) {\n listEntityConversationsByTenantIdAndLastMessageAt(\n tenantId: $tenantId\n lastMessageAt: $lastMessageAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n if (lastMessageAt) {\n gqlAPIServiceArguments.lastMessageAt = lastMessageAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<EntityConversation>>response.data.listEntityConversationsByTenantIdAndLastMessageAt;\n }\n\n OnEntityConversationByTenantIdListener(tenantId: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnEntityConversationByTenantId'>>> {\n const statement = `subscription OnEntityConversationByTenantId($tenantId: ID!) {\n OnEntityConversationByTenantId(tenantId: $tenantId) {\n ${FIELDS_ENTITY_CONVERSATION_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { tenantId };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnEntityConversationByTenantId'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnEntityConversationByTenantId'>>> */\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { List, ModelIntKeyConditionInput, ModelSortDirection, SubscriptionResponse } from '../../models/dynamodb/common.model';\nimport {\n CreateTenantComplianceDocumentInput,\n CreateTenantInput,\n ModelTenantComplianceDocumentConditionInput,\n ModelTenantComplianceDocumentFilterInput,\n ModelTenantConditionInput,\n Tenant,\n TenantComplianceDocument,\n UpdateTenantComplianceDocumentInput,\n UpdateTenantInput,\n} from '../../models/dynamodb/tenant.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { FIELDS_COUNTRY, FIELDS_LANGUAGE, FIELDS_PHONE_NUMBER } from './common.service';\n\nexport const FIELDS_TENANT_PREFERENCES = `\n timezoneName\n language {\n ${FIELDS_LANGUAGE}\n }\n allowUserToChangePreferences\n brandColor\n`;\n\nexport const FIELDS_TENANT_PROFILE = `\n businessType\n industry\n teamSize\n goals\n`;\n\nexport const FIELDS_TENANT_ONBOARDING = `\n status\n currentStep\n completedSteps\n startedAt\n completedAt\n`;\n\nexport const FIELDS_TENANT = `\n id\n externalId\n externalCrmProvider\n tenantDomain\n organizationName\n websiteURL\n image {\n key\n bucket\n location\n }\n preferences {\n ${FIELDS_TENANT_PREFERENCES}\n }\n security {\n domainValidationTokenExpiry\n userValidationTokenExpiry\n secretTokenExpiry\n sessionTokenExpiry\n sessionIdleTimeout\n }\n profile {\n ${FIELDS_TENANT_PROFILE}\n }\n onboarding {\n ${FIELDS_TENANT_ONBOARDING}\n }\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_TENANT_MINIMAL = `\n id\n externalId\n externalCrmProvider\n tenantDomain\n organizationName\n websiteURL\n image {\n key\n bucket\n location\n }\n preferences {\n ${FIELDS_TENANT_PREFERENCES}\n }\n onboarding {\n ${FIELDS_TENANT_ONBOARDING}\n }\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_TENANT_EXPANDED = `\n id\n externalId\n externalCrmProvider\n tenantDomain\n organizationName\n websiteURL\n image {\n key\n bucket\n location\n }\n billingInformation {\n companyName\n address\n state\n city\n postalCode\n country {\n ${FIELDS_COUNTRY}\n }\n companyIdentificationNumber\n taxIdentificationNumber\n billingEmail\n website\n }\n contactInformation {\n name\n email\n phoneNumber {\n ${FIELDS_PHONE_NUMBER}\n }\n address\n state\n city\n postalCode\n country {\n ${FIELDS_COUNTRY}\n }\n }\n preferences {\n ${FIELDS_TENANT_PREFERENCES}\n }\n ssoConfiguration {\n provider\n protocol\n displayName\n configuration\n isEnabled\n isDefaultLoginMode\n }\n security {\n domainValidationTokenExpiry\n userValidationTokenExpiry\n secretTokenExpiry\n sessionTokenExpiry\n sessionIdleTimeout\n }\n profile {\n ${FIELDS_TENANT_PROFILE}\n }\n onboarding {\n ${FIELDS_TENANT_ONBOARDING}\n }\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\nexport const FIELDS_TENANT_COMPLIANCE_DOCUMENT = `\n id\n tenantId\n documentName\n documentType\n documentNumber\n legalEntityName\n issuedBy\n issueDate\n expiryDate\n status\n notes\n file {\n key\n bucket\n location\n }\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\ntype __SubscriptionContainer = {\n OnTenantById: Tenant;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TenantService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetTenant(id: string): Promise<Tenant> {\n const statement = `query GetTenant($id: ID!) {\n getTenant(id: $id) {\n ${FIELDS_TENANT}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Tenant>response.data.getTenant;\n }\n\n async GetTenantExpanded(id: string): Promise<Tenant> {\n const statement = `query GetTenant($id: ID!) {\n getTenant(id: $id) {\n ${FIELDS_TENANT_EXPANDED}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Tenant>response.data.getTenant;\n }\n\n async CreateTenant(input: CreateTenantInput, condition?: ModelTenantConditionInput): Promise<Tenant> {\n const statement = `mutation CreateTenant($input: CreateTenantInput!, $condition: ModelTenantConditionInput) {\n createTenant(input: $input, condition: $condition) {\n ${FIELDS_TENANT_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Tenant>response.data.createTenant;\n }\n\n async UpdateTenant(input: UpdateTenantInput, condition?: ModelTenantConditionInput): Promise<Tenant> {\n const statement = `mutation UpdateTenant($input: UpdateTenantInput!, $condition: ModelTenantConditionInput) {\n updateTenant(input: $input, condition: $condition) {\n ${FIELDS_TENANT_MINIMAL}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Tenant>response.data.updateTenant;\n }\n\n async CreateTenantComplianceDocument(input: CreateTenantComplianceDocumentInput, condition?: ModelTenantComplianceDocumentConditionInput): Promise<TenantComplianceDocument> {\n const statement = `mutation CreateTenantComplianceDocument($input: CreateTenantComplianceDocumentInput!, $condition: ModelTenantComplianceDocumentConditionInput) {\n createTenantComplianceDocument(input: $input, condition: $condition) {\n ${FIELDS_TENANT_COMPLIANCE_DOCUMENT}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <TenantComplianceDocument>response.data.createTenantComplianceDocument;\n }\n\n async UpdateTenantComplianceDocument(input: UpdateTenantComplianceDocumentInput, condition?: ModelTenantComplianceDocumentConditionInput): Promise<TenantComplianceDocument> {\n const statement = `mutation UpdateTenantComplianceDocument($input: UpdateTenantComplianceDocumentInput!, $condition: ModelTenantComplianceDocumentConditionInput) {\n updateTenantComplianceDocument(input: $input, condition: $condition) {\n ${FIELDS_TENANT_COMPLIANCE_DOCUMENT}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { input };\n if (condition) {\n gqlAPIServiceArguments.condition = condition;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <TenantComplianceDocument>response.data.updateTenantComplianceDocument;\n }\n\n async ListTenantComplianceDocumentsByTenantId(tenantId: string, updatedAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTenantComplianceDocumentFilterInput, limit?: number, nextToken?: string): Promise<List<TenantComplianceDocument>> {\n const statement = `query ListTenantComplianceDocumentsByTenantId($tenantId: ID!, $updatedAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTenantComplianceDocumentFilterInput, $limit: Int, $nextToken: String) {\n listTenantComplianceDocumentsByTenantId(\n tenantId: $tenantId\n updatedAt: $updatedAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TENANT_COMPLIANCE_DOCUMENT}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (updatedAt) {\n gqlAPIServiceArguments.updatedAt = updatedAt;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<TenantComplianceDocument>>response.data.listTenantComplianceDocumentsByTenantId;\n }\n\n OnTenantByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnTenantById'>>> {\n const statement = `subscription OnTenantById($id: ID!) {\n OnTenantById(id: $id) {\n ${FIELDS_TENANT}\n }\n }`;\n\n const gqlAPIServiceArguments: any = { id };\n return this.appSyncService.subscribe<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnTenantById'>>>(statement, gqlAPIServiceArguments) as any;\n /* as Observable<SubscriptionResponse<Pick<__SubscriptionContainer, \"OnTenantById\">>>; */\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ModelTicketFilterInput, ModelTicketPriorityFilterInput, ModelTicketStatusFilterInput, ModelTicketTypeFilterInput, Ticket, TicketPriority, TicketStatus, TicketType } from '../../models/dynamodb/ticket.model';\nimport { List, ModelSortDirection, ModelStringKeyConditionInput } from '../../models/dynamodb/common.model';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { FIELDS_ENTITY } from './entity.service';\n\nexport const FIELDS_TICKET_PRIORITY: string = `\n id\n externalId\n tenantId\n teamId\n name\n description\n colorCode\n isDefault\n createdAt\n updatedAt\n updatedByUserId\n updatedByUserSessionId\n deletedAt\n`;\n\nexport const FIELDS_TICKET_STATUS: string = `\n id\n externalId\n tenantId\n teamId\n name\n description\n percent\n colorCode\n isDefault\n createdAt\n updatedAt\n updatedByUserId\n updatedByUserSessionId\n deletedAt\n`;\n\nexport const FIELDS_TICKET_TYPE: string = `\n id\n externalId\n tenantId\n teamId\n name\n description\n colorCode\n createdAt\n updatedAt\n updatedByUserId\n updatedByUserSessionId\n deletedAt\n`;\n\nexport const FIELDS_TICKET: string = `\n id\n externalId\n referenceNumber\n tenantId\n entityId\n entity {\n ${FIELDS_ENTITY}\n }\n parentEntityId\n parentEntity {\n ${FIELDS_ENTITY}\n }\n subject\n description\n typeId\n type {\n ${FIELDS_TICKET_TYPE}\n }\n statusId\n status {\n ${FIELDS_TICKET_STATUS}\n }\n priorityId\n priority {\n ${FIELDS_TICKET_PRIORITY}\n }\n resolvedAt\n notes\n createdByUserId\n createdAt\n updatedAt\n updatedByUserId\n updatedByUserSessionId\n deletedAt\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TicketService {\n constructor(private readonly appSyncService: AppSyncHelperService) {}\n\n async GetTicket(id: string): Promise<Ticket> {\n const statement = `query GetTicket($id: ID!) {\n getTicket(id: $id) {\n ${FIELDS_TICKET}\n }\n }`;\n const gqlAPIServiceArguments: any = {\n id,\n };\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <Ticket>response.data.getTicket;\n }\n\n async ListTicketsByTenantIdAndExternalId(tenantId: string, externalId?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTicketFilterInput, limit?: number, nextToken?: string): Promise<List<Ticket>> {\n const statement = `query ListTicketsByTenantIdAndExternalId($tenantId: ID!, $externalId: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTicketFilterInput, $limit: Int, $nextToken: String) {\n listTicketsByTenantIdAndExternalId(\n tenantId: $tenantId\n externalId: $externalId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TICKET}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (externalId) {\n gqlAPIServiceArguments.externalId = externalId;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<Ticket>>response.data.listTicketsByTenantIdAndExternalId;\n }\n\n async ListTicketPrioritiesByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTicketPriorityFilterInput, limit?: number, nextToken?: string): Promise<List<TicketPriority>> {\n const statement = `query ListTicketPrioritiesByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTicketPriorityFilterInput, $limit: Int, $nextToken: String) {\n listTicketPrioritiesByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TICKET_PRIORITY}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<TicketPriority>>response.data.listTicketPrioritiesByTenantId;\n }\n\n async ListTicketStatusesByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTicketStatusFilterInput, limit?: number, nextToken?: string): Promise<List<TicketStatus>> {\n const statement = `query ListTicketStatusesByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTicketStatusFilterInput, $limit: Int, $nextToken: String) {\n listTicketStatusesByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TICKET_STATUS}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<TicketStatus>>response.data.listTicketStatusesByTenantId;\n }\n\n async ListTicketTypesByTenantId(tenantId: string, name?: ModelStringKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelTicketTypeFilterInput, limit?: number, nextToken?: string): Promise<List<TicketType>> {\n const statement = `query ListTicketTypesByTenantId($tenantId: ID!, $name: ModelStringKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelTicketTypeFilterInput, $limit: Int, $nextToken: String) {\n listTicketTypesByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_TICKET_TYPE}\n }\n nextToken\n }\n }`;\n const gqlAPIServiceArguments: any = {\n tenantId,\n };\n if (name) {\n gqlAPIServiceArguments.name = name;\n }\n if (sortDirection) {\n gqlAPIServiceArguments.sortDirection = sortDirection;\n }\n if (filter) {\n gqlAPIServiceArguments.filter = filter;\n }\n if (limit) {\n gqlAPIServiceArguments.limit = limit;\n }\n if (nextToken) {\n gqlAPIServiceArguments.nextToken = nextToken;\n }\n\n const response = await this.appSyncService.query<any>(statement, gqlAPIServiceArguments);\n return <List<TicketType>>response.data.listTicketTypesByTenantId;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { SnugdeskAuthenticationService } from './authentication.service';\n\nexport enum StorageType {\n SessionStorage = 'sessionStorage',\n LocalStorage = 'localStorage',\n}\n\nexport interface EncryptedStorageKeys {\n dataKey: string;\n cryptoKey: string;\n cryptoKeyCreatedAt: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EncryptedStorageService {\n private readonly DEFAULT_TTL_SECONDS = 60 * 60 * 12; // 12 hours\n\n constructor(private authenticationService: SnugdeskAuthenticationService) {}\n\n buildKeys(baseKey: string): EncryptedStorageKeys {\n const dataKey = this.scopedKey(baseKey);\n return {\n dataKey,\n cryptoKey: this.scopedKey(`${baseKey}_KEY`),\n cryptoKeyCreatedAt: this.scopedKey(`${baseKey}_KEY_CREATED_AT`),\n };\n }\n\n async getJsonByKey<T>(storageType: StorageType, baseKey: string, ttlSeconds?: number): Promise<T | null> {\n return this.getJson<T>(storageType, this.buildKeys(baseKey), ttlSeconds);\n }\n\n async setJsonByKey<T>(storageType: StorageType, baseKey: string, value: T, ttlSeconds?: number): Promise<void> {\n await this.setJson<T>(storageType, this.buildKeys(baseKey), value, ttlSeconds);\n }\n\n async updateJsonByKey<T>(storageType: StorageType, baseKey: string, value: T, ttlSeconds?: number): Promise<void> {\n await this.updateJson<T>(storageType, this.buildKeys(baseKey), ttlSeconds, () => value);\n }\n\n clearByKey(storageType: StorageType, baseKey: string): void {\n this.clear(storageType, this.buildKeys(baseKey));\n }\n\n async getJson<T>(storageType: StorageType, keys: EncryptedStorageKeys, ttlSeconds?: number): Promise<T | null> {\n const storage = this.getStorage(storageType);\n if (!storage) return null;\n\n try {\n const encrypted = storage.getItem(keys.dataKey);\n if (!encrypted) return null;\n\n const decrypted = await this.decryptString(encrypted, keys, ttlSeconds, storage);\n if (!decrypted) return null;\n\n return JSON.parse(decrypted) as T;\n } catch (err) {\n console.warn('Failed to read encrypted storage value:', err);\n return null;\n }\n }\n\n async setJson<T>(storageType: StorageType, keys: EncryptedStorageKeys, value: T, ttlSeconds?: number): Promise<void> {\n const storage = this.getStorage(storageType);\n if (!storage) return;\n\n try {\n const payload = JSON.stringify(value);\n const encrypted = await this.encryptString(payload, keys, ttlSeconds, storage);\n if (!encrypted) return;\n\n storage.setItem(keys.dataKey, encrypted);\n } catch (err) {\n console.warn('Failed to persist encrypted storage value:', err);\n }\n }\n\n async updateJson<T>(storageType: StorageType, keys: EncryptedStorageKeys, ttlSeconds: number | undefined, updater: (current: T | null) => T | null | Promise<T | null>): Promise<void> {\n const current = await this.getJson<T>(storageType, keys, ttlSeconds);\n const next = await updater(current);\n if (!next) return;\n await this.setJson(storageType, keys, next, ttlSeconds);\n }\n\n clear(storageType: StorageType, keys: EncryptedStorageKeys): void {\n const storage = this.getStorage(storageType);\n if (!storage) return;\n\n try {\n storage.removeItem(keys.dataKey);\n } catch (err) {\n console.warn('Failed to clear encrypted storage value:', err);\n }\n }\n\n private getStorage(storageType: StorageType): Storage | null {\n if (typeof window === 'undefined') return null;\n return storageType === StorageType.LocalStorage ? window.localStorage : window.sessionStorage;\n }\n\n private scopedKey(baseKey: string): string {\n const tenantId = this.authenticationService.getTenantId();\n return tenantId ? `${baseKey}:${tenantId}` : baseKey;\n }\n\n private nowSeconds(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n private resolveTtlSeconds(ttlSeconds?: number): number {\n return typeof ttlSeconds === 'number' && ttlSeconds > 0 ? ttlSeconds : this.DEFAULT_TTL_SECONDS;\n }\n\n private async getOrCreateCryptoKey(keys: EncryptedStorageKeys, ttlSeconds: number | undefined, storage: Storage): Promise<CryptoKey | null> {\n if (!window?.crypto?.subtle) return null;\n\n try {\n const createdAtRaw = storage.getItem(keys.cryptoKeyCreatedAt);\n const keyRaw = storage.getItem(keys.cryptoKey);\n const now = this.nowSeconds();\n const ttl = this.resolveTtlSeconds(ttlSeconds);\n\n if (createdAtRaw && keyRaw) {\n const createdAt = Number(createdAtRaw);\n const isExpired = !Number.isFinite(createdAt) || now - createdAt > ttl;\n\n if (!isExpired) {\n const jwk = JSON.parse(keyRaw);\n return await crypto.subtle.importKey('jwk', jwk, { name: 'AES-GCM' }, true, ['encrypt', 'decrypt']);\n }\n }\n\n const key = await crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt']);\n const jwk = await crypto.subtle.exportKey('jwk', key);\n\n storage.setItem(keys.cryptoKey, JSON.stringify(jwk));\n storage.setItem(keys.cryptoKeyCreatedAt, String(now));\n\n return key;\n } catch (err) {\n console.warn('Failed to create crypto key:', err);\n return null;\n }\n }\n\n private async encryptString(plainText: string, keys: EncryptedStorageKeys, ttlSeconds: number | undefined, storage: Storage): Promise<string | null> {\n const key = await this.getOrCreateCryptoKey(keys, ttlSeconds, storage);\n if (!key) return null;\n\n try {\n const iv = crypto.getRandomValues(new Uint8Array(12));\n const encoded = new TextEncoder().encode(plainText);\n const cipherBuffer = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, encoded);\n\n const payload = {\n iv: this.bytesToBase64(iv),\n data: this.bytesToBase64(new Uint8Array(cipherBuffer)),\n };\n\n return JSON.stringify(payload);\n } catch (err) {\n console.warn('Failed to encrypt cache payload:', err);\n return null;\n }\n }\n\n private async decryptString(cipherText: string, keys: EncryptedStorageKeys, ttlSeconds: number | undefined, storage: Storage): Promise<string | null> {\n const key = await this.getOrCreateCryptoKey(keys, ttlSeconds, storage);\n if (!key) return null;\n\n try {\n const payload = JSON.parse(cipherText);\n const iv = this.base64ToBytes(payload?.iv);\n const data = this.base64ToBytes(payload?.data);\n if (!iv?.length || !data?.length) return null;\n\n // Re-wrap into fresh Uint8Arrays backed by ArrayBuffer (not SharedArrayBuffer).\n const ivBytes = new Uint8Array(iv);\n const dataBytes = new Uint8Array(data);\n\n const plainBuffer = await crypto.subtle.decrypt({ name: 'AES-GCM', iv: ivBytes }, key, dataBytes);\n return new TextDecoder().decode(plainBuffer);\n } catch (err) {\n console.warn('Failed to decrypt cache payload:', err);\n return null;\n }\n }\n\n private bytesToBase64(bytes: Uint8Array): string {\n let binary = '';\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n\n private base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64 || '');\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class SnugdeskIPRegistryService {\n private readonly IP_REGISTRY_API = 'https://api.ipregistry.co/?key=1lbzl1iexwbxc0';\n private readonly SESSION_KEY = 'sd-ip-details';\n\n constructor(private http: HttpClient) {}\n\n private get cachedIPDetails(): any | null {\n const value = sessionStorage.getItem(this.SESSION_KEY);\n return value ? JSON.parse(value) : null;\n }\n\n private set cachedIPDetails(details: any) {\n sessionStorage.setItem(this.SESSION_KEY, JSON.stringify(details));\n }\n\n // prettier-ignore\n async getIPDetails(): Promise<any> {\n if (this.cachedIPDetails) return this.cachedIPDetails;\n\n try {\n const ipDetails = await lastValueFrom(this.http.get(this.IP_REGISTRY_API));\n // console.log('Fetched IP details:', ipDetails);\n this.cachedIPDetails = ipDetails;\n } catch (error) {\n console.warn('Error fetching IP details:', error);\n this.cachedIPDetails = {};\n }\n\n return this.cachedIPDetails;\n }\n}\n","export class CleanDeep {\n public static clean(obj: any): typeof obj {\n Object.keys(obj).forEach((key) => {\n if (obj[key] === undefined || obj[key] === null) {\n delete obj[key];\n // obj[key] = null;\n } else if (typeof obj[key] === 'string') {\n if (String(obj[key]).trim().length === 0) {\n delete obj[key];\n // obj[key] = null;\n } else {\n obj[key] = String(obj[key]).trim();\n }\n }\n });\n return obj;\n }\n}\n","import {\n AbstractControl,\n ValidationErrors,\n ValidatorFn,\n FormGroup,\n} from '@angular/forms';\n\nexport class CustomValidators {\n /**\n * Validator that checks for whitespace-only input.\n * Usage: CustomValidators.whitespace\n */\n static readonly whitespace: ValidatorFn = (\n control: AbstractControl\n ): ValidationErrors | null => {\n const value: string = control.value || '';\n return value && value.trim().length === 0\n ? { whitespace: 'Whitespaces are not allowed' }\n : null;\n };\n\n /**\n * Validator that checks if the input is a valid HTTP/HTTPS URL.\n * Usage: CustomValidators.url\n */\n static readonly url: ValidatorFn = (\n control: AbstractControl\n ): ValidationErrors | null => {\n const value = control.value;\n const urlRegexPattern = /^(https?:\\/\\/)/i;\n\n if (!value) return null;\n\n const isValid =\n urlRegexPattern.test(value) && CustomValidators.#isValidUrl(value);\n return isValid ? null : { invalidUrl: true };\n };\n\n static readonly passwordStrength: ValidatorFn = (\n control: AbstractControl\n ): ValidationErrors | null => {\n const value: string = control.value || '';\n const hasUpperCase = /[A-Z]/.test(value);\n const hasNumber = /[0-9]/.test(value);\n const hasSpecial = /[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/.test(value);\n\n return value && (!hasUpperCase || !hasNumber || !hasSpecial)\n ? {\n passwordStrength:\n 'Password must contain at least one number, one uppercase letter, and one special character.',\n }\n : null;\n };\n\n /**\n * Cross-field validator to ensure two fields match.\n * Usage (form-level): validators: CustomValidators.mustMatch('field1', 'field2')\n */\n static mustMatch(controlName: string, matchingControlName: string) {\n return (formGroup: FormGroup) => {\n const control = formGroup.controls[controlName];\n const matchingControl = formGroup.controls[matchingControlName];\n\n if (matchingControl.errors && !matchingControl.errors['mustMatch']) {\n return;\n }\n\n matchingControl.setErrors(\n control.value !== matchingControl.value ? { mustMatch: true } : null\n );\n };\n }\n\n /**\n * Validator that ensures trimmed length is at least the specified minimum.\n * Usage: CustomValidators.trimLength(min)\n */\n static trimLength(minLength: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value: string = control.value || '';\n return value.trim().length < minLength\n ? {\n trimLength: `Minimum ${minLength} non-whitespace characters required`,\n }\n : null;\n };\n }\n\n // Helper method (private)\n static #isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n}\n","const EPOCH_START = 1735689600; // Jan 1 2025 00:00:00 UTC\n\nexport function generateReferenceNumber(): string {\n const secondsSinceStart = Math.floor(Date.now() / 1000) - EPOCH_START;\n const suffix = Math.floor(Math.random() * 100).toString().padStart(2, '0');\n return `TKT-${secondsSinceStart}${suffix}`;\n}\n","const DANGEROUS_TAGS = /(<\\s*\\/?\\s*(script|iframe|object|embed|applet|form|meta|link|base|svg)\\b[^>]*>)/gi;\nconst EVENT_HANDLERS = /\\s+on\\w+\\s*=\\s*(\"[^\"]*\"|'[^']*'|[^\\s>]*)/gi;\nconst DANGEROUS_PROTOCOLS = /(href|src|action)\\s*=\\s*[\"']\\s*(javascript|vbscript):/gi;\nconst DANGEROUS_DATA_URI = /(href|src|action)\\s*=\\s*[\"']\\s*data:(?!image\\/)/gi;\n\nexport function sanitizeHtmlBody(html: string): string {\n if (!html) {\n return '';\n }\n\n let sanitized = html;\n\n // Strip dangerous tags (script, iframe, object, embed, applet, form, meta, link, base, svg)\n sanitized = sanitized.replace(DANGEROUS_TAGS, '');\n\n // Remove event handlers (onclick, onerror, onload, etc.)\n sanitized = sanitized.replace(EVENT_HANDLERS, '');\n\n // Block javascript: and vbscript: protocols\n sanitized = sanitized.replace(DANGEROUS_PROTOCOLS, '$1=\"\"');\n\n // Block data: URIs except data:image/* (safe for inline images from CKEditor / email clients)\n sanitized = sanitized.replace(DANGEROUS_DATA_URI, '$1=\"\"');\n\n return sanitized;\n}\n","import { Injectable } from '@angular/core';\n\nimport { Entity, CreateEntityInput } from '../../models/dynamodb/entity.model';\nimport { EntityService } from '../dynamodb/entity.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailEntityResolverService {\n\n constructor(\n private entityService: EntityService,\n ) {}\n\n async resolveEntity(tenantId: string, senderEmail: string, senderName?: string): Promise<Entity | null> {\n try {\n const result = await this.entityService.ListEntitiesByTenantId(\n tenantId,\n undefined,\n undefined,\n { email: { eq: senderEmail } },\n );\n const entities = result?.items || [];\n\n if (entities.length > 0) {\n return entities[0];\n }\n\n // Entity not found - create new one\n const now = Math.floor(Date.now() / 1000);\n const input: CreateEntityInput = {\n tenantId,\n name: senderName || senderEmail.split('@')[0],\n email: senderEmail,\n isOrganization: false,\n contactPreferences: { allowEmail: true },\n metadata: JSON.stringify({ source: 'EMAIL' }),\n createdAt: now,\n updatedAt: now,\n updatedByUserId: 'SYSTEM',\n };\n\n return await this.entityService.CreateEntity(input);\n } catch (error) {\n console.error('EmailEntityResolverService.resolveEntity error:', error);\n return null;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { EntityConversation } from '../../models/dynamodb/entity-conversation.model';\nimport { EntityConversationService } from '../dynamodb/entity-conversation.service';\nimport { InteractionService } from '../dynamodb/interaction.service';\n\nexport interface EmailHeaders {\n messageId: string;\n inReplyTo?: string;\n references?: string[];\n subject: string;\n to?: string[];\n cc?: string[];\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailConversationResolverService {\n\n constructor(\n private entityConversationService: EntityConversationService,\n private interactionService: InteractionService,\n ) {}\n\n /**\n * Resolves an existing conversation or returns null if no match found.\n * 5-step matching:\n * 1. Parse encoded reply address (reply+{tenantId}_{conversationId}@reply.platform.com)\n * 2. Match In-Reply-To header → InteractionMessage.metadata.emailMessageId\n * 3. Match References header → conversation metadata.threadReferences\n * 4. Normalize subject (remove Re:, Fwd:, FW:) → match conversation metadata.subject\n * 5. No match → return null (caller creates new EntityConversation)\n */\n async resolveConversation(\n tenantId: string,\n entityId: string,\n emailHeaders: EmailHeaders,\n endpointId: string,\n ): Promise<EntityConversation | null> {\n try {\n // Step 1: Check for encoded reply address\n const allRecipients = [...(emailHeaders.to || []), ...(emailHeaders.cc || [])];\n const conversationId = this.parseReplyAddress(allRecipients);\n if (conversationId) {\n const conversation = await this.entityConversationService.GetEntityConversation(conversationId);\n if (conversation) {\n return conversation;\n }\n }\n\n // Step 2: Match In-Reply-To header\n if (emailHeaders.inReplyTo) {\n const conversation = await this.matchByInReplyTo(tenantId, emailHeaders.inReplyTo);\n if (conversation) {\n return conversation;\n }\n }\n\n // Step 3: Match References header\n if (emailHeaders.references && emailHeaders.references.length > 0) {\n const conversation = await this.matchByReferences(tenantId, emailHeaders.references);\n if (conversation) {\n return conversation;\n }\n }\n\n // Step 4: Normalize subject and match\n const normalizedSubject = this.normalizeSubject(emailHeaders.subject);\n if (normalizedSubject) {\n const conversation = await this.matchBySubject(tenantId, entityId, normalizedSubject);\n if (conversation) {\n return conversation;\n }\n }\n\n // Step 5: No match\n return null;\n } catch (error) {\n console.error('EmailConversationResolverService.resolveConversation error:', error);\n return null;\n }\n }\n\n parseReplyAddress(recipients: string[]): string | null {\n for (const addr of recipients) {\n const match = addr.match(/reply\\+([^_]+)_([^@]+)@/);\n if (match) {\n return match[2]; // conversationId\n }\n }\n return null;\n }\n\n normalizeSubject(subject: string): string {\n if (!subject) return '';\n return subject.replace(/^(Re:\\s*|Fwd:\\s*|FW:\\s*|Fw:\\s*)+/i, '').trim();\n }\n\n private async matchByInReplyTo(tenantId: string, inReplyTo: string): Promise<EntityConversation | null> {\n try {\n const messages = await this.interactionService.ListInteractionMessagesByExternalId(inReplyTo);\n const items = messages?.items || [];\n if (items.length > 0 && items[0].entityConversationId) {\n return await this.entityConversationService.GetEntityConversation(items[0].entityConversationId);\n }\n } catch (error) {\n console.error('matchByInReplyTo error:', error);\n }\n return null;\n }\n\n private async matchByReferences(tenantId: string, references: string[]): Promise<EntityConversation | null> {\n for (const ref of references.reverse()) {\n const result = await this.matchByInReplyTo(tenantId, ref);\n if (result) return result;\n }\n return null;\n }\n\n private async matchBySubject(tenantId: string, entityId: string, normalizedSubject: string): Promise<EntityConversation | null> {\n try {\n const result = await this.entityConversationService.ListEntityConversationsByEntityId(entityId);\n const items = result?.items || [];\n for (const conversation of items) {\n if (conversation.metadata) {\n try {\n const metadata = JSON.parse(conversation.metadata);\n if (metadata.subject && this.normalizeSubject(metadata.subject) === normalizedSubject) {\n return conversation;\n }\n } catch {\n // skip invalid metadata\n }\n }\n }\n } catch (error) {\n console.error('matchBySubject error:', error);\n }\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { AppSyncHelperService } from '../../helpers/appsync-helper.service';\nimport { List, ModelSortDirection } from '../../models/dynamodb/common.model';\nimport { InteractionMessageTemplate } from '../../models/email/email-template.model';\n\nexport const FIELDS_INTERACTION_MESSAGE_TEMPLATE = `\n id\n tenantId\n name\n subject\n body\n metadata\n variables\n interactionChannel\n InteractionProvider\n createdAt\n updatedAt\n deletedAt\n updatedByUserId\n updatedByUserSessionId\n`;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InteractionMessageTemplateService {\n\n constructor(\n private appSyncHelperService: AppSyncHelperService,\n ) {}\n\n async listTemplates(tenantId: string, interactionChannel?: string): Promise<List<InteractionMessageTemplate>> {\n const query = /* GraphQL */ `\n query ListMessageTemplatesByTenantId(\n $tenantId: ID!\n $name: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelInteractionMessageTemplateFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listMessageTemplatesByTenantId(\n tenantId: $tenantId\n name: $name\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE_TEMPLATE}\n }\n nextToken\n }\n }\n `;\n\n const filter: any = { deletedAt: { attributeExists: false } };\n if (interactionChannel) {\n filter.interactionChannel = { eq: interactionChannel };\n }\n\n const response: any = await this.appSyncHelperService.query(query, {\n tenantId,\n sortDirection: ModelSortDirection.ASC,\n filter,\n });\n\n return response?.data?.listMessageTemplatesByTenantId || { items: [], nextToken: null };\n }\n\n async getTemplate(templateId: string): Promise<InteractionMessageTemplate | null> {\n const query = /* GraphQL */ `\n query GetInteractionMessageTemplate($id: ID!) {\n getInteractionMessageTemplate(id: $id) {\n ${FIELDS_INTERACTION_MESSAGE_TEMPLATE}\n }\n }\n `;\n\n const response: any = await this.appSyncHelperService.query(query, { id: templateId });\n return response?.data?.getInteractionMessageTemplate || null;\n }\n\n renderTemplate(body: string, variables: Record<string, any>): string {\n if (!body || !variables) return body || '';\n\n let rendered = body;\n for (const [key, value] of Object.entries(variables)) {\n const placeholder = new RegExp(`\\\\{\\\\{\\\\s*${key}\\\\s*\\\\}\\\\}`, 'g');\n rendered = rendered.replace(placeholder, String(value ?? ''));\n }\n return rendered;\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/snugdesk-core.module';\n\nexport * from './lib/components/error/error.component';\nexport * from './lib/components/footer/footer.component';\nexport * from './lib/components/loader/loader.component';\n\nexport * from './lib/helpers/appsync-helper.service';\nexport * from './lib/helpers/opensearch-helper.service';\nexport * from './lib/helpers/s3-helper.service';\n\nexport * from './lib/pipes/custom-pipes.module';\nexport * from './lib/pipes/domain-name.pipe';\nexport * from './lib/pipes/epoch-formatter.pipe';\nexport * from './lib/pipes/safe-html.pipe';\nexport * from './lib/pipes/search-inner.pipe';\nexport * from './lib/pipes/search.pipe';\nexport * from './lib/pipes/singularize.pipe';\n\nexport * from './lib/models/dynamodb/billing.model';\nexport * from './lib/models/dynamodb/common.model';\nexport * from './lib/models/dynamodb/entity-conversation.model';\nexport * from './lib/models/dynamodb/entity.model';\nexport * from './lib/models/dynamodb/interaction-endpoint.model';\nexport * from './lib/models/dynamodb/interaction-widget.model';\nexport * from './lib/models/dynamodb/interaction.model';\nexport * from './lib/models/dynamodb/team.model';\nexport * from './lib/models/dynamodb/tenant.model';\nexport * from './lib/models/dynamodb/ticket.model';\nexport * from './lib/models/dynamodb/user.model';\nexport * from './lib/models/dynamodb/user-session.model';\n\n// AppSync - GraphQL services\nexport * from './lib/services/dynamodb/common.service';\nexport * from './lib/services/dynamodb/entity.service';\nexport * from './lib/services/dynamodb/entity-conversation.service';\nexport * from './lib/services/dynamodb/interaction.service';\nexport * from './lib/services/dynamodb/interaction-endpoint.service';\nexport * from './lib/services/dynamodb/interaction-widget.service';\nexport * from './lib/services/dynamodb/team.service';\nexport * from './lib/services/dynamodb/tenant.service';\nexport * from './lib/services/dynamodb/ticket.service';\nexport * from './lib/services/dynamodb/user-session.service';\nexport * from './lib/services/dynamodb/user.service';\n\n// Other services\nexport * from './lib/services/authentication.service';\nexport * from './lib/services/encrypted-storage.service';\nexport * from './lib/services/ip-registry.service';\n\nexport * from './lib/utilities/clean-deep.helper';\nexport * from './lib/utilities/custom.validators';\nexport * from './lib/utilities/reference-number-generator';\n\n// Email models\nexport * from './lib/models/email/index';\n\n// Email utilities\nexport * from './lib/utilities/email/index';\n\n// Email services\nexport * from './lib/services/email/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.FooterComponent","i1.FooterComponent","i1","i1.AppSyncHelperService","i1.SnugdeskAuthenticationService","i1.EntityService","i1.EntityConversationService","i2.InteractionService"],"mappings":"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"}