@hanzo/booker 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 (124) hide show
  1. package/README.md +78 -0
  2. package/dist/cjs/Booker.cjs +153 -0
  3. package/dist/cjs/Booker.native.js +158 -0
  4. package/dist/cjs/Booker.native.js.map +1 -0
  5. package/dist/cjs/BookingForm.cjs +197 -0
  6. package/dist/cjs/BookingForm.native.js +203 -0
  7. package/dist/cjs/BookingForm.native.js.map +1 -0
  8. package/dist/cjs/CalendarEmbed.cjs +121 -0
  9. package/dist/cjs/CalendarEmbed.native.js +125 -0
  10. package/dist/cjs/CalendarEmbed.native.js.map +1 -0
  11. package/dist/cjs/Confirmation.cjs +177 -0
  12. package/dist/cjs/Confirmation.native.js +185 -0
  13. package/dist/cjs/Confirmation.native.js.map +1 -0
  14. package/dist/cjs/EventHeader.cjs +112 -0
  15. package/dist/cjs/EventHeader.native.js +118 -0
  16. package/dist/cjs/EventHeader.native.js.map +1 -0
  17. package/dist/cjs/MonthCalendar.cjs +177 -0
  18. package/dist/cjs/MonthCalendar.native.js +191 -0
  19. package/dist/cjs/MonthCalendar.native.js.map +1 -0
  20. package/dist/cjs/TimeSlots.cjs +119 -0
  21. package/dist/cjs/TimeSlots.native.js +126 -0
  22. package/dist/cjs/TimeSlots.native.js.map +1 -0
  23. package/dist/cjs/client.cjs +136 -0
  24. package/dist/cjs/client.native.js +267 -0
  25. package/dist/cjs/client.native.js.map +1 -0
  26. package/dist/cjs/hooks.cjs +193 -0
  27. package/dist/cjs/hooks.native.js +221 -0
  28. package/dist/cjs/hooks.native.js.map +1 -0
  29. package/dist/cjs/index.cjs +71 -0
  30. package/dist/cjs/index.native.js +74 -0
  31. package/dist/cjs/index.native.js.map +1 -0
  32. package/dist/cjs/time.cjs +145 -0
  33. package/dist/cjs/time.native.js +150 -0
  34. package/dist/cjs/time.native.js.map +1 -0
  35. package/dist/cjs/useBooker.cjs +151 -0
  36. package/dist/cjs/useBooker.native.js +173 -0
  37. package/dist/cjs/useBooker.native.js.map +1 -0
  38. package/dist/esm/Booker.mjs +128 -0
  39. package/dist/esm/Booker.mjs.map +1 -0
  40. package/dist/esm/Booker.native.js +130 -0
  41. package/dist/esm/Booker.native.js.map +1 -0
  42. package/dist/esm/BookingForm.mjs +172 -0
  43. package/dist/esm/BookingForm.mjs.map +1 -0
  44. package/dist/esm/BookingForm.native.js +175 -0
  45. package/dist/esm/BookingForm.native.js.map +1 -0
  46. package/dist/esm/CalendarEmbed.mjs +96 -0
  47. package/dist/esm/CalendarEmbed.mjs.map +1 -0
  48. package/dist/esm/CalendarEmbed.native.js +97 -0
  49. package/dist/esm/CalendarEmbed.native.js.map +1 -0
  50. package/dist/esm/Confirmation.mjs +152 -0
  51. package/dist/esm/Confirmation.mjs.map +1 -0
  52. package/dist/esm/Confirmation.native.js +157 -0
  53. package/dist/esm/Confirmation.native.js.map +1 -0
  54. package/dist/esm/EventHeader.mjs +87 -0
  55. package/dist/esm/EventHeader.mjs.map +1 -0
  56. package/dist/esm/EventHeader.native.js +90 -0
  57. package/dist/esm/EventHeader.native.js.map +1 -0
  58. package/dist/esm/MonthCalendar.mjs +152 -0
  59. package/dist/esm/MonthCalendar.mjs.map +1 -0
  60. package/dist/esm/MonthCalendar.native.js +163 -0
  61. package/dist/esm/MonthCalendar.native.js.map +1 -0
  62. package/dist/esm/TimeSlots.mjs +94 -0
  63. package/dist/esm/TimeSlots.mjs.map +1 -0
  64. package/dist/esm/TimeSlots.native.js +98 -0
  65. package/dist/esm/TimeSlots.native.js.map +1 -0
  66. package/dist/esm/client.mjs +104 -0
  67. package/dist/esm/client.mjs.map +1 -0
  68. package/dist/esm/client.native.js +232 -0
  69. package/dist/esm/client.native.js.map +1 -0
  70. package/dist/esm/hooks.mjs +165 -0
  71. package/dist/esm/hooks.mjs.map +1 -0
  72. package/dist/esm/hooks.native.js +190 -0
  73. package/dist/esm/hooks.native.js.map +1 -0
  74. package/dist/esm/index.js +13 -0
  75. package/dist/esm/index.js.map +1 -0
  76. package/dist/esm/index.mjs +13 -0
  77. package/dist/esm/index.mjs.map +1 -0
  78. package/dist/esm/index.native.js +13 -0
  79. package/dist/esm/index.native.js.map +1 -0
  80. package/dist/esm/time.mjs +107 -0
  81. package/dist/esm/time.mjs.map +1 -0
  82. package/dist/esm/time.native.js +109 -0
  83. package/dist/esm/time.native.js.map +1 -0
  84. package/dist/esm/useBooker.mjs +126 -0
  85. package/dist/esm/useBooker.mjs.map +1 -0
  86. package/dist/esm/useBooker.native.js +145 -0
  87. package/dist/esm/useBooker.native.js.map +1 -0
  88. package/package.json +61 -0
  89. package/src/Booker.tsx +152 -0
  90. package/src/BookingForm.tsx +180 -0
  91. package/src/CalendarEmbed.tsx +111 -0
  92. package/src/Confirmation.tsx +145 -0
  93. package/src/EventHeader.tsx +85 -0
  94. package/src/MonthCalendar.tsx +179 -0
  95. package/src/TimeSlots.tsx +102 -0
  96. package/src/client.ts +218 -0
  97. package/src/hooks.ts +180 -0
  98. package/src/index.ts +72 -0
  99. package/src/time.ts +131 -0
  100. package/src/useBooker.ts +187 -0
  101. package/types/Booker.d.ts +16 -0
  102. package/types/Booker.d.ts.map +1 -0
  103. package/types/BookingForm.d.ts +13 -0
  104. package/types/BookingForm.d.ts.map +1 -0
  105. package/types/CalendarEmbed.d.ts +15 -0
  106. package/types/CalendarEmbed.d.ts.map +1 -0
  107. package/types/Confirmation.d.ts +12 -0
  108. package/types/Confirmation.d.ts.map +1 -0
  109. package/types/EventHeader.d.ts +10 -0
  110. package/types/EventHeader.d.ts.map +1 -0
  111. package/types/MonthCalendar.d.ts +14 -0
  112. package/types/MonthCalendar.d.ts.map +1 -0
  113. package/types/TimeSlots.d.ts +15 -0
  114. package/types/TimeSlots.d.ts.map +1 -0
  115. package/types/client.d.ts +77 -0
  116. package/types/client.d.ts.map +1 -0
  117. package/types/hooks.d.ts +43 -0
  118. package/types/hooks.d.ts.map +1 -0
  119. package/types/index.d.ts +12 -0
  120. package/types/index.d.ts.map +1 -0
  121. package/types/time.d.ts +38 -0
  122. package/types/time.d.ts.map +1 -0
  123. package/types/useBooker.d.ts +41 -0
  124. package/types/useBooker.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","SizableText","Spinner","XStack","YStack","formatMonthLabel","isBeforeToday","monthMatrix","weekdayLabels","MonthCalendar","param","viewDate","availableKeys","selectedDay","onSelectDay","onPrev","onNext","atFirstMonth","weekStartsOn","loading","cells","rows","i","length","push","slice","labels","gap","flex","minWidth","children","alignItems","justifyContent","paddingVertical","NavArrow","label","disabled","onPress","size","fontWeight","color","map","l","flexBasis","flexGrow","row","r","cell","DayCell","available","has","key","past","selected","selectable","inMonth","dayNum","date","getDate","aspectRatio","borderRadius","borderWidth","borderColor","backgroundColor","opacity","cursor","hoverStyle","pressStyle","role","position","bottom","width","height"],"sources":["../../src/MonthCalendar.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,94 @@
1
+ import { Button, ScrollView, SizableText, XStack, YStack } from "hanzogui";
2
+ import { dateFromKey, formatDayLong, formatSlotTime } from "./time.mjs";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ function TimeSlots({
5
+ dayKey,
6
+ slots,
7
+ timeZone,
8
+ onPick,
9
+ selectedIso,
10
+ loading,
11
+ compact,
12
+ maxHeight = 360
13
+ }) {
14
+ if (!dayKey) {
15
+ return /* @__PURE__ */jsx(Centered, {
16
+ children: /* @__PURE__ */jsx(SizableText, {
17
+ size: "$3",
18
+ color: "$color10",
19
+ textAlign: "center",
20
+ children: "Select a day to see available times."
21
+ })
22
+ });
23
+ }
24
+ const heading = formatDayLong(dateFromKey(dayKey));
25
+ return /* @__PURE__ */jsxs(YStack, {
26
+ gap: "$2",
27
+ flex: 1,
28
+ minWidth: 200,
29
+ children: [/* @__PURE__ */jsx(SizableText, {
30
+ size: "$4",
31
+ fontWeight: "600",
32
+ color: "$color12",
33
+ children: heading
34
+ }), loading ? /* @__PURE__ */jsx(Centered, {
35
+ children: /* @__PURE__ */jsx(SizableText, {
36
+ size: "$2",
37
+ color: "$color10",
38
+ children: "Loading times\u2026"
39
+ })
40
+ }) : slots.length === 0 ? /* @__PURE__ */jsx(Centered, {
41
+ children: /* @__PURE__ */jsx(SizableText, {
42
+ size: "$3",
43
+ color: "$color10",
44
+ textAlign: "center",
45
+ children: "No times left on this day. Try another."
46
+ })
47
+ }) : /* @__PURE__ */jsx(ScrollView, {
48
+ maxHeight,
49
+ showsVerticalScrollIndicator: false,
50
+ children: /* @__PURE__ */jsx(XStack, {
51
+ flexWrap: "wrap",
52
+ gap: "$2",
53
+ flexDirection: compact ? "row" : "column",
54
+ children: slots.map(slot => {
55
+ const active = selectedIso === slot.time;
56
+ return /* @__PURE__ */jsx(Button, {
57
+ size: "$3",
58
+ theme: active ? "blue" : void 0,
59
+ chromeless: !active,
60
+ borderWidth: 1,
61
+ borderColor: active ? "$color8" : "$color6",
62
+ backgroundColor: active ? void 0 : "$color1",
63
+ hoverStyle: {
64
+ borderColor: "$color10"
65
+ },
66
+ pressStyle: {
67
+ backgroundColor: "$color4"
68
+ },
69
+ onPress: () => onPick(slot.time),
70
+ "aria-label": `Book ${formatSlotTime(slot.time, timeZone)}`,
71
+ ...(compact ? {} : {
72
+ alignSelf: "stretch"
73
+ }),
74
+ children: formatSlotTime(slot.time, timeZone)
75
+ }, slot.time);
76
+ })
77
+ })
78
+ })]
79
+ });
80
+ }
81
+ function Centered({
82
+ children
83
+ }) {
84
+ return /* @__PURE__ */jsx(YStack, {
85
+ flex: 1,
86
+ minHeight: 120,
87
+ alignItems: "center",
88
+ justifyContent: "center",
89
+ padding: "$4",
90
+ children
91
+ });
92
+ }
93
+ export { TimeSlots };
94
+ //# sourceMappingURL=TimeSlots.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Button","ScrollView","SizableText","XStack","YStack","dateFromKey","formatDayLong","formatSlotTime","jsx","jsxs","TimeSlots","dayKey","slots","timeZone","onPick","selectedIso","loading","compact","maxHeight","Centered","children","size","color","textAlign","heading","gap","flex","minWidth","fontWeight","length","showsVerticalScrollIndicator","flexWrap","flexDirection","map","slot","active","time","theme","chromeless","borderWidth","borderColor","backgroundColor","hoverStyle","pressStyle","onPress","alignSelf","minHeight","alignItems","justifyContent","padding"],"sources":["../../src/TimeSlots.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,98 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, ScrollView, SizableText, XStack, YStack } from "hanzogui";
3
+ import { dateFromKey, formatDayLong, formatSlotTime } from "./time.native.js";
4
+ function TimeSlots(param) {
5
+ var {
6
+ dayKey,
7
+ slots,
8
+ timeZone,
9
+ onPick,
10
+ selectedIso,
11
+ loading,
12
+ compact,
13
+ maxHeight = 360
14
+ } = param;
15
+ if (!dayKey) {
16
+ return /* @__PURE__ */_jsx(Centered, {
17
+ children: /* @__PURE__ */_jsx(SizableText, {
18
+ size: "$3",
19
+ color: "$color10",
20
+ textAlign: "center",
21
+ children: "Select a day to see available times."
22
+ })
23
+ });
24
+ }
25
+ var heading = formatDayLong(dateFromKey(dayKey));
26
+ return /* @__PURE__ */_jsxs(YStack, {
27
+ gap: "$2",
28
+ flex: 1,
29
+ minWidth: 200,
30
+ children: [/* @__PURE__ */_jsx(SizableText, {
31
+ size: "$4",
32
+ fontWeight: "600",
33
+ color: "$color12",
34
+ children: heading
35
+ }), loading ? /* @__PURE__ */_jsx(Centered, {
36
+ children: /* @__PURE__ */_jsx(SizableText, {
37
+ size: "$2",
38
+ color: "$color10",
39
+ children: "Loading times\u2026"
40
+ })
41
+ }) : slots.length === 0 ? /* @__PURE__ */_jsx(Centered, {
42
+ children: /* @__PURE__ */_jsx(SizableText, {
43
+ size: "$3",
44
+ color: "$color10",
45
+ textAlign: "center",
46
+ children: "No times left on this day. Try another."
47
+ })
48
+ }) : /* @__PURE__ */_jsx(ScrollView, {
49
+ maxHeight,
50
+ showsVerticalScrollIndicator: false,
51
+ children: /* @__PURE__ */_jsx(XStack, {
52
+ flexWrap: "wrap",
53
+ gap: "$2",
54
+ flexDirection: compact ? "row" : "column",
55
+ children: slots.map(function (slot) {
56
+ var active = selectedIso === slot.time;
57
+ return /* @__PURE__ */_jsx(Button, {
58
+ size: "$3",
59
+ theme: active ? "blue" : void 0,
60
+ chromeless: !active,
61
+ borderWidth: 1,
62
+ borderColor: active ? "$color8" : "$color6",
63
+ backgroundColor: active ? void 0 : "$color1",
64
+ hoverStyle: {
65
+ borderColor: "$color10"
66
+ },
67
+ pressStyle: {
68
+ backgroundColor: "$color4"
69
+ },
70
+ onPress: function () {
71
+ return onPick(slot.time);
72
+ },
73
+ "aria-label": `Book ${formatSlotTime(slot.time, timeZone)}`,
74
+ ...(compact ? {} : {
75
+ alignSelf: "stretch"
76
+ }),
77
+ children: formatSlotTime(slot.time, timeZone)
78
+ }, slot.time);
79
+ })
80
+ })
81
+ })]
82
+ });
83
+ }
84
+ function Centered(param) {
85
+ var {
86
+ children
87
+ } = param;
88
+ return /* @__PURE__ */_jsx(YStack, {
89
+ flex: 1,
90
+ minHeight: 120,
91
+ alignItems: "center",
92
+ justifyContent: "center",
93
+ padding: "$4",
94
+ children
95
+ });
96
+ }
97
+ export { TimeSlots };
98
+ //# sourceMappingURL=TimeSlots.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","Button","ScrollView","SizableText","XStack","YStack","dateFromKey","formatDayLong","formatSlotTime","TimeSlots","param","dayKey","slots","timeZone","onPick","selectedIso","loading","compact","maxHeight","Centered","children","size","color","textAlign","heading","gap","flex","minWidth","fontWeight","length","showsVerticalScrollIndicator","flexWrap","flexDirection","map","slot","active","time","theme","chromeless","borderWidth","borderColor"],"sources":["../../src/TimeSlots.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,GAAA,IAAAC,IAAQ,EAAAC,IAAA,IAAYC,KAAA,QAAa,mBAAQ;AAElD,SAASC,MAAA,EAAAC,UAAa,EAAAC,WAAe,EAAAC,MAAA,EAAAC,MAAA,QAAsB;AA4BnD,SAAAC,WAUJ,EAAAC,aAVI,EAAAC,cAAA;AAbD,SAASC,UAAUC,KAAA;EACxB;IAAAC,MAAA;IAAAC,KAAA;IAAAC,QAAA;IAAAC,MAAA;IAAAC,WAAA;IAAAC,OAAA;IAAAC,OAAA;IAAAC,SAAA;EAAA,IAAAR,KAAA;EACA,KAAAC,MAAA;IACA,sBAAAb,IAAA,CAAAqB,QAAA;MACAC,QAAA,iBAAAtB,IAAA,CAAAK,WAAA;QACAkB,IAAA;QACAC,KAAA;QACAC,SAAA;QACAH,QAAY;MACK;IACjB,EAAI;EACF;EAOF,IAAAI,OAAA,GAAAjB,aAAA,CAAAD,WAAA,CAAAK,MAAA;EAEA,OAAM,eAAUX,KAAA,CAAAK,MAAc;IAE9BoB,GAAA,EACE;IACEC,IAAA;IAICC,QAAA,EACC;IAeMP,QAAM,GACN,eACEtB,IAAA,CAAAK,WAAA;MAACkB,IAAA;MAAAO,UAAA;MAAAN,KAEC,YAAK;MAAAF,QACL,EAAOI;IAAkB,IACZR,OACb,kBAAalB,IAAA,CAAAqB,QAAA;MAAAC,QACb,iBAAsBtB,IAAA,CAAAK,WAAY;QAClCkB,IAAA;QACAC,KAAA,YAAc;QACdF,QAAA;MAAyC;IACV,KAC/BR,KAAA,CAAAiB,MAAA,KAAY,IAAQ,eAAe/B,IAAK,CAAAqB,QAAM;MAASC,QAClD,iBAAiBtB,IAAA,CAAAK,WAAW,EAAU;QAE1CkB,IAAA;QAAkCC,KAAA;QAb9BC,SAAK;QAcZH,QAAA;MAGN;IAGN,oBAAAtB,IAAA,CAAAI,UAAA;MAEJgB,SAAA;MAEAY,4BAAyD;MACvDV,QACE,iBAAAtB,IAAA,CAAAM,MAAA;QAAC2B,QAAA;QAAAN,GAAA;QACCO,aAAM,EAAAf,OAAA;QACNG,QAAW,EAAAR,KAAA,CAAAqB,GAAA,WAAAC,IAAA;UACX,IAAAC,MAAW,GAAApB,WAAA,KAAAmB,IAAA,CAAAE,IAAA;UACX,sBAAetC,IAAA,CAAAG,MAAA;YACfoB,IAAQ;YAEPgB,KAAA,EAAAF,MAAA;YAAAG,UAAA,GAAAH,MAAA;YACHI,WAAA;YAEJC,WAAA,EAAAL,MAAA","ignoreList":[]}
@@ -0,0 +1,104 @@
1
+ const DEFAULT_API_URL = "https://api.hanzo.ai/v1/calendar";
2
+ const CAL_API_VERSION = "2024-08-13";
3
+ class CalendarError extends Error {
4
+ status;
5
+ conflict;
6
+ constructor(message, status) {
7
+ super(message);
8
+ this.name = "CalendarError";
9
+ this.status = status;
10
+ this.conflict = status === 409;
11
+ }
12
+ }
13
+ function messageOf(body, status) {
14
+ const b = body;
15
+ return b?.error?.message || b?.message || `Request failed (${status})`;
16
+ }
17
+ async function readJson(res) {
18
+ return res.json().catch(() => null);
19
+ }
20
+ async function getJson(url, signal) {
21
+ const res = await fetch(url, {
22
+ headers: {
23
+ Accept: "application/json"
24
+ },
25
+ signal
26
+ });
27
+ const body = await readJson(res);
28
+ if (!res.ok) throw new CalendarError(messageOf(body, res.status), res.status);
29
+ return body.data;
30
+ }
31
+ function normalizeEventType(raw) {
32
+ const length = raw.length ?? raw.lengthInMinutes ?? raw.durationMinutes ?? 30;
33
+ return {
34
+ id: Number(raw.id ?? 0),
35
+ slug: String(raw.slug ?? ""),
36
+ title: String(raw.title ?? ""),
37
+ description: String(raw.description ?? ""),
38
+ length,
39
+ locations: raw.locations ?? [],
40
+ price: Number(raw.price ?? 0),
41
+ currency: String(raw.currency ?? "usd"),
42
+ profile: raw.profile
43
+ };
44
+ }
45
+ async function fetchEventType(api, eventSlug, username, signal) {
46
+ const url = `${api}/atoms/event-types/${encodeURIComponent(eventSlug)}/public?username=${encodeURIComponent(username)}`;
47
+ const raw = await getJson(url, signal);
48
+ return normalizeEventType(raw);
49
+ }
50
+ async function fetchSlots(api, input, signal) {
51
+ const q = new URLSearchParams({
52
+ eventTypeSlug: input.eventTypeSlug,
53
+ usernameList: input.username,
54
+ startTime: input.startTime,
55
+ endTime: input.endTime,
56
+ timeZone: input.timeZone
57
+ });
58
+ const data = await getJson(`${api}/slots/available?${q.toString()}`, signal);
59
+ const slots = data.slots ?? data;
60
+ return slots ?? {};
61
+ }
62
+ async function createBooking(api, input, signal) {
63
+ const res = await fetch(`${api}/bookings`, {
64
+ method: "POST",
65
+ headers: {
66
+ "Content-Type": "application/json",
67
+ Accept: "application/json",
68
+ "cal-api-version": CAL_API_VERSION
69
+ },
70
+ body: JSON.stringify({
71
+ eventTypeSlug: input.eventTypeSlug,
72
+ user: input.username,
73
+ start: input.start,
74
+ timeZone: input.timeZone,
75
+ responses: input.responses
76
+ }),
77
+ signal
78
+ });
79
+ const body = await readJson(res);
80
+ if (!res.ok) throw new CalendarError(messageOf(body, res.status), res.status);
81
+ return body.data;
82
+ }
83
+ async function fetchBooking(api, uid, signal) {
84
+ return getJson(`${api}/bookings/${encodeURIComponent(uid)}`, signal);
85
+ }
86
+ async function cancelBooking(api, uid, reason, signal) {
87
+ const res = await fetch(`${api}/bookings/${encodeURIComponent(uid)}/cancel`, {
88
+ method: "POST",
89
+ headers: {
90
+ "Content-Type": "application/json",
91
+ Accept: "application/json",
92
+ "cal-api-version": CAL_API_VERSION
93
+ },
94
+ body: JSON.stringify({
95
+ reason: reason ?? ""
96
+ }),
97
+ signal
98
+ });
99
+ const body = await readJson(res);
100
+ if (!res.ok) throw new CalendarError(messageOf(body, res.status), res.status);
101
+ return body.data;
102
+ }
103
+ export { CAL_API_VERSION, CalendarError, DEFAULT_API_URL, cancelBooking, createBooking, fetchBooking, fetchEventType, fetchSlots };
104
+ //# sourceMappingURL=client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_API_URL","CAL_API_VERSION","CalendarError","Error","status","conflict","constructor","message","name","messageOf","body","b","error","readJson","res","json","catch","getJson","url","signal","fetch","headers","Accept","ok","data","normalizeEventType","raw","length","lengthInMinutes","durationMinutes","id","Number","slug","String","title","description","locations","price","currency","profile","fetchEventType","api","eventSlug","username","encodeURIComponent","fetchSlots","input","q","URLSearchParams","eventTypeSlug","usernameList","startTime","endTime","timeZone","toString","slots","createBooking","method","JSON","stringify","user","start","responses","fetchBooking","uid","cancelBooking","reason"],"sources":["../../src/client.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,232 @@
1
+ function _assert_this_initialized(self) {
2
+ if (self === void 0) {
3
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
4
+ }
5
+ return self;
6
+ }
7
+ function _call_super(_this, derived, args) {
8
+ derived = _get_prototype_of(derived);
9
+ return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
10
+ }
11
+ function _class_call_check(instance, Constructor) {
12
+ if (!(instance instanceof Constructor)) {
13
+ throw new TypeError("Cannot call a class as a function");
14
+ }
15
+ }
16
+ function _construct(Parent, args, Class) {
17
+ if (_is_native_reflect_construct()) {
18
+ _construct = Reflect.construct;
19
+ } else {
20
+ _construct = function construct(Parent2, args2, Class2) {
21
+ var a = [null];
22
+ a.push.apply(a, args2);
23
+ var Constructor = Function.bind.apply(Parent2, a);
24
+ var instance = new Constructor();
25
+ if (Class2) _set_prototype_of(instance, Class2.prototype);
26
+ return instance;
27
+ };
28
+ }
29
+ return _construct.apply(null, arguments);
30
+ }
31
+ function _define_property(obj, key, value) {
32
+ if (key in obj) {
33
+ Object.defineProperty(obj, key, {
34
+ value,
35
+ enumerable: true,
36
+ configurable: true,
37
+ writable: true
38
+ });
39
+ } else {
40
+ obj[key] = value;
41
+ }
42
+ return obj;
43
+ }
44
+ function _get_prototype_of(o) {
45
+ _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o2) {
46
+ return o2.__proto__ || Object.getPrototypeOf(o2);
47
+ };
48
+ return _get_prototype_of(o);
49
+ }
50
+ function _inherits(subClass, superClass) {
51
+ if (typeof superClass !== "function" && superClass !== null) {
52
+ throw new TypeError("Super expression must either be null or a function");
53
+ }
54
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
55
+ constructor: {
56
+ value: subClass,
57
+ writable: true,
58
+ configurable: true
59
+ }
60
+ });
61
+ if (superClass) _set_prototype_of(subClass, superClass);
62
+ }
63
+ function _is_native_function(fn) {
64
+ return Function.toString.call(fn).indexOf("[native code]") !== -1;
65
+ }
66
+ function _possible_constructor_return(self, call) {
67
+ if (call && (_type_of(call) === "object" || typeof call === "function")) {
68
+ return call;
69
+ }
70
+ return _assert_this_initialized(self);
71
+ }
72
+ function _set_prototype_of(o, p) {
73
+ _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o2, p2) {
74
+ o2.__proto__ = p2;
75
+ return o2;
76
+ };
77
+ return _set_prototype_of(o, p);
78
+ }
79
+ function _type_of(obj) {
80
+ "@swc/helpers - typeof";
81
+
82
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
83
+ }
84
+ function _wrap_native_super(Class) {
85
+ var _cache = typeof Map === "function" ? /* @__PURE__ */new Map() : void 0;
86
+ _wrap_native_super = function wrapNativeSuper(Class2) {
87
+ if (Class2 === null || !_is_native_function(Class2)) return Class2;
88
+ if (typeof Class2 !== "function") {
89
+ throw new TypeError("Super expression must either be null or a function");
90
+ }
91
+ if (typeof _cache !== "undefined") {
92
+ if (_cache.has(Class2)) return _cache.get(Class2);
93
+ _cache.set(Class2, Wrapper);
94
+ }
95
+ function Wrapper() {
96
+ return _construct(Class2, arguments, _get_prototype_of(this).constructor);
97
+ }
98
+ Wrapper.prototype = Object.create(Class2.prototype, {
99
+ constructor: {
100
+ value: Wrapper,
101
+ enumerable: false,
102
+ writable: true,
103
+ configurable: true
104
+ }
105
+ });
106
+ return _set_prototype_of(Wrapper, Class2);
107
+ };
108
+ return _wrap_native_super(Class);
109
+ }
110
+ function _is_native_reflect_construct() {
111
+ try {
112
+ var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
113
+ } catch (_) {}
114
+ return (_is_native_reflect_construct = function () {
115
+ return !!result;
116
+ })();
117
+ }
118
+ var DEFAULT_API_URL = "https://api.hanzo.ai/v1/calendar";
119
+ var CAL_API_VERSION = "2024-08-13";
120
+ var CalendarError = /* @__PURE__ */function (Error1) {
121
+ "use strict";
122
+
123
+ _inherits(CalendarError2, Error1);
124
+ function CalendarError2(message, status) {
125
+ _class_call_check(this, CalendarError2);
126
+ var _this;
127
+ _this = _call_super(this, CalendarError2, [message]), _define_property(_this, "status", void 0), _define_property(_this, "conflict", void 0);
128
+ _this.name = "CalendarError";
129
+ _this.status = status;
130
+ _this.conflict = status === 409;
131
+ return _this;
132
+ }
133
+ return CalendarError2;
134
+ }(_wrap_native_super(Error));
135
+ function messageOf(body, status) {
136
+ var _b_error;
137
+ var b = body;
138
+ return (b === null || b === void 0 ? void 0 : (_b_error = b.error) === null || _b_error === void 0 ? void 0 : _b_error.message) || (b === null || b === void 0 ? void 0 : b.message) || `Request failed (${status})`;
139
+ }
140
+ async function readJson(res) {
141
+ return res.json().catch(function () {
142
+ return null;
143
+ });
144
+ }
145
+ async function getJson(url, signal) {
146
+ var res = await fetch(url, {
147
+ headers: {
148
+ Accept: "application/json"
149
+ },
150
+ signal
151
+ });
152
+ var body = await readJson(res);
153
+ if (!res.ok) throw new CalendarError(messageOf(body, res.status), res.status);
154
+ return body.data;
155
+ }
156
+ function normalizeEventType(raw) {
157
+ var _raw_length, _ref, _ref1;
158
+ var length = (_ref1 = (_ref = (_raw_length = raw.length) !== null && _raw_length !== void 0 ? _raw_length : raw.lengthInMinutes) !== null && _ref !== void 0 ? _ref : raw.durationMinutes) !== null && _ref1 !== void 0 ? _ref1 : 30;
159
+ var _raw_id, _raw_slug, _raw_title, _raw_description, _raw_locations, _raw_price, _raw_currency;
160
+ return {
161
+ id: Number((_raw_id = raw.id) !== null && _raw_id !== void 0 ? _raw_id : 0),
162
+ slug: String((_raw_slug = raw.slug) !== null && _raw_slug !== void 0 ? _raw_slug : ""),
163
+ title: String((_raw_title = raw.title) !== null && _raw_title !== void 0 ? _raw_title : ""),
164
+ description: String((_raw_description = raw.description) !== null && _raw_description !== void 0 ? _raw_description : ""),
165
+ length,
166
+ locations: (_raw_locations = raw.locations) !== null && _raw_locations !== void 0 ? _raw_locations : [],
167
+ price: Number((_raw_price = raw.price) !== null && _raw_price !== void 0 ? _raw_price : 0),
168
+ currency: String((_raw_currency = raw.currency) !== null && _raw_currency !== void 0 ? _raw_currency : "usd"),
169
+ profile: raw.profile
170
+ };
171
+ }
172
+ async function fetchEventType(api, eventSlug, username, signal) {
173
+ var url = `${api}/atoms/event-types/${encodeURIComponent(eventSlug)}/public?username=${encodeURIComponent(username)}`;
174
+ var raw = await getJson(url, signal);
175
+ return normalizeEventType(raw);
176
+ }
177
+ async function fetchSlots(api, input, signal) {
178
+ var q = new URLSearchParams({
179
+ eventTypeSlug: input.eventTypeSlug,
180
+ usernameList: input.username,
181
+ startTime: input.startTime,
182
+ endTime: input.endTime,
183
+ timeZone: input.timeZone
184
+ });
185
+ var data = await getJson(`${api}/slots/available?${q.toString()}`, signal);
186
+ var _data_slots;
187
+ var slots = (_data_slots = data.slots) !== null && _data_slots !== void 0 ? _data_slots : data;
188
+ return slots !== null && slots !== void 0 ? slots : {};
189
+ }
190
+ async function createBooking(api, input, signal) {
191
+ var res = await fetch(`${api}/bookings`, {
192
+ method: "POST",
193
+ headers: {
194
+ "Content-Type": "application/json",
195
+ Accept: "application/json",
196
+ "cal-api-version": CAL_API_VERSION
197
+ },
198
+ body: JSON.stringify({
199
+ eventTypeSlug: input.eventTypeSlug,
200
+ user: input.username,
201
+ start: input.start,
202
+ timeZone: input.timeZone,
203
+ responses: input.responses
204
+ }),
205
+ signal
206
+ });
207
+ var body = await readJson(res);
208
+ if (!res.ok) throw new CalendarError(messageOf(body, res.status), res.status);
209
+ return body.data;
210
+ }
211
+ async function fetchBooking(api, uid, signal) {
212
+ return getJson(`${api}/bookings/${encodeURIComponent(uid)}`, signal);
213
+ }
214
+ async function cancelBooking(api, uid, reason, signal) {
215
+ var res = await fetch(`${api}/bookings/${encodeURIComponent(uid)}/cancel`, {
216
+ method: "POST",
217
+ headers: {
218
+ "Content-Type": "application/json",
219
+ Accept: "application/json",
220
+ "cal-api-version": CAL_API_VERSION
221
+ },
222
+ body: JSON.stringify({
223
+ reason: reason !== null && reason !== void 0 ? reason : ""
224
+ }),
225
+ signal
226
+ });
227
+ var body = await readJson(res);
228
+ if (!res.ok) throw new CalendarError(messageOf(body, res.status), res.status);
229
+ return body.data;
230
+ }
231
+ export { CAL_API_VERSION, CalendarError, DEFAULT_API_URL, cancelBooking, createBooking, fetchBooking, fetchEventType, fetchSlots };
232
+ //# sourceMappingURL=client.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_assert_this_initialized","self","ReferenceError","_call_super","_this","derived","args","_get_prototype_of","_possible_constructor_return","_is_native_reflect_construct","Reflect","construct","constructor","apply","_class_call_check","instance","Constructor","TypeError","_construct","Parent","Class","Parent2","args2","Class2","a","push","Function","bind","_set_prototype_of","prototype","arguments","_define_property","obj","key","value","Object","defineProperty","enumerable","configurable","writable","o","setPrototypeOf","getPrototypeOf","o2","__proto__","_inherits","subClass","superClass","create","_is_native_function","fn","toString","call","indexOf","_type_of","p","p2","Symbol","_wrap_native_super","_cache","Map","wrapNativeSuper","has","get","set","Wrapper"],"sources":["../../src/client.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}