@shophost/rest-api 2.0.65 → 2.0.68

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 (206) hide show
  1. package/package.json +2 -2
  2. package/scripts/shophost-rest-api.mjs +0 -1
  3. package/src/container.d.ts +2 -2
  4. package/src/container.js +1 -1
  5. package/src/core/lib/prisma.d.ts +24 -24
  6. package/src/core/notifications/email.service.d.ts +1 -1
  7. package/src/core/notifications/email.service.js +1 -1
  8. package/src/features/cart/cart.service.js +1 -1
  9. package/src/features/customer/customer.route.d.ts +4 -4
  10. package/src/features/customer/customer.schema.d.ts +4 -4
  11. package/src/features/customer/customer.service.d.ts +1 -1
  12. package/src/features/integration/integration.service.d.ts +1 -1
  13. package/src/features/integration/integration.service.js +1 -1
  14. package/src/features/order/order-fulfillment.service.js +1 -1
  15. package/src/features/order/order.handler.js +1 -1
  16. package/src/features/order/order.route.d.ts +139 -21
  17. package/src/features/order/order.route.js +1 -1
  18. package/src/features/order/order.schema.d.ts +4 -4
  19. package/src/features/order/order.service.d.ts +13 -7
  20. package/src/features/order/order.service.js +1 -1
  21. package/src/features/order/recipient.schema.d.ts +1 -1
  22. package/src/features/organization/legal-entity.schema.d.ts +1 -1
  23. package/src/features/organization/organization-configuration.schema.d.ts +1 -1
  24. package/src/features/organization/organization.route.d.ts +5 -5
  25. package/src/features/organization/organization.schema.d.ts +2 -2
  26. package/src/features/organization/organization.service.d.ts +4 -4
  27. package/src/features/payment/payment-webhook.service.d.ts +1 -3
  28. package/src/features/payment/payment-webhook.service.js +1 -1
  29. package/src/features/payment/payment.schema.d.ts +1 -1
  30. package/src/features/payment/payment.schema.js +1 -1
  31. package/src/features/payment/payment.service.d.ts +1 -0
  32. package/src/features/payment/stripe.service.d.ts +4 -1
  33. package/src/features/payment/stripe.service.js +1 -1
  34. package/src/features/reservation/emails/reservation-cancellation.email.js +1 -1
  35. package/src/features/reservation/emails/reservation-confirmation.email.js +1 -1
  36. package/src/features/reservation/emails/reservation-notification.email.js +1 -1
  37. package/src/features/shipping/shipping.route.d.ts +4 -4
  38. package/src/features/shipping/shipping.service.d.ts +3 -3
  39. package/src/features/webhook/webhook.handler.js +1 -1
  40. package/src/features/webhook/webhook.route.d.ts +2 -2
  41. package/src/features/webhook/webhook.route.js +1 -1
  42. package/src/schemas/address.schema.d.ts +3 -3
  43. package/src/schemas/address.schema.js +1 -1
  44. package/scripts/minify-dist.mjs +0 -45
  45. package/src/bootstrap.js.map +0 -1
  46. package/src/container.js.map +0 -1
  47. package/src/core/auth/auth.schema.js.map +0 -1
  48. package/src/core/auth/auth.util.js.map +0 -1
  49. package/src/core/auth/better-auth.lib.js.map +0 -1
  50. package/src/core/auth/generate-password-hash.util.js.map +0 -1
  51. package/src/core/auth/headers.schema.js.map +0 -1
  52. package/src/core/auth/user.schema.js.map +0 -1
  53. package/src/core/db/__generated__/client/browser.js.map +0 -1
  54. package/src/core/db/__generated__/client/client.js.map +0 -1
  55. package/src/core/db/__generated__/client/commonInputTypes.js.map +0 -1
  56. package/src/core/db/__generated__/client/enums.js.map +0 -1
  57. package/src/core/db/__generated__/client/internal/class.js.map +0 -1
  58. package/src/core/db/__generated__/client/internal/prismaNamespace.js.map +0 -1
  59. package/src/core/db/__generated__/client/internal/prismaNamespaceBrowser.js.map +0 -1
  60. package/src/core/db/__generated__/client/models/Account.js.map +0 -1
  61. package/src/core/db/__generated__/client/models/Address.js.map +0 -1
  62. package/src/core/db/__generated__/client/models/Campaign.js.map +0 -1
  63. package/src/core/db/__generated__/client/models/ClosingTimes.js.map +0 -1
  64. package/src/core/db/__generated__/client/models/File.js.map +0 -1
  65. package/src/core/db/__generated__/client/models/Integration.js.map +0 -1
  66. package/src/core/db/__generated__/client/models/Invitation.js.map +0 -1
  67. package/src/core/db/__generated__/client/models/LegalEntity.js.map +0 -1
  68. package/src/core/db/__generated__/client/models/Manufacturer.js.map +0 -1
  69. package/src/core/db/__generated__/client/models/ManufacturerTranslation.js.map +0 -1
  70. package/src/core/db/__generated__/client/models/Member.js.map +0 -1
  71. package/src/core/db/__generated__/client/models/Modifier.js.map +0 -1
  72. package/src/core/db/__generated__/client/models/ModifierGroup.js.map +0 -1
  73. package/src/core/db/__generated__/client/models/ModifierGroupTranslation.js.map +0 -1
  74. package/src/core/db/__generated__/client/models/OpeningTimes.js.map +0 -1
  75. package/src/core/db/__generated__/client/models/Order.js.map +0 -1
  76. package/src/core/db/__generated__/client/models/OrderItem.js.map +0 -1
  77. package/src/core/db/__generated__/client/models/OrderItemTranslation.js.map +0 -1
  78. package/src/core/db/__generated__/client/models/Organization.js.map +0 -1
  79. package/src/core/db/__generated__/client/models/OrganizationConfiguration.js.map +0 -1
  80. package/src/core/db/__generated__/client/models/Payment.js.map +0 -1
  81. package/src/core/db/__generated__/client/models/PaymentSession.js.map +0 -1
  82. package/src/core/db/__generated__/client/models/Product.js.map +0 -1
  83. package/src/core/db/__generated__/client/models/ProductCategory.js.map +0 -1
  84. package/src/core/db/__generated__/client/models/ProductCategoryTranslation.js.map +0 -1
  85. package/src/core/db/__generated__/client/models/ProductSnapshot.js.map +0 -1
  86. package/src/core/db/__generated__/client/models/ProductTranslation.js.map +0 -1
  87. package/src/core/db/__generated__/client/models/Reservation.js.map +0 -1
  88. package/src/core/db/__generated__/client/models/Session.js.map +0 -1
  89. package/src/core/db/__generated__/client/models/ShippingMethod.js.map +0 -1
  90. package/src/core/db/__generated__/client/models/ShippingZone.js.map +0 -1
  91. package/src/core/db/__generated__/client/models/User.js.map +0 -1
  92. package/src/core/db/__generated__/client/models/Verification.js.map +0 -1
  93. package/src/core/db/__generated__/client/models.js.map +0 -1
  94. package/src/core/db/index.js.map +0 -1
  95. package/src/core/email/components.js.map +0 -1
  96. package/src/core/exceptions/http-exception.js.map +0 -1
  97. package/src/core/hono/hono.js.map +0 -1
  98. package/src/core/lib/prisma.js.map +0 -1
  99. package/src/core/logging/pino.js.map +0 -1
  100. package/src/core/notifications/email.service.js.map +0 -1
  101. package/src/core/openapi/openapi.lib.js.map +0 -1
  102. package/src/core/types/google-maps.types.js.map +0 -1
  103. package/src/core/utils/currency.util.js.map +0 -1
  104. package/src/core/utils/env.util.js.map +0 -1
  105. package/src/core/utils/object.util.js.map +0 -1
  106. package/src/core/utils/translations.util.js.map +0 -1
  107. package/src/core/utils/zod.util.js.map +0 -1
  108. package/src/db.js.map +0 -1
  109. package/src/features/access/access.handler.js.map +0 -1
  110. package/src/features/access/access.route.js.map +0 -1
  111. package/src/features/access/access.schema.js.map +0 -1
  112. package/src/features/access/access.service.js.map +0 -1
  113. package/src/features/analytics/analytics.handler.js.map +0 -1
  114. package/src/features/analytics/analytics.route.js.map +0 -1
  115. package/src/features/analytics/analytics.schema.js.map +0 -1
  116. package/src/features/analytics/analytics.service.js.map +0 -1
  117. package/src/features/cart/cart.handler.js.map +0 -1
  118. package/src/features/cart/cart.route.js.map +0 -1
  119. package/src/features/cart/cart.schema.js.map +0 -1
  120. package/src/features/cart/cart.service.js.map +0 -1
  121. package/src/features/cart/cart.util.js.map +0 -1
  122. package/src/features/customer/customer.handler.js.map +0 -1
  123. package/src/features/customer/customer.route.js.map +0 -1
  124. package/src/features/customer/customer.schema.js.map +0 -1
  125. package/src/features/customer/customer.service.js.map +0 -1
  126. package/src/features/file/file.handler.js.map +0 -1
  127. package/src/features/file/file.route.js.map +0 -1
  128. package/src/features/file/file.schema.js.map +0 -1
  129. package/src/features/file/file.service.js.map +0 -1
  130. package/src/features/health/health.handler.js.map +0 -1
  131. package/src/features/health/health.route.js.map +0 -1
  132. package/src/features/index.js.map +0 -1
  133. package/src/features/integration/integration-config.js.map +0 -1
  134. package/src/features/integration/integration-registry.js.map +0 -1
  135. package/src/features/integration/integration.handler.js.map +0 -1
  136. package/src/features/integration/integration.route.js.map +0 -1
  137. package/src/features/integration/integration.schema.js.map +0 -1
  138. package/src/features/integration/integration.service.js.map +0 -1
  139. package/src/features/inventory/inventory.service.js.map +0 -1
  140. package/src/features/location/location.handler.js.map +0 -1
  141. package/src/features/location/location.route.js.map +0 -1
  142. package/src/features/location/location.schema.js.map +0 -1
  143. package/src/features/location/location.service.js.map +0 -1
  144. package/src/features/manufacturer/manufacturer.handler.js.map +0 -1
  145. package/src/features/manufacturer/manufacturer.route.js.map +0 -1
  146. package/src/features/manufacturer/manufacturer.schema.js.map +0 -1
  147. package/src/features/manufacturer/manufacturer.service.js.map +0 -1
  148. package/src/features/order/emails/order-confirmation.email.js.map +0 -1
  149. package/src/features/order/emails/order-notification.email.js.map +0 -1
  150. package/src/features/order/fulfilment.schema.js.map +0 -1
  151. package/src/features/order/order-fulfillment.service.js.map +0 -1
  152. package/src/features/order/order.handler.js.map +0 -1
  153. package/src/features/order/order.route.js.map +0 -1
  154. package/src/features/order/order.schema.js.map +0 -1
  155. package/src/features/order/order.service.js.map +0 -1
  156. package/src/features/order/recipient.schema.js.map +0 -1
  157. package/src/features/organization/legal-entity.schema.js.map +0 -1
  158. package/src/features/organization/organization-configuration.schema.js.map +0 -1
  159. package/src/features/organization/organization.handler.js.map +0 -1
  160. package/src/features/organization/organization.route.js.map +0 -1
  161. package/src/features/organization/organization.schema.js.map +0 -1
  162. package/src/features/organization/organization.service.js.map +0 -1
  163. package/src/features/payment/payment-webhook.service.js.map +0 -1
  164. package/src/features/payment/payment.handler.js.map +0 -1
  165. package/src/features/payment/payment.route.js.map +0 -1
  166. package/src/features/payment/payment.schema.js.map +0 -1
  167. package/src/features/payment/payment.service.js.map +0 -1
  168. package/src/features/payment/stripe.service.js.map +0 -1
  169. package/src/features/product/product-modifier.schema.js.map +0 -1
  170. package/src/features/product/product.handler.js.map +0 -1
  171. package/src/features/product/product.route.js.map +0 -1
  172. package/src/features/product/product.schema.js.map +0 -1
  173. package/src/features/product/product.service.js.map +0 -1
  174. package/src/features/product-category/product-category.handler.js.map +0 -1
  175. package/src/features/product-category/product-category.route.js.map +0 -1
  176. package/src/features/product-category/product-category.schema.js.map +0 -1
  177. package/src/features/product-category/product-category.service.js.map +0 -1
  178. package/src/features/reservation/emails/reservation-cancellation.email.js.map +0 -1
  179. package/src/features/reservation/emails/reservation-confirmation.email.js.map +0 -1
  180. package/src/features/reservation/emails/reservation-notification.email.js.map +0 -1
  181. package/src/features/reservation/emails/reservation-updated.email.js.map +0 -1
  182. package/src/features/reservation/reservation.handler.js.map +0 -1
  183. package/src/features/reservation/reservation.route.js.map +0 -1
  184. package/src/features/reservation/reservation.schema.js.map +0 -1
  185. package/src/features/reservation/reservation.service.js.map +0 -1
  186. package/src/features/shipping/shipping.handler.js.map +0 -1
  187. package/src/features/shipping/shipping.route.js.map +0 -1
  188. package/src/features/shipping/shipping.service.js.map +0 -1
  189. package/src/features/shipping-method/shipping-method.handler.js.map +0 -1
  190. package/src/features/shipping-method/shipping-method.route.js.map +0 -1
  191. package/src/features/shipping-method/shipping-method.schema.js.map +0 -1
  192. package/src/features/shipping-method/shipping-method.service.js.map +0 -1
  193. package/src/features/shipping-method/shipping-zone.schema.js.map +0 -1
  194. package/src/features/webhook/webhook.handler.js.map +0 -1
  195. package/src/features/webhook/webhook.route.js.map +0 -1
  196. package/src/index.js.map +0 -1
  197. package/src/integrations/next.js.map +0 -1
  198. package/src/schemas/address.schema.js.map +0 -1
  199. package/src/schemas/currency.schema.js.map +0 -1
  200. package/src/schemas/error.schema.js.map +0 -1
  201. package/src/schemas/index.js.map +0 -1
  202. package/src/schemas/locales.schema.js.map +0 -1
  203. package/src/schemas/number.schema.js.map +0 -1
  204. package/src/schemas/pagination.schema.js.map +0 -1
  205. package/src/schemas/params.schema.js.map +0 -1
  206. package/src/schemas/queries.schema.js.map +0 -1
@@ -156,7 +156,7 @@ export declare const organizationRoute: {
156
156
  zipCode: z.ZodOptional<z.ZodString>;
157
157
  city: z.ZodString;
158
158
  country: z.ZodString;
159
- placeId: z.ZodString;
159
+ placeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
160
160
  deliveryInstructions: z.ZodOptional<z.ZodNullable<z.ZodString>>;
161
161
  }, z.core.$strip>;
162
162
  configuration: z.ZodObject<{
@@ -523,7 +523,7 @@ export declare const organizationRoute: {
523
523
  zipCode: z.ZodOptional<z.ZodString>;
524
524
  city: z.ZodString;
525
525
  country: z.ZodString;
526
- placeId: z.ZodString;
526
+ placeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
527
527
  deliveryInstructions: z.ZodOptional<z.ZodNullable<z.ZodString>>;
528
528
  }, z.core.$strip>;
529
529
  configuration: z.ZodObject<{
@@ -917,7 +917,7 @@ export declare const organizationRoute: {
917
917
  zipCode: z.ZodOptional<z.ZodString>;
918
918
  city: z.ZodString;
919
919
  country: z.ZodString;
920
- placeId: z.ZodString;
920
+ placeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
921
921
  deliveryInstructions: z.ZodOptional<z.ZodNullable<z.ZodString>>;
922
922
  }, z.core.$strip>;
923
923
  configuration: z.ZodObject<{
@@ -1279,7 +1279,6 @@ export declare const organizationRoute: {
1279
1279
  placeId: z.ZodOptional<z.ZodString>;
1280
1280
  }, z.core.$strip>>;
1281
1281
  configuration: z.ZodOptional<z.ZodObject<{
1282
- hostname: z.ZodOptional<z.ZodOptional<z.ZodCoercedString<unknown>>>;
1283
1282
  openingTimes: z.ZodOptional<z.ZodOptional<z.ZodObject<{
1284
1283
  monday: z.ZodNullable<z.ZodString>;
1285
1284
  tuesday: z.ZodNullable<z.ZodString>;
@@ -1298,6 +1297,7 @@ export declare const organizationRoute: {
1298
1297
  saturday: z.ZodNullable<z.ZodString>;
1299
1298
  sunday: z.ZodNullable<z.ZodString>;
1300
1299
  }, z.core.$strip>>>;
1300
+ hostname: z.ZodOptional<z.ZodOptional<z.ZodCoercedString<unknown>>>;
1301
1301
  defaultLocale: z.ZodOptional<z.ZodEnum<{
1302
1302
  hr: "hr";
1303
1303
  th: "th";
@@ -1610,7 +1610,7 @@ export declare const organizationRoute: {
1610
1610
  zipCode: z.ZodOptional<z.ZodString>;
1611
1611
  city: z.ZodString;
1612
1612
  country: z.ZodString;
1613
- placeId: z.ZodString;
1613
+ placeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1614
1614
  deliveryInstructions: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1615
1615
  }, z.core.$strip>;
1616
1616
  configuration: z.ZodObject<{
@@ -17,7 +17,7 @@ export declare const OrganizationSchema: z.ZodObject<{
17
17
  zipCode: z.ZodOptional<z.ZodString>;
18
18
  city: z.ZodString;
19
19
  country: z.ZodString;
20
- placeId: z.ZodString;
20
+ placeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
21
21
  deliveryInstructions: z.ZodOptional<z.ZodNullable<z.ZodString>>;
22
22
  }, z.core.$strip>;
23
23
  configuration: z.ZodObject<{
@@ -371,7 +371,6 @@ export declare const UpdateOrganizationSchema: z.ZodObject<{
371
371
  placeId: z.ZodOptional<z.ZodString>;
372
372
  }, z.core.$strip>>;
373
373
  configuration: z.ZodOptional<z.ZodObject<{
374
- hostname: z.ZodOptional<z.ZodOptional<z.ZodCoercedString<unknown>>>;
375
374
  openingTimes: z.ZodOptional<z.ZodOptional<z.ZodObject<{
376
375
  monday: z.ZodNullable<z.ZodString>;
377
376
  tuesday: z.ZodNullable<z.ZodString>;
@@ -390,6 +389,7 @@ export declare const UpdateOrganizationSchema: z.ZodObject<{
390
389
  saturday: z.ZodNullable<z.ZodString>;
391
390
  sunday: z.ZodNullable<z.ZodString>;
392
391
  }, z.core.$strip>>>;
392
+ hostname: z.ZodOptional<z.ZodOptional<z.ZodCoercedString<unknown>>>;
393
393
  defaultLocale: z.ZodOptional<z.ZodEnum<{
394
394
  hr: "hr";
395
395
  th: "th";
@@ -34,13 +34,13 @@ declare class OrganizationService {
34
34
  addressLineOne: string;
35
35
  city: string;
36
36
  country: string;
37
- placeId: string;
38
37
  firstname?: string | null | undefined;
39
38
  lastname?: string | null | undefined;
40
39
  phone?: string | null | undefined;
41
40
  doorNumber?: string | null | undefined;
42
41
  addressLineTwo?: string | null | undefined;
43
42
  zipCode?: string | undefined;
43
+ placeId?: string | null | undefined;
44
44
  deliveryInstructions?: string | null | undefined;
45
45
  };
46
46
  configuration: {
@@ -106,13 +106,13 @@ declare class OrganizationService {
106
106
  addressLineOne: string;
107
107
  city: string;
108
108
  country: string;
109
- placeId: string;
110
109
  firstname?: string | null | undefined;
111
110
  lastname?: string | null | undefined;
112
111
  phone?: string | null | undefined;
113
112
  doorNumber?: string | null | undefined;
114
113
  addressLineTwo?: string | null | undefined;
115
114
  zipCode?: string | undefined;
115
+ placeId?: string | null | undefined;
116
116
  deliveryInstructions?: string | null | undefined;
117
117
  };
118
118
  configuration: {
@@ -175,13 +175,13 @@ declare class OrganizationService {
175
175
  addressLineOne: string;
176
176
  city: string;
177
177
  country: string;
178
- placeId: string;
179
178
  firstname?: string | null | undefined;
180
179
  lastname?: string | null | undefined;
181
180
  phone?: string | null | undefined;
182
181
  doorNumber?: string | null | undefined;
183
182
  addressLineTwo?: string | null | undefined;
184
183
  zipCode?: string | undefined;
184
+ placeId?: string | null | undefined;
185
185
  deliveryInstructions?: string | null | undefined;
186
186
  };
187
187
  configuration: {
@@ -244,13 +244,13 @@ declare class OrganizationService {
244
244
  addressLineOne: string;
245
245
  city: string;
246
246
  country: string;
247
- placeId: string;
248
247
  firstname?: string | null | undefined;
249
248
  lastname?: string | null | undefined;
250
249
  phone?: string | null | undefined;
251
250
  doorNumber?: string | null | undefined;
252
251
  addressLineTwo?: string | null | undefined;
253
252
  zipCode?: string | undefined;
253
+ placeId?: string | null | undefined;
254
254
  deliveryInstructions?: string | null | undefined;
255
255
  };
256
256
  configuration: {
@@ -6,9 +6,7 @@ declare class PaymentWebhookService {
6
6
  private readonly stripeService;
7
7
  private readonly orderFulfillmentService;
8
8
  constructor(prisma: PrismaClientType, stripeService: StripeService, orderFulfillmentService: Pick<OrderFulfillmentService, "fulfillPaidOrder">);
9
- processWebhookEvent(provider: "stripe" | "revolut", signature: string | null, body: string, organizationId?: string): Promise<{
10
- processed: boolean;
11
- }>;
9
+ processWebhookEvent(provider: "stripe" | "revolut", signature: string | null, body: string, organizationId?: string): Promise<void>;
12
10
  private handleStripeCheckoutCompleted;
13
11
  }
14
12
  export { PaymentWebhookService };
@@ -1 +1 @@
1
- import{__awaiter as m}from"tslib";import{HttpException as a}from"../../core/exceptions/http-exception";import{logger as s}from"../../core/logging/pino";class f{constructor(e,d,r){this.prisma=e,this.stripeService=d,this.orderFulfillmentService=r}processWebhookEvent(e,d,r,n){return m(this,void 0,void 0,function*(){if(!d)throw new a(401,"Signature is required");if(s.info({bodyLength:r.length,organizationId:n,provider:e},"Processing payment webhook event"),e==="stripe"){const o=yield this.stripeService.constructWebhookEvent(n,d,r);return s.info({eventId:o.id,eventType:o.type,organizationId:n,provider:e},"Verified Stripe webhook event"),o.type==="checkout.session.completed"?this.handleStripeCheckoutCompleted(o.data.object,n):{processed:!1}}else throw new a(400,"Payment provider not supported")})}handleStripeCheckoutCompleted(e,d){return m(this,void 0,void 0,function*(){var r,n,o,c,p,u,l;if(((r=e.metadata)===null||r===void 0?void 0:r.testIntegration)==="true")return s.info({organizationId:d,sessionId:e.id},"Skipping Stripe test integration checkout completion"),{processed:!1};s.info({metadata:e.metadata,organizationId:d,sessionId:e.id},"Handling completed Stripe checkout session");const i=yield this.prisma.paymentSession.findFirst({where:Object.assign({referenceId:e.id},d?{payment:{order:{organizationId:d}}}:{}),include:{payment:{include:{order:!0}}}});if(!i)throw new a(404,"Payment session not found");const t=(n=i.payment)===null||n===void 0?void 0:n.order;if(!t)throw new a(404,"Order not found");return s.info({capturedAt:i.capturedAt,orderId:t.id,organizationId:t.organizationId,paymentSessionId:i.id,paymentStatus:i.payment.status,sessionId:e.id},"Resolved payment session for Stripe webhook"),i.capturedAt&&(t.inventoryDeductedAt||t.inventoryConflictAt)?(s.info({inventoryConflictAt:t.inventoryConflictAt,inventoryDeductedAt:t.inventoryDeductedAt,orderId:t.id,paymentSessionId:i.id},"Stripe payment was already captured, retrying fulfillment"),yield this.orderFulfillmentService.fulfillPaidOrder(t.id,(c=(o=e.metadata)===null||o===void 0?void 0:o.userId)!==null&&c!==void 0?c:t.userId),{processed:!0}):((!i.capturedAt||i.payment.status!=="succeeded")&&(yield this.prisma.paymentSession.update({where:{id:i.id},data:{capturedAt:(p=i.capturedAt)!==null&&p!==void 0?p:new Date,payment:{update:{status:"succeeded"}}}}),s.info({orderId:t.id,paymentSessionId:i.id,sessionId:e.id},"Marked Stripe payment as succeeded")),yield this.orderFulfillmentService.fulfillPaidOrder(t.id,(l=(u=e.metadata)===null||u===void 0?void 0:u.userId)!==null&&l!==void 0?l:t.userId),s.info({orderId:t.id,paymentSessionId:i.id,sessionId:e.id},"Completed Stripe checkout webhook processing"),{processed:!0})})}}export{f as PaymentWebhookService};
1
+ import{__awaiter as c}from"tslib";import{HttpException as s}from"../../core/exceptions/http-exception";class p{constructor(e,t,r){this.prisma=e,this.stripeService=t,this.orderFulfillmentService=r}processWebhookEvent(e,t,r,d){return c(this,void 0,void 0,function*(){if(!t)throw new s(401,"Signature is required");if(e==="stripe"){const n=yield this.stripeService.constructWebhookEvent(d,t,r);return n.type==="checkout.session.completed"?this.handleStripeCheckoutCompleted(n.data.object,d):void 0}else throw new s(400,"Payment provider not supported")})}handleStripeCheckoutCompleted(e,t){return c(this,void 0,void 0,function*(){var r,d,n,u,a;if(((r=e.metadata)===null||r===void 0?void 0:r.testIntegration)==="true")return;const i=yield this.prisma.paymentSession.findFirst({where:Object.assign({referenceId:e.id},t?{payment:{order:{organizationId:t}}}:{}),include:{payment:{include:{order:!0}}}});if(!i)throw new s(404,"Payment session not found");const o=(d=i.payment)===null||d===void 0?void 0:d.order;if(!o)throw new s(404,"Order not found");i.capturedAt&&(o.inventoryDeductedAt||o.inventoryConflictAt)||((!i.capturedAt||i.payment.status!=="succeeded")&&(yield this.prisma.paymentSession.update({where:{id:i.id},data:{capturedAt:(n=i.capturedAt)!==null&&n!==void 0?n:new Date,payment:{update:{status:"succeeded"}}}})),yield this.orderFulfillmentService.fulfillPaidOrder(o.id,(a=(u=e.metadata)===null||u===void 0?void 0:u.userId)!==null&&a!==void 0?a:o.userId))})}}export{p as PaymentWebhookService};
@@ -58,7 +58,7 @@ export declare const PaymentSchema: z.ZodObject<{
58
58
  shipping: z.ZodDefault<z.ZodNumber>;
59
59
  subtotal: z.ZodNumber;
60
60
  total: z.ZodNumber;
61
- discount: z.ZodDefault<z.ZodNumber>;
61
+ discount: z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodDefault<z.ZodNumber>>;
62
62
  currency: z.ZodEnum<{
63
63
  USD: "USD";
64
64
  EUR: "EUR";
@@ -1 +1 @@
1
- import{z as e}from"@hono/zod-openapi";import{currency as t}from"../../schemas/currency.schema";export const PaymentMethodSchema=e.enum(["card","blik","cash_on_delivery","paypal"]).openapi({description:"The payment method",example:"card"}),PaymentProviderSchema=e.enum(["stripe","revolut","payu","not_applicable"]).openapi({description:"The payment method",example:"card"}),PaymentStatusSchema=e.enum(["pending","succeeded","refunded","failed","canceled"]).openapi({description:"The payment status",example:"pending"}),PaymentMethodDetailsSchema=e.object({id:e.string().min(1),provider:PaymentProviderSchema,method:PaymentMethodSchema,description:e.string().min(1)}).openapi({description:"The payment method",example:{provider:"stripe",type:"card"}}),PaymentSchema=e.object({id:e.string().cuid().min(1),method:PaymentMethodSchema,provider:PaymentProviderSchema,status:PaymentStatusSchema,shipping:e.number().min(0).default(0),subtotal:e.number().min(0),total:e.number().min(0),discount:e.number().min(0).default(0),currency:t});
1
+ import{z as e}from"@hono/zod-openapi";import{currency as n}from"../../schemas/currency.schema";export const PaymentMethodSchema=e.enum(["card","blik","cash_on_delivery","paypal"]).openapi({description:"The payment method",example:"card"}),PaymentProviderSchema=e.enum(["stripe","revolut","payu","not_applicable"]).openapi({description:"The payment method",example:"card"}),PaymentStatusSchema=e.enum(["pending","succeeded","refunded","failed","canceled"]).openapi({description:"The payment status",example:"pending"}),PaymentMethodDetailsSchema=e.object({id:e.string().min(1),provider:PaymentProviderSchema,method:PaymentMethodSchema,description:e.string().min(1)}).openapi({description:"The payment method",example:{provider:"stripe",type:"card"}}),PaymentSchema=e.object({id:e.string().cuid().min(1),method:PaymentMethodSchema,provider:PaymentProviderSchema,status:PaymentStatusSchema,shipping:e.number().min(0).default(0),subtotal:e.number().min(0),total:e.number().min(0),discount:e.preprocess(t=>t??0,e.number().min(0).default(0)),currency:n});
@@ -12,6 +12,7 @@ interface CreateCheckoutSessionOptions {
12
12
  successUrl: string;
13
13
  cancelUrl: string;
14
14
  locale: Locale;
15
+ defaultLocale: Locale;
15
16
  }
16
17
  declare class PaymentService {
17
18
  private readonly prisma;
@@ -10,12 +10,15 @@ declare class StripeService {
10
10
  private getInstance;
11
11
  private requireInstance;
12
12
  private selectTestPaymentMethod;
13
+ private resolveItemTranslation;
14
+ private toLocaleCandidates;
13
15
  getPaymentMethods(organizationId?: string): Promise<string[]>;
14
16
  constructWebhookEvent(organizationId: string | undefined, signature: string, body: string): Promise<Stripe.Event>;
15
- createCheckoutSession(organizationId: string, user: User, order: Order, { locale, successUrl, cancelUrl, }: {
17
+ createCheckoutSession(organizationId: string, user: User, order: Order, { locale, defaultLocale, successUrl, cancelUrl, }: {
16
18
  successUrl: string;
17
19
  cancelUrl: string;
18
20
  locale: Locale;
21
+ defaultLocale: Locale;
19
22
  }): Promise<Stripe.Response<Stripe.Checkout.Session>>;
20
23
  createTestCheckoutSession(organizationId: string, { cancelUrl, customerEmail, defaultCurrency, organizationName, successUrl, }: {
21
24
  cancelUrl: string;
@@ -1 +1 @@
1
- import{__awaiter as c}from"tslib";import b from"stripe";import{HttpException as l}from"../../core/exceptions/http-exception";import{getStoredStripeConfig as k}from"../integration/integration-config";class M{constructor(e){this.integrationRegistry=e,this.runtimes=new Map}getNotConfiguredMessage(e){return e?"Stripe integration is not configured for this organization":"Stripe integration is not configured"}getInstance(e){return c(this,void 0,void 0,function*(){var i;if(!e)return;const t=k(this.integrationRegistry.get(e,"stripe")),o=t?.secretKey;if(!o){this.runtimes.delete(e);return}const s=JSON.stringify(t??null),r=this.runtimes.get(e);if(r?.signature===s)return r;const n={webhookSecret:t?.webhookSecret,paymentMethods:(i=t?.paymentMethods)!==null&&i!==void 0?i:[],signature:s,stripe:new b(o)};return this.runtimes.set(e,n),n})}requireInstance(e){return c(this,void 0,void 0,function*(){const i=yield this.getInstance(e);if(!i)throw new l(400,this.getNotConfiguredMessage(e));return i})}selectTestPaymentMethod(e){if(e.includes("card"))return"card";if(e.includes("blik"))return"blik"}getPaymentMethods(e){return c(this,void 0,void 0,function*(){var i,t;return(t=(i=yield this.getInstance(e))===null||i===void 0?void 0:i.paymentMethods)!==null&&t!==void 0?t:[]})}constructWebhookEvent(e,i,t){return c(this,void 0,void 0,function*(){const o=yield this.requireInstance(e);if(!o.webhookSecret)throw new l(400,"Stripe webhook secret is not configured");return o.stripe.webhooks.constructEvent(t,i,o.webhookSecret)})}createCheckoutSession(e,i,t,o){return c(this,arguments,void 0,function*(s,r,n,{locale:h,successUrl:p,cancelUrl:m}){var u;const y=yield this.requireInstance(s);if(n.payment.method!=="card"&&n.payment.method!=="blik")throw new l(400,"Payment method not supported");if(!y.paymentMethods.includes(n.payment.method))throw new l(400,`Stripe payment method ${n.payment.method} is not enabled`);const v={payment_method_types:[n.payment.method],customer_email:r.email,line_items:n.items.map(({translations:_,unitPrice:g,quantity:w,image:d})=>{var f;const a=_.find(S=>S.locale===h);return{quantity:w,price_data:{currency:"pln",product_data:{name:(f=a?.title)!==null&&f!==void 0?f:"N/A",description:a?.subtitle||void 0,images:d?.url?[d?.url]:void 0},unit_amount:g*100}}}),shipping_options:!((u=n.shippingMethod)===null||u===void 0)&&u.shippingZones[0].price?[{shipping_rate_data:{type:"fixed_amount",fixed_amount:{amount:n.payment.shipping*100,currency:n.currency.toLowerCase()},display_name:"Delivery fee"}}]:void 0,mode:"payment",success_url:p,cancel_url:m,metadata:{userId:r.id,orderId:n.id}};return y.stripe.checkout.sessions.create(v)})}createTestCheckoutSession(e,i){return c(this,arguments,void 0,function*(t,{cancelUrl:o,customerEmail:s,defaultCurrency:r,organizationName:n,successUrl:h}){const p=yield this.requireInstance(t);if(!p.webhookSecret)throw new l(400,"Stripe webhook secret is not configured");const m=this.selectTestPaymentMethod(p.paymentMethods);if(!m)throw new l(400,"Enable at least one Stripe payment method before testing.");const u=m==="blik"?"pln":r.toLowerCase();return p.stripe.checkout.sessions.create({payment_method_types:[m],customer_email:s,line_items:[{quantity:1,price_data:{currency:u,product_data:{name:`${n} Test Product`,description:"Mock item created by Shophost to verify the Stripe checkout flow."},unit_amount:1999}},{quantity:1,price_data:{currency:u,product_data:{name:"Shophost Test Add-on",description:"Additional mock line item used for Stripe integration testing."},unit_amount:499}}],mode:"payment",success_url:h,cancel_url:o,metadata:{testIntegration:"true"}})})}}export{M as StripeService};
1
+ import{__awaiter as u}from"tslib";import S from"stripe";import{HttpException as c}from"../../core/exceptions/http-exception";import{getStoredStripeConfig as b}from"../integration/integration-config";class k{constructor(t){this.integrationRegistry=t,this.runtimes=new Map}getNotConfiguredMessage(t){return t?"Stripe integration is not configured for this organization":"Stripe integration is not configured"}getInstance(t){return u(this,void 0,void 0,function*(){var n;if(!t)return;const e=b(this.integrationRegistry.get(t,"stripe")),o=e?.secretKey;if(!o){this.runtimes.delete(t);return}const s=JSON.stringify(e??null),r=this.runtimes.get(t);if(r?.signature===s)return r;const i={webhookSecret:e?.webhookSecret,paymentMethods:(n=e?.paymentMethods)!==null&&n!==void 0?n:[],signature:s,stripe:new S(o)};return this.runtimes.set(t,i),i})}requireInstance(t){return u(this,void 0,void 0,function*(){const n=yield this.getInstance(t);if(!n)throw new c(400,this.getNotConfiguredMessage(t));return n})}selectTestPaymentMethod(t){if(t.includes("card"))return"card";if(t.includes("blik"))return"blik"}resolveItemTranslation(t,n,e){var o;const s=[...this.toLocaleCandidates(n),...this.toLocaleCandidates(e)];for(const r of s){const i=t.find(l=>l.locale===r);if(i)return i}return(o=t.find(r=>r.title.trim().length>0))!==null&&o!==void 0?o:t[0]}toLocaleCandidates(t){const[n]=t.split("_"),e=[t];return n&&n!==t&&e.push(n),e}getPaymentMethods(t){return u(this,void 0,void 0,function*(){var n,e;return(e=(n=yield this.getInstance(t))===null||n===void 0?void 0:n.paymentMethods)!==null&&e!==void 0?e:[]})}constructWebhookEvent(t,n,e){return u(this,void 0,void 0,function*(){const o=yield this.requireInstance(t);if(!o.webhookSecret)throw new c(400,"Stripe webhook secret is not configured");return o.stripe.webhooks.constructEvent(e,n,o.webhookSecret)})}createCheckoutSession(t,n,e,o){return u(this,arguments,void 0,function*(s,r,i,{locale:l,defaultLocale:m,successUrl:p,cancelUrl:h}){var f;const v=yield this.requireInstance(s);if(i.payment.method!=="card"&&i.payment.method!=="blik")throw new c(400,"Payment method not supported");if(!v.paymentMethods.includes(i.payment.method))throw new c(400,`Stripe payment method ${i.payment.method} is not enabled`);const y={payment_method_types:[i.payment.method],customer_email:r.email,line_items:i.items.map(({translations:_,unitPrice:g,quantity:w,image:a})=>{const d=this.resolveItemTranslation(_,l,m);return{quantity:w,price_data:{currency:"pln",product_data:{name:d?.title||"Product",description:d?.subtitle||void 0,images:a?.url?[a?.url]:void 0},unit_amount:g*100}}}),shipping_options:!((f=i.shippingMethod)===null||f===void 0)&&f.shippingZones[0].price?[{shipping_rate_data:{type:"fixed_amount",fixed_amount:{amount:i.payment.shipping*100,currency:i.currency.toLowerCase()},display_name:"Delivery fee"}}]:void 0,mode:"payment",success_url:p,cancel_url:h,metadata:{userId:r.id,orderId:i.id}};return v.stripe.checkout.sessions.create(y)})}createTestCheckoutSession(t,n){return u(this,arguments,void 0,function*(e,{cancelUrl:o,customerEmail:s,defaultCurrency:r,organizationName:i,successUrl:l}){const m=yield this.requireInstance(e);if(!m.webhookSecret)throw new c(400,"Stripe webhook secret is not configured");const p=this.selectTestPaymentMethod(m.paymentMethods);if(!p)throw new c(400,"Enable at least one Stripe payment method before testing.");const h=p==="blik"?"pln":r.toLowerCase();return m.stripe.checkout.sessions.create({payment_method_types:[p],customer_email:s,line_items:[{quantity:1,price_data:{currency:h,product_data:{name:`${i} Test Product`,description:"Mock item created by Shophost to verify the Stripe checkout flow."},unit_amount:1999}},{quantity:1,price_data:{currency:h,product_data:{name:"Shophost Test Add-on",description:"Additional mock line item used for Stripe integration testing."},unit_amount:499}}],mode:"payment",success_url:l,cancel_url:o,metadata:{testIntegration:"true"}})})}}export{k as StripeService};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Body as N,Column as s,Container as b,Head as v,Heading as k,Hr as A,Html as T,Img as r,Link as n,Preview as C,Row as d,Section as i,Tailwind as j,Text as l}from"../../../core/email/components";import{format as x}from"date-fns";const u=({user:f,organization:t,reservation:c})=>{var m,o,h,g,p;const y=`Your reservation with ${t.name} has been cancelled`,w=x(new Date(c.date),"dd.MM.yyyy 'at' HH:mm");return a(T,{children:[e(v,{}),e(C,{children:y}),e(j,{children:a(N,{className:"bg-gray-50 font-sans",children:[a(b,{className:"bg-gray-50 p-6 max-w-[600px]",children:[e(i,{className:"mb-6",children:a(d,{children:[e(s,{className:"w-[80%]",children:e(r,{alt:`${t.name} logo`,height:"100",src:(m=t.logoFile)===null||m===void 0?void 0:m.url,className:"rounded-lg"})}),e(s,{align:"right",children:a(d,{align:"right",children:[e(s,{children:e(n,{href:"https://www.instagram.com/madrasbistro/",children:e(r,{alt:"Instagram",className:"mx-[4px]",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})}),e(s,{children:e(n,{href:"https://www.facebook.com/madrasBistro/",children:e(r,{alt:"Facebook",className:"mx-[4px]",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})})]})})]})}),a(i,{children:[a(k,{className:"text-3xl font-bold text-gray-800 mb-0",children:["Hi ",f.firstname,","]}),e(l,{className:"text-gray-600 mb-2 text-lg",children:"Your reservation has been cancelled."})]})]}),a(b,{className:"mx-auto max-w-[600px] rounded-xl bg-white px-6",children:[e(i,{className:"mb-6",children:a(d,{children:[a(s,{className:"w-[60%]",children:[e(l,{className:"text-gray-500 mb-0",children:"Cancelled reservation details"}),a(l,{className:"font-semibold text-gray-800 my-0",children:[c.firstname," ",c.lastname]}),a(l,{className:"font-semibold text-gray-800 my-0",children:["Reference: ",c.referenceId]}),a(l,{className:"font-semibold text-gray-800 my-0",children:["Date and Time: ",w]}),a(l,{className:"font-semibold text-gray-800 my-0",children:["Number of Guests: ",c.guests]})]}),e(s,{className:"w-[40%] p-0 mt-0",align:"right",valign:"top",children:e(l,{className:"text-gray-500 mb-0 pt-1",children:x(new Date,"dd.MM.yyyy")})})]})}),e(A,{className:"border-gray-200 mt-4"}),a(i,{className:"mb-6",children:[a(l,{className:"text-gray-700",children:["Your reservation at ",t.name," has been cancelled. If you did not request this cancellation or wish to make a new reservation, please contact us at ",t.phone,"."]}),a(l,{className:"text-gray-700",children:["We hope to welcome you at ",t.name," another time."]})]})]}),e(i,{className:"text-center bg-gray-50 py-5",children:a("table",{className:"w-full",children:[e("tr",{className:"w-full",children:e("td",{align:"center",children:((o=t.logoFile)===null||o===void 0?void 0:o.url)&&e(r,{alt:`${t.name} logo`,height:"100",src:t.logoFile.url,className:"rounded-lg"})})}),e("tr",{className:"w-full",children:a("td",{align:"center",children:[e(l,{className:"my-[8px] text-[16px] font-semibold text-xl pt-2 text-gray-900",children:t.name}),a(l,{className:"my-[8px] text-[16px] leading-[24px] text-gray-500",children:[(h=t.address)===null||h===void 0?void 0:h.addressLineOne,","," ",(g=t.address)===null||g===void 0?void 0:g.zipCode," ",(p=t.address)===null||p===void 0?void 0:p.city]}),e(l,{className:"mb-0 mt-[4px] text-[16px] leading-[24px] text-gray-500",children:t.phone})]})}),e("tr",{children:e("td",{align:"center",children:a(d,{className:"table-cell h-[44px] w-[56px] align-bottom pt-5",children:[e(s,{className:"pr-[8px]",children:e(n,{href:"https://www.facebook.com/madrasBistro/",children:e(r,{alt:"Facebook",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})}),e(s,{children:e(n,{href:"https://www.instagram.com/madrasbistro/",children:e(r,{alt:"Instagram",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})})]})})})]})})]})})]})},F={user:{id:"VD0OJ52f0mdAnm5YePP6BAW6hdbaCjAJ",name:"Abhishek Shaji",email:"kontakt@abhishek.pl",emailVerified:!0,image:"https://lh3.googleusercontent.com/a/ACg8ocKbkCAMTNvMizjXNxcm1aYtBiWnYpCYmU-7aE2Ft_M_uiHheZ5f=s96-c",createdAt:"2025-03-22T22:54:40.260Z",updatedAt:"2025-03-22T22:54:40.260Z",firstname:"Abhishek",lastname:"Shaji"},reservation:{id:"cm94wbpbm0000itx1iv9k2mqr",referenceId:"PH6LD6",firstname:"Abhishek",lastname:"Shaji",phone:"+48570135862",guests:4,date:new Date("2025-04-07T19:30:00.000Z"),createdAt:"2025-03-22T22:54:40.260Z",acceptedAt:"2025-03-22T23:00:23.456Z",cancelledAt:"2025-03-23T10:15:45.789Z"},organization:{id:"cm8kthfdq0001lg03b59mdy7b",name:"Madras Bistro",phone:"+48570135862",email:"contact@madrasbistro.pl",createdAt:"2025-03-22T23:05:14.271Z",legalEntityId:null,address:{id:"cm8kthfdr0002lg0350ijialt",firstname:null,lastname:null,phone:null,addressLineOne:"Plac Bohater\xF3w Getta 2",doorNumber:null,addressLineTwo:"3",zipCode:"33-332",city:"Krak\xF3w",country:"PL",placeId:"ChIJf-nsRkRbFkcR21gtObFSSSA",deliveryInstructions:null},configuration:{id:"cm8kthfdr0003lg03ghgs262n",hostname:"madrasbistro.pl",countriesShipping:["us"],stripeAccountId:"null",enableHostCheckout:!1,enableHostTracking:!1,isAcceptingOrders:!1,isAcceptingReservations:!1,defaultLocale:"en",supportedLocales:["en","pl"],defaultCurrency:"PLN",createdAt:"2025-03-22T23:05:14.271Z"},logo:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",logoFile:{id:"cm8ktmu890005lg0356gwclfk",url:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",mimeType:"image/png",size:1652289,filename:"logo.png"}}};u.PreviewProps=F;export default u;export{u as ReservationCancellationEmail};
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{format as b}from"date-fns";import{Body as N,Column as s,Container as x,Head as v,Heading as k,Hr as A,Html as T,Img as r,Link as n,Preview as C,Row as d,Section as i,Tailwind as j,Text as l}from"../../../core/email/components";const u=({user:f,organization:t,reservation:c})=>{var m,o,h,g,p;const y=`Your reservation with ${t.name} has been cancelled`,w=b(new Date(c.date),"dd.MM.yyyy 'at' HH:mm");return a(T,{children:[e(v,{}),e(C,{children:y}),e(j,{children:a(N,{className:"bg-gray-50 font-sans",children:[a(x,{className:"bg-gray-50 p-6 max-w-[600px]",children:[e(i,{className:"mb-6",children:a(d,{children:[e(s,{className:"w-[80%]",children:e(r,{alt:`${t.name} logo`,height:"100",src:(m=t.logoFile)===null||m===void 0?void 0:m.url,className:"rounded-lg"})}),e(s,{align:"right",children:a(d,{align:"right",children:[e(s,{children:e(n,{href:"https://www.instagram.com/madrasbistro/",children:e(r,{alt:"Instagram",className:"mx-[4px]",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})}),e(s,{children:e(n,{href:"https://www.facebook.com/madrasBistro/",children:e(r,{alt:"Facebook",className:"mx-[4px]",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})})]})})]})}),a(i,{children:[a(k,{className:"text-3xl font-bold text-gray-800 mb-0",children:["Hi ",f.firstname,","]}),e(l,{className:"text-gray-600 mb-2 text-lg",children:"Your reservation has been cancelled."})]})]}),a(x,{className:"mx-auto max-w-[600px] rounded-xl bg-white px-6",children:[e(i,{className:"mb-6",children:a(d,{children:[a(s,{className:"w-[60%]",children:[e(l,{className:"text-gray-500 mb-0",children:"Cancelled reservation details"}),a(l,{className:"font-semibold text-gray-800 my-0",children:[c.firstname," ",c.lastname]}),a(l,{className:"font-semibold text-gray-800 my-0",children:["Reference: ",c.referenceId]}),a(l,{className:"font-semibold text-gray-800 my-0",children:["Date and Time: ",w]}),a(l,{className:"font-semibold text-gray-800 my-0",children:["Number of Guests: ",c.guests]})]}),e(s,{className:"w-[40%] p-0 mt-0",align:"right",valign:"top",children:e(l,{className:"text-gray-500 mb-0 pt-1",children:b(new Date,"dd.MM.yyyy")})})]})}),e(A,{className:"border-gray-200 mt-4"}),a(i,{className:"mb-6",children:[a(l,{className:"text-gray-700",children:["Your reservation at ",t.name," has been cancelled. If you did not request this cancellation or wish to make a new reservation, please contact us at ",t.phone,"."]}),a(l,{className:"text-gray-700",children:["We hope to welcome you at ",t.name," another time."]})]})]}),e(i,{className:"text-center bg-gray-50 py-5",children:a("table",{className:"w-full",children:[e("tr",{className:"w-full",children:e("td",{align:"center",children:((o=t.logoFile)===null||o===void 0?void 0:o.url)&&e(r,{alt:`${t.name} logo`,height:"100",src:t.logoFile.url,className:"rounded-lg"})})}),e("tr",{className:"w-full",children:a("td",{align:"center",children:[e(l,{className:"my-[8px] text-[16px] font-semibold text-xl pt-2 text-gray-900",children:t.name}),a(l,{className:"my-[8px] text-[16px] leading-[24px] text-gray-500",children:[(h=t.address)===null||h===void 0?void 0:h.addressLineOne,","," ",(g=t.address)===null||g===void 0?void 0:g.zipCode," ",(p=t.address)===null||p===void 0?void 0:p.city]}),e(l,{className:"mb-0 mt-[4px] text-[16px] leading-[24px] text-gray-500",children:t.phone})]})}),e("tr",{children:e("td",{align:"center",children:a(d,{className:"table-cell h-[44px] w-[56px] align-bottom pt-5",children:[e(s,{className:"pr-[8px]",children:e(n,{href:"https://www.facebook.com/madrasBistro/",children:e(r,{alt:"Facebook",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})}),e(s,{children:e(n,{href:"https://www.instagram.com/madrasbistro/",children:e(r,{alt:"Instagram",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})})]})})})]})})]})})]})},F={user:{id:"VD0OJ52f0mdAnm5YePP6BAW6hdbaCjAJ",name:"Abhishek Shaji",email:"kontakt@abhishek.pl",emailVerified:!0,image:"https://lh3.googleusercontent.com/a/ACg8ocKbkCAMTNvMizjXNxcm1aYtBiWnYpCYmU-7aE2Ft_M_uiHheZ5f=s96-c",createdAt:"2025-03-22T22:54:40.260Z",updatedAt:"2025-03-22T22:54:40.260Z",firstname:"Abhishek",lastname:"Shaji"},reservation:{id:"cm94wbpbm0000itx1iv9k2mqr",referenceId:"PH6LD6",firstname:"Abhishek",lastname:"Shaji",phone:"+48570135862",guests:4,date:new Date("2025-04-07T19:30:00.000Z"),createdAt:"2025-03-22T22:54:40.260Z",acceptedAt:"2025-03-22T23:00:23.456Z",cancelledAt:"2025-03-23T10:15:45.789Z"},organization:{id:"cm8kthfdq0001lg03b59mdy7b",name:"Madras Bistro",phone:"+48570135862",email:"contact@madrasbistro.pl",createdAt:"2025-03-22T23:05:14.271Z",legalEntityId:null,address:{id:"cm8kthfdr0002lg0350ijialt",firstname:null,lastname:null,phone:null,addressLineOne:"Plac Bohater\xF3w Getta 2",doorNumber:null,addressLineTwo:"3",zipCode:"33-332",city:"Krak\xF3w",country:"PL",placeId:"ChIJf-nsRkRbFkcR21gtObFSSSA",deliveryInstructions:null},configuration:{id:"cm8kthfdr0003lg03ghgs262n",hostname:"madrasbistro.pl",countriesShipping:["us"],stripeAccountId:"null",enableHostCheckout:!1,enableHostTracking:!1,isAcceptingOrders:!1,isAcceptingReservations:!1,defaultLocale:"en",supportedLocales:["en","pl"],defaultCurrency:"PLN",createdAt:"2025-03-22T23:05:14.271Z"},logo:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",logoFile:{id:"cm8ktmu890005lg0356gwclfk",url:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",mimeType:"image/png",size:1652289,filename:"logo.png"}}};u.PreviewProps=F;export default u;export{u as ReservationCancellationEmail};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Body as N,Column as s,Container as f,Head as v,Heading as k,Hr as A,Html as T,Img as i,Link as n,Preview as j,Row as d,Section as c,Tailwind as C,Text as t}from"../../../core/email/components";import{format as b}from"date-fns";const u=({user:x,organization:l,reservation:r})=>{var m,o,h,g,p;const y=`This is your reservation confirmation from ${l.name}`,w=b(new Date(r.date),"dd.MM.yyyy 'at' HH:mm");return a(T,{children:[e(v,{}),e(j,{children:y}),e(C,{children:a(N,{className:"bg-gray-50 font-sans",children:[a(f,{className:"bg-gray-50 p-6 max-w-[600px]",children:[e(c,{className:"mb-6",children:a(d,{children:[e(s,{className:"w-[80%]",children:e(i,{alt:`${l.name} logo`,height:"100",src:(m=l.logoFile)===null||m===void 0?void 0:m.url,className:"rounded-lg"})}),e(s,{align:"right",children:a(d,{align:"right",children:[e(s,{children:e(n,{href:"https://www.instagram.com/madrasbistro/",children:e(i,{alt:"Instagram",className:"mx-[4px]",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})}),e(s,{children:e(n,{href:"https://www.facebook.com/madrasBistro/",children:e(i,{alt:"Facebook",className:"mx-[4px]",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})})]})})]})}),a(c,{children:[a(k,{className:"text-3xl font-bold text-gray-800 mb-0",children:["Hi ",x.firstname,","]}),e(t,{className:"text-gray-600 mb-2 text-lg",children:"Your reservation has been confirmed."})]})]}),a(f,{className:"mx-auto max-w-[600px] rounded-xl bg-white px-6",children:[e(c,{className:"mb-6",children:a(d,{children:[a(s,{className:"w-[60%]",children:[e(t,{className:"text-gray-500 mb-0",children:"Reservation details"}),a(t,{className:"font-semibold text-gray-800 my-0",children:[r.firstname," ",r.lastname]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Reference: ",r.referenceId]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Date and Time: ",w]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Number of Guests: ",r.guests]}),e(t,{className:"text-gray-500 mb-0",children:"Phone"}),e(t,{className:"font-semibold text-gray-800 my-0",children:r.phone})]}),e(s,{className:"w-[40%] p-0 mt-0",align:"right",valign:"top",children:e(t,{className:"text-gray-500 mb-0 pt-1",children:b(new Date,"dd.MM.yyyy")})})]})}),e(A,{className:"border-gray-200 mt-4"}),a(c,{className:"mb-6",children:[a(t,{className:"text-gray-700",children:["We're looking forward to welcoming you at ",l.name,". If you need to make any changes to your reservation, please contact us directly at ",l.phone,"."]}),e(t,{className:"text-gray-700",children:"Please note that we hold your table for 15 minutes from your reservation time."})]})]}),e(c,{className:"text-center bg-gray-50 py-5",children:a("table",{className:"w-full",children:[e("tr",{className:"w-full",children:e("td",{align:"center",children:((o=l.logoFile)===null||o===void 0?void 0:o.url)&&e(i,{alt:`${l.name} logo`,height:"100",src:l.logoFile.url,className:"rounded-lg"})})}),e("tr",{className:"w-full",children:a("td",{align:"center",children:[e(t,{className:"my-[8px] text-[16px] font-semibold text-xl pt-2 text-gray-900",children:l.name}),a(t,{className:"my-[8px] text-[16px] leading-[24px] text-gray-500",children:[(h=l.address)===null||h===void 0?void 0:h.addressLineOne,","," ",(g=l.address)===null||g===void 0?void 0:g.zipCode," ",(p=l.address)===null||p===void 0?void 0:p.city]}),e(t,{className:"mb-0 mt-[4px] text-[16px] leading-[24px] text-gray-500",children:l.phone})]})}),e("tr",{children:e("td",{align:"center",children:a(d,{className:"table-cell h-[44px] w-[56px] align-bottom pt-5",children:[e(s,{className:"pr-[8px]",children:e(n,{href:"https://www.facebook.com/madrasBistro/",children:e(i,{alt:"Facebook",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})}),e(s,{children:e(n,{href:"https://www.instagram.com/madrasbistro/",children:e(i,{alt:"Instagram",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})})]})})})]})})]})})]})},P={user:{id:"VD0OJ52f0mdAnm5YePP6BAW6hdbaCjAJ",name:"Abhishek Shaji",email:"kontakt@abhishek.pl",emailVerified:!0,image:"https://lh3.googleusercontent.com/a/ACg8ocKbkCAMTNvMizjXNxcm1aYtBiWnYpCYmU-7aE2Ft_M_uiHheZ5f=s96-c",createdAt:"2025-03-22T22:54:40.260Z",updatedAt:"2025-03-22T22:54:40.260Z",firstname:"Abhishek",lastname:"Shaji"},reservation:{id:"cm94wbpbm0000itx1iv9k2mqr",referenceId:"PH6LD6",firstname:"Abhishek",lastname:"Shaji",phone:"+48570135862",guests:4,date:new Date("2025-04-07T19:30:00.000Z"),createdAt:"2025-03-22T22:54:40.260Z",acceptedAt:"2025-03-22T23:00:23.456Z",cancelledAt:null},organization:{id:"cm8kthfdq0001lg03b59mdy7b",name:"Madras Bistro",phone:"+48570135862",email:"contact@madrasbistro.pl",createdAt:"2025-03-22T23:05:14.271Z",legalEntityId:null,address:{id:"cm8kthfdr0002lg0350ijialt",firstname:null,lastname:null,phone:null,addressLineOne:"Plac Bohater\xF3w Getta 2",doorNumber:null,addressLineTwo:"3",zipCode:"33-332",city:"Krak\xF3w",country:"PL",placeId:"ChIJf-nsRkRbFkcR21gtObFSSSA",deliveryInstructions:null},configuration:{id:"cm8kthfdr0003lg03ghgs262n",hostname:"madrasbistro.pl",countriesShipping:["us"],stripeAccountId:"null",enableHostCheckout:!1,enableHostTracking:!1,isAcceptingOrders:!1,isAcceptingReservations:!1,defaultLocale:"en",supportedLocales:["en","pl"],defaultCurrency:"PLN",createdAt:"2025-03-22T23:05:14.271Z"},logo:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",logoFile:{id:"cm8ktmu890005lg0356gwclfk",url:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",mimeType:"image/png",size:1652289,filename:"logo.png"}}};u.PreviewProps=P;export default u;export{u as ReservationConfirmationEmail};
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{format as f}from"date-fns";import{Body as N,Column as s,Container as b,Head as v,Heading as k,Hr as A,Html as T,Img as i,Link as n,Preview as j,Row as d,Section as c,Tailwind as C,Text as t}from"../../../core/email/components";const u=({user:x,organization:l,reservation:r})=>{var m,o,h,g,p;const y=`This is your reservation confirmation from ${l.name}`,w=f(new Date(r.date),"dd.MM.yyyy 'at' HH:mm");return a(T,{children:[e(v,{}),e(j,{children:y}),e(C,{children:a(N,{className:"bg-gray-50 font-sans",children:[a(b,{className:"bg-gray-50 p-6 max-w-[600px]",children:[e(c,{className:"mb-6",children:a(d,{children:[e(s,{className:"w-[80%]",children:e(i,{alt:`${l.name} logo`,height:"100",src:(m=l.logoFile)===null||m===void 0?void 0:m.url,className:"rounded-lg"})}),e(s,{align:"right",children:a(d,{align:"right",children:[e(s,{children:e(n,{href:"https://www.instagram.com/madrasbistro/",children:e(i,{alt:"Instagram",className:"mx-[4px]",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})}),e(s,{children:e(n,{href:"https://www.facebook.com/madrasBistro/",children:e(i,{alt:"Facebook",className:"mx-[4px]",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})})]})})]})}),a(c,{children:[a(k,{className:"text-3xl font-bold text-gray-800 mb-0",children:["Hi ",x.firstname,","]}),e(t,{className:"text-gray-600 mb-2 text-lg",children:"Your reservation has been confirmed."})]})]}),a(b,{className:"mx-auto max-w-[600px] rounded-xl bg-white px-6",children:[e(c,{className:"mb-6",children:a(d,{children:[a(s,{className:"w-[60%]",children:[e(t,{className:"text-gray-500 mb-0",children:"Reservation details"}),a(t,{className:"font-semibold text-gray-800 my-0",children:[r.firstname," ",r.lastname]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Reference: ",r.referenceId]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Date and Time: ",w]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Number of Guests: ",r.guests]}),e(t,{className:"text-gray-500 mb-0",children:"Phone"}),e(t,{className:"font-semibold text-gray-800 my-0",children:r.phone})]}),e(s,{className:"w-[40%] p-0 mt-0",align:"right",valign:"top",children:e(t,{className:"text-gray-500 mb-0 pt-1",children:f(new Date,"dd.MM.yyyy")})})]})}),e(A,{className:"border-gray-200 mt-4"}),a(c,{className:"mb-6",children:[a(t,{className:"text-gray-700",children:["We're looking forward to welcoming you at ",l.name,". If you need to make any changes to your reservation, please contact us directly at ",l.phone,"."]}),e(t,{className:"text-gray-700",children:"Please note that we hold your table for 15 minutes from your reservation time."})]})]}),e(c,{className:"text-center bg-gray-50 py-5",children:a("table",{className:"w-full",children:[e("tr",{className:"w-full",children:e("td",{align:"center",children:((o=l.logoFile)===null||o===void 0?void 0:o.url)&&e(i,{alt:`${l.name} logo`,height:"100",src:l.logoFile.url,className:"rounded-lg"})})}),e("tr",{className:"w-full",children:a("td",{align:"center",children:[e(t,{className:"my-[8px] text-[16px] font-semibold text-xl pt-2 text-gray-900",children:l.name}),a(t,{className:"my-[8px] text-[16px] leading-[24px] text-gray-500",children:[(h=l.address)===null||h===void 0?void 0:h.addressLineOne,","," ",(g=l.address)===null||g===void 0?void 0:g.zipCode," ",(p=l.address)===null||p===void 0?void 0:p.city]}),e(t,{className:"mb-0 mt-[4px] text-[16px] leading-[24px] text-gray-500",children:l.phone})]})}),e("tr",{children:e("td",{align:"center",children:a(d,{className:"table-cell h-[44px] w-[56px] align-bottom pt-5",children:[e(s,{className:"pr-[8px]",children:e(n,{href:"https://www.facebook.com/madrasBistro/",children:e(i,{alt:"Facebook",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})}),e(s,{children:e(n,{href:"https://www.instagram.com/madrasbistro/",children:e(i,{alt:"Instagram",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})})]})})})]})})]})})]})},P={user:{id:"VD0OJ52f0mdAnm5YePP6BAW6hdbaCjAJ",name:"Abhishek Shaji",email:"kontakt@abhishek.pl",emailVerified:!0,image:"https://lh3.googleusercontent.com/a/ACg8ocKbkCAMTNvMizjXNxcm1aYtBiWnYpCYmU-7aE2Ft_M_uiHheZ5f=s96-c",createdAt:"2025-03-22T22:54:40.260Z",updatedAt:"2025-03-22T22:54:40.260Z",firstname:"Abhishek",lastname:"Shaji"},reservation:{id:"cm94wbpbm0000itx1iv9k2mqr",referenceId:"PH6LD6",firstname:"Abhishek",lastname:"Shaji",phone:"+48570135862",guests:4,date:new Date("2025-04-07T19:30:00.000Z"),createdAt:"2025-03-22T22:54:40.260Z",acceptedAt:"2025-03-22T23:00:23.456Z",cancelledAt:null},organization:{id:"cm8kthfdq0001lg03b59mdy7b",name:"Madras Bistro",phone:"+48570135862",email:"contact@madrasbistro.pl",createdAt:"2025-03-22T23:05:14.271Z",legalEntityId:null,address:{id:"cm8kthfdr0002lg0350ijialt",firstname:null,lastname:null,phone:null,addressLineOne:"Plac Bohater\xF3w Getta 2",doorNumber:null,addressLineTwo:"3",zipCode:"33-332",city:"Krak\xF3w",country:"PL",placeId:"ChIJf-nsRkRbFkcR21gtObFSSSA",deliveryInstructions:null},configuration:{id:"cm8kthfdr0003lg03ghgs262n",hostname:"madrasbistro.pl",countriesShipping:["us"],stripeAccountId:"null",enableHostCheckout:!1,enableHostTracking:!1,isAcceptingOrders:!1,isAcceptingReservations:!1,defaultLocale:"en",supportedLocales:["en","pl"],defaultCurrency:"PLN",createdAt:"2025-03-22T23:05:14.271Z"},logo:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",logoFile:{id:"cm8ktmu890005lg0356gwclfk",url:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",mimeType:"image/png",size:1652289,filename:"logo.png"}}};u.PreviewProps=P;export default u;export{u as ReservationConfirmationEmail};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Body as k,Button as A,Column as s,Container as x,Head as T,Heading as j,Hr as P,Html as C,Img as i,Link as c,Preview as F,Row as d,Section as n,Tailwind as I,Text as t}from"../../../core/email/components";import{format as f}from"date-fns";const u=({user:y,member:w,organization:l,reservation:r})=>{var m,o,h,g,p,b;const N=`New reservation request for ${l.name}`,v=f(new Date(r.date),"dd.MM.yyyy 'at' HH:mm");return a(C,{children:[e(T,{}),e(F,{children:N}),e(I,{children:a(k,{className:"bg-gray-50 font-sans",children:[a(x,{className:"bg-gray-50 p-6 max-w-[600px]",children:[e(n,{className:"mb-6",children:a(d,{children:[e(s,{className:"w-[80%]",children:e(i,{alt:`${l.name} logo`,height:"100",src:(m=l.logoFile)===null||m===void 0?void 0:m.url,className:"rounded-lg"})}),e(s,{align:"right",children:a(d,{align:"right",children:[e(s,{children:e(c,{href:"https://www.instagram.com/madrasbistro/",children:e(i,{alt:"Instagram",className:"mx-[4px]",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})}),e(s,{children:e(c,{href:"https://www.facebook.com/madrasBistro/",children:e(i,{alt:"Facebook",className:"mx-[4px]",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})})]})})]})}),a(n,{children:[a(j,{className:"text-3xl font-bold text-gray-800 mb-0",children:["Hi ",w.firstname,","]}),e(t,{className:"text-gray-600 mb-2 text-lg",children:"You have received a new reservation request."})]})]}),a(x,{className:"mx-auto max-w-[600px] rounded-xl bg-white px-6",children:[e(n,{className:"mb-6",children:a(d,{children:[a(s,{className:"w-[60%]",children:[e(t,{className:"text-gray-500 mb-0",children:"Reservation details"}),a(t,{className:"font-semibold text-gray-800 my-0",children:[r.firstname," ",r.lastname]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Reference: ",r.referenceId]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Date and Time: ",v]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Number of Guests: ",r.guests]}),e(t,{className:"text-gray-500 mb-0",children:"Phone"}),e(t,{className:"font-semibold text-gray-800 my-0",children:r.phone}),e(t,{className:"text-gray-500 mb-0",children:"Email"}),e(t,{className:"font-semibold text-gray-800 my-0",children:y.email})]}),e(s,{className:"w-[40%] p-0 mt-0",align:"right",valign:"top",children:e(t,{className:"text-gray-500 mb-0 pt-1",children:f(new Date,"dd.MM.yyyy")})})]})}),e(P,{className:"border-gray-200 mt-4"}),a(n,{className:"mb-6",children:[e(t,{className:"text-gray-700",children:"Please review and respond to this reservation request as soon as possible."}),e(A,{href:`https://admin.${(o=l.configuration)===null||o===void 0?void 0:o.hostname}/admin/reservations/${r.id}`,className:"bg-blue-600 rounded py-3 px-5 text-white text-center block mt-4",children:"View Reservation Details"})]})]}),e(n,{className:"text-center bg-gray-50 py-5",children:a("table",{className:"w-full",children:[e("tr",{className:"w-full",children:e("td",{align:"center",children:((h=l.logoFile)===null||h===void 0?void 0:h.url)&&e(i,{alt:`${l.name} logo`,height:"100",src:l.logoFile.url,className:"rounded-lg"})})}),e("tr",{className:"w-full",children:a("td",{align:"center",children:[e(t,{className:"my-[8px] text-[16px] font-semibold text-xl pt-2 text-gray-900",children:l.name}),a(t,{className:"my-[8px] text-[16px] leading-[24px] text-gray-500",children:[(g=l.address)===null||g===void 0?void 0:g.addressLineOne,","," ",(p=l.address)===null||p===void 0?void 0:p.zipCode," ",(b=l.address)===null||b===void 0?void 0:b.city]}),e(t,{className:"mb-0 mt-[4px] text-[16px] leading-[24px] text-gray-500",children:l.phone})]})}),e("tr",{children:e("td",{align:"center",children:a(d,{className:"table-cell h-[44px] w-[56px] align-bottom pt-5",children:[e(s,{className:"pr-[8px]",children:e(c,{href:"https://www.facebook.com/madrasBistro/",children:e(i,{alt:"Facebook",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})}),e(s,{children:e(c,{href:"https://www.instagram.com/madrasbistro/",children:e(i,{alt:"Instagram",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})})]})})})]})})]})})]})},R={user:{id:"VD0OJ52f0mdAnm5YePP6BAW6hdbaCjAJ",name:"Abhishek Shaji",email:"kontakt@abhishek.pl",emailVerified:!0,image:"https://lh3.googleusercontent.com/a/ACg8ocKbkCAMTNvMizjXNxcm1aYtBiWnYpCYmU-7aE2Ft_M_uiHheZ5f=s96-c",createdAt:"2025-03-22T22:54:40.260Z",updatedAt:"2025-03-22T22:54:40.260Z",firstname:"Abhishek",lastname:"Shaji"},member:{id:"KL9MN52f0mdOnp8YeQR7CAX5hdbdDkBP",name:"John Doe",email:"john@madrasbistro.pl",emailVerified:!0,image:null,createdAt:"2025-03-20T10:30:15.123Z",updatedAt:"2025-03-20T10:30:15.123Z",firstname:"John",lastname:"Doe"},reservation:{id:"cm94wbpbm0000itx1iv9k2mqr",referenceId:"PH6LD6",firstname:"Abhishek",lastname:"Shaji",phone:"+48570135862",guests:4,date:new Date("2025-04-07T19:30:00.000Z"),createdAt:"2025-03-22T22:54:40.260Z",acceptedAt:null,cancelledAt:null},organization:{id:"cm8kthfdq0001lg03b59mdy7b",name:"Madras Bistro",phone:"+48570135862",email:"contact@madrasbistro.pl",createdAt:"2025-03-22T23:05:14.271Z",legalEntityId:null,address:{id:"cm8kthfdr0002lg0350ijialt",firstname:null,lastname:null,phone:null,addressLineOne:"Plac Bohater\xF3w Getta 2",doorNumber:null,addressLineTwo:"3",zipCode:"33-332",city:"Krak\xF3w",country:"PL",placeId:"ChIJf-nsRkRbFkcR21gtObFSSSA",deliveryInstructions:null},configuration:{id:"cm8kthfdr0003lg03ghgs262n",hostname:"madrasbistro.pl",countriesShipping:["us"],stripeAccountId:"null",enableHostCheckout:!1,enableHostTracking:!1,isAcceptingOrders:!1,isAcceptingReservations:!1,defaultLocale:"en",supportedLocales:["en","pl"],defaultCurrency:"PLN",createdAt:"2025-03-22T23:05:14.271Z"},logo:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",logoFile:{id:"cm8ktmu890005lg0356gwclfk",url:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",mimeType:"image/png",size:1652289,filename:"logo.png"}}};u.PreviewProps=R;export default u;export{u as ReservationNotificationEmail};
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{format as x}from"date-fns";import{Body as k,Button as A,Column as s,Container as f,Head as T,Heading as j,Hr as P,Html as C,Img as i,Link as c,Preview as F,Row as d,Section as n,Tailwind as I,Text as t}from"../../../core/email/components";const u=({user:y,member:w,organization:l,reservation:r})=>{var m,o,h,g,p,b;const N=`New reservation request for ${l.name}`,v=x(new Date(r.date),"dd.MM.yyyy 'at' HH:mm");return a(C,{children:[e(T,{}),e(F,{children:N}),e(I,{children:a(k,{className:"bg-gray-50 font-sans",children:[a(f,{className:"bg-gray-50 p-6 max-w-[600px]",children:[e(n,{className:"mb-6",children:a(d,{children:[e(s,{className:"w-[80%]",children:e(i,{alt:`${l.name} logo`,height:"100",src:(m=l.logoFile)===null||m===void 0?void 0:m.url,className:"rounded-lg"})}),e(s,{align:"right",children:a(d,{align:"right",children:[e(s,{children:e(c,{href:"https://www.instagram.com/madrasbistro/",children:e(i,{alt:"Instagram",className:"mx-[4px]",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})}),e(s,{children:e(c,{href:"https://www.facebook.com/madrasBistro/",children:e(i,{alt:"Facebook",className:"mx-[4px]",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})})]})})]})}),a(n,{children:[a(j,{className:"text-3xl font-bold text-gray-800 mb-0",children:["Hi ",w.firstname,","]}),e(t,{className:"text-gray-600 mb-2 text-lg",children:"You have received a new reservation request."})]})]}),a(f,{className:"mx-auto max-w-[600px] rounded-xl bg-white px-6",children:[e(n,{className:"mb-6",children:a(d,{children:[a(s,{className:"w-[60%]",children:[e(t,{className:"text-gray-500 mb-0",children:"Reservation details"}),a(t,{className:"font-semibold text-gray-800 my-0",children:[r.firstname," ",r.lastname]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Reference: ",r.referenceId]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Date and Time: ",v]}),a(t,{className:"font-semibold text-gray-800 my-0",children:["Number of Guests: ",r.guests]}),e(t,{className:"text-gray-500 mb-0",children:"Phone"}),e(t,{className:"font-semibold text-gray-800 my-0",children:r.phone}),e(t,{className:"text-gray-500 mb-0",children:"Email"}),e(t,{className:"font-semibold text-gray-800 my-0",children:y.email})]}),e(s,{className:"w-[40%] p-0 mt-0",align:"right",valign:"top",children:e(t,{className:"text-gray-500 mb-0 pt-1",children:x(new Date,"dd.MM.yyyy")})})]})}),e(P,{className:"border-gray-200 mt-4"}),a(n,{className:"mb-6",children:[e(t,{className:"text-gray-700",children:"Please review and respond to this reservation request as soon as possible."}),e(A,{href:`https://admin.${(o=l.configuration)===null||o===void 0?void 0:o.hostname}/admin/reservations/${r.id}`,className:"bg-blue-600 rounded py-3 px-5 text-white text-center block mt-4",children:"View Reservation Details"})]})]}),e(n,{className:"text-center bg-gray-50 py-5",children:a("table",{className:"w-full",children:[e("tr",{className:"w-full",children:e("td",{align:"center",children:((h=l.logoFile)===null||h===void 0?void 0:h.url)&&e(i,{alt:`${l.name} logo`,height:"100",src:l.logoFile.url,className:"rounded-lg"})})}),e("tr",{className:"w-full",children:a("td",{align:"center",children:[e(t,{className:"my-[8px] text-[16px] font-semibold text-xl pt-2 text-gray-900",children:l.name}),a(t,{className:"my-[8px] text-[16px] leading-[24px] text-gray-500",children:[(g=l.address)===null||g===void 0?void 0:g.addressLineOne,","," ",(p=l.address)===null||p===void 0?void 0:p.zipCode," ",(b=l.address)===null||b===void 0?void 0:b.city]}),e(t,{className:"mb-0 mt-[4px] text-[16px] leading-[24px] text-gray-500",children:l.phone})]})}),e("tr",{children:e("td",{align:"center",children:a(d,{className:"table-cell h-[44px] w-[56px] align-bottom pt-5",children:[e(s,{className:"pr-[8px]",children:e(c,{href:"https://www.facebook.com/madrasBistro/",children:e(i,{alt:"Facebook",height:"36",src:"https://react.email/static/facebook-logo.png",width:"36"})})}),e(s,{children:e(c,{href:"https://www.instagram.com/madrasbistro/",children:e(i,{alt:"Instagram",height:"36",src:"https://react.email/static/instagram-logo.png",width:"36"})})})]})})})]})})]})})]})},R={user:{id:"VD0OJ52f0mdAnm5YePP6BAW6hdbaCjAJ",name:"Abhishek Shaji",email:"kontakt@abhishek.pl",emailVerified:!0,image:"https://lh3.googleusercontent.com/a/ACg8ocKbkCAMTNvMizjXNxcm1aYtBiWnYpCYmU-7aE2Ft_M_uiHheZ5f=s96-c",createdAt:"2025-03-22T22:54:40.260Z",updatedAt:"2025-03-22T22:54:40.260Z",firstname:"Abhishek",lastname:"Shaji"},member:{id:"KL9MN52f0mdOnp8YeQR7CAX5hdbdDkBP",name:"John Doe",email:"john@madrasbistro.pl",emailVerified:!0,image:null,createdAt:"2025-03-20T10:30:15.123Z",updatedAt:"2025-03-20T10:30:15.123Z",firstname:"John",lastname:"Doe"},reservation:{id:"cm94wbpbm0000itx1iv9k2mqr",referenceId:"PH6LD6",firstname:"Abhishek",lastname:"Shaji",phone:"+48570135862",guests:4,date:new Date("2025-04-07T19:30:00.000Z"),createdAt:"2025-03-22T22:54:40.260Z",acceptedAt:null,cancelledAt:null},organization:{id:"cm8kthfdq0001lg03b59mdy7b",name:"Madras Bistro",phone:"+48570135862",email:"contact@madrasbistro.pl",createdAt:"2025-03-22T23:05:14.271Z",legalEntityId:null,address:{id:"cm8kthfdr0002lg0350ijialt",firstname:null,lastname:null,phone:null,addressLineOne:"Plac Bohater\xF3w Getta 2",doorNumber:null,addressLineTwo:"3",zipCode:"33-332",city:"Krak\xF3w",country:"PL",placeId:"ChIJf-nsRkRbFkcR21gtObFSSSA",deliveryInstructions:null},configuration:{id:"cm8kthfdr0003lg03ghgs262n",hostname:"madrasbistro.pl",countriesShipping:["us"],stripeAccountId:"null",enableHostCheckout:!1,enableHostTracking:!1,isAcceptingOrders:!1,isAcceptingReservations:!1,defaultLocale:"en",supportedLocales:["en","pl"],defaultCurrency:"PLN",createdAt:"2025-03-22T23:05:14.271Z"},logo:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",logoFile:{id:"cm8ktmu890005lg0356gwclfk",url:"https://z3liuyatqnepss3d.public.blob.vercel-storage.com/logo-zeJymFRMFCIKPlvjxYm2af3SAWvBOj.png",mimeType:"image/png",size:1652289,filename:"logo.png"}}};u.PreviewProps=R;export default u;export{u as ReservationNotificationEmail};
@@ -22,7 +22,7 @@ export declare const shippingRoute: {
22
22
  zipCode: import("zod").ZodOptional<import("zod").ZodString>;
23
23
  city: import("zod").ZodString;
24
24
  country: import("zod").ZodString;
25
- placeId: import("zod").ZodString;
25
+ placeId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
26
26
  deliveryInstructions: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
27
27
  firstname: import("zod").ZodString;
28
28
  lastname: import("zod").ZodString;
@@ -68,8 +68,8 @@ export declare const shippingRoute: {
68
68
  zipCode: import("zod").ZodOptional<import("zod").ZodString>;
69
69
  city: import("zod").ZodString;
70
70
  country: import("zod").ZodString;
71
- placeId: import("zod").ZodString;
72
71
  deliveryInstructions: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
72
+ placeId: import("zod").ZodString;
73
73
  }, import("better-auth/*").$strip>;
74
74
  };
75
75
  };
@@ -93,7 +93,7 @@ export declare const shippingRoute: {
93
93
  zipCode: import("zod").ZodOptional<import("zod").ZodString>;
94
94
  city: import("zod").ZodString;
95
95
  country: import("zod").ZodString;
96
- placeId: import("zod").ZodString;
96
+ placeId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
97
97
  deliveryInstructions: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
98
98
  firstname: import("zod").ZodString;
99
99
  lastname: import("zod").ZodString;
@@ -175,7 +175,7 @@ export declare const shippingRoute: {
175
175
  zipCode: import("zod").ZodOptional<import("zod").ZodString>;
176
176
  city: import("zod").ZodString;
177
177
  country: import("zod").ZodString;
178
- placeId: import("zod").ZodString;
178
+ placeId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
179
179
  deliveryInstructions: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
180
180
  firstname: import("zod").ZodString;
181
181
  lastname: import("zod").ZodString;
@@ -15,13 +15,13 @@ declare class ShippingService {
15
15
  addressLineOne: string;
16
16
  city: string;
17
17
  country: string;
18
- placeId: string;
19
18
  firstname: string;
20
19
  lastname: string;
21
20
  phone: string;
22
21
  doorNumber?: string | null | undefined;
23
22
  addressLineTwo?: string | null | undefined;
24
23
  zipCode?: string | undefined;
24
+ placeId?: string | null | undefined;
25
25
  deliveryInstructions?: string | null | undefined;
26
26
  } | null>;
27
27
  /**
@@ -32,13 +32,13 @@ declare class ShippingService {
32
32
  addressLineOne: string;
33
33
  city: string;
34
34
  country: string;
35
- placeId: string;
36
35
  firstname: string;
37
36
  lastname: string;
38
37
  phone: string;
39
38
  doorNumber?: string | null | undefined;
40
39
  addressLineTwo?: string | null | undefined;
41
40
  zipCode?: string | undefined;
41
+ placeId?: string | null | undefined;
42
42
  deliveryInstructions?: string | null | undefined;
43
43
  }>;
44
44
  updateShippingAddress(userId: string, body: UpdateShippingAddressInput): Promise<{
@@ -46,13 +46,13 @@ declare class ShippingService {
46
46
  addressLineOne: string;
47
47
  city: string;
48
48
  country: string;
49
- placeId: string;
50
49
  firstname: string;
51
50
  lastname: string;
52
51
  phone: string;
53
52
  doorNumber?: string | null | undefined;
54
53
  addressLineTwo?: string | null | undefined;
55
54
  zipCode?: string | undefined;
55
+ placeId?: string | null | undefined;
56
56
  deliveryInstructions?: string | null | undefined;
57
57
  }>;
58
58
  }
@@ -1 +1 @@
1
- import{__awaiter as i}from"tslib";import{HttpException as p}from"../../core/exceptions/http-exception";import{createApiRouter as v}from"../../core/hono/hono";import{logger as a}from"../../core/logging/pino";import{webhookRoutes as u}from"./webhook.route";export const registerWebhookHandlers=m=>{const n=v(),d=(r,e,o,t)=>i(void 0,void 0,void 0,function*(){return a.info({bodyLength:o.length,hasSignature:!!e,organizationId:t,provider:r},"Received payment webhook request"),m.processWebhookEvent(r,e,o,t)});return n.openapi(u.webhook,r=>i(void 0,void 0,void 0,function*(){try{const e=r.req.valid("param"),o=r.req.raw.headers.get("stripe-signature"),t=yield r.req.raw.text(),s=yield d(e.provider,o,t);return a.info({organizationId:void 0,processed:s.processed,provider:e.provider},"Completed payment webhook request"),r.json(s,200)}catch(e){if(a.error({err:e,organizationId:void 0,provider:r.req.valid("param").provider},"Payment webhook request failed"),e instanceof p)switch(e.status){case 400:case 401:return r.json({message:e.message,status:e.status},e.status);default:return r.json({message:"Internal Server Error",status:500},500)}return r.json({message:"Internal Server Error",status:500},500)}})),n.openapi(u.webhookByOrganization,r=>i(void 0,void 0,void 0,function*(){try{const e=r.req.valid("param"),o=r.req.raw.headers.get("stripe-signature"),t=yield r.req.raw.text(),s=yield d(e.provider,o,t,e.organizationId);return a.info({organizationId:e.organizationId,processed:s.processed,provider:e.provider},"Completed payment webhook request"),r.json(s,200)}catch(e){if(a.error({err:e,organizationId:r.req.valid("param").organizationId,provider:r.req.valid("param").provider},"Payment webhook request failed"),e instanceof p)switch(e.status){case 400:case 401:return r.json({message:e.message,status:e.status},e.status);default:return r.json({message:"Internal Server Error",status:500},500)}return r.json({message:"Internal Server Error",status:500},500)}})),n};
1
+ import{__awaiter as n}from"tslib";import{HttpException as i}from"../../core/exceptions/http-exception";import{createApiRouter as d}from"../../core/hono/hono";import{webhookRoutes as u}from"./webhook.route";export const registerWebhookHandlers=a=>{const t=d();return t.openapi(u.webhook,e=>n(void 0,void 0,void 0,function*(){try{const r=e.req.valid("param"),s=e.req.raw.headers.get("stripe-signature"),o=yield e.req.raw.text();return yield a.processWebhookEvent(r.provider,s,o),e.json({received:!0},200)}catch(r){if(console.error(r),r instanceof i)switch(r.status){case 400:case 401:return e.json({message:r.message,status:r.status},r.status);default:return e.json({message:"Internal Server Error",status:500},500)}return e.json({message:"Internal Server Error",status:500},500)}})),t.openapi(u.webhookByOrganization,e=>n(void 0,void 0,void 0,function*(){try{const r=e.req.valid("param"),s=e.req.raw.headers.get("stripe-signature"),o=yield e.req.raw.text();return yield a.processWebhookEvent(r.provider,s,o,r.organizationId),e.json({received:!0},200)}catch(r){if(console.error(r),r instanceof i)switch(r.status){case 400:case 401:return e.json({message:r.message,status:r.status},r.status);default:return e.json({message:"Internal Server Error",status:500},500)}return e.json({message:"Internal Server Error",status:500},500)}})),t};
@@ -18,7 +18,7 @@ export declare const webhookRoutes: {
18
18
  content: {
19
19
  "application/json": {
20
20
  schema: z.ZodObject<{
21
- processed: z.ZodBoolean;
21
+ received: z.ZodBoolean;
22
22
  }, z.core.$strip>;
23
23
  };
24
24
  };
@@ -82,7 +82,7 @@ export declare const webhookRoutes: {
82
82
  content: {
83
83
  "application/json": {
84
84
  schema: z.ZodObject<{
85
- processed: z.ZodBoolean;
85
+ received: z.ZodBoolean;
86
86
  }, z.core.$strip>;
87
87
  };
88
88
  };
@@ -1 +1 @@
1
- import{z as o}from"@hono/zod-openapi";import{createApiRoute as r}from"../../core/hono/hono";import{ErrorSchema as e}from"../../schemas";const a=o.enum(["stripe","revolut"]).openapi({description:"Payment provider",example:"stripe",param:{in:"path",name:"provider"}}),t=r({description:"Receive webhook events from payment providers",method:"POST",operationId:"webhook",path:"/webhook/payment/:provider",pathParams:o.object({provider:a}),responses:{200:o.object({processed:o.boolean()}),400:e,401:e,500:e},summary:"Process Event",tags:["Webhook"]}),i=r({description:"Receive webhook events from payment providers for a specific organization",method:"POST",operationId:"webhookByOrganization",path:"/webhook/payment/:provider/:organizationId",pathParams:o.object({provider:a,organizationId:o.string().openapi({description:"Organization ID",example:"clm1234567890abcdef",param:{in:"path",name:"organizationId"}})}),responses:{200:o.object({processed:o.boolean()}),400:e,401:e,500:e},summary:"Process Event",tags:["Webhook"]});export const webhookRoutes={webhook:t,webhookByOrganization:i};
1
+ import{z as o}from"@hono/zod-openapi";import{createApiRoute as r}from"../../core/hono/hono";import{ErrorSchema as e}from"../../schemas";const a=o.enum(["stripe","revolut"]).openapi({description:"Payment provider",example:"stripe",param:{in:"path",name:"provider"}}),t=r({description:"Receive webhook events from payment providers",method:"POST",operationId:"webhook",path:"/webhook/payment/:provider",pathParams:o.object({provider:a}),responses:{200:o.object({received:o.boolean()}),400:e,401:e,500:e},summary:"Process Event",tags:["Webhook"]}),i=r({description:"Receive webhook events from payment providers for a specific organization",method:"POST",operationId:"webhookByOrganization",path:"/webhook/payment/:provider/:organizationId",pathParams:o.object({provider:a,organizationId:o.string().openapi({description:"Organization ID",example:"clm1234567890abcdef",param:{in:"path",name:"organizationId"}})}),responses:{200:o.object({received:o.boolean()}),400:e,401:e,500:e},summary:"Process Event",tags:["Webhook"]});export const webhookRoutes={webhook:t,webhookByOrganization:i};
@@ -14,7 +14,7 @@ export declare const AddressSchema: z.ZodObject<{
14
14
  zipCode: z.ZodOptional<z.ZodString>;
15
15
  city: z.ZodString;
16
16
  country: z.ZodString;
17
- placeId: z.ZodString;
17
+ placeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
18
18
  deliveryInstructions: z.ZodOptional<z.ZodNullable<z.ZodString>>;
19
19
  }, z.core.$strip>;
20
20
  export declare const CreateAddressSchema: z.ZodObject<{
@@ -50,7 +50,7 @@ export declare const ShippingAddressSchema: z.ZodObject<{
50
50
  zipCode: z.ZodOptional<z.ZodString>;
51
51
  city: z.ZodString;
52
52
  country: z.ZodString;
53
- placeId: z.ZodString;
53
+ placeId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
54
54
  deliveryInstructions: z.ZodOptional<z.ZodNullable<z.ZodString>>;
55
55
  firstname: z.ZodString;
56
56
  lastname: z.ZodString;
@@ -66,8 +66,8 @@ export declare const CreateShippingAddressSchema: z.ZodObject<{
66
66
  zipCode: z.ZodOptional<z.ZodString>;
67
67
  city: z.ZodString;
68
68
  country: z.ZodString;
69
- placeId: z.ZodString;
70
69
  deliveryInstructions: z.ZodOptional<z.ZodNullable<z.ZodString>>;
70
+ placeId: z.ZodString;
71
71
  }, z.core.$strip>;
72
72
  export declare const UpdateShippingAddressSchema: z.ZodObject<{
73
73
  firstname: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- import{z as e}from"@hono/zod-openapi";export const AddressSchema=e.object({id:e.string().cuid().openapi({example:"clf9876543210abcdef",description:"The unique identifier of the address"}),firstname:e.string().optional().nullable().openapi({example:"John",description:"The first name of the recipient"}),lastname:e.string().optional().nullable().openapi({example:"Doe",description:"The last name of the recipient"}),phone:e.string().optional().nullable().openapi({example:"+1234567890",description:"Phone number of the recipient"}),addressLineOne:e.string().openapi({example:"123 Main Street",description:"The first line of the address"}),doorNumber:e.string().nullable().optional().openapi({description:"The door number of the address"}),addressLineTwo:e.string().nullable().optional().openapi({example:"Suite 100",description:"The second line of the address"}),zipCode:e.string().optional().openapi({example:"12345",description:"The postal code of the address"}),city:e.string().openapi({example:"New York",description:"The city of the address"}),country:e.string().openapi({example:"USA",description:"The country of the address"}),placeId:e.string().openapi({example:"ChIJN1t_tKlj4AR4GeTYWZ7frY",description:"The Google Place ID for the address"}),deliveryInstructions:e.string().nullable().optional().openapi({example:"Leave at the door",description:"Delivery instructions for the address"})}).openapi("Address"),CreateAddressSchema=AddressSchema.pick({addressLineOne:!0,doorNumber:!0,addressLineTwo:!0,zipCode:!0,city:!0,country:!0,placeId:!0}).openapi("CreateAddress"),UpdateAddressSchema=CreateAddressSchema.partial().openapi("UpdateAddress"),ShippingAddressSchema=AddressSchema.extend({firstname:e.string().min(2,"First Name must be at least 2 characters").openapi({example:"John",description:"The first name of the recipient"}),lastname:e.string().min(1,"Last Name must be at least 2 characters").openapi({example:"Doe",description:"The last name of the recipient"}),phone:e.string().min(4).openapi({example:"+1234567890",description:"Phone number of the recepient"})}),CreateShippingAddressSchema=ShippingAddressSchema.pick({firstname:!0,lastname:!0,phone:!0,addressLineOne:!0,addressLineTwo:!0,doorNumber:!0,zipCode:!0,city:!0,country:!0,placeId:!0,deliveryInstructions:!0}),UpdateShippingAddressSchema=CreateShippingAddressSchema.partial().extend({placeId:e.string().min(1,"This field is required").openapi({example:"ChIJN1t_tKlj4AR4GeTYWZ7frY",description:"The Google Place ID for the address"})}).openapi("UpdateShippingAddress");
1
+ import{z as e}from"@hono/zod-openapi";export const AddressSchema=e.object({id:e.string().cuid().openapi({example:"clf9876543210abcdef",description:"The unique identifier of the address"}),firstname:e.string().optional().nullable().openapi({example:"John",description:"The first name of the recipient"}),lastname:e.string().optional().nullable().openapi({example:"Doe",description:"The last name of the recipient"}),phone:e.string().optional().nullable().openapi({example:"+1234567890",description:"Phone number of the recipient"}),addressLineOne:e.string().openapi({example:"123 Main Street",description:"The first line of the address"}),doorNumber:e.string().nullable().optional().openapi({description:"The door number of the address"}),addressLineTwo:e.string().nullable().optional().openapi({example:"Suite 100",description:"The second line of the address"}),zipCode:e.string().optional().openapi({example:"12345",description:"The postal code of the address"}),city:e.string().openapi({example:"New York",description:"The city of the address"}),country:e.string().openapi({example:"USA",description:"The country of the address"}),placeId:e.string().nullable().optional().openapi({example:"ChIJN1t_tKlj4AR4GeTYWZ7frY",description:"The Google Place ID for the address"}),deliveryInstructions:e.string().nullable().optional().openapi({example:"Leave at the door",description:"Delivery instructions for the address"})}).openapi("Address"),CreateAddressSchema=AddressSchema.pick({addressLineOne:!0,doorNumber:!0,addressLineTwo:!0,zipCode:!0,city:!0,country:!0,placeId:!0}).extend({placeId:e.string().min(1,"This field is required").openapi({example:"ChIJN1t_tKlj4AR4GeTYWZ7frY",description:"The Google Place ID for the address"})}).openapi("CreateAddress"),UpdateAddressSchema=CreateAddressSchema.partial().openapi("UpdateAddress"),ShippingAddressSchema=AddressSchema.extend({firstname:e.string().min(2,"First Name must be at least 2 characters").openapi({example:"John",description:"The first name of the recipient"}),lastname:e.string().min(1,"Last Name must be at least 2 characters").openapi({example:"Doe",description:"The last name of the recipient"}),phone:e.string().min(4).openapi({example:"+1234567890",description:"Phone number of the recepient"})}),CreateShippingAddressSchema=ShippingAddressSchema.pick({firstname:!0,lastname:!0,phone:!0,addressLineOne:!0,addressLineTwo:!0,doorNumber:!0,zipCode:!0,city:!0,country:!0,placeId:!0,deliveryInstructions:!0}).extend({placeId:e.string().min(1,"This field is required").openapi({example:"ChIJN1t_tKlj4AR4GeTYWZ7frY",description:"The Google Place ID for the address"})}),UpdateShippingAddressSchema=CreateShippingAddressSchema.partial().extend({placeId:e.string().min(1,"This field is required").openapi({example:"ChIJN1t_tKlj4AR4GeTYWZ7frY",description:"The Google Place ID for the address"})}).openapi("UpdateShippingAddress");
@@ -1,45 +0,0 @@
1
- import { transform } from "esbuild";
2
- import { readdirSync, readFileSync, writeFileSync } from "node:fs";
3
- import path from "node:path";
4
-
5
- const distRoot = path.resolve("dist/packages/rest-api/src");
6
- let count = 0;
7
- let savedBytes = 0;
8
-
9
- async function walk(dir) {
10
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
11
- const full = path.join(dir, entry.name);
12
- if (entry.isDirectory()) {
13
- await walk(full);
14
- continue;
15
- }
16
- if (!entry.name.endsWith(".js")) continue;
17
-
18
- const source = readFileSync(full, "utf8");
19
-
20
- // Preserve "use client" / "use server" directives
21
- const directiveMatch = source.match(
22
- /^(?:["']use (?:client|server)["'];?\s*\n?)+/
23
- );
24
- const directive = directiveMatch ? directiveMatch[0].trim() + "\n" : "";
25
- const code = directive
26
- ? source.slice(directiveMatch[0].length)
27
- : source;
28
-
29
- const result = await transform(code, {
30
- minify: true,
31
- loader: "js",
32
- target: "es2020",
33
- });
34
-
35
- const output = directive + result.code;
36
- savedBytes += source.length - output.length;
37
- writeFileSync(full, output);
38
- count++;
39
- }
40
- }
41
-
42
- await walk(distRoot);
43
- console.log(
44
- `✓ Minified ${count} files (saved ${(savedBytes / 1024).toFixed(0)} KB)`
45
- );
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../../packages/rest-api/src/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../packages/rest-api/src/container.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.schema.js","sourceRoot":"","sources":["../../../../../../packages/rest-api/src/core/auth/auth.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC;SAC3B,KAAK,CAAC,eAAe,CAAC;SACtB,OAAO,CAAC;QACP,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EAAE,sBAAsB;KACpC,CAAC;IACJ,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;SAC9B,GAAG,CAAC,CAAC,EAAE,yCAAyC,CAAC;SACjD,GAAG,CAAC,EAAE,EAAE,0CAA0C,CAAC;SACnD,OAAO,CAAC;QACP,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,iBAAiB;KAC/B,CAAC;IACJ,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;SAChC,GAAG,CAAC,EAAE,EAAE,4CAA4C,CAAC;SACrD,OAAO,CAAC;QACP,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,mBAAmB;KACjC,CAAC;IACJ,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;SAC/B,GAAG,CAAC,EAAE,EAAE,2CAA2C,CAAC;SACpD,OAAO,CAAC;QACP,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,kBAAkB;KAChC,CAAC;CACL,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErB,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC;IAC5C,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.util.js","sourceRoot":"","sources":["../../../../../../packages/rest-api/src/core/auth/auth.util.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,CAAC,MAAM,cAAc,GACzB,CAAC,IAAS,EAAE,EAAE,CACd,CAAO,OAAY,EAAiB,EAAE;IACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QACxC,OAAO,EAAE,OAAkB;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAA,EAAE,CAAC;QACnB,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC,CAAA,CAAC;AAEJ,MAAM,CAAC,MAAM,SAAS,GACpB,CAAC,IAAS,EAAE,EAAE,CACd,CACE,OAAY,EACZ,cAAsB,EACtB,WAAoD,EACpD,EAAE;IACF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QACxC,OAAO,EAAE,OAAkB;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAA,EAAE,CAAC;QACnB,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;QACjD,OAAO;QACP,IAAI,EAAE;YACJ,cAAc;YACd,WAAW,EAAE;gBACX,OAAO,EAAE,CAAC,WAAW,CAAC;aACvB;SACF;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC;YACX,cAAc;YACd,WAAW;YACX,OAAO,EAAE,+BAA+B;YACxC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,aAAa;SACd,CAAC,CAAC;QAEH,MAAM,IAAI,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC,CAAA,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"better-auth.lib.js","sourceRoot":"","sources":["../../../../../../packages/rest-api/src/core/auth/better-auth.lib.ts"],"names":[],"mappings":"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"}