@thebookingkit/server 0.1.2 → 0.1.5

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 (95) hide show
  1. package/README.md +2 -2
  2. package/dist/adapters/calendar-adapter.d.ts +47 -0
  3. package/dist/adapters/calendar-adapter.d.ts.map +1 -0
  4. package/dist/adapters/calendar-adapter.js +2 -0
  5. package/dist/adapters/calendar-adapter.js.map +1 -0
  6. package/dist/adapters/email-adapter.d.ts +65 -0
  7. package/dist/adapters/email-adapter.d.ts.map +1 -0
  8. package/dist/adapters/email-adapter.js +41 -0
  9. package/dist/adapters/email-adapter.js.map +1 -0
  10. package/dist/adapters/index.d.ts +9 -0
  11. package/dist/adapters/index.d.ts.map +1 -0
  12. package/dist/adapters/index.js +3 -0
  13. package/dist/adapters/index.js.map +1 -0
  14. package/dist/adapters/job-adapter.d.ts +26 -0
  15. package/dist/adapters/job-adapter.d.ts.map +1 -0
  16. package/dist/adapters/job-adapter.js +13 -0
  17. package/dist/adapters/job-adapter.js.map +1 -0
  18. package/dist/adapters/payment-adapter.d.ts +106 -0
  19. package/dist/adapters/payment-adapter.d.ts.map +1 -0
  20. package/dist/adapters/payment-adapter.js +8 -0
  21. package/dist/adapters/payment-adapter.js.map +1 -0
  22. package/dist/adapters/sms-adapter.d.ts +33 -0
  23. package/dist/adapters/sms-adapter.d.ts.map +1 -0
  24. package/dist/adapters/sms-adapter.js +8 -0
  25. package/dist/adapters/sms-adapter.js.map +1 -0
  26. package/{src/adapters/storage-adapter.ts → dist/adapters/storage-adapter.d.ts} +5 -4
  27. package/dist/adapters/storage-adapter.d.ts.map +1 -0
  28. package/dist/adapters/storage-adapter.js +2 -0
  29. package/dist/adapters/storage-adapter.js.map +1 -0
  30. package/dist/api.d.ts +223 -0
  31. package/dist/api.d.ts.map +1 -0
  32. package/dist/api.js +286 -0
  33. package/dist/api.js.map +1 -0
  34. package/dist/auth.d.ts +71 -0
  35. package/dist/auth.d.ts.map +1 -0
  36. package/dist/auth.js +90 -0
  37. package/dist/auth.js.map +1 -0
  38. package/dist/booking-tokens.d.ts +23 -0
  39. package/dist/booking-tokens.d.ts.map +1 -0
  40. package/dist/booking-tokens.js +52 -0
  41. package/dist/booking-tokens.js.map +1 -0
  42. package/dist/email-templates.d.ts +32 -0
  43. package/dist/email-templates.d.ts.map +1 -0
  44. package/{src/email-templates.ts → dist/email-templates.js} +14 -34
  45. package/dist/email-templates.js.map +1 -0
  46. package/dist/index.d.ts +13 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +22 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/multi-tenancy.d.ts +123 -0
  51. package/dist/multi-tenancy.d.ts.map +1 -0
  52. package/dist/multi-tenancy.js +197 -0
  53. package/dist/multi-tenancy.js.map +1 -0
  54. package/dist/notification-jobs.d.ts +143 -0
  55. package/dist/notification-jobs.d.ts.map +1 -0
  56. package/dist/notification-jobs.js +278 -0
  57. package/dist/notification-jobs.js.map +1 -0
  58. package/dist/serialization-retry.d.ts +28 -0
  59. package/dist/serialization-retry.d.ts.map +1 -0
  60. package/dist/serialization-retry.js +71 -0
  61. package/dist/serialization-retry.js.map +1 -0
  62. package/dist/webhooks.d.ts +164 -0
  63. package/dist/webhooks.d.ts.map +1 -0
  64. package/dist/webhooks.js +239 -0
  65. package/dist/webhooks.js.map +1 -0
  66. package/dist/workflows.d.ts +169 -0
  67. package/dist/workflows.d.ts.map +1 -0
  68. package/dist/workflows.js +271 -0
  69. package/dist/workflows.js.map +1 -0
  70. package/package.json +21 -2
  71. package/CHANGELOG.md +0 -9
  72. package/src/__tests__/api.test.ts +0 -354
  73. package/src/__tests__/auth.test.ts +0 -111
  74. package/src/__tests__/concurrent-booking.test.ts +0 -170
  75. package/src/__tests__/multi-tenancy.test.ts +0 -267
  76. package/src/__tests__/serialization-retry.test.ts +0 -76
  77. package/src/__tests__/webhooks.test.ts +0 -412
  78. package/src/__tests__/workflows.test.ts +0 -422
  79. package/src/adapters/calendar-adapter.ts +0 -49
  80. package/src/adapters/email-adapter.ts +0 -108
  81. package/src/adapters/index.ts +0 -36
  82. package/src/adapters/job-adapter.ts +0 -26
  83. package/src/adapters/payment-adapter.ts +0 -118
  84. package/src/adapters/sms-adapter.ts +0 -35
  85. package/src/api.ts +0 -446
  86. package/src/auth.ts +0 -146
  87. package/src/booking-tokens.ts +0 -61
  88. package/src/index.ts +0 -192
  89. package/src/multi-tenancy.ts +0 -301
  90. package/src/notification-jobs.ts +0 -428
  91. package/src/serialization-retry.ts +0 -94
  92. package/src/webhooks.ts +0 -378
  93. package/src/workflows.ts +0 -441
  94. package/tsconfig.json +0 -9
  95. package/vitest.config.ts +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../src/workflows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Workflow automation engine.
3
+ *
4
+ * Trigger-condition-action framework that automates tasks
5
+ * based on booking lifecycle events.
6
+ */
7
+ // ---------------------------------------------------------------------------
8
+ // Errors
9
+ // ---------------------------------------------------------------------------
10
+ /** Error thrown when workflow validation fails */
11
+ export class WorkflowValidationError extends Error {
12
+ constructor(message) {
13
+ super(message);
14
+ this.name = "WorkflowValidationError";
15
+ }
16
+ }
17
+ // ---------------------------------------------------------------------------
18
+ // Template Variables
19
+ // ---------------------------------------------------------------------------
20
+ /** Standard template variables available in workflow messages */
21
+ export const TEMPLATE_VARIABLES = [
22
+ "{booking.title}",
23
+ "{booking.startTime}",
24
+ "{booking.endTime}",
25
+ "{booking.date}",
26
+ "{attendee.name}",
27
+ "{attendee.email}",
28
+ "{host.name}",
29
+ "{event.location}",
30
+ "{event.duration}",
31
+ "{booking.managementUrl}",
32
+ ];
33
+ /**
34
+ * Resolve template variables in a string using workflow context.
35
+ *
36
+ * Missing variables are replaced with empty strings.
37
+ *
38
+ * @param template - The template string with `{variable}` placeholders
39
+ * @param context - The workflow context with booking/event data
40
+ * @returns The resolved string
41
+ */
42
+ export function resolveTemplateVariables(template, context) {
43
+ const tz = typeof context.timezone === "string" ? context.timezone : undefined;
44
+ const vars = {
45
+ "{booking.title}": context.eventTitle ?? "",
46
+ "{booking.startTime}": context.startsAt
47
+ ? formatTime(context.startsAt, tz)
48
+ : "",
49
+ "{booking.endTime}": context.endsAt ? formatTime(context.endsAt, tz) : "",
50
+ "{booking.date}": context.startsAt ? formatDate(context.startsAt, tz) : "",
51
+ "{attendee.name}": context.customerName ?? "",
52
+ "{attendee.email}": context.customerEmail ?? "",
53
+ "{host.name}": context.hostName ?? "",
54
+ "{event.location}": context.eventLocation ?? "",
55
+ "{event.duration}": context.eventDuration
56
+ ? `${context.eventDuration} minutes`
57
+ : "",
58
+ "{booking.managementUrl}": context.managementUrl ?? "",
59
+ };
60
+ let result = template;
61
+ for (const [key, value] of Object.entries(vars)) {
62
+ result = result.replaceAll(key, value);
63
+ }
64
+ return result;
65
+ }
66
+ function formatTime(date, timeZone) {
67
+ return date.toLocaleTimeString("en-US", {
68
+ hour: "numeric",
69
+ minute: "2-digit",
70
+ hour12: true,
71
+ ...(timeZone ? { timeZone } : {}),
72
+ });
73
+ }
74
+ function formatDate(date, timeZone) {
75
+ return date.toLocaleDateString("en-US", {
76
+ weekday: "long",
77
+ year: "numeric",
78
+ month: "long",
79
+ day: "numeric",
80
+ ...(timeZone ? { timeZone } : {}),
81
+ });
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // Default Templates
85
+ // ---------------------------------------------------------------------------
86
+ /** Default workflow templates for common scenarios */
87
+ export const DEFAULT_TEMPLATES = {
88
+ confirmation: {
89
+ subject: "Booking Confirmed: {booking.title}",
90
+ body: "Hi {attendee.name},\n\nYour booking for {booking.title} on {booking.date} at {booking.startTime} has been confirmed.\n\nDuration: {event.duration}\nLocation: {event.location}\n\nManage your booking: {booking.managementUrl}\n\nBest regards,\n{host.name}",
91
+ },
92
+ reminder_24h: {
93
+ subject: "Reminder: {booking.title} tomorrow",
94
+ body: "Hi {attendee.name},\n\nThis is a reminder that you have a booking for {booking.title} tomorrow at {booking.startTime}.\n\nLocation: {event.location}\n\nManage your booking: {booking.managementUrl}\n\nSee you soon,\n{host.name}",
95
+ },
96
+ reminder_1h: {
97
+ subject: "Reminder: {booking.title} in 1 hour",
98
+ body: "Hi {attendee.name},\n\nYour booking for {booking.title} starts in 1 hour at {booking.startTime}.\n\nLocation: {event.location}\n\nSee you soon,\n{host.name}",
99
+ },
100
+ cancellation: {
101
+ subject: "Booking Cancelled: {booking.title}",
102
+ body: "Hi {attendee.name},\n\nYour booking for {booking.title} on {booking.date} at {booking.startTime} has been cancelled.\n\nIf you'd like to rebook, please visit our booking page.\n\nBest regards,\n{host.name}",
103
+ },
104
+ followup: {
105
+ subject: "How was your {booking.title}?",
106
+ body: "Hi {attendee.name},\n\nThank you for your recent {booking.title} with {host.name}.\n\nWe hope you had a great experience! If you'd like to book again, we'd love to see you.\n\nBest regards,\n{host.name}",
107
+ },
108
+ };
109
+ // ---------------------------------------------------------------------------
110
+ // Condition Evaluation
111
+ // ---------------------------------------------------------------------------
112
+ /**
113
+ * Evaluate whether a workflow's conditions are met for the given context.
114
+ *
115
+ * If no conditions are defined, returns true (unconditional trigger).
116
+ * All conditions must match (AND logic).
117
+ *
118
+ * @param conditions - Array of workflow conditions
119
+ * @param context - The workflow context data
120
+ * @returns Whether all conditions are satisfied
121
+ */
122
+ export function evaluateConditions(conditions, context) {
123
+ if (conditions.length === 0)
124
+ return true;
125
+ return conditions.every((condition) => {
126
+ const fieldValue = String(context[condition.field] ?? "");
127
+ switch (condition.operator) {
128
+ case "equals":
129
+ return fieldValue === String(condition.value);
130
+ case "not_equals":
131
+ return fieldValue !== String(condition.value);
132
+ case "contains":
133
+ return fieldValue
134
+ .toLowerCase()
135
+ .includes(String(condition.value).toLowerCase());
136
+ case "in": {
137
+ const values = Array.isArray(condition.value)
138
+ ? condition.value
139
+ : [condition.value];
140
+ return values.includes(fieldValue);
141
+ }
142
+ default:
143
+ return false;
144
+ }
145
+ });
146
+ }
147
+ // ---------------------------------------------------------------------------
148
+ // Workflow Validation
149
+ // ---------------------------------------------------------------------------
150
+ /** Valid triggers for workflows */
151
+ const VALID_TRIGGERS = [
152
+ "booking_created",
153
+ "booking_confirmed",
154
+ "booking_cancelled",
155
+ "booking_rescheduled",
156
+ "before_event",
157
+ "after_event",
158
+ "payment_received",
159
+ "payment_failed",
160
+ "no_show_confirmed",
161
+ "form_submitted",
162
+ ];
163
+ /** Valid action types */
164
+ const VALID_ACTION_TYPES = [
165
+ "send_email",
166
+ "send_sms",
167
+ "fire_webhook",
168
+ "update_status",
169
+ "create_calendar_event",
170
+ ];
171
+ /**
172
+ * Validate a workflow definition.
173
+ *
174
+ * @param workflow - The workflow to validate
175
+ * @throws {WorkflowValidationError} If the workflow is invalid
176
+ */
177
+ export function validateWorkflow(workflow) {
178
+ if (!workflow.name || workflow.name.trim().length === 0) {
179
+ throw new WorkflowValidationError("Workflow name is required");
180
+ }
181
+ if (!VALID_TRIGGERS.includes(workflow.trigger)) {
182
+ throw new WorkflowValidationError(`Invalid trigger: "${workflow.trigger}". Must be one of: ${VALID_TRIGGERS.join(", ")}`);
183
+ }
184
+ if (!Array.isArray(workflow.actions) || workflow.actions.length === 0) {
185
+ throw new WorkflowValidationError("Workflow must have at least one action");
186
+ }
187
+ for (const action of workflow.actions) {
188
+ if (!VALID_ACTION_TYPES.includes(action.type)) {
189
+ throw new WorkflowValidationError(`Invalid action type: "${action.type}"`);
190
+ }
191
+ validateAction(action);
192
+ }
193
+ for (const condition of workflow.conditions) {
194
+ if (!condition.field || condition.field.trim().length === 0) {
195
+ throw new WorkflowValidationError("Condition field is required");
196
+ }
197
+ if (!["equals", "not_equals", "contains", "in"].includes(condition.operator)) {
198
+ throw new WorkflowValidationError(`Invalid condition operator: "${condition.operator}"`);
199
+ }
200
+ }
201
+ }
202
+ function validateAction(action) {
203
+ switch (action.type) {
204
+ case "send_email":
205
+ if (!action.to) {
206
+ throw new WorkflowValidationError("Email action requires 'to' field");
207
+ }
208
+ if (!action.subject) {
209
+ throw new WorkflowValidationError("Email action requires 'subject' field");
210
+ }
211
+ if (!action.body) {
212
+ throw new WorkflowValidationError("Email action requires 'body' field");
213
+ }
214
+ break;
215
+ case "send_sms":
216
+ if (!action.to) {
217
+ throw new WorkflowValidationError("SMS action requires 'to' field");
218
+ }
219
+ if (!action.body) {
220
+ throw new WorkflowValidationError("SMS action requires 'body' field");
221
+ }
222
+ break;
223
+ case "fire_webhook":
224
+ if (!action.url) {
225
+ throw new WorkflowValidationError("Webhook action requires 'url' field");
226
+ }
227
+ {
228
+ let parsedUrl;
229
+ try {
230
+ parsedUrl = new URL(action.url);
231
+ }
232
+ catch {
233
+ throw new WorkflowValidationError(`Webhook action has invalid URL: "${action.url}"`);
234
+ }
235
+ if (parsedUrl.protocol !== "https:") {
236
+ throw new WorkflowValidationError("Webhook URL must use HTTPS");
237
+ }
238
+ const hostname = parsedUrl.hostname.toLowerCase();
239
+ const ssrfPattern = /^(localhost|127\.\d+\.\d+\.\d+|10\.\d+\.\d+\.\d+|172\.(1[6-9]|2\d|3[01])\.\d+\.\d+|192\.168\.\d+\.\d+|169\.254\.\d+\.\d+|\[::1\]|::1)$/;
240
+ if (ssrfPattern.test(hostname)) {
241
+ throw new WorkflowValidationError(`Webhook URL hostname is not allowed: "${hostname}"`);
242
+ }
243
+ }
244
+ break;
245
+ case "update_status":
246
+ if (!action.status) {
247
+ throw new WorkflowValidationError("Status update action requires 'status' field");
248
+ }
249
+ break;
250
+ case "create_calendar_event":
251
+ // No required fields
252
+ break;
253
+ }
254
+ }
255
+ // ---------------------------------------------------------------------------
256
+ // Workflow Matching
257
+ // ---------------------------------------------------------------------------
258
+ /**
259
+ * Find all active workflows that match a given trigger and context.
260
+ *
261
+ * @param workflows - All available workflows
262
+ * @param trigger - The trigger event that occurred
263
+ * @param context - The workflow context data
264
+ * @returns Workflows that should be executed
265
+ */
266
+ export function matchWorkflows(workflows, trigger, context) {
267
+ return workflows.filter((w) => w.isActive &&
268
+ w.trigger === trigger &&
269
+ evaluateConditions(w.conditions, context));
270
+ }
271
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../src/workflows.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,21 @@
1
1
  {
2
2
  "name": "@thebookingkit/server",
3
- "version": "0.1.2",
3
+ "version": "0.1.5",
4
+ "description": "Backend APIs, auth middleware, webhooks, notifications, and multi-tenant utilities for The Booking Kit",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/thebookingkit/thebookingkit.git",
9
+ "directory": "packages/server"
10
+ },
11
+ "homepage": "https://thebookingkit.com",
12
+ "keywords": [
13
+ "thebookingkit",
14
+ "booking",
15
+ "scheduling",
16
+ "server",
17
+ "api"
18
+ ],
4
19
  "publishConfig": {
5
20
  "access": "public"
6
21
  },
@@ -14,6 +29,10 @@
14
29
  "types": "./dist/index.d.ts"
15
30
  }
16
31
  },
32
+ "files": [
33
+ "dist",
34
+ "!dist/__tests__"
35
+ ],
17
36
  "scripts": {
18
37
  "build": "tsc",
19
38
  "prepublishOnly": "npm run build",
@@ -22,7 +41,7 @@
22
41
  "test:watch": "vitest"
23
42
  },
24
43
  "dependencies": {
25
- "@thebookingkit/core": "^0.1.1"
44
+ "@thebookingkit/core": "^0.1.5"
26
45
  },
27
46
  "devDependencies": {
28
47
  "@types/node": "^25.3.5",
package/CHANGELOG.md DELETED
@@ -1,9 +0,0 @@
1
- # @thebookingkit/server
2
-
3
- ## 0.1.1
4
-
5
- ### Patch Changes
6
-
7
- - Initial release of The Booking Kit packages.
8
- - Updated dependencies
9
- - @thebookingkit/core@0.1.1