tango-app-api-client 3.6.2 → 3.6.4

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.
package/package.json CHANGED
@@ -1,46 +1,46 @@
1
- {
2
- "name": "tango-app-api-client",
3
- "version": "3.6.2",
4
- "description": "client",
5
- "main": "index.js",
6
- "type": "module",
7
- "scripts": {
8
- "start": "nodemon --exec \"eslint --fix . && node app.js\"",
9
- "build:patch": "node build.js patch && npm publish",
10
- "build:minor": "node build.js minor && npm publish",
11
- "build:major": "node build.js major && npm publish"
12
- },
13
- "engines": {
14
- "node": ">=18.10.0"
15
- },
16
- "author": "praveenraj",
17
- "license": "ISC",
18
- "dependencies": {
19
- "aws-sdk": "^2.1560.0",
20
- "cors": "^2.8.5",
21
- "dotenv": "^16.4.4",
22
- "express": "^4.18.2",
23
- "express-fileupload": "^1.4.3",
24
- "handlebars": "^4.7.8",
25
- "joi": "^17.12.1",
26
- "joi-to-swagger": "^6.2.0",
27
- "lodash": "^4.17.21",
28
- "mongodb": "^6.7.0",
29
- "nodemon": "^3.0.3",
30
- "npm": "^10.9.1",
31
- "sharp": "^0.34.3",
32
- "swagger-ui-express": "^5.0.0",
33
- "tango-api-schema": "^2.3.6",
34
- "tango-app-api-middleware": "^3.6.0",
35
- "winston": "^3.11.0",
36
- "winston-daily-rotate-file": "^5.0.0"
37
- },
38
- "devDependencies": {
39
- "eslint": "^8.56.0",
40
- "eslint-config-google": "^0.14.0",
41
- "eslint-config-semistandard": "^17.0.0",
42
- "eslint-config-standard": "^17.1.0",
43
- "eslint-plugin-import": "^2.29.1",
44
- "eslint-plugin-promise": "^6.1.1"
45
- }
46
- }
1
+ {
2
+ "name": "tango-app-api-client",
3
+ "version": "3.6.4",
4
+ "description": "client",
5
+ "main": "index.js",
6
+ "type": "module",
7
+ "scripts": {
8
+ "start": "nodemon --exec \"eslint --fix . && node index.js\"",
9
+ "build:patch": "node build.js patch && npm publish",
10
+ "build:minor": "node build.js minor && npm publish",
11
+ "build:major": "node build.js major && npm publish"
12
+ },
13
+ "engines": {
14
+ "node": ">=18.10.0"
15
+ },
16
+ "author": "praveenraj",
17
+ "license": "ISC",
18
+ "dependencies": {
19
+ "aws-sdk": "^2.1560.0",
20
+ "cors": "^2.8.5",
21
+ "dotenv": "^16.4.4",
22
+ "express": "^4.18.2",
23
+ "express-fileupload": "^1.4.3",
24
+ "handlebars": "^4.7.8",
25
+ "joi": "^17.12.1",
26
+ "joi-to-swagger": "^6.2.0",
27
+ "lodash": "^4.17.21",
28
+ "mongodb": "^6.7.0",
29
+ "nodemon": "^3.0.3",
30
+ "npm": "^10.9.1",
31
+ "sharp": "^0.34.3",
32
+ "swagger-ui-express": "^5.0.0",
33
+ "tango-api-schema": "^2.4.12",
34
+ "tango-app-api-middleware": "^3.6.0",
35
+ "winston": "^3.11.0",
36
+ "winston-daily-rotate-file": "^5.0.0"
37
+ },
38
+ "devDependencies": {
39
+ "eslint": "^8.56.0",
40
+ "eslint-config-google": "^0.14.0",
41
+ "eslint-config-semistandard": "^17.0.0",
42
+ "eslint-config-standard": "^17.1.0",
43
+ "eslint-plugin-import": "^2.29.1",
44
+ "eslint-plugin-promise": "^6.1.1"
45
+ }
46
+ }
@@ -488,48 +488,48 @@ export async function clientDetails( req, res ) {
488
488
 
489
489
 
490
490
  if ( isLogoExist ) {
491
- const signedFilUrl =await customSignedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/logo/${client.profileDetails?.logo}` }, 30 ); // `${url.assests}/${client.clientId}/logo/${client.profileDetails?.logo}`; // await signedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/logo/${client.profileDetails?.logo}` } );
491
+ const signedFilUrl =await customSignedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/logo/${client.profileDetails?.logo}` }, 8 ); // `${url.assests}/${client.clientId}/logo/${client.profileDetails?.logo}`; // await signedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/logo/${client.profileDetails?.logo}` } );
492
492
  client.profileDetails.logo = signedFilUrl;
493
493
  } else {
494
494
  client.profileDetails.logo = '';
495
495
  }
496
496
 
497
497
  if ( isGstCertificateExist ) {
498
- const signedFilUrl = await customSignedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.gst?.path}` }, 30 );// `${url.assests}/${client.clientId}/documents/${client.document?.gst?.path}`;// await signedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.gst?.path}` } );
498
+ const signedFilUrl = await customSignedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.gst?.path}` }, 8 );// `${url.assests}/${client.clientId}/documents/${client.document?.gst?.path}`;// await signedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.gst?.path}` } );
499
499
  client.document.gst.path = signedFilUrl;
500
500
  } else {
501
501
  client.document.gst.path = '';
502
502
  }
503
503
 
504
504
  if ( isAddressCertificateExist ) {
505
- const signedFilUrl =await customSignedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.addressProof?.path}` }, 30 ); // `${url.assests}/${client.clientId}/documents/${client.document?.addressProof?.path}`;// await signedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.addressProof?.path}` } );
505
+ const signedFilUrl =await customSignedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.addressProof?.path}` }, 8 ); // `${url.assests}/${client.clientId}/documents/${client.document?.addressProof?.path}`;// await signedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.addressProof?.path}` } );
506
506
  client.document.addressProof.path = signedFilUrl;
507
507
  } else {
508
508
  client.document.addressProof.path = '';
509
509
  }
510
510
  if ( isPanCertificateExist ) {
511
- const signedFilUrl = await customSignedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.pan?.path}` }, 30 );// `${url.assests}/${client.clientId}/documents/${client.document?.pan?.path}`;// await signedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.pan?.path}` } );
511
+ const signedFilUrl = await customSignedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.pan?.path}` }, 8 );// `${url.assests}/${client.clientId}/documents/${client.document?.pan?.path}`;// await signedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.pan?.path}` } );
512
512
  client.document.pan.path = signedFilUrl;
513
513
  } else {
514
514
  client.document.pan.path = '';
515
515
  }
516
516
 
517
517
  if ( isCinCertificateExist ) {
518
- const signedFilUrl =await customSignedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.cin?.path}` }, 30 ); // `${url.assests}/${client.clientId}/documents/${client.document?.cin?.path}`;// await signedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.cin?.path}` } );
518
+ const signedFilUrl =await customSignedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.cin?.path}` }, 8 ); // `${url.assests}/${client.clientId}/documents/${client.document?.cin?.path}`;// await signedUrl( { Bucket: bucket.assets, file_path: `${client.clientId}/documents/${client.document?.cin?.path}` } );
519
519
  client.document.cin.path = signedFilUrl;
520
520
  } else {
521
521
  client.document.cin.path = '';
522
522
  }
523
523
 
524
524
  if ( isContractCertificateExist ) {
525
- const signedFilUrl = await customSignedUrl( { Bucket: bucket.assets, file_path: `documents/contract.pdf` }, 30 ); // `${url.assests}/documents/contract.pdf`;// await signedUrl( { Bucket: bucket.assets, file_path: `documents/contract.pdf` } );
525
+ const signedFilUrl = await customSignedUrl( { Bucket: bucket.assets, file_path: `documents/contract.pdf` }, 8 ); // `${url.assests}/documents/contract.pdf`;// await signedUrl( { Bucket: bucket.assets, file_path: `documents/contract.pdf` } );
526
526
  client._doc.document.contract = signedFilUrl;
527
527
  } else {
528
528
  client._doc.document.contract = '';
529
529
  }
530
530
 
531
531
  if ( isTermsAndConditionsExist ) {
532
- const signedFilUrl =await customSignedUrl( { Bucket: bucket.assets, file_path: `documents/terms&conditions.pdf` }, 30 ); // `${url.assests}/documents/terms&conditions.pdf`;// await signedUrl( { Bucket: bucket.assets, file_path: `documents/terms&conditions.pdf` } );
532
+ const signedFilUrl =await customSignedUrl( { Bucket: bucket.assets, file_path: `documents/terms&conditions.pdf` }, 8 ); // `${url.assests}/documents/terms&conditions.pdf`;// await signedUrl( { Bucket: bucket.assets, file_path: `documents/terms&conditions.pdf` } );
533
533
  client._doc.document.termsAndconditions = signedFilUrl;
534
534
  } else {
535
535
  client._doc.document.termsAndconditions = '';
@@ -1154,6 +1154,7 @@ export async function updateFeatureConfiguration( req, res ) {
1154
1154
  Reports: previousData?.featureConfigs?.isNewReports == true ? 'Enabled' : 'Disabled',
1155
1155
  Trax: previousData?.featureConfigs?.isTrax == true ? 'Enabled' : 'Disabled',
1156
1156
  Revops: previousData?.featureConfigs?.isRevops == true ? 'Enabled' : 'Disabled',
1157
+ VMS: previousData?.featureConfigs?.isVMS == true ? 'Enabled' : 'Disabled',
1157
1158
  StreamType: previousData?.featureConfigs?.streamBy == 'Edge' ? 'Edge App' : 'RTSP',
1158
1159
  FootfallDirectoryOnlyAudit: previousData?.featureConfigs?.isFootfallDirectoryAudit == true ? 'Enabled' : 'Disabled',
1159
1160
  FootfallDirectoryOnlyFew: previousData?.featureConfigs?.isFootfallDirectoryLimit == true ? 'Enabled' : 'Disabled',
@@ -1161,6 +1162,7 @@ export async function updateFeatureConfiguration( req, res ) {
1161
1162
  AIManager: previousData?.featureConfigs?.isAIManager == true ? 'Enabled' : 'Disabled',
1162
1163
  AIManagerAccessControl: previousData?.featureConfigs?.isAIManagerAccessControl == true ? 'Enabled' : 'Disabled',
1163
1164
  CameraEdit: previousData?.featureConfigs?.isCameraEdit == true ? 'Enabled' : 'Disabled',
1165
+ SSOlogin: previousData?.featureConfigs?.loginSSO == true ? 'Enabled' : 'Disabled',
1164
1166
  };
1165
1167
 
1166
1168
  // Map and rename keys from current client info for UI display and logging
@@ -1194,6 +1196,7 @@ export async function updateFeatureConfiguration( req, res ) {
1194
1196
  Reports: postData?.featureConfigs?.isNewReports == true ? 'Enabled' : 'Disabled',
1195
1197
  Trax: postData?.featureConfigs?.isTrax == true ? 'Enabled' : 'Disabled',
1196
1198
  Revops: postData?.featureConfigs?.isRevops == true ? 'Enabled' : 'Disabled',
1199
+ VMS: postData?.featureConfigs?.isVMS == true ? 'Enabled' : 'Disabled',
1197
1200
  StreamType: postData?.featureConfigs?.streamBy == 'Edge' ? 'Edge App' : 'RTSP',
1198
1201
  FootfallDirectoryOnlyAudit: postData?.featureConfigs?.isFootfallDirectoryAudit == true ? 'Enabled' : 'Disabled',
1199
1202
  FootfallDirectoryOnlyFew: postData?.featureConfigs?.isFootfallDirectoryLimit == true ? 'Enabled' : 'Disabled',
@@ -1201,6 +1204,7 @@ export async function updateFeatureConfiguration( req, res ) {
1201
1204
  AIManager: previousData?.featureConfigs?.isAIManager == true ? 'Enabled' : 'Disabled',
1202
1205
  AIManagerAccessControl: previousData?.featureConfigs?.isAIManagerAccessControl == true ? 'Enabled' : 'Disabled',
1203
1206
  CameraEdit: previousData?.featureConfigs?.isCameraEdit == true ? 'Enabled' : 'Disabled',
1207
+ SSOlogin: previousData?.featureConfigs?.loginSSO == true ? 'Enabled' : 'Disabled',
1204
1208
  };
1205
1209
 
1206
1210
  // Prepare activity log object with all relevant details for OpenSearch logging
@@ -129,6 +129,8 @@ export const featureConfigurationSchemaBody = joi.object(
129
129
  isAIManager: joi.boolean().optional(),
130
130
  isAIManagerAccessControl: joi.boolean().optional(),
131
131
  isCameraEdit: joi.boolean().optional(),
132
+ isVMS: joi.boolean().optional(),
133
+ loginSSO: joi.boolean().optional(),
132
134
  },
133
135
  );
134
136
 
@@ -1,171 +1,171 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <meta http-equiv="x-ua-compatible" content="ie=edge">
6
- <title>Your account was approved!</title>
7
- <meta name="viewport" content="width=device-width, initial-scale=1">
8
- <style type="text/css">
9
- @media screen {
10
- @font-face {
11
- font-family: 'Inter';
12
- font-style: normal;
13
- font-weight: 400;
14
- font-display: swap;
15
- src: local("Inter"), local("Inter-Regular"), url(https://fonts.gstatic.com/s/inter/v12/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZJhiI2B.woff2) format('woff2');
16
- unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
17
- }
18
- }
19
-
20
- body {
21
- font-family: "Inter", sans-serif !important;
22
- }
23
-
24
- body,
25
- table,
26
- td,
27
- a {
28
- -ms-text-size-adjust: 100%;
29
- -webkit-text-size-adjust: 100%;
30
- }
31
-
32
- table,
33
- td {
34
- mso-table-rspace: 0pt;
35
- mso-table-lspace: 0pt;
36
- }
37
-
38
- img {
39
- -ms-interpolation-mode: bicubic;
40
- }
41
-
42
- a[x-apple-data-detectors] {
43
- font-family: "inherit" !important;
44
- font-size: inherit !important;
45
- font-weight: inherit !important;
46
- line-height: inherit !important;
47
- color: inherit !important;
48
- text-decoration: none !important;
49
- }
50
-
51
- div[style*="margin: 16px 0;"] {
52
- margin: 0 !important;
53
- }
54
-
55
- body {
56
- width: 100% !important;
57
- height: 100% !important;
58
- padding: 0 !important;
59
- margin: 0 !important;
60
- }
61
-
62
- table {
63
- border-collapse: collapse !important;
64
- }
65
-
66
- a {
67
- color: #1a82e2;
68
- }
69
-
70
- img {
71
- height: auto;
72
- line-height: 100%;
73
- text-decoration: none;
74
- border: 0;
75
- outline: none;
76
- }
77
- </style>
78
- </head>
79
- <body style="background-color: #dbe5ea;">
80
- <div class="preheader" style="display: none; max-width: 0; max-height: 0; overflow: hidden; font-size: 1px; line-height: 1px; color: #fff; opacity: 0;"> Email Summary (Hidden) </div>
81
- <table border="0" cellpadding="0" cellspacing="0" width="100%" style="padding-left:10px;padding-right:10px">
82
- <tr>
83
- <td bgcolor="#dbe5ea" style="padding:32px 10px 0 10px">
84
- <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;" align="center">
85
- <tr>
86
- <td class="o_bg-white o_px-md o_py-md o_sans o_text" style="margin-top: 0px;margin-bottom: 0px;font-size: 16px;line-height: 24px;background-color: #ffffff;padding-left: 18px;padding-right: 24px;padding-top: 24px;padding-bottom: 24px;">
87
- <p style="margin-top: 0px;margin-bottom: 0px;">
88
- <a class="o_text-white" href="https://tangoeye.ai/" style="text-decoration: none;outline: none;color: #ffffff;">
89
- <img src={{logo}} width="200" height="100" alt="SimpleApp" style="-ms-interpolation-mode: bicubic;vertical-align: middle;border: 0;line-height: 100%;height: auto;outline: none;text-decoration: none;">
90
- </a>
91
- </p>
92
- </td>
93
- </tr>
94
- <tr>
95
- <td align="left" bgcolor="#ffffff" style="padding-left: 30px;padding-right: 24px; font-size: 14px; line-height: 24px;">
96
- <p class="o_heading o_mb-xxs" style="width: 544px;height: 0px;border: 1px solid #CBD5E1;flex: none;order: 1;flex-grow: 0;"></p>
97
- </td>
98
- </tr>
99
- </table>
100
- </td>
101
- </tr>
102
- <tr>
103
- <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
104
- <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
105
- <tr>
106
- <td class="o_bg-white o_px-md o_py-xl o_xs-py-md" style="background-color: #ffffff;padding-left: 30px;padding-right: 24px;padding-top: 10px;padding-bottom: 10px;">
107
- <div class="o_col-6s o_sans o_text-md o_text-light o_center" style="margin-top: 0px;margin-bottom: 0px;font-size: 20px;line-height: 28px;color: #82899a;">
108
- <span class="o_heading o_text-dark o_mb-xxs" style="font-weight: 700;margin-top: 0px;margin-bottom: 4px;color: #242b3d;line-height: 39px;"> Your account was approved!</span>
109
- </div>
110
- </td>
111
- </tr>
112
- </table>
113
- </td>
114
- </tr>
115
- <tr>
116
- <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
117
- <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
118
- <tr>
119
- <td align="left" bgcolor="#ffffff" style="padding-left: 30px;padding-right: 24px; font-size: 16px;padding-top:10px; line-height: 24px;font-weight:400;color:#384860">
120
- <p style="margin: 0;">As a verified user, you will be among the first to receive product updates, new feature announcements, enhanced security and personalised support.
121
- <br><br>
122
- Head over to the dashboard to finish your setup. </p>
123
- </td>
124
- </tr>
125
- </table>
126
- </td>
127
- </tr>
128
- <tr>
129
- <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
130
- <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
131
- <tr>
132
- <td align="left" bgcolor="#fff" style="border-radius: 6px;padding:14px 30px">
133
- <a href={{url}} style="display: inline-block;padding: 10px 36px;font-size: 20px;color: #fff;text-decoration: none;border-radius: 6px;background-color: #00a3ff;"> Add Stores</a>
134
- </td>
135
- </tr>
136
- </table>
137
- </td>
138
- </tr>
139
- <tr>
140
- <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
141
- <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
142
- <tr>
143
- <td align="left" bgcolor="#ffffff" style="padding-left: 30px;padding-right: 24px; font-size: 16px;padding-top:10px; line-height: 24px;font-weight:400;color:#384860">
144
- <p style="margin: 0;">Enjoy the full potential of Tango Traffic Module. If you have any questions or need assistance, our support team is here to help.
145
-
146
- <br><br>
147
-
148
- Happy exploring! </p>
149
- </td>
150
- </tr>
151
- </table>
152
- </td>
153
- </tr>
154
- <tr>
155
- <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 32px 10px">
156
- <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
157
- <tr>
158
- <td class="o_bg-white o_px-md o_py-xl o_xs-py-md" style="background-color: #ffffff;padding-left: 30px;padding-right: 24px;padding-bottom:15px">
159
- <div class="o_col-6s o_sans o_text-md o_text-light o_center" style="margin-top: 0px;margin-bottom: 0px;font-size: 12px;color: #202B3C;font-style: normal;font-weight: 400;font-size: 12px;line-height: 150%;">
160
- <br>
161
- <p>If you'd rather not receive this kind of email, Don’t want any more emails from TangoEye?<u style="color:#00A3FF">Unsubscribe</u>.</p>
162
- <p> © Tango Eye. All rights reserved.</p>
163
- </div>
164
- </td>
165
- </tr>
166
- </table>
167
- </td>
168
- </tr>
169
- </table>
170
- </body>
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
6
+ <title>Your account was approved!</title>
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+ <style type="text/css">
9
+ @media screen {
10
+ @font-face {
11
+ font-family: 'Inter';
12
+ font-style: normal;
13
+ font-weight: 400;
14
+ font-display: swap;
15
+ src: local("Inter"), local("Inter-Regular"), url(https://fonts.gstatic.com/s/inter/v12/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZJhiI2B.woff2) format('woff2');
16
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
17
+ }
18
+ }
19
+
20
+ body {
21
+ font-family: "Inter", sans-serif !important;
22
+ }
23
+
24
+ body,
25
+ table,
26
+ td,
27
+ a {
28
+ -ms-text-size-adjust: 100%;
29
+ -webkit-text-size-adjust: 100%;
30
+ }
31
+
32
+ table,
33
+ td {
34
+ mso-table-rspace: 0pt;
35
+ mso-table-lspace: 0pt;
36
+ }
37
+
38
+ img {
39
+ -ms-interpolation-mode: bicubic;
40
+ }
41
+
42
+ a[x-apple-data-detectors] {
43
+ font-family: "inherit" !important;
44
+ font-size: inherit !important;
45
+ font-weight: inherit !important;
46
+ line-height: inherit !important;
47
+ color: inherit !important;
48
+ text-decoration: none !important;
49
+ }
50
+
51
+ div[style*="margin: 16px 0;"] {
52
+ margin: 0 !important;
53
+ }
54
+
55
+ body {
56
+ width: 100% !important;
57
+ height: 100% !important;
58
+ padding: 0 !important;
59
+ margin: 0 !important;
60
+ }
61
+
62
+ table {
63
+ border-collapse: collapse !important;
64
+ }
65
+
66
+ a {
67
+ color: #1a82e2;
68
+ }
69
+
70
+ img {
71
+ height: auto;
72
+ line-height: 100%;
73
+ text-decoration: none;
74
+ border: 0;
75
+ outline: none;
76
+ }
77
+ </style>
78
+ </head>
79
+ <body style="background-color: #dbe5ea;">
80
+ <div class="preheader" style="display: none; max-width: 0; max-height: 0; overflow: hidden; font-size: 1px; line-height: 1px; color: #fff; opacity: 0;"> Email Summary (Hidden) </div>
81
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="padding-left:10px;padding-right:10px">
82
+ <tr>
83
+ <td bgcolor="#dbe5ea" style="padding:32px 10px 0 10px">
84
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;" align="center">
85
+ <tr>
86
+ <td class="o_bg-white o_px-md o_py-md o_sans o_text" style="margin-top: 0px;margin-bottom: 0px;font-size: 16px;line-height: 24px;background-color: #ffffff;padding-left: 18px;padding-right: 24px;padding-top: 24px;padding-bottom: 24px;">
87
+ <p style="margin-top: 0px;margin-bottom: 0px;">
88
+ <a class="o_text-white" href="https://tangoeye.ai/" style="text-decoration: none;outline: none;color: #ffffff;">
89
+ <img src={{logo}} width="200" height="100" alt="SimpleApp" style="-ms-interpolation-mode: bicubic;vertical-align: middle;border: 0;line-height: 100%;height: auto;outline: none;text-decoration: none;">
90
+ </a>
91
+ </p>
92
+ </td>
93
+ </tr>
94
+ <tr>
95
+ <td align="left" bgcolor="#ffffff" style="padding-left: 30px;padding-right: 24px; font-size: 14px; line-height: 24px;">
96
+ <p class="o_heading o_mb-xxs" style="width: 544px;height: 0px;border: 1px solid #CBD5E1;flex: none;order: 1;flex-grow: 0;"></p>
97
+ </td>
98
+ </tr>
99
+ </table>
100
+ </td>
101
+ </tr>
102
+ <tr>
103
+ <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
104
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
105
+ <tr>
106
+ <td class="o_bg-white o_px-md o_py-xl o_xs-py-md" style="background-color: #ffffff;padding-left: 30px;padding-right: 24px;padding-top: 10px;padding-bottom: 10px;">
107
+ <div class="o_col-6s o_sans o_text-md o_text-light o_center" style="margin-top: 0px;margin-bottom: 0px;font-size: 20px;line-height: 28px;color: #82899a;">
108
+ <span class="o_heading o_text-dark o_mb-xxs" style="font-weight: 700;margin-top: 0px;margin-bottom: 4px;color: #242b3d;line-height: 39px;"> Your account was approved!</span>
109
+ </div>
110
+ </td>
111
+ </tr>
112
+ </table>
113
+ </td>
114
+ </tr>
115
+ <tr>
116
+ <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
117
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
118
+ <tr>
119
+ <td align="left" bgcolor="#ffffff" style="padding-left: 30px;padding-right: 24px; font-size: 16px;padding-top:10px; line-height: 24px;font-weight:400;color:#384860">
120
+ <p style="margin: 0;">As a verified user, you will be among the first to receive product updates, new feature announcements, enhanced security and personalised support.
121
+ <br><br>
122
+ Head over to the dashboard to finish your setup. </p>
123
+ </td>
124
+ </tr>
125
+ </table>
126
+ </td>
127
+ </tr>
128
+ <tr>
129
+ <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
130
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
131
+ <tr>
132
+ <td align="left" bgcolor="#fff" style="border-radius: 6px;padding:14px 30px">
133
+ <a href={{url}} style="display: inline-block;padding: 10px 36px;font-size: 20px;color: #fff;text-decoration: none;border-radius: 6px;background-color: #00a3ff;"> Add Stores</a>
134
+ </td>
135
+ </tr>
136
+ </table>
137
+ </td>
138
+ </tr>
139
+ <tr>
140
+ <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
141
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
142
+ <tr>
143
+ <td align="left" bgcolor="#ffffff" style="padding-left: 30px;padding-right: 24px; font-size: 16px;padding-top:10px; line-height: 24px;font-weight:400;color:#384860">
144
+ <p style="margin: 0;">Enjoy the full potential of Tango Traffic Module. If you have any questions or need assistance, our support team is here to help.
145
+
146
+ <br><br>
147
+
148
+ Happy exploring! </p>
149
+ </td>
150
+ </tr>
151
+ </table>
152
+ </td>
153
+ </tr>
154
+ <tr>
155
+ <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 32px 10px">
156
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;">
157
+ <tr>
158
+ <td class="o_bg-white o_px-md o_py-xl o_xs-py-md" style="background-color: #ffffff;padding-left: 30px;padding-right: 24px;padding-bottom:15px">
159
+ <div class="o_col-6s o_sans o_text-md o_text-light o_center" style="margin-top: 0px;margin-bottom: 0px;font-size: 12px;color: #202B3C;font-style: normal;font-weight: 400;font-size: 12px;line-height: 150%;">
160
+ <br>
161
+ <p>If you'd rather not receive this kind of email, Don’t want any more emails from TangoEye?<u style="color:#00A3FF">Unsubscribe</u>.</p>
162
+ <p> © Tango Eye. All rights reserved.</p>
163
+ </div>
164
+ </td>
165
+ </tr>
166
+ </table>
167
+ </td>
168
+ </tr>
169
+ </table>
170
+ </body>
171
171
  </html> `
@@ -161,6 +161,7 @@ export function featureConfigurationUpdate( query, inputData ) {
161
161
  'featureConfigs.isNewZoneV2': inputData?.isNewZoneV2,
162
162
  'featureConfigs.isTrax': inputData?.isTrax,
163
163
  'featureConfigs.isRevops': inputData?.isRevops,
164
+ 'featureConfigs.isVMS': inputData?.isVMS,
164
165
  'featureConfigs.isControlCenter': inputData?.isControlCenter,
165
166
  'featureConfigs.isFootfallDirectoryAudit': inputData?.isFootfallDirectoryAudit,
166
167
  'featureConfigs.isFootfallDirectoryLimit': inputData?.isFootfallDirectoryLimit,
@@ -169,6 +170,7 @@ export function featureConfigurationUpdate( query, inputData ) {
169
170
  'featureConfigs.isAIManager': inputData?.isAIManager,
170
171
  'featureConfigs.isAIManagerAccessControl': inputData?.isAIManagerAccessControl,
171
172
  'featureConfigs.isCameraEdit': inputData?.isCameraEdit,
173
+ 'featureConfigs.loginSSO': inputData?.loginSSO,
172
174
  },
173
175
  } );
174
176
  }