@paykit-sdk/paystack 1.0.0 → 1.0.1
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.js +48 -38
- package/dist/index.mjs +49 -39
- package/dist/paystack-provider.d.mts +3 -2
- package/dist/paystack-provider.d.ts +3 -2
- package/dist/paystack-provider.js +48 -38
- package/dist/paystack-provider.mjs +49 -39
- package/dist/utils/mapper.d.mts +25 -7
- package/dist/utils/mapper.d.ts +25 -7
- package/dist/utils/mapper.js +18 -18
- package/dist/utils/mapper.mjs +13 -13
- package/package.json +2 -2
|
@@ -13,7 +13,7 @@ interface PaystackMetadata extends ProviderMetadataRegistry {
|
|
|
13
13
|
}
|
|
14
14
|
interface PaystackOptions extends PaykitProviderOptions {
|
|
15
15
|
/**
|
|
16
|
-
* Paystack secret key
|
|
16
|
+
* Paystack secret key
|
|
17
17
|
*/
|
|
18
18
|
secretKey: string;
|
|
19
19
|
}
|
|
@@ -21,6 +21,7 @@ declare class PaystackProvider extends AbstractPayKitProvider implements PayKitP
|
|
|
21
21
|
readonly providerName = "paystack";
|
|
22
22
|
private readonly _client;
|
|
23
23
|
private readonly opts;
|
|
24
|
+
readonly isSandbox: boolean;
|
|
24
25
|
constructor(opts: PaystackOptions);
|
|
25
26
|
get _native(): null;
|
|
26
27
|
private _toCamel;
|
|
@@ -45,7 +46,7 @@ declare class PaystackProvider extends AbstractPayKitProvider implements PayKitP
|
|
|
45
46
|
capturePayment: (_id: string, _params: CapturePaymentSchema) => Promise<Payment>;
|
|
46
47
|
cancelPayment: (_id: string) => Promise<Payment>;
|
|
47
48
|
createRefund: (params: CreateRefundSchema<PaystackMetadata["refund"]>) => Promise<Refund>;
|
|
48
|
-
handleWebhook: (payload: WebhookHandlerConfig, webhookSecret: string) => Promise<Array<WebhookEventPayload<PaystackRawEvents>>>;
|
|
49
|
+
handleWebhook: (payload: WebhookHandlerConfig, webhookSecret: string | null) => Promise<Array<WebhookEventPayload<PaystackRawEvents>>>;
|
|
49
50
|
private mapToStandardEvents;
|
|
50
51
|
}
|
|
51
52
|
|
|
@@ -4048,16 +4048,16 @@ var coerce = {
|
|
|
4048
4048
|
date: ((arg) => ZodDate.create({ ...arg, coerce: true }))
|
|
4049
4049
|
};
|
|
4050
4050
|
var NEVER = INVALID;
|
|
4051
|
-
var
|
|
4051
|
+
var Customer$inboundSchema = (data) => {
|
|
4052
4052
|
const { fullName } = core.parseCustomerName({
|
|
4053
|
-
name: [data.first_name, data.last_name].filter(Boolean).join(" ")
|
|
4053
|
+
name: [data.first_name, data.last_name].filter(Boolean).join(" ") ?? void 0,
|
|
4054
4054
|
email: data.email
|
|
4055
4055
|
});
|
|
4056
4056
|
return {
|
|
4057
4057
|
id: data.customer_code,
|
|
4058
4058
|
email: data.email,
|
|
4059
4059
|
name: fullName,
|
|
4060
|
-
phone: data.phone ??
|
|
4060
|
+
phone: data.phone ?? null,
|
|
4061
4061
|
metadata: data.metadata ?? void 0,
|
|
4062
4062
|
created_at: new Date(data.created_at),
|
|
4063
4063
|
updated_at: data.updated_at ? new Date(data.updated_at) : null
|
|
@@ -4069,7 +4069,7 @@ var paystackStatusMap = {
|
|
|
4069
4069
|
pending: "pending",
|
|
4070
4070
|
abandoned: "canceled"
|
|
4071
4071
|
};
|
|
4072
|
-
var
|
|
4072
|
+
var Payment$inboundSchema = (data, overridePaymentUrl) => {
|
|
4073
4073
|
const rawMetadata = core.parseJSON(
|
|
4074
4074
|
data.metadata,
|
|
4075
4075
|
core.Schema.record(core.Schema.string(), core.Schema.unknown())
|
|
@@ -4090,7 +4090,7 @@ var paykitPayment$InboundSchema = (data, overridePaymentUrl) => {
|
|
|
4090
4090
|
id: data.reference,
|
|
4091
4091
|
amount: data.amount,
|
|
4092
4092
|
currency: data.currency,
|
|
4093
|
-
customer: data.customer?.email
|
|
4093
|
+
customer: data.customer?.email ? { email: data.customer.email } : null,
|
|
4094
4094
|
status,
|
|
4095
4095
|
metadata,
|
|
4096
4096
|
item_id: itemId,
|
|
@@ -4098,7 +4098,7 @@ var paykitPayment$InboundSchema = (data, overridePaymentUrl) => {
|
|
|
4098
4098
|
payment_url: overridePaymentUrl ?? null
|
|
4099
4099
|
};
|
|
4100
4100
|
};
|
|
4101
|
-
var
|
|
4101
|
+
var Checkout$inboundSchema = (init, transaction) => {
|
|
4102
4102
|
const rawMetadata = core.parseJSON(
|
|
4103
4103
|
transaction.metadata,
|
|
4104
4104
|
core.Schema.record(core.Schema.string(), core.Schema.unknown())
|
|
@@ -4132,7 +4132,7 @@ var paykitCheckout$InboundSchema = (init, transaction) => {
|
|
|
4132
4132
|
}
|
|
4133
4133
|
return {
|
|
4134
4134
|
id: init.reference,
|
|
4135
|
-
customer: { email: transaction.customer
|
|
4135
|
+
customer: transaction.customer?.email ? { email: transaction.customer.email } : null,
|
|
4136
4136
|
payment_url: init.authorization_url,
|
|
4137
4137
|
metadata: Object.keys(metadata).length > 0 ? metadata : null,
|
|
4138
4138
|
session_type: type ?? "one_time",
|
|
@@ -4162,11 +4162,11 @@ var paystackSubscriptionStatusMap = {
|
|
|
4162
4162
|
attention: "past_due",
|
|
4163
4163
|
completed: "expired"
|
|
4164
4164
|
};
|
|
4165
|
-
var
|
|
4165
|
+
var Subscription$inboundSchema = (data) => {
|
|
4166
4166
|
const nextPaymentDate = data.next_payment_date ? new Date(data.next_payment_date) : /* @__PURE__ */ new Date();
|
|
4167
4167
|
return {
|
|
4168
4168
|
id: data.subscription_code,
|
|
4169
|
-
customer: data.customer?.email
|
|
4169
|
+
customer: data.customer?.email ? { email: data.customer.email } : null,
|
|
4170
4170
|
amount: data.amount,
|
|
4171
4171
|
currency: data.currency || data.plan?.currency || "NGN",
|
|
4172
4172
|
status: paystackSubscriptionStatusMap[data.status] ?? "active",
|
|
@@ -4180,14 +4180,14 @@ var paykitSubscription$InboundSchema = (data) => {
|
|
|
4180
4180
|
payment_url: null
|
|
4181
4181
|
};
|
|
4182
4182
|
};
|
|
4183
|
-
var
|
|
4183
|
+
var Refund$inboundSchema = (data, fallbackCurrency) => ({
|
|
4184
4184
|
id: String(data.id),
|
|
4185
4185
|
amount: data.amount,
|
|
4186
4186
|
currency: data.currency || fallbackCurrency,
|
|
4187
4187
|
reason: data.customer_note || data.merchant_note || null,
|
|
4188
4188
|
metadata: null
|
|
4189
4189
|
});
|
|
4190
|
-
var
|
|
4190
|
+
var Invoice$inboundSchema = (data) => {
|
|
4191
4191
|
const rawMetadata = core.parseJSON(
|
|
4192
4192
|
data.metadata,
|
|
4193
4193
|
core.Schema.record(core.Schema.string(), core.Schema.unknown())
|
|
@@ -4195,7 +4195,7 @@ var paykitInvoice$InboundSchema = (data) => {
|
|
|
4195
4195
|
const metadata = core.omitInternalMetadata(rawMetadata);
|
|
4196
4196
|
return {
|
|
4197
4197
|
id: String(data.id),
|
|
4198
|
-
customer: data.customer?.email
|
|
4198
|
+
customer: data.customer?.email ? { email: data.customer.email } : null,
|
|
4199
4199
|
subscription_id: null,
|
|
4200
4200
|
billing_mode: "one_time",
|
|
4201
4201
|
amount_paid: data.amount,
|
|
@@ -4221,6 +4221,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4221
4221
|
providerName = providerName;
|
|
4222
4222
|
_client;
|
|
4223
4223
|
opts;
|
|
4224
|
+
isSandbox;
|
|
4224
4225
|
constructor(opts) {
|
|
4225
4226
|
super(paystackOptionsSchema, opts, providerName);
|
|
4226
4227
|
this.opts = opts;
|
|
@@ -4236,6 +4237,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4236
4237
|
debug: opts.debug ?? false
|
|
4237
4238
|
}
|
|
4238
4239
|
});
|
|
4240
|
+
this.isSandbox = opts.isSandbox;
|
|
4239
4241
|
}
|
|
4240
4242
|
get _native() {
|
|
4241
4243
|
return null;
|
|
@@ -4300,7 +4302,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4300
4302
|
const response = await this._client.post("/transaction/initialize", { body: JSON.stringify(body) });
|
|
4301
4303
|
const initData = await this.unwrap(response, "createCheckout");
|
|
4302
4304
|
const rawCustomer = await this._client.get(`/customer/${encodeURIComponent(data.customer.email)}`);
|
|
4303
|
-
return
|
|
4305
|
+
return Checkout$inboundSchema(initData, {
|
|
4304
4306
|
amount: body.amount,
|
|
4305
4307
|
currency: body.currency,
|
|
4306
4308
|
customer: await this.unwrap(rawCustomer, "createCheckout"),
|
|
@@ -4311,7 +4313,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4311
4313
|
const response = await this._client.get(`/transaction/verify/${encodeURIComponent(id)}`);
|
|
4312
4314
|
if (!response.ok || !response.value?.data) return null;
|
|
4313
4315
|
const txn = response.value.data;
|
|
4314
|
-
return
|
|
4316
|
+
return Checkout$inboundSchema(
|
|
4315
4317
|
{
|
|
4316
4318
|
authorization_url: "",
|
|
4317
4319
|
reference: txn.reference
|
|
@@ -4361,12 +4363,12 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4361
4363
|
};
|
|
4362
4364
|
const response = await this._client.post("/customer", { body: JSON.stringify(body) });
|
|
4363
4365
|
const customer = await this.unwrap(response, "createCustomer");
|
|
4364
|
-
return
|
|
4366
|
+
return Customer$inboundSchema(customer);
|
|
4365
4367
|
};
|
|
4366
4368
|
retrieveCustomer = async (id) => {
|
|
4367
4369
|
const response = await this._client.get(`/customer/${encodeURIComponent(id)}`);
|
|
4368
4370
|
if (!response.ok || !response.value?.data) return null;
|
|
4369
|
-
return
|
|
4371
|
+
return Customer$inboundSchema(response.value.data);
|
|
4370
4372
|
};
|
|
4371
4373
|
updateCustomer = async (id, params) => {
|
|
4372
4374
|
const body = {
|
|
@@ -4387,7 +4389,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4387
4389
|
body: JSON.stringify(body)
|
|
4388
4390
|
});
|
|
4389
4391
|
const customer = await this.unwrap(response, "updateCustomer");
|
|
4390
|
-
return
|
|
4392
|
+
return Customer$inboundSchema(customer);
|
|
4391
4393
|
};
|
|
4392
4394
|
deleteCustomer = async (_id) => {
|
|
4393
4395
|
throw new core.ProviderNotSupportedError(
|
|
@@ -4399,11 +4401,11 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4399
4401
|
);
|
|
4400
4402
|
};
|
|
4401
4403
|
createSubscription = async (params) => {
|
|
4402
|
-
const customerValue =
|
|
4404
|
+
const customerValue = core.isEmailCustomer(params.customer) ? params.customer.email : core.isIdCustomer(params.customer) ? String(params.customer.id) : null;
|
|
4403
4405
|
if (!customerValue) {
|
|
4404
4406
|
throw new core.InvalidTypeError(
|
|
4405
4407
|
"customer",
|
|
4406
|
-
"
|
|
4408
|
+
"object with email or id",
|
|
4407
4409
|
typeof params.customer,
|
|
4408
4410
|
{ provider: this.providerName, method: "createSubscription" }
|
|
4409
4411
|
);
|
|
@@ -4420,12 +4422,12 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4420
4422
|
response,
|
|
4421
4423
|
"createSubscription"
|
|
4422
4424
|
);
|
|
4423
|
-
return
|
|
4425
|
+
return Subscription$inboundSchema(subscription);
|
|
4424
4426
|
};
|
|
4425
4427
|
retrieveSubscription = async (id) => {
|
|
4426
4428
|
const response = await this._client.get(`/subscription/${encodeURIComponent(id)}`);
|
|
4427
4429
|
if (!response.ok || !response.value?.data) return null;
|
|
4428
|
-
return
|
|
4430
|
+
return Subscription$inboundSchema(response.value.data);
|
|
4429
4431
|
};
|
|
4430
4432
|
updateSubscription = async (_id, _params) => {
|
|
4431
4433
|
throw new core.ProviderNotSupportedError(
|
|
@@ -4484,11 +4486,13 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4484
4486
|
if (core.isEmailCustomer(data.customer)) {
|
|
4485
4487
|
email = data.customer.email;
|
|
4486
4488
|
} else if (core.isIdCustomer(data.customer)) {
|
|
4487
|
-
const customer = await this.retrieveCustomer(
|
|
4489
|
+
const customer = await this.retrieveCustomer(
|
|
4490
|
+
String(data.customer.id)
|
|
4491
|
+
);
|
|
4488
4492
|
if (!customer) {
|
|
4489
4493
|
throw new core.ResourceNotFoundError(
|
|
4490
4494
|
"customer",
|
|
4491
|
-
data.customer,
|
|
4495
|
+
String(data.customer.id),
|
|
4492
4496
|
this.providerName
|
|
4493
4497
|
);
|
|
4494
4498
|
}
|
|
@@ -4496,7 +4500,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4496
4500
|
} else {
|
|
4497
4501
|
throw new core.InvalidTypeError(
|
|
4498
4502
|
"customer",
|
|
4499
|
-
"
|
|
4503
|
+
"object with email or id",
|
|
4500
4504
|
typeof data.customer,
|
|
4501
4505
|
{ provider: this.providerName, method: "createPayment" }
|
|
4502
4506
|
);
|
|
@@ -4528,7 +4532,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4528
4532
|
id: initData.reference,
|
|
4529
4533
|
amount: data.amount,
|
|
4530
4534
|
currency: data.currency,
|
|
4531
|
-
customer:
|
|
4535
|
+
customer: { email },
|
|
4532
4536
|
status: "pending",
|
|
4533
4537
|
metadata: core.stringifyMetadataValues(
|
|
4534
4538
|
data.metadata ?? {}
|
|
@@ -4541,7 +4545,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4541
4545
|
retrievePayment = async (id) => {
|
|
4542
4546
|
const response = await this._client.get(`/transaction/verify/${encodeURIComponent(id)}`);
|
|
4543
4547
|
if (!response.ok || !response.value?.data) return null;
|
|
4544
|
-
return
|
|
4548
|
+
return Payment$inboundSchema(response.value.data);
|
|
4545
4549
|
};
|
|
4546
4550
|
updatePayment = async (_id, _params) => {
|
|
4547
4551
|
throw new core.ProviderNotSupportedError("updatePayment", "Paystack", {
|
|
@@ -4584,9 +4588,15 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4584
4588
|
};
|
|
4585
4589
|
const response = await this._client.post("/refund", { body: JSON.stringify(body) });
|
|
4586
4590
|
const refund = await this.unwrap(response, "createRefund");
|
|
4587
|
-
return
|
|
4591
|
+
return Refund$inboundSchema(refund, "NGN");
|
|
4588
4592
|
};
|
|
4589
4593
|
handleWebhook = async (payload, webhookSecret) => {
|
|
4594
|
+
if (!webhookSecret) {
|
|
4595
|
+
throw new core.WebhookError(
|
|
4596
|
+
"webhookSecret is required for Paystack webhook verification",
|
|
4597
|
+
{ provider: this.providerName }
|
|
4598
|
+
);
|
|
4599
|
+
}
|
|
4590
4600
|
const { body, headersAsObject } = payload;
|
|
4591
4601
|
const signature = headersAsObject["x-paystack-signature"];
|
|
4592
4602
|
if (!signature) {
|
|
@@ -4629,8 +4639,8 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4629
4639
|
switch (event.event) {
|
|
4630
4640
|
case "charge.success": {
|
|
4631
4641
|
const txn = event.data;
|
|
4632
|
-
const payment =
|
|
4633
|
-
const invoice =
|
|
4642
|
+
const payment = Payment$inboundSchema(txn);
|
|
4643
|
+
const invoice = Invoice$inboundSchema(txn);
|
|
4634
4644
|
return [
|
|
4635
4645
|
core.paykitEvent$InboundSchema({
|
|
4636
4646
|
type: "payment.updated",
|
|
@@ -4648,10 +4658,10 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4648
4658
|
}
|
|
4649
4659
|
case "charge.failed": {
|
|
4650
4660
|
const txn = event.data;
|
|
4651
|
-
const payment =
|
|
4661
|
+
const payment = Payment$inboundSchema(txn);
|
|
4652
4662
|
return [
|
|
4653
4663
|
core.paykitEvent$InboundSchema({
|
|
4654
|
-
type: "payment.
|
|
4664
|
+
type: "payment.failed",
|
|
4655
4665
|
created,
|
|
4656
4666
|
id,
|
|
4657
4667
|
data: payment
|
|
@@ -4660,7 +4670,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4660
4670
|
}
|
|
4661
4671
|
case "customer.create": {
|
|
4662
4672
|
const customerData = event.data;
|
|
4663
|
-
const customer =
|
|
4673
|
+
const customer = Customer$inboundSchema(customerData);
|
|
4664
4674
|
return [
|
|
4665
4675
|
core.paykitEvent$InboundSchema({
|
|
4666
4676
|
type: "customer.created",
|
|
@@ -4673,7 +4683,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4673
4683
|
case "customeridentification.success":
|
|
4674
4684
|
case "customeridentification.failed": {
|
|
4675
4685
|
const customerData = event.data;
|
|
4676
|
-
const customer =
|
|
4686
|
+
const customer = Customer$inboundSchema(customerData);
|
|
4677
4687
|
return [
|
|
4678
4688
|
core.paykitEvent$InboundSchema({
|
|
4679
4689
|
type: "customer.updated",
|
|
@@ -4685,7 +4695,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4685
4695
|
}
|
|
4686
4696
|
case "subscription.create": {
|
|
4687
4697
|
const subData = event.data;
|
|
4688
|
-
const subscription =
|
|
4698
|
+
const subscription = Subscription$inboundSchema(subData);
|
|
4689
4699
|
return [
|
|
4690
4700
|
core.paykitEvent$InboundSchema({
|
|
4691
4701
|
type: "subscription.created",
|
|
@@ -4710,7 +4720,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4710
4720
|
case "invoice.update": {
|
|
4711
4721
|
const invoiceData = event.data;
|
|
4712
4722
|
if (!invoiceData.transaction) return null;
|
|
4713
|
-
const payment =
|
|
4723
|
+
const payment = Payment$inboundSchema(
|
|
4714
4724
|
invoiceData.transaction
|
|
4715
4725
|
);
|
|
4716
4726
|
return [
|
|
@@ -4725,12 +4735,12 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4725
4735
|
case "invoice.payment_failed": {
|
|
4726
4736
|
const invoiceData = event.data;
|
|
4727
4737
|
if (!invoiceData.transaction) return null;
|
|
4728
|
-
const payment =
|
|
4738
|
+
const payment = Payment$inboundSchema(
|
|
4729
4739
|
invoiceData.transaction
|
|
4730
4740
|
);
|
|
4731
4741
|
return [
|
|
4732
4742
|
core.paykitEvent$InboundSchema({
|
|
4733
|
-
type: "payment.
|
|
4743
|
+
type: "payment.failed",
|
|
4734
4744
|
created,
|
|
4735
4745
|
id,
|
|
4736
4746
|
data: { ...payment, status: "failed" }
|
|
@@ -4741,7 +4751,7 @@ var PaystackProvider = class extends core.AbstractPayKitProvider {
|
|
|
4741
4751
|
case "refund.processed":
|
|
4742
4752
|
case "refund.failed": {
|
|
4743
4753
|
const refundData = event.data;
|
|
4744
|
-
const refund =
|
|
4754
|
+
const refund = Refund$inboundSchema(refundData, "NGN");
|
|
4745
4755
|
return [
|
|
4746
4756
|
core.paykitEvent$InboundSchema({
|
|
4747
4757
|
type: "refund.created",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { schema, AbstractPayKitProvider, HTTPClient, OperationFailedError, createCheckoutSchema, ValidationError, isEmailCustomer, InvalidTypeError, PAYKIT_METADATA_KEY, stringifyMetadataValues, ProviderNotSupportedError, createCustomerSchema, parseCustomerName, ResourceNotFoundError, createPaymentSchema,
|
|
1
|
+
import { schema, AbstractPayKitProvider, HTTPClient, OperationFailedError, createCheckoutSchema, ValidationError, isEmailCustomer, InvalidTypeError, PAYKIT_METADATA_KEY, stringifyMetadataValues, ProviderNotSupportedError, createCustomerSchema, parseCustomerName, isIdCustomer, ResourceNotFoundError, createPaymentSchema, createRefundSchema, WebhookError, paykitEvent$InboundSchema, parseJSON, Schema, omitInternalMetadata, billingModeSchema } from '@paykit-sdk/core';
|
|
2
2
|
import { createHmac } from 'crypto';
|
|
3
3
|
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -4046,16 +4046,16 @@ var coerce = {
|
|
|
4046
4046
|
date: ((arg) => ZodDate.create({ ...arg, coerce: true }))
|
|
4047
4047
|
};
|
|
4048
4048
|
var NEVER = INVALID;
|
|
4049
|
-
var
|
|
4049
|
+
var Customer$inboundSchema = (data) => {
|
|
4050
4050
|
const { fullName } = parseCustomerName({
|
|
4051
|
-
name: [data.first_name, data.last_name].filter(Boolean).join(" ")
|
|
4051
|
+
name: [data.first_name, data.last_name].filter(Boolean).join(" ") ?? void 0,
|
|
4052
4052
|
email: data.email
|
|
4053
4053
|
});
|
|
4054
4054
|
return {
|
|
4055
4055
|
id: data.customer_code,
|
|
4056
4056
|
email: data.email,
|
|
4057
4057
|
name: fullName,
|
|
4058
|
-
phone: data.phone ??
|
|
4058
|
+
phone: data.phone ?? null,
|
|
4059
4059
|
metadata: data.metadata ?? void 0,
|
|
4060
4060
|
created_at: new Date(data.created_at),
|
|
4061
4061
|
updated_at: data.updated_at ? new Date(data.updated_at) : null
|
|
@@ -4067,7 +4067,7 @@ var paystackStatusMap = {
|
|
|
4067
4067
|
pending: "pending",
|
|
4068
4068
|
abandoned: "canceled"
|
|
4069
4069
|
};
|
|
4070
|
-
var
|
|
4070
|
+
var Payment$inboundSchema = (data, overridePaymentUrl) => {
|
|
4071
4071
|
const rawMetadata = parseJSON(
|
|
4072
4072
|
data.metadata,
|
|
4073
4073
|
Schema.record(Schema.string(), Schema.unknown())
|
|
@@ -4088,7 +4088,7 @@ var paykitPayment$InboundSchema = (data, overridePaymentUrl) => {
|
|
|
4088
4088
|
id: data.reference,
|
|
4089
4089
|
amount: data.amount,
|
|
4090
4090
|
currency: data.currency,
|
|
4091
|
-
customer: data.customer?.email
|
|
4091
|
+
customer: data.customer?.email ? { email: data.customer.email } : null,
|
|
4092
4092
|
status,
|
|
4093
4093
|
metadata,
|
|
4094
4094
|
item_id: itemId,
|
|
@@ -4096,7 +4096,7 @@ var paykitPayment$InboundSchema = (data, overridePaymentUrl) => {
|
|
|
4096
4096
|
payment_url: overridePaymentUrl ?? null
|
|
4097
4097
|
};
|
|
4098
4098
|
};
|
|
4099
|
-
var
|
|
4099
|
+
var Checkout$inboundSchema = (init, transaction) => {
|
|
4100
4100
|
const rawMetadata = parseJSON(
|
|
4101
4101
|
transaction.metadata,
|
|
4102
4102
|
Schema.record(Schema.string(), Schema.unknown())
|
|
@@ -4130,7 +4130,7 @@ var paykitCheckout$InboundSchema = (init, transaction) => {
|
|
|
4130
4130
|
}
|
|
4131
4131
|
return {
|
|
4132
4132
|
id: init.reference,
|
|
4133
|
-
customer: { email: transaction.customer
|
|
4133
|
+
customer: transaction.customer?.email ? { email: transaction.customer.email } : null,
|
|
4134
4134
|
payment_url: init.authorization_url,
|
|
4135
4135
|
metadata: Object.keys(metadata).length > 0 ? metadata : null,
|
|
4136
4136
|
session_type: type ?? "one_time",
|
|
@@ -4160,11 +4160,11 @@ var paystackSubscriptionStatusMap = {
|
|
|
4160
4160
|
attention: "past_due",
|
|
4161
4161
|
completed: "expired"
|
|
4162
4162
|
};
|
|
4163
|
-
var
|
|
4163
|
+
var Subscription$inboundSchema = (data) => {
|
|
4164
4164
|
const nextPaymentDate = data.next_payment_date ? new Date(data.next_payment_date) : /* @__PURE__ */ new Date();
|
|
4165
4165
|
return {
|
|
4166
4166
|
id: data.subscription_code,
|
|
4167
|
-
customer: data.customer?.email
|
|
4167
|
+
customer: data.customer?.email ? { email: data.customer.email } : null,
|
|
4168
4168
|
amount: data.amount,
|
|
4169
4169
|
currency: data.currency || data.plan?.currency || "NGN",
|
|
4170
4170
|
status: paystackSubscriptionStatusMap[data.status] ?? "active",
|
|
@@ -4178,14 +4178,14 @@ var paykitSubscription$InboundSchema = (data) => {
|
|
|
4178
4178
|
payment_url: null
|
|
4179
4179
|
};
|
|
4180
4180
|
};
|
|
4181
|
-
var
|
|
4181
|
+
var Refund$inboundSchema = (data, fallbackCurrency) => ({
|
|
4182
4182
|
id: String(data.id),
|
|
4183
4183
|
amount: data.amount,
|
|
4184
4184
|
currency: data.currency || fallbackCurrency,
|
|
4185
4185
|
reason: data.customer_note || data.merchant_note || null,
|
|
4186
4186
|
metadata: null
|
|
4187
4187
|
});
|
|
4188
|
-
var
|
|
4188
|
+
var Invoice$inboundSchema = (data) => {
|
|
4189
4189
|
const rawMetadata = parseJSON(
|
|
4190
4190
|
data.metadata,
|
|
4191
4191
|
Schema.record(Schema.string(), Schema.unknown())
|
|
@@ -4193,7 +4193,7 @@ var paykitInvoice$InboundSchema = (data) => {
|
|
|
4193
4193
|
const metadata = omitInternalMetadata(rawMetadata);
|
|
4194
4194
|
return {
|
|
4195
4195
|
id: String(data.id),
|
|
4196
|
-
customer: data.customer?.email
|
|
4196
|
+
customer: data.customer?.email ? { email: data.customer.email } : null,
|
|
4197
4197
|
subscription_id: null,
|
|
4198
4198
|
billing_mode: "one_time",
|
|
4199
4199
|
amount_paid: data.amount,
|
|
@@ -4219,6 +4219,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4219
4219
|
providerName = providerName;
|
|
4220
4220
|
_client;
|
|
4221
4221
|
opts;
|
|
4222
|
+
isSandbox;
|
|
4222
4223
|
constructor(opts) {
|
|
4223
4224
|
super(paystackOptionsSchema, opts, providerName);
|
|
4224
4225
|
this.opts = opts;
|
|
@@ -4234,6 +4235,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4234
4235
|
debug: opts.debug ?? false
|
|
4235
4236
|
}
|
|
4236
4237
|
});
|
|
4238
|
+
this.isSandbox = opts.isSandbox;
|
|
4237
4239
|
}
|
|
4238
4240
|
get _native() {
|
|
4239
4241
|
return null;
|
|
@@ -4298,7 +4300,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4298
4300
|
const response = await this._client.post("/transaction/initialize", { body: JSON.stringify(body) });
|
|
4299
4301
|
const initData = await this.unwrap(response, "createCheckout");
|
|
4300
4302
|
const rawCustomer = await this._client.get(`/customer/${encodeURIComponent(data.customer.email)}`);
|
|
4301
|
-
return
|
|
4303
|
+
return Checkout$inboundSchema(initData, {
|
|
4302
4304
|
amount: body.amount,
|
|
4303
4305
|
currency: body.currency,
|
|
4304
4306
|
customer: await this.unwrap(rawCustomer, "createCheckout"),
|
|
@@ -4309,7 +4311,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4309
4311
|
const response = await this._client.get(`/transaction/verify/${encodeURIComponent(id)}`);
|
|
4310
4312
|
if (!response.ok || !response.value?.data) return null;
|
|
4311
4313
|
const txn = response.value.data;
|
|
4312
|
-
return
|
|
4314
|
+
return Checkout$inboundSchema(
|
|
4313
4315
|
{
|
|
4314
4316
|
authorization_url: "",
|
|
4315
4317
|
reference: txn.reference
|
|
@@ -4359,12 +4361,12 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4359
4361
|
};
|
|
4360
4362
|
const response = await this._client.post("/customer", { body: JSON.stringify(body) });
|
|
4361
4363
|
const customer = await this.unwrap(response, "createCustomer");
|
|
4362
|
-
return
|
|
4364
|
+
return Customer$inboundSchema(customer);
|
|
4363
4365
|
};
|
|
4364
4366
|
retrieveCustomer = async (id) => {
|
|
4365
4367
|
const response = await this._client.get(`/customer/${encodeURIComponent(id)}`);
|
|
4366
4368
|
if (!response.ok || !response.value?.data) return null;
|
|
4367
|
-
return
|
|
4369
|
+
return Customer$inboundSchema(response.value.data);
|
|
4368
4370
|
};
|
|
4369
4371
|
updateCustomer = async (id, params) => {
|
|
4370
4372
|
const body = {
|
|
@@ -4385,7 +4387,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4385
4387
|
body: JSON.stringify(body)
|
|
4386
4388
|
});
|
|
4387
4389
|
const customer = await this.unwrap(response, "updateCustomer");
|
|
4388
|
-
return
|
|
4390
|
+
return Customer$inboundSchema(customer);
|
|
4389
4391
|
};
|
|
4390
4392
|
deleteCustomer = async (_id) => {
|
|
4391
4393
|
throw new ProviderNotSupportedError(
|
|
@@ -4397,11 +4399,11 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4397
4399
|
);
|
|
4398
4400
|
};
|
|
4399
4401
|
createSubscription = async (params) => {
|
|
4400
|
-
const customerValue =
|
|
4402
|
+
const customerValue = isEmailCustomer(params.customer) ? params.customer.email : isIdCustomer(params.customer) ? String(params.customer.id) : null;
|
|
4401
4403
|
if (!customerValue) {
|
|
4402
4404
|
throw new InvalidTypeError(
|
|
4403
4405
|
"customer",
|
|
4404
|
-
"
|
|
4406
|
+
"object with email or id",
|
|
4405
4407
|
typeof params.customer,
|
|
4406
4408
|
{ provider: this.providerName, method: "createSubscription" }
|
|
4407
4409
|
);
|
|
@@ -4418,12 +4420,12 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4418
4420
|
response,
|
|
4419
4421
|
"createSubscription"
|
|
4420
4422
|
);
|
|
4421
|
-
return
|
|
4423
|
+
return Subscription$inboundSchema(subscription);
|
|
4422
4424
|
};
|
|
4423
4425
|
retrieveSubscription = async (id) => {
|
|
4424
4426
|
const response = await this._client.get(`/subscription/${encodeURIComponent(id)}`);
|
|
4425
4427
|
if (!response.ok || !response.value?.data) return null;
|
|
4426
|
-
return
|
|
4428
|
+
return Subscription$inboundSchema(response.value.data);
|
|
4427
4429
|
};
|
|
4428
4430
|
updateSubscription = async (_id, _params) => {
|
|
4429
4431
|
throw new ProviderNotSupportedError(
|
|
@@ -4482,11 +4484,13 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4482
4484
|
if (isEmailCustomer(data.customer)) {
|
|
4483
4485
|
email = data.customer.email;
|
|
4484
4486
|
} else if (isIdCustomer(data.customer)) {
|
|
4485
|
-
const customer = await this.retrieveCustomer(
|
|
4487
|
+
const customer = await this.retrieveCustomer(
|
|
4488
|
+
String(data.customer.id)
|
|
4489
|
+
);
|
|
4486
4490
|
if (!customer) {
|
|
4487
4491
|
throw new ResourceNotFoundError(
|
|
4488
4492
|
"customer",
|
|
4489
|
-
data.customer,
|
|
4493
|
+
String(data.customer.id),
|
|
4490
4494
|
this.providerName
|
|
4491
4495
|
);
|
|
4492
4496
|
}
|
|
@@ -4494,7 +4498,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4494
4498
|
} else {
|
|
4495
4499
|
throw new InvalidTypeError(
|
|
4496
4500
|
"customer",
|
|
4497
|
-
"
|
|
4501
|
+
"object with email or id",
|
|
4498
4502
|
typeof data.customer,
|
|
4499
4503
|
{ provider: this.providerName, method: "createPayment" }
|
|
4500
4504
|
);
|
|
@@ -4526,7 +4530,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4526
4530
|
id: initData.reference,
|
|
4527
4531
|
amount: data.amount,
|
|
4528
4532
|
currency: data.currency,
|
|
4529
|
-
customer:
|
|
4533
|
+
customer: { email },
|
|
4530
4534
|
status: "pending",
|
|
4531
4535
|
metadata: stringifyMetadataValues(
|
|
4532
4536
|
data.metadata ?? {}
|
|
@@ -4539,7 +4543,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4539
4543
|
retrievePayment = async (id) => {
|
|
4540
4544
|
const response = await this._client.get(`/transaction/verify/${encodeURIComponent(id)}`);
|
|
4541
4545
|
if (!response.ok || !response.value?.data) return null;
|
|
4542
|
-
return
|
|
4546
|
+
return Payment$inboundSchema(response.value.data);
|
|
4543
4547
|
};
|
|
4544
4548
|
updatePayment = async (_id, _params) => {
|
|
4545
4549
|
throw new ProviderNotSupportedError("updatePayment", "Paystack", {
|
|
@@ -4582,9 +4586,15 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4582
4586
|
};
|
|
4583
4587
|
const response = await this._client.post("/refund", { body: JSON.stringify(body) });
|
|
4584
4588
|
const refund = await this.unwrap(response, "createRefund");
|
|
4585
|
-
return
|
|
4589
|
+
return Refund$inboundSchema(refund, "NGN");
|
|
4586
4590
|
};
|
|
4587
4591
|
handleWebhook = async (payload, webhookSecret) => {
|
|
4592
|
+
if (!webhookSecret) {
|
|
4593
|
+
throw new WebhookError(
|
|
4594
|
+
"webhookSecret is required for Paystack webhook verification",
|
|
4595
|
+
{ provider: this.providerName }
|
|
4596
|
+
);
|
|
4597
|
+
}
|
|
4588
4598
|
const { body, headersAsObject } = payload;
|
|
4589
4599
|
const signature = headersAsObject["x-paystack-signature"];
|
|
4590
4600
|
if (!signature) {
|
|
@@ -4627,8 +4637,8 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4627
4637
|
switch (event.event) {
|
|
4628
4638
|
case "charge.success": {
|
|
4629
4639
|
const txn = event.data;
|
|
4630
|
-
const payment =
|
|
4631
|
-
const invoice =
|
|
4640
|
+
const payment = Payment$inboundSchema(txn);
|
|
4641
|
+
const invoice = Invoice$inboundSchema(txn);
|
|
4632
4642
|
return [
|
|
4633
4643
|
paykitEvent$InboundSchema({
|
|
4634
4644
|
type: "payment.updated",
|
|
@@ -4646,10 +4656,10 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4646
4656
|
}
|
|
4647
4657
|
case "charge.failed": {
|
|
4648
4658
|
const txn = event.data;
|
|
4649
|
-
const payment =
|
|
4659
|
+
const payment = Payment$inboundSchema(txn);
|
|
4650
4660
|
return [
|
|
4651
4661
|
paykitEvent$InboundSchema({
|
|
4652
|
-
type: "payment.
|
|
4662
|
+
type: "payment.failed",
|
|
4653
4663
|
created,
|
|
4654
4664
|
id,
|
|
4655
4665
|
data: payment
|
|
@@ -4658,7 +4668,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4658
4668
|
}
|
|
4659
4669
|
case "customer.create": {
|
|
4660
4670
|
const customerData = event.data;
|
|
4661
|
-
const customer =
|
|
4671
|
+
const customer = Customer$inboundSchema(customerData);
|
|
4662
4672
|
return [
|
|
4663
4673
|
paykitEvent$InboundSchema({
|
|
4664
4674
|
type: "customer.created",
|
|
@@ -4671,7 +4681,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4671
4681
|
case "customeridentification.success":
|
|
4672
4682
|
case "customeridentification.failed": {
|
|
4673
4683
|
const customerData = event.data;
|
|
4674
|
-
const customer =
|
|
4684
|
+
const customer = Customer$inboundSchema(customerData);
|
|
4675
4685
|
return [
|
|
4676
4686
|
paykitEvent$InboundSchema({
|
|
4677
4687
|
type: "customer.updated",
|
|
@@ -4683,7 +4693,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4683
4693
|
}
|
|
4684
4694
|
case "subscription.create": {
|
|
4685
4695
|
const subData = event.data;
|
|
4686
|
-
const subscription =
|
|
4696
|
+
const subscription = Subscription$inboundSchema(subData);
|
|
4687
4697
|
return [
|
|
4688
4698
|
paykitEvent$InboundSchema({
|
|
4689
4699
|
type: "subscription.created",
|
|
@@ -4708,7 +4718,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4708
4718
|
case "invoice.update": {
|
|
4709
4719
|
const invoiceData = event.data;
|
|
4710
4720
|
if (!invoiceData.transaction) return null;
|
|
4711
|
-
const payment =
|
|
4721
|
+
const payment = Payment$inboundSchema(
|
|
4712
4722
|
invoiceData.transaction
|
|
4713
4723
|
);
|
|
4714
4724
|
return [
|
|
@@ -4723,12 +4733,12 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4723
4733
|
case "invoice.payment_failed": {
|
|
4724
4734
|
const invoiceData = event.data;
|
|
4725
4735
|
if (!invoiceData.transaction) return null;
|
|
4726
|
-
const payment =
|
|
4736
|
+
const payment = Payment$inboundSchema(
|
|
4727
4737
|
invoiceData.transaction
|
|
4728
4738
|
);
|
|
4729
4739
|
return [
|
|
4730
4740
|
paykitEvent$InboundSchema({
|
|
4731
|
-
type: "payment.
|
|
4741
|
+
type: "payment.failed",
|
|
4732
4742
|
created,
|
|
4733
4743
|
id,
|
|
4734
4744
|
data: { ...payment, status: "failed" }
|
|
@@ -4739,7 +4749,7 @@ var PaystackProvider = class extends AbstractPayKitProvider {
|
|
|
4739
4749
|
case "refund.processed":
|
|
4740
4750
|
case "refund.failed": {
|
|
4741
4751
|
const refundData = event.data;
|
|
4742
|
-
const refund =
|
|
4752
|
+
const refund = Refund$inboundSchema(refundData, "NGN");
|
|
4743
4753
|
return [
|
|
4744
4754
|
paykitEvent$InboundSchema({
|
|
4745
4755
|
type: "refund.created",
|