Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
183 changes: 183 additions & 0 deletions dist/chunk-22HCL22X.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
import {
CheckoutProductSchema
} from "./chunk-CD4U22RQ.js";
import {
BaseInvoiceSchema,
DynamicAmountPendingInvoiceSchema,
FixedAmountPendingInvoiceSchema,
PaidInvoiceSchema
} from "./chunk-TGG53ETU.js";
import {
CurrencySchema
} from "./chunk-6M6LFZ3U.js";

// src/schemas/checkout.ts
import { z } from "zod";
var CustomerFieldSchema = z.string().min(1);
var CustomerOutputSchema = z.object({
name: z.string().nullish(),
email: z.string().email().nullish(),
externalId: z.string().nullish()
}).catchall(z.string());
var BaseCheckoutSchema = z.object({
id: z.string(),
createdAt: z.date(),
clientSecret: z.string(),
type: z.enum(["PRODUCTS", "AMOUNT", "TOP_UP"]),
status: z.enum([
"UNCONFIRMED",
"CONFIRMED",
"PENDING_PAYMENT",
"PAYMENT_RECEIVED",
"EXPIRED"
]),
organizationId: z.string(),
expiresAt: z.date(),
userMetadata: z.record(z.any()).nullable(),
customFieldData: z.record(z.any()).nullable(),
currency: CurrencySchema,
allowDiscountCodes: z.boolean(),
/**
* Array of customer fields required at checkout.
* @example ['email'] - email required
* @example ['email', 'name'] - both required
*/
requireCustomerData: z.array(CustomerFieldSchema).nullable(),
successUrl: z.string().nullable(),
/**
* Customer data associated with this checkout.
*/
customer: CustomerOutputSchema.nullable(),
customerBillingAddress: z.record(z.any()).nullable(),
products: z.array(CheckoutProductSchema).nullable(),
/**
* The selected product ID (from the products array).
* For PRODUCTS checkouts, this is the product the customer has chosen.
* null for AMOUNT/TOP_UP checkouts.
*/
productId: z.string().nullable(),
/**
* The selected product price ID.
* References a price from the selected product's prices array.
* null for AMOUNT/TOP_UP checkouts.
*/
productPriceId: z.string().nullable(),
/**
* User-provided amount for CUSTOM price products.
* Only set when the selected price has amountType: CUSTOM.
*/
customAmount: z.number().nullable(),
/**
* The selected product with full details (convenience field).
* Same shape as items in the products array.
* null if no product is selected.
*/
product: CheckoutProductSchema.nullable(),
providedAmount: z.number().nullable(),
totalAmount: z.number().nullable(),
discountAmount: z.number().nullable(),
netAmount: z.number().nullable(),
taxAmount: z.number().nullable(),
invoiceAmountSats: z.number().nullable(),
invoiceScid: z.string().nullable(),
btcPrice: z.number().nullable(),
invoice: BaseInvoiceSchema.nullable()
});
var AmountFieldsSchema = z.object({
totalAmount: z.number(),
discountAmount: z.number(),
netAmount: z.number(),
taxAmount: z.number(),
invoiceAmountSats: z.number(),
btcPrice: z.number()
});
var ExpiredCheckoutSchema = BaseCheckoutSchema.extend({
status: z.literal("EXPIRED"),
type: z.enum(["PRODUCTS", "AMOUNT", "TOP_UP"])
});
var UnconfirmedCheckoutSchema = z.discriminatedUnion("type", [
BaseCheckoutSchema.extend({
status: z.literal("UNCONFIRMED"),
type: z.literal("PRODUCTS"),
products: z.array(CheckoutProductSchema).nonempty()
}),
BaseCheckoutSchema.extend({
status: z.literal("UNCONFIRMED"),
type: z.literal("AMOUNT"),
providedAmount: z.number()
}),
BaseCheckoutSchema.extend({
status: z.literal("UNCONFIRMED"),
type: z.literal("TOP_UP")
})
]);
var ConfirmedCheckoutSchema = z.discriminatedUnion("type", [
BaseCheckoutSchema.merge(AmountFieldsSchema).extend({
status: z.literal("CONFIRMED"),
type: z.literal("PRODUCTS"),
products: z.array(CheckoutProductSchema).nonempty()
}),
BaseCheckoutSchema.merge(AmountFieldsSchema).extend({
status: z.literal("CONFIRMED"),
type: z.literal("AMOUNT"),
providedAmount: z.number()
}),
BaseCheckoutSchema.extend({
status: z.literal("CONFIRMED"),
type: z.literal("TOP_UP")
})
]);
var PendingPaymentCheckoutSchema = z.discriminatedUnion("type", [
BaseCheckoutSchema.merge(AmountFieldsSchema).extend({
status: z.literal("PENDING_PAYMENT"),
type: z.literal("PRODUCTS"),
products: z.array(CheckoutProductSchema).nonempty(),
invoice: FixedAmountPendingInvoiceSchema
}),
BaseCheckoutSchema.merge(AmountFieldsSchema).extend({
status: z.literal("PENDING_PAYMENT"),
type: z.literal("AMOUNT"),
providedAmount: z.number(),
invoice: FixedAmountPendingInvoiceSchema
}),
BaseCheckoutSchema.extend({
status: z.literal("PENDING_PAYMENT"),
type: z.literal("TOP_UP"),
invoice: DynamicAmountPendingInvoiceSchema
})
]);
var PaymentReceivedCheckoutSchema = z.discriminatedUnion("type", [
BaseCheckoutSchema.merge(AmountFieldsSchema).extend({
status: z.literal("PAYMENT_RECEIVED"),
type: z.literal("PRODUCTS"),
products: z.array(CheckoutProductSchema).nonempty(),
invoice: PaidInvoiceSchema
}),
BaseCheckoutSchema.merge(AmountFieldsSchema).extend({
status: z.literal("PAYMENT_RECEIVED"),
type: z.literal("AMOUNT"),
providedAmount: z.number(),
invoice: PaidInvoiceSchema
}),
BaseCheckoutSchema.merge(AmountFieldsSchema).extend({
status: z.literal("PAYMENT_RECEIVED"),
type: z.literal("TOP_UP"),
invoice: PaidInvoiceSchema
})
]);
var CheckoutSchema = z.union([
UnconfirmedCheckoutSchema,
ConfirmedCheckoutSchema,
PendingPaymentCheckoutSchema,
PaymentReceivedCheckoutSchema,
ExpiredCheckoutSchema
]);

export {
ExpiredCheckoutSchema,
UnconfirmedCheckoutSchema,
ConfirmedCheckoutSchema,
PendingPaymentCheckoutSchema,
PaymentReceivedCheckoutSchema,
CheckoutSchema
};
7 changes: 7 additions & 0 deletions dist/chunk-6M6LFZ3U.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// src/schemas/currency.ts
import { z } from "zod";
var CurrencySchema = z.enum(["USD", "SAT"]);

export {
CurrencySchema
};
112 changes: 112 additions & 0 deletions dist/chunk-6XWZHZXK.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
import {
CheckoutSchema
} from "./chunk-7EZSTHMJ.js";
import {
CurrencySchema
} from "./chunk-6M6LFZ3U.js";

// src/contracts/checkout.ts
import { oc } from "@orpc/contract";
import { z } from "zod";
var emptyStringToUndefined = z.string().transform((val) => val.trim() === "" ? void 0 : val);
var emailOrEmpty = z.string().email().optional().or(z.literal(""));
var CustomerFieldSchema = z.string().min(1);
var CustomerInputSchema = z.object({
name: emptyStringToUndefined.optional(),
email: emailOrEmpty,
externalId: emptyStringToUndefined.optional()
}).catchall(z.string());
var CreateCheckoutInputSchema = z.object({
nodeId: z.string(),
amount: z.number().optional(),
currency: CurrencySchema.optional(),
products: z.array(z.string()).optional(),
successUrl: z.string().optional(),
allowDiscountCodes: z.boolean().optional(),
metadata: z.record(z.string(), z.any()).optional(),
/**
* Customer data for this checkout.
*/
customer: CustomerInputSchema.optional(),
/**
* Array of customer fields to require at checkout.
* If a field is listed here and not provided, the checkout UI will prompt for it.
* @example ['email'] - require email
* @example ['email', 'name'] - require both
*/
requireCustomerData: z.array(CustomerFieldSchema).optional()
});
var ConfirmCheckoutInputSchema = z.object({
checkoutId: z.string(),
/**
* Customer data provided at confirm time.
*/
customer: CustomerInputSchema.optional(),
/**
* Product selection at confirm time.
* - undefined or [] = keep current selection
* - [{ productId }] = change selection to this product
* - priceAmount required if selected price has amountType: CUSTOM
*
* Currently limited to single selection (max 1 item).
*/
products: z.array(
z.object({
productId: z.string(),
priceAmount: z.number().optional()
})
).max(1).optional()
});
var ApplyDiscountCodeInputSchema = z.object({
checkoutId: z.string(),
discountCode: z.string()
});
var RegisterInvoiceInputSchema = z.object({
nodeId: z.string(),
scid: z.string(),
checkoutId: z.string(),
invoice: z.string(),
paymentHash: z.string(),
invoiceExpiresAt: z.date()
});
var PaymentReceivedInputSchema = z.object({
payments: z.array(
z.object({
paymentHash: z.string(),
amountSats: z.number(),
sandbox: z.boolean().default(false)
})
)
});
var GetCheckoutInputSchema = z.object({ id: z.string() });
var createCheckoutContract = oc.input(CreateCheckoutInputSchema).output(CheckoutSchema);
var applyDiscountCodeContract = oc.input(ApplyDiscountCodeInputSchema).output(CheckoutSchema);
var confirmCheckoutContract = oc.input(ConfirmCheckoutInputSchema).output(CheckoutSchema);
var registerInvoiceContract = oc.input(RegisterInvoiceInputSchema).output(CheckoutSchema);
var getCheckoutContract = oc.input(GetCheckoutInputSchema).output(CheckoutSchema);
var paymentReceivedContract = oc.input(PaymentReceivedInputSchema).output(z.object({ ok: z.boolean() }));
var checkout = {
get: getCheckoutContract,
create: createCheckoutContract,
confirm: confirmCheckoutContract,
registerInvoice: registerInvoiceContract,
paymentReceived: paymentReceivedContract
};

export {
CustomerFieldSchema,
CustomerInputSchema,
CreateCheckoutInputSchema,
ConfirmCheckoutInputSchema,
ApplyDiscountCodeInputSchema,
RegisterInvoiceInputSchema,
PaymentReceivedInputSchema,
GetCheckoutInputSchema,
createCheckoutContract,
applyDiscountCodeContract,
confirmCheckoutContract,
registerInvoiceContract,
getCheckoutContract,
paymentReceivedContract,
checkout
};
Loading