@driveflux/api-functions 1.0.147 → 1.0.148
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/dist/auth/confirm.js +24 -24
- package/dist/auth/consent.js +27 -22
- package/dist/auth/emails.js +13 -12
- package/dist/auth/formatter.js +5 -5
- package/dist/auth/otp.js +50 -66
- package/dist/auth/register.js +35 -48
- package/dist/auth/tokens.js +55 -58
- package/dist/auth/verifications.js +52 -53
- package/dist/constants.js +1 -0
- package/dist/create-logger.js +2 -1
- package/dist/mailjet/calls/manage-contacts-in-list.js +6 -5
- package/dist/mailjet/calls/manage-subscription-status.js +5 -4
- package/dist/mailjet/calls/request-service.js +6 -7
- package/dist/mailjet/refresh-email-preferences.js +12 -11
- package/dist/mailjet/set-contact.js +12 -11
- package/dist/mailjet/types.js +2 -1
- package/dist/mailjet/utils/convert-to-array.js +6 -8
- package/dist/mailjet/utils/extract-email-preferences.js +15 -14
- package/dist/mailjet/utils/lists.js +8 -7
- package/dist/mailjet/utils/update-email-references.js +15 -16
- package/dist/notion/client.js +19 -22
- package/dist/notion/helpful.js +9 -6
- package/dist/notion/schemas/block.js +48 -42
- package/dist/notion/schemas/common.js +14 -9
- package/dist/notion/schemas/database.js +60 -62
- package/dist/notion/schemas/emoji.js +2 -1
- package/dist/notion/schemas/file.js +9 -9
- package/dist/notion/schemas/kb.js +6 -5
- package/dist/notion/schemas/page.js +61 -72
- package/dist/notion/schemas/parent.js +5 -4
- package/dist/notion/schemas/user.js +19 -18
- package/dist/reservation/agree.js +3 -2
- package/dist/reservation/checks.js +4 -3
- package/dist/reservation/display-vehicle.js +83 -73
- package/dist/reservation/ensure-user-billing-address.js +11 -9
- package/dist/reservation/fetch-or-create.js +56 -49
- package/dist/reservation/invoice.js +88 -77
- package/dist/reservation/payer.js +6 -5
- package/dist/reservation/payment-intent-sync.js +6 -4
- package/dist/reservation/reserve.js +4 -3
- package/dist/reservation/types.js +2 -1
- package/dist/reservation/vehicle.js +16 -13
- package/dist/slack.js +29 -24
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +85 -81
- package/dist/validation.js.map +1 -1
- package/dist/vehicle/vehicle-pricing/constants.js +19 -22
- package/dist/vehicle/vehicle-pricing/index.js +42 -28
- package/dist/vehicle/vehicle-pricing/types.js +2 -1
- package/package.json +11 -11
package/dist/validation.js
CHANGED
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
import { makeProblem } from '@driveflux/problem';
|
|
2
2
|
import { Err } from '@driveflux/result';
|
|
3
|
-
import { z } from 'zod';
|
|
4
|
-
export const makeValidationErrorResult = (zodError)=>{
|
|
5
|
-
const validation = zodError.flatten((i)=>({
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
import { z, } from 'zod';
|
|
4
|
+
export const makeValidationErrorResult = (zodError) => {
|
|
5
|
+
const validation = zodError.flatten((i) => ({
|
|
6
|
+
message: i.message,
|
|
7
|
+
code: i.code,
|
|
8
|
+
path: i.path,
|
|
9
|
+
}));
|
|
10
10
|
return new Err(makeProblem({
|
|
11
11
|
object: 'validation-issues',
|
|
12
|
-
...validation
|
|
12
|
+
...validation,
|
|
13
13
|
}));
|
|
14
14
|
};
|
|
15
|
-
export const getIdOrObjectValidation = (object, extendObjectValidation)=>z.union([
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
15
|
+
export const getIdOrObjectValidation = (object, extendObjectValidation) => z.union([
|
|
16
|
+
z.string(),
|
|
17
|
+
z
|
|
18
|
+
.object({ object: z.literal(object), ...extendObjectValidation })
|
|
19
|
+
.passthrough()
|
|
20
|
+
.catchall(z.any()),
|
|
21
|
+
], {
|
|
22
|
+
error: () => {
|
|
23
|
+
return {
|
|
24
|
+
message: `Invalid details. Please provide an id as a string or an object of type ${object}`,
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
28
|
export const nonEmptyStringValidator = z.string().min(1);
|
|
29
|
-
export const metadataValidation = z
|
|
29
|
+
export const metadataValidation = z
|
|
30
|
+
.object({})
|
|
31
|
+
.catchall(z.union([
|
|
30
32
|
z.string(),
|
|
31
33
|
z.number(),
|
|
32
34
|
z.boolean(),
|
|
@@ -34,33 +36,36 @@ export const metadataValidation = z.object({}).catchall(z.union([
|
|
|
34
36
|
z.array(z.number()),
|
|
35
37
|
z.array(z.boolean()),
|
|
36
38
|
z.null(),
|
|
37
|
-
z.undefined()
|
|
39
|
+
z.undefined(),
|
|
38
40
|
]));
|
|
39
41
|
export const addressValidation = z.object({
|
|
40
42
|
name: z.string().optional().nullable(),
|
|
41
|
-
coordinates: z
|
|
43
|
+
coordinates: z
|
|
44
|
+
.object({
|
|
42
45
|
lat: z.number().min(-90).max(90),
|
|
43
|
-
lng: z.number().min(-180).max(180)
|
|
44
|
-
})
|
|
46
|
+
lng: z.number().min(-180).max(180),
|
|
47
|
+
})
|
|
48
|
+
.nullable()
|
|
49
|
+
.optional(),
|
|
45
50
|
street1: nonEmptyStringValidator,
|
|
46
51
|
street2: z.string().nullable().optional(),
|
|
47
52
|
city: nonEmptyStringValidator,
|
|
48
53
|
state: nonEmptyStringValidator,
|
|
49
54
|
postalCode: z.string().min(3).max(11),
|
|
50
|
-
country: nonEmptyStringValidator
|
|
55
|
+
country: nonEmptyStringValidator,
|
|
56
|
+
});
|
|
57
|
+
export const getIsoDatetimeToDate = (dateValidation) => z
|
|
58
|
+
.codec(z.string(), dateValidation ?? z.date(), {
|
|
59
|
+
decode: (isoString) => new Date(isoString),
|
|
60
|
+
encode: (date) => date.toISOString(),
|
|
61
|
+
})
|
|
62
|
+
.refine((d) => {
|
|
63
|
+
const date = new Date(d);
|
|
64
|
+
return !Number.isNaN(date.getTime());
|
|
65
|
+
}, {
|
|
66
|
+
message: 'Invalid date',
|
|
67
|
+
path: ['date'],
|
|
51
68
|
});
|
|
52
|
-
export const getIsoDatetimeToDate = (dateValidation)=>z.codec(z.string(), dateValidation ?? z.date(), {
|
|
53
|
-
decode: (isoString)=>new Date(isoString),
|
|
54
|
-
encode: (date)=>date.toISOString()
|
|
55
|
-
}).refine((d)=>{
|
|
56
|
-
const date = new Date(d);
|
|
57
|
-
return !Number.isNaN(date.getTime());
|
|
58
|
-
}, {
|
|
59
|
-
message: 'Invalid date',
|
|
60
|
-
path: [
|
|
61
|
-
'date'
|
|
62
|
-
]
|
|
63
|
-
});
|
|
64
69
|
export const dateValidation = getIsoDatetimeToDate();
|
|
65
70
|
export const enhancedImageValidation = z.object({
|
|
66
71
|
default: z.string(),
|
|
@@ -69,71 +74,70 @@ export const enhancedImageValidation = z.object({
|
|
|
69
74
|
small: z.string().optional(),
|
|
70
75
|
medium: z.string().optional(),
|
|
71
76
|
large: z.string().optional(),
|
|
72
|
-
description: z.string().optional()
|
|
77
|
+
description: z.string().optional(),
|
|
73
78
|
});
|
|
74
|
-
export const getObjectValidation = (o)=>z.enum([
|
|
75
|
-
o
|
|
76
|
-
]).optional();
|
|
79
|
+
export const getObjectValidation = (o) => z.enum([o]).optional();
|
|
77
80
|
export const contactValidation = z.object({
|
|
78
81
|
id: z.string().optional(),
|
|
79
82
|
firstName: z.string(),
|
|
80
83
|
lastName: z.string(),
|
|
81
84
|
jobTitle: z.string().optional(),
|
|
82
|
-
email: z
|
|
85
|
+
email: z
|
|
86
|
+
.string()
|
|
87
|
+
.email()
|
|
88
|
+
.optional()
|
|
89
|
+
.transform((email) => email?.toLowerCase().trim()),
|
|
83
90
|
phoneNumber: z.string().optional(),
|
|
84
|
-
remarks: z.string().default('')
|
|
91
|
+
remarks: z.string().default(''),
|
|
85
92
|
});
|
|
86
93
|
export const documentFileValidation = z.object({
|
|
87
94
|
id: z.string().optional(),
|
|
88
95
|
name: z.string(),
|
|
89
96
|
description: z.string().nullable().optional(),
|
|
90
97
|
url: z.string(),
|
|
91
|
-
fileType: z.preprocess((f)=>typeof f === 'string' ? f.toLowerCase() : f, z.enum([
|
|
92
|
-
'jpg',
|
|
93
|
-
'jpeg',
|
|
94
|
-
'png',
|
|
95
|
-
'pdf',
|
|
96
|
-
'image'
|
|
97
|
-
]).optional()),
|
|
98
|
+
fileType: z.preprocess((f) => (typeof f === 'string' ? f.toLowerCase() : f), z.enum(['jpg', 'jpeg', 'png', 'pdf', 'image']).optional()),
|
|
98
99
|
mimeType: z.string().optional(),
|
|
99
100
|
uploaded: z.boolean().default(true),
|
|
100
101
|
createdAt: dateValidation.nullable().optional(),
|
|
101
102
|
updatedAt: dateValidation.nullable().optional(),
|
|
102
|
-
metadata: metadataValidation.nullable().optional()
|
|
103
|
+
metadata: metadataValidation.nullable().optional(),
|
|
103
104
|
});
|
|
104
105
|
export const queryBooleanValidator = z.stringbool({
|
|
105
|
-
truthy: [
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
'0',
|
|
112
|
-
'false',
|
|
113
|
-
'no'
|
|
114
|
-
]
|
|
106
|
+
truthy: ['1', 'true', 'yes'],
|
|
107
|
+
falsy: ['0', 'false', 'no'],
|
|
108
|
+
});
|
|
109
|
+
export const getStringToNumberValidator = (numberValidation) => z.codec(z.string().regex(z.regexes.number), numberValidation ?? z.number(), {
|
|
110
|
+
decode: (str) => Number.parseFloat(str),
|
|
111
|
+
encode: (num) => num.toString(),
|
|
115
112
|
});
|
|
116
|
-
export const getStringToNumberValidator = (numberValidation)=>z.codec(z.string().regex(z.regexes.number), numberValidation ?? z.number(), {
|
|
117
|
-
decode: (str)=>Number.parseFloat(str),
|
|
118
|
-
encode: (num)=>num.toString()
|
|
119
|
-
});
|
|
120
113
|
export const queryNumberValidator = getStringToNumberValidator();
|
|
121
|
-
export const queryStringArrayValidator = z
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
114
|
+
export const queryStringArrayValidator = z
|
|
115
|
+
.codec(z.string(), z.array(z.string()), {
|
|
116
|
+
encode: (value) => value.join(','),
|
|
117
|
+
decode: (value) => value.split(','),
|
|
118
|
+
})
|
|
119
|
+
.or(z.array(z.string()));
|
|
125
120
|
export function queryEnumArrayValidator(enumOrValidation) {
|
|
126
121
|
// Handle ZodEnum case
|
|
127
|
-
if (enumOrValidation &&
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
122
|
+
if (enumOrValidation &&
|
|
123
|
+
typeof enumOrValidation === 'object' &&
|
|
124
|
+
'_zod' in enumOrValidation) {
|
|
125
|
+
return z
|
|
126
|
+
.codec(z.string(), z.array(enumOrValidation), {
|
|
127
|
+
encode: (value) => value.join(','),
|
|
128
|
+
decode: (value) => value.split(','),
|
|
129
|
+
})
|
|
130
|
+
.or(z.array(enumOrValidation));
|
|
132
131
|
}
|
|
133
132
|
// Handle array or enum-like object case
|
|
134
|
-
const enumSchema = Array.isArray(enumOrValidation)
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
133
|
+
const enumSchema = Array.isArray(enumOrValidation)
|
|
134
|
+
? z.enum(enumOrValidation)
|
|
135
|
+
: z.enum(Object.values(enumOrValidation));
|
|
136
|
+
return z
|
|
137
|
+
.codec(z.string(), z.array(enumSchema), {
|
|
138
|
+
encode: (value) => value.join(','),
|
|
139
|
+
decode: (value) => value.split(','),
|
|
140
|
+
})
|
|
141
|
+
.or(z.array(enumSchema));
|
|
139
142
|
}
|
|
143
|
+
//# sourceMappingURL=validation.js.map
|
package/dist/validation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,18 @@
|
|
|
1
|
-
const DEFAUALT_MILEAGE_MATRIX = {
|
|
2
|
-
lite: 0,
|
|
3
|
-
standard: 0,
|
|
4
|
-
plus: 0,
|
|
5
|
-
unlimited: 0
|
|
6
|
-
};
|
|
1
|
+
const DEFAUALT_MILEAGE_MATRIX = { lite: 0, standard: 0, plus: 0, unlimited: 0 };
|
|
7
2
|
export const DEFAULT_MATRIX = {
|
|
8
3
|
plan1: DEFAUALT_MILEAGE_MATRIX,
|
|
9
4
|
plan12: DEFAUALT_MILEAGE_MATRIX,
|
|
10
5
|
plan24: DEFAUALT_MILEAGE_MATRIX,
|
|
11
6
|
plan36: DEFAUALT_MILEAGE_MATRIX,
|
|
12
7
|
plan60: DEFAUALT_MILEAGE_MATRIX,
|
|
13
|
-
planWeekly: DEFAUALT_MILEAGE_MATRIX
|
|
8
|
+
planWeekly: DEFAUALT_MILEAGE_MATRIX,
|
|
14
9
|
};
|
|
15
10
|
export const FLUX_MIN_TAKE = 200;
|
|
16
11
|
const EMPTY_MILEAGE_PACKAGES = {
|
|
17
12
|
lite: 0,
|
|
18
13
|
standard: 0,
|
|
19
14
|
plus: 0,
|
|
20
|
-
unlimited: 0
|
|
15
|
+
unlimited: 0,
|
|
21
16
|
};
|
|
22
17
|
export const EMPTY_FLUX_PRICING_MATRIX_CONTROLLER = {
|
|
23
18
|
plan60: 0,
|
|
@@ -27,7 +22,7 @@ export const EMPTY_FLUX_PRICING_MATRIX_CONTROLLER = {
|
|
|
27
22
|
plan1: 0,
|
|
28
23
|
planWeekly: 0,
|
|
29
24
|
add: EMPTY_MILEAGE_PACKAGES,
|
|
30
|
-
excessMileage: 0
|
|
25
|
+
excessMileage: 0,
|
|
31
26
|
};
|
|
32
27
|
export const EMPTY_FLUX_START_FEE_MATRIX_CONTROLLER = {
|
|
33
28
|
plan60: EMPTY_MILEAGE_PACKAGES,
|
|
@@ -35,7 +30,7 @@ export const EMPTY_FLUX_START_FEE_MATRIX_CONTROLLER = {
|
|
|
35
30
|
plan24: EMPTY_MILEAGE_PACKAGES,
|
|
36
31
|
plan12: EMPTY_MILEAGE_PACKAGES,
|
|
37
32
|
plan1: EMPTY_MILEAGE_PACKAGES,
|
|
38
|
-
planWeekly: EMPTY_MILEAGE_PACKAGES
|
|
33
|
+
planWeekly: EMPTY_MILEAGE_PACKAGES,
|
|
39
34
|
};
|
|
40
35
|
export const EMPTY_ULTRA_TIERS = {
|
|
41
36
|
tier1: 0,
|
|
@@ -52,7 +47,7 @@ export const EMPTY_ULTRA_TIERS = {
|
|
|
52
47
|
tier12: 0,
|
|
53
48
|
tier13: 0,
|
|
54
49
|
tier14: 0,
|
|
55
|
-
tier15: 0
|
|
50
|
+
tier15: 0,
|
|
56
51
|
};
|
|
57
52
|
export const EMPTY_MATRIX = {
|
|
58
53
|
plan60: EMPTY_MILEAGE_PACKAGES,
|
|
@@ -60,49 +55,50 @@ export const EMPTY_MATRIX = {
|
|
|
60
55
|
plan24: EMPTY_MILEAGE_PACKAGES,
|
|
61
56
|
plan12: EMPTY_MILEAGE_PACKAGES,
|
|
62
57
|
plan1: EMPTY_MILEAGE_PACKAGES,
|
|
63
|
-
planWeekly: EMPTY_MILEAGE_PACKAGES
|
|
58
|
+
planWeekly: EMPTY_MILEAGE_PACKAGES,
|
|
64
59
|
};
|
|
65
60
|
/**
|
|
66
61
|
* Matrix representing the dealership's take in percentages
|
|
67
62
|
*
|
|
68
63
|
* @see https://docs.google.com/spreadsheets/d/1lYYMdQgnzG53lCGf_dKJY9pEue5suJuo3O3-zegIOT0/edit#gid=819271234
|
|
69
|
-
*/
|
|
64
|
+
*/
|
|
65
|
+
export const HOST_MATRIX_COEFFICIENTS = {
|
|
70
66
|
plan60: {
|
|
71
67
|
lite: 0.8,
|
|
72
68
|
standard: 0.9,
|
|
73
69
|
plus: 1,
|
|
74
|
-
unlimited: 1.25
|
|
70
|
+
unlimited: 1.25,
|
|
75
71
|
},
|
|
76
72
|
plan36: {
|
|
77
73
|
lite: 1,
|
|
78
74
|
standard: 1.1,
|
|
79
75
|
plus: 1.2,
|
|
80
|
-
unlimited: 1.45
|
|
76
|
+
unlimited: 1.45,
|
|
81
77
|
},
|
|
82
78
|
plan24: {
|
|
83
79
|
lite: 1.1,
|
|
84
80
|
standard: 1.2,
|
|
85
81
|
plus: 1.3,
|
|
86
|
-
unlimited: 1.55
|
|
82
|
+
unlimited: 1.55,
|
|
87
83
|
},
|
|
88
84
|
plan12: {
|
|
89
85
|
lite: 1.2,
|
|
90
86
|
standard: 1.3,
|
|
91
87
|
plus: 1.4,
|
|
92
|
-
unlimited: 1.65
|
|
88
|
+
unlimited: 1.65,
|
|
93
89
|
},
|
|
94
90
|
plan1: {
|
|
95
91
|
lite: 0,
|
|
96
92
|
standard: 0,
|
|
97
93
|
plus: 0,
|
|
98
|
-
unlimited: 0
|
|
94
|
+
unlimited: 0,
|
|
99
95
|
},
|
|
100
96
|
planWeekly: {
|
|
101
97
|
lite: 0,
|
|
102
98
|
standard: 0,
|
|
103
99
|
plus: 0,
|
|
104
|
-
unlimited: 0
|
|
105
|
-
}
|
|
100
|
+
unlimited: 0,
|
|
101
|
+
},
|
|
106
102
|
};
|
|
107
103
|
export const ULTRA_HOST_TIERS_PRICING = {
|
|
108
104
|
tier1: 800,
|
|
@@ -119,7 +115,7 @@ export const ULTRA_HOST_TIERS_PRICING = {
|
|
|
119
115
|
tier12: 8500,
|
|
120
116
|
tier13: 10500,
|
|
121
117
|
tier14: 12800,
|
|
122
|
-
tier15: 15000
|
|
118
|
+
tier15: 15000,
|
|
123
119
|
};
|
|
124
120
|
export const ULTRA_FLUX_TIERS_PRICING = {
|
|
125
121
|
tier1: 999,
|
|
@@ -136,10 +132,11 @@ export const ULTRA_FLUX_TIERS_PRICING = {
|
|
|
136
132
|
tier12: 9999,
|
|
137
133
|
tier13: 12599,
|
|
138
134
|
tier14: 14999,
|
|
139
|
-
tier15: 17999
|
|
135
|
+
tier15: 17999,
|
|
140
136
|
};
|
|
141
137
|
export const HOST_EXCESS_MILEAGE_COEFFICIENT = 0.00048;
|
|
142
138
|
export const MAX_HOST_EXCESS_MILEAGE = 4;
|
|
143
139
|
export const MIN_HOST_EXCESS_MILEAGE = 0.52;
|
|
144
140
|
export const MAX_FLUX_EXCESS_MILEAGE = 5;
|
|
145
141
|
export const MIN_FLUX_EXCESS_MILEAGE = 0.65;
|
|
142
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -5,17 +5,18 @@ import cloneDeep from 'lodash/cloneDeep.js';
|
|
|
5
5
|
import { EMPTY_MATRIX } from './constants.js';
|
|
6
6
|
/**
|
|
7
7
|
* This is a last moment feature the CEO asked for and was not properly designed
|
|
8
|
-
*/
|
|
8
|
+
*/
|
|
9
|
+
export const getRecommendedMotorcycleDeposit = (baseline) => {
|
|
9
10
|
return Math.max(Math.min(baseline * 5, 1500), 1000);
|
|
10
11
|
};
|
|
11
|
-
export const getHostsMatrix = (pricingData, baseline, tier, flatPricing)=>{
|
|
12
|
+
export const getHostsMatrix = (pricingData, baseline, tier, flatPricing) => {
|
|
12
13
|
// Let's not mutate percentages
|
|
13
14
|
const newMatrix = cloneDeep(pricingData.hostEarnings.matrixCoefficients);
|
|
14
15
|
const baseCoefficients = cloneDeep(newMatrix.plan36);
|
|
15
16
|
const plans = Object.keys(newMatrix);
|
|
16
|
-
for (const plan of plans){
|
|
17
|
+
for (const plan of plans) {
|
|
17
18
|
const mileagePackages = Object.keys(newMatrix[plan]);
|
|
18
|
-
for (const mileagePackage of mileagePackages){
|
|
19
|
+
for (const mileagePackage of mileagePackages) {
|
|
19
20
|
if (plan === 'plan1') {
|
|
20
21
|
if (tier === 'tierCustom') {
|
|
21
22
|
newMatrix[plan][mileagePackage] = 0;
|
|
@@ -24,23 +25,26 @@ export const getHostsMatrix = (pricingData, baseline, tier, flatPricing)=>{
|
|
|
24
25
|
newMatrix[plan][mileagePackage] = Number(pricingData.hostEarnings.ultraTiers[tier]);
|
|
25
26
|
continue;
|
|
26
27
|
}
|
|
27
|
-
newMatrix[plan][mileagePackage] = round(baseline *
|
|
28
|
+
newMatrix[plan][mileagePackage] = round(baseline *
|
|
29
|
+
(flatPricing
|
|
30
|
+
? baseCoefficients[mileagePackage]
|
|
31
|
+
: newMatrix[plan][mileagePackage]));
|
|
28
32
|
}
|
|
29
33
|
}
|
|
30
34
|
return sortMatrix(newMatrix);
|
|
31
35
|
};
|
|
32
|
-
export const getHostExcessMileage = (pricingData, baseline)=>{
|
|
36
|
+
export const getHostExcessMileage = (pricingData, baseline) => {
|
|
33
37
|
return decimals(Math.max(Math.min(baseline * pricingData.hostEarnings.excessMileage.coefficient, pricingData.hostEarnings.excessMileage.upperBound), pricingData.hostEarnings.excessMileage.lowerBound));
|
|
34
38
|
};
|
|
35
|
-
export const getEmptyMatrix = ()=>{
|
|
39
|
+
export const getEmptyMatrix = () => {
|
|
36
40
|
return cloneDeep(EMPTY_MATRIX);
|
|
37
41
|
};
|
|
38
|
-
export const sortMatrix = (unorderedMatrix)=>{
|
|
42
|
+
export const sortMatrix = (unorderedMatrix) => {
|
|
39
43
|
const ordered = {};
|
|
40
44
|
const plans = getVehicleDataVariant(PLANS, 'car');
|
|
41
45
|
const mileagePackages = getVehicleDataVariant(MILEAGE_PACKAGES, 'car');
|
|
42
|
-
for (const plan of plans){
|
|
43
|
-
for (const mileagePackage of mileagePackages){
|
|
46
|
+
for (const plan of plans) {
|
|
47
|
+
for (const mileagePackage of mileagePackages) {
|
|
44
48
|
if (!ordered[plan]) {
|
|
45
49
|
ordered[plan] = {};
|
|
46
50
|
}
|
|
@@ -49,7 +53,7 @@ export const sortMatrix = (unorderedMatrix)=>{
|
|
|
49
53
|
}
|
|
50
54
|
return ordered;
|
|
51
55
|
};
|
|
52
|
-
const round = (number)=>{
|
|
56
|
+
const round = (number) => {
|
|
53
57
|
return Math.round(number * 100) / 100;
|
|
54
58
|
};
|
|
55
59
|
/**
|
|
@@ -62,7 +66,8 @@ const round = (number)=>{
|
|
|
62
66
|
* @param customLitePicing
|
|
63
67
|
*
|
|
64
68
|
* @see https://docs.google.com/spreadsheets/d/1lYYMdQgnzG53lCGf_dKJY9pEue5suJuo3O3-zegIOT0/edit#gid=819271234
|
|
65
|
-
*/
|
|
69
|
+
*/
|
|
70
|
+
export const getFluxPiceMatrix = (pricingData, vehicleType, baseline, dealershipPriceMatrix, tier, flatPricing, customMileagePackage, customLitePicing) => {
|
|
66
71
|
// Let's not mutate percentages
|
|
67
72
|
const newMatrix = cloneDeep(pricingData.hostEarnings.matrixCoefficients);
|
|
68
73
|
const plans = Object.keys(newMatrix);
|
|
@@ -70,7 +75,7 @@ const round = (number)=>{
|
|
|
70
75
|
// if flat pricing, we order the plans by 36 months first, then the rest,
|
|
71
76
|
// that's because we perform the operations on the same matrix, so 36 is the base
|
|
72
77
|
// and should influence th rest of the plans
|
|
73
|
-
plans.sort((a, _b)=>{
|
|
78
|
+
plans.sort((a, _b) => {
|
|
74
79
|
if (a === 'plan36') {
|
|
75
80
|
return -1;
|
|
76
81
|
}
|
|
@@ -80,16 +85,16 @@ const round = (number)=>{
|
|
|
80
85
|
// This code is highly vulnerable to order. The order **MUST** be sorted,
|
|
81
86
|
// this is because it edits "lite" plan, then the other plans depend on the outcome of this one.
|
|
82
87
|
// TODO: Fix this code so that it sorts lite package first.
|
|
83
|
-
for (const plan of plans){
|
|
88
|
+
for (const plan of plans) {
|
|
84
89
|
const mileagePackages = Object.keys(newMatrix[plan]);
|
|
85
|
-
mileagePackages.sort((a)=>{
|
|
90
|
+
mileagePackages.sort((a) => {
|
|
86
91
|
if (a === 'lite') {
|
|
87
92
|
return -1;
|
|
88
93
|
}
|
|
89
94
|
return 0;
|
|
90
95
|
});
|
|
91
96
|
const baseMileagePackage = vehicleType === 'motorcycle' ? 'standard' : 'lite';
|
|
92
|
-
for (const mileagePackage of mileagePackages){
|
|
97
|
+
for (const mileagePackage of mileagePackages) {
|
|
93
98
|
const targetPlan = flatPricing ? 'plan36' : plan;
|
|
94
99
|
if (plan === 'plan1') {
|
|
95
100
|
if (tier === 'tierCustom') {
|
|
@@ -100,38 +105,42 @@ const round = (number)=>{
|
|
|
100
105
|
continue;
|
|
101
106
|
}
|
|
102
107
|
if (mileagePackage === baseMileagePackage) {
|
|
103
|
-
const baseMileagePackagePrice = Math.max(baseline * pricingData.fluxPricing.matrixCoefficients[targetPlan], Number(dealershipPriceMatrix[targetPlan][baseMileagePackage]) +
|
|
108
|
+
const baseMileagePackagePrice = Math.max(baseline * pricingData.fluxPricing.matrixCoefficients[targetPlan], Number(dealershipPriceMatrix[targetPlan][baseMileagePackage]) +
|
|
109
|
+
pricingData.fluxPricing.minFluxTake);
|
|
104
110
|
const custom = customLitePicing?.[plan];
|
|
105
111
|
newMatrix[plan][baseMileagePackage] = decimals(typeof custom === 'undefined' ? baseMileagePackagePrice : custom);
|
|
106
112
|
continue;
|
|
107
113
|
}
|
|
108
|
-
const mileagePackageAdd = baseline *
|
|
114
|
+
const mileagePackageAdd = baseline *
|
|
115
|
+
pricingData.fluxPricing.matrixCoefficients.add[mileagePackage];
|
|
109
116
|
const cutomMileagePackageAdd = customMileagePackage?.[mileagePackage];
|
|
110
117
|
const basePlanMileagePackagePricing = newMatrix[targetPlan][baseMileagePackage];
|
|
111
|
-
newMatrix[plan][mileagePackage] = decimals(round(basePlanMileagePackagePricing +
|
|
118
|
+
newMatrix[plan][mileagePackage] = decimals(round(basePlanMileagePackagePricing +
|
|
119
|
+
(cutomMileagePackageAdd || mileagePackageAdd)));
|
|
112
120
|
}
|
|
113
121
|
}
|
|
114
122
|
return sortMatrix(newMatrix);
|
|
115
123
|
};
|
|
116
|
-
export const updateMatrixWithCustomPackages = (matrix, add)=>{
|
|
124
|
+
export const updateMatrixWithCustomPackages = (matrix, add) => {
|
|
117
125
|
const newMatrix = cloneDeep(matrix);
|
|
118
126
|
const plans = getVehicleDataVariant(PLANS, 'car');
|
|
119
127
|
const mileagePackages = getVehicleDataVariant(MILEAGE_PACKAGES, 'car');
|
|
120
128
|
const baseMileagePackage = mileagePackages[0];
|
|
121
|
-
for (const plan of plans){
|
|
122
|
-
for (const mileagePackage of mileagePackages){
|
|
129
|
+
for (const plan of plans) {
|
|
130
|
+
for (const mileagePackage of mileagePackages) {
|
|
123
131
|
if (mileagePackage === baseMileagePackage) {
|
|
124
132
|
continue;
|
|
125
133
|
}
|
|
126
134
|
const toAdd = add[mileagePackage];
|
|
127
135
|
if (toAdd) {
|
|
128
|
-
newMatrix[plan][mileagePackage] =
|
|
136
|
+
newMatrix[plan][mileagePackage] =
|
|
137
|
+
(newMatrix[plan]?.[baseMileagePackage] || 0) + toAdd;
|
|
129
138
|
}
|
|
130
139
|
}
|
|
131
140
|
}
|
|
132
141
|
return newMatrix;
|
|
133
142
|
};
|
|
134
|
-
export const getFluxExcessMileage = (pricingData, baseline)=>{
|
|
143
|
+
export const getFluxExcessMileage = (pricingData, baseline) => {
|
|
135
144
|
return decimals(Math.max(Math.min(baseline * pricingData.fluxPricing.matrixCoefficients.excessMileage, pricingData.fluxPricing.excessMileage.upperBound), pricingData.fluxPricing.excessMileage.lowerBound));
|
|
136
145
|
};
|
|
137
146
|
/**
|
|
@@ -140,16 +149,21 @@ export const getFluxExcessMileage = (pricingData, baseline)=>{
|
|
|
140
149
|
* @param coefficient
|
|
141
150
|
*
|
|
142
151
|
* @see https://docs.google.com/spreadsheets/d/1lYYMdQgnzG53lCGf_dKJY9pEue5suJuo3O3-zegIOT0/edit#gid=819271234
|
|
143
|
-
*/
|
|
152
|
+
*/
|
|
153
|
+
export const getStartFeeMatrix = (pricingData, baseline, flatPricing) => {
|
|
144
154
|
// Let's not mutate percentages
|
|
145
155
|
const newMatrix = cloneDeep(pricingData.startFee.matrixCoefficients);
|
|
146
156
|
const baseCoefficients = cloneDeep(newMatrix.plan36);
|
|
147
157
|
const plans = Object.keys(newMatrix);
|
|
148
|
-
for (const plan of plans){
|
|
158
|
+
for (const plan of plans) {
|
|
149
159
|
const mileagePackages = Object.keys(newMatrix[plan]);
|
|
150
|
-
for (const mileagePackage of mileagePackages){
|
|
151
|
-
newMatrix[plan][mileagePackage] = round(baseline *
|
|
160
|
+
for (const mileagePackage of mileagePackages) {
|
|
161
|
+
newMatrix[plan][mileagePackage] = round(baseline *
|
|
162
|
+
(flatPricing
|
|
163
|
+
? baseCoefficients[mileagePackage]
|
|
164
|
+
: newMatrix[plan][mileagePackage]));
|
|
152
165
|
}
|
|
153
166
|
}
|
|
154
167
|
return sortMatrix(newMatrix);
|
|
155
168
|
};
|
|
169
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=types.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@driveflux/api-functions",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.148",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./notion": {
|
|
@@ -73,23 +73,23 @@
|
|
|
73
73
|
],
|
|
74
74
|
"dependencies": {
|
|
75
75
|
"@casl/ability": "^6.7.3",
|
|
76
|
-
"@driveflux/auth": "4.0.
|
|
77
|
-
"@driveflux/billing": "8.1.
|
|
78
|
-
"@driveflux/config": "3.0.
|
|
79
|
-
"@driveflux/coupon": "9.1.
|
|
80
|
-
"@driveflux/db": "4.1.
|
|
81
|
-
"@driveflux/email": "7.1.
|
|
82
|
-
"@driveflux/email-templates": "1.2.
|
|
83
|
-
"@driveflux/engine": "1.1.
|
|
76
|
+
"@driveflux/auth": "4.0.86",
|
|
77
|
+
"@driveflux/billing": "8.1.6",
|
|
78
|
+
"@driveflux/config": "3.0.10",
|
|
79
|
+
"@driveflux/coupon": "9.1.19",
|
|
80
|
+
"@driveflux/db": "4.1.18",
|
|
81
|
+
"@driveflux/email": "7.1.19",
|
|
82
|
+
"@driveflux/email-templates": "1.2.19",
|
|
83
|
+
"@driveflux/engine": "1.1.38",
|
|
84
84
|
"@driveflux/fetch": "8.0.1",
|
|
85
85
|
"@driveflux/format-money": "7.0.0",
|
|
86
86
|
"@driveflux/logger": "1.1.3",
|
|
87
87
|
"@driveflux/problem": "6.0.1",
|
|
88
88
|
"@driveflux/reporter": "7.0.2",
|
|
89
89
|
"@driveflux/result": "6.0.1",
|
|
90
|
-
"@driveflux/scheduler": "8.1.
|
|
90
|
+
"@driveflux/scheduler": "8.1.19",
|
|
91
91
|
"@driveflux/singleton": "3.0.0",
|
|
92
|
-
"@driveflux/subscription": "9.1.
|
|
92
|
+
"@driveflux/subscription": "9.1.9",
|
|
93
93
|
"@driveflux/time": "6.0.2",
|
|
94
94
|
"@driveflux/utils": "6.0.0",
|
|
95
95
|
"@notionhq/client": "^5.3.0",
|