@voyantjs/storefront 0.49.0 → 0.50.0
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/README.md +36 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/routes-admin.d.ts +192 -0
- package/dist/routes-admin.d.ts.map +1 -0
- package/dist/routes-admin.js +28 -0
- package/dist/routes-public.d.ts +550 -15
- package/dist/routes-public.d.ts.map +1 -1
- package/dist/routes-public.js +68 -3
- package/dist/service-booking-session-bootstrap.d.ts +227 -0
- package/dist/service-booking-session-bootstrap.d.ts.map +1 -0
- package/dist/service-booking-session-bootstrap.js +297 -0
- package/dist/service-departures.d.ts +301 -2
- package/dist/service-departures.d.ts.map +1 -1
- package/dist/service-departures.js +406 -42
- package/dist/service.d.ts +600 -9
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +113 -2
- package/dist/validation-settings.d.ts +489 -0
- package/dist/validation-settings.d.ts.map +1 -0
- package/dist/validation-settings.js +205 -0
- package/dist/validation.d.ts +1260 -380
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +173 -126
- package/package.json +17 -10
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bootstrapStorefrontBookingSession, } from "./service-booking-session-bootstrap.js";
|
|
1
2
|
import { getStorefrontDeparture, getStorefrontDepartureItinerary, getStorefrontProductAvailabilitySummary, getStorefrontProductExtensions, listStorefrontProductDepartures, previewStorefrontDeparturePrice, } from "./service-departures.js";
|
|
2
3
|
import { createStorefrontLeadSignal, subscribeStorefrontNewsletter, } from "./service-intake.js";
|
|
3
4
|
import { evaluateStorefrontTransportEligibility } from "./service-transport-eligibility.js";
|
|
@@ -29,22 +30,78 @@ function normalizePaymentMethod(method) {
|
|
|
29
30
|
enabled: method.enabled,
|
|
30
31
|
};
|
|
31
32
|
}
|
|
33
|
+
function normalizePaymentSchedule(schedule) {
|
|
34
|
+
if (!schedule)
|
|
35
|
+
return null;
|
|
36
|
+
return {
|
|
37
|
+
depositPercent: schedule.depositPercent ?? null,
|
|
38
|
+
balanceDueDaysBeforeDeparture: schedule.balanceDueDaysBeforeDeparture ?? null,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function normalizeBankTransfer(bankTransfer) {
|
|
42
|
+
if (!bankTransfer)
|
|
43
|
+
return null;
|
|
44
|
+
return {
|
|
45
|
+
accountHolder: bankTransfer.accountHolder ?? null,
|
|
46
|
+
bankName: bankTransfer.bankName ?? null,
|
|
47
|
+
iban: bankTransfer.iban ?? null,
|
|
48
|
+
bic: bankTransfer.bic ?? null,
|
|
49
|
+
paymentReference: bankTransfer.paymentReference ?? null,
|
|
50
|
+
instructions: bankTransfer.instructions ?? null,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function mergePaymentSchedule(current, patch) {
|
|
54
|
+
if (patch === null)
|
|
55
|
+
return null;
|
|
56
|
+
return {
|
|
57
|
+
...(current ?? {
|
|
58
|
+
depositPercent: null,
|
|
59
|
+
balanceDueDaysBeforeDeparture: null,
|
|
60
|
+
}),
|
|
61
|
+
...patch,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function mergeBankTransfer(current, patch) {
|
|
65
|
+
if (patch === null)
|
|
66
|
+
return null;
|
|
67
|
+
return {
|
|
68
|
+
...(current ?? {
|
|
69
|
+
accountHolder: null,
|
|
70
|
+
bankName: null,
|
|
71
|
+
iban: null,
|
|
72
|
+
bic: null,
|
|
73
|
+
paymentReference: null,
|
|
74
|
+
instructions: null,
|
|
75
|
+
}),
|
|
76
|
+
...patch,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
32
79
|
export function resolveStorefrontSettings(input) {
|
|
33
80
|
const parsed = storefrontSettingsInputSchema.parse(input ?? {});
|
|
34
81
|
return storefrontSettingsSchema.parse({
|
|
35
82
|
branding: {
|
|
36
83
|
logoUrl: parsed.branding?.logoUrl ?? null,
|
|
84
|
+
faviconUrl: parsed.branding?.faviconUrl ?? null,
|
|
85
|
+
brandMarkUrl: parsed.branding?.brandMarkUrl ?? null,
|
|
86
|
+
primaryColor: parsed.branding?.primaryColor ?? null,
|
|
87
|
+
accentColor: parsed.branding?.accentColor ?? null,
|
|
37
88
|
supportedLanguages: parsed.branding?.supportedLanguages ?? [],
|
|
38
89
|
},
|
|
39
90
|
support: {
|
|
40
91
|
email: parsed.support?.email ?? null,
|
|
41
92
|
phone: parsed.support?.phone ?? null,
|
|
93
|
+
links: parsed.support?.links ?? [],
|
|
42
94
|
},
|
|
43
95
|
legal: {
|
|
44
96
|
termsUrl: parsed.legal?.termsUrl ?? null,
|
|
45
97
|
privacyUrl: parsed.legal?.privacyUrl ?? null,
|
|
98
|
+
cancellationUrl: parsed.legal?.cancellationUrl ?? null,
|
|
46
99
|
defaultContractTemplateId: parsed.legal?.defaultContractTemplateId ?? null,
|
|
47
100
|
},
|
|
101
|
+
localization: {
|
|
102
|
+
defaultLocale: parsed.localization?.defaultLocale ?? null,
|
|
103
|
+
currencyDisplay: parsed.localization?.currencyDisplay ?? "code",
|
|
104
|
+
},
|
|
48
105
|
forms: {
|
|
49
106
|
billing: {
|
|
50
107
|
fields: (parsed.forms?.billing?.fields ?? []).map(normalizeField),
|
|
@@ -56,9 +113,43 @@ export function resolveStorefrontSettings(input) {
|
|
|
56
113
|
payment: {
|
|
57
114
|
defaultMethod: parsed.payment?.defaultMethod ?? null,
|
|
58
115
|
methods: (parsed.payment?.methods ?? []).map(normalizePaymentMethod),
|
|
116
|
+
defaultSchedule: normalizePaymentSchedule(parsed.payment?.defaultSchedule ?? null),
|
|
117
|
+
bankTransfer: normalizeBankTransfer(parsed.payment?.bankTransfer ?? null),
|
|
59
118
|
},
|
|
60
119
|
});
|
|
61
120
|
}
|
|
121
|
+
export function mergeStorefrontSettingsPatch(current, patch) {
|
|
122
|
+
return resolveStorefrontSettings({
|
|
123
|
+
branding: patch.branding ? { ...current.branding, ...patch.branding } : current.branding,
|
|
124
|
+
support: patch.support ? { ...current.support, ...patch.support } : current.support,
|
|
125
|
+
legal: patch.legal ? { ...current.legal, ...patch.legal } : current.legal,
|
|
126
|
+
localization: patch.localization
|
|
127
|
+
? { ...current.localization, ...patch.localization }
|
|
128
|
+
: current.localization,
|
|
129
|
+
forms: patch.forms
|
|
130
|
+
? {
|
|
131
|
+
billing: patch.forms.billing
|
|
132
|
+
? { ...current.forms.billing, ...patch.forms.billing }
|
|
133
|
+
: current.forms.billing,
|
|
134
|
+
travelers: patch.forms.travelers
|
|
135
|
+
? { ...current.forms.travelers, ...patch.forms.travelers }
|
|
136
|
+
: current.forms.travelers,
|
|
137
|
+
}
|
|
138
|
+
: current.forms,
|
|
139
|
+
payment: patch.payment
|
|
140
|
+
? {
|
|
141
|
+
...current.payment,
|
|
142
|
+
...patch.payment,
|
|
143
|
+
defaultSchedule: patch.payment.defaultSchedule === undefined
|
|
144
|
+
? current.payment.defaultSchedule
|
|
145
|
+
: mergePaymentSchedule(current.payment.defaultSchedule, patch.payment.defaultSchedule),
|
|
146
|
+
bankTransfer: patch.payment.bankTransfer === undefined
|
|
147
|
+
? current.payment.bankTransfer
|
|
148
|
+
: mergeBankTransfer(current.payment.bankTransfer, patch.payment.bankTransfer),
|
|
149
|
+
}
|
|
150
|
+
: current.payment,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
62
153
|
export function createStorefrontService(options) {
|
|
63
154
|
const settings = resolveStorefrontSettings(options?.settings);
|
|
64
155
|
async function resolveSettings(context = {}) {
|
|
@@ -67,6 +158,14 @@ export function createStorefrontService(options) {
|
|
|
67
158
|
}
|
|
68
159
|
return resolveStorefrontSettings(await options.resolveSettings(context));
|
|
69
160
|
}
|
|
161
|
+
async function updateSettings(patch, context = {}) {
|
|
162
|
+
if (!options?.updateSettings) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const current = await resolveSettings(context);
|
|
166
|
+
const next = mergeStorefrontSettingsPatch(current, patch);
|
|
167
|
+
return resolveStorefrontSettings(await options.updateSettings(next, context));
|
|
168
|
+
}
|
|
70
169
|
async function resolveOffers(context = {}) {
|
|
71
170
|
return (await options?.resolveOffers?.(context)) ?? options?.offers;
|
|
72
171
|
}
|
|
@@ -83,14 +182,23 @@ export function createStorefrontService(options) {
|
|
|
83
182
|
return settings;
|
|
84
183
|
},
|
|
85
184
|
resolveSettings,
|
|
185
|
+
updateSettings,
|
|
86
186
|
getDeparture(db, departureId) {
|
|
87
187
|
return getStorefrontDeparture(db, departureId);
|
|
88
188
|
},
|
|
89
189
|
listProductDepartures(db, productId, query) {
|
|
90
190
|
return listStorefrontProductDepartures(db, productId, query);
|
|
91
191
|
},
|
|
92
|
-
previewDeparturePrice(db, departureId, input) {
|
|
93
|
-
|
|
192
|
+
previewDeparturePrice(db, departureId, input, context = {}) {
|
|
193
|
+
const offerContext = { ...context, db: context.db ?? db };
|
|
194
|
+
return previewStorefrontDeparturePrice(db, departureId, input, {
|
|
195
|
+
listApplicableOffers: async (offerInput) => {
|
|
196
|
+
const offers = await resolveOffers(offerContext)?.then((resolvers) => resolvers?.listApplicableOffers?.({ ...offerInput, ...offerContext }));
|
|
197
|
+
return offers ?? [];
|
|
198
|
+
},
|
|
199
|
+
applyOffer: async (offerInput) => (await resolveOffers(offerContext)?.then((resolvers) => resolvers?.applyOffer?.({ ...offerInput, ...offerContext }))) ?? null,
|
|
200
|
+
redeemOffer: async (offerInput) => (await resolveOffers(offerContext)?.then((resolvers) => resolvers?.redeemOffer?.({ ...offerInput, ...offerContext }))) ?? null,
|
|
201
|
+
});
|
|
94
202
|
},
|
|
95
203
|
getProductExtensions(db, productId, optionId) {
|
|
96
204
|
return getStorefrontProductExtensions(db, productId, optionId);
|
|
@@ -124,6 +232,9 @@ export function createStorefrontService(options) {
|
|
|
124
232
|
rules,
|
|
125
233
|
});
|
|
126
234
|
},
|
|
235
|
+
async bootstrapBookingSession(context, input, userId) {
|
|
236
|
+
return bootstrapStorefrontBookingSession(context, input, options?.bookingSessionBootstrap, userId);
|
|
237
|
+
},
|
|
127
238
|
async listApplicableOffers(input) {
|
|
128
239
|
const { context, ...offerInput } = input;
|
|
129
240
|
const offers = await resolveOffers(context)?.then((resolvers) => resolvers?.listApplicableOffers?.({ ...offerInput, ...(context ?? {}) }));
|