@bash-app/bash-common 30.371.0 → 30.374.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.
Files changed (37) hide show
  1. package/dist/definitions.d.ts +6 -0
  2. package/dist/definitions.d.ts.map +1 -1
  3. package/dist/definitions.js.map +1 -1
  4. package/dist/utils/__tests__/organizationEntitlements.test.js +66 -27
  5. package/dist/utils/__tests__/organizationEntitlements.test.js.map +1 -1
  6. package/dist/utils/luxonUtils.d.ts +7 -7
  7. package/dist/utils/luxonUtils.d.ts.map +1 -1
  8. package/dist/utils/organizationEntitlements.d.ts +23 -18
  9. package/dist/utils/organizationEntitlements.d.ts.map +1 -1
  10. package/dist/utils/organizationEntitlements.js +37 -22
  11. package/dist/utils/organizationEntitlements.js.map +1 -1
  12. package/dist/utils/service/__tests__/apiServiceBookingApiUtils.test.js +66 -1
  13. package/dist/utils/service/__tests__/apiServiceBookingApiUtils.test.js.map +1 -1
  14. package/dist/utils/service/__tests__/frontendServiceBookingUtils.test.d.ts +2 -0
  15. package/dist/utils/service/__tests__/frontendServiceBookingUtils.test.d.ts.map +1 -0
  16. package/dist/utils/service/__tests__/frontendServiceBookingUtils.test.js +165 -0
  17. package/dist/utils/service/__tests__/frontendServiceBookingUtils.test.js.map +1 -0
  18. package/dist/utils/service/apiServiceBookingApiUtils.d.ts +5 -3
  19. package/dist/utils/service/apiServiceBookingApiUtils.d.ts.map +1 -1
  20. package/dist/utils/service/apiServiceBookingApiUtils.js +30 -1
  21. package/dist/utils/service/apiServiceBookingApiUtils.js.map +1 -1
  22. package/dist/utils/service/frontendServiceBookingUtils.d.ts +10 -4
  23. package/dist/utils/service/frontendServiceBookingUtils.d.ts.map +1 -1
  24. package/dist/utils/service/frontendServiceBookingUtils.js +16 -3
  25. package/dist/utils/service/frontendServiceBookingUtils.js.map +1 -1
  26. package/dist/utils/service/serviceBookingTypes.d.ts +2 -2
  27. package/dist/utils/service/serviceBookingTypes.d.ts.map +1 -1
  28. package/package.json +1 -1
  29. package/prisma/schema.prisma +10 -7
  30. package/src/definitions.ts +7 -0
  31. package/src/utils/__tests__/organizationEntitlements.test.ts +79 -30
  32. package/src/utils/organizationEntitlements.ts +44 -27
  33. package/src/utils/service/__tests__/apiServiceBookingApiUtils.test.ts +102 -2
  34. package/src/utils/service/__tests__/frontendServiceBookingUtils.test.ts +217 -0
  35. package/src/utils/service/apiServiceBookingApiUtils.ts +53 -1
  36. package/src/utils/service/frontendServiceBookingUtils.ts +33 -2
  37. package/src/utils/service/serviceBookingTypes.ts +2 -1
@@ -12,27 +12,30 @@ export interface OrganizationEntitlementInput {
12
12
  subscriptionStatus?: string | null;
13
13
  /**
14
14
  * True only when ops provisioned Enterprise via a signed deal (admin
15
- * enterprise-provisioning endpoint). Self-serve Stripe checkout can also set
16
- * subscriptionTier="Enterprise" but never sets this. Optional/undefined is
17
- * treated as false so legacy call sites that don't select this field fail
18
- * closed on the sales-gated surface rather than open.
15
+ * enterprise-provisioning endpoint) the only way to reach
16
+ * subscriptionTier="Enterprise" (see docs/ENTERPRISE-B2B-SALES-PLAYBOOK.md;
17
+ * self-serve checkout rejects Enterprise). Optional/undefined is treated as
18
+ * false so legacy call sites that don't select this field fail closed on the
19
+ * sales-gated surface rather than open.
19
20
  */
20
21
  enterpriseSalesProvisioned?: boolean | null;
21
22
  }
22
23
  /**
23
- * Vanity subdomains ({slug}.bash.community) and custom domains (white-label)
24
- * are self-serve-eligible Enterprise perks available whether Enterprise was
25
- * bought via self-serve Stripe checkout or a sales-negotiated deal.
24
+ * Vanity subdomains ({slug}.bash.community) are a Growth-tier-and-up perk, not
25
+ * Enterprise-only: unlike custom domains, granting one costs nothing extra
26
+ * (a slug lookup against the existing bash.community CloudFront distribution,
27
+ * no per-org AWS resources) — it's a cheap, visible upgrade incentive to dangle
28
+ * in front of Starter orgs. See {@link organizationHasCustomDomainAccess} for
29
+ * the pricier, Enterprise-only white-label surface.
26
30
  */
27
31
  export declare function organizationHasVanitySubdomain(org: OrganizationEntitlementInput | null | undefined): boolean;
28
32
  /**
29
33
  * Shared gate for the enterprise platform surface: org-scoped audit logs,
30
34
  * SSO/identity setup, procurement approval policy, API keys, webhooks, and
31
- * third-party integrations (Mailchimp/Salesforce). Unlike the white-label
32
- * perks above, this surface requires a sales-negotiated deal
33
- * (`enterpriseSalesProvisioned`) self-serve $495/mo checkout alone does not
34
- * unlock SSO, compliance, procurement, or API access, since those typically
35
- * involve a security review or contract terms sales owns.
35
+ * third-party integrations (Mailchimp/Salesforce). Requires the explicit
36
+ * `enterpriseSalesProvisioned` flag set by ops after a signed deal, since SSO,
37
+ * compliance, procurement, and API access typically involve a security review
38
+ * or contract terms sales owns.
36
39
  */
37
40
  export declare function organizationHasEnterprisePlatformAccess(org: OrganizationEntitlementInput | null | undefined): boolean;
38
41
  /** Org-admin audit log viewer + CSV export. */
@@ -48,12 +51,14 @@ export declare function organizationHasComplianceAccess(org: OrganizationEntitle
48
51
  /**
49
52
  * Custom domains (white-label tier): real DNS (e.g. members.acme.com) provisioned
50
53
  * via AWS CloudFront SaaS Manager Distribution Tenants, plus the "Powered by Bash"
51
- * removal toggle. Same Enterprise + active/trialing gate as
52
- * {@link organizationHasVanitySubdomain} for MVP reuse the existing tier rather
53
- * than invent a new pricing tier now. A dedicated "White-label" tier is a
54
- * fast-follow if sales needs separate pricing. Self-serve-eligible: does NOT
55
- * require {@link organizationHasEnterprisePlatformAccess}'s
56
- * `enterpriseSalesProvisioned` flag.
54
+ * removal toggle. Unlike {@link organizationHasVanitySubdomain}, this needs a real
55
+ * per-org CloudFront Distribution Tenant + managed cert + the org's own DNS work —
56
+ * actual infra cost and complexity per org so it stays Enterprise-only (today
57
+ * always sales-provisioned, since self-serve Enterprise checkout is blocked; see
58
+ * docs/ENTERPRISE-B2B-SALES-PLAYBOOK.md). Does NOT require
59
+ * {@link organizationHasEnterprisePlatformAccess}'s `enterpriseSalesProvisioned`
60
+ * flag, so a fast-follow self-serve Enterprise checkout could unlock this without
61
+ * the sales-gated platform surface (SSO, audit logs, procurement, compliance, API).
57
62
  */
58
63
  export declare function organizationHasCustomDomainAccess(org: OrganizationEntitlementInput | null | undefined): boolean;
59
64
  //# sourceMappingURL=organizationEntitlements.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"organizationEntitlements.d.ts","sourceRoot":"","sources":["../../src/utils/organizationEntitlements.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,gCAAgC,iCAGnC,CAAC;AAEX,MAAM,WAAW,4BAA4B;IAC3C,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;;;OAMG;IACH,0BAA0B,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7C;AAgBD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED;;;;;;;;GAQG;AACH,wBAAgB,uCAAuC,CACrD,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED,+CAA+C;AAC/C,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED,0BAA0B;AAC1B,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED,+DAA+D;AAC/D,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED,+EAA+E;AAC/E,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET"}
1
+ {"version":3,"file":"organizationEntitlements.d.ts","sourceRoot":"","sources":["../../src/utils/organizationEntitlements.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,gCAAgC,iCAGnC,CAAC;AAEX,MAAM,WAAW,4BAA4B;IAC3C,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;;;;OAOG;IACH,0BAA0B,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7C;AA4BD;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CACrD,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED,+CAA+C;AAC/C,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED,0BAA0B;AAC1B,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED,+DAA+D;AAC/D,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED,+EAA+E;AAC/E,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,4BAA4B,GAAG,IAAI,GAAG,SAAS,GACnD,OAAO,CAET"}
@@ -10,34 +10,47 @@ export const ACTIVE_ORG_SUBSCRIPTION_STATUSES = [
10
10
  "Active",
11
11
  "Trialing",
12
12
  ];
13
+ // Treat a missing status as active: legacy/ops-provisioned orgs may predate
14
+ // subscriptionStatus being populated, and we don't want to silently drop
15
+ // their entitlements.
16
+ function isActiveOrTrialingStatus(status) {
17
+ if (status == null)
18
+ return true;
19
+ return ACTIVE_ORG_SUBSCRIPTION_STATUSES.includes(status);
20
+ }
13
21
  function hasActiveEnterpriseTier(org) {
14
22
  if (!org)
15
23
  return false;
16
24
  if (org.subscriptionTier !== "Enterprise")
17
25
  return false;
18
- // Treat a missing status as active: legacy/ops-provisioned Enterprise orgs may
19
- // predate subscriptionStatus being populated, and we don't want to silently
20
- // drop their vanity domain.
21
- if (org.subscriptionStatus == null)
22
- return true;
23
- return ACTIVE_ORG_SUBSCRIPTION_STATUSES.includes(org.subscriptionStatus);
26
+ return isActiveOrTrialingStatus(org.subscriptionStatus);
27
+ }
28
+ function hasActiveGrowthOrAboveTier(org) {
29
+ if (!org)
30
+ return false;
31
+ if (org.subscriptionTier !== "Growth" && org.subscriptionTier !== "Enterprise") {
32
+ return false;
33
+ }
34
+ return isActiveOrTrialingStatus(org.subscriptionStatus);
24
35
  }
25
36
  /**
26
- * Vanity subdomains ({slug}.bash.community) and custom domains (white-label)
27
- * are self-serve-eligible Enterprise perks available whether Enterprise was
28
- * bought via self-serve Stripe checkout or a sales-negotiated deal.
37
+ * Vanity subdomains ({slug}.bash.community) are a Growth-tier-and-up perk, not
38
+ * Enterprise-only: unlike custom domains, granting one costs nothing extra
39
+ * (a slug lookup against the existing bash.community CloudFront distribution,
40
+ * no per-org AWS resources) — it's a cheap, visible upgrade incentive to dangle
41
+ * in front of Starter orgs. See {@link organizationHasCustomDomainAccess} for
42
+ * the pricier, Enterprise-only white-label surface.
29
43
  */
30
44
  export function organizationHasVanitySubdomain(org) {
31
- return hasActiveEnterpriseTier(org);
45
+ return hasActiveGrowthOrAboveTier(org);
32
46
  }
33
47
  /**
34
48
  * Shared gate for the enterprise platform surface: org-scoped audit logs,
35
49
  * SSO/identity setup, procurement approval policy, API keys, webhooks, and
36
- * third-party integrations (Mailchimp/Salesforce). Unlike the white-label
37
- * perks above, this surface requires a sales-negotiated deal
38
- * (`enterpriseSalesProvisioned`) self-serve $495/mo checkout alone does not
39
- * unlock SSO, compliance, procurement, or API access, since those typically
40
- * involve a security review or contract terms sales owns.
50
+ * third-party integrations (Mailchimp/Salesforce). Requires the explicit
51
+ * `enterpriseSalesProvisioned` flag set by ops after a signed deal, since SSO,
52
+ * compliance, procurement, and API access typically involve a security review
53
+ * or contract terms sales owns.
41
54
  */
42
55
  export function organizationHasEnterprisePlatformAccess(org) {
43
56
  return hasActiveEnterpriseTier(org) && org?.enterpriseSalesProvisioned === true;
@@ -65,14 +78,16 @@ export function organizationHasComplianceAccess(org) {
65
78
  /**
66
79
  * Custom domains (white-label tier): real DNS (e.g. members.acme.com) provisioned
67
80
  * via AWS CloudFront SaaS Manager Distribution Tenants, plus the "Powered by Bash"
68
- * removal toggle. Same Enterprise + active/trialing gate as
69
- * {@link organizationHasVanitySubdomain} for MVP reuse the existing tier rather
70
- * than invent a new pricing tier now. A dedicated "White-label" tier is a
71
- * fast-follow if sales needs separate pricing. Self-serve-eligible: does NOT
72
- * require {@link organizationHasEnterprisePlatformAccess}'s
73
- * `enterpriseSalesProvisioned` flag.
81
+ * removal toggle. Unlike {@link organizationHasVanitySubdomain}, this needs a real
82
+ * per-org CloudFront Distribution Tenant + managed cert + the org's own DNS work —
83
+ * actual infra cost and complexity per org so it stays Enterprise-only (today
84
+ * always sales-provisioned, since self-serve Enterprise checkout is blocked; see
85
+ * docs/ENTERPRISE-B2B-SALES-PLAYBOOK.md). Does NOT require
86
+ * {@link organizationHasEnterprisePlatformAccess}'s `enterpriseSalesProvisioned`
87
+ * flag, so a fast-follow self-serve Enterprise checkout could unlock this without
88
+ * the sales-gated platform surface (SSO, audit logs, procurement, compliance, API).
74
89
  */
75
90
  export function organizationHasCustomDomainAccess(org) {
76
- return organizationHasVanitySubdomain(org);
91
+ return hasActiveEnterpriseTier(org);
77
92
  }
78
93
  //# sourceMappingURL=organizationEntitlements.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"organizationEntitlements.js","sourceRoot":"","sources":["../../src/utils/organizationEntitlements.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,QAAQ;IACR,UAAU;CACF,CAAC;AAeX,SAAS,uBAAuB,CAC9B,GAAoD;IAEpD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,GAAG,CAAC,gBAAgB,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IACxD,+EAA+E;IAC/E,4EAA4E;IAC5E,4BAA4B;IAC5B,IAAI,GAAG,CAAC,kBAAkB,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAChD,OAAQ,gCAAsD,CAAC,QAAQ,CACrE,GAAG,CAAC,kBAAkB,CACvB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,GAAoD;IAEpD,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uCAAuC,CACrD,GAAoD;IAEpD,OAAO,uBAAuB,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,0BAA0B,KAAK,IAAI,CAAC;AAClF,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,6BAA6B,CAC3C,GAAoD;IAEpD,OAAO,uCAAuC,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,wBAAwB,CACtC,GAAoD;IAEpD,OAAO,uCAAuC,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,gCAAgC,CAC9C,GAAoD;IAEpD,OAAO,uCAAuC,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,wBAAwB,CACtC,GAAoD;IAEpD,OAAO,uCAAuC,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,+BAA+B,CAC7C,GAAoD;IAEpD,OAAO,uCAAuC,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iCAAiC,CAC/C,GAAoD;IAEpD,OAAO,8BAA8B,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"organizationEntitlements.js","sourceRoot":"","sources":["../../src/utils/organizationEntitlements.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,QAAQ;IACR,UAAU;CACF,CAAC;AAgBX,4EAA4E;AAC5E,yEAAyE;AACzE,sBAAsB;AACtB,SAAS,wBAAwB,CAAC,MAAsB;IACtD,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAQ,gCAAsD,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,uBAAuB,CAC9B,GAAoD;IAEpD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,GAAG,CAAC,gBAAgB,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,wBAAwB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,0BAA0B,CACjC,GAAoD;IAEpD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,GAAG,CAAC,gBAAgB,KAAK,QAAQ,IAAI,GAAG,CAAC,gBAAgB,KAAK,YAAY,EAAE,CAAC;QAC/E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,wBAAwB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAC5C,GAAoD;IAEpD,OAAO,0BAA0B,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uCAAuC,CACrD,GAAoD;IAEpD,OAAO,uBAAuB,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,0BAA0B,KAAK,IAAI,CAAC;AAClF,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,6BAA6B,CAC3C,GAAoD;IAEpD,OAAO,uCAAuC,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,wBAAwB,CACtC,GAAoD;IAEpD,OAAO,uCAAuC,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,gCAAgC,CAC9C,GAAoD;IAEpD,OAAO,uCAAuC,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,wBAAwB,CACtC,GAAoD;IAEpD,OAAO,uCAAuC,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,+BAA+B,CAC7C,GAAoD;IAEpD,OAAO,uCAAuC,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iCAAiC,CAC/C,GAAoD;IAEpD,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { apiTransformAddOnsToAddonInputs, serviceBookingParamsToLuxon, } from "../apiServiceBookingApiUtils";
1
+ import { apiTransformAddOnsToAddonInputs, apiTransformPackagesToPackageInputs, servicePriceToBookToApiPackages, serviceBookingParamsToLuxon, } from "../apiServiceBookingApiUtils";
2
2
  // ---------------------------------------------------------------------------
3
3
  // apiTransformAddOnsToAddonInputs
4
4
  // ---------------------------------------------------------------------------
@@ -45,6 +45,71 @@ describe("apiTransformAddOnsToAddonInputs", () => {
45
45
  });
46
46
  });
47
47
  // ---------------------------------------------------------------------------
48
+ // apiTransformPackagesToPackageInputs
49
+ // ---------------------------------------------------------------------------
50
+ function makePackageExt(id, name = "Package") {
51
+ return {
52
+ id,
53
+ name,
54
+ description: "",
55
+ priceCents: 5000,
56
+ serviceAddons: [],
57
+ };
58
+ }
59
+ function makePackageParam(packageId, qty = 1) {
60
+ return { packageId, chosenQuantity: qty };
61
+ }
62
+ describe("apiTransformPackagesToPackageInputs", () => {
63
+ it("returns empty array when no packages are provided", () => {
64
+ expect(apiTransformPackagesToPackageInputs([], [])).toEqual([]);
65
+ });
66
+ it("maps package params to their matching ServicePackageExt", () => {
67
+ const servicePackages = [makePackageExt("p1"), makePackageExt("p2")];
68
+ const packagesApi = [makePackageParam("p1", 2)];
69
+ const result = apiTransformPackagesToPackageInputs(packagesApi, servicePackages);
70
+ expect(result).toHaveLength(1);
71
+ expect(result[0].id).toBe("p1");
72
+ expect(result[0].chosenQuantity).toBe(2);
73
+ });
74
+ it("merges package params over the ServicePackageExt fields (params win)", () => {
75
+ const servicePackages = [makePackageExt("p1")];
76
+ const packagesApi = [
77
+ { packageId: "p1", chosenQuantity: 5, extra: "field" },
78
+ ];
79
+ const result = apiTransformPackagesToPackageInputs(packagesApi, servicePackages);
80
+ expect(result[0].chosenQuantity).toBe(5);
81
+ });
82
+ it("throws when a packageId does not match any ServicePackageExt", () => {
83
+ const servicePackages = [makePackageExt("p1")];
84
+ const packagesApi = [makePackageParam("ghost-id")];
85
+ expect(() => apiTransformPackagesToPackageInputs(packagesApi, servicePackages)).toThrow(/Failed to match package with id: ghost-id/);
86
+ });
87
+ });
88
+ // ---------------------------------------------------------------------------
89
+ // servicePriceToBookToApiPackages
90
+ // ---------------------------------------------------------------------------
91
+ describe("servicePriceToBookToApiPackages", () => {
92
+ it("returns empty array when priceToBook has no packages", () => {
93
+ const priceToBook = {
94
+ packages: [],
95
+ };
96
+ expect(servicePriceToBookToApiPackages(priceToBook)).toEqual([]);
97
+ });
98
+ it("maps priceToBook packages to ApiServicePackageParams", () => {
99
+ const priceToBook = {
100
+ packages: [
101
+ { packageId: "p1", chosenQuantity: 2, costPQCents: 5000 },
102
+ { packageId: "p2", chosenQuantity: 1, costPQCents: 8000 },
103
+ ],
104
+ };
105
+ const result = servicePriceToBookToApiPackages(priceToBook);
106
+ expect(result).toEqual([
107
+ { packageId: "p1", chosenQuantity: 2 },
108
+ { packageId: "p2", chosenQuantity: 1 },
109
+ ]);
110
+ });
111
+ });
112
+ // ---------------------------------------------------------------------------
48
113
  // serviceBookingParamsToLuxon
49
114
  // ---------------------------------------------------------------------------
50
115
  function makeBookingParams(days) {
@@ -1 +1 @@
1
- {"version":3,"file":"apiServiceBookingApiUtils.test.js","sourceRoot":"","sources":["../../../../src/utils/service/__tests__/apiServiceBookingApiUtils.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apiServiceBookingApiUtils.test.js","sourceRoot":"","sources":["../../../../src/utils/service/__tests__/apiServiceBookingApiUtils.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=frontendServiceBookingUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontendServiceBookingUtils.test.d.ts","sourceRoot":"","sources":["../../../../src/utils/service/__tests__/frontendServiceBookingUtils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,165 @@
1
+ import { DateTime } from "luxon";
2
+ import { frontendServiceGetPriceToBook, frontendServiceGetPriceToBookFees, } from "../frontendServiceBookingUtils";
3
+ function makeRange(startISO, endISO) {
4
+ return {
5
+ start: DateTime.fromISO(startISO, { zone: "utc" }),
6
+ end: DateTime.fromISO(endISO, { zone: "utc" }),
7
+ };
8
+ }
9
+ function makeFlatRateAssociation(flatRateCents = 20000) {
10
+ return {
11
+ serviceId: "svc-1",
12
+ serviceGeneralRates: {
13
+ flatRateCents,
14
+ hourlyRateCents: null,
15
+ dailyRateCents: null,
16
+ minimumTimeBlockHours: null,
17
+ cleaningFeePerBookingCents: 0,
18
+ },
19
+ serviceSpecialRates: [],
20
+ serviceDailyRates: [],
21
+ };
22
+ }
23
+ function makeTimeBasedAssociation(hourlyRateCents = 5000) {
24
+ return {
25
+ serviceId: "svc-1",
26
+ serviceGeneralRates: {
27
+ flatRateCents: null,
28
+ hourlyRateCents,
29
+ dailyRateCents: null,
30
+ minimumTimeBlockHours: null,
31
+ cleaningFeePerBookingCents: 0,
32
+ },
33
+ serviceSpecialRates: [],
34
+ serviceDailyRates: [],
35
+ };
36
+ }
37
+ function makePackageInput(overrides = {}) {
38
+ return {
39
+ id: "pkg-1",
40
+ name: "Gold DJ Package",
41
+ description: "",
42
+ priceCents: 10000,
43
+ serviceAddons: [],
44
+ chosenQuantity: 1,
45
+ ...overrides,
46
+ };
47
+ }
48
+ const ATTENDEE_OPTION = null;
49
+ const RANGE_2H = makeRange("2025-07-01T09:00:00Z", "2025-07-01T11:00:00Z");
50
+ describe("frontendServiceGetPriceToBookFees — packages", () => {
51
+ it("returns an empty packages array and adds nothing to the subtotal when no packages are given", () => {
52
+ const result = frontendServiceGetPriceToBookFees(makeFlatRateAssociation(20000), {
53
+ daysToBookParams: [{ dateTimeRange: RANGE_2H, fees: [], addOns: [] }],
54
+ selectedAttendeeOption: ATTENDEE_OPTION,
55
+ additionalFees: [],
56
+ addOns: [],
57
+ timezone: "UTC",
58
+ });
59
+ expect(result.packages).toEqual([]);
60
+ expect(result.subtotalBeforeTaxesCents).toBe(20000);
61
+ });
62
+ it("folds a single package's cost into the subtotal", () => {
63
+ const result = frontendServiceGetPriceToBookFees(makeFlatRateAssociation(20000), {
64
+ daysToBookParams: [{ dateTimeRange: RANGE_2H, fees: [], addOns: [] }],
65
+ selectedAttendeeOption: ATTENDEE_OPTION,
66
+ additionalFees: [],
67
+ addOns: [],
68
+ packages: [makePackageInput({ priceCents: 15000, chosenQuantity: 1 })],
69
+ timezone: "UTC",
70
+ });
71
+ expect(result.packages).toHaveLength(1);
72
+ expect(result.packages[0]).toMatchObject({
73
+ packageId: "pkg-1",
74
+ chosenQuantity: 1,
75
+ costPQCents: 15000,
76
+ });
77
+ expect(result.subtotalBeforeTaxesCents).toBe(20000 + 15000);
78
+ });
79
+ it("multiplies a package's cost by chosenQuantity", () => {
80
+ const result = frontendServiceGetPriceToBookFees(makeFlatRateAssociation(20000), {
81
+ daysToBookParams: [{ dateTimeRange: RANGE_2H, fees: [], addOns: [] }],
82
+ selectedAttendeeOption: ATTENDEE_OPTION,
83
+ additionalFees: [],
84
+ addOns: [],
85
+ packages: [makePackageInput({ priceCents: 15000, chosenQuantity: 3 })],
86
+ timezone: "UTC",
87
+ });
88
+ expect(result.packages[0].chosenQuantity).toBe(3);
89
+ expect(result.subtotalBeforeTaxesCents).toBe(20000 + 15000 * 3);
90
+ });
91
+ it("sums multiple distinct packages into the subtotal", () => {
92
+ const result = frontendServiceGetPriceToBookFees(makeFlatRateAssociation(20000), {
93
+ daysToBookParams: [{ dateTimeRange: RANGE_2H, fees: [], addOns: [] }],
94
+ selectedAttendeeOption: ATTENDEE_OPTION,
95
+ additionalFees: [],
96
+ addOns: [],
97
+ packages: [
98
+ makePackageInput({
99
+ id: "pkg-1",
100
+ priceCents: 15000,
101
+ chosenQuantity: 1,
102
+ }),
103
+ makePackageInput({
104
+ id: "pkg-2",
105
+ priceCents: 8000,
106
+ chosenQuantity: 2,
107
+ }),
108
+ ],
109
+ timezone: "UTC",
110
+ });
111
+ expect(result.packages).toHaveLength(2);
112
+ expect(result.subtotalBeforeTaxesCents).toBe(20000 + 15000 + 8000 * 2);
113
+ });
114
+ it("defaults chosenQuantity to 0 when not provided", () => {
115
+ const result = frontendServiceGetPriceToBookFees(makeFlatRateAssociation(20000), {
116
+ daysToBookParams: [{ dateTimeRange: RANGE_2H, fees: [], addOns: [] }],
117
+ selectedAttendeeOption: ATTENDEE_OPTION,
118
+ additionalFees: [],
119
+ addOns: [],
120
+ packages: [
121
+ makePackageInput({ priceCents: 15000, chosenQuantity: undefined }),
122
+ ],
123
+ timezone: "UTC",
124
+ });
125
+ expect(result.packages[0].chosenQuantity).toBe(0);
126
+ expect(result.subtotalBeforeTaxesCents).toBe(20000);
127
+ });
128
+ it("applies package pricing on top of time-based (hourly) bookings too", () => {
129
+ const result = frontendServiceGetPriceToBookFees(makeTimeBasedAssociation(5000), {
130
+ daysToBookParams: [{ dateTimeRange: RANGE_2H, fees: [], addOns: [] }],
131
+ selectedAttendeeOption: ATTENDEE_OPTION,
132
+ additionalFees: [],
133
+ addOns: [],
134
+ packages: [makePackageInput({ priceCents: 12000, chosenQuantity: 1 })],
135
+ timezone: "UTC",
136
+ });
137
+ // 2 hours @ $50/hr = $100 in day totals, plus the $120 package.
138
+ expect(result.daysTotalBeforeTaxesCents).toBe(10000);
139
+ expect(result.subtotalBeforeTaxesCents).toBe(10000 + 12000);
140
+ });
141
+ });
142
+ describe("frontendServiceGetPriceToBook — packages", () => {
143
+ it("passes packages through to frontendServiceGetPriceToBookFees", () => {
144
+ const result = frontendServiceGetPriceToBook(makeFlatRateAssociation(20000), {
145
+ addOns: [],
146
+ packages: [makePackageInput({ priceCents: 5000, chosenQuantity: 2 })],
147
+ selectedAttendeeOption: ATTENDEE_OPTION,
148
+ bookingDateTimeRanges: [RANGE_2H],
149
+ timezone: "UTC",
150
+ });
151
+ expect(result.packages).toHaveLength(1);
152
+ expect(result.subtotalBeforeTaxesCents).toBe(20000 + 5000 * 2);
153
+ });
154
+ it("defaults to an empty packages array when packages is omitted", () => {
155
+ const result = frontendServiceGetPriceToBook(makeFlatRateAssociation(20000), {
156
+ addOns: [],
157
+ selectedAttendeeOption: ATTENDEE_OPTION,
158
+ bookingDateTimeRanges: [RANGE_2H],
159
+ timezone: "UTC",
160
+ });
161
+ expect(result.packages).toEqual([]);
162
+ expect(result.subtotalBeforeTaxesCents).toBe(20000);
163
+ });
164
+ });
165
+ //# sourceMappingURL=frontendServiceBookingUtils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontendServiceBookingUtils.test.js","sourceRoot":"","sources":["../../../../src/utils/service/__tests__/frontendServiceBookingUtils.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { ServiceBookingStatus, ServiceBookingType } from "@prisma/client";
2
- import { ApiBookingParamsLuxon, ApiServiceAddonParams, ApiServiceBookedDayParams, ApiServiceBookingParams, ApiServicePriceToBookResult } from "../../definitions.js";
3
- import { ServiceAddonExt, ServiceBookingDayExt, ServiceBookingExt, ServiceExt } from "../../extendedSchemas.js";
4
- import { FrontendServiceGetPriceToBookResult, ServiceAddonInput } from "./frontendServiceBookingUtils.js";
2
+ import { ApiBookingParamsLuxon, ApiServiceAddonParams, ApiServiceBookedDayParams, ApiServiceBookingParams, ApiServicePackageParams, ApiServicePriceToBookResult } from "../../definitions.js";
3
+ import { ServiceAddonExt, ServiceBookingDayExt, ServiceBookingExt, ServiceExt, ServicePackageExt } from "../../extendedSchemas.js";
4
+ import { FrontendServiceGetPriceToBookResult, ServiceAddonInput, ServicePackageInput } from "./frontendServiceBookingUtils.js";
5
5
  import { ServiceBookingRequiredData } from "./serviceBookingTypes.js";
6
6
  export type ApiServiceCantBookReason = {
7
7
  type: string;
@@ -17,10 +17,12 @@ export declare const ApiServiceCantBookReasons: {
17
17
  };
18
18
  export type ApiServiceCantBookReasons = keyof typeof ApiServiceCantBookReasons;
19
19
  export declare function apiTransformAddOnsToAddonInputs<AddonParams_t extends ApiServiceAddonParams>(addOnsApi: AddonParams_t[], serviceAddons: ServiceAddonExt[]): ServiceAddonInput[];
20
+ export declare function apiTransformPackagesToPackageInputs<PackageParams_t extends ApiServicePackageParams>(packagesApi: PackageParams_t[], servicePackages: ServicePackageExt[]): ServicePackageInput[];
20
21
  export declare function apiTransformBookedDays(priceToBook: ApiServicePriceToBookResult): Partial<ServiceBookingDayExt>[];
21
22
  export declare function serviceGetPriceToBookFromBooking(service: ServiceExt, booking: ServiceBookingExt): FrontendServiceGetPriceToBookResult;
22
23
  export declare function serviceBookingParamsToLuxon(params: ApiServiceBookingParams): ApiBookingParamsLuxon;
23
24
  export declare function servicePriceToBookToApiDays(serviceId: string, userId: string, priceToBook: FrontendServiceGetPriceToBookResult): ApiServiceBookedDayParams[];
25
+ export declare function servicePriceToBookToApiPackages(priceToBook: FrontendServiceGetPriceToBookResult): ApiServicePackageParams[];
24
26
  export interface ServicePriceToBookToApiBookingBaseArgs {
25
27
  bookingType: ServiceBookingType;
26
28
  status: ServiceBookingStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"apiServiceBookingApiUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/service/apiServiceBookingApiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EAEzB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EAEf,oBAAoB,EACpB,iBAAiB,EAGjB,UAAU,EACX,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAEL,mCAAmC,EACnC,iBAAiB,EAClB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,0BAA0B,EAC3B,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,eAAO,MAAM,yBAAyB;2BAG/B,wBAAwB;iCAGxB,wBAAwB;+BAGxB,wBAAwB;0BAGxB,wBAAwB;4BAGxB,wBAAwB;8BAGxB,wBAAwB;CACrB,CAAC;AAEX,MAAM,MAAM,yBAAyB,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAE/E,wBAAgB,+BAA+B,CAC7C,aAAa,SAAS,qBAAqB,EAE3C,SAAS,EAAE,aAAa,EAAE,EAC1B,aAAa,EAAE,eAAe,EAAE,GAC/B,iBAAiB,EAAE,CAgBrB;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAkCjC;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,iBAAiB,GACzB,mCAAmC,CAiDrC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,uBAAuB,GAC9B,qBAAqB,CAoBvB;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,mCAAmC,GAC/C,yBAAyB,EAAE,CAkC7B;AACD,MAAM,WAAW,sCAAsC;IACrD,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,mCAAmC,CAAC;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,kCAAkC,CAAC,EACjD,WAAW,EACX,MAAM,EACN,QAAQ,EACR,WAAW,EACX,iBAAyB,EACzB,WAAmB,GACpB,EAAE,sCAAsC,GAAG,0BAA0B,CA+BrE"}
1
+ {"version":3,"file":"apiServiceBookingApiUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/service/apiServiceBookingApiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EAEzB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,eAAe,EAEf,oBAAoB,EACpB,iBAAiB,EAIjB,UAAU,EACV,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAEL,mCAAmC,EACnC,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,0BAA0B,EAC3B,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,eAAO,MAAM,yBAAyB;2BAG/B,wBAAwB;iCAGxB,wBAAwB;+BAGxB,wBAAwB;0BAGxB,wBAAwB;4BAGxB,wBAAwB;8BAGxB,wBAAwB;CACrB,CAAC;AAEX,MAAM,MAAM,yBAAyB,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAE/E,wBAAgB,+BAA+B,CAC7C,aAAa,SAAS,qBAAqB,EAE3C,SAAS,EAAE,aAAa,EAAE,EAC1B,aAAa,EAAE,eAAe,EAAE,GAC/B,iBAAiB,EAAE,CAgBrB;AAED,wBAAgB,mCAAmC,CACjD,eAAe,SAAS,uBAAuB,EAE/C,WAAW,EAAE,eAAe,EAAE,EAC9B,eAAe,EAAE,iBAAiB,EAAE,GACnC,mBAAmB,EAAE,CAkBvB;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAoCjC;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,iBAAiB,GACzB,mCAAmC,CAkDrC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,uBAAuB,GAC9B,qBAAqB,CAoBvB;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,mCAAmC,GAC/C,yBAAyB,EAAE,CAkC7B;AAED,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,mCAAmC,GAC/C,uBAAuB,EAAE,CAO3B;AAED,MAAM,WAAW,sCAAsC;IACrD,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,mCAAmC,CAAC;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,kCAAkC,CAAC,EACjD,WAAW,EACX,MAAM,EACN,QAAQ,EACR,WAAW,EACX,iBAAyB,EACzB,WAAmB,GACpB,EAAE,sCAAsC,GAAG,0BAA0B,CAuCrE"}
@@ -34,6 +34,20 @@ export function apiTransformAddOnsToAddonInputs(addOnsApi, serviceAddons) {
34
34
  };
35
35
  });
36
36
  }
37
+ export function apiTransformPackagesToPackageInputs(packagesApi, servicePackages) {
38
+ // Create a Map for faster lookup by packageId
39
+ const packageMap = new Map(servicePackages.map((pkg) => [pkg.id, pkg]));
40
+ return packagesApi.map((packageApi) => {
41
+ const matchedPackage = packageMap.get(packageApi.packageId);
42
+ if (!matchedPackage) {
43
+ throw new Error(`Failed to match package with id: ${packageApi.packageId}`);
44
+ }
45
+ return {
46
+ ...matchedPackage,
47
+ ...packageApi,
48
+ };
49
+ });
50
+ }
37
51
  export function apiTransformBookedDays(priceToBook) {
38
52
  return priceToBook.daysToBook.map((day) => {
39
53
  // Transform addOns using the helper function, then map to the expected output.
@@ -55,6 +69,8 @@ export function apiTransformBookedDays(priceToBook) {
55
69
  startDate: day.dateTimeRange.start.toJSDate(),
56
70
  endDate: day.dateTimeRange.end.toJSDate(),
57
71
  addOns: addOns,
72
+ // Packages are booking-level bundles (see servicePriceToBookToApiBookingBase),
73
+ // not tied to a specific day, so this stays empty here.
58
74
  packages: [],
59
75
  fees: day.fees,
60
76
  priceBreakdown: priceBreakdown,
@@ -90,6 +106,7 @@ export function serviceGetPriceToBookFromBooking(service, booking) {
90
106
  flatRateCents: booking.flatRateCents,
91
107
  additionalFees: booking.additionalFees,
92
108
  addOns: booking.addOns,
109
+ packages: booking.packages,
93
110
  daysTotalBeforeTaxesCents: booking.daysTotalATBCents,
94
111
  subtotalBeforeTaxesCents: booking.subtotalATBCents,
95
112
  totalBeforeTaxesCents: booking.totalATBCents,
@@ -138,6 +155,12 @@ export function servicePriceToBookToApiDays(serviceId, userId, priceToBook) {
138
155
  .filter((dayParams) => dayParams !== null) ?? [];
139
156
  return bookedDays;
140
157
  }
158
+ export function servicePriceToBookToApiPackages(priceToBook) {
159
+ return priceToBook.packages.map((pkg) => ({
160
+ packageId: pkg.packageId,
161
+ chosenQuantity: pkg.chosenQuantity,
162
+ }));
163
+ }
141
164
  export function servicePriceToBookToApiBookingBase({ bookingType, status, timezone, priceToBook, allowPromiseToPay = false, isFreeGuest = false, }) {
142
165
  const bookedDays = apiTransformBookedDays(priceToBook);
143
166
  const addOns = priceToBook.addOns.map((addOn) => ({
@@ -146,6 +169,12 @@ export function servicePriceToBookToApiBookingBase({ bookingType, status, timezo
146
169
  chosenQuantity: addOn.chosenQuantity,
147
170
  costPQCents: addOn.costPQCents,
148
171
  }));
172
+ const packages = priceToBook.packages.map((pkg) => ({
173
+ packageId: pkg.packageId,
174
+ package: pkg.package,
175
+ chosenQuantity: pkg.chosenQuantity,
176
+ costPQCents: pkg.costPQCents,
177
+ }));
149
178
  return {
150
179
  bookingType: bookingType,
151
180
  status: status,
@@ -158,7 +187,7 @@ export function servicePriceToBookToApiBookingBase({ bookingType, status, timezo
158
187
  subtotalATBCents: priceToBook.subtotalBeforeTaxesCents,
159
188
  totalATBCents: priceToBook.totalBeforeTaxesCents,
160
189
  addOns: addOns,
161
- packages: [],
190
+ packages: packages,
162
191
  allowPromiseToPay: allowPromiseToPay,
163
192
  isFreeGuest: isFreeGuest,
164
193
  // Phase 3 — providers opt in per-booking when they want BP-paid tickets
@@ -1 +1 @@
1
- {"version":3,"file":"apiServiceBookingApiUtils.js","sourceRoot":"","sources":["../../../src/utils/service/apiServiceBookingApiUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apiServiceBookingApiUtils.js","sourceRoot":"","sources":["../../../src/utils/service/apiServiceBookingApiUtils.ts"],"names":[],"mappings":"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"}