@alba-cars/common-modules 1.3.4 → 1.3.5

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.
@@ -33,25 +33,28 @@ const onTokenRefreshed = (token) => {
33
33
  refreshSubscribers = [];
34
34
  };
35
35
  const refreshTokens = async () => {
36
+ var _a, _b, _c, _d;
36
37
  try {
37
38
  const tokens = (0, exports.getTokens)();
38
39
  if (!(tokens === null || tokens === void 0 ? void 0 : tokens.refreshToken)) {
39
40
  throw new Error("No refresh token available");
40
41
  }
41
- const response = await apiRequest("/auth/refresh", {
42
+ const response = await apiRequest("/auth/refresh-token", {
42
43
  method: enums_1.HttpMethods.POST,
43
44
  body: JSON.stringify({ refreshToken: tokens.refreshToken }),
44
45
  skipAuth: true, // Skip auth to avoid infinite loop
45
46
  });
47
+ if (!((_a = response.data) === null || _a === void 0 ? void 0 : _a.accessToken)) {
48
+ throw new Error("No access token available");
49
+ }
46
50
  (0, exports.setTokens)({
47
- accessToken: response.accessToken,
48
- refreshToken: response.refreshToken,
51
+ accessToken: (_b = response.data) === null || _b === void 0 ? void 0 : _b.accessToken,
52
+ refreshToken: (_c = response.data) === null || _c === void 0 ? void 0 : _c.refreshToken,
49
53
  });
50
- return response.accessToken;
54
+ return (_d = response.data) === null || _d === void 0 ? void 0 : _d.accessToken;
51
55
  }
52
56
  catch (error) {
53
57
  (0, exports.removeTokens)();
54
- window.location.href = "/login";
55
58
  throw error;
56
59
  }
57
60
  };
@@ -68,7 +71,7 @@ const buildUrl = (endpoint, query) => {
68
71
  return url;
69
72
  };
70
73
  async function apiRequest(endpoint, options = {}) {
71
- var _a, _b, _c;
74
+ var _a, _b, _c, _d;
72
75
  const tokens = (0, exports.getTokens)();
73
76
  const headers = {
74
77
  Accept: "application/json",
@@ -151,6 +154,12 @@ async function apiRequest(endpoint, options = {}) {
151
154
  }
152
155
  throw error;
153
156
  }
157
+ if ((_d = responseData === null || responseData === void 0 ? void 0 : responseData.data) === null || _d === void 0 ? void 0 : _d.token) {
158
+ (0, exports.setTokens)({
159
+ accessToken: responseData.data.token,
160
+ refreshToken: responseData.data.refreshToken,
161
+ });
162
+ }
154
163
  return responseData;
155
164
  }
156
165
  catch (error) {
@@ -41,6 +41,8 @@ export declare class Vehicle extends BaseModel {
41
41
  finance?: VehicleFinance;
42
42
  orders?: VehicleOrder[];
43
43
  draft?: VehicleDraft;
44
+ static fromPlain(plain: Record<string, unknown>): Vehicle;
45
+ toPlain(): Record<string, unknown>;
44
46
  }
45
47
  export declare class VehicleDraft {
46
48
  page: number;
@@ -1,8 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VehicleDraft = exports.Vehicle = void 0;
4
+ const class_transformer_1 = require("class-transformer");
4
5
  const Base_1 = require("./Base");
5
6
  class Vehicle extends Base_1.BaseModel {
7
+ static fromPlain(plain) {
8
+ return (0, class_transformer_1.plainToClass)(Vehicle, plain);
9
+ }
10
+ toPlain() {
11
+ return (0, class_transformer_1.instanceToPlain)(this);
12
+ }
6
13
  }
7
14
  exports.Vehicle = Vehicle;
8
15
  class VehicleDraft {
@@ -51,6 +51,8 @@ class SalesAgentCreateDTO {
51
51
  return {
52
52
  status: this.status,
53
53
  designation: this.designation,
54
+ languages: this.languageIds,
55
+ agentIntro: this.agentIntro,
54
56
  };
55
57
  }
56
58
  }
@@ -1,5 +1,5 @@
1
1
  import { TestDriveRequestFilter, TestDriveRequestSelectFields } from "../utilities";
2
- import { BaseCreateDTO, BaseUpdateDTO } from "../../../vehicle/data/dto/BaseDTO";
2
+ import { BaseUpdateDTO } from "../../../vehicle/data/dto/BaseDTO";
3
3
  import { DynamicVehicleDTO } from "../../../vehicle/data/dto/VehicleDTO";
4
4
  import { LeadThrough, TestDriveRequestStatus } from "../enums";
5
5
  import { VehicleSelectFields } from "../../../vehicle/data/utilities";
@@ -17,7 +17,7 @@ export declare class TestDriveRequestGetDTO {
17
17
  static fromPlain(plain: Record<string, unknown>): TestDriveRequestGetDTO;
18
18
  toPlain(): Record<string, any>;
19
19
  }
20
- export declare class TestDriveRequestCreateDTO extends BaseCreateDTO {
20
+ export declare class TestDriveRequestCreateDTO {
21
21
  vehicle: DynamicVehicleDTO;
22
22
  testerName: string;
23
23
  testerMobile: string;
@@ -27,6 +27,7 @@ export declare class TestDriveRequestCreateDTO extends BaseCreateDTO {
27
27
  status?: TestDriveRequestStatus;
28
28
  leadThrough?: LeadThrough;
29
29
  comments?: string;
30
+ createdById?: string;
30
31
  validate(): string[];
31
32
  constructor(data?: Partial<TestDriveRequestCreateDTO>);
32
33
  static fromPlain(plain: Record<string, unknown>): TestDriveRequestCreateDTO;
@@ -19,11 +19,10 @@ const enums_1 = require("../enums");
19
19
  class TestDriveRequestGetDTOOptions {
20
20
  }
21
21
  exports.TestDriveRequestGetDTOOptions = TestDriveRequestGetDTOOptions;
22
- ;
23
22
  class TestDriveRequestGetDTO {
24
23
  validate() {
25
24
  const errors = (0, class_validator_1.validateSync)(this);
26
- return errors.map(error => { var _a; return Object.values((_a = error.constraints) !== null && _a !== void 0 ? _a : {}); }).flat();
25
+ return errors.map((error) => { var _a; return Object.values((_a = error.constraints) !== null && _a !== void 0 ? _a : {}); }).flat();
27
26
  }
28
27
  static fromPlain(plain) {
29
28
  return (0, class_transformer_1.plainToClass)(TestDriveRequestGetDTO, plain);
@@ -33,13 +32,12 @@ class TestDriveRequestGetDTO {
33
32
  }
34
33
  }
35
34
  exports.TestDriveRequestGetDTO = TestDriveRequestGetDTO;
36
- class TestDriveRequestCreateDTO extends BaseDTO_1.BaseCreateDTO {
35
+ class TestDriveRequestCreateDTO {
37
36
  validate() {
38
37
  const errors = (0, class_validator_1.validateSync)(this);
39
38
  return errors.map((error) => { var _a; return Object.values((_a = error.constraints) !== null && _a !== void 0 ? _a : {}); }).flat();
40
39
  }
41
40
  constructor(data) {
42
- super();
43
41
  Object.assign(this, data);
44
42
  if (!this.status)
45
43
  this.status = enums_1.TestDriveRequestStatus.NOT_CONTACTED;
@@ -109,6 +107,11 @@ __decorate([
109
107
  (0, class_validator_1.IsString)(),
110
108
  __metadata("design:type", String)
111
109
  ], TestDriveRequestCreateDTO.prototype, "comments", void 0);
110
+ __decorate([
111
+ (0, class_validator_1.IsOptional)(),
112
+ (0, class_validator_1.IsString)(),
113
+ __metadata("design:type", String)
114
+ ], TestDriveRequestCreateDTO.prototype, "createdById", void 0);
112
115
  exports.TestDriveRequestCreateDTO = TestDriveRequestCreateDTO;
113
116
  class TestDriveRequestUpdateDTO extends BaseDTO_1.BaseUpdateDTO {
114
117
  validate() {
@@ -199,7 +199,11 @@ export declare class VehicleFilter extends BaseFilter {
199
199
  emissions?: string | string[];
200
200
  year?: NumberRange;
201
201
  price?: NumberRange;
202
+ emi?: NumberRange;
202
203
  status?: string | string[];
204
+ includeReserved?: boolean;
205
+ includeSold?: boolean;
206
+ includeDraft?: boolean;
203
207
  features?: string | string[];
204
208
  search?: string;
205
209
  validate(): string[];
@@ -641,11 +641,32 @@ __decorate([
641
641
  (0, class_transformer_1.Type)(() => global_1.NumberRange),
642
642
  __metadata("design:type", global_1.NumberRange)
643
643
  ], VehicleFilter.prototype, "price", void 0);
644
+ __decorate([
645
+ (0, class_validator_1.IsOptional)(),
646
+ (0, class_validator_1.ValidateNested)(),
647
+ (0, class_transformer_1.Type)(() => global_1.NumberRange),
648
+ __metadata("design:type", global_1.NumberRange)
649
+ ], VehicleFilter.prototype, "emi", void 0);
644
650
  __decorate([
645
651
  (0, class_validator_1.IsOptional)(),
646
652
  (0, class_validator_1.IsString)({ each: true }),
647
653
  __metadata("design:type", Object)
648
654
  ], VehicleFilter.prototype, "status", void 0);
655
+ __decorate([
656
+ (0, class_validator_1.IsOptional)(),
657
+ (0, class_validator_1.IsBoolean)(),
658
+ __metadata("design:type", Boolean)
659
+ ], VehicleFilter.prototype, "includeReserved", void 0);
660
+ __decorate([
661
+ (0, class_validator_1.IsOptional)(),
662
+ (0, class_validator_1.IsBoolean)(),
663
+ __metadata("design:type", Boolean)
664
+ ], VehicleFilter.prototype, "includeSold", void 0);
665
+ __decorate([
666
+ (0, class_validator_1.IsOptional)(),
667
+ (0, class_validator_1.IsBoolean)(),
668
+ __metadata("design:type", Boolean)
669
+ ], VehicleFilter.prototype, "includeDraft", void 0);
649
670
  __decorate([
650
671
  (0, class_validator_1.IsOptional)(),
651
672
  (0, class_validator_1.IsString)({ each: true }),
@@ -2,3 +2,10 @@ export declare enum VehicleMediaType {
2
2
  IMAGE = "image",
3
3
  VIDEO = "video"
4
4
  }
5
+ export declare enum VehicleStatusType {
6
+ RESERVED = "Reserved",
7
+ DRAFT = "Draft",
8
+ PUBLISHED = "Published",
9
+ SELF_RESERVED = "Self-Reserved",
10
+ SOLD = "Sold"
11
+ }
@@ -1,8 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VehicleMediaType = void 0;
3
+ exports.VehicleStatusType = exports.VehicleMediaType = void 0;
4
4
  var VehicleMediaType;
5
5
  (function (VehicleMediaType) {
6
6
  VehicleMediaType["IMAGE"] = "image";
7
7
  VehicleMediaType["VIDEO"] = "video";
8
8
  })(VehicleMediaType = exports.VehicleMediaType || (exports.VehicleMediaType = {}));
9
+ var VehicleStatusType;
10
+ (function (VehicleStatusType) {
11
+ VehicleStatusType["RESERVED"] = "Reserved";
12
+ VehicleStatusType["DRAFT"] = "Draft";
13
+ VehicleStatusType["PUBLISHED"] = "Published";
14
+ VehicleStatusType["SELF_RESERVED"] = "Self-Reserved";
15
+ VehicleStatusType["SOLD"] = "Sold";
16
+ })(VehicleStatusType = exports.VehicleStatusType || (exports.VehicleStatusType = {}));
@@ -179,6 +179,10 @@ export declare class VehicleFilter extends BaseFilter {
179
179
  emissions?: string | string[];
180
180
  year?: NumberRange;
181
181
  price?: NumberRange;
182
+ includeReserved?: boolean;
183
+ includeSelfReserved?: boolean;
184
+ includeSold?: boolean;
185
+ includeDraft?: boolean;
182
186
  status?: string | string[];
183
187
  features?: string | string[];
184
188
  search?: string;
@@ -575,6 +575,26 @@ __decorate([
575
575
  (0, class_transformer_1.Type)(() => utilities_1.NumberRange),
576
576
  __metadata("design:type", utilities_1.NumberRange)
577
577
  ], VehicleFilter.prototype, "price", void 0);
578
+ __decorate([
579
+ (0, class_validator_1.IsOptional)(),
580
+ (0, class_validator_1.IsBoolean)(),
581
+ __metadata("design:type", Boolean)
582
+ ], VehicleFilter.prototype, "includeReserved", void 0);
583
+ __decorate([
584
+ (0, class_validator_1.IsOptional)(),
585
+ (0, class_validator_1.IsBoolean)(),
586
+ __metadata("design:type", Boolean)
587
+ ], VehicleFilter.prototype, "includeSelfReserved", void 0);
588
+ __decorate([
589
+ (0, class_validator_1.IsOptional)(),
590
+ (0, class_validator_1.IsBoolean)(),
591
+ __metadata("design:type", Boolean)
592
+ ], VehicleFilter.prototype, "includeSold", void 0);
593
+ __decorate([
594
+ (0, class_validator_1.IsOptional)(),
595
+ (0, class_validator_1.IsBoolean)(),
596
+ __metadata("design:type", Boolean)
597
+ ], VehicleFilter.prototype, "includeDraft", void 0);
578
598
  __decorate([
579
599
  (0, class_validator_1.IsOptional)(),
580
600
  (0, class_validator_1.IsString)({ each: true }),
@@ -50,3 +50,4 @@ export declare class TypedOptions<T extends Record<string, any>> extends Paginat
50
50
  static fromPlain(plain: Record<string, unknown>): TypedOptions<Record<string, any>>;
51
51
  static toPlain(entity: any): Record<string, unknown>;
52
52
  }
53
+ export declare function formatImageUrl(src: string | null | undefined): string | null;
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.TypedOptions = exports.TypedFilter = exports.BaseFilter = exports.NumberRange = exports.DateFilter = exports.PaginationOptions = exports.IsDateOrConvertible = exports.createFieldPath = void 0;
12
+ exports.formatImageUrl = exports.TypedOptions = exports.TypedFilter = exports.BaseFilter = exports.NumberRange = exports.DateFilter = exports.PaginationOptions = exports.IsDateOrConvertible = exports.createFieldPath = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
14
  const class_transformer_1 = require("class-transformer");
15
15
  const createFieldPath = (path) => path;
@@ -23,7 +23,9 @@ function IsDateOrConvertible(validationOptions) {
23
23
  options: validationOptions,
24
24
  validator: {
25
25
  validate(value, _args) {
26
- return value instanceof Date || typeof value === "string" || typeof value === "number";
26
+ return (value instanceof Date ||
27
+ typeof value === "string" ||
28
+ typeof value === "number");
27
29
  },
28
30
  defaultMessage(args) {
29
31
  return `${args.property} must be a Date, string, or number`;
@@ -138,3 +140,34 @@ class TypedOptions extends PaginationOptions {
138
140
  }
139
141
  }
140
142
  exports.TypedOptions = TypedOptions;
143
+ function isValidUrl(url) {
144
+ try {
145
+ new URL(url);
146
+ return true;
147
+ }
148
+ catch {
149
+ return false;
150
+ }
151
+ }
152
+ function formatImageUrl(src) {
153
+ if (!src) {
154
+ return null;
155
+ }
156
+ // Return as-is if it's already an absolute URL
157
+ if (isValidUrl(src)) {
158
+ return src;
159
+ }
160
+ // Return as-is if it's a data URL
161
+ if (src.startsWith("data:")) {
162
+ return src;
163
+ }
164
+ if (src.startsWith("/assets")) {
165
+ return src;
166
+ }
167
+ const domain = process.env.NEXT_PUBLIC_S3_URL;
168
+ // Ensure src has a leading slash
169
+ const normalizedSrc = src.startsWith("/") ? src : `/${src}`;
170
+ // Combine domain with normalized path
171
+ return `${domain}${normalizedSrc}`;
172
+ }
173
+ exports.formatImageUrl = formatImageUrl;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.3.4",
6
+ "version": "1.3.5",
7
7
  "description": "A package containing DTOs, validation classes and common modules and interfaces for Alba Cars",
8
8
  "main": "dist/index.js",
9
9
  "types": "dist/index.d.ts",