@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 CHANGED
@@ -4048,16 +4048,16 @@ var coerce = {
4048
4048
  date: ((arg) => ZodDate.create({ ...arg, coerce: true }))
4049
4049
  };
4050
4050
  var NEVER = INVALID;
4051
- var paykitCustomer$InboundSchema = (data) => {
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 paykitPayment$InboundSchema = (data, overridePaymentUrl) => {
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 paykitCheckout$InboundSchema = (init, transaction) => {
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?.email ?? "" },
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 paykitSubscription$InboundSchema = (data) => {
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 paykitRefund$InboundSchema = (data, fallbackCurrency) => ({
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 paykitInvoice$InboundSchema = (data) => {
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 paykitCheckout$InboundSchema(initData, {
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 paykitCheckout$InboundSchema(
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 paykitCustomer$InboundSchema(customer);
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 paykitCustomer$InboundSchema(response.value.data);
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 paykitCustomer$InboundSchema(customer);
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 = typeof params.customer === "string" ? params.customer : "email" in params.customer ? params.customer.email : null;
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
- "string (customer code) or object with email",
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 paykitSubscription$InboundSchema(subscription);
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 paykitSubscription$InboundSchema(response.value.data);
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(data.customer);
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
- "string (customer code) or object with email",
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: core.isEmailCustomer(data.customer) ? { email } : email,
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 paykitPayment$InboundSchema(response.value.data);
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 paykitRefund$InboundSchema(refund, "NGN");
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 = paykitPayment$InboundSchema(txn);
4633
- const invoice = paykitInvoice$InboundSchema(txn);
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 = paykitPayment$InboundSchema(txn);
4661
+ const payment = Payment$inboundSchema(txn);
4652
4662
  return [
4653
4663
  core.paykitEvent$InboundSchema({
4654
- type: "payment.updated",
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 = paykitCustomer$InboundSchema(customerData);
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 = paykitCustomer$InboundSchema(customerData);
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 = paykitSubscription$InboundSchema(subData);
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 = paykitPayment$InboundSchema(
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 = paykitPayment$InboundSchema(
4738
+ const payment = Payment$inboundSchema(
4729
4739
  invoiceData.transaction
4730
4740
  );
4731
4741
  return [
4732
4742
  core.paykitEvent$InboundSchema({
4733
- type: "payment.updated",
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 = paykitRefund$InboundSchema(refundData, "NGN");
4754
+ const refund = Refund$inboundSchema(refundData, "NGN");
4745
4755
  return [
4746
4756
  core.paykitEvent$InboundSchema({
4747
4757
  type: "refund.created",
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { schema, AbstractPayKitProvider, HTTPClient, OperationFailedError, createCheckoutSchema, ValidationError, isEmailCustomer, InvalidTypeError, PAYKIT_METADATA_KEY, stringifyMetadataValues, ProviderNotSupportedError, createCustomerSchema, parseCustomerName, ResourceNotFoundError, createPaymentSchema, isIdCustomer, createRefundSchema, WebhookError, paykitEvent$InboundSchema, validateRequiredKeys, parseJSON, Schema, omitInternalMetadata, billingModeSchema } from '@paykit-sdk/core';
1
+ import { schema, AbstractPayKitProvider, HTTPClient, OperationFailedError, createCheckoutSchema, ValidationError, isEmailCustomer, InvalidTypeError, PAYKIT_METADATA_KEY, stringifyMetadataValues, ProviderNotSupportedError, createCustomerSchema, parseCustomerName, isIdCustomer, ResourceNotFoundError, createPaymentSchema, createRefundSchema, WebhookError, paykitEvent$InboundSchema, validateRequiredKeys, 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 paykitCustomer$InboundSchema = (data) => {
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 paykitPayment$InboundSchema = (data, overridePaymentUrl) => {
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 paykitCheckout$InboundSchema = (init, transaction) => {
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?.email ?? "" },
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 paykitSubscription$InboundSchema = (data) => {
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 paykitRefund$InboundSchema = (data, fallbackCurrency) => ({
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 paykitInvoice$InboundSchema = (data) => {
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 paykitCheckout$InboundSchema(initData, {
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 paykitCheckout$InboundSchema(
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 paykitCustomer$InboundSchema(customer);
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 paykitCustomer$InboundSchema(response.value.data);
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 paykitCustomer$InboundSchema(customer);
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 = typeof params.customer === "string" ? params.customer : "email" in params.customer ? params.customer.email : null;
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
- "string (customer code) or object with email",
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 paykitSubscription$InboundSchema(subscription);
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 paykitSubscription$InboundSchema(response.value.data);
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(data.customer);
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
- "string (customer code) or object with email",
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: isEmailCustomer(data.customer) ? { email } : email,
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 paykitPayment$InboundSchema(response.value.data);
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 paykitRefund$InboundSchema(refund, "NGN");
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 = paykitPayment$InboundSchema(txn);
4631
- const invoice = paykitInvoice$InboundSchema(txn);
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 = paykitPayment$InboundSchema(txn);
4659
+ const payment = Payment$inboundSchema(txn);
4650
4660
  return [
4651
4661
  paykitEvent$InboundSchema({
4652
- type: "payment.updated",
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 = paykitCustomer$InboundSchema(customerData);
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 = paykitCustomer$InboundSchema(customerData);
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 = paykitSubscription$InboundSchema(subData);
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 = paykitPayment$InboundSchema(
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 = paykitPayment$InboundSchema(
4736
+ const payment = Payment$inboundSchema(
4727
4737
  invoiceData.transaction
4728
4738
  );
4729
4739
  return [
4730
4740
  paykitEvent$InboundSchema({
4731
- type: "payment.updated",
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 = paykitRefund$InboundSchema(refundData, "NGN");
4752
+ const refund = Refund$inboundSchema(refundData, "NGN");
4743
4753
  return [
4744
4754
  paykitEvent$InboundSchema({
4745
4755
  type: "refund.created",
@@ -13,7 +13,7 @@ interface PaystackMetadata extends ProviderMetadataRegistry {
13
13
  }
14
14
  interface PaystackOptions extends PaykitProviderOptions {
15
15
  /**
16
- * Paystack secret key (sk_live_xxx or sk_test_xxx)
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