@snugdesk/core 0.0.15 → 0.2.1
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.
|
@@ -585,7 +585,7 @@ class SnugdeskAuthenticationService {
|
|
|
585
585
|
userSubscription;
|
|
586
586
|
userSessionSubscription;
|
|
587
587
|
jwtHelper = new JwtHelperService();
|
|
588
|
-
TOKEN_KEY = 'sd-
|
|
588
|
+
TOKEN_KEY = 'sd-authSessionToken';
|
|
589
589
|
constructor(authenticationHelperService) {
|
|
590
590
|
this.authenticationHelperService = authenticationHelperService;
|
|
591
591
|
this.isAuthenticated$.next(this.isAuthenticated());
|
|
@@ -695,11 +695,11 @@ class SnugdeskAuthenticationService {
|
|
|
695
695
|
}
|
|
696
696
|
if (token) {
|
|
697
697
|
this.setToken(token);
|
|
698
|
-
console.debug('Login Success - Token set in authentication service: ', token);
|
|
698
|
+
// console.debug('Login Success - Token set in authentication service: ', token);
|
|
699
699
|
}
|
|
700
700
|
else if (!this.isAuthenticated()) {
|
|
701
701
|
const res_login = await this.login(tenantId, userId);
|
|
702
|
-
console.debug('Login Success: ', res_login);
|
|
702
|
+
// console.debug('Login Success: ', res_login);
|
|
703
703
|
}
|
|
704
704
|
this.isAuthenticated$.next(true);
|
|
705
705
|
return true;
|
|
@@ -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/ip-registry.service.ts","../../../projects/snugdesk-core/src/lib/services/authentication-helper.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/s3-helper.service.ts","../../../projects/snugdesk-core/src/lib/models/common.model.ts","../../../projects/snugdesk-core/src/lib/services/entity-conversation.service.ts","../../../projects/snugdesk-core/src/lib/services/entity.service.ts","../../../projects/snugdesk-core/src/lib/services/interaction-endpoint.service.ts","../../../projects/snugdesk-core/src/lib/services/interaction-widget.service.ts","../../../projects/snugdesk-core/src/lib/services/interaction.service.ts","../../../projects/snugdesk-core/src/lib/services/tenant.service.ts","../../../projects/snugdesk-core/src/lib/services/user-session.service.ts","../../../projects/snugdesk-core/src/lib/services/user.service.ts","../../../projects/snugdesk-core/src/lib/utilities/custom.validators.ts","../../../projects/snugdesk-core/src/lib/utilities/clean-deep.helper.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 return items.filter((item) => {\n const innerItem = item[field];\n return innerItem[innerfield].toLowerCase().includes(value.toLowerCase());\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 { 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","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\nimport { SnugdeskIPRegistryService } from './ip-registry.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnugdeskAuthenticationHelperService {\n private readonly headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n });\n\n private readonly authEndpointURL: string = 'https://api.snugdesk.com/auth';\n\n constructor(\n private httpClient: HttpClient,\n private ipRegistryService: SnugdeskIPRegistryService\n ) {}\n\n async getSessionToken(tenantId: string, userId: string): Promise<any> {\n const ipDetails = await this.ipRegistryService.getIPDetails();\n return lastValueFrom(\n this.httpClient.post(\n `${this.authEndpointURL}/library`,\n {\n tenantId,\n userId,\n ipDetails,\n },\n { headers: this.headers }\n )\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { SnugdeskAuthenticationHelperService } from './authentication-helper.service';\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-auth-token';\n\n constructor(private authenticationHelperService: SnugdeskAuthenticationHelperService) {\n this.isAuthenticated$.next(this.isAuthenticated());\n }\n\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 // prettier-ignore\n async authenticate(token?: string, tenantId?: string, userId?: string): Promise<boolean> {\n if (!token && (!tenantId || !userId)) {\n console.warn('Missing parameters: token, tenantId, or userId');\n return false;\n }\n\n // @saurabh: Replace the existing token if a new token is provided\n /*\n const existingToken = this.getToken();\n if (token && existingToken && existingToken !== token) {\n console.warn('Token mismatch: Existing token does not match the provided token');\n return false;\n }\n */\n\n const decodedToken: any = this.jwtHelper.decodeToken(token);\n if (token && tenantId && decodedToken?.tenantId !== tenantId) {\n console.warn('Tenant ID mismatch: Token does not match the provided tenantId');\n return false;\n }\n\n if (token && userId && decodedToken?.userId !== userId) {\n console.warn('User ID mismatch: Token does not match the provided userId');\n return false;\n }\n\n if (tenantId && this.isAuthenticated() && tenantId !== this.getTenantId()) {\n console.warn('Tenant ID mismatch: Authenticated tenant does not match the provided tenantId');\n return false;\n }\n\n if (userId && this.isAuthenticated() && userId !== this.getUserId()) {\n console.warn('User ID mismatch: Authenticated user does not match the provided userId');\n return false;\n }\n\n if (token) {\n this.setToken(token);\n console.debug('Login Success - Token set in authentication service: ', token);\n } else if(!this.isAuthenticated()) {\n const res_login = await this.login(tenantId, userId);\n console.debug('Login Success: ', res_login);\n }\n\n this.isAuthenticated$.next(true);\n return true;\n }\n\n async login(tenantId: string, userId: string): Promise<Boolean> {\n const res_getSessionToken: any = await this.authenticationHelperService.getSessionToken(tenantId, userId);\n // console.debug('res_getSessionToken: ', res_getSessionToken);\n\n const sessionToken = res_getSessionToken?.data?.sessionToken;\n if (!sessionToken) {\n throw new Error(`Invalid response: ${JSON.stringify(res_getSessionToken)}`);\n }\n\n this.setToken(sessionToken);\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 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 * 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","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?: CountryCurrency | null;\n officialLanguage?: Language | null;\n callingCode?: string | null;\n region?: string | null;\n flag?: string | null;\n};\n\nexport type CountryCurrency = {\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","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { List, ModelBooleanInput, ModelIDInput, ModelIntInput, ModelIntKeyConditionInput, ModelSortDirection, ModelStringInput, ModelStringKeyConditionInput, SubscriptionResponse } from '../models/common.model';\nimport { Entity } from './entity.service';\nimport { Interaction, InteractionChannel, InteractionMessage, InteractionProvider, ModelInteractionChannelInput, ModelInteractionProviderInput } from './interaction.service';\n\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\n\nexport type EntityConversation = {\n id: string;\n tenantId: string;\n entityId?: string | null;\n entity?: Entity | null;\n entityAddress: string;\n interactionChannel: InteractionChannel;\n interactionProvider: InteractionProvider;\n isCampaignEngaged: boolean;\n campaignId?: string | null;\n lastCampaignFlowNodeId?: string | null;\n lastInteractionMessageId?: string | null;\n metadata?: string | null;\n lastActivityAt?: number | null;\n lastMessageAt?: number | null;\n archivedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n interactions?: List<Interaction> | null;\n messages?: List<InteractionMessage> | null;\n};\n\nexport type CreateEntityConversationInput = {\n id?: string | null;\n tenantId: string;\n entityId?: string | null;\n entityAddress: string;\n interactionChannel: InteractionChannel;\n interactionProvider: InteractionProvider;\n isCampaignEngaged: boolean;\n campaignId?: string | null;\n lastCampaignFlowNodeId?: string | null;\n lastInteractionMessageId?: string | null;\n metadata?: string | null;\n lastActivityAt?: number | null;\n lastMessageAt?: number | null;\n archivedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateEntityConversationInput = {\n id: string;\n tenantId?: string | null;\n entityId?: string | null;\n entityAddress?: string | null;\n interactionChannel?: InteractionChannel | null;\n interactionProvider?: InteractionProvider | null;\n isCampaignEngaged?: boolean | null;\n campaignId?: string | null;\n lastCampaignFlowNodeId?: string | null;\n lastInteractionMessageId?: string | null;\n metadata?: string | null;\n lastActivityAt?: number | null;\n lastMessageAt?: number | null;\n archivedAt?: number | null;\n blockedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelEntityConversationConditionInput = {\n tenantId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n entityAddress?: ModelStringInput | null;\n interactionChannel?: ModelInteractionChannelInput | null;\n interactionProvider?: ModelInteractionProviderInput | null;\n isCampaignEngaged?: ModelBooleanInput | null;\n campaignId?: ModelIDInput | null;\n lastCampaignFlowNodeId?: ModelIDInput | null;\n lastInteractionMessageId?: ModelIDInput | null;\n metadata?: ModelStringInput | null;\n lastActivityAt?: ModelIntInput | null;\n lastMessageAt?: ModelIntInput | null;\n archivedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelEntityConversationConditionInput | null> | null;\n or?: Array<ModelEntityConversationConditionInput | null> | null;\n not?: ModelEntityConversationConditionInput | null;\n};\n\nexport type ModelEntityConversationFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n entityAddress?: ModelStringInput | null;\n interactionChannel?: ModelInteractionChannelInput | null;\n interactionProvider?: ModelInteractionProviderInput | null;\n isCampaignEngaged?: ModelBooleanInput | null;\n campaignId?: ModelIDInput | null;\n lastCampaignFlowNodeId?: ModelIDInput | null;\n lastInteractionMessageId?: ModelIDInput | null;\n metadata?: ModelStringInput | null;\n lastActivityAt?: ModelIntInput | null;\n lastMessageAt?: ModelIntInput | null;\n archivedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelEntityConversationFilterInput | null> | null;\n or?: Array<ModelEntityConversationFilterInput | null> | null;\n not?: ModelEntityConversationFilterInput | null;\n};\n\ntype __SubscriptionContainer = {\n OnEntityConversationByTenantId: EntityConversation;\n};\n\nexport const FIELDS_ENTITY_CONVERSATION: string = `\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\nexport const FIELDS_ENTITY_CONVERSATION_EXPANDED = `\n id\n tenantId\n entityId\n entity {\n id\n externalId\n tenantId\n entityTypeId\n parentId\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 notes\n customFields\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 }\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 interactions (limit: 1, sortDirection: ${ModelSortDirection.DESC}) {\n items {\n id\n tenantId\n entityId\n entityConversationId\n teamId\n widgetId\n metadata\n subject\n direction\n status\n last_status\n hostId\n startedAt\n completedAt\n createdAt\n updatedAt\n deletedAt\n }\n nextToken\n }\n messages (limit: 1, sortDirection: ${ModelSortDirection.DESC}) {\n items {\n id\n externalId\n endpointId\n entityConversationId\n interactionId\n interactionAttendeeId\n referenceMessageId\n body\n metadata\n createdAt\n updatedAt\n deletedAt\n messageAttachments {\n items {\n id\n externalId\n interactionId\n interactionMessageId\n interactionId\n name\n size\n type\n file {\n key\n bucket\n location\n }\n createdAt\n updatedAt\n deletedAt\n }\n nextToken\n }\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}\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}\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 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';\n\nimport { Language, List, ModelBooleanInput, ModelIDInput, ModelIntInput, ModelSortDirection, ModelStringInput, ModelStringKeyConditionInput, PhoneNumber, S3Object } from '../models/common.model';\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\n\nexport type Entity = {\n id: string;\n externalId?: string | null;\n tenantId: string;\n name: string;\n image?: S3Object | null;\n email?: string | null;\n phoneNumber?: PhoneNumber | null;\n phoneNumberE164?: string | null;\n preferences?: EntityPreferences | null;\n contactPreferences?: EntityContactPreferences | null;\n createdAt: number;\n updatedAt: number;\n blockedAt?: number | null;\n deletedAt?: number | null;\n};\n\n/* export type Entity = {\n id: string;\n externalId?: string | null;\n tenantId: string;\n entityTypeId?: string | null;\n entityType?: EntityType | null;\n parentId?: string | null;\n parent?: Entity | null;\n name: string;\n image?: S3Object | null;\n email?: string | null;\n phoneNumber?: PhoneNumber | null;\n phoneNumberE164?: string | null;\n isOrganization: boolean;\n notes?: string | null;\n customFields?: Array<string | null> | null;\n preferences?: EntityPreferences | null;\n contactPreferences?: EntityContactPreferences | null;\n createdAt: number;\n updatedAt: number;\n blockedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type EntityType = {\n id: string;\n externalId?: string | null;\n tenantId: string;\n name: string;\n description?: string | null;\n image?: S3Object | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n entityFields?: Array<string | null> | null;\n organizationFields?: Array<string | null> | null;\n};\n*/\n\nexport type EntityPreferences = {\n timezoneName?: string | null;\n language?: Language | null;\n};\n\nexport type EntityContactPreferences = {\n allowCall?: boolean | null;\n allowEmail?: boolean | null;\n allowSMS?: boolean | null;\n allowWhatsApp?: boolean | null;\n};\n\nexport type CreateEntityInput = {\n id?: string | null;\n externalId?: string | null;\n tenantId: string;\n // entityTypeId?: string | null;\n // parentId?: string | null;\n name: string;\n image?: S3Object | null;\n email?: string | null;\n phoneNumber?: PhoneNumber | null;\n phoneNumberE164?: string | null;\n isOrganization: boolean;\n // notes?: string | null;\n // customFields?: Array<string | null> | null;\n // preferences?: EntityPreferences | null;\n // contactPreferences?: EntityContactPreferences | null;\n createdAt: number;\n updatedAt: number;\n blockedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UpdateEntityInput = {\n id: string;\n externalId?: string | null;\n tenantId?: string | null;\n // entityTypeId?: string | null;\n // parentId?: string | null;\n name?: string | null;\n image?: S3Object | null;\n email?: string | null;\n phoneNumber?: PhoneNumber | null;\n phoneNumberE164?: string | null;\n isOrganization?: boolean | null;\n // notes?: string | null;\n // customFields?: Array<string | null> | null;\n // preferences?: EntityPreferences | null;\n // contactPreferences?: EntityContactPreferences | null;\n createdAt?: number | null;\n updatedAt: number;\n blockedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId?: string | null;\n updatedByUserSessionId?: string | null;\n};\n\n/* export type EntityPreferencesInput = {\n timezoneName?: string | null;\n language?: LanguageInput | null;\n};\n\nexport type EntityContactPreferencesInput = {\n allowCall?: boolean | null;\n allowEmail?: boolean | null;\n allowSMS?: boolean | null;\n allowWhatsApp?: boolean | null;\n}; */\n\nexport type ModelEntityConditionInput = {\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n entityTypeId?: ModelIDInput | null;\n parentId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n email?: ModelStringInput | null;\n phoneNumberE164?: ModelStringInput | null;\n isOrganization?: ModelBooleanInput | null;\n // notes?: ModelStringInput | null;\n // customFields?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n // updatedByUserId?: ModelIDInput | null;\n // updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelEntityConditionInput | null> | null;\n or?: Array<ModelEntityConditionInput | null> | null;\n not?: ModelEntityConditionInput | null;\n};\n\nexport type ModelEntityFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n entityTypeId?: ModelIDInput | null;\n parentId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n email?: ModelStringInput | null;\n phoneNumberE164?: ModelStringInput | null;\n isOrganization?: ModelBooleanInput | null;\n // notes?: ModelStringInput | null;\n // customFields?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n // updatedByUserId?: ModelIDInput | null;\n // updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelEntityFilterInput | null> | null;\n or?: Array<ModelEntityFilterInput | null> | null;\n not?: ModelEntityFilterInput | null;\n};\n\nconst ENTITY_SELECTION = /* GraphQL */ `\n id\n externalId\n tenantId\n entityTypeId\n entityType {\n id\n externalId\n tenantId\n name\n description\n image {\n location\n }\n createdAt\n updatedAt\n deletedAt\n }\n parentId\n parent {\n id\n externalId\n tenantId\n entityTypeId\n name\n image {\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 location\n }\n isOrganization\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`;\n\nconst ENTITY_SELECTION_MINIMAL = /* GraphQL */ `\n id\n externalId\n tenantId\n name\n image {\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`;\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 ${ENTITY_SELECTION_MINIMAL}\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 ${ENTITY_SELECTION_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 ${ENTITY_SELECTION_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 ${ENTITY_SELECTION_MINIMAL}\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 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 ${ENTITY_SELECTION_MINIMAL}\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","import { Injectable } from '@angular/core';\n\nimport { S3Object } from '../models/common.model';\nimport { InteractionWidget } from './interaction-widget.service';\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 /* buyPrice?: InteractionEndpointPriceDetails | null; */\n sellPrice?: InteractionEndpointPriceDetails | null;\n documents?: Array<InteractionEndpointRegulatoryComplianceDocument | null> | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\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\n@Injectable({\n providedIn: 'root',\n})\nexport class InteractionEndpointService {}\n","import { Injectable } from '@angular/core';\n\nimport { List, ModelBooleanInput, ModelIDInput, ModelIntInput, ModelSortDirection, ModelStringInput, ModelStringKeyConditionInput } from '../models/common.model';\nimport { InteractionChannel, InteractionProvider, InteractionRouteConfiguration, InteractionRouteConfigurationInput, ModelInteractionChannelInput, ModelInteractionProviderInput } from './interaction.service';\nimport { Tenant } from './tenant.service';\n\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\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};\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 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`;\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","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { List, ModelBooleanInput, ModelIDInput, ModelIDKeyConditionInput, ModelIntInput, ModelIntKeyConditionInput, ModelSortDirection, ModelStringInput, S3Object, SubscriptionResponse } from '../models/common.model';\nimport { Entity } from './entity.service';\nimport { EntityConversation } from './entity-conversation.service';\nimport { InteractionEndpoint } from './interaction-endpoint.service';\nimport { InteractionWidget } from './interaction-widget.service';\nimport { Team } from './team.service';\nimport { User } from './user.service';\nimport { UserSession } from './user-session.service';\n\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\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 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\nexport enum InteractionProvider {\n AVAYA_IPO = 'AVAYA_IPO',\n TELNYX = 'TELNYX',\n WHATSAPP = 'WHATSAPP',\n TELEGRAM = 'TELEGRAM',\n SNUGDESK = 'SNUGDESK',\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 metadata?: string | null;\n subject?: string | null;\n routeConfiguration?: InteractionRouteConfiguration | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n summary?: string | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n /*\n invitees?: List<InteractionInvitee> | null;\n attendees?: List<InteractionAttendee> | null;\n messages?: List<InteractionMessage> | null;\n messageAttachments?: List<InteractionMessageAttachment> | null;\n */\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 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 createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n messageAttachments?: List<InteractionMessageAttachment> | null;\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 metadata?: string | null;\n subject?: string | null;\n routeConfiguration?: InteractionRouteConfigurationInput | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n summary?: string | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | 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 metadata?: string | null;\n subject?: string | null;\n routeConfiguration?: InteractionRouteConfigurationInput | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n summary?: string | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | 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 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 createdAt: number;\n updatedAt: number;\n deletedAt?: number | 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 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 metadata?: ModelStringInput | null;\n subject?: ModelStringInput | null;\n startedAt?: ModelIntInput | null;\n completedAt?: ModelIntInput | null;\n duration?: ModelIntInput | null;\n summary?: ModelStringInput | null;\n temp_isLocked?: ModelBooleanInput | null;\n temp_isAvailableTenantIdUnion?: ModelStringInput | 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 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 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 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 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 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 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 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\ntype __SubscriptionContainer = {\n OnInteractionInviteeByUserId: InteractionInvitee;\n OnInteractionMessageByEntityConversationId: InteractionMessage;\n};\n\nconst FIELDS_INTERACTION = `\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 metadata\n subject\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n startedAt\n completedAt\n duration\n summary\n createdAt\n updatedAt\n deletedAt\n`;\n\nconst FIELDS_INTERACTION_EXPANDED = `\n id\n tenantId\n widgetId\n 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 createdAt\n updatedAt\n deletedAt\n }\n endpointId\n endpoint {\n id\n externalId\n tenantId\n widgetId\n address\n configuration\n createdAt\n updatedAt\n deletedAt\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 id\n externalId\n tenantId\n entityTypeId\n entityType {\n id\n externalId\n name\n description\n createdAt\n updatedAt\n deletedAt\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 notes\n customFields\n createdAt\n updatedAt\n blockedAt\n deletedAt\n }\n teamId\n team {\n id\n tenantId\n name\n description\n createdAt\n updatedAt\n deletedAt\n }\n hostId\n host {\n id\n interactionId\n entityId\n teamId\n userId\n createdAt\n updatedAt\n deletedAt\n }\n providerInteractionId\n channel\n provider\n context\n direction\n status\n last_status\n metadata\n subject\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n startedAt\n completedAt\n duration\n summary\n temp_isLocked\n temp_isAvailableTenantIdUnion\n createdAt\n updatedAt\n deletedAt\n`;\n\nconst 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\nconst FIELDS_INTERACTION_ATTENDEE_EXPANDED = `\n id\n interactionId\n entityId\n entity {\n id\n externalId\n tenantId\n entityTypeId\n entityType {\n id\n externalId\n name\n description\n createdAt\n updatedAt\n deletedAt\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 notes\n customFields\n createdAt\n updatedAt\n blockedAt\n deletedAt\n }\n interactionWidgetSessionId\n teamId\n team {\n id\n tenantId\n name\n description\n image {\n key\n bucket\n location\n }\n createdAt\n updatedAt\n deletedAt\n ticketFields\n }\n userId\n user {\n id\n externalId\n tenantId\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 type\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\n }\n }\n notificationSettings {\n allowPush\n allowEmail\n allowSMS\n allowWhatsApp\n }\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n }\n userSessionId\n name\n metadata\n customFields\n isAdministrator\n joinedAt\n exitedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nconst FIELDS_INTERACTION_INVITEE = `\n id\n interactionId\n interaction {\n ${FIELDS_INTERACTION}\n }\n entityId\n entity {\n id\n externalId\n tenantId\n entityTypeId\n entityType {\n id\n externalId\n name\n description\n createdAt\n updatedAt\n deletedAt\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 notes\n customFields\n createdAt\n updatedAt\n blockedAt\n deletedAt\n }\n teamId\n userId\n isAdministrator\n temp_expiringAt\n expiredAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nconst 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\nconst FIELDS_INTERACTION_MESSAGE = `\n id\n externalId\n endpointId\n endpoint {\n id\n externalId\n tenantId\n widgetId\n address\n configuration\n createdAt\n updatedAt\n deletedAt\n }\n campaignId\n campaignFlowNodeId\n entityConversationId\n interactionId\n interactionAttendeeId\n interactionAttendee {\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 body\n metadata\n referenceMessageId\n createdAt\n updatedAt\n deletedAt\n messageAttachments {\n items {\n ${FIELDS_INTERACTION_MESSAGE_ATTACHMENT}\n }\n nextToken\n }\n`;\n\nconst FIELDS_INTERACTION_MESSAGE_MINIMAL = `\n id\n externalId\n endpointId\n campaignId\n campaignFlowNodeId\n entityConversationId\n interactionId\n interactionAttendeeId\n body\n metadata\n referenceMessageId\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}\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}\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}\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 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_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 <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 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 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 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}\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 async ListInteractionMessagesByExternalMessageId(externalMessageId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionMessageFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionMessage>> {\n const statement = `query ListInteractionMessagesByExternalMessageId($externalMessageId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessagesByExternalMessageId(\n externalMessageId: $externalMessageId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { externalMessageId };\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.listInteractionMessagesByExternalMessageId;\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}\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 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}\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 { AppSyncHelperService } from '../helpers/appsync-helper.service';\nimport { Language, S3Object, SubscriptionResponse } from '../models/common.model';\n\nimport * as uuid from 'uuid';\n\nconst FIELDS_TENANT_EXPANDED = `\n id\n externalId\n tenantDomain\n organizationName\n websiteURL\n image {\n key\n bucket\n location\n }\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\n }\n allowUserToChangePreferences\n }\n security {\n domainValidationTokenExpiry\n userValidationTokenExpiry\n secretTokenExpiry\n sessionTokenExpiry\n sessionIdleTimeout\n }\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport type TenantPreferences = {\n timezoneName?: string | null;\n language?: Language | null;\n allowUserToChangePreferences?: boolean | 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 Tenant = {\n id: string;\n externalId?: string | null;\n tenantDomain: string;\n organizationName: string;\n websiteURL?: string | null;\n image?: S3Object | null;\n preferences?: TenantPreferences | null;\n security?: TenantSecurity | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\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 getTenantById(id: string): Promise<Tenant> {\n if (!id || !uuid.validate(id)) {\n throw { code: 400, message: `Invalid id: ${id}` };\n }\n\n const tenant = await this.GetTenant(id);\n if (!tenant || !!tenant.deletedAt) {\n throw { code: 400, message: `Tenant not found` };\n }\n if (!tenant.activatedAt || !!tenant.blockedAt) {\n throw { code: 403, message: `Tenant not activated or subscription has lapsed.` };\n }\n\n return tenant;\n }\n\n private async GetTenant(id: string): Promise<Tenant> {\n const statement = `query GetTenant($id: ID!) {\n getTenant(id: $id) {\n ${FIELDS_TENANT_EXPANDED}\n }\n }`;\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<{ getTenant: Tenant }>(statement, gqlAPIServiceArguments);\n return response.data?.getTenant as Tenant;\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_EXPANDED}\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';\nimport { Observable } from 'rxjs';\n\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\nimport { List, ModelBooleanInput, ModelIDInput, ModelIntInput, ModelIntKeyConditionInput, ModelSortDirection, ModelStringInput, SubscriptionResponse } from '../models/common.model';\nimport { ModelUserStatusInput, User, UserStatus } from './user.service';\n\nimport * as uuid from 'uuid';\n\nconst USER_SESSION_FIELDS = `\n id\n tenantId\n userId\n ipDetails\n status\n teamIds\n temp_isLocked\n temp_isAvailableTenantIdUnion\n createdAt\n updatedAt\n expiryAt\n loggedOutAt\n blockedAt\n`;\n\nexport type UserSession = {\n id: string;\n tenantId: string;\n userId: string;\n user?: User | null;\n ipDetails?: string | null;\n status?: UserStatus | null;\n teamIds?: Array<string | null> | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n createdAt: number;\n updatedAt: number;\n expiryAt: number;\n loggedOutAt?: number | null;\n blockedAt?: number | null;\n};\n\nexport type UpdateUserSessionInput = {\n id: string;\n tenantId?: string | null;\n userId?: string | null;\n ipDetails?: string | null;\n status?: UserStatus | null;\n teamIds?: Array<string | null> | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n expiryAt?: number | null;\n loggedOutAt?: number | null;\n blockedAt?: number | null;\n};\n\nexport type ModelUserSessionConditionInput = {\n tenantId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n ipDetails?: ModelStringInput | null;\n status?: ModelUserStatusInput | null;\n teamIds?: ModelStringInput | null;\n temp_isLocked?: ModelBooleanInput | null;\n temp_isAvailableTenantIdUnion?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n expiryAt?: ModelIntInput | null;\n loggedOutAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n and?: Array<ModelUserSessionConditionInput | null> | null;\n or?: Array<ModelUserSessionConditionInput | null> | null;\n not?: ModelUserSessionConditionInput | null;\n};\n\nexport type ModelUserSessionFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n ipDetails?: ModelStringInput | null;\n status?: ModelUserStatusInput | null;\n teamIds?: ModelStringInput | null;\n temp_isLocked?: ModelBooleanInput | null;\n temp_isAvailableTenantIdUnion?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n expiryAt?: ModelIntInput | null;\n loggedOutAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n and?: Array<ModelUserSessionFilterInput | null> | null;\n or?: Array<ModelUserSessionFilterInput | null> | null;\n not?: ModelUserSessionFilterInput | null;\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 getUserSessionById(id: string): Promise<UserSession> {\n if (!id || !uuid.validate(id)) {\n throw { code: 400, message: `Invalid id: ${id}` };\n }\n\n return await this.GetUserSession(id);\n }\n\n async GetUserSession(id: string): Promise<UserSession> {\n const statement = `query GetUserSession($id: ID!) {\n getUserSession(id: $id) {\n ${USER_SESSION_FIELDS}\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 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 ${USER_SESSION_FIELDS}\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 async UpdateUserSession(input: UpdateUserSessionInput, condition?: ModelUserSessionConditionInput): Promise<UserSession> {\n const statement = `mutation UpdateUserSession($input: UpdateUserSessionInput!, $condition: ModelUserSessionConditionInput) {\n updateUserSession(input: $input, condition: $condition) {\n ${USER_SESSION_FIELDS}\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 OnUserSessionByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserSessionById'>>> {\n const statement = `subscription OnUserSessionById($id: ID!) {\n OnUserSessionById(id: $id) {\n ${USER_SESSION_FIELDS}\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';\nimport { Observable } from 'rxjs';\n\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\nimport { Language, PhoneNumber, S3Object, SubscriptionResponse } from '../models/common.model';\n\nimport * as uuid from 'uuid';\n\nconst FIELDS_USER_EXPANDED = `\n id\n externalId\n tenantId\n email\n name\n image {\n key\n bucket\n location\n }\n phoneNumber {\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n }\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\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`;\n\nexport type UserPreferences = {\n timezoneName?: string | null;\n language?: Language | 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 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 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};\n\nexport type ModelUserStatusInput = {\n eq?: UserStatus | null;\n ne?: UserStatus | null;\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 getUserById(id: string): Promise<User> {\n if (!id || !uuid.validate(id)) {\n throw { code: 400, message: `Invalid id: ${id}` };\n }\n\n const user = await this.GetUser(id);\n if (!user || !!user.deletedAt) {\n throw { code: 400, message: `User not found` };\n }\n if (!user.activatedAt) {\n throw { code: 403, message: `User not activated.` };\n }\n if (!!user.blockedAt) {\n throw { code: 403, message: `User has been blocked.` };\n }\n\n return user;\n }\n\n async GetUser(id: string): Promise<User> {\n const statement = `query GetUser($id: ID!) {\n getUser(id: $id) {\n ${FIELDS_USER_EXPANDED}\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 OnUserByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserById'>>> {\n const statement = `subscription OnUserById($id: ID!) {\n OnUserById(id: $id) {\n ${FIELDS_USER_EXPANDED}\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 {\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","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","/*\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/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\n// AppSync - Models\nexport * from './lib/models/common.model';\n\n// AppSync - GraphQL services\nexport * from './lib/services/entity-conversation.service';\nexport * from './lib/services/entity.service';\nexport * from './lib/services/interaction-endpoint.service';\nexport * from './lib/services/interaction-widget.service';\nexport * from './lib/services/interaction.service';\nexport * from './lib/services/team.service';\nexport * from './lib/services/tenant.service';\nexport * from './lib/services/user-session.service';\nexport * from './lib/services/user.service';\n\n// Other services\nexport * from './lib/services/authentication.service';\n// export * from './lib/services/authentication-helper.service';\nexport * from './lib/services/ip-registry.service';\n\nexport * from './lib/utilities/custom.validators';\nexport * from './lib/utilities/clean-deep.helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.FooterComponent","i1.FooterComponent","i1","i2.SnugdeskIPRegistryService","i1.SnugdeskAuthenticationHelperService","i1.SnugdeskAuthenticationService","i1.AppSyncHelperService"],"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/ip-registry.service.ts","../../../projects/snugdesk-core/src/lib/services/authentication-helper.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/s3-helper.service.ts","../../../projects/snugdesk-core/src/lib/models/common.model.ts","../../../projects/snugdesk-core/src/lib/services/entity-conversation.service.ts","../../../projects/snugdesk-core/src/lib/services/entity.service.ts","../../../projects/snugdesk-core/src/lib/services/interaction-endpoint.service.ts","../../../projects/snugdesk-core/src/lib/services/interaction-widget.service.ts","../../../projects/snugdesk-core/src/lib/services/interaction.service.ts","../../../projects/snugdesk-core/src/lib/services/tenant.service.ts","../../../projects/snugdesk-core/src/lib/services/user-session.service.ts","../../../projects/snugdesk-core/src/lib/services/user.service.ts","../../../projects/snugdesk-core/src/lib/utilities/custom.validators.ts","../../../projects/snugdesk-core/src/lib/utilities/clean-deep.helper.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 return items.filter((item) => {\n const innerItem = item[field];\n return innerItem[innerfield].toLowerCase().includes(value.toLowerCase());\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 { 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","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\n\nimport { SnugdeskIPRegistryService } from './ip-registry.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnugdeskAuthenticationHelperService {\n private readonly headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n });\n\n private readonly authEndpointURL: string = 'https://api.snugdesk.com/auth';\n\n constructor(\n private httpClient: HttpClient,\n private ipRegistryService: SnugdeskIPRegistryService\n ) {}\n\n async getSessionToken(tenantId: string, userId: string): Promise<any> {\n const ipDetails = await this.ipRegistryService.getIPDetails();\n return lastValueFrom(\n this.httpClient.post(\n `${this.authEndpointURL}/library`,\n {\n tenantId,\n userId,\n ipDetails,\n },\n { headers: this.headers }\n )\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { JwtHelperService } from '@auth0/angular-jwt';\nimport { SnugdeskAuthenticationHelperService } from './authentication-helper.service';\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(private authenticationHelperService: SnugdeskAuthenticationHelperService) {\n this.isAuthenticated$.next(this.isAuthenticated());\n }\n\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 // prettier-ignore\n async authenticate(token?: string, tenantId?: string, userId?: string): Promise<boolean> {\n if (!token && (!tenantId || !userId)) {\n console.warn('Missing parameters: token, tenantId, or userId');\n return false;\n }\n\n // @saurabh: Replace the existing token if a new token is provided\n /*\n const existingToken = this.getToken();\n if (token && existingToken && existingToken !== token) {\n console.warn('Token mismatch: Existing token does not match the provided token');\n return false;\n }\n */\n\n const decodedToken: any = this.jwtHelper.decodeToken(token);\n if (token && tenantId && decodedToken?.tenantId !== tenantId) {\n console.warn('Tenant ID mismatch: Token does not match the provided tenantId');\n return false;\n }\n\n if (token && userId && decodedToken?.userId !== userId) {\n console.warn('User ID mismatch: Token does not match the provided userId');\n return false;\n }\n\n if (tenantId && this.isAuthenticated() && tenantId !== this.getTenantId()) {\n console.warn('Tenant ID mismatch: Authenticated tenant does not match the provided tenantId');\n return false;\n }\n\n if (userId && this.isAuthenticated() && userId !== this.getUserId()) {\n console.warn('User ID mismatch: Authenticated user does not match the provided userId');\n return false;\n }\n\n if (token) {\n this.setToken(token);\n // console.debug('Login Success - Token set in authentication service: ', token);\n } else if(!this.isAuthenticated()) {\n const res_login = await this.login(tenantId, userId);\n // console.debug('Login Success: ', res_login);\n }\n\n this.isAuthenticated$.next(true);\n return true;\n }\n\n async login(tenantId: string, userId: string): Promise<Boolean> {\n const res_getSessionToken: any = await this.authenticationHelperService.getSessionToken(tenantId, userId);\n // console.debug('res_getSessionToken: ', res_getSessionToken);\n\n const sessionToken = res_getSessionToken?.data?.sessionToken;\n if (!sessionToken) {\n throw new Error(`Invalid response: ${JSON.stringify(res_getSessionToken)}`);\n }\n\n this.setToken(sessionToken);\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 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 * 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","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?: CountryCurrency | null;\n officialLanguage?: Language | null;\n callingCode?: string | null;\n region?: string | null;\n flag?: string | null;\n};\n\nexport type CountryCurrency = {\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","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { List, ModelBooleanInput, ModelIDInput, ModelIntInput, ModelIntKeyConditionInput, ModelSortDirection, ModelStringInput, ModelStringKeyConditionInput, SubscriptionResponse } from '../models/common.model';\nimport { Entity } from './entity.service';\nimport { Interaction, InteractionChannel, InteractionMessage, InteractionProvider, ModelInteractionChannelInput, ModelInteractionProviderInput } from './interaction.service';\n\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\n\nexport type EntityConversation = {\n id: string;\n tenantId: string;\n entityId?: string | null;\n entity?: Entity | null;\n entityAddress: string;\n interactionChannel: InteractionChannel;\n interactionProvider: InteractionProvider;\n isCampaignEngaged: boolean;\n campaignId?: string | null;\n lastCampaignFlowNodeId?: string | null;\n lastInteractionMessageId?: string | null;\n metadata?: string | null;\n lastActivityAt?: number | null;\n lastMessageAt?: number | null;\n archivedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n interactions?: List<Interaction> | null;\n messages?: List<InteractionMessage> | null;\n};\n\nexport type CreateEntityConversationInput = {\n id?: string | null;\n tenantId: string;\n entityId?: string | null;\n entityAddress: string;\n interactionChannel: InteractionChannel;\n interactionProvider: InteractionProvider;\n isCampaignEngaged: boolean;\n campaignId?: string | null;\n lastCampaignFlowNodeId?: string | null;\n lastInteractionMessageId?: string | null;\n metadata?: string | null;\n lastActivityAt?: number | null;\n lastMessageAt?: number | null;\n archivedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\nexport type UpdateEntityConversationInput = {\n id: string;\n tenantId?: string | null;\n entityId?: string | null;\n entityAddress?: string | null;\n interactionChannel?: InteractionChannel | null;\n interactionProvider?: InteractionProvider | null;\n isCampaignEngaged?: boolean | null;\n campaignId?: string | null;\n lastCampaignFlowNodeId?: string | null;\n lastInteractionMessageId?: string | null;\n metadata?: string | null;\n lastActivityAt?: number | null;\n lastMessageAt?: number | null;\n archivedAt?: number | null;\n blockedAt?: number | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | null;\n};\n\nexport type ModelEntityConversationConditionInput = {\n tenantId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n entityAddress?: ModelStringInput | null;\n interactionChannel?: ModelInteractionChannelInput | null;\n interactionProvider?: ModelInteractionProviderInput | null;\n isCampaignEngaged?: ModelBooleanInput | null;\n campaignId?: ModelIDInput | null;\n lastCampaignFlowNodeId?: ModelIDInput | null;\n lastInteractionMessageId?: ModelIDInput | null;\n metadata?: ModelStringInput | null;\n lastActivityAt?: ModelIntInput | null;\n lastMessageAt?: ModelIntInput | null;\n archivedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelEntityConversationConditionInput | null> | null;\n or?: Array<ModelEntityConversationConditionInput | null> | null;\n not?: ModelEntityConversationConditionInput | null;\n};\n\nexport type ModelEntityConversationFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n entityId?: ModelIDInput | null;\n entityAddress?: ModelStringInput | null;\n interactionChannel?: ModelInteractionChannelInput | null;\n interactionProvider?: ModelInteractionProviderInput | null;\n isCampaignEngaged?: ModelBooleanInput | null;\n campaignId?: ModelIDInput | null;\n lastCampaignFlowNodeId?: ModelIDInput | null;\n lastInteractionMessageId?: ModelIDInput | null;\n metadata?: ModelStringInput | null;\n lastActivityAt?: ModelIntInput | null;\n lastMessageAt?: ModelIntInput | null;\n archivedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n and?: Array<ModelEntityConversationFilterInput | null> | null;\n or?: Array<ModelEntityConversationFilterInput | null> | null;\n not?: ModelEntityConversationFilterInput | null;\n};\n\ntype __SubscriptionContainer = {\n OnEntityConversationByTenantId: EntityConversation;\n};\n\nexport const FIELDS_ENTITY_CONVERSATION: string = `\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\nexport const FIELDS_ENTITY_CONVERSATION_EXPANDED = `\n id\n tenantId\n entityId\n entity {\n id\n externalId\n tenantId\n entityTypeId\n parentId\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 notes\n customFields\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 }\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 interactions (limit: 1, sortDirection: ${ModelSortDirection.DESC}) {\n items {\n id\n tenantId\n entityId\n entityConversationId\n teamId\n widgetId\n metadata\n subject\n direction\n status\n last_status\n hostId\n startedAt\n completedAt\n createdAt\n updatedAt\n deletedAt\n }\n nextToken\n }\n messages (limit: 1, sortDirection: ${ModelSortDirection.DESC}) {\n items {\n id\n externalId\n endpointId\n entityConversationId\n interactionId\n interactionAttendeeId\n referenceMessageId\n body\n metadata\n createdAt\n updatedAt\n deletedAt\n messageAttachments {\n items {\n id\n externalId\n interactionId\n interactionMessageId\n interactionId\n name\n size\n type\n file {\n key\n bucket\n location\n }\n createdAt\n updatedAt\n deletedAt\n }\n nextToken\n }\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}\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}\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 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';\n\nimport { Language, List, ModelBooleanInput, ModelIDInput, ModelIntInput, ModelSortDirection, ModelStringInput, ModelStringKeyConditionInput, PhoneNumber, S3Object } from '../models/common.model';\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\n\nexport type Entity = {\n id: string;\n externalId?: string | null;\n tenantId: string;\n name: string;\n image?: S3Object | null;\n email?: string | null;\n phoneNumber?: PhoneNumber | null;\n phoneNumberE164?: string | null;\n preferences?: EntityPreferences | null;\n contactPreferences?: EntityContactPreferences | null;\n createdAt: number;\n updatedAt: number;\n blockedAt?: number | null;\n deletedAt?: number | null;\n};\n\n/* export type Entity = {\n id: string;\n externalId?: string | null;\n tenantId: string;\n entityTypeId?: string | null;\n entityType?: EntityType | null;\n parentId?: string | null;\n parent?: Entity | null;\n name: string;\n image?: S3Object | null;\n email?: string | null;\n phoneNumber?: PhoneNumber | null;\n phoneNumberE164?: string | null;\n isOrganization: boolean;\n notes?: string | null;\n customFields?: Array<string | null> | null;\n preferences?: EntityPreferences | null;\n contactPreferences?: EntityContactPreferences | null;\n createdAt: number;\n updatedAt: number;\n blockedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type EntityType = {\n id: string;\n externalId?: string | null;\n tenantId: string;\n name: string;\n description?: string | null;\n image?: S3Object | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n entityFields?: Array<string | null> | null;\n organizationFields?: Array<string | null> | null;\n};\n*/\n\nexport type EntityPreferences = {\n timezoneName?: string | null;\n language?: Language | null;\n};\n\nexport type EntityContactPreferences = {\n allowCall?: boolean | null;\n allowEmail?: boolean | null;\n allowSMS?: boolean | null;\n allowWhatsApp?: boolean | null;\n};\n\nexport type CreateEntityInput = {\n id?: string | null;\n externalId?: string | null;\n tenantId: string;\n // entityTypeId?: string | null;\n // parentId?: string | null;\n name: string;\n image?: S3Object | null;\n email?: string | null;\n phoneNumber?: PhoneNumber | null;\n phoneNumberE164?: string | null;\n isOrganization: boolean;\n // notes?: string | null;\n // customFields?: Array<string | null> | null;\n // preferences?: EntityPreferences | null;\n // contactPreferences?: EntityContactPreferences | null;\n createdAt: number;\n updatedAt: number;\n blockedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId: string;\n updatedByUserSessionId?: string | null;\n};\n\nexport type UpdateEntityInput = {\n id: string;\n externalId?: string | null;\n tenantId?: string | null;\n // entityTypeId?: string | null;\n // parentId?: string | null;\n name?: string | null;\n image?: S3Object | null;\n email?: string | null;\n phoneNumber?: PhoneNumber | null;\n phoneNumberE164?: string | null;\n isOrganization?: boolean | null;\n // notes?: string | null;\n // customFields?: Array<string | null> | null;\n // preferences?: EntityPreferences | null;\n // contactPreferences?: EntityContactPreferences | null;\n createdAt?: number | null;\n updatedAt: number;\n blockedAt?: number | null;\n deletedAt?: number | null;\n updatedByUserId?: string | null;\n updatedByUserSessionId?: string | null;\n};\n\n/* export type EntityPreferencesInput = {\n timezoneName?: string | null;\n language?: LanguageInput | null;\n};\n\nexport type EntityContactPreferencesInput = {\n allowCall?: boolean | null;\n allowEmail?: boolean | null;\n allowSMS?: boolean | null;\n allowWhatsApp?: boolean | null;\n}; */\n\nexport type ModelEntityConditionInput = {\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n entityTypeId?: ModelIDInput | null;\n parentId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n email?: ModelStringInput | null;\n phoneNumberE164?: ModelStringInput | null;\n isOrganization?: ModelBooleanInput | null;\n // notes?: ModelStringInput | null;\n // customFields?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n // updatedByUserId?: ModelIDInput | null;\n // updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelEntityConditionInput | null> | null;\n or?: Array<ModelEntityConditionInput | null> | null;\n not?: ModelEntityConditionInput | null;\n};\n\nexport type ModelEntityFilterInput = {\n id?: ModelIDInput | null;\n externalId?: ModelStringInput | null;\n tenantId?: ModelIDInput | null;\n entityTypeId?: ModelIDInput | null;\n parentId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n email?: ModelStringInput | null;\n phoneNumberE164?: ModelStringInput | null;\n isOrganization?: ModelBooleanInput | null;\n // notes?: ModelStringInput | null;\n // customFields?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n deletedAt?: ModelIntInput | null;\n // updatedByUserId?: ModelIDInput | null;\n // updatedByUserSessionId?: ModelIDInput | null;\n and?: Array<ModelEntityFilterInput | null> | null;\n or?: Array<ModelEntityFilterInput | null> | null;\n not?: ModelEntityFilterInput | null;\n};\n\nconst ENTITY_SELECTION = /* GraphQL */ `\n id\n externalId\n tenantId\n entityTypeId\n entityType {\n id\n externalId\n tenantId\n name\n description\n image {\n location\n }\n createdAt\n updatedAt\n deletedAt\n }\n parentId\n parent {\n id\n externalId\n tenantId\n entityTypeId\n name\n image {\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 location\n }\n isOrganization\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`;\n\nconst ENTITY_SELECTION_MINIMAL = /* GraphQL */ `\n id\n externalId\n tenantId\n name\n image {\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`;\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 ${ENTITY_SELECTION_MINIMAL}\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 ${ENTITY_SELECTION_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 ${ENTITY_SELECTION_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 ${ENTITY_SELECTION_MINIMAL}\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 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 ${ENTITY_SELECTION_MINIMAL}\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","import { Injectable } from '@angular/core';\n\nimport { S3Object } from '../models/common.model';\nimport { InteractionWidget } from './interaction-widget.service';\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 /* buyPrice?: InteractionEndpointPriceDetails | null; */\n sellPrice?: InteractionEndpointPriceDetails | null;\n documents?: Array<InteractionEndpointRegulatoryComplianceDocument | null> | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n};\n\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\n@Injectable({\n providedIn: 'root',\n})\nexport class InteractionEndpointService {}\n","import { Injectable } from '@angular/core';\n\nimport { List, ModelBooleanInput, ModelIDInput, ModelIntInput, ModelSortDirection, ModelStringInput, ModelStringKeyConditionInput } from '../models/common.model';\nimport { InteractionChannel, InteractionProvider, InteractionRouteConfiguration, InteractionRouteConfigurationInput, ModelInteractionChannelInput, ModelInteractionProviderInput } from './interaction.service';\nimport { Tenant } from './tenant.service';\n\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\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};\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 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`;\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","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { List, ModelBooleanInput, ModelIDInput, ModelIDKeyConditionInput, ModelIntInput, ModelIntKeyConditionInput, ModelSortDirection, ModelStringInput, S3Object, SubscriptionResponse } from '../models/common.model';\nimport { Entity } from './entity.service';\nimport { EntityConversation } from './entity-conversation.service';\nimport { InteractionEndpoint } from './interaction-endpoint.service';\nimport { InteractionWidget } from './interaction-widget.service';\nimport { Team } from './team.service';\nimport { User } from './user.service';\nimport { UserSession } from './user-session.service';\n\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\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 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\nexport enum InteractionProvider {\n AVAYA_IPO = 'AVAYA_IPO',\n TELNYX = 'TELNYX',\n WHATSAPP = 'WHATSAPP',\n TELEGRAM = 'TELEGRAM',\n SNUGDESK = 'SNUGDESK',\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 metadata?: string | null;\n subject?: string | null;\n routeConfiguration?: InteractionRouteConfiguration | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n summary?: string | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n /*\n invitees?: List<InteractionInvitee> | null;\n attendees?: List<InteractionAttendee> | null;\n messages?: List<InteractionMessage> | null;\n messageAttachments?: List<InteractionMessageAttachment> | null;\n */\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 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 createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\n messageAttachments?: List<InteractionMessageAttachment> | null;\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 metadata?: string | null;\n subject?: string | null;\n routeConfiguration?: InteractionRouteConfigurationInput | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n summary?: string | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | 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 metadata?: string | null;\n subject?: string | null;\n routeConfiguration?: InteractionRouteConfigurationInput | null;\n startedAt?: number | null;\n completedAt?: number | null;\n duration?: number | null;\n summary?: string | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n deletedAt?: number | 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 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 createdAt: number;\n updatedAt: number;\n deletedAt?: number | 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 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 metadata?: ModelStringInput | null;\n subject?: ModelStringInput | null;\n startedAt?: ModelIntInput | null;\n completedAt?: ModelIntInput | null;\n duration?: ModelIntInput | null;\n summary?: ModelStringInput | null;\n temp_isLocked?: ModelBooleanInput | null;\n temp_isAvailableTenantIdUnion?: ModelStringInput | 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 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 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 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 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 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 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 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\ntype __SubscriptionContainer = {\n OnInteractionInviteeByUserId: InteractionInvitee;\n OnInteractionMessageByEntityConversationId: InteractionMessage;\n};\n\nconst FIELDS_INTERACTION = `\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 metadata\n subject\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n startedAt\n completedAt\n duration\n summary\n createdAt\n updatedAt\n deletedAt\n`;\n\nconst FIELDS_INTERACTION_EXPANDED = `\n id\n tenantId\n widgetId\n 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 createdAt\n updatedAt\n deletedAt\n }\n endpointId\n endpoint {\n id\n externalId\n tenantId\n widgetId\n address\n configuration\n createdAt\n updatedAt\n deletedAt\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 id\n externalId\n tenantId\n entityTypeId\n entityType {\n id\n externalId\n name\n description\n createdAt\n updatedAt\n deletedAt\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 notes\n customFields\n createdAt\n updatedAt\n blockedAt\n deletedAt\n }\n teamId\n team {\n id\n tenantId\n name\n description\n createdAt\n updatedAt\n deletedAt\n }\n hostId\n host {\n id\n interactionId\n entityId\n teamId\n userId\n createdAt\n updatedAt\n deletedAt\n }\n providerInteractionId\n channel\n provider\n context\n direction\n status\n last_status\n metadata\n subject\n routeConfiguration {\n teamId\n routingLogic\n maxWaitTimeoutSeconds\n }\n startedAt\n completedAt\n duration\n summary\n temp_isLocked\n temp_isAvailableTenantIdUnion\n createdAt\n updatedAt\n deletedAt\n`;\n\nconst 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\nconst FIELDS_INTERACTION_ATTENDEE_EXPANDED = `\n id\n interactionId\n entityId\n entity {\n id\n externalId\n tenantId\n entityTypeId\n entityType {\n id\n externalId\n name\n description\n createdAt\n updatedAt\n deletedAt\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 notes\n customFields\n createdAt\n updatedAt\n blockedAt\n deletedAt\n }\n interactionWidgetSessionId\n teamId\n team {\n id\n tenantId\n name\n description\n image {\n key\n bucket\n location\n }\n createdAt\n updatedAt\n deletedAt\n ticketFields\n }\n userId\n user {\n id\n externalId\n tenantId\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 type\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\n }\n }\n notificationSettings {\n allowPush\n allowEmail\n allowSMS\n allowWhatsApp\n }\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n }\n userSessionId\n name\n metadata\n customFields\n isAdministrator\n joinedAt\n exitedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nconst FIELDS_INTERACTION_INVITEE = `\n id\n interactionId\n interaction {\n ${FIELDS_INTERACTION}\n }\n entityId\n entity {\n id\n externalId\n tenantId\n entityTypeId\n entityType {\n id\n externalId\n name\n description\n createdAt\n updatedAt\n deletedAt\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 notes\n customFields\n createdAt\n updatedAt\n blockedAt\n deletedAt\n }\n teamId\n userId\n isAdministrator\n temp_expiringAt\n expiredAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nconst 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\nconst FIELDS_INTERACTION_MESSAGE = `\n id\n externalId\n endpointId\n endpoint {\n id\n externalId\n tenantId\n widgetId\n address\n configuration\n createdAt\n updatedAt\n deletedAt\n }\n campaignId\n campaignFlowNodeId\n entityConversationId\n interactionId\n interactionAttendeeId\n interactionAttendee {\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 body\n metadata\n referenceMessageId\n createdAt\n updatedAt\n deletedAt\n messageAttachments {\n items {\n ${FIELDS_INTERACTION_MESSAGE_ATTACHMENT}\n }\n nextToken\n }\n`;\n\nconst FIELDS_INTERACTION_MESSAGE_MINIMAL = `\n id\n externalId\n endpointId\n campaignId\n campaignFlowNodeId\n entityConversationId\n interactionId\n interactionAttendeeId\n body\n metadata\n referenceMessageId\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}\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}\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}\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 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_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 <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 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 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 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}\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 async ListInteractionMessagesByExternalMessageId(externalMessageId: string, createdAt?: ModelIntKeyConditionInput, sortDirection?: ModelSortDirection, filter?: ModelInteractionMessageFilterInput, limit?: number, nextToken?: string): Promise<List<InteractionMessage>> {\n const statement = `query ListInteractionMessagesByExternalMessageId($externalMessageId: ID!, $createdAt: ModelIntKeyConditionInput, $sortDirection: ModelSortDirection, $filter: ModelInteractionMessageFilterInput, $limit: Int, $nextToken: String) {\n listInteractionMessagesByExternalMessageId(\n externalMessageId: $externalMessageId\n createdAt: $createdAt\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n ${FIELDS_INTERACTION_MESSAGE}\n }\n nextToken\n }\n }`;\n\n const gqlAPIServiceArguments: any = { externalMessageId };\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.listInteractionMessagesByExternalMessageId;\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}\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 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}\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 { AppSyncHelperService } from '../helpers/appsync-helper.service';\nimport { Language, S3Object, SubscriptionResponse } from '../models/common.model';\n\nimport * as uuid from 'uuid';\n\nconst FIELDS_TENANT_EXPANDED = `\n id\n externalId\n tenantDomain\n organizationName\n websiteURL\n image {\n key\n bucket\n location\n }\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\n }\n allowUserToChangePreferences\n }\n security {\n domainValidationTokenExpiry\n userValidationTokenExpiry\n secretTokenExpiry\n sessionTokenExpiry\n sessionIdleTimeout\n }\n activatedAt\n blockedAt\n createdAt\n updatedAt\n deletedAt\n`;\n\nexport type TenantPreferences = {\n timezoneName?: string | null;\n language?: Language | null;\n allowUserToChangePreferences?: boolean | 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 Tenant = {\n id: string;\n externalId?: string | null;\n tenantDomain: string;\n organizationName: string;\n websiteURL?: string | null;\n image?: S3Object | null;\n preferences?: TenantPreferences | null;\n security?: TenantSecurity | null;\n activatedAt?: number | null;\n blockedAt?: number | null;\n createdAt: number;\n updatedAt: number;\n deletedAt?: number | null;\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 getTenantById(id: string): Promise<Tenant> {\n if (!id || !uuid.validate(id)) {\n throw { code: 400, message: `Invalid id: ${id}` };\n }\n\n const tenant = await this.GetTenant(id);\n if (!tenant || !!tenant.deletedAt) {\n throw { code: 400, message: `Tenant not found` };\n }\n if (!tenant.activatedAt || !!tenant.blockedAt) {\n throw { code: 403, message: `Tenant not activated or subscription has lapsed.` };\n }\n\n return tenant;\n }\n\n private async GetTenant(id: string): Promise<Tenant> {\n const statement = `query GetTenant($id: ID!) {\n getTenant(id: $id) {\n ${FIELDS_TENANT_EXPANDED}\n }\n }`;\n const gqlAPIServiceArguments: any = { id };\n const response = await this.appSyncService.query<{ getTenant: Tenant }>(statement, gqlAPIServiceArguments);\n return response.data?.getTenant as Tenant;\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_EXPANDED}\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';\nimport { Observable } from 'rxjs';\n\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\nimport { List, ModelBooleanInput, ModelIDInput, ModelIntInput, ModelIntKeyConditionInput, ModelSortDirection, ModelStringInput, SubscriptionResponse } from '../models/common.model';\nimport { ModelUserStatusInput, User, UserStatus } from './user.service';\n\nimport * as uuid from 'uuid';\n\nconst USER_SESSION_FIELDS = `\n id\n tenantId\n userId\n ipDetails\n status\n teamIds\n temp_isLocked\n temp_isAvailableTenantIdUnion\n createdAt\n updatedAt\n expiryAt\n loggedOutAt\n blockedAt\n`;\n\nexport type UserSession = {\n id: string;\n tenantId: string;\n userId: string;\n user?: User | null;\n ipDetails?: string | null;\n status?: UserStatus | null;\n teamIds?: Array<string | null> | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n createdAt: number;\n updatedAt: number;\n expiryAt: number;\n loggedOutAt?: number | null;\n blockedAt?: number | null;\n};\n\nexport type UpdateUserSessionInput = {\n id: string;\n tenantId?: string | null;\n userId?: string | null;\n ipDetails?: string | null;\n status?: UserStatus | null;\n teamIds?: Array<string | null> | null;\n temp_isLocked?: boolean | null;\n temp_isAvailableTenantIdUnion?: string | null;\n createdAt?: number | null;\n updatedAt?: number | null;\n expiryAt?: number | null;\n loggedOutAt?: number | null;\n blockedAt?: number | null;\n};\n\nexport type ModelUserSessionConditionInput = {\n tenantId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n ipDetails?: ModelStringInput | null;\n status?: ModelUserStatusInput | null;\n teamIds?: ModelStringInput | null;\n temp_isLocked?: ModelBooleanInput | null;\n temp_isAvailableTenantIdUnion?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n expiryAt?: ModelIntInput | null;\n loggedOutAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n and?: Array<ModelUserSessionConditionInput | null> | null;\n or?: Array<ModelUserSessionConditionInput | null> | null;\n not?: ModelUserSessionConditionInput | null;\n};\n\nexport type ModelUserSessionFilterInput = {\n id?: ModelIDInput | null;\n tenantId?: ModelIDInput | null;\n userId?: ModelIDInput | null;\n ipDetails?: ModelStringInput | null;\n status?: ModelUserStatusInput | null;\n teamIds?: ModelStringInput | null;\n temp_isLocked?: ModelBooleanInput | null;\n temp_isAvailableTenantIdUnion?: ModelStringInput | null;\n createdAt?: ModelIntInput | null;\n updatedAt?: ModelIntInput | null;\n expiryAt?: ModelIntInput | null;\n loggedOutAt?: ModelIntInput | null;\n blockedAt?: ModelIntInput | null;\n and?: Array<ModelUserSessionFilterInput | null> | null;\n or?: Array<ModelUserSessionFilterInput | null> | null;\n not?: ModelUserSessionFilterInput | null;\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 getUserSessionById(id: string): Promise<UserSession> {\n if (!id || !uuid.validate(id)) {\n throw { code: 400, message: `Invalid id: ${id}` };\n }\n\n return await this.GetUserSession(id);\n }\n\n async GetUserSession(id: string): Promise<UserSession> {\n const statement = `query GetUserSession($id: ID!) {\n getUserSession(id: $id) {\n ${USER_SESSION_FIELDS}\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 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 ${USER_SESSION_FIELDS}\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 async UpdateUserSession(input: UpdateUserSessionInput, condition?: ModelUserSessionConditionInput): Promise<UserSession> {\n const statement = `mutation UpdateUserSession($input: UpdateUserSessionInput!, $condition: ModelUserSessionConditionInput) {\n updateUserSession(input: $input, condition: $condition) {\n ${USER_SESSION_FIELDS}\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 OnUserSessionByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserSessionById'>>> {\n const statement = `subscription OnUserSessionById($id: ID!) {\n OnUserSessionById(id: $id) {\n ${USER_SESSION_FIELDS}\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';\nimport { Observable } from 'rxjs';\n\nimport { AppSyncHelperService } from '../helpers/appsync-helper.service';\nimport { Language, PhoneNumber, S3Object, SubscriptionResponse } from '../models/common.model';\n\nimport * as uuid from 'uuid';\n\nconst FIELDS_USER_EXPANDED = `\n id\n externalId\n tenantId\n email\n name\n image {\n key\n bucket\n location\n }\n phoneNumber {\n countryCode\n dialCode\n e164Number\n internationalNumber\n nationalNumber\n number\n }\n preferences {\n timezoneName\n language {\n code\n nameEn\n nameLocal\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`;\n\nexport type UserPreferences = {\n timezoneName?: string | null;\n language?: Language | 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 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 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};\n\nexport type ModelUserStatusInput = {\n eq?: UserStatus | null;\n ne?: UserStatus | null;\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 getUserById(id: string): Promise<User> {\n if (!id || !uuid.validate(id)) {\n throw { code: 400, message: `Invalid id: ${id}` };\n }\n\n const user = await this.GetUser(id);\n if (!user || !!user.deletedAt) {\n throw { code: 400, message: `User not found` };\n }\n if (!user.activatedAt) {\n throw { code: 403, message: `User not activated.` };\n }\n if (!!user.blockedAt) {\n throw { code: 403, message: `User has been blocked.` };\n }\n\n return user;\n }\n\n async GetUser(id: string): Promise<User> {\n const statement = `query GetUser($id: ID!) {\n getUser(id: $id) {\n ${FIELDS_USER_EXPANDED}\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 OnUserByIdListener(id: string): Observable<SubscriptionResponse<Pick<__SubscriptionContainer, 'OnUserById'>>> {\n const statement = `subscription OnUserById($id: ID!) {\n OnUserById(id: $id) {\n ${FIELDS_USER_EXPANDED}\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 {\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","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","/*\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/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\n// AppSync - Models\nexport * from './lib/models/common.model';\n\n// AppSync - GraphQL services\nexport * from './lib/services/entity-conversation.service';\nexport * from './lib/services/entity.service';\nexport * from './lib/services/interaction-endpoint.service';\nexport * from './lib/services/interaction-widget.service';\nexport * from './lib/services/interaction.service';\nexport * from './lib/services/team.service';\nexport * from './lib/services/tenant.service';\nexport * from './lib/services/user-session.service';\nexport * from './lib/services/user.service';\n\n// Other services\nexport * from './lib/services/authentication.service';\n// export * from './lib/services/authentication-helper.service';\nexport * from './lib/services/ip-registry.service';\n\nexport * from './lib/utilities/custom.validators';\nexport * from './lib/utilities/clean-deep.helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.FooterComponent","i1.FooterComponent","i1","i2.SnugdeskIPRegistryService","i1.SnugdeskAuthenticationHelperService","i1.SnugdeskAuthenticationService","i1.AppSyncHelperService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@snugdesk/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Core utility and session management library required for all Snugdesk widgets. Handles authentication, configuration, and shared services.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": ">=19.0.0",
|