@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.
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
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;AAEjE,OAAO,EAEL,KAAK,wCAAwC,EAC9C,MAAM,wCAAwC,CAAA;AAS/C,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAE7B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,KAAK,sCAAsC,EAC3C,KAAK,4BAA4B,EACjC,KAAK,oCAAoC,EAGzC,KAAK,yBAAyB,EAC9B,KAAK,kCAAkC,EACvC,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAI/B,KAAK,yCAAyC,EAC9C,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EAGlC,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,mCAAmC,EACnC,oCAAoC,EACpC,uCAAuC,EACxC,MAAM,uCAAuC,CAAA;AAE9C,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,uBAAuB,CAAA;IAClC,eAAe,CAAC,EAAE,CAChB,OAAO,EAAE,wBAAwB,KAC9B,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAAA;IAC/D,cAAc,CAAC,EAAE,CACf,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,wBAAwB,KAE/B,OAAO,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,GACrD,uBAAuB,GACvB,kBAAkB,CAAA;IACtB,MAAM,CAAC,EAAE,wBAAwB,CAAA;IACjC,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,wBAAwB,KAE/B,OAAO,CAAC,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAC,GACpD,wBAAwB,GACxB,IAAI,GACJ,SAAS,CAAA;IACb,yBAAyB,CAAC,EAAE,uCAAuC,EAAE,CAAA;IACrE,gCAAgC,CAAC,EAAE,CACjC,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAA;QACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC7B,GAAG,wBAAwB,KAE1B,OAAO,CAAC,uCAAuC,EAAE,CAAC,GAClD,uCAAuC,EAAE,CAAA;IAC7C,MAAM,CAAC,EAAE,uBAAuB,CAAA;IAChC,uBAAuB,CAAC,EAAE,wCAAwC,CAAA;CACnE;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,CAAC,EAAE,kBAAkB,CAAA;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,oBAAoB,CAAC,EAAE,CACrB,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GAAG,wBAAwB,KACzB,OAAO,CAAC,0BAA0B,EAAE,CAAC,GAAG,0BAA0B,EAAE,CAAA;IACzE,cAAc,CAAC,EAAE,CACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GAAG,wBAAwB,KACzB,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,GAAG,0BAA0B,GAAG,IAAI,CAAA;IACnF,UAAU,CAAC,EAAE,CACX,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,yBAAyB,CAAA;KAChC,GAAG,wBAAwB,KACzB,OAAO,CAAC,6BAA6B,CAAC,GAAG,6BAA6B,CAAA;IAC3E,WAAW,CAAC,EAAE,CACZ,KAAK,EAAE;QACL,IAAI,EAAE,0BAA0B,CAAA;KACjC,GAAG,wBAAwB,KACzB,OAAO,CAAC,6BAA6B,CAAC,GAAG,6BAA6B,CAAA;CAC5E;AA8FD,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,kBAAkB,CA0C7F;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,4BAA4B,GAClC,kBAAkB,CAoCpB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,wBAAwB;mBA4DvD,kBAAkB;gCAzDK,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BASvD,4BAA4B,YAC1B,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoDhB,kBAAkB,eAAe,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAIlD,kBAAkB,aACX,MAAM,SACV,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAK/B,kBAAkB,eACT,MAAM,SACZ,oCAAoC,YAClC,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAoBV,kBAAkB,aAAa,MAAM,aAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAI3E,kBAAkB,aACX,MAAM,SACV,yCAAyC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAK5C,kBAAkB,SACf;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;8CAIH;QAC9C,WAAW,EAAE,MAAM,CAAA;QACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,IAAI,EAAE,mCAAmC,CAAA;QACzC,OAAO,CAAC,EAAE,wBAAwB,CAAA;KACnC,GAAG,OAAO,CAAC,oCAAoC,CAAC;qCA6BtC,wBAAwB,GAAG;QAAE,EAAE,EAAE,kBAAkB,CAAA;KAAE,SACvD,sCAAsC,WACpC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCASiB;QAChC,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,CAAC,EAAE,wBAAwB,CAAA;KACnC,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC;0BAOb;QAC1B,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,CAAC,EAAE,wBAAwB,CAAA;KACnC,GAAG,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;sBAQtB;QACtB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,yBAAyB,CAAA;QAC/B,OAAO,CAAC,EAAE,wBAAwB,CAAA;KACnC,GAAG,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC;uBAQxB;QACvB,IAAI,EAAE,0BAA0B,CAAA;QAChC,OAAO,CAAC,EAAE,wBAAwB,CAAA;KACnC,GAAG,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC;8BA1J7C;QACE,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,yBAAyB,CAAA;QAC/B,OAAO,EAAE,wBAAwB,CAAA;KAClC,GACD;QACE,IAAI,EAAE,YAAY,CAAA;QAClB,IAAI,EAAE,kCAAkC,CAAA;QACxC,OAAO,EAAE,wBAAwB,CAAA;KAClC;sBA0Ja;QAAE,IAAI,EAAE,yBAAyB,CAAC;QAAC,OAAO,EAAE,wBAAwB,CAAA;KAAE;;;;;;;;+BAG7D;QACzB,IAAI,EAAE,kCAAkC,CAAA;QACxC,OAAO,EAAE,wBAAwB,CAAA;KAClC;;;;;;;;;EAOJ;AAED,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,CAAA"}
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
- return previewStorefrontDeparturePrice(db, departureId, input);
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 ?? {}) }));