paypal-rest-api
Version:
A typescript module for integrating with PayPal REST APIs.
207 lines (206 loc) • 8.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const joi = require("joi");
const common = require("../api/schemas");
exports.invoiceSearchRequestSchema = joi.object({
body: joi.object({
email: joi.string().optional(),
recipient_first_name: joi.string().optional(),
recipient_last_name: joi.string().optional(),
recipient_business_name: joi.string().optional(),
number: joi.string().optional(),
status: joi.array().items(joi.string().valid([
"DRAFT",
"SENT",
"PARTIALLY_PAID",
"PAYMENT_PENDING",
"PAID",
"MARKED_AS_PAID",
"CANCELLED",
"REFUNDED",
"PARTIALLY_REFUNDED",
"MARKED_AS_REFUNDED",
"UNPAID",
])).min(1).optional(),
lower_total_amount: joi.string().optional(),
upper_total_amount: joi.string().optional(),
start_invoice_date: joi.string().optional(),
end_invoice_date: joi.string().optional(),
start_due_date: joi.string().optional(),
end_due_date: joi.string().optional(),
start_payment_date: joi.string().optional(),
end_payment_date: joi.string().optional(),
start_creation_date: joi.string().optional(),
end_creation_date: joi.string().optional(),
page: joi.number().min(0).optional(),
page_size: joi.number().min(1).optional(),
total_count_required: joi.boolean().optional(),
archived: joi.boolean().optional(),
}).min(1).optional(),
method: joi.string().default("POST"),
uri: joi.string().default("/v1/invoicing/search"),
});
exports.invoiceListRequestSchema = joi.object({
method: joi.string().default("GET"),
uri: joi.string().default("/v1/invoicing/invoices"),
qs: joi.object({
page: joi.number().min(0).optional(),
page_size: joi.number().min(1).optional(),
total_count_required: joi.boolean().optional(),
}).optional(),
});
exports.invoiceGetRequestSchema = joi.object({
method: joi.string().default("GET"),
uri: joi.string().regex(/\/v1\/invoicing\/invoices\/.*/).required(),
});
exports.invoiceIdSchema = joi.string().length(24);
exports.invoiceItemsSchema = joi.object().keys({
date: joi.string().empty("").optional(),
description: joi.string().trim().empty("").max(1000).optional(),
discount: common.paypalCostSchema.optional(),
name: joi.string().trim().empty("").max(200).default("Item Name"),
quantity: joi.number().greater(-10000).less(10000).required(),
tax: common.paypalTaxSchema.optional(),
unit_of_measure: joi.string().trim().empty("").valid(["QUANTITY", "HOURS", "AMOUNT"]).optional(),
unit_price: common.paypalCurrencySchema.required(),
});
exports.invoiceTermSchema = joi.object().min(1).keys({
due_date: joi.string().empty("").optional(),
term_type: joi.string().trim().empty("").valid([
"DUE_ON_RECEIPT",
"DUE_ON_DATE_SPECIFIED",
"NET_10",
"NET_15",
"NET_30",
"NET_45",
"NET_60",
"NET_90",
"NO_DUE_DATE"
]).optional(),
});
exports.invoiceBillingInfoSchema = joi.object().keys({
additional_info: joi.string().trim().empty("").max(40).optional(),
address: common.paypalAddressSchema.optional(),
business_name: joi.string().trim().empty("").max(100).optional(),
email: joi.string().trim().empty("").max(260).optional(),
first_name: joi.string().trim().empty("").max(30).optional(),
language: joi.string().trim().empty("").max(5).optional(),
last_name: joi.string().trim().empty("").max(30).optional(),
phone: common.paypalPhoneSchema.empty({}).optional(),
});
exports.invoiceSchema = joi.object().keys({
allow_tip: joi.boolean().default(false),
billing_info: joi.array().min(1).items(exports.invoiceBillingInfoSchema).optional(),
cc_info: joi.array().items(joi.object().keys({
email: joi.string().trim().empty("").optional(),
})).optional(),
custom: common.paypalCustomAmountSchema.optional(),
discount: common.paypalCostSchema.optional(),
id: exports.invoiceIdSchema.optional(),
invoice_date: joi.string().empty("").optional(),
items: joi.array().min(1).items(exports.invoiceItemsSchema).optional(),
logo_url: joi.string().trim().empty("").max(4000).optional(),
merchant_info: joi.object().keys({
address: common.paypalAddressSchema.optional(),
business_name: joi.string().trim().empty("").max(100).optional(),
email: joi.string().trim().empty("").max(260).optional(),
first_name: joi.string().trim().empty("").max(256).optional(),
last_name: joi.string().trim().empty("").max(256).optional(),
phone: common.paypalPhoneSchema.empty({}).optional(),
}).optional(),
merchant_memo: joi.string().trim().empty("").max(500).optional(),
minimum_amount_due: common.paypalCurrencySchema.optional(),
note: joi.string().trim().empty("").max(4000).optional(),
number: joi.string().trim().empty("").optional(),
payment_term: exports.invoiceTermSchema.optional(),
reference: joi.string().trim().empty("").max(60).optional(),
shipping_info: joi.object().keys({
address: common.paypalAddressSchema.optional(),
business_name: joi.string().trim().empty("").max(100).optional(),
first_name: joi.string().trim().empty("").max(256).optional(),
last_name: joi.string().trim().empty("").max(256).optional(),
}).optional(),
tax_calculated_after_discount: joi.boolean().default(false),
tax_inclusive: joi.boolean().default(false),
template_id: joi.string().trim().empty("").optional(),
terms: joi.string().trim().empty("").max(4000).optional(),
});
exports.invoiceCreateRequestSchema = joi.object({
body: exports.invoiceSchema.required(),
method: joi.string().default("POST"),
uri: joi.string().default("/v1/invoicing/invoices"),
});
const invoiceAdditionalEmailParams = joi.object({
subject: joi.string().optional(),
note: joi.string().optional(),
send_to_merchant: joi.boolean().default(true),
cc_emails: joi.array().items(joi.string()).optional(),
});
exports.invoiceRemindRequestSchema = joi.object({
body: invoiceAdditionalEmailParams.default({}),
method: joi.string().default("POST"),
uri: joi.string().regex(/\/v1\/invoicing\/invoices\/.*\/remind/).required(),
});
exports.invoiceCancelRequestSchema = joi.object({
body: invoiceAdditionalEmailParams.keys({
send_to_payer: joi.boolean().default(true),
}).default(),
method: joi.string().default("POST"),
uri: joi.string().regex(/\/v1\/invoicing\/invoices\/.*\/cancel/).required(),
});
exports.invoiceDeleteRequestSchema = joi.object({
method: joi.string().default("DELETE"),
uri: joi.string().regex(/\/v1\/invoicing\/invoices\/.*/).required(),
});
exports.invoiceSendRequestSchema = joi.object({
method: joi.string().default("POST"),
qs: joi.object({
notify_merchant: joi.boolean().default(true),
}).optional(),
uri: joi.string().regex(/\/v1\/invoicing\/invoices\/.*\/send/).required(),
});
exports.invoiceUpdateRequestSchema = joi.object({
body: exports.invoiceSchema.required(),
method: joi.string().default("PUT"),
uri: joi.string().regex(/\/v1\/invoicing\/invoices\/.*/).required(),
});
exports.invoiceRecordPaymentRequestSchema = joi.object({
body: joi.object({
method: joi.string().valid([
"BANK_TRANSFER",
"CASH",
"CHECK",
"CREDIT_CARD",
"DEBIT_CARD",
"PAYPAL",
"WIRE_TRANSFER",
"OTHER",
]).required(),
date: joi.string().optional(),
note: joi.string().optional(),
amount: common.paypalCurrencySchema.optional(),
}).required(),
method: joi.string().default("POST"),
uri: joi.string().regex(/\/v1\/invoicing\/invoices\/.*\/record-payment/).required(),
});
exports.invoiceRecordRefundRequestSchema = joi.object({
body: joi.object({
date: joi.string().optional(),
note: joi.string().optional(),
amount: common.paypalCurrencySchema.optional(),
}).default({}),
method: joi.string().default("POST"),
uri: joi.string().regex(/\/v1\/invoicing\/invoices\/.*\/record-refund/).required(),
});
exports.invoiceQrRequestSchema = joi.object({
method: joi.string().default("GET"),
qs: joi.object({
height: joi.number().min(150).max(500).default(500),
width: joi.number().min(150).max(500).default(500),
}).default(),
uri: joi.string().regex(/\/v1\/invoicing\/invoices\/.*\/qr-code/).required(),
});
exports.invoiceGenerateNumberRequestSchema = joi.object({
method: joi.string().default("POST"),
uri: joi.string().default("/v1/invoicing/invoices/next-invoice-number"),
});