mirror of
https://github.com/MAGICGrants/campaign-site.git
synced 2026-01-09 12:27:59 -05:00
369 lines
7.0 KiB
TypeScript
369 lines
7.0 KiB
TypeScript
import { FundSlug, MembershipTerm } from '@prisma/client'
|
|
|
|
export type KeycloakJwtPayload = {
|
|
sub: string
|
|
email: string
|
|
}
|
|
|
|
export type UserSettingsJwtPayload = {
|
|
action: 'email_verify' | 'password-reset'
|
|
tokenVersion: number
|
|
userId: string
|
|
email: string
|
|
}
|
|
|
|
export type DonationMetadata = {
|
|
userId: string | null
|
|
donorEmail: string | null
|
|
donorName: string | null
|
|
projectSlug: string
|
|
projectName: string
|
|
fundSlug: FundSlug
|
|
itemDesc?: string
|
|
isMembership: 'true' | 'false'
|
|
membershipTerm: MembershipTerm | null
|
|
isSubscription: 'true' | 'false'
|
|
isTaxDeductible: 'true' | 'false'
|
|
staticGeneratedForApi: 'true' | 'false'
|
|
givePointsBack: 'true' | 'false'
|
|
showDonorNameOnLeaderboard: 'true' | 'false'
|
|
}
|
|
|
|
export type DonationCryptoPayments = {
|
|
cryptoCode: 'BTC' | 'XMR' | 'LTC' | 'MANUAL'
|
|
grossAmount: number
|
|
netAmount: number
|
|
rate: number
|
|
}[]
|
|
|
|
export type BtcPayGetRatesRes = [
|
|
{
|
|
currencyPair: string
|
|
errors: string[]
|
|
rate: string
|
|
},
|
|
]
|
|
|
|
export type BtcPayGetInvoiceRes = {
|
|
id: string
|
|
amount: string
|
|
}
|
|
|
|
export type BtcPayGetPaymentMethodsRes = {
|
|
rate: string
|
|
amount: string
|
|
currency: 'BTC' | 'XMR'
|
|
paymentMethodPaid: string
|
|
destination: string
|
|
}[]
|
|
|
|
export type BtcPayCreateInvoiceBody = {
|
|
amount?: number
|
|
currency?: string
|
|
metadata: DonationMetadata
|
|
}
|
|
|
|
export type BtcPayCreateInvoiceRes = {
|
|
metadata: DonationMetadata
|
|
checkout: any
|
|
receipt: any
|
|
id: string
|
|
storeId: string
|
|
amount: string
|
|
currency: string
|
|
type: string
|
|
checkoutLink: string
|
|
createdTime: number
|
|
expirationTime: number
|
|
monitoringExpiration: number
|
|
status: 'Expired' | 'Invalid' | 'New' | 'Processing' | 'Settled'
|
|
additionalStatus: string
|
|
availableStatusesForManualMarking: any
|
|
archived: boolean
|
|
}
|
|
|
|
// Strapi Perk
|
|
|
|
export type StrapiPerk = {
|
|
id: number
|
|
documentId: string
|
|
createdAt: string
|
|
updatedAt: string
|
|
publishedAt: string
|
|
name: string
|
|
description: string
|
|
price: number
|
|
fundSlugWhitelist: string | null
|
|
needsShippingAddress: boolean
|
|
printfulProductId: string | null
|
|
productDetailsUrl: string | null
|
|
}
|
|
|
|
export type StrapiPerkPopulated = StrapiPerk & {
|
|
images: {
|
|
formats: {
|
|
large: { url: string }
|
|
medium: { url: string }
|
|
small: { url: string }
|
|
thumbnail: { url: string }
|
|
}
|
|
}[]
|
|
}
|
|
|
|
export type StrapiGetPerkPopulatedRes = {
|
|
data: StrapiPerkPopulated | null
|
|
}
|
|
|
|
export type StrapiGetPerksPopulatedRes = {
|
|
data: StrapiPerkPopulated[]
|
|
|
|
meta: {
|
|
pagination: {
|
|
page: number
|
|
pageSize: number
|
|
pageCount: number
|
|
total: number
|
|
}
|
|
}
|
|
}
|
|
|
|
export type StrapiGetPerkRes = {
|
|
data: StrapiPerk | null
|
|
|
|
meta: {}
|
|
}
|
|
|
|
// Strapi Order
|
|
|
|
export type StrapiOrder = {
|
|
id: number
|
|
documentId: string
|
|
createdAt: string
|
|
updatedAt: string
|
|
publishedAt: string
|
|
|
|
userId: string
|
|
userEmail: string
|
|
shippingAddressLine1?: string
|
|
shippingAddressLine2?: string
|
|
shippingCity?: string
|
|
shippingState?: string
|
|
shippingCountry?: string
|
|
shippingZip?: string
|
|
shippingPhone?: string
|
|
printfulCarrier?: string
|
|
printfulTrackingUrl?: string
|
|
printfulTrackingNumber?: string
|
|
}
|
|
|
|
type StrapiOrderPopulated = StrapiOrder & { perk: StrapiPerk }
|
|
|
|
export type StrapiGetOrdersPopulatedRes = {
|
|
data: StrapiOrderPopulated[] | null
|
|
|
|
meta: {}
|
|
}
|
|
|
|
export type StrapiCreateOrderBody = {
|
|
data: Omit<StrapiOrder, 'id' | 'documentId' | 'createdAt' | 'updatedAt' | 'publishedAt'> & {
|
|
perk: string
|
|
}
|
|
}
|
|
|
|
export type StrapiCreateOrderRes = {
|
|
data: StrapiOrder
|
|
meta: {}
|
|
}
|
|
|
|
export type StrapiUpdateOrderBody = {
|
|
data: Partial<
|
|
Omit<StrapiOrder, 'id' | 'documentId' | 'createdAt' | 'updatedAt' | 'publishedAt'> & {
|
|
perk: string
|
|
}
|
|
>
|
|
}
|
|
|
|
export type StrapiUpdateOrderRes = {
|
|
data: StrapiOrder
|
|
meta: {}
|
|
}
|
|
|
|
// Strapi Point
|
|
|
|
export type StrapiPoint = {
|
|
id: number
|
|
documentId: string
|
|
createdAt: string
|
|
updatedAt: string
|
|
publishedAt: string
|
|
|
|
balanceChange: string
|
|
balance: string
|
|
userId: string
|
|
donationId?: string
|
|
donationProjectSlug?: string
|
|
donationProjectName?: string
|
|
donationFundSlug?: FundSlug
|
|
}
|
|
|
|
export type StrapiPointPopulated = StrapiPoint & {
|
|
perk?: StrapiPerk
|
|
order?: StrapiOrder
|
|
}
|
|
|
|
export type StrapiCreatePointBody = {
|
|
data: Omit<StrapiPoint, 'id' | 'documentId' | 'createdAt' | 'updatedAt' | 'publishedAt'> & {
|
|
perk?: string
|
|
order?: string
|
|
}
|
|
}
|
|
|
|
export type StrapiGetPointPopulatedRes = {
|
|
data: StrapiPointPopulated | null
|
|
|
|
meta: {
|
|
pagination: {
|
|
page: number
|
|
pageSize: number
|
|
pageCount: number
|
|
total: number
|
|
}
|
|
}
|
|
}
|
|
|
|
export type StrapiGetPointsPopulatedRes = {
|
|
data: StrapiPointPopulated[]
|
|
|
|
meta: {
|
|
pagination: {
|
|
page: number
|
|
pageSize: number
|
|
pageCount: number
|
|
total: number
|
|
}
|
|
}
|
|
}
|
|
|
|
// Printful Product
|
|
|
|
export type PrintfulGetProductRes = {
|
|
code: number
|
|
result: {
|
|
sync_product: {
|
|
id: number
|
|
external_id: string
|
|
name: string
|
|
variants: number
|
|
synced: number
|
|
thumbnail_url: string
|
|
is_ignored: boolean
|
|
}
|
|
sync_variants: [
|
|
{
|
|
id: number
|
|
external_id: string
|
|
sync_product_id: number
|
|
name: string
|
|
synced: boolean
|
|
variant_id: number
|
|
retail_price: string
|
|
currency: string
|
|
is_ignored: boolean
|
|
sku: string
|
|
main_category_id: boolean
|
|
warehouse_product_id: boolean
|
|
warehouse_product_variant_id: boolean
|
|
size: string
|
|
color: string
|
|
availability_status: 'active' | 'discontinued' | 'out_of_stock' | 'temporary_out_of_stock'
|
|
},
|
|
]
|
|
}
|
|
}
|
|
|
|
// Printful country/state code
|
|
|
|
export type PrintfulGetCountriesRes = {
|
|
code: number
|
|
result: [
|
|
{
|
|
code: string
|
|
name: string
|
|
states: { code: string; name: string }[] | null
|
|
region: string
|
|
},
|
|
]
|
|
}
|
|
|
|
// Printful estimate order
|
|
|
|
export type PrintfulEstimateOrderReq = {
|
|
recipient: {
|
|
address1: string
|
|
address2: string
|
|
city: string
|
|
state_code: string
|
|
country_code: string
|
|
zip: string
|
|
name: string
|
|
phone: string
|
|
email: string
|
|
tax_number?: string
|
|
}
|
|
items: [{ sync_variant_id: number; quantity: 1 }]
|
|
}
|
|
|
|
export type PrintfulEstimateOrderRes = {
|
|
code: number
|
|
result: {
|
|
costs: {
|
|
currency: 'USD'
|
|
subtotal: number
|
|
discount: number
|
|
shipping: number
|
|
digitization: number
|
|
additional_fee: number
|
|
fulfillment_fee: number
|
|
retail_delivery_fee: number
|
|
tax: number
|
|
vat: number
|
|
total: number
|
|
}
|
|
}
|
|
}
|
|
|
|
// Printful create order
|
|
|
|
export type PrintfulCreateOrderReq = {
|
|
recipient: {
|
|
name: string
|
|
address1: string
|
|
address2: string
|
|
city: string
|
|
state_code: string
|
|
country_code: string
|
|
zip: string
|
|
phone: string
|
|
email: string
|
|
tax_number?: string
|
|
}
|
|
items: [{ sync_variant_id: number; quantity: 1 }]
|
|
}
|
|
|
|
export type PrintfulCreateOrderRes = {
|
|
externalId: string
|
|
costs: {
|
|
currency: 'USD'
|
|
subtotal: string
|
|
discount: string
|
|
shipping: string
|
|
digitization: string
|
|
additional_fee: string
|
|
fulfillment_fee: string
|
|
retail_delivery_fee: string
|
|
tax: string
|
|
vat: string
|
|
total: string
|
|
}
|
|
}
|