@matech/thebigpos-sdk 2.36.4 → 2.36.9-rc0

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/.husky/pre-commit CHANGED
@@ -1,3 +1,3 @@
1
- [ -f ./src/index.ts ] && node scripts/apply-json-patch-content-type.js
2
- yarn build
1
+ [ -f ./src/index.ts ] && node scripts/apply-json-patch-content-type.js
2
+ yarn build
3
3
  git add .
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 Mortgage Automation Technologies
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Mortgage Automation Technologies
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,73 +1,73 @@
1
- # The BIG POS Typescript SDK
2
-
3
- ## Installation
4
- Using npm:
5
-
6
- ```bash
7
- $ npm install @matech/thebigpos-sdk
8
- ```
9
-
10
- Using yarn:
11
-
12
- ```bash
13
- $ yarn add @matech/thebigpos-sdk
14
- ```
15
-
16
- ## Quick Start
17
- ```js
18
- import { Api } from "@matech/thebigpos-sdk";
19
-
20
- const securityWorker = (data: any) => {
21
- return { headers: data }
22
- }
23
-
24
- const setBearerSecurityWorker = (accessToken:string) => {
25
- const data = {
26
- Authorization: `Bearer ${accessToken}`
27
- };
28
-
29
- apiClient.setSecurityData(data);
30
- };
31
-
32
- const apiClient = new Api({
33
- baseURL:
34
- process.env.REACT_APP_POS_API_HOST || 'https://api.thebigpos.com',
35
- securityWorker,
36
- })
37
-
38
- apiClient.api.getSiteConfiguration().then((response) => {
39
- console.log(response.data);
40
- });
41
- ```
42
-
43
- ## Generate SDK from Swagger
44
-
45
- To regenerate the SDK from a specific API version, run:
46
-
47
- ```bash
48
- npx swagger-typescript-api generate -p https://api.thebigpos.dev/swagger/{version}/swagger.json -o ./src -n index.ts -r true --axios --enum-names-as-values --generate-union-enums
49
- ```
50
-
51
- Replace `{version}` with the target API version (e.g. `v2.34.0`):
52
-
53
- ```bash
54
- npx swagger-typescript-api generate -p https://api.thebigpos.dev/swagger/v2.34.0/swagger.json -o ./src -n index.ts -r true --axios --enum-names-as-values --generate-union-enums
55
- ```
56
-
57
- ## Publishing
58
-
59
- 1. Update the `version` field in `package.json` before publishing.
60
- 2. Build the project:
61
-
62
- ```bash
63
- yarn build
64
- ```
65
-
66
- 3. Publish to npm:
67
-
68
- ```bash
69
- yarn publish
70
- ```
71
-
72
- ____
73
- © 2024 Mortgage Automation Technologies. All rights reserved
1
+ # The BIG POS Typescript SDK
2
+
3
+ ## Installation
4
+ Using npm:
5
+
6
+ ```bash
7
+ $ npm install @matech/thebigpos-sdk
8
+ ```
9
+
10
+ Using yarn:
11
+
12
+ ```bash
13
+ $ yarn add @matech/thebigpos-sdk
14
+ ```
15
+
16
+ ## Quick Start
17
+ ```js
18
+ import { Api } from "@matech/thebigpos-sdk";
19
+
20
+ const securityWorker = (data: any) => {
21
+ return { headers: data }
22
+ }
23
+
24
+ const setBearerSecurityWorker = (accessToken:string) => {
25
+ const data = {
26
+ Authorization: `Bearer ${accessToken}`
27
+ };
28
+
29
+ apiClient.setSecurityData(data);
30
+ };
31
+
32
+ const apiClient = new Api({
33
+ baseURL:
34
+ process.env.REACT_APP_POS_API_HOST || 'https://api.thebigpos.com',
35
+ securityWorker,
36
+ })
37
+
38
+ apiClient.api.getSiteConfiguration().then((response) => {
39
+ console.log(response.data);
40
+ });
41
+ ```
42
+
43
+ ## Generate SDK from Swagger
44
+
45
+ To regenerate the SDK from a specific API version, run:
46
+
47
+ ```bash
48
+ npx swagger-typescript-api generate -p https://api.thebigpos.dev/swagger/{version}/swagger.json -o ./src -n index.ts -r true --axios --enum-names-as-values --generate-union-enums
49
+ ```
50
+
51
+ Replace `{version}` with the target API version (e.g. `v2.34.0`):
52
+
53
+ ```bash
54
+ npx swagger-typescript-api generate -p https://api.thebigpos.dev/swagger/v2.34.0/swagger.json -o ./src -n index.ts -r true --axios --enum-names-as-values --generate-union-enums
55
+ ```
56
+
57
+ ## Publishing
58
+
59
+ 1. Update the `version` field in `package.json` before publishing.
60
+ 2. Build the project:
61
+
62
+ ```bash
63
+ yarn build
64
+ ```
65
+
66
+ 3. Publish to npm:
67
+
68
+ ```bash
69
+ yarn publish
70
+ ```
71
+
72
+ ____
73
+ © 2024 Mortgage Automation Technologies. All rights reserved
package/dist/index.d.ts CHANGED
@@ -42,10 +42,9 @@ export type LoanAccountAssetType = "Checking" | "Savings" | "MoneyMarket" | "Cer
42
42
  export type LoanAccessScopeType = "User" | "Branch";
43
43
  export type LOSStatus = "Unknown" | "Pending" | "Retrying" | "Successful" | "Failed" | "FailedPermanently" | "Uploaded" | "PendingSync";
44
44
  export type FilterType = "DateGreaterThanOrEqualTo" | "DateGreaterThan" | "DateLessThan" | "DateLessThanOrEqualTo" | "DateEquals" | "DateDoesntEqual" | "DateNonEmpty" | "DateEmpty" | "StringContains" | "StringEquals" | "StringNotEmpty" | "StringNotEquals" | "StringNotContains";
45
- export type Environment = "Development" | "Staging" | "UAT" | "Production";
46
45
  export type EntityType = "Account" | "Corporate" | "Branch" | "LoanOfficer" | "Realtor";
47
46
  export type EncompassLogOutcome = "Success" | "Failure" | "PartialSuccess";
48
- export type EncompassLogOperationType = "FieldUpdate" | "EConsentUpdate" | "DocumentSync" | "ApiError" | "LoanCreation" | "SlotCreation" | "MilestoneUpdate";
47
+ export type EncompassLogOperationType = "FieldUpdate" | "EConsentUpdate" | "DocumentSync" | "MilestoneUpdate" | "DocumentAttachment" | "General" | "FieldReader";
49
48
  export type DraftType = "NewLoan" | "EditLoan";
50
49
  export type ConsentType = "Econsent" | "CreditAuthorization" | "Tcpa";
51
50
  export type BranchType = "Mortgage" | "RealEstate";
@@ -649,19 +648,15 @@ export interface CreateAccountRequest {
649
648
  /** @minLength 1 */
650
649
  domain: string;
651
650
  eConsentBucket?: string | null;
652
- ignoreCoBorrowerRelationship: boolean;
653
651
  user: AdminUser;
654
652
  companyAddress: CompanyAddress;
655
653
  contactInfo: ContactInfo;
656
- theme: Theme;
657
654
  /**
658
655
  * @format int64
659
656
  * @min 0
660
657
  */
661
658
  nlmsid: number;
662
659
  settings: AccountSettingsRequest;
663
- environment: CreateAccountRequestEnvironmentEnum;
664
- losIntegration: LOSIntegration;
665
660
  billingSettings: AccountBillingRequest;
666
661
  }
667
662
  export interface CreateBranchRequest {
@@ -1582,9 +1577,6 @@ export interface Invite {
1582
1577
  }
1583
1578
  /** Array of operations to perform */
1584
1579
  export type JsonPatchDocument = Operation[];
1585
- export interface LOSIntegration {
1586
- instanceID: string;
1587
- }
1588
1580
  export interface LOSSettings {
1589
1581
  retailLoanClosingDateFieldID: string;
1590
1582
  wholesaleLoanClosingDateFieldID: string;
@@ -1737,6 +1729,8 @@ export interface Loan {
1737
1729
  lastLosDocumentsSyncDate?: string | null;
1738
1730
  isLocked: boolean;
1739
1731
  isLockedFromEditing: boolean;
1732
+ /** @format date-time */
1733
+ sensitiveDataPurgedOn?: string | null;
1740
1734
  excludeFromAutoTaskReminders?: boolean | null;
1741
1735
  loanSettings?: LoanSettings | null;
1742
1736
  loanOfficer?: LoanOfficer | null;
@@ -2683,6 +2677,8 @@ export interface LoanDocument {
2683
2677
  losStatus: string;
2684
2678
  contents?: string | null;
2685
2679
  failoverDocumentPath?: string | null;
2680
+ /** @format date-time */
2681
+ sensitiveDataPurgedOn?: string | null;
2686
2682
  }
2687
2683
  export interface LoanDocumentSearch {
2688
2684
  /** @format date-time */
@@ -2701,6 +2697,8 @@ export interface LoanDocumentSearch {
2701
2697
  losStatus: string;
2702
2698
  contents?: string | null;
2703
2699
  failoverDocumentPath?: string | null;
2700
+ /** @format date-time */
2701
+ sensitiveDataPurgedOn?: string | null;
2704
2702
  }
2705
2703
  export interface LoanDocumentSearchCriteria {
2706
2704
  searchText?: string | null;
@@ -4515,14 +4513,6 @@ export interface TestSendNotificationForLoanRequest {
4515
4513
  templateName?: string | null;
4516
4514
  attachments: Attachment[];
4517
4515
  }
4518
- export interface Theme {
4519
- logoURL: string;
4520
- primaryColor: string;
4521
- secondaryColor: string;
4522
- backgroundColor?: string | null;
4523
- textColor?: string | null;
4524
- iconColor?: string | null;
4525
- }
4526
4516
  export interface TimeAtAddress {
4527
4517
  /** @format uuid */
4528
4518
  id?: string | null;
@@ -4678,7 +4668,7 @@ export interface UpdateMeRequest {
4678
4668
  email: string;
4679
4669
  title?: string | null;
4680
4670
  forcePasswordReset: boolean;
4681
- mfaEnabled: boolean;
4671
+ mfaEnabled?: boolean | null;
4682
4672
  notificationSettings: UserNotificationSettingsUpdateRequest;
4683
4673
  /** @format uuid */
4684
4674
  preferredLoanOfficerId?: string | null;
@@ -4712,7 +4702,7 @@ export interface UpdateUserRequest {
4712
4702
  /** @format uuid */
4713
4703
  branchId?: string | null;
4714
4704
  forcePasswordReset: boolean;
4715
- mfaEnabled: boolean;
4705
+ mfaEnabled?: boolean | null;
4716
4706
  /** @format uuid */
4717
4707
  preferredLoanOfficerId?: string | null;
4718
4708
  }
@@ -5158,7 +5148,6 @@ export interface Workflow {
5158
5148
  }
5159
5149
  export type AccountBillingRequestBillingTypeEnum = "ClosedLoan" | "LoanOfficer";
5160
5150
  export type CreateAccessScopeRequestScopeTypeEnum = "User" | "Branch";
5161
- export type CreateAccountRequestEnvironmentEnum = "Development" | "Staging" | "UAT" | "Production";
5162
5151
  export type CreateGroupMemberRequestLoanRoleEnum = "Borrower" | "CoBorrower" | "NonBorrower" | "LoanOfficer" | "LoanProcessor" | "LoanOfficerAssistant" | "SupportingLoanOfficer" | "BuyerAgent" | "SellerAgent" | "TitleInsuranceAgent" | "EscrowAgent" | "SettlementAgent";
5163
5152
  /** @deprecated */
5164
5153
  export type CreateInviteRequestRelationshipEnum = "NotApplicable" | "Spouse" | "NonSpouse";
@@ -5166,7 +5155,7 @@ export type CreateLoanImportRequestImportModeEnum = "All" | "NewOnly" | "UpdateO
5166
5155
  export type CreateUserDraftLoanRoleEnum = "Borrower" | "CoBorrower" | "NonBorrower" | "LoanOfficer" | "LoanProcessor" | "LoanOfficerAssistant" | "SupportingLoanOfficer" | "BuyerAgent" | "SellerAgent" | "TitleInsuranceAgent" | "EscrowAgent" | "SettlementAgent";
5167
5156
  export type DraftTypeEnum = "NewLoan" | "EditLoan";
5168
5157
  export type DraftContentTypeEnum = "NewLoan" | "EditLoan";
5169
- export type EncompassRequestLogOperationTypeEnum = "FieldUpdate" | "EConsentUpdate" | "DocumentSync" | "ApiError" | "LoanCreation" | "SlotCreation" | "MilestoneUpdate";
5158
+ export type EncompassRequestLogOperationTypeEnum = "FieldUpdate" | "EConsentUpdate" | "DocumentSync" | "MilestoneUpdate" | "DocumentAttachment" | "General" | "FieldReader";
5170
5159
  export type EncompassRequestLogOutcomeEnum = "Success" | "Failure" | "PartialSuccess";
5171
5160
  export type FusionReportFilterFilterTypeEnum = "DateGreaterThanOrEqualTo" | "DateGreaterThan" | "DateLessThan" | "DateLessThanOrEqualTo" | "DateEquals" | "DateDoesntEqual" | "DateNonEmpty" | "DateEmpty" | "StringContains" | "StringEquals" | "StringNotEmpty" | "StringNotEquals" | "StringNotContains";
5172
5161
  export type IpAddressAddressFamilyEnum = "Unspecified" | "Unix" | "InterNetwork" | "ImpLink" | "Pup" | "Chaos" | "NS" | "Ipx" | "Iso" | "Osi" | "Ecma" | "DataKit" | "Ccitt" | "Sna" | "DecNet" | "DataLink" | "Lat" | "HyperChannel" | "AppleTalk" | "NetBios" | "VoiceView" | "FireFox" | "Banyan" | "Atm" | "InterNetworkV6" | "Cluster" | "Ieee12844" | "Irda" | "NetworkDesigners" | "Max" | "Packet" | "ControllerAreaNetwork" | "Unknown";
@@ -5239,7 +5228,7 @@ export declare class HttpClient<SecurityDataType = unknown> {
5239
5228
  }
5240
5229
  /**
5241
5230
  * @title The Big POS API
5242
- * @version v2.36.4
5231
+ * @version v2.36.9
5243
5232
  * @termsOfService https://www.thebigpos.com/terms-of-use/
5244
5233
  * @contact Mortgage Automation Technologies <support@thebigpos.com> (https://www.thebigpos.com/terms-of-use/)
5245
5234
  */
@@ -7503,18 +7492,6 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7503
7492
  * @response `200` `Loan` Success
7504
7493
  */
7505
7494
  importLoanFromLos: (loanId: string, params?: RequestParams) => Promise<AxiosResponse<Loan, any, {}>>;
7506
- /**
7507
- * No description
7508
- *
7509
- * @tags LoanSensitiveDataPurge
7510
- * @name PurgeSensitiveLoanData
7511
- * @summary Manually trigger sensitive data purge for a specific loan
7512
- * @request POST:/api/loans/sensitive-data-purge/{loanId}
7513
- * @secure
7514
- * @response `204` `void` No Content
7515
- * @response `404` `ProblemDetails` Not Found
7516
- */
7517
- purgeSensitiveLoanData: (loanId: string, params?: RequestParams) => Promise<AxiosResponse<void, any, {}>>;
7518
7495
  /**
7519
7496
  * No description
7520
7497
  *
package/dist/index.js CHANGED
@@ -104,7 +104,7 @@ export class HttpClient {
104
104
  }
105
105
  /**
106
106
  * @title The Big POS API
107
- * @version v2.36.4
107
+ * @version v2.36.9
108
108
  * @termsOfService https://www.thebigpos.com/terms-of-use/
109
109
  * @contact Mortgage Automation Technologies <support@thebigpos.com> (https://www.thebigpos.com/terms-of-use/)
110
110
  */
@@ -1204,7 +1204,7 @@ export class Api extends HttpClient {
1204
1204
  * @response `200` `string` Success
1205
1205
  * @response `422` `UnprocessableEntity` Client Error
1206
1206
  */
1207
- updateLoanConsentAndCustomFieldsObsolete: (loanId, data, params = {}) => this.request(Object.assign({ path: `/api/los/loan/application/${loanId}`, method: "PATCH", body: data, secure: true, type: ContentType.JsonPatchPatch, format: "json" }, params)),
1207
+ updateLoanConsentAndCustomFieldsObsolete: (loanId, data, params = {}) => this.request(Object.assign({ path: `/api/los/loan/application/${loanId}`, method: "PATCH", body: data, secure: true, type: ContentType.JsonPatch, format: "json" }, params)),
1208
1208
  /**
1209
1209
  * No description
1210
1210
  *
@@ -1254,7 +1254,7 @@ export class Api extends HttpClient {
1254
1254
  * @response `200` `string` Success
1255
1255
  * @response `422` `UnprocessableEntity` Client Error
1256
1256
  */
1257
- updateLoanCustomFields: (loanId, data, params = {}) => this.request(Object.assign({ path: `/api/los/loan/application/${loanId}/custom-fields`, method: "PATCH", body: data, secure: true, type: ContentType.JsonPatchPatch, format: "json" }, params)),
1257
+ updateLoanCustomFields: (loanId, data, params = {}) => this.request(Object.assign({ path: `/api/los/loan/application/${loanId}/custom-fields`, method: "PATCH", body: data, secure: true, type: ContentType.JsonPatch, format: "json" }, params)),
1258
1258
  /**
1259
1259
  * No description
1260
1260
  *
@@ -1267,7 +1267,7 @@ export class Api extends HttpClient {
1267
1267
  * @response `202` `string` Accepted
1268
1268
  * @response `422` `UnprocessableEntity` Client Error
1269
1269
  */
1270
- updateLoanConsent: (loanId, data, params = {}) => this.request(Object.assign({ path: `/api/los/loan/application/${loanId}/consent`, method: "PATCH", body: data, secure: true, type: ContentType.JsonPatchPatch, format: "json" }, params)),
1270
+ updateLoanConsent: (loanId, data, params = {}) => this.request(Object.assign({ path: `/api/los/loan/application/${loanId}/consent`, method: "PATCH", body: data, secure: true, type: ContentType.JsonPatch, format: "json" }, params)),
1271
1271
  /**
1272
1272
  * No description
1273
1273
  *
@@ -1381,7 +1381,7 @@ export class Api extends HttpClient {
1381
1381
  * @secure
1382
1382
  * @response `200` `ListingFile` Success
1383
1383
  */
1384
- updateListingFiles: (listingId, data, params = {}) => this.request(Object.assign({ path: `/api/listings/${listingId}/files`, method: "PATCH", body: data, secure: true, type: ContentType.JsonPatchPatch, format: "json" }, params)),
1384
+ updateListingFiles: (listingId, data, params = {}) => this.request(Object.assign({ path: `/api/listings/${listingId}/files`, method: "PATCH", body: data, secure: true, type: ContentType.JsonPatch, format: "json" }, params)),
1385
1385
  /**
1386
1386
  * No description
1387
1387
  *
@@ -1414,7 +1414,7 @@ export class Api extends HttpClient {
1414
1414
  * @secure
1415
1415
  * @response `200` `(ListingPhoto)[]` Success
1416
1416
  */
1417
- updateListingPhotos: (listingId, data, params = {}) => this.request(Object.assign({ path: `/api/listings/${listingId}/photos`, method: "PATCH", body: data, secure: true, type: ContentType.JsonPatchPatch, format: "json" }, params)),
1417
+ updateListingPhotos: (listingId, data, params = {}) => this.request(Object.assign({ path: `/api/listings/${listingId}/photos`, method: "PATCH", body: data, secure: true, type: ContentType.JsonPatch, format: "json" }, params)),
1418
1418
  /**
1419
1419
  * No description
1420
1420
  *
@@ -2132,18 +2132,6 @@ export class Api extends HttpClient {
2132
2132
  * @response `200` `Loan` Success
2133
2133
  */
2134
2134
  importLoanFromLos: (loanId, params = {}) => this.request(Object.assign({ path: `/api/loans/import-from-los/${loanId}`, method: "POST", secure: true, format: "json" }, params)),
2135
- /**
2136
- * No description
2137
- *
2138
- * @tags LoanSensitiveDataPurge
2139
- * @name PurgeSensitiveLoanData
2140
- * @summary Manually trigger sensitive data purge for a specific loan
2141
- * @request POST:/api/loans/sensitive-data-purge/{loanId}
2142
- * @secure
2143
- * @response `204` `void` No Content
2144
- * @response `404` `ProblemDetails` Not Found
2145
- */
2146
- purgeSensitiveLoanData: (loanId, params = {}) => this.request(Object.assign({ path: `/api/loans/sensitive-data-purge/${loanId}`, method: "POST", secure: true }, params)),
2147
2135
  /**
2148
2136
  * No description
2149
2137
  *
@@ -2155,7 +2143,7 @@ export class Api extends HttpClient {
2155
2143
  * @response `200` `TaskCommentPaginated` Success
2156
2144
  * @response `404` `ProblemDetails` Not Found
2157
2145
  */
2158
- searchLoanTaskComments: (loanId, userLoanTaskId, data, query, params = {}) => this.request(Object.assign({ path: `/api/loans/${loanId}/tasks/${userLoanTaskId}/comments/search`, method: "POST", query: query, body: data, secure: true, type: ContentType.JsonPatchPatch, format: "json" }, params)),
2146
+ searchLoanTaskComments: (loanId, userLoanTaskId, data, query, params = {}) => this.request(Object.assign({ path: `/api/loans/${loanId}/tasks/${userLoanTaskId}/comments/search`, method: "POST", query: query, body: data, secure: true, type: ContentType.JsonPatch, format: "json" }, params)),
2159
2147
  /**
2160
2148
  * No description
2161
2149
  *