@foxscheduling/shared 0.1.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 (260) hide show
  1. package/README.md +56 -0
  2. package/dist/cjs/constants/emailUnsubscribeReasons.cjs +13 -0
  3. package/dist/cjs/constants/emailUnsubscribeReasons.d.ts +4 -0
  4. package/dist/cjs/constants/emailUnsubscribeReasons.d.ts.map +1 -0
  5. package/dist/cjs/index.cjs +24 -0
  6. package/dist/cjs/index.d.ts +9 -0
  7. package/dist/cjs/index.d.ts.map +1 -0
  8. package/dist/cjs/types/db.availability.cjs +12 -0
  9. package/dist/cjs/types/db.availability.d.ts +33 -0
  10. package/dist/cjs/types/db.availability.d.ts.map +1 -0
  11. package/dist/cjs/types/db.booking.cjs +2 -0
  12. package/dist/cjs/types/db.booking.d.ts +101 -0
  13. package/dist/cjs/types/db.booking.d.ts.map +1 -0
  14. package/dist/cjs/types/db.cjs +2 -0
  15. package/dist/cjs/types/db.customers.cjs +2 -0
  16. package/dist/cjs/types/db.customers.d.ts +14 -0
  17. package/dist/cjs/types/db.customers.d.ts.map +1 -0
  18. package/dist/cjs/types/db.d.ts +11 -0
  19. package/dist/cjs/types/db.d.ts.map +1 -0
  20. package/dist/cjs/types/db.directory.cjs +2 -0
  21. package/dist/cjs/types/db.directory.d.ts +38 -0
  22. package/dist/cjs/types/db.directory.d.ts.map +1 -0
  23. package/dist/cjs/types/db.emailFlow.cjs +2 -0
  24. package/dist/cjs/types/db.emailFlow.d.ts +29 -0
  25. package/dist/cjs/types/db.emailFlow.d.ts.map +1 -0
  26. package/dist/cjs/types/db.mcpUserContext.cjs +2 -0
  27. package/dist/cjs/types/db.mcpUserContext.d.ts +29 -0
  28. package/dist/cjs/types/db.mcpUserContext.d.ts.map +1 -0
  29. package/dist/cjs/types/db.notification.cjs +2 -0
  30. package/dist/cjs/types/db.notification.d.ts +27 -0
  31. package/dist/cjs/types/db.notification.d.ts.map +1 -0
  32. package/dist/cjs/types/db.oauth.cjs +2 -0
  33. package/dist/cjs/types/db.oauth.d.ts +55 -0
  34. package/dist/cjs/types/db.oauth.d.ts.map +1 -0
  35. package/dist/cjs/types/db.partnerApiKey.cjs +2 -0
  36. package/dist/cjs/types/db.partnerApiKey.d.ts +15 -0
  37. package/dist/cjs/types/db.partnerApiKey.d.ts.map +1 -0
  38. package/dist/cjs/types/db.paymentPending.cjs +2 -0
  39. package/dist/cjs/types/db.paymentPending.d.ts +16 -0
  40. package/dist/cjs/types/db.paymentPending.d.ts.map +1 -0
  41. package/dist/cjs/types/db.service.cjs +15 -0
  42. package/dist/cjs/types/db.service.d.ts +145 -0
  43. package/dist/cjs/types/db.service.d.ts.map +1 -0
  44. package/dist/cjs/types/db.tax.cjs +2 -0
  45. package/dist/cjs/types/db.tax.d.ts.map +1 -0
  46. package/dist/cjs/types/db.tenant.cjs +2 -0
  47. package/dist/cjs/types/db.tenant.d.ts +118 -0
  48. package/dist/cjs/types/db.tenant.d.ts.map +1 -0
  49. package/dist/cjs/types/db.tenantGroupedStat.cjs +2 -0
  50. package/dist/cjs/types/db.tenantGroupedStat.d.ts +13 -0
  51. package/dist/cjs/types/db.tenantGroupedStat.d.ts.map +1 -0
  52. package/dist/cjs/types/db.user.cjs +7 -0
  53. package/dist/cjs/types/db.user.d.ts +81 -0
  54. package/dist/cjs/types/db.user.d.ts.map +1 -0
  55. package/dist/cjs/types/db.userConfirmation.cjs +2 -0
  56. package/dist/cjs/types/db.userConfirmation.d.ts +17 -0
  57. package/dist/cjs/types/db.userConfirmation.d.ts.map +1 -0
  58. package/dist/cjs/types/db.userLoginSession.cjs +2 -0
  59. package/dist/cjs/types/db.userLoginSession.d.ts +28 -0
  60. package/dist/cjs/types/db.userLoginSession.d.ts.map +1 -0
  61. package/dist/cjs/types/db.webhook.cjs +10 -0
  62. package/dist/cjs/types/db.webhook.d.ts +16 -0
  63. package/dist/cjs/types/db.webhook.d.ts.map +1 -0
  64. package/dist/cjs/types/discover.cjs +2 -0
  65. package/dist/cjs/types/discover.d.ts +45 -0
  66. package/dist/cjs/types/discover.d.ts.map +1 -0
  67. package/dist/cjs/types/errorCodes.cjs +150 -0
  68. package/dist/cjs/types/errorCodes.d.ts +147 -0
  69. package/dist/cjs/types/errorCodes.d.ts.map +1 -0
  70. package/dist/cjs/types/index.cjs +44 -0
  71. package/dist/cjs/types/index.d.ts +84 -0
  72. package/dist/cjs/types/index.d.ts.map +1 -0
  73. package/dist/cjs/types/oauthScopes.cjs +33 -0
  74. package/dist/cjs/types/oauthScopes.d.ts +7 -0
  75. package/dist/cjs/types/oauthScopes.d.ts.map +1 -0
  76. package/dist/cjs/types/partnerDto.cjs +2 -0
  77. package/dist/cjs/types/partnerDto.d.ts +69 -0
  78. package/dist/cjs/types/partnerDto.d.ts.map +1 -0
  79. package/dist/cjs/types/pricing.cjs +2 -0
  80. package/dist/cjs/types/pricing.d.ts +31 -0
  81. package/dist/cjs/types/pricing.d.ts.map +1 -0
  82. package/dist/cjs/types/requestResponse.cjs +2 -0
  83. package/dist/cjs/types/requestResponse.d.ts +93 -0
  84. package/dist/cjs/types/requestResponse.d.ts.map +1 -0
  85. package/dist/cjs/types/subscription.cjs +2 -0
  86. package/dist/cjs/types/subscription.d.ts +50 -0
  87. package/dist/cjs/types/subscription.d.ts.map +1 -0
  88. package/dist/cjs/utils/bookingEmbed.cjs +178 -0
  89. package/dist/cjs/utils/bookingEmbed.d.ts +61 -0
  90. package/dist/cjs/utils/bookingEmbed.d.ts.map +1 -0
  91. package/dist/cjs/utils/bookingPageIcons.cjs +218 -0
  92. package/dist/cjs/utils/bookingPageIcons.d.ts +160 -0
  93. package/dist/cjs/utils/bookingPageIcons.d.ts.map +1 -0
  94. package/dist/cjs/utils/bookingProviders.cjs +27 -0
  95. package/dist/cjs/utils/bookingProviders.d.ts +25 -0
  96. package/dist/cjs/utils/bookingProviders.d.ts.map +1 -0
  97. package/dist/cjs/utils/currencies.cjs +148 -0
  98. package/dist/cjs/utils/currencies.d.ts +6 -0
  99. package/dist/cjs/utils/currencies.d.ts.map +1 -0
  100. package/dist/cjs/utils/dateTime.cjs +192 -0
  101. package/dist/cjs/utils/dateTime.d.ts +57 -0
  102. package/dist/cjs/utils/dateTime.d.ts.map +1 -0
  103. package/dist/cjs/utils/embedFrameLoader.cjs +76 -0
  104. package/dist/cjs/utils/embedFrameLoader.d.ts +15 -0
  105. package/dist/cjs/utils/embedFrameLoader.d.ts.map +1 -0
  106. package/dist/cjs/utils/extensionToContentType.cjs +24 -0
  107. package/dist/cjs/utils/extensionToContentType.d.ts +21 -0
  108. package/dist/cjs/utils/extensionToContentType.d.ts.map +1 -0
  109. package/dist/cjs/utils/generateUsername.cjs +7 -0
  110. package/dist/cjs/utils/generateUsername.d.ts.map +1 -0
  111. package/dist/cjs/utils/index.cjs +65 -0
  112. package/dist/cjs/utils/index.d.ts +26 -0
  113. package/dist/cjs/utils/index.d.ts.map +1 -0
  114. package/dist/cjs/utils/random.cjs +13 -0
  115. package/dist/cjs/utils/random.d.ts +3 -0
  116. package/dist/cjs/utils/random.d.ts.map +1 -0
  117. package/dist/cjs/utils/serviceReminderLabels.cjs +22 -0
  118. package/dist/cjs/utils/serviceReminderLabels.d.ts +5 -0
  119. package/dist/cjs/utils/serviceReminderLabels.d.ts.map +1 -0
  120. package/dist/cjs/utils/tenantSlug.cjs +299 -0
  121. package/dist/cjs/utils/tenantSlug.d.ts +7 -0
  122. package/dist/cjs/utils/tenantSlug.d.ts.map +1 -0
  123. package/dist/cjs/utils/textSlug.cjs +14 -0
  124. package/dist/cjs/utils/textSlug.d.ts +3 -0
  125. package/dist/cjs/utils/textSlug.d.ts.map +1 -0
  126. package/dist/cjs/utils/timezone.cjs +96 -0
  127. package/dist/cjs/utils/timezone.d.ts +2 -0
  128. package/dist/cjs/utils/timezone.d.ts.map +1 -0
  129. package/dist/cjs/utils/ucfirst.cjs +9 -0
  130. package/dist/cjs/utils/ucfirst.d.ts +2 -0
  131. package/dist/cjs/utils/ucfirst.d.ts.map +1 -0
  132. package/dist/constants/emailUnsubscribeReasons.d.ts +4 -0
  133. package/dist/constants/emailUnsubscribeReasons.d.ts.map +1 -0
  134. package/dist/constants/emailUnsubscribeReasons.js +10 -0
  135. package/dist/index.d.ts +9 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +8 -0
  138. package/dist/types/db.availability.d.ts +33 -0
  139. package/dist/types/db.availability.d.ts.map +1 -0
  140. package/dist/types/db.availability.js +9 -0
  141. package/dist/types/db.booking.d.ts +101 -0
  142. package/dist/types/db.booking.d.ts.map +1 -0
  143. package/dist/types/db.booking.js +1 -0
  144. package/dist/types/db.customers.d.ts +14 -0
  145. package/dist/types/db.customers.d.ts.map +1 -0
  146. package/dist/types/db.customers.js +1 -0
  147. package/dist/types/db.d.ts +11 -0
  148. package/dist/types/db.d.ts.map +1 -0
  149. package/dist/types/db.directory.d.ts +38 -0
  150. package/dist/types/db.directory.d.ts.map +1 -0
  151. package/dist/types/db.directory.js +1 -0
  152. package/dist/types/db.emailFlow.d.ts +29 -0
  153. package/dist/types/db.emailFlow.d.ts.map +1 -0
  154. package/dist/types/db.emailFlow.js +1 -0
  155. package/dist/types/db.js +1 -0
  156. package/dist/types/db.mcpUserContext.d.ts +29 -0
  157. package/dist/types/db.mcpUserContext.d.ts.map +1 -0
  158. package/dist/types/db.mcpUserContext.js +1 -0
  159. package/dist/types/db.notification.d.ts +27 -0
  160. package/dist/types/db.notification.d.ts.map +1 -0
  161. package/dist/types/db.notification.js +1 -0
  162. package/dist/types/db.oauth.d.ts +55 -0
  163. package/dist/types/db.oauth.d.ts.map +1 -0
  164. package/dist/types/db.oauth.js +1 -0
  165. package/dist/types/db.partnerApiKey.d.ts +15 -0
  166. package/dist/types/db.partnerApiKey.d.ts.map +1 -0
  167. package/dist/types/db.partnerApiKey.js +1 -0
  168. package/dist/types/db.paymentPending.d.ts +16 -0
  169. package/dist/types/db.paymentPending.d.ts.map +1 -0
  170. package/dist/types/db.paymentPending.js +1 -0
  171. package/dist/types/db.service.d.ts +145 -0
  172. package/dist/types/db.service.d.ts.map +1 -0
  173. package/dist/types/db.service.js +12 -0
  174. package/dist/types/db.tax.d.ts.map +1 -0
  175. package/dist/types/db.tenant.d.ts +118 -0
  176. package/dist/types/db.tenant.d.ts.map +1 -0
  177. package/dist/types/db.tenant.js +1 -0
  178. package/dist/types/db.tenantGroupedStat.d.ts +13 -0
  179. package/dist/types/db.tenantGroupedStat.d.ts.map +1 -0
  180. package/dist/types/db.tenantGroupedStat.js +1 -0
  181. package/dist/types/db.user.d.ts +81 -0
  182. package/dist/types/db.user.d.ts.map +1 -0
  183. package/dist/types/db.user.js +4 -0
  184. package/dist/types/db.userConfirmation.d.ts +17 -0
  185. package/dist/types/db.userConfirmation.d.ts.map +1 -0
  186. package/dist/types/db.userConfirmation.js +1 -0
  187. package/dist/types/db.userLoginSession.d.ts +28 -0
  188. package/dist/types/db.userLoginSession.d.ts.map +1 -0
  189. package/dist/types/db.userLoginSession.js +1 -0
  190. package/dist/types/db.webhook.d.ts +16 -0
  191. package/dist/types/db.webhook.d.ts.map +1 -0
  192. package/dist/types/db.webhook.js +7 -0
  193. package/dist/types/discover.d.ts +45 -0
  194. package/dist/types/discover.d.ts.map +1 -0
  195. package/dist/types/discover.js +1 -0
  196. package/dist/types/errorCodes.d.ts +147 -0
  197. package/dist/types/errorCodes.d.ts.map +1 -0
  198. package/dist/types/errorCodes.js +147 -0
  199. package/dist/types/index.d.ts +84 -0
  200. package/dist/types/index.d.ts.map +1 -0
  201. package/dist/types/index.js +28 -0
  202. package/dist/types/oauthScopes.d.ts +7 -0
  203. package/dist/types/oauthScopes.d.ts.map +1 -0
  204. package/dist/types/oauthScopes.js +28 -0
  205. package/dist/types/partnerDto.d.ts +69 -0
  206. package/dist/types/partnerDto.d.ts.map +1 -0
  207. package/dist/types/partnerDto.js +1 -0
  208. package/dist/types/pricing.d.ts +31 -0
  209. package/dist/types/pricing.d.ts.map +1 -0
  210. package/dist/types/pricing.js +1 -0
  211. package/dist/types/requestResponse.d.ts +93 -0
  212. package/dist/types/requestResponse.d.ts.map +1 -0
  213. package/dist/types/requestResponse.js +1 -0
  214. package/dist/types/subscription.d.ts +50 -0
  215. package/dist/types/subscription.d.ts.map +1 -0
  216. package/dist/types/subscription.js +1 -0
  217. package/dist/utils/bookingEmbed.d.ts +61 -0
  218. package/dist/utils/bookingEmbed.d.ts.map +1 -0
  219. package/dist/utils/bookingEmbed.js +161 -0
  220. package/dist/utils/bookingPageIcons.d.ts +160 -0
  221. package/dist/utils/bookingPageIcons.d.ts.map +1 -0
  222. package/dist/utils/bookingPageIcons.js +214 -0
  223. package/dist/utils/bookingProviders.d.ts +25 -0
  224. package/dist/utils/bookingProviders.d.ts.map +1 -0
  225. package/dist/utils/bookingProviders.js +23 -0
  226. package/dist/utils/currencies.d.ts +6 -0
  227. package/dist/utils/currencies.d.ts.map +1 -0
  228. package/dist/utils/currencies.js +145 -0
  229. package/dist/utils/dateTime.d.ts +57 -0
  230. package/dist/utils/dateTime.d.ts.map +1 -0
  231. package/dist/utils/dateTime.js +150 -0
  232. package/dist/utils/embedFrameLoader.d.ts +15 -0
  233. package/dist/utils/embedFrameLoader.d.ts.map +1 -0
  234. package/dist/utils/embedFrameLoader.js +70 -0
  235. package/dist/utils/extensionToContentType.d.ts +21 -0
  236. package/dist/utils/extensionToContentType.d.ts.map +1 -0
  237. package/dist/utils/extensionToContentType.js +20 -0
  238. package/dist/utils/generateUsername.d.ts.map +1 -0
  239. package/dist/utils/index.d.ts +26 -0
  240. package/dist/utils/index.d.ts.map +1 -0
  241. package/dist/utils/index.js +45 -0
  242. package/dist/utils/random.d.ts +3 -0
  243. package/dist/utils/random.d.ts.map +1 -0
  244. package/dist/utils/random.js +8 -0
  245. package/dist/utils/serviceReminderLabels.d.ts +5 -0
  246. package/dist/utils/serviceReminderLabels.d.ts.map +1 -0
  247. package/dist/utils/serviceReminderLabels.js +18 -0
  248. package/dist/utils/tenantSlug.d.ts +7 -0
  249. package/dist/utils/tenantSlug.d.ts.map +1 -0
  250. package/dist/utils/tenantSlug.js +293 -0
  251. package/dist/utils/textSlug.d.ts +3 -0
  252. package/dist/utils/textSlug.d.ts.map +1 -0
  253. package/dist/utils/textSlug.js +10 -0
  254. package/dist/utils/timezone.d.ts +2 -0
  255. package/dist/utils/timezone.d.ts.map +1 -0
  256. package/dist/utils/timezone.js +93 -0
  257. package/dist/utils/ucfirst.d.ts +2 -0
  258. package/dist/utils/ucfirst.d.ts.map +1 -0
  259. package/dist/utils/ucfirst.js +5 -0
  260. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import { DBRecord } from "./db.js";
2
+ import type { Booking } from "./db.booking.js";
3
+ /** Short-lived lookup for payment provider return URLs (Paystack reference, Stripe payment_intent). */
4
+ export interface PaymentPending extends DBRecord {
5
+ recordType: "PAYMENT_PENDING";
6
+ tenantId: string;
7
+ bookingId: string;
8
+ serviceId: string;
9
+ customerId: string;
10
+ type: keyof Booking["payments"];
11
+ provider: string;
12
+ /** Primary payment attempt id (Paystack reference / JASDK attempt id). */
13
+ paymentAttemptId: string;
14
+ returnUrl: string;
15
+ }
16
+ //# sourceMappingURL=db.paymentPending.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.paymentPending.d.ts","sourceRoot":"","sources":["../../src/types/db.paymentPending.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,uGAAuG;AACvG,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC5C,UAAU,EAAE,iBAAiB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,145 @@
1
+ import { DBRecord } from "./db.js";
2
+ import { BOOKING_PAGE_ICONS } from "../utils/bookingPageIcons.js";
3
+ /** Recurring/pack: e.g. "5 sessions for $200" */
4
+ export interface ServicePackSettings {
5
+ enabled: boolean;
6
+ /** Number of sessions in the pack */
7
+ sessions: number;
8
+ /** Pack price (optional; if omitted, uses sessions × single price) */
9
+ packPrice?: number;
10
+ }
11
+ /** Service location type */
12
+ export type ServiceLocationType = "none" | "google_meet" | "microsoft_teams" | "zoom" | "discord" | "slack" | "other" | "in_person";
13
+ /** Service location config */
14
+ export interface ServiceLocation {
15
+ type: ServiceLocationType;
16
+ /** For "other": custom URL */
17
+ customUrl?: string;
18
+ /** For "in_person": location ID or address */
19
+ inPersonLocationId?: string;
20
+ }
21
+ /** Notice period unit */
22
+ export type NoticePeriodUnit = "minutes" | "hours" | "days";
23
+ /** Notice period before booking */
24
+ export interface ServiceNoticePeriod {
25
+ value: number;
26
+ unit: NoticePeriodUnit;
27
+ }
28
+ /** Limits on how many times this service can be booked */
29
+ export interface ServiceLimitBookings {
30
+ /** Max bookings per day (0 = unlimited) */
31
+ maxPerDay?: number;
32
+ /** Max time in advance customers can book (replaces max days + notice period) */
33
+ maxTimeInAdvance?: ServiceNoticePeriod;
34
+ /** Min time in advance – customers must book at least this far ahead */
35
+ minTimeInAdvance?: ServiceNoticePeriod;
36
+ /** Manual approval required for bookings */
37
+ manualApprovalRequired?: boolean;
38
+ /** Allow multiple bookings per user for same service */
39
+ allowMultiplePerUser?: boolean;
40
+ }
41
+ /** Group booking settings */
42
+ export interface ServiceGroupBooking {
43
+ enabled: boolean;
44
+ maxParticipants: number;
45
+ showRemainingSeats: boolean;
46
+ }
47
+ /** Question answer type */
48
+ export type ServiceQuestionType = "text" | "number" | "date" | "time" | "select" | "multi_select" | "yes_no" | "rating" | "comment";
49
+ /** Service question for customization */
50
+ export interface ServiceQuestion {
51
+ id: string;
52
+ label: string;
53
+ type: ServiceQuestionType;
54
+ required: boolean;
55
+ /** For select/multi_select: options */
56
+ options?: string[];
57
+ /** For rating: max value (e.g. 5) */
58
+ ratingMax?: number;
59
+ order: number;
60
+ }
61
+ /** Questions section */
62
+ export interface ServiceQuestions {
63
+ questions: ServiceQuestion[];
64
+ showToBooker: boolean;
65
+ }
66
+ /** All valid reminder lead times before the appointment (relative to start) */
67
+ export declare const SERVICE_REMINDER_OFFSETS: readonly ["15_minutes", "30_minutes", "1_hour", "3_hours", "6_hours", "12_hours", "1_day", "1_week", "1_month"];
68
+ export type ServiceReminderOffset = (typeof SERVICE_REMINDER_OFFSETS)[number];
69
+ /** Duration unit for custom duration */
70
+ export type DurationUnit = "minutes" | "hours" | "days";
71
+ export interface Service extends DBRecord {
72
+ name: string;
73
+ recordType: "SERVICE";
74
+ /** HTML string when rich text is used */
75
+ description: string;
76
+ duration: number;
77
+ tenantId: string;
78
+ slug: string;
79
+ availabilityId: string;
80
+ category: ServiceCategory;
81
+ /** Unit for custom duration display */
82
+ durationUnit: DurationUnit;
83
+ price: number;
84
+ currency: string;
85
+ slugHistory: string[];
86
+ /** Draft services are not published */
87
+ isDraft?: boolean;
88
+ status?: "active" | "inactive" | "draft";
89
+ /** Icon ID for service display (Lucide icon name, e.g. "Tag") */
90
+ iconId?: keyof typeof BOOKING_PAGE_ICONS;
91
+ /** Whether to show this service on the public booking page */
92
+ displayOnBookingPage: boolean;
93
+ displayInDirectories: boolean;
94
+ reservedDuration: number;
95
+ reservedDurationUnit: DurationUnit;
96
+ /** Deposit required before booking */
97
+ depositEnabled: boolean;
98
+ depositAmount?: number;
99
+ /** Recurring/pack settings (e.g. "5 sessions for $200") */
100
+ pack?: ServicePackSettings;
101
+ /** Staff IDs who can provide this service */
102
+ providerIds: string[];
103
+ /** When false, system auto-assigns a provider; when true, bookers can select */
104
+ allowBookerToSelectProvider?: boolean;
105
+ /** Booking limits */
106
+ limitBookings?: ServiceLimitBookings;
107
+ /** Where the service is provided */
108
+ location?: ServiceLocation;
109
+ /** Enable charging for this service */
110
+ chargeEnabled?: boolean;
111
+ /** Whether this service is taxable */
112
+ taxable?: boolean;
113
+ /** Tax ID when taxable (references a tenant tax) */
114
+ taxId?: string;
115
+ /** Group booking settings */
116
+ groupBooking?: ServiceGroupBooking;
117
+ /** Custom questions for the service */
118
+ questions?: ServiceQuestions;
119
+ /** Timezone override (if different from business) */
120
+ timezone?: string;
121
+ /** Reminder lead times before the appointment (e.g. email/SMS when implemented) */
122
+ reminderOffsets?: ServiceReminderOffset[];
123
+ /**
124
+ * Product ID on JASDK
125
+ */
126
+ productId?: string;
127
+ prices: Array<{
128
+ id: string;
129
+ price: number;
130
+ currency: string;
131
+ taxIds: Array<string>;
132
+ }>;
133
+ /** Aggregate of `customerRating` on completed bookings for this service */
134
+ ratingSummary?: ServiceRatingSummary;
135
+ }
136
+ export interface ServiceRatingSummary {
137
+ average: number;
138
+ count: number;
139
+ }
140
+ export interface ServiceSlot {
141
+ start: string;
142
+ end: string;
143
+ }
144
+ export type ServiceCategory = "animals" | "business" | "education" | "entertainment" | "faith" | "fashion" | "fitness" | "food" | "health" | "music" | "politics" | "science" | "sports" | "technology" | "travel" | "other";
145
+ //# sourceMappingURL=db.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.service.d.ts","sourceRoot":"","sources":["../../src/types/db.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** All valid reminder lead times before the appointment (relative to start) */
2
+ export const SERVICE_REMINDER_OFFSETS = [
3
+ "15_minutes",
4
+ "30_minutes",
5
+ "1_hour",
6
+ "3_hours",
7
+ "6_hours",
8
+ "12_hours",
9
+ "1_day",
10
+ "1_week",
11
+ "1_month",
12
+ ];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.tax.d.ts","sourceRoot":"","sources":["../../src/types/db.tax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,WAAW,GAAI,SAAQ,QAAQ;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,KAAK,CAAC;CACrB"}
@@ -0,0 +1,118 @@
1
+ import { DBRecord } from "./db.js";
2
+ import { User, UserTenant } from "./db.user.js";
3
+ export interface Tenant extends DBRecord {
4
+ name: string;
5
+ slug: string;
6
+ email: string;
7
+ ownerId: string;
8
+ logoUrl: string;
9
+ currency: string;
10
+ timezone: string;
11
+ phoneNumber: string;
12
+ users: UserTenant[];
13
+ description: string;
14
+ recordType: "TENANT";
15
+ timeFormat: "12h" | "24h";
16
+ dateFormat: "DD/MM/YYYY" | "MM/DD/YYYY";
17
+ address: {
18
+ city: string;
19
+ state: string;
20
+ line1: string;
21
+ line2: string;
22
+ country: string;
23
+ postalCode: string;
24
+ };
25
+ limitTracker: {
26
+ events: number;
27
+ services: number;
28
+ bookings: number;
29
+ calendars: number;
30
+ integrations: number;
31
+ };
32
+ notifications: {
33
+ reminders: boolean;
34
+ statusChange: boolean;
35
+ bookingConfirmation: boolean;
36
+ };
37
+ bookingPage: {
38
+ url: string;
39
+ title: string;
40
+ accentColor: string;
41
+ customColor?: string;
42
+ description: string;
43
+ layout: "list" | "grid";
44
+ };
45
+ stripePayment?: {
46
+ enabled: boolean;
47
+ publishableKey: string;
48
+ secretKey: string;
49
+ };
50
+ paypalPayment?: {
51
+ enabled: boolean;
52
+ clientId: string;
53
+ clientSecret: string;
54
+ };
55
+ paystackPayment?: {
56
+ enabled: boolean;
57
+ publicKey: string;
58
+ secretKey: string;
59
+ };
60
+ voucherPayment?: {
61
+ enabled: boolean;
62
+ discountCodes?: Array<{
63
+ id?: string;
64
+ code: string;
65
+ title: string;
66
+ percentage: number;
67
+ startDate: string;
68
+ endDate: string;
69
+ }>;
70
+ };
71
+ flutterwavePayment?: {
72
+ enabled: boolean;
73
+ publicKey: string;
74
+ secretKey: string;
75
+ };
76
+ bankAccount?: {
77
+ enabled?: boolean;
78
+ accountNumber?: string;
79
+ accountName?: string;
80
+ bankName?: string;
81
+ bankCode?: string;
82
+ bankAddress?: string;
83
+ bankCity?: string;
84
+ bankState?: string;
85
+ };
86
+ stripeConnect?: {
87
+ connected: boolean;
88
+ accessToken: string;
89
+ refreshToken: string;
90
+ expiresAt: string;
91
+ };
92
+ subscription: User["subscription"];
93
+ jaySDK?: {
94
+ clientId: string;
95
+ clientSecret: string;
96
+ };
97
+ /** Google OAuth tokens for Calendar/Meet integration */
98
+ googleIntegration?: TenantIntegration;
99
+ /** Microsoft 365 OAuth (Outlook calendar + Teams meetings) */
100
+ microsoftIntegration?: TenantIntegration;
101
+ /** Zoom OAuth for creating meeting links */
102
+ zoomIntegration?: TenantIntegration;
103
+ }
104
+ export type TenantIntegration = {
105
+ connected: boolean;
106
+ accessToken: string;
107
+ refreshToken: string;
108
+ expiresAt: string;
109
+ };
110
+ export interface DashboardAnalytics {
111
+ teamMembers: number;
112
+ appointments: {
113
+ total: number;
114
+ today: number;
115
+ thisWeek: number;
116
+ };
117
+ }
118
+ //# sourceMappingURL=db.tenant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.tenant.d.ts","sourceRoot":"","sources":["../../src/types/db.tenant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,MAAO,SAAQ,QAAQ;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,QAAQ,CAAC;IACrB,UAAU,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,UAAU,EAAE,YAAY,GAAG,YAAY,CAAC;IACxC,OAAO,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,YAAY,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,aAAa,EAAE;QACX,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,OAAO,CAAC;QACtB,mBAAmB,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,WAAW,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;KAC3B,CAAC;IACF,aAAa,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,aAAa,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,eAAe,CAAC,EAAE;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,cAAc,CAAC,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,KAAK,CAAC;YAClB,EAAE,CAAC,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;YACnB,SAAS,EAAE,MAAM,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;KACN,CAAC;IACF,kBAAkB,CAAC,EAAE;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,WAAW,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,aAAa,CAAC,EAAE;QACZ,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;KAAE,CAAC;IACrD,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,iBAAiB,CAAC;IACzC,4CAA4C;IAC5C,eAAe,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;CACL"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import { DBRecord } from "./db.js";
2
+ export type TenantGroupedStatType = "aiCalls" | "bookings";
3
+ export interface TenantGroupedStat extends DBRecord {
4
+ tenantId: string;
5
+ userId: string;
6
+ group: string;
7
+ ids: string[];
8
+ totals: number[];
9
+ currency?: string;
10
+ type: TenantGroupedStatType;
11
+ recordType: "TENANT_GROUPED_STAT";
12
+ }
13
+ //# sourceMappingURL=db.tenantGroupedStat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.tenantGroupedStat.d.ts","sourceRoot":"","sources":["../../src/types/db.tenantGroupedStat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,UAAU,CAAC;AAC3D,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,EAAE,qBAAqB,CAAC;CACrC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,81 @@
1
+ import { DBRecord } from "./db.js";
2
+ import { Subscription } from "./subscription.js";
3
+ export type UserLanguageType = "en" | "es" | "fr";
4
+ export type UserStatus = "active" | "inactive" | "blocked";
5
+ export type UserRoleType = "super_admin" | "owner" | "service_provider" | "customer";
6
+ export type SubscriptionFrequency = "monthly" | "yearly";
7
+ export interface UserTenant {
8
+ /** The ID of the tenant or user id */
9
+ id: string;
10
+ ownerId: string;
11
+ addedOn: string;
12
+ role: UserRoleType;
13
+ }
14
+ export interface User extends DBRecord {
15
+ email: string;
16
+ recordType: "USER";
17
+ lastLoginOn?: string;
18
+ tenants: UserTenant[];
19
+ /**
20
+ * Customer ID for JAY SDK
21
+ */
22
+ customerId?: string;
23
+ subscription: {
24
+ id: string;
25
+ amount: number;
26
+ currency: string;
27
+ startDate: string;
28
+ endDate?: string;
29
+ autorenew: boolean;
30
+ productId?: string;
31
+ details: Subscription;
32
+ invoiceNumber?: string;
33
+ productPriceId?: string;
34
+ nextBillingDate?: string;
35
+ productGroup: "subscription";
36
+ frequency: SubscriptionFrequency;
37
+ provider?: "flutterwave" | "stripe" | "paypal" | "paystack" | "voucher";
38
+ };
39
+ cognitoRecord: CognitoUserSchema;
40
+ /**
41
+ * Server-only Cognito password for Google sign-in (auto-generated).
42
+ * Never expose to clients.
43
+ */
44
+ cognitoBootstrapPassword?: string;
45
+ }
46
+ export interface CognitoUserSchema {
47
+ sub: string;
48
+ dob: string;
49
+ email: string;
50
+ mobile: string;
51
+ picture: string;
52
+ address: string;
53
+ website: string;
54
+ username: string;
55
+ fullName: string;
56
+ nickName: string;
57
+ lastName: string;
58
+ firstName: string;
59
+ verified: boolean;
60
+ locale: UserLanguageType;
61
+ details: {
62
+ timezone: string;
63
+ status: UserStatus;
64
+ mfaEnabled: boolean;
65
+ /** False when Cognito password was auto-generated (e.g. Google-only signup). */
66
+ passwordSetByUser?: boolean;
67
+ };
68
+ }
69
+ /** True only when the user chose their Cognito password (email signup or after set-password). */
70
+ export declare function isPasswordSetByUser(user: Pick<User, "cognitoRecord">): boolean;
71
+ export interface Staff {
72
+ id: string;
73
+ name: string;
74
+ email: string;
75
+ phone: string;
76
+ picture: string;
77
+ /** Date the staff member was added to the tenant profile */
78
+ addedOn: string;
79
+ role: UserRoleType;
80
+ }
81
+ //# sourceMappingURL=db.user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.user.d.ts","sourceRoot":"","sources":["../../src/types/db.user.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** True only when the user chose their Cognito password (email signup or after set-password). */
2
+ export function isPasswordSetByUser(user) {
3
+ return user.cognitoRecord.details.passwordSetByUser === true;
4
+ }
@@ -0,0 +1,17 @@
1
+ import { DBRecord } from "./db.js";
2
+ export interface UserConfirmation extends DBRecord {
3
+ code: string;
4
+ email: string;
5
+ sentOn: string;
6
+ expiresOn: string;
7
+ durationInMinutes: number;
8
+ recordType: "USER_CONFIRMATION";
9
+ reason: "RESET_PASSWORD" | "VERIFY_EMAIL" | "DELETE_ACCOUNT" | "DELETE_TENANT" | "CANCEL_BOOKING";
10
+ /** Required when reason is CANCEL_BOOKING */
11
+ bookingId?: string;
12
+ /** Required when reason is DELETE_TENANT (business profile deletion) */
13
+ tenantId?: string;
14
+ /** Required when reason is CANCEL_BOOKING */
15
+ link?: string;
16
+ }
17
+ //# sourceMappingURL=db.userConfirmation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.userConfirmation.d.ts","sourceRoot":"","sources":["../../src/types/db.userConfirmation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,gBAAgB,GAAG,cAAc,GAAG,gBAAgB,GAAG,eAAe,GAAG,gBAAgB,CAAC;IAClG,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ import { DBRecord } from "./db.js";
2
+ import { Tenant } from "./db.tenant.js";
3
+ import { User, UserStatus } from "./db.user.js";
4
+ export interface UserLoginSession extends DBRecord {
5
+ ip: string;
6
+ recordType: "USER_LOGIN_SESSION";
7
+ tokens: {
8
+ idToken: string;
9
+ accessToken: string;
10
+ refreshToken: string;
11
+ };
12
+ isFirstLogin: boolean;
13
+ userId: string;
14
+ browserId: string;
15
+ browser: string;
16
+ device: string;
17
+ endDate?: string;
18
+ startDate: string;
19
+ username: string;
20
+ status: UserStatus;
21
+ }
22
+ export interface ThisSession {
23
+ user: User;
24
+ tenants: Tenant[];
25
+ browserId: string;
26
+ session: UserLoginSession;
27
+ }
28
+ //# sourceMappingURL=db.userLoginSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.userLoginSession.d.ts","sourceRoot":"","sources":["../../src/types/db.userLoginSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,oBAAoB,CAAC;IACjC,MAAM,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;CAC7B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import { DBRecord } from "./db.js";
2
+ export declare const PARTNER_WEBHOOK_EVENTS: readonly ["booking.created", "booking.updated", "booking.cancelled", "customer.created", "customer.updated"];
3
+ export type PartnerWebhookEvent = (typeof PARTNER_WEBHOOK_EVENTS)[number];
4
+ export interface WebhookSubscription extends DBRecord {
5
+ recordType: "WEBHOOK_SUBSCRIPTION";
6
+ id: string;
7
+ tenantId: string;
8
+ clientId: string;
9
+ userId: string;
10
+ url: string;
11
+ events: PartnerWebhookEvent[];
12
+ secret: string;
13
+ enabled: boolean;
14
+ failureCount: number;
15
+ }
16
+ //# sourceMappingURL=db.webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.webhook.d.ts","sourceRoot":"","sources":["../../src/types/db.webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,eAAO,MAAM,sBAAsB,8GAMzB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,MAAM,WAAW,mBAAoB,SAAQ,QAAQ;IACnD,UAAU,EAAE,sBAAsB,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,7 @@
1
+ export const PARTNER_WEBHOOK_EVENTS = [
2
+ "booking.created",
3
+ "booking.updated",
4
+ "booking.cancelled",
5
+ "customer.created",
6
+ "customer.updated",
7
+ ];
@@ -0,0 +1,45 @@
1
+ import type { DurationUnit, ServiceCategory, ServiceLocationType, ServiceRatingSummary } from "./db.service.js";
2
+ export type DiscoverSort = "relevance" | "rating" | "price_asc" | "price_desc" | "newest";
3
+ export type DiscoverLocationFilter = "in_person" | "online" | "any";
4
+ export interface DiscoverBusinessAddress {
5
+ city: string;
6
+ state: string;
7
+ country: string;
8
+ line1?: string;
9
+ lat?: number;
10
+ lng?: number;
11
+ }
12
+ export interface DiscoverItem {
13
+ tenantId: string;
14
+ serviceId: string;
15
+ title: string;
16
+ description: string;
17
+ url: string;
18
+ category?: ServiceCategory;
19
+ locationType: ServiceLocationType;
20
+ timezone: string;
21
+ duration: {
22
+ value: number;
23
+ unit: DurationUnit;
24
+ };
25
+ price: {
26
+ value: number;
27
+ currency: string;
28
+ };
29
+ business: {
30
+ name: string;
31
+ logoUrl: string;
32
+ slug?: string;
33
+ };
34
+ address?: DiscoverBusinessAddress;
35
+ rating?: ServiceRatingSummary;
36
+ distanceKm?: number;
37
+ boosted?: boolean;
38
+ }
39
+ export interface DiscoverResponse {
40
+ page: number;
41
+ pageSize: number;
42
+ total: number;
43
+ items: DiscoverItem[];
44
+ }
45
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/types/discover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEhH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;AAC1F,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEpE,MAAM,WAAW,uBAAuB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,mBAAmB,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IAChD,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,QAAQ,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACzB"}
@@ -0,0 +1 @@
1
+ export {};