@driveflux/api-functions 0.0.2

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 (174) hide show
  1. package/dist/auth/confirm.d.ts +33 -0
  2. package/dist/auth/confirm.d.ts.map +1 -0
  3. package/dist/auth/confirm.js +88 -0
  4. package/dist/auth/confirm.js.map +1 -0
  5. package/dist/auth/emails.d.ts +4 -0
  6. package/dist/auth/emails.d.ts.map +1 -0
  7. package/dist/auth/emails.js +51 -0
  8. package/dist/auth/emails.js.map +1 -0
  9. package/dist/auth/formatter.d.ts +2 -0
  10. package/dist/auth/formatter.d.ts.map +1 -0
  11. package/dist/auth/formatter.js +249 -0
  12. package/dist/auth/formatter.js.map +1 -0
  13. package/dist/auth/otp.d.ts +44 -0
  14. package/dist/auth/otp.d.ts.map +1 -0
  15. package/dist/auth/otp.js +154 -0
  16. package/dist/auth/otp.js.map +1 -0
  17. package/dist/auth/register.d.ts +31 -0
  18. package/dist/auth/register.d.ts.map +1 -0
  19. package/dist/auth/register.js +128 -0
  20. package/dist/auth/register.js.map +1 -0
  21. package/dist/auth/tokens.d.ts +62 -0
  22. package/dist/auth/tokens.d.ts.map +1 -0
  23. package/dist/auth/tokens.js +129 -0
  24. package/dist/auth/tokens.js.map +1 -0
  25. package/dist/auth/verifications.d.ts +28 -0
  26. package/dist/auth/verifications.d.ts.map +1 -0
  27. package/dist/auth/verifications.js +174 -0
  28. package/dist/auth/verifications.js.map +1 -0
  29. package/dist/constants.d.ts +5 -0
  30. package/dist/constants.d.ts.map +1 -0
  31. package/dist/constants.js +5 -0
  32. package/dist/constants.js.map +1 -0
  33. package/dist/global.d.js +1 -0
  34. package/dist/mailjet/calls/manage-contacts-in-list.d.ts +21 -0
  35. package/dist/mailjet/calls/manage-contacts-in-list.d.ts.map +1 -0
  36. package/dist/mailjet/calls/manage-contacts-in-list.js +28 -0
  37. package/dist/mailjet/calls/manage-contacts-in-list.js.map +1 -0
  38. package/dist/mailjet/calls/manage-subscription-status.d.ts +15 -0
  39. package/dist/mailjet/calls/manage-subscription-status.d.ts.map +1 -0
  40. package/dist/mailjet/calls/manage-subscription-status.js +16 -0
  41. package/dist/mailjet/calls/manage-subscription-status.js.map +1 -0
  42. package/dist/mailjet/calls/request-service.d.ts +7 -0
  43. package/dist/mailjet/calls/request-service.d.ts.map +1 -0
  44. package/dist/mailjet/calls/request-service.js +24 -0
  45. package/dist/mailjet/calls/request-service.js.map +1 -0
  46. package/dist/mailjet/refresh-email-preferences.d.ts +23 -0
  47. package/dist/mailjet/refresh-email-preferences.d.ts.map +1 -0
  48. package/dist/mailjet/refresh-email-preferences.js +43 -0
  49. package/dist/mailjet/refresh-email-preferences.js.map +1 -0
  50. package/dist/mailjet/set-contact.d.ts +21 -0
  51. package/dist/mailjet/set-contact.d.ts.map +1 -0
  52. package/dist/mailjet/set-contact.js +39 -0
  53. package/dist/mailjet/set-contact.js.map +1 -0
  54. package/dist/mailjet/types.d.ts +31 -0
  55. package/dist/mailjet/types.d.ts.map +1 -0
  56. package/dist/mailjet/types.js +2 -0
  57. package/dist/mailjet/types.js.map +1 -0
  58. package/dist/mailjet/utils/convert-to-array.d.ts +6 -0
  59. package/dist/mailjet/utils/convert-to-array.d.ts.map +1 -0
  60. package/dist/mailjet/utils/convert-to-array.js +23 -0
  61. package/dist/mailjet/utils/convert-to-array.js.map +1 -0
  62. package/dist/mailjet/utils/extract-email-preferences.d.ts +17 -0
  63. package/dist/mailjet/utils/extract-email-preferences.d.ts.map +1 -0
  64. package/dist/mailjet/utils/extract-email-preferences.js +51 -0
  65. package/dist/mailjet/utils/extract-email-preferences.js.map +1 -0
  66. package/dist/mailjet/utils/lists.d.ts +13 -0
  67. package/dist/mailjet/utils/lists.d.ts.map +1 -0
  68. package/dist/mailjet/utils/lists.js +41 -0
  69. package/dist/mailjet/utils/lists.js.map +1 -0
  70. package/dist/mailjet/utils/update-email-references.d.ts +4 -0
  71. package/dist/mailjet/utils/update-email-references.d.ts.map +1 -0
  72. package/dist/mailjet/utils/update-email-references.js +31 -0
  73. package/dist/mailjet/utils/update-email-references.js.map +1 -0
  74. package/dist/notion/client.d.ts +12 -0
  75. package/dist/notion/client.d.ts.map +1 -0
  76. package/dist/notion/client.js +63 -0
  77. package/dist/notion/client.js.map +1 -0
  78. package/dist/notion/helpful.d.ts +7 -0
  79. package/dist/notion/helpful.d.ts.map +1 -0
  80. package/dist/notion/helpful.js +32 -0
  81. package/dist/notion/helpful.js.map +1 -0
  82. package/dist/notion/schemas/block.d.ts +89 -0
  83. package/dist/notion/schemas/block.d.ts.map +1 -0
  84. package/dist/notion/schemas/block.js +89 -0
  85. package/dist/notion/schemas/block.js.map +1 -0
  86. package/dist/notion/schemas/common.d.ts +25 -0
  87. package/dist/notion/schemas/common.d.ts.map +1 -0
  88. package/dist/notion/schemas/common.js +31 -0
  89. package/dist/notion/schemas/common.js.map +1 -0
  90. package/dist/notion/schemas/database.d.ts +517 -0
  91. package/dist/notion/schemas/database.d.ts.map +1 -0
  92. package/dist/notion/schemas/database.js +222 -0
  93. package/dist/notion/schemas/database.js.map +1 -0
  94. package/dist/notion/schemas/emoji.d.ts +12 -0
  95. package/dist/notion/schemas/emoji.d.ts.map +1 -0
  96. package/dist/notion/schemas/emoji.js +6 -0
  97. package/dist/notion/schemas/emoji.js.map +1 -0
  98. package/dist/notion/schemas/file.d.ts +43 -0
  99. package/dist/notion/schemas/file.d.ts.map +1 -0
  100. package/dist/notion/schemas/file.js +18 -0
  101. package/dist/notion/schemas/file.js.map +1 -0
  102. package/dist/notion/schemas/kb.d.ts +1526 -0
  103. package/dist/notion/schemas/kb.d.ts.map +1 -0
  104. package/dist/notion/schemas/kb.js +74 -0
  105. package/dist/notion/schemas/kb.js.map +1 -0
  106. package/dist/notion/schemas/page.d.ts +608 -0
  107. package/dist/notion/schemas/page.d.ts.map +1 -0
  108. package/dist/notion/schemas/page.js +181 -0
  109. package/dist/notion/schemas/page.js.map +1 -0
  110. package/dist/notion/schemas/parent.d.ts +42 -0
  111. package/dist/notion/schemas/parent.d.ts.map +1 -0
  112. package/dist/notion/schemas/parent.js +18 -0
  113. package/dist/notion/schemas/parent.js.map +1 -0
  114. package/dist/notion/schemas/user.d.ts +83 -0
  115. package/dist/notion/schemas/user.d.ts.map +1 -0
  116. package/dist/notion/schemas/user.js +31 -0
  117. package/dist/notion/schemas/user.js.map +1 -0
  118. package/dist/reservation/agree.d.ts +3 -0
  119. package/dist/reservation/agree.d.ts.map +1 -0
  120. package/dist/reservation/agree.js +23 -0
  121. package/dist/reservation/agree.js.map +1 -0
  122. package/dist/reservation/checks.d.ts +8 -0
  123. package/dist/reservation/checks.d.ts.map +1 -0
  124. package/dist/reservation/checks.js +28 -0
  125. package/dist/reservation/checks.js.map +1 -0
  126. package/dist/reservation/display-vehicle.d.ts +1152 -0
  127. package/dist/reservation/display-vehicle.d.ts.map +1 -0
  128. package/dist/reservation/display-vehicle.js +244 -0
  129. package/dist/reservation/display-vehicle.js.map +1 -0
  130. package/dist/reservation/fetch-or-create.d.ts +11 -0
  131. package/dist/reservation/fetch-or-create.d.ts.map +1 -0
  132. package/dist/reservation/fetch-or-create.js +207 -0
  133. package/dist/reservation/fetch-or-create.js.map +1 -0
  134. package/dist/reservation/invoice.d.ts +12 -0
  135. package/dist/reservation/invoice.d.ts.map +1 -0
  136. package/dist/reservation/invoice.js +248 -0
  137. package/dist/reservation/invoice.js.map +1 -0
  138. package/dist/reservation/payer.d.ts +5 -0
  139. package/dist/reservation/payer.d.ts.map +1 -0
  140. package/dist/reservation/payer.js +38 -0
  141. package/dist/reservation/payer.js.map +1 -0
  142. package/dist/reservation/reserve.d.ts +5 -0
  143. package/dist/reservation/reserve.d.ts.map +1 -0
  144. package/dist/reservation/reserve.js +44 -0
  145. package/dist/reservation/reserve.js.map +1 -0
  146. package/dist/reservation/types.d.ts +28 -0
  147. package/dist/reservation/types.d.ts.map +1 -0
  148. package/dist/reservation/types.js +2 -0
  149. package/dist/reservation/types.js.map +1 -0
  150. package/dist/reservation/vehicle.d.ts +6 -0
  151. package/dist/reservation/vehicle.d.ts.map +1 -0
  152. package/dist/reservation/vehicle.js +32 -0
  153. package/dist/reservation/vehicle.js.map +1 -0
  154. package/dist/slack.d.ts +19 -0
  155. package/dist/slack.d.ts.map +1 -0
  156. package/dist/slack.js +105 -0
  157. package/dist/slack.js.map +1 -0
  158. package/dist/validation.d.ts +63 -0
  159. package/dist/validation.d.ts.map +1 -0
  160. package/dist/validation.js +99 -0
  161. package/dist/validation.js.map +1 -0
  162. package/dist/vehicle/vehicle-pricing/constants.d.ts +91 -0
  163. package/dist/vehicle/vehicle-pricing/constants.d.ts.map +1 -0
  164. package/dist/vehicle/vehicle-pricing/constants.js +142 -0
  165. package/dist/vehicle/vehicle-pricing/constants.js.map +1 -0
  166. package/dist/vehicle/vehicle-pricing/index.d.ts +79 -0
  167. package/dist/vehicle/vehicle-pricing/index.d.ts.map +1 -0
  168. package/dist/vehicle/vehicle-pricing/index.js +169 -0
  169. package/dist/vehicle/vehicle-pricing/index.js.map +1 -0
  170. package/dist/vehicle/vehicle-pricing/types.d.ts +43 -0
  171. package/dist/vehicle/vehicle-pricing/types.d.ts.map +1 -0
  172. package/dist/vehicle/vehicle-pricing/types.js +2 -0
  173. package/dist/vehicle/vehicle-pricing/types.js.map +1 -0
  174. package/package.json +121 -0
@@ -0,0 +1,63 @@
1
+ import { type StandardResult } from '@driveflux/result';
2
+ import { type ZodError, z } from 'zod';
3
+ export declare const makeValidationErrorResult: (zodError: ZodError<any>) => StandardResult<never>;
4
+ export declare const getIdOrObjectValidation: <ObjectName extends string, ExtendObjectValidation extends z.ZodRawShape>(object: ObjectName, extendObjectValidation?: ExtendObjectValidation) => z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
5
+ object: z.ZodLiteral<ObjectName>;
6
+ }, z.core.$catchall<z.ZodAny>>]>;
7
+ export declare const nonEmptyStringValidator: z.ZodString;
8
+ export declare const metadataValidation: z.ZodObject<{}, z.core.$catchall<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodArray<z.ZodNumber>, z.ZodArray<z.ZodBoolean>, z.ZodNull, z.ZodUndefined]>>>;
9
+ export declare const addressValidation: z.ZodObject<{
10
+ name: z.ZodNullable<z.ZodOptional<z.ZodString>>;
11
+ coordinates: z.ZodOptional<z.ZodNullable<z.ZodObject<{
12
+ lat: z.ZodNumber;
13
+ lng: z.ZodNumber;
14
+ }, z.core.$strip>>>;
15
+ street1: z.ZodString;
16
+ street2: z.ZodOptional<z.ZodNullable<z.ZodString>>;
17
+ city: z.ZodString;
18
+ state: z.ZodString;
19
+ postalCode: z.ZodString;
20
+ country: z.ZodString;
21
+ metadata: z.ZodNullable<z.ZodOptional<z.ZodObject<{}, z.core.$catchall<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodArray<z.ZodNumber>, z.ZodArray<z.ZodBoolean>, z.ZodNull, z.ZodUndefined]>>>>>;
22
+ }, z.core.$strip>;
23
+ export declare const dateValidation: z.ZodDate;
24
+ export declare const enhancedImageValidation: z.ZodObject<{
25
+ default: z.ZodString;
26
+ blurBase64: z.ZodOptional<z.ZodString>;
27
+ thumbnail: z.ZodOptional<z.ZodString>;
28
+ small: z.ZodOptional<z.ZodString>;
29
+ medium: z.ZodOptional<z.ZodString>;
30
+ large: z.ZodOptional<z.ZodString>;
31
+ description: z.ZodOptional<z.ZodString>;
32
+ }, z.core.$strip>;
33
+ export declare const getObjectValidation: <T extends string>(o: T) => z.ZodOptional<z.ZodEnum<{ [k_1 in T]: k_1; } extends infer T_1 ? { [k in keyof T_1]: T_1[k]; } : never>>;
34
+ export declare const contactValidation: z.ZodObject<{
35
+ id: z.ZodString;
36
+ firstName: z.ZodString;
37
+ lastName: z.ZodString;
38
+ jobTitle: z.ZodOptional<z.ZodString>;
39
+ email: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<string | undefined, string | undefined>>;
40
+ phoneNumber: z.ZodOptional<z.ZodString>;
41
+ remarks: z.ZodDefault<z.ZodString>;
42
+ }, z.core.$strip>;
43
+ export declare const documentFileValidation: z.ZodObject<{
44
+ id: z.ZodString;
45
+ name: z.ZodString;
46
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
47
+ url: z.ZodString;
48
+ fileType: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodOptional<z.ZodEnum<{
49
+ image: "image";
50
+ jpg: "jpg";
51
+ jpeg: "jpeg";
52
+ png: "png";
53
+ pdf: "pdf";
54
+ }>>>;
55
+ mimeType: z.ZodOptional<z.ZodString>;
56
+ uploaded: z.ZodDefault<z.ZodBoolean>;
57
+ createdAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
58
+ updatedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
59
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodObject<{}, z.core.$catchall<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodArray<z.ZodNumber>, z.ZodArray<z.ZodBoolean>, z.ZodNull, z.ZodUndefined]>>>>>;
60
+ }, z.core.$strip>;
61
+ export declare const queryBooleanValidator: z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>;
62
+ export declare const queryNumberValidator: z.ZodPipe<z.ZodTransform<number, unknown>, z.ZodNumber>;
63
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAI5D,OAAO,EAAE,KAAK,QAAQ,EAAiB,CAAC,EAAE,MAAM,KAAK,CAAA;AAErD,eAAO,MAAM,yBAAyB,GACrC,UAAU,QAAQ,CAAC,GAAG,CAAC,KACrB,cAAc,CAAC,KAAK,CAatB,CAAA;AAED,eAAO,MAAM,uBAAuB,GACnC,UAAU,SAAS,MAAM,EACzB,sBAAsB,SAAS,CAAC,CAAC,WAAW,EAE5C,QAAQ,UAAU,EAClB,yBAAyB,sBAAsB;;gCAiB9C,CAAA;AAEF,eAAO,MAAM,uBAAuB,aAAoB,CAAA;AAExD,eAAO,MAAM,kBAAkB,yMAa7B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;iBAgB5B,CAAA;AAEF,eAAO,MAAM,cAAc,EAGX,CAAC,CAAC,OAAO,CAAA;AAEzB,eAAO,MAAM,uBAAuB;;;;;;;;iBAQlC,CAAA;AAEF,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,EAAE,GAAG,CAAC,6GACnC,CAAA;AAEvB,eAAO,MAAM,iBAAiB;QACW,CAAC,CAAC,SAAS;;;;;;;iBAWlD,CAAA;AAEF,eAAO,MAAM,sBAAsB;QACM,CAAC,CAAC,SAAS;;;;;;;;;;;;;;;;iBAalD,CAAA;AAEF,eAAO,MAAM,qBAAqB,2DAGjC,CAAA;AACD,eAAO,MAAM,oBAAoB,yDAA+C,CAAA"}
@@ -0,0 +1,99 @@
1
+ import { makeProblem } from '@driveflux/problem';
2
+ import { Err } from '@driveflux/result';
3
+ import { getDate } from '@driveflux/utils';
4
+ import { isValid } from 'date-fns/isValid';
5
+ import toNumber from 'lodash/toNumber';
6
+ import { z } from 'zod';
7
+ export const makeValidationErrorResult = (zodError) => {
8
+ const validation = zodError.flatten((i) => ({
9
+ message: i.message,
10
+ code: i.code,
11
+ path: i.path,
12
+ }));
13
+ return new Err(makeProblem({
14
+ object: 'validation-issues',
15
+ ...validation,
16
+ }));
17
+ };
18
+ export const getIdOrObjectValidation = (object, extendObjectValidation) => z.union([
19
+ z.string(),
20
+ z
21
+ .object({ object: z.literal(object), ...extendObjectValidation })
22
+ .passthrough()
23
+ .catchall(z.any()),
24
+ ], {
25
+ error: () => {
26
+ return {
27
+ message: `Invalid details. Please provide an id as a string or an object of type ${object}`,
28
+ };
29
+ },
30
+ });
31
+ export const nonEmptyStringValidator = z.string().min(1);
32
+ export const metadataValidation = z
33
+ .object({})
34
+ .catchall(z.union([
35
+ z.string(),
36
+ z.number(),
37
+ z.boolean(),
38
+ z.array(z.string()),
39
+ z.array(z.number()),
40
+ z.array(z.boolean()),
41
+ z.null(),
42
+ z.undefined(),
43
+ ]));
44
+ export const addressValidation = z.object({
45
+ name: z.string().optional().nullable(),
46
+ coordinates: z
47
+ .object({
48
+ lat: z.number().min(-90).max(90),
49
+ lng: z.number().min(-180).max(180),
50
+ })
51
+ .nullable()
52
+ .optional(),
53
+ street1: nonEmptyStringValidator,
54
+ street2: z.string().nullable().optional(),
55
+ city: nonEmptyStringValidator,
56
+ state: nonEmptyStringValidator,
57
+ postalCode: z.string().min(3).max(11),
58
+ country: nonEmptyStringValidator,
59
+ metadata: metadataValidation.optional().nullable(),
60
+ });
61
+ export const dateValidation = z.preprocess((d) => isValid(getDate(d)) && new Date(d), z.date());
62
+ export const enhancedImageValidation = z.object({
63
+ default: z.string(),
64
+ blurBase64: z.string().optional(),
65
+ thumbnail: z.string().optional(),
66
+ small: z.string().optional(),
67
+ medium: z.string().optional(),
68
+ large: z.string().optional(),
69
+ description: z.string().optional(),
70
+ });
71
+ export const getObjectValidation = (o) => z.enum([o]).optional();
72
+ export const contactValidation = z.object({
73
+ id: z.string().optional(),
74
+ firstName: z.string(),
75
+ lastName: z.string(),
76
+ jobTitle: z.string().optional(),
77
+ email: z
78
+ .string()
79
+ .email()
80
+ .optional()
81
+ .transform((email) => email?.toLowerCase().trim()),
82
+ phoneNumber: z.string().optional(),
83
+ remarks: z.string().default(''),
84
+ });
85
+ export const documentFileValidation = z.object({
86
+ id: z.string().optional(),
87
+ name: z.string(),
88
+ description: z.string().nullable().optional(),
89
+ url: z.string(),
90
+ fileType: z.preprocess((f) => (typeof f === 'string' ? f.toLowerCase() : f), z.enum(['jpg', 'jpeg', 'png', 'pdf', 'image']).optional()),
91
+ mimeType: z.string().optional(),
92
+ uploaded: z.boolean().default(true),
93
+ createdAt: dateValidation.nullable().optional(),
94
+ updatedAt: dateValidation.nullable().optional(),
95
+ metadata: metadataValidation.nullable().optional(),
96
+ });
97
+ export const queryBooleanValidator = z.preprocess((s) => s === '1' || s === 'true', z.boolean());
98
+ export const queryNumberValidator = z.preprocess((s) => toNumber(s), z.number());
99
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { VehiclePriceMatrix } from '@driveflux/db/types/frontend';
2
+ import type { FluxPriceMatrixCoefficients, StartFeeMatrixCoefficients, TiersPricing } from './types';
3
+ export declare const DEFAULT_MATRIX: {
4
+ plan1: {
5
+ lite: number;
6
+ standard: number;
7
+ plus: number;
8
+ unlimited: number;
9
+ };
10
+ plan12: {
11
+ lite: number;
12
+ standard: number;
13
+ plus: number;
14
+ unlimited: number;
15
+ };
16
+ plan24: {
17
+ lite: number;
18
+ standard: number;
19
+ plus: number;
20
+ unlimited: number;
21
+ };
22
+ plan36: {
23
+ lite: number;
24
+ standard: number;
25
+ plus: number;
26
+ unlimited: number;
27
+ };
28
+ plan60: {
29
+ lite: number;
30
+ standard: number;
31
+ plus: number;
32
+ unlimited: number;
33
+ };
34
+ planWeekly: {
35
+ lite: number;
36
+ standard: number;
37
+ plus: number;
38
+ unlimited: number;
39
+ };
40
+ };
41
+ export declare const FLUX_MIN_TAKE = 200;
42
+ export declare const EMPTY_FLUX_PRICING_MATRIX_CONTROLLER: FluxPriceMatrixCoefficients;
43
+ export declare const EMPTY_FLUX_START_FEE_MATRIX_CONTROLLER: StartFeeMatrixCoefficients;
44
+ export declare const EMPTY_ULTRA_TIERS: TiersPricing;
45
+ export declare const EMPTY_MATRIX: VehiclePriceMatrix;
46
+ /**
47
+ * Matrix representing the dealership's take in percentages
48
+ *
49
+ * @see https://docs.google.com/spreadsheets/d/1lYYMdQgnzG53lCGf_dKJY9pEue5suJuo3O3-zegIOT0/edit#gid=819271234
50
+ */
51
+ export declare const HOST_MATRIX_COEFFICIENTS: VehiclePriceMatrix;
52
+ export declare const ULTRA_HOST_TIERS_PRICING: {
53
+ tier1: number;
54
+ tier2: number;
55
+ tier3: number;
56
+ tier4: number;
57
+ tier5: number;
58
+ tier6: number;
59
+ tier7: number;
60
+ tier8: number;
61
+ tier9: number;
62
+ tier10: number;
63
+ tier11: number;
64
+ tier12: number;
65
+ tier13: number;
66
+ tier14: number;
67
+ tier15: number;
68
+ };
69
+ export declare const ULTRA_FLUX_TIERS_PRICING: {
70
+ readonly tier1: 999;
71
+ readonly tier2: 1199;
72
+ readonly tier3: 1399;
73
+ readonly tier4: 1499;
74
+ readonly tier5: 1925;
75
+ readonly tier6: 2459;
76
+ readonly tier7: 2999;
77
+ readonly tier8: 3599;
78
+ readonly tier9: 4499;
79
+ readonly tier10: 5599;
80
+ readonly tier11: 7599;
81
+ readonly tier12: 9999;
82
+ readonly tier13: 12599;
83
+ readonly tier14: 14999;
84
+ readonly tier15: 17999;
85
+ };
86
+ export declare const HOST_EXCESS_MILEAGE_COEFFICIENT = 0.00048;
87
+ export declare const MAX_HOST_EXCESS_MILEAGE = 4;
88
+ export declare const MIN_HOST_EXCESS_MILEAGE = 0.52;
89
+ export declare const MAX_FLUX_EXCESS_MILEAGE = 5;
90
+ export declare const MIN_FLUX_EXCESS_MILEAGE = 0.65;
91
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/vehicle/vehicle-pricing/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,KAAK,EACX,2BAA2B,EAC3B,0BAA0B,EAC1B,YAAY,EACZ,MAAM,SAAS,CAAA;AAIhB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAO1B,CAAA;AAED,eAAO,MAAM,aAAa,MAAM,CAAA;AAShC,eAAO,MAAM,oCAAoC,EAAE,2BAUxC,CAAA;AAEX,eAAO,MAAM,sCAAsC,EAAE,0BAQ1C,CAAA;AAEX,eAAO,MAAM,iBAAiB,EAAE,YAgBtB,CAAA;AAEV,eAAO,MAAM,YAAY,EAAE,kBAO1B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,kBAqC7B,CAAA;AAEV,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;CAgBpC,CAAA;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;CAgB3B,CAAA;AAEV,eAAO,MAAM,+BAA+B,UAAU,CAAA;AACtD,eAAO,MAAM,uBAAuB,IAAI,CAAA;AACxC,eAAO,MAAM,uBAAuB,OAAO,CAAA;AAE3C,eAAO,MAAM,uBAAuB,IAAI,CAAA;AACxC,eAAO,MAAM,uBAAuB,OAAO,CAAA"}
@@ -0,0 +1,142 @@
1
+ const DEFAUALT_MILEAGE_MATRIX = { lite: 0, standard: 0, plus: 0, unlimited: 0 };
2
+ export const DEFAULT_MATRIX = {
3
+ plan1: DEFAUALT_MILEAGE_MATRIX,
4
+ plan12: DEFAUALT_MILEAGE_MATRIX,
5
+ plan24: DEFAUALT_MILEAGE_MATRIX,
6
+ plan36: DEFAUALT_MILEAGE_MATRIX,
7
+ plan60: DEFAUALT_MILEAGE_MATRIX,
8
+ planWeekly: DEFAUALT_MILEAGE_MATRIX,
9
+ };
10
+ export const FLUX_MIN_TAKE = 200;
11
+ const EMPTY_MILEAGE_PACKAGES = {
12
+ lite: 0,
13
+ standard: 0,
14
+ plus: 0,
15
+ unlimited: 0,
16
+ };
17
+ export const EMPTY_FLUX_PRICING_MATRIX_CONTROLLER = {
18
+ plan60: 0,
19
+ plan36: 0,
20
+ plan24: 0,
21
+ plan12: 0,
22
+ plan1: 0,
23
+ planWeekly: 0,
24
+ add: EMPTY_MILEAGE_PACKAGES,
25
+ excessMileage: 0,
26
+ };
27
+ export const EMPTY_FLUX_START_FEE_MATRIX_CONTROLLER = {
28
+ plan60: EMPTY_MILEAGE_PACKAGES,
29
+ plan36: EMPTY_MILEAGE_PACKAGES,
30
+ plan24: EMPTY_MILEAGE_PACKAGES,
31
+ plan12: EMPTY_MILEAGE_PACKAGES,
32
+ plan1: EMPTY_MILEAGE_PACKAGES,
33
+ planWeekly: EMPTY_MILEAGE_PACKAGES,
34
+ };
35
+ export const EMPTY_ULTRA_TIERS = {
36
+ tier1: 0,
37
+ tier2: 0,
38
+ tier3: 0,
39
+ tier4: 0,
40
+ tier5: 0,
41
+ tier6: 0,
42
+ tier7: 0,
43
+ tier8: 0,
44
+ tier9: 0,
45
+ tier10: 0,
46
+ tier11: 0,
47
+ tier12: 0,
48
+ tier13: 0,
49
+ tier14: 0,
50
+ tier15: 0,
51
+ };
52
+ export const EMPTY_MATRIX = {
53
+ plan60: EMPTY_MILEAGE_PACKAGES,
54
+ plan36: EMPTY_MILEAGE_PACKAGES,
55
+ plan24: EMPTY_MILEAGE_PACKAGES,
56
+ plan12: EMPTY_MILEAGE_PACKAGES,
57
+ plan1: EMPTY_MILEAGE_PACKAGES,
58
+ planWeekly: EMPTY_MILEAGE_PACKAGES,
59
+ };
60
+ /**
61
+ * Matrix representing the dealership's take in percentages
62
+ *
63
+ * @see https://docs.google.com/spreadsheets/d/1lYYMdQgnzG53lCGf_dKJY9pEue5suJuo3O3-zegIOT0/edit#gid=819271234
64
+ */
65
+ export const HOST_MATRIX_COEFFICIENTS = {
66
+ plan60: {
67
+ lite: 0.8,
68
+ standard: 0.9,
69
+ plus: 1,
70
+ unlimited: 1.25,
71
+ },
72
+ plan36: {
73
+ lite: 1,
74
+ standard: 1.1,
75
+ plus: 1.2,
76
+ unlimited: 1.45,
77
+ },
78
+ plan24: {
79
+ lite: 1.1,
80
+ standard: 1.2,
81
+ plus: 1.3,
82
+ unlimited: 1.55,
83
+ },
84
+ plan12: {
85
+ lite: 1.2,
86
+ standard: 1.3,
87
+ plus: 1.4,
88
+ unlimited: 1.65,
89
+ },
90
+ plan1: {
91
+ lite: 0,
92
+ standard: 0,
93
+ plus: 0,
94
+ unlimited: 0,
95
+ },
96
+ planWeekly: {
97
+ lite: 0,
98
+ standard: 0,
99
+ plus: 0,
100
+ unlimited: 0,
101
+ },
102
+ };
103
+ export const ULTRA_HOST_TIERS_PRICING = {
104
+ tier1: 800,
105
+ tier2: 1000,
106
+ tier3: 1100,
107
+ tier4: 1300,
108
+ tier5: 1600,
109
+ tier6: 2000,
110
+ tier7: 2400,
111
+ tier8: 2900,
112
+ tier9: 3800,
113
+ tier10: 4800,
114
+ tier11: 6500,
115
+ tier12: 8500,
116
+ tier13: 10500,
117
+ tier14: 12800,
118
+ tier15: 15000,
119
+ };
120
+ export const ULTRA_FLUX_TIERS_PRICING = {
121
+ tier1: 999,
122
+ tier2: 1199,
123
+ tier3: 1399,
124
+ tier4: 1499,
125
+ tier5: 1925,
126
+ tier6: 2459,
127
+ tier7: 2999,
128
+ tier8: 3599,
129
+ tier9: 4499,
130
+ tier10: 5599,
131
+ tier11: 7599,
132
+ tier12: 9999,
133
+ tier13: 12599,
134
+ tier14: 14999,
135
+ tier15: 17999,
136
+ };
137
+ export const HOST_EXCESS_MILEAGE_COEFFICIENT = 0.00048;
138
+ export const MAX_HOST_EXCESS_MILEAGE = 4;
139
+ export const MIN_HOST_EXCESS_MILEAGE = 0.52;
140
+ export const MAX_FLUX_EXCESS_MILEAGE = 5;
141
+ export const MIN_FLUX_EXCESS_MILEAGE = 0.65;
142
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/vehicle/vehicle-pricing/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type { UltraTier, VehiclePriceMatrix, VehiclePricing, VehicleType } from '@driveflux/db';
2
+ import type { FluxVehiclePricingController } from './types';
3
+ type CustomLitePricing = {
4
+ plan60?: number;
5
+ plan36?: number;
6
+ plan24?: number;
7
+ plan12?: number;
8
+ plan1?: number;
9
+ planWeekly?: number;
10
+ };
11
+ /**
12
+ * This is a last moment feature the CEO asked for and was not properly designed
13
+ */
14
+ export declare const getRecommendedMotorcycleDeposit: (baseline: number) => number;
15
+ export declare const getHostsMatrix: (pricingData: FluxVehiclePricingController, baseline: number, tier: UltraTier, flatPricing: boolean) => VehiclePriceMatrix;
16
+ export declare const getHostExcessMileage: (pricingData: FluxVehiclePricingController, baseline: number) => number;
17
+ export declare const getEmptyMatrix: () => VehiclePriceMatrix;
18
+ export declare const sortMatrix: (unorderedMatrix: VehiclePriceMatrix) => VehiclePriceMatrix;
19
+ /**
20
+ * Generates the flux price matrix
21
+ *
22
+ * @param baseline
23
+ * @param dealershipPriceMatrix
24
+ * @param fluxTakeCoefficient
25
+ * @param customMileagePackage
26
+ * @param customLitePicing
27
+ *
28
+ * @see https://docs.google.com/spreadsheets/d/1lYYMdQgnzG53lCGf_dKJY9pEue5suJuo3O3-zegIOT0/edit#gid=819271234
29
+ */
30
+ export declare const getFluxPiceMatrix: (pricingData: FluxVehiclePricingController, vehicleType: VehicleType, baseline: number, dealershipPriceMatrix: VehiclePriceMatrix, tier: UltraTier, flatPricing: boolean, customMileagePackage?: VehiclePricing["fluxPrice"]["add"], customLitePicing?: CustomLitePricing) => VehiclePriceMatrix;
31
+ export declare const updateMatrixWithCustomPackages: (matrix: VehiclePriceMatrix, add: NonNullable<VehiclePricing["fluxPrice"]["add"]>) => VehiclePriceMatrix;
32
+ export declare const getFluxExcessMileage: (pricingData: FluxVehiclePricingController, baseline: number) => number;
33
+ /**
34
+ *
35
+ * @param baseline
36
+ * @param coefficient
37
+ *
38
+ * @see https://docs.google.com/spreadsheets/d/1lYYMdQgnzG53lCGf_dKJY9pEue5suJuo3O3-zegIOT0/edit#gid=819271234
39
+ */
40
+ export declare const getStartFeeMatrix: (pricingData: FluxVehiclePricingController, baseline: number, flatPricing: boolean) => {
41
+ plan60: {
42
+ lite: number;
43
+ standard: number;
44
+ plus: number;
45
+ unlimited: number;
46
+ };
47
+ plan36: {
48
+ lite: number;
49
+ standard: number;
50
+ plus: number;
51
+ unlimited: number;
52
+ };
53
+ plan24: {
54
+ lite: number;
55
+ standard: number;
56
+ plus: number;
57
+ unlimited: number;
58
+ };
59
+ plan12: {
60
+ lite: number;
61
+ standard: number;
62
+ plus: number;
63
+ unlimited: number;
64
+ };
65
+ plan1: {
66
+ lite: number;
67
+ standard: number;
68
+ plus: number;
69
+ unlimited: number;
70
+ };
71
+ planWeekly: {
72
+ lite: number;
73
+ standard: number;
74
+ plus: number;
75
+ unlimited: number;
76
+ };
77
+ };
78
+ export {};
79
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vehicle/vehicle-pricing/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGX,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,MAAM,eAAe,CAAA;AAMtB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AAE3D,KAAK,iBAAiB,GAAG;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,+BAA+B,GAAI,UAAU,MAAM,WAE/D,CAAA;AAED,eAAO,MAAM,cAAc,GAC1B,aAAa,4BAA4B,EACzC,UAAU,MAAM,EAChB,MAAM,SAAS,EACf,aAAa,OAAO,KAClB,kBAgCF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAChC,aAAa,4BAA4B,EACzC,UAAU,MAAM,WAWhB,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,kBAEjC,CAAA;AAED,eAAO,MAAM,UAAU,GACtB,iBAAiB,kBAAkB,KACjC,kBAiBF,CAAA;AAMD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,GAC7B,aAAa,4BAA4B,EACzC,aAAa,WAAW,EACxB,UAAU,MAAM,EAChB,uBAAuB,kBAAkB,EACzC,MAAM,SAAS,EACf,aAAa,OAAO,EACpB,uBAAuB,cAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EACzD,mBAAmB,iBAAiB,KAClC,kBAmFF,CAAA;AAED,eAAO,MAAM,8BAA8B,GAC1C,QAAQ,kBAAkB,EAC1B,KAAK,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,KAClD,kBAsBF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAChC,aAAa,4BAA4B,EACzC,UAAU,MAAM,WAWhB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC7B,aAAa,4BAA4B,EACzC,UAAU,MAAM,EAChB,aAAa,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoBpB,CAAA"}
@@ -0,0 +1,169 @@
1
+ import { MILEAGE_PACKAGES, PLANS } from '@driveflux/db/models/subscription';
2
+ import { getVehicleDataVariant } from '@driveflux/db/models/vehicle';
3
+ import { decimals } from '@driveflux/format-money';
4
+ import cloneDeep from 'lodash/cloneDeep';
5
+ import { EMPTY_MATRIX } from './constants';
6
+ /**
7
+ * This is a last moment feature the CEO asked for and was not properly designed
8
+ */
9
+ export const getRecommendedMotorcycleDeposit = (baseline) => {
10
+ return Math.max(Math.min(baseline * 5, 1500), 1000);
11
+ };
12
+ export const getHostsMatrix = (pricingData, baseline, tier, flatPricing) => {
13
+ // Let's not mutate percentages
14
+ const newMatrix = cloneDeep(pricingData.hostEarnings.matrixCoefficients);
15
+ const baseCoefficients = cloneDeep(newMatrix.plan36);
16
+ const plans = Object.keys(newMatrix);
17
+ for (const plan of plans) {
18
+ const mileagePackages = Object.keys(newMatrix[plan]);
19
+ for (const mileagePackage of mileagePackages) {
20
+ if (plan === 'plan1') {
21
+ if (tier === 'tierCustom') {
22
+ newMatrix[plan][mileagePackage] = 0;
23
+ continue;
24
+ }
25
+ newMatrix[plan][mileagePackage] = Number(pricingData.hostEarnings.ultraTiers[tier]);
26
+ continue;
27
+ }
28
+ newMatrix[plan][mileagePackage] = round(baseline *
29
+ (flatPricing
30
+ ? baseCoefficients[mileagePackage]
31
+ : newMatrix[plan][mileagePackage]));
32
+ }
33
+ }
34
+ return sortMatrix(newMatrix);
35
+ };
36
+ export const getHostExcessMileage = (pricingData, baseline) => {
37
+ return decimals(Math.max(Math.min(baseline * pricingData.hostEarnings.excessMileage.coefficient, pricingData.hostEarnings.excessMileage.upperBound), pricingData.hostEarnings.excessMileage.lowerBound));
38
+ };
39
+ export const getEmptyMatrix = () => {
40
+ return cloneDeep(EMPTY_MATRIX);
41
+ };
42
+ export const sortMatrix = (unorderedMatrix) => {
43
+ const ordered = {};
44
+ const plans = getVehicleDataVariant(PLANS, 'car');
45
+ const mileagePackages = getVehicleDataVariant(MILEAGE_PACKAGES, 'car');
46
+ for (const plan of plans) {
47
+ for (const mileagePackage of mileagePackages) {
48
+ if (!ordered[plan]) {
49
+ ordered[plan] = {};
50
+ }
51
+ ordered[plan][mileagePackage] = unorderedMatrix[plan]?.[mileagePackage];
52
+ }
53
+ }
54
+ return ordered;
55
+ };
56
+ const round = (number) => {
57
+ return Math.round(number * 100) / 100;
58
+ };
59
+ /**
60
+ * Generates the flux price matrix
61
+ *
62
+ * @param baseline
63
+ * @param dealershipPriceMatrix
64
+ * @param fluxTakeCoefficient
65
+ * @param customMileagePackage
66
+ * @param customLitePicing
67
+ *
68
+ * @see https://docs.google.com/spreadsheets/d/1lYYMdQgnzG53lCGf_dKJY9pEue5suJuo3O3-zegIOT0/edit#gid=819271234
69
+ */
70
+ export const getFluxPiceMatrix = (pricingData, vehicleType, baseline, dealershipPriceMatrix, tier, flatPricing, customMileagePackage, customLitePicing) => {
71
+ // Let's not mutate percentages
72
+ const newMatrix = cloneDeep(pricingData.hostEarnings.matrixCoefficients);
73
+ const plans = Object.keys(newMatrix);
74
+ if (flatPricing) {
75
+ // if flat pricing, we order the plans by 36 months first, then the rest,
76
+ // that's because we perform the operations on the same matrix, so 36 is the base
77
+ // and should influence th rest of the plans
78
+ plans.sort((a, _b) => {
79
+ if (a === 'plan36') {
80
+ return -1;
81
+ }
82
+ return 0;
83
+ });
84
+ }
85
+ // This code is highly vulnerable to order. The order **MUST** be sorted,
86
+ // this is because it edits "lite" plan, then the other plans depend on the outcome of this one.
87
+ // TODO: Fix this code so that it sorts lite package first.
88
+ for (const plan of plans) {
89
+ const mileagePackages = Object.keys(newMatrix[plan]);
90
+ mileagePackages.sort((a) => {
91
+ if (a === 'lite') {
92
+ return -1;
93
+ }
94
+ return 0;
95
+ });
96
+ const baseMileagePackage = vehicleType === 'motorcycle' ? 'standard' : 'lite';
97
+ for (const mileagePackage of mileagePackages) {
98
+ const targetPlan = flatPricing ? 'plan36' : plan;
99
+ if (plan === 'plan1') {
100
+ if (tier === 'tierCustom') {
101
+ newMatrix[plan][mileagePackage] = 0;
102
+ continue;
103
+ }
104
+ newMatrix[plan][mileagePackage] = Number(pricingData.fluxPricing.ultraTiers[tier]);
105
+ continue;
106
+ }
107
+ if (mileagePackage === baseMileagePackage) {
108
+ const baseMileagePackagePrice = Math.max(baseline * pricingData.fluxPricing.matrixCoefficients[targetPlan], Number(dealershipPriceMatrix[targetPlan][baseMileagePackage]) +
109
+ pricingData.fluxPricing.minFluxTake);
110
+ const custom = customLitePicing?.[plan];
111
+ newMatrix[plan][baseMileagePackage] = decimals(typeof custom === 'undefined' ? baseMileagePackagePrice : custom);
112
+ continue;
113
+ }
114
+ const mileagePackageAdd = baseline *
115
+ pricingData.fluxPricing.matrixCoefficients.add[mileagePackage];
116
+ const cutomMileagePackageAdd = customMileagePackage?.[mileagePackage];
117
+ const basePlanMileagePackagePricing = newMatrix[targetPlan][baseMileagePackage];
118
+ newMatrix[plan][mileagePackage] = decimals(round(basePlanMileagePackagePricing +
119
+ (cutomMileagePackageAdd || mileagePackageAdd)));
120
+ }
121
+ }
122
+ return sortMatrix(newMatrix);
123
+ };
124
+ export const updateMatrixWithCustomPackages = (matrix, add) => {
125
+ const newMatrix = cloneDeep(matrix);
126
+ const plans = getVehicleDataVariant(PLANS, 'car');
127
+ const mileagePackages = getVehicleDataVariant(MILEAGE_PACKAGES, 'car');
128
+ const baseMileagePackage = mileagePackages[0];
129
+ for (const plan of plans) {
130
+ for (const mileagePackage of mileagePackages) {
131
+ if (mileagePackage === baseMileagePackage) {
132
+ continue;
133
+ }
134
+ const toAdd = add[mileagePackage];
135
+ if (toAdd) {
136
+ newMatrix[plan][mileagePackage] =
137
+ (newMatrix[plan]?.[baseMileagePackage] || 0) + toAdd;
138
+ }
139
+ }
140
+ }
141
+ return newMatrix;
142
+ };
143
+ export const getFluxExcessMileage = (pricingData, baseline) => {
144
+ return decimals(Math.max(Math.min(baseline * pricingData.fluxPricing.matrixCoefficients.excessMileage, pricingData.fluxPricing.excessMileage.upperBound), pricingData.fluxPricing.excessMileage.lowerBound));
145
+ };
146
+ /**
147
+ *
148
+ * @param baseline
149
+ * @param coefficient
150
+ *
151
+ * @see https://docs.google.com/spreadsheets/d/1lYYMdQgnzG53lCGf_dKJY9pEue5suJuo3O3-zegIOT0/edit#gid=819271234
152
+ */
153
+ export const getStartFeeMatrix = (pricingData, baseline, flatPricing) => {
154
+ // Let's not mutate percentages
155
+ const newMatrix = cloneDeep(pricingData.startFee.matrixCoefficients);
156
+ const baseCoefficients = cloneDeep(newMatrix.plan36);
157
+ const plans = Object.keys(newMatrix);
158
+ for (const plan of plans) {
159
+ const mileagePackages = Object.keys(newMatrix[plan]);
160
+ for (const mileagePackage of mileagePackages) {
161
+ newMatrix[plan][mileagePackage] = round(baseline *
162
+ (flatPricing
163
+ ? baseCoefficients[mileagePackage]
164
+ : newMatrix[plan][mileagePackage]));
165
+ }
166
+ }
167
+ return sortMatrix(newMatrix);
168
+ };
169
+ //# sourceMappingURL=index.js.map