@voyantjs/checkout 0.24.1 → 0.24.3
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.
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/routes.d.ts +1290 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +96 -0
- package/dist/service.d.ts +117 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +497 -0
- package/dist/validation.d.ts +1041 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +172 -0
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|
package/dist/routes.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { parseJsonBody, parseOptionalJsonBody, parseQuery } from "@voyantjs/hono";
|
|
2
|
+
import { createNotificationService } from "@voyantjs/notifications";
|
|
3
|
+
import { Hono } from "hono";
|
|
4
|
+
import { bootstrapCheckoutCollection, initiateCheckoutCollection, listBookingReminderRuns, previewCheckoutCollection, } from "./service.js";
|
|
5
|
+
import { bootstrapCheckoutCollectionSchema, checkoutReminderRunListQuerySchema, initiateCheckoutCollectionSchema, previewCheckoutCollectionSchema, } from "./validation.js";
|
|
6
|
+
export const CHECKOUT_ROUTE_RUNTIME_CONTAINER_KEY = "providers.checkout.runtime";
|
|
7
|
+
function attachCollectionRoutes(app, options) {
|
|
8
|
+
function getRuntime(bindings, resolveFromContainer) {
|
|
9
|
+
return (resolveFromContainer?.(CHECKOUT_ROUTE_RUNTIME_CONTAINER_KEY) ??
|
|
10
|
+
buildCheckoutRouteRuntime(bindings, options));
|
|
11
|
+
}
|
|
12
|
+
return app
|
|
13
|
+
.post("/bookings/:bookingId/collection-plan", async (c) => {
|
|
14
|
+
try {
|
|
15
|
+
const plan = await previewCheckoutCollection(c.get("db"), c.req.param("bookingId"), await parseOptionalJsonBody(c, previewCheckoutCollectionSchema), options.policy);
|
|
16
|
+
if (!plan) {
|
|
17
|
+
return c.json({ error: "Booking not found" }, 404);
|
|
18
|
+
}
|
|
19
|
+
return c.json({ data: plan });
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
const message = error instanceof Error ? error.message : "Failed to preview checkout collection";
|
|
23
|
+
return c.json({ error: message }, 400);
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
.post("/bookings/:bookingId/initiate-collection", async (c) => {
|
|
27
|
+
try {
|
|
28
|
+
const runtime = getRuntime(c.env, (key) => c.var.container?.resolve(key));
|
|
29
|
+
const dispatcher = createNotificationService(runtime.providers);
|
|
30
|
+
const result = await initiateCheckoutCollection(c.get("db"), c.req.param("bookingId"), await parseJsonBody(c, initiateCheckoutCollectionSchema), options.policy, dispatcher, runtime);
|
|
31
|
+
if (!result) {
|
|
32
|
+
return c.json({ error: "Booking not found" }, 404);
|
|
33
|
+
}
|
|
34
|
+
return c.json({ data: result }, 201);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const message = error instanceof Error ? error.message : "Failed to initiate checkout collection";
|
|
38
|
+
if (message.includes("Booking not found")) {
|
|
39
|
+
return c.json({ error: message }, 404);
|
|
40
|
+
}
|
|
41
|
+
return c.json({ error: message }, 409);
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
.post("/collections/bootstrap", async (c) => {
|
|
45
|
+
try {
|
|
46
|
+
const runtime = getRuntime(c.env, (key) => c.var.container?.resolve(key));
|
|
47
|
+
const dispatcher = createNotificationService(runtime.providers);
|
|
48
|
+
const result = await bootstrapCheckoutCollection(c.get("db"), await parseJsonBody(c, bootstrapCheckoutCollectionSchema), options.policy, dispatcher, runtime);
|
|
49
|
+
if (!result) {
|
|
50
|
+
return c.json({ error: "Booking session not found" }, 404);
|
|
51
|
+
}
|
|
52
|
+
return c.json({ data: result }, 201);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
const message = error instanceof Error ? error.message : "Failed to bootstrap checkout collection";
|
|
56
|
+
if (message.includes("Booking not found")) {
|
|
57
|
+
return c.json({ error: message }, 404);
|
|
58
|
+
}
|
|
59
|
+
return c.json({ error: message }, 409);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
export function createCheckoutRoutes(options = {}) {
|
|
64
|
+
return attachCollectionRoutes(new Hono(), options);
|
|
65
|
+
}
|
|
66
|
+
export function createCheckoutAdminRoutes(options = {}) {
|
|
67
|
+
const app = new Hono().get("/bookings/:bookingId/reminder-runs", async (c) => {
|
|
68
|
+
const query = parseQuery(c, checkoutReminderRunListQuerySchema);
|
|
69
|
+
return c.json(await listBookingReminderRuns(c.get("db"), c.req.param("bookingId"), query));
|
|
70
|
+
});
|
|
71
|
+
return attachCollectionRoutes(app, options);
|
|
72
|
+
}
|
|
73
|
+
export const checkoutModule = {
|
|
74
|
+
name: "checkout",
|
|
75
|
+
};
|
|
76
|
+
export function createCheckoutHonoModule(options = {}) {
|
|
77
|
+
const module = {
|
|
78
|
+
...checkoutModule,
|
|
79
|
+
bootstrap: ({ bindings, container }) => {
|
|
80
|
+
container.register(CHECKOUT_ROUTE_RUNTIME_CONTAINER_KEY, buildCheckoutRouteRuntime(bindings, options));
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
module,
|
|
85
|
+
publicRoutes: createCheckoutRoutes(options),
|
|
86
|
+
adminRoutes: createCheckoutAdminRoutes(options),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export function buildCheckoutRouteRuntime(bindings, options = {}) {
|
|
90
|
+
return {
|
|
91
|
+
bindings,
|
|
92
|
+
providers: options.resolveProviders?.(bindings) ?? options.providers ?? [],
|
|
93
|
+
paymentStarters: options.resolvePaymentStarters?.(bindings) ?? options.paymentStarters ?? {},
|
|
94
|
+
bankTransferDetails: options.resolveBankTransferDetails?.(bindings) ?? options.bankTransferDetails ?? null,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { bookingPaymentSchedules, invoices, type PaymentSession } from "@voyantjs/finance";
|
|
2
|
+
import type { NotificationDelivery, NotificationReminderRun, NotificationService } from "@voyantjs/notifications";
|
|
3
|
+
import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
|
|
4
|
+
import type { BootstrapCheckoutCollectionInput, CheckoutBankTransferInstructionsRecord, CheckoutProviderStartInput, CheckoutReminderRunListQuery, InitiateCheckoutCollectionInput, PreviewCheckoutCollectionInput } from "./validation.js";
|
|
5
|
+
export interface CheckoutPolicyOptions {
|
|
6
|
+
defaultCardCollectionTarget?: "schedule" | "invoice";
|
|
7
|
+
defaultReminderCardCollectionTarget?: "schedule" | "invoice";
|
|
8
|
+
defaultBankTransferDocumentType?: "proforma" | "invoice";
|
|
9
|
+
defaultPaymentPlan?: {
|
|
10
|
+
depositMode: "none" | "percentage" | "fixed_amount";
|
|
11
|
+
depositValue: number;
|
|
12
|
+
balanceDueDaysBeforeStart: number;
|
|
13
|
+
clearExistingPending: boolean;
|
|
14
|
+
createGuarantee: boolean;
|
|
15
|
+
guaranteeType: "deposit" | "credit_card" | "preauth" | "card_on_file" | "bank_transfer" | "voucher" | "agency_letter";
|
|
16
|
+
notes?: string | null;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export interface CheckoutCollectionPlan {
|
|
20
|
+
bookingId: string;
|
|
21
|
+
method: "card" | "bank_transfer";
|
|
22
|
+
stage: "initial" | "reminder" | "manual";
|
|
23
|
+
paymentSessionTarget: "schedule" | "invoice" | null;
|
|
24
|
+
documentType: "proforma" | "invoice" | null;
|
|
25
|
+
willCreateDefaultPaymentPlan: boolean;
|
|
26
|
+
selectedSchedule: typeof bookingPaymentSchedules.$inferSelect | null;
|
|
27
|
+
selectedInvoice: typeof invoices.$inferSelect | null;
|
|
28
|
+
amountCents: number;
|
|
29
|
+
currency: string;
|
|
30
|
+
recommendedAction: "create_bank_transfer_document" | "create_payment_session" | "create_invoice_then_payment_session" | "none";
|
|
31
|
+
}
|
|
32
|
+
export interface CheckoutBankTransferDetails {
|
|
33
|
+
provider?: string | null;
|
|
34
|
+
beneficiary: string;
|
|
35
|
+
iban: string;
|
|
36
|
+
bankName?: string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Deploy-wide instructions appended to every bank-transfer block (e.g.
|
|
39
|
+
* "Please reference your invoice number in the wire memo"). Per-call
|
|
40
|
+
* notes from `initiateCheckoutCollection({ notes })` take precedence —
|
|
41
|
+
* use this slot for boilerplate, not booking-specific content.
|
|
42
|
+
*/
|
|
43
|
+
notes?: string | null;
|
|
44
|
+
}
|
|
45
|
+
export interface CheckoutProviderStartResult {
|
|
46
|
+
provider: string;
|
|
47
|
+
paymentSessionId: string;
|
|
48
|
+
redirectUrl: string | null;
|
|
49
|
+
externalReference: string | null;
|
|
50
|
+
providerSessionId: string | null;
|
|
51
|
+
providerPaymentId: string | null;
|
|
52
|
+
response: Record<string, unknown> | null;
|
|
53
|
+
}
|
|
54
|
+
export interface CheckoutPaymentStarterContext {
|
|
55
|
+
db: PostgresJsDatabase;
|
|
56
|
+
bookingId: string;
|
|
57
|
+
plan: CheckoutCollectionPlan;
|
|
58
|
+
invoice: typeof invoices.$inferSelect | null;
|
|
59
|
+
paymentSession: PaymentSession;
|
|
60
|
+
input: InitiateCheckoutCollectionInput;
|
|
61
|
+
startProvider: CheckoutProviderStartInput;
|
|
62
|
+
bindings: Record<string, unknown>;
|
|
63
|
+
}
|
|
64
|
+
export type CheckoutPaymentStarter = (context: CheckoutPaymentStarterContext) => Promise<CheckoutProviderStartResult>;
|
|
65
|
+
export interface InitiatedCheckoutCollection {
|
|
66
|
+
plan: CheckoutCollectionPlan;
|
|
67
|
+
invoice: typeof invoices.$inferSelect | null;
|
|
68
|
+
paymentSession: PaymentSession | null;
|
|
69
|
+
invoiceNotification: NotificationDelivery | null;
|
|
70
|
+
paymentSessionNotification: NotificationDelivery | null;
|
|
71
|
+
bankTransferInstructions: CheckoutBankTransferInstructionsRecord | null;
|
|
72
|
+
providerStart: CheckoutProviderStartResult | null;
|
|
73
|
+
}
|
|
74
|
+
export interface BootstrappedCheckoutCollection extends InitiatedCheckoutCollection {
|
|
75
|
+
bookingId: string;
|
|
76
|
+
sessionId: string;
|
|
77
|
+
sourceType: "booking" | "session";
|
|
78
|
+
intent: "deposit" | "balance" | "custom";
|
|
79
|
+
}
|
|
80
|
+
export interface CheckoutRuntimeOptions {
|
|
81
|
+
bindings?: Record<string, unknown>;
|
|
82
|
+
bankTransferDetails?: CheckoutBankTransferDetails | null;
|
|
83
|
+
paymentStarters?: Record<string, CheckoutPaymentStarter>;
|
|
84
|
+
}
|
|
85
|
+
export interface CheckoutReminderRunSummary {
|
|
86
|
+
id: string;
|
|
87
|
+
reminderRuleId: string;
|
|
88
|
+
reminderRuleSlug: string | null;
|
|
89
|
+
reminderRuleName: string | null;
|
|
90
|
+
targetType: NotificationReminderRun["targetType"];
|
|
91
|
+
targetId: string;
|
|
92
|
+
bookingId: string | null;
|
|
93
|
+
paymentSessionId: string | null;
|
|
94
|
+
notificationDeliveryId: string | null;
|
|
95
|
+
status: "queued" | "processing" | "sent" | "skipped" | "failed";
|
|
96
|
+
deliveryStatus: "pending" | "sent" | "failed" | "cancelled" | null;
|
|
97
|
+
channel: "email" | "sms" | null;
|
|
98
|
+
provider: string | null;
|
|
99
|
+
recipient: string | null;
|
|
100
|
+
scheduledFor: string;
|
|
101
|
+
processedAt: string;
|
|
102
|
+
errorMessage: string | null;
|
|
103
|
+
relativeDaysFromDueDate: number | null;
|
|
104
|
+
createdAt: string;
|
|
105
|
+
}
|
|
106
|
+
export interface CheckoutReminderRunList {
|
|
107
|
+
data: CheckoutReminderRunSummary[];
|
|
108
|
+
total: number;
|
|
109
|
+
limit: number;
|
|
110
|
+
offset: number;
|
|
111
|
+
}
|
|
112
|
+
export declare function resolvePaymentSessionTarget(method: "card" | "bank_transfer", stage: "initial" | "reminder" | "manual", override: "schedule" | "invoice" | undefined, options: CheckoutPolicyOptions): "invoice" | "schedule";
|
|
113
|
+
export declare function previewCheckoutCollection(db: PostgresJsDatabase, bookingId: string, input: PreviewCheckoutCollectionInput, options?: CheckoutPolicyOptions): Promise<CheckoutCollectionPlan | null>;
|
|
114
|
+
export declare function initiateCheckoutCollection(db: PostgresJsDatabase, bookingId: string, input: InitiateCheckoutCollectionInput, options?: CheckoutPolicyOptions, dispatcher?: NotificationService, runtime?: CheckoutRuntimeOptions): Promise<InitiatedCheckoutCollection | null>;
|
|
115
|
+
export declare function bootstrapCheckoutCollection(db: PostgresJsDatabase, input: BootstrapCheckoutCollectionInput, options?: CheckoutPolicyOptions, dispatcher?: NotificationService, runtime?: CheckoutRuntimeOptions): Promise<BootstrappedCheckoutCollection | null>;
|
|
116
|
+
export declare function listBookingReminderRuns(db: PostgresJsDatabase, bookingId: string, query: CheckoutReminderRunListQuery): Promise<CheckoutReminderRunList>;
|
|
117
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|