@driveflux/api-functions 1.0.61 → 1.0.63

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.
Files changed (47) hide show
  1. package/dist/auth/confirm.js +29 -24
  2. package/dist/auth/emails.js +13 -12
  3. package/dist/auth/formatter.js +5 -5
  4. package/dist/auth/otp.js +50 -66
  5. package/dist/auth/register.js +34 -42
  6. package/dist/auth/tokens.js +55 -58
  7. package/dist/auth/verifications.js +52 -53
  8. package/dist/constants.js +1 -0
  9. package/dist/create-logger.js +2 -1
  10. package/dist/mailjet/calls/manage-contacts-in-list.js +6 -5
  11. package/dist/mailjet/calls/manage-subscription-status.js +5 -4
  12. package/dist/mailjet/calls/request-service.js +6 -7
  13. package/dist/mailjet/refresh-email-preferences.js +12 -11
  14. package/dist/mailjet/set-contact.js +12 -11
  15. package/dist/mailjet/types.js +2 -1
  16. package/dist/mailjet/utils/convert-to-array.js +6 -8
  17. package/dist/mailjet/utils/extract-email-preferences.js +15 -14
  18. package/dist/mailjet/utils/lists.js +8 -7
  19. package/dist/mailjet/utils/update-email-references.js +15 -16
  20. package/dist/notion/client.js +19 -22
  21. package/dist/notion/helpful.js +9 -6
  22. package/dist/notion/schemas/block.js +48 -42
  23. package/dist/notion/schemas/common.js +14 -9
  24. package/dist/notion/schemas/database.js +60 -62
  25. package/dist/notion/schemas/emoji.js +2 -1
  26. package/dist/notion/schemas/file.js +9 -9
  27. package/dist/notion/schemas/kb.js +6 -5
  28. package/dist/notion/schemas/page.js +61 -72
  29. package/dist/notion/schemas/parent.js +5 -4
  30. package/dist/notion/schemas/user.js +19 -18
  31. package/dist/reservation/agree.js +7 -6
  32. package/dist/reservation/checks.js +4 -3
  33. package/dist/reservation/display-vehicle.js +71 -65
  34. package/dist/reservation/ensure-user-billing-address.js +11 -9
  35. package/dist/reservation/fetch-or-create.js +54 -48
  36. package/dist/reservation/invoice.js +78 -70
  37. package/dist/reservation/payer.js +6 -5
  38. package/dist/reservation/payment-intent-sync.js +6 -4
  39. package/dist/reservation/reserve.js +4 -3
  40. package/dist/reservation/types.js +2 -1
  41. package/dist/reservation/vehicle.js +16 -13
  42. package/dist/slack.js +29 -24
  43. package/dist/validation.js +79 -77
  44. package/dist/vehicle/vehicle-pricing/constants.js +19 -22
  45. package/dist/vehicle/vehicle-pricing/index.js +42 -28
  46. package/dist/vehicle/vehicle-pricing/types.js +2 -1
  47. package/package.json +11 -11
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { notionDatabasePropertyCheckboxSchema, notionDatabasePropertyCreatedBySchema, notionDatabasePropertyCreatedTimeSchema, notionDatabasePropertyDateSchema, notionDatabasePropertyFormulaSchema, notionDatabasePropertyLastEditedBySchema, notionDatabasePropertyLastEditedTimeSchema, notionDatabasePropertyMultiSelectSchema, notionDatabasePropertyNumberSchema, notionDatabasePropertyRelationSchema, notionDatabasePropertySelectSchema, notionDatabasePropertyStatusSchema, notionDatabasePropertyTitleSchema, notionDatabasePropertyUniqueIdSchema, notionDatabaseSchema } from './database.js';
3
- import { notionPagePropertyCheckboxSchema, notionPagePropertyCreatedBySchema, notionPagePropertyCreatedTimeSchema, notionPagePropertyDateSchema, notionPagePropertyFormulaSchema, notionPagePropertyLastEditedBySchema, notionPagePropertyLastEditedTimeSchema, notionPagePropertyMultiSelectSchema, notionPagePropertyNumberSchema, notionPagePropertyRelationSchema, notionPagePropertyRichTextSchema, notionPagePropertySelectSchema, notionPagePropertyStatusSchema, notionPagePropertyTitleSchema, notionPagePropertyUniqueIdSchema, notionPageSchema, notionPagesSchema } from './page.js';
2
+ import { notionDatabasePropertyCheckboxSchema, notionDatabasePropertyCreatedBySchema, notionDatabasePropertyCreatedTimeSchema, notionDatabasePropertyDateSchema, notionDatabasePropertyFormulaSchema, notionDatabasePropertyLastEditedBySchema, notionDatabasePropertyLastEditedTimeSchema, notionDatabasePropertyMultiSelectSchema, notionDatabasePropertyNumberSchema, notionDatabasePropertyRelationSchema, notionDatabasePropertySelectSchema, notionDatabasePropertyStatusSchema, notionDatabasePropertyTitleSchema, notionDatabasePropertyUniqueIdSchema, notionDatabaseSchema, } from './database.js';
3
+ import { notionPagePropertyCheckboxSchema, notionPagePropertyCreatedBySchema, notionPagePropertyCreatedTimeSchema, notionPagePropertyDateSchema, notionPagePropertyFormulaSchema, notionPagePropertyLastEditedBySchema, notionPagePropertyLastEditedTimeSchema, notionPagePropertyMultiSelectSchema, notionPagePropertyNumberSchema, notionPagePropertyRelationSchema, notionPagePropertyRichTextSchema, notionPagePropertySelectSchema, notionPagePropertyStatusSchema, notionPagePropertyTitleSchema, notionPagePropertyUniqueIdSchema, notionPageSchema, notionPagesSchema, } from './page.js';
4
4
  export const knowledgeBaseRetrieveDatabaseSchema = notionDatabaseSchema(z.object({
5
5
  Title: notionDatabasePropertyTitleSchema,
6
6
  Status: notionDatabasePropertyStatusSchema,
@@ -22,7 +22,7 @@ export const knowledgeBaseRetrieveDatabaseSchema = notionDatabaseSchema(z.object
22
22
  'Section Slug': notionDatabasePropertyFormulaSchema,
23
23
  'Topic Slug': notionDatabasePropertyFormulaSchema,
24
24
  Helpful: notionDatabasePropertyNumberSchema,
25
- Unhelpful: notionDatabasePropertyNumberSchema
25
+ Unhelpful: notionDatabasePropertyNumberSchema,
26
26
  }));
27
27
  export const knowledgeBaseRetrievePageSchema = notionPageSchema(z.object({
28
28
  Title: notionPagePropertyTitleSchema,
@@ -46,7 +46,7 @@ export const knowledgeBaseRetrievePageSchema = notionPageSchema(z.object({
46
46
  'Section Slug': notionPagePropertyFormulaSchema,
47
47
  'Topic Slug': notionPagePropertyFormulaSchema,
48
48
  Helpful: notionPagePropertyNumberSchema,
49
- Unhelpful: notionPagePropertyNumberSchema
49
+ Unhelpful: notionPagePropertyNumberSchema,
50
50
  }));
51
51
  export const knowledgeBaseQueryDatabaseSchema = notionPagesSchema(z.object({
52
52
  Title: notionPagePropertyTitleSchema,
@@ -69,5 +69,6 @@ export const knowledgeBaseQueryDatabaseSchema = notionPagesSchema(z.object({
69
69
  'Section Slug': notionPagePropertyFormulaSchema,
70
70
  'Topic Slug': notionPagePropertyFormulaSchema,
71
71
  Helpful: notionPagePropertyNumberSchema,
72
- Unhelpful: notionPagePropertyNumberSchema
72
+ Unhelpful: notionPagePropertyNumberSchema,
73
73
  }));
74
+ //# sourceMappingURL=kb.js.map
@@ -1,83 +1,78 @@
1
1
  import { z } from 'zod';
2
2
  import { notionRichTextSchema } from './block.js';
3
- import { commonPropertyValues, notionCommonColorEnum, notionDateFormat, notionDateSchema, notionTimeFormat } from './common.js';
3
+ import { commonPropertyValues, notionCommonColorEnum, notionDateFormat, notionDateSchema, notionTimeFormat, } from './common.js';
4
4
  import { notionEmojiSchema } from './emoji.js';
5
5
  import { notionFileSchema } from './file.js';
6
6
  import { notionDatabaseParentSchema } from './parent.js';
7
7
  import { notionPartialUserSchema, notionUserSchema } from './user.js';
8
8
  export const notionPagePropertyCheckboxSchema = z.object({
9
9
  ...commonPropertyValues('checkbox'),
10
- checkbox: z.boolean()
10
+ checkbox: z.boolean(),
11
11
  });
12
12
  export const notionPagePropertyCreatedBySchema = z.object({
13
13
  ...commonPropertyValues('created_by'),
14
- created_by: notionUserSchema
14
+ created_by: notionUserSchema,
15
15
  });
16
16
  export const notionPagePropertyCreatedTimeSchema = z.object({
17
17
  ...commonPropertyValues('created_time'),
18
- created_time: notionTimeFormat
18
+ created_time: notionTimeFormat,
19
19
  });
20
20
  export const notionPagePropertyDateSchema = z.object({
21
21
  ...commonPropertyValues('date'),
22
- date: notionDateSchema.nullable()
22
+ date: notionDateSchema.nullable(),
23
23
  });
24
24
  export const notionPagePropertyEmailSchema = z.object({
25
25
  ...commonPropertyValues('email'),
26
- email: z.string()
26
+ email: z.string(),
27
27
  });
28
28
  export const notionPagePropertyFilesSchema = z.object({
29
29
  ...commonPropertyValues('files'),
30
- files: z.array(notionFileSchema)
30
+ files: z.array(notionFileSchema),
31
31
  });
32
32
  export const notionPagePropertyFormulaSchema = z.object({
33
33
  ...commonPropertyValues('formula'),
34
34
  formula: z.object({
35
- type: z.enum([
36
- 'boolean',
37
- 'date',
38
- 'number',
39
- 'string'
40
- ]),
35
+ type: z.enum(['boolean', 'date', 'number', 'string']),
41
36
  boolean: z.boolean().optional(),
42
37
  date: notionDateFormat.optional(),
43
38
  number: z.number().optional(),
44
- string: z.string().optional()
45
- })
39
+ string: z.string().optional(),
40
+ }),
46
41
  });
47
42
  export const notionPagePropertyLastEditedBySchema = z.object({
48
43
  ...commonPropertyValues('last_edited_by'),
49
- last_edited_by: notionUserSchema
44
+ last_edited_by: notionUserSchema,
50
45
  });
51
46
  export const notionPagePropertyLastEditedTimeSchema = z.object({
52
47
  ...commonPropertyValues('last_edited_time'),
53
- last_edited_time: notionTimeFormat
48
+ last_edited_time: notionTimeFormat,
54
49
  });
55
50
  export const notionPagePropertyMultiSelectSchema = z.object({
56
51
  ...commonPropertyValues('multi_select'),
57
52
  multi_select: z.array(z.object({
58
53
  id: z.string(),
59
54
  name: z.string(),
60
- color: notionCommonColorEnum
61
- }))
55
+ color: notionCommonColorEnum,
56
+ })),
62
57
  });
63
58
  export const notionPagePropertyNumberSchema = z.object({
64
59
  ...commonPropertyValues('number'),
65
- number: z.number().nullable()
60
+ number: z.number().nullable(),
66
61
  });
67
62
  export const notionPagePropertyPeopleSchema = z.object({
68
63
  ...commonPropertyValues('people'),
69
- people: z.array(notionUserSchema)
64
+ people: z.array(notionUserSchema),
70
65
  });
71
66
  export const notionPagePropertyPhoneNumberSchema = z.object({
72
67
  ...commonPropertyValues('phone_number'),
73
- phone_number: z.string()
68
+ phone_number: z.string(),
74
69
  });
75
70
  export const notionPagePropertyRelationSchema = z.object({
76
71
  ...commonPropertyValues('relation'),
77
72
  relation: z.array(z.object({
78
- id: z.string()
73
+ id: z.string(),
79
74
  })),
80
- has_more: z.boolean()
75
+ has_more: z.boolean(),
81
76
  });
82
77
  export const notionPagePropertyRollupSchema = z.object({
83
78
  ...commonPropertyValues('rollup'),
@@ -111,82 +106,76 @@ export const notionPagePropertyRollupSchema = z.object({
111
106
  'show_unique',
112
107
  'sum',
113
108
  'unchecked',
114
- 'unique'
109
+ 'unique',
115
110
  ]),
116
- type: z.enum([
117
- 'array',
118
- 'date',
119
- 'incomplete',
120
- 'number',
121
- 'unsupported'
122
- ])
123
- })
111
+ type: z.enum(['array', 'date', 'incomplete', 'number', 'unsupported']),
112
+ }),
124
113
  });
125
114
  export const notionPagePropertyRichTextSchema = z.object({
126
115
  ...commonPropertyValues('rich_text'),
127
- rich_text: z.array(notionRichTextSchema)
116
+ rich_text: z.array(notionRichTextSchema),
128
117
  });
129
118
  export const notionPagePropertySelectSchema = z.object({
130
119
  ...commonPropertyValues('select'),
131
- select: z.object({
120
+ select: z
121
+ .object({
132
122
  id: z.string(),
133
123
  name: z.string(),
134
- color: notionCommonColorEnum
135
- }).nullable()
124
+ color: notionCommonColorEnum,
125
+ })
126
+ .nullable(),
136
127
  });
137
128
  export const notionPagePropertyStatusSchema = z.object({
138
129
  ...commonPropertyValues('status'),
139
130
  status: z.object({
140
131
  id: z.string(),
141
132
  name: z.string(),
142
- color: notionCommonColorEnum
143
- })
133
+ color: notionCommonColorEnum,
134
+ }),
144
135
  });
145
136
  export const notionPagePropertyTitleSchema = z.object({
146
137
  ...commonPropertyValues('title'),
147
- title: z.array(notionRichTextSchema)
138
+ title: z.array(notionRichTextSchema),
148
139
  });
149
140
  export const notionPagePropertyUrlSchema = z.object({
150
141
  ...commonPropertyValues('url'),
151
- url: z.string().url().nullable()
142
+ url: z.string().url().nullable(),
152
143
  });
153
144
  export const notionPagePropertyUniqueIdSchema = z.object({
154
145
  ...commonPropertyValues('unique_id'),
155
146
  unique_id: z.object({
156
147
  number: z.number(),
157
- prefix: z.string().nullable().optional()
158
- })
148
+ prefix: z.string().nullable().optional(),
149
+ }),
159
150
  });
160
151
  export const notionPagePropertyVerificationSchema = z.object({
161
152
  ...commonPropertyValues('verification'),
162
153
  verification: z.object({
163
- state: z.enum([
164
- 'verified',
165
- 'unverified'
166
- ]),
154
+ state: z.enum(['verified', 'unverified']),
167
155
  verified_by: notionUserSchema.nullable(),
168
- date: notionDateSchema
169
- })
170
- });
171
- export const notionPageSchema = (properties)=>z.object({
172
- object: z.literal('page'),
173
- id: z.string(),
174
- created_time: notionTimeFormat,
175
- created_by: notionPartialUserSchema,
176
- last_edited_time: notionTimeFormat,
177
- last_edited_by: notionPartialUserSchema,
178
- archived: z.boolean(),
179
- icon: notionFileSchema.or(notionEmojiSchema).nullable(),
180
- properties,
181
- parent: notionDatabaseParentSchema,
182
- url: z.string().url(),
183
- public_url: z.string().nullable()
184
- });
185
- export const notionPagesSchema = (properties)=>z.object({
186
- has_more: z.boolean(),
187
- next_cursor: z.string().nullable(),
188
- object: z.literal('list'),
189
- page_or_database: z.object({}),
190
- type: z.literal('page_or_database'),
191
- results: z.array(notionPageSchema(properties))
192
- });
156
+ date: notionDateSchema,
157
+ }),
158
+ });
159
+ export const notionPageSchema = (properties) => z.object({
160
+ object: z.literal('page'),
161
+ id: z.string(),
162
+ created_time: notionTimeFormat,
163
+ created_by: notionPartialUserSchema,
164
+ last_edited_time: notionTimeFormat,
165
+ last_edited_by: notionPartialUserSchema,
166
+ archived: z.boolean(),
167
+ icon: notionFileSchema.or(notionEmojiSchema).nullable(),
168
+ properties,
169
+ parent: notionDatabaseParentSchema,
170
+ url: z.string().url(),
171
+ public_url: z.string().nullable(),
172
+ });
173
+ export const notionPagesSchema = (properties) => z.object({
174
+ has_more: z.boolean(),
175
+ next_cursor: z.string().nullable(),
176
+ object: z.literal('list'),
177
+ page_or_database: z.object({}),
178
+ type: z.literal('page_or_database'),
179
+ results: z.array(notionPageSchema(properties)),
180
+ });
181
+ //# sourceMappingURL=page.js.map
@@ -1,17 +1,18 @@
1
1
  import { z } from 'zod';
2
2
  export const notionDatabaseParentSchema = z.object({
3
3
  type: z.literal('database_id'),
4
- database_id: z.string()
4
+ database_id: z.string(),
5
5
  });
6
6
  export const notionPageParentSchema = z.object({
7
7
  type: z.literal('page_id'),
8
- page_id: z.string()
8
+ page_id: z.string(),
9
9
  });
10
10
  export const notionWorkspaceParentSchema = z.object({
11
11
  type: z.literal('workspace'),
12
- workspace: z.literal(true)
12
+ workspace: z.literal(true),
13
13
  });
14
14
  export const notionBlockParentSchema = z.object({
15
15
  type: z.literal('block_id'),
16
- block_id: z.string()
16
+ block_id: z.string(),
17
17
  });
18
+ //# sourceMappingURL=parent.js.map
@@ -1,30 +1,31 @@
1
1
  import { z } from 'zod';
2
2
  export const notionPartialUserSchema = z.object({
3
3
  object: z.literal('user'),
4
- user: z.string().optional()
4
+ user: z.string().optional(),
5
5
  });
6
6
  export const notionUserSchema = z.object({
7
7
  object: z.literal('user'),
8
8
  id: z.string(),
9
- type: z.enum([
10
- 'person',
11
- 'bot'
12
- ]).optional(),
9
+ type: z.enum(['person', 'bot']).optional(),
13
10
  name: z.string().optional(),
14
11
  avatar_url: z.string().nullable().optional(),
15
12
  // type person
16
- person: z.object({
17
- email: z.string().email()
18
- }).optional(),
13
+ person: z
14
+ .object({
15
+ email: z.string().email(),
16
+ })
17
+ .optional(),
19
18
  // type bot
20
- bot: z.object({
21
- owner: z.object({
22
- type: z.enum([
23
- 'workspace',
24
- 'user'
25
- ]),
26
- workspace: z.boolean()
27
- }).optional(),
28
- workspace_name: z.string().optional()
29
- }).optional()
19
+ bot: z
20
+ .object({
21
+ owner: z
22
+ .object({
23
+ type: z.enum(['workspace', 'user']),
24
+ workspace: z.boolean(),
25
+ })
26
+ .optional(),
27
+ workspace_name: z.string().optional(),
28
+ })
29
+ .optional(),
30
30
  });
31
+ //# sourceMappingURL=user.js.map
@@ -1,10 +1,10 @@
1
1
  import { prisma } from '@driveflux/db';
2
2
  import { generateId } from '@driveflux/db/id';
3
- export const handleAgreeToTerms = async ({ agreedToTerms, subscribingUser, ipAddress })=>{
3
+ export const handleAgreeToTerms = async ({ agreedToTerms, subscribingUser, ipAddress, }) => {
4
4
  if (agreedToTerms && !subscribingUser.consented) {
5
5
  subscribingUser = await prisma.user.update({
6
6
  where: {
7
- id: subscribingUser.id
7
+ id: subscribingUser.id,
8
8
  },
9
9
  data: {
10
10
  consented: true,
@@ -13,11 +13,12 @@ export const handleAgreeToTerms = async ({ agreedToTerms, subscribingUser, ipAdd
13
13
  id: generateId('UserConsent'),
14
14
  ipAddress,
15
15
  consentType: 'terms',
16
- email: subscribingUser.email
17
- }
18
- }
19
- }
16
+ email: subscribingUser.email,
17
+ },
18
+ },
19
+ },
20
20
  });
21
21
  }
22
22
  return subscribingUser;
23
23
  };
24
+ //# sourceMappingURL=agree.js.map
@@ -1,12 +1,12 @@
1
1
  import { buildOrDefineAbility } from '@driveflux/auth/authorization';
2
- import { makeProblem, PROBLEM_CONDITION_FAILED, PROBLEM_RESOURCE_BUSY } from '@driveflux/problem';
2
+ import { makeProblem, PROBLEM_CONDITION_FAILED, PROBLEM_RESOURCE_BUSY, } from '@driveflux/problem';
3
3
  import { Err, Ok } from '@driveflux/result';
4
- export const getUserAbility = async ({ requestUser })=>{
4
+ export const getUserAbility = async ({ requestUser, }) => {
5
5
  // Check if the user can reserve
6
6
  const requestUserAbility = await buildOrDefineAbility(requestUser);
7
7
  return requestUserAbility;
8
8
  };
9
- export const checkIfVehicleIsAvailableForReservation = async (vehicle, plan, allowDelisted)=>{
9
+ export const checkIfVehicleIsAvailableForReservation = async (vehicle, plan, allowDelisted) => {
10
10
  if (!vehicle.pricing) {
11
11
  return new Err(makeProblem(PROBLEM_RESOURCE_BUSY, 'This vehicle is not available for reservation'));
12
12
  }
@@ -22,3 +22,4 @@ export const checkIfVehicleIsAvailableForReservation = async (vehicle, plan, all
22
22
  }
23
23
  return new Ok(vehicle);
24
24
  };
25
+ //# sourceMappingURL=checks.js.map
@@ -1,75 +1,73 @@
1
1
  import { config } from '@driveflux/config/backend';
2
- import { prisma } from '@driveflux/db';
2
+ import { prisma, } from '@driveflux/db';
3
3
  import { generateId } from '@driveflux/db/id';
4
4
  import { createPricingController } from '@driveflux/db/models/vehicle';
5
- import { getFluxExcessMileage, getFluxPiceMatrix, getHostExcessMileage, getHostsMatrix, getRecommendedMotorcycleDeposit, getStartFeeMatrix } from '../vehicle/vehicle-pricing/index.js';
6
- export const fetchDisplayVehicle = async (displayVehicle)=>{
7
- return typeof displayVehicle === 'string' ? await prisma.displayVehicle.findFirst({
8
- where: {
9
- id: displayVehicle
10
- }
11
- }) : displayVehicle;
5
+ import { getFluxExcessMileage, getFluxPiceMatrix, getHostExcessMileage, getHostsMatrix, getRecommendedMotorcycleDeposit, getStartFeeMatrix, } from '../vehicle/vehicle-pricing/index.js';
6
+ export const fetchDisplayVehicle = async (displayVehicle) => {
7
+ return typeof displayVehicle === 'string'
8
+ ? await prisma.displayVehicle.findFirst({ where: { id: displayVehicle } })
9
+ : displayVehicle;
12
10
  };
13
- export const createVehicleFromDisplayVehicle = async (displayVehicle, selectedColor)=>{
11
+ export const createVehicleFromDisplayVehicle = async (displayVehicle, selectedColor) => {
14
12
  const dv = await fetchDisplayVehicle(displayVehicle);
15
- if (!dv || typeof dv !== 'object') return;
16
- if (!dv.details) return;
17
- const mainImage = dv.images.main.find((m)=>m.variant === selectedColor)?.url;
13
+ if (!dv || typeof dv !== 'object')
14
+ return;
15
+ if (!dv.details)
16
+ return;
17
+ const mainImage = dv.images.main.find((m) => m.variant === selectedColor)?.url;
18
18
  const vehicleData = {
19
19
  id: generateId('Vehicle'),
20
20
  ...transformBasicVehicleData(dv),
21
21
  images: [
22
- ...mainImage ? [
23
- transfromSingleImage(mainImage)
24
- ] : [],
25
- ...transformImages(dv.images)
22
+ ...(mainImage ? [transfromSingleImage(mainImage)] : []),
23
+ ...transformImages(dv.images),
26
24
  ],
27
25
  ...transformBasePrices(dv.pricing),
28
26
  pricing: transformPriceMatrix(dv.type, dv.pricing),
29
27
  details: transformDetails(dv.details, selectedColor),
30
28
  host: {
31
29
  connect: {
32
- id: dv.defaultHostId
33
- }
30
+ id: dv.defaultHostId,
31
+ },
34
32
  },
35
33
  displayVehicle: {
36
34
  connect: {
37
- id: dv.id
38
- }
39
- }
35
+ id: dv.id,
36
+ },
37
+ },
40
38
  };
41
39
  return await prisma.vehicle.create({
42
40
  data: vehicleData,
43
41
  include: {
44
- host: true
45
- }
42
+ host: true,
43
+ },
46
44
  });
47
45
  };
48
- export const transfromVehicleDisplayToVehicle = async (displayVehicle, selectedColor)=>{
46
+ export const transfromVehicleDisplayToVehicle = async (displayVehicle, selectedColor) => {
49
47
  const dv = await fetchDisplayVehicle(displayVehicle);
50
- if (!dv || typeof dv !== 'object') return;
51
- if (!dv.details) return;
52
- const mainImage = dv.images.main.find((m)=>m.variant === selectedColor)?.url;
48
+ if (!dv || typeof dv !== 'object')
49
+ return;
50
+ if (!dv.details)
51
+ return;
52
+ const mainImage = dv.images.main.find((m) => m.variant === selectedColor)?.url;
53
53
  return {
54
54
  id: dv.id,
55
55
  ...transformBasicVehicleData(dv),
56
56
  images: [
57
- ...mainImage ? [
58
- transfromSingleImage(mainImage)
59
- ] : [],
60
- ...transformImages(dv.images)
57
+ ...(mainImage ? [transfromSingleImage(mainImage)] : []),
58
+ ...transformImages(dv.images),
61
59
  ],
62
60
  ...transformBasePrices(dv.pricing),
63
61
  pricing: transformPriceMatrix(dv.type, dv.pricing),
64
62
  details: transformDetails(dv.details, selectedColor),
65
63
  host: {
66
64
  address: {
67
- state: 'Kuala Lumpur'
68
- }
69
- }
65
+ state: 'Kuala Lumpur',
66
+ },
67
+ },
70
68
  };
71
69
  };
72
- export const transformBasicVehicleData = (dv)=>{
70
+ export const transformBasicVehicleData = (dv) => {
73
71
  return {
74
72
  registrationNumber: null,
75
73
  featured: false,
@@ -87,17 +85,17 @@ export const transformBasicVehicleData = (dv)=>{
87
85
  type: dv.type,
88
86
  niceName: `${dv.make} ${dv.vehicleModel} ${dv.variant} ${dv.year}`,
89
87
  niceNameShort: `${dv.make} ${dv.vehicleModel}`,
90
- appliedCoupon: dv.appliedCoupon
88
+ appliedCoupon: dv.appliedCoupon,
91
89
  };
92
90
  };
93
- export const transformImages = (images)=>{
91
+ export const transformImages = (images) => {
94
92
  return [
95
93
  transfromSingleImage(images.exterior[0].url, 'exterior'),
96
94
  transfromSingleImage(images.interior[0].url, 'interior'),
97
- ...images.gallery.map((i)=>transfromSingleImage(i.url))
95
+ ...images.gallery.map((i) => transfromSingleImage(i.url)),
98
96
  ];
99
97
  };
100
- const transfromSingleImage = (imageUrl, inspectionType)=>{
98
+ const transfromSingleImage = (imageUrl, inspectionType) => {
101
99
  return {
102
100
  default: imageUrl,
103
101
  blurBase64: null,
@@ -108,20 +106,20 @@ const transfromSingleImage = (imageUrl, inspectionType)=>{
108
106
  description: null,
109
107
  inspection: !!inspectionType,
110
108
  inspectionType: inspectionType || null,
111
- notActualPhoto: true
109
+ notActualPhoto: true,
112
110
  };
113
111
  };
114
- const transformBasePrices = (pricing)=>{
112
+ const transformBasePrices = (pricing) => {
115
113
  return {
116
114
  basePrice: pricing.matrix.plan36.lite,
117
115
  basePricePlan1: pricing.matrix.plan1.lite,
118
116
  basePricePlan12: pricing.matrix.plan12.lite,
119
117
  basePricePlan24: pricing.matrix.plan24.lite,
120
118
  basePricePlan36: pricing.matrix.plan36.lite,
121
- basePricePlan60: pricing.matrix.plan60.lite
119
+ basePricePlan60: pricing.matrix.plan60.lite,
122
120
  };
123
121
  };
124
- const transformPriceMatrix = (vehicleType, pricing)=>{
122
+ const transformPriceMatrix = (vehicleType, pricing) => {
125
123
  const baseline = pricing?.matrix.plan36.lite;
126
124
  const ultraTier = 'tier1';
127
125
  const fluxPriceCoefficient = 25;
@@ -134,14 +132,16 @@ const transformPriceMatrix = (vehicleType, pricing)=>{
134
132
  const { availablePlans, availableMileagePackages } = getNonZeroKeys(priceMatrix);
135
133
  const pricingController = createPricingController({
136
134
  coefficient: fluxPriceCoefficient,
137
- vehicleType
135
+ vehicleType,
138
136
  });
139
137
  const startFeeMatrix = excludeServiceFeesFrom(getStartFeeMatrix(pricingController, baseline, flatPricing));
140
138
  const hostMatrix = excludeServiceFeesFrom(getHostsMatrix(pricingController, baseline, ultraTier, flatPricing));
141
139
  const hostExcessMileage = getHostExcessMileage(pricingController, baseline);
142
140
  const fluxPriceMatrix = excludeServiceFeesFrom(getFluxPiceMatrix(pricingController, vehicleType, baseline, hostMatrix, ultraTier, flatPricing));
143
141
  const fluxExcessMileage = getFluxExcessMileage(pricingController, baseline);
144
- const recommendedDeposit = pricing.refundableDeposit || vehicleType === 'motorcycle' ? getRecommendedMotorcycleDeposit(baseline) : null;
142
+ const recommendedDeposit = pricing.refundableDeposit || vehicleType === 'motorcycle'
143
+ ? getRecommendedMotorcycleDeposit(baseline)
144
+ : null;
145
145
  return {
146
146
  tmv,
147
147
  gfv,
@@ -160,31 +160,31 @@ const transformPriceMatrix = (vehicleType, pricing)=>{
160
160
  excessMileage: fluxExcessMileage,
161
161
  originalExcessMileage: fluxExcessMileage,
162
162
  matrixComments: null,
163
- add: null
163
+ add: null,
164
164
  },
165
165
  hostTake: {
166
166
  matrix: hostMatrix,
167
167
  originalMatrix: hostMatrix,
168
168
  excessMileage: hostExcessMileage,
169
169
  originalExcessMileage: hostExcessMileage,
170
- matrixComments: null
170
+ matrixComments: null,
171
171
  },
172
172
  startFee: {
173
173
  matrix: startFeeMatrix,
174
174
  originalMatrix: startFeeMatrix,
175
- matrixComments: null
176
- }
175
+ matrixComments: null,
176
+ },
177
177
  };
178
178
  };
179
- const getNonZeroKeys = (matrix)=>{
179
+ const getNonZeroKeys = (matrix) => {
180
180
  const planKeys = new Set();
181
181
  const mileageKeys = new Set();
182
- for (const [plan, mileageMap] of Object.entries(matrix)){
182
+ for (const [plan, mileageMap] of Object.entries(matrix)) {
183
183
  const entries = Object.entries(mileageMap ?? {});
184
- const hasNonZero = entries.some(([_, value])=>(value ?? 0) > 0);
184
+ const hasNonZero = entries.some(([_, value]) => (value ?? 0) > 0);
185
185
  if (hasNonZero) {
186
186
  planKeys.add(plan);
187
- for (const [mileage, value] of entries){
187
+ for (const [mileage, value] of entries) {
188
188
  if ((value ?? 0) > 0) {
189
189
  mileageKeys.add(mileage);
190
190
  }
@@ -193,20 +193,20 @@ const getNonZeroKeys = (matrix)=>{
193
193
  }
194
194
  return {
195
195
  availablePlans: Array.from(planKeys),
196
- availableMileagePackages: Array.from(mileageKeys)
196
+ availableMileagePackages: Array.from(mileageKeys),
197
197
  };
198
198
  };
199
- const _getInspection = ()=>{
199
+ const _getInspection = () => {
200
200
  return {
201
201
  exterior: 5,
202
202
  interior: 5,
203
203
  engine: 5,
204
204
  frame: 5,
205
205
  total: 5,
206
- comment: 'COMMENT HERE'
206
+ comment: 'COMMENT HERE',
207
207
  };
208
208
  };
209
- const transformDetails = (details, selectColor)=>{
209
+ const transformDetails = (details, selectColor) => {
210
210
  const color = selectColor || details.colors[0].name || '';
211
211
  return {
212
212
  numberOfSeats: details.numberOfSeats,
@@ -214,25 +214,31 @@ const transformDetails = (details, selectColor)=>{
214
214
  bodyType: details.bodyType,
215
215
  transmission: details.transmission,
216
216
  engineType: details.fuelType,
217
- engineCapacity: details.fuelType === 'electric' ? details.batteryCapacity : details.engineCapacity,
217
+ engineCapacity: details.fuelType === 'electric'
218
+ ? details.batteryCapacity
219
+ : details.engineCapacity,
218
220
  drivetrain: details.drivetrain,
219
221
  accelerationTo100km: details.accelerationTo100km,
220
222
  fuelConsumptionLitersPer100Km: details.fuelConsumptionLitersPer100Km,
221
223
  color,
222
224
  features: details.features,
223
- condition: 'new'
225
+ condition: 'new',
224
226
  };
225
227
  };
226
- const excludeServiceFeesFrom = (originalMatrix)=>{
228
+ const excludeServiceFeesFrom = (originalMatrix) => {
227
229
  const matrix = {};
228
- for (const [planKey, planValue] of Object.entries(originalMatrix)){
229
- if (!planValue) continue;
230
- if (!matrix[planKey]) matrix[planKey] = {};
231
- for (const [mileageKey, price] of Object.entries(planValue)){
230
+ for (const [planKey, planValue] of Object.entries(originalMatrix)) {
231
+ if (!planValue)
232
+ continue;
233
+ if (!matrix[planKey])
234
+ matrix[planKey] = {};
235
+ for (const [mileageKey, price] of Object.entries(planValue)) {
232
236
  if (typeof price === 'number') {
233
- matrix[planKey][mileageKey] = price / (1 + config.taxRate);
237
+ matrix[planKey][mileageKey] =
238
+ price / (1 + config.taxRate);
234
239
  }
235
240
  }
236
241
  }
237
242
  return matrix;
238
243
  };
244
+ //# sourceMappingURL=display-vehicle.js.map