2
0
Files
bot/packages/schemas/features/blocks/inputs/payment/schema.ts

88 lines
2.3 KiB
TypeScript
Raw Normal View History

import { z } from 'zod'
import {
optionBaseSchema,
blockBaseSchema,
credentialsBaseSchema,
} from '../../shared'
import { PaymentProvider } from './constants'
import { InputBlockType } from '../constants'
export type CreditCardDetails = {
number: string
exp_month: string
exp_year: string
cvc: string
}
const addressSchema = z.object({
country: z.string().optional(),
line1: z.string().optional(),
line2: z.string().optional(),
state: z.string().optional(),
city: z.string().optional(),
postalCode: z.string().optional(),
})
export const paymentInputOptionsSchema = optionBaseSchema.merge(
z.object({
provider: z.nativeEnum(PaymentProvider).optional(),
labels: z
.object({
button: z.string().optional(),
success: z.string().optional(),
})
.optional(),
additionalInformation: z
.object({
description: z.string().optional(),
name: z.string().optional(),
email: z.string().optional(),
phoneNumber: z.string().optional(),
address: addressSchema.optional(),
})
.optional(),
credentialsId: z.string().optional(),
currency: z.string().optional(),
amount: z.string().optional(),
retryMessageContent: z.string().optional(),
})
)
export const paymentInputRuntimeOptionsSchema = z.object({
paymentIntentSecret: z.string(),
amountLabel: z.string(),
publicKey: z.string(),
})
export const paymentInputSchema = blockBaseSchema.merge(
z.object({
2022-06-11 07:27:38 +02:00
type: z.enum([InputBlockType.PAYMENT]),
options: paymentInputOptionsSchema.optional(),
})
)
export const stripeCredentialsSchema = z
.object({
type: z.literal('stripe'),
data: z.object({
live: z.object({
secretKey: z.string(),
publicKey: z.string(),
}),
test: z.object({
secretKey: z.string().optional(),
publicKey: z.string().optional(),
}),
}),
})
.merge(credentialsBaseSchema)
2022-06-11 07:27:38 +02:00
export type PaymentInputBlock = z.infer<typeof paymentInputSchema>
export type PaymentInputRuntimeOptions = z.infer<
typeof paymentInputRuntimeOptionsSchema
>
export type StripeCredentials = z.infer<typeof stripeCredentialsSchema>
export type PaymentAddress = NonNullable<
NonNullable<PaymentInputBlock['options']>['additionalInformation']
>['address']