@paykit-sdk/gopay 1.1.1 → 1.1.3

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.
@@ -13,10 +13,6 @@ interface GoPayOptions extends PaykitProviderOptions {
13
13
  * The GoID for the GoPay API
14
14
  */
15
15
  goId: string;
16
- /**
17
- * Whether to use the sandbox environment
18
- */
19
- isSandbox: boolean;
20
16
  /**
21
17
  * The webhook URL for the GoPay API
22
18
  */
@@ -27,7 +23,7 @@ declare class GoPayProvider extends AbstractPayKitProvider implements PayKitProv
27
23
  readonly providerName = "gopay";
28
24
  private _client;
29
25
  private baseUrl;
30
- private authController;
26
+ private tokenManager;
31
27
  constructor(opts: GoPayOptions);
32
28
  createCheckout: (params: CreateCheckoutSchema) => Promise<Checkout>;
33
29
  retrieveCheckout: (id: string) => Promise<Checkout | null>;
@@ -13,10 +13,6 @@ interface GoPayOptions extends PaykitProviderOptions {
13
13
  * The GoID for the GoPay API
14
14
  */
15
15
  goId: string;
16
- /**
17
- * Whether to use the sandbox environment
18
- */
19
- isSandbox: boolean;
20
16
  /**
21
17
  * The webhook URL for the GoPay API
22
18
  */
@@ -27,7 +23,7 @@ declare class GoPayProvider extends AbstractPayKitProvider implements PayKitProv
27
23
  readonly providerName = "gopay";
28
24
  private _client;
29
25
  private baseUrl;
30
- private authController;
26
+ private tokenManager;
31
27
  constructor(opts: GoPayOptions);
32
28
  createCheckout: (params: CreateCheckoutSchema) => Promise<Checkout>;
33
29
  retrieveCheckout: (id: string) => Promise<Checkout | null>;
@@ -4068,60 +4068,6 @@ var coerce = {
4068
4068
  date: ((arg) => ZodDate.create({ ...arg, coerce: true }))
4069
4069
  };
4070
4070
  var NEVER = INVALID;
4071
- var AuthController = class {
4072
- constructor(opts) {
4073
- this.opts = opts;
4074
- const debug = opts.debug ?? true;
4075
- this._client = new core.HTTPClient({
4076
- baseUrl: this.opts.baseUrl,
4077
- headers: {},
4078
- retryOptions: { max: 3, baseDelay: 1e3, debug }
4079
- });
4080
- }
4081
- _client;
4082
- _accessToken = null;
4083
- getAccessToken = async () => {
4084
- if (this._accessToken) {
4085
- const [token, , expiryStr] = this._accessToken.split("::paykit::");
4086
- const expiry = parseInt(expiryStr || "0", 10);
4087
- if (expiry > Date.now()) return token;
4088
- }
4089
- const credentials = Buffer.from(
4090
- `${this.opts.clientId}:${this.opts.clientSecret}`
4091
- ).toString("base64");
4092
- const body = new URLSearchParams({
4093
- grant_type: "client_credentials",
4094
- scope: "payment-all"
4095
- }).toString();
4096
- const response = await this._client.post("/oauth2/token", {
4097
- headers: {
4098
- Authorization: `Basic ${credentials}`,
4099
- "Content-Type": "application/x-www-form-urlencoded",
4100
- Accept: "application/json"
4101
- },
4102
- body
4103
- });
4104
- if (!response.ok || !response.value?.access_token) {
4105
- throw new core.OperationFailedError("getAccessToken", "gopay", {
4106
- cause: new Error(
4107
- `Failed to obtain GoPay access token: ${JSON.stringify(response.value || response.error)}`
4108
- )
4109
- });
4110
- }
4111
- const expiryTime = Date.now() + (response.value.expires_in - 300) * 1e3;
4112
- const accessToken = `${response.value.access_token}::paykit::${expiryTime}`;
4113
- this._accessToken = accessToken;
4114
- return response.value.access_token;
4115
- };
4116
- getAuthHeaders = async () => {
4117
- const token = await this.getAccessToken();
4118
- return {
4119
- Authorization: `Bearer ${token}`,
4120
- "Content-Type": "application/json",
4121
- Accept: "application/json"
4122
- };
4123
- };
4124
- };
4125
4071
  var decodeHtmlEntities = (str) => {
4126
4072
  return str.replace(/&#34;/g, '"').replace(/&#39;/g, "'").replace(/&quot;/g, '"').replace(/&apos;/g, "'");
4127
4073
  };
@@ -4328,16 +4274,36 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4328
4274
  headers: {},
4329
4275
  retryOptions: { max: 3, baseDelay: 1e3, debug }
4330
4276
  });
4331
- this.authController = new AuthController({ ...opts, baseUrl: this.baseUrl });
4277
+ this.tokenManager = new core.OAuth2TokenManager({
4278
+ client: this._client,
4279
+ provider: this.providerName,
4280
+ tokenEndpoint: "/oauth2/token",
4281
+ credentials: { username: opts.clientId, password: opts.clientSecret },
4282
+ responseAdapter: (response) => ({
4283
+ accessToken: response.access_token,
4284
+ expiresIn: response.expires_in
4285
+ }),
4286
+ expiryBuffer: 5 * 60,
4287
+ // 5 minutes
4288
+ requestBody: "grant_type=client_credentials&scope=payment-all",
4289
+ requestHeaders: {
4290
+ "Content-Type": "application/x-www-form-urlencoded",
4291
+ Accept: "application/json"
4292
+ },
4293
+ authHeaders: {
4294
+ "Content-Type": "application/json",
4295
+ Accept: "application/json"
4296
+ }
4297
+ });
4332
4298
  }
4333
4299
  providerName = providerName;
4334
4300
  _client;
4335
4301
  baseUrl;
4336
- authController;
4302
+ tokenManager;
4337
4303
  createCheckout = async (params) => {
4338
4304
  const { error, data } = core.createCheckoutSchema.safeParse(params);
4339
4305
  if (error) throw core.ValidationError.fromZodError(error, "gopay", "createCheckout");
4340
- if (typeof data.customer == "string" || typeof data.customer === "object" && !data.customer.email) {
4306
+ if (!core.isEmailCustomer(data.customer)) {
4341
4307
  throw new core.InvalidTypeError("customer", "object (customer) with email", "string", {
4342
4308
  provider: this.providerName,
4343
4309
  method: "createCheckout"
@@ -4397,7 +4363,7 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4397
4363
  "/payments/payment",
4398
4364
  {
4399
4365
  body: JSON.stringify(goPayRequest),
4400
- headers: await this.authController.getAuthHeaders()
4366
+ headers: await this.tokenManager.getAuthHeaders()
4401
4367
  }
4402
4368
  );
4403
4369
  if (!response.ok) {
@@ -4412,7 +4378,7 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4412
4378
  `/payments/payment/${id}`,
4413
4379
  {
4414
4380
  headers: {
4415
- ...await this.authController.getAuthHeaders(),
4381
+ ...await this.tokenManager.getAuthHeaders(),
4416
4382
  "Content-Type": "application/x-www-form-urlencoded"
4417
4383
  }
4418
4384
  }
@@ -4474,9 +4440,9 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4474
4440
  "The following fields must be present in the provider_metadata of createCheckout: {keys}"
4475
4441
  );
4476
4442
  if (this.opts.debug) {
4477
- if (data.billing_interval == "year") {
4443
+ if (data.billing_interval === "year") {
4478
4444
  console.info(
4479
- "GoPay does not support yearly subscriptions, using monthly instead"
4445
+ "GoPay does not support yearly subscriptions, the available options are `day`, `week`, `month` and `ON_DEMAND` \n raise an issue at https://github.com/usepaykit/paykit-sdk/issues if you need this feature"
4480
4446
  );
4481
4447
  }
4482
4448
  if (!data.provider_metadata?.description) {
@@ -4489,21 +4455,29 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4489
4455
  day: "DAY",
4490
4456
  week: "WEEK",
4491
4457
  month: "MONTH",
4492
- year: "MONTH"
4458
+ year: "ON_DEMAND"
4493
4459
  };
4460
+ const recurrenceCycle = intervalMap?.[data.billing_interval] ?? "ON_DEMAND";
4494
4461
  const currentPeriodEnd = (() => {
4495
- if (data.billing_interval === "day") {
4462
+ if (recurrenceCycle === "DAY") {
4496
4463
  return new Date(Date.now() + 1 * 24 * 60 * 60 * 1e3).toISOString();
4497
4464
  }
4498
- if (data.billing_interval === "week") {
4465
+ if (recurrenceCycle === "WEEK") {
4499
4466
  return new Date(Date.now() + 7 * 24 * 60 * 60 * 1e3).toISOString();
4500
4467
  }
4501
- if (data.billing_interval === "month") {
4468
+ if (recurrenceCycle === "MONTH") {
4502
4469
  return new Date(Date.now() + 30 * 24 * 60 * 60 * 1e3).toISOString();
4503
4470
  }
4504
- return new Date(Date.now() + 365 * 24 * 60 * 60 * 1e3).toISOString();
4471
+ if (recurrenceCycle === "ON_DEMAND") {
4472
+ throw new core.ConfigurationError(
4473
+ "ON_DEMAND subscriptions is not yet implemented by PayKit, please open an issue at https://github.com/usepaykit/paykit-sdk/issues",
4474
+ {
4475
+ provider: this.providerName
4476
+ }
4477
+ );
4478
+ }
4479
+ throw new Error("Invalid billing interval: " + data.billing_interval);
4505
4480
  })();
4506
- const recurrenceCycle = intervalMap[data.billing_interval] ?? "ON_DEMAND";
4507
4481
  const goPaySubscriptionOptions = {
4508
4482
  payer: {
4509
4483
  allowed_payment_instruments: ["PAYMENT_CARD"],
@@ -4537,7 +4511,7 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4537
4511
  "/payments/payment",
4538
4512
  {
4539
4513
  body: JSON.stringify(goPaySubscriptionOptions),
4540
- headers: await this.authController.getAuthHeaders()
4514
+ headers: await this.tokenManager.getAuthHeaders()
4541
4515
  }
4542
4516
  );
4543
4517
  if (!response.ok) {
@@ -4566,7 +4540,7 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4566
4540
  }
4567
4541
  const response = await this._client.post(`/payments/payment/${id}/void-recurrence`, {
4568
4542
  headers: {
4569
- ...await this.authController.getAuthHeaders(),
4543
+ ...await this.tokenManager.getAuthHeaders(),
4570
4544
  "Content-Type": "application/x-www-form-urlencoded"
4571
4545
  }
4572
4546
  });
@@ -4583,7 +4557,7 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4583
4557
  const response = await this._client.get(
4584
4558
  `/payments/payment/${id}`,
4585
4559
  {
4586
- headers: await this.authController.getAuthHeaders()
4560
+ headers: await this.tokenManager.getAuthHeaders()
4587
4561
  }
4588
4562
  );
4589
4563
  if (!response.ok) {
@@ -4612,12 +4586,23 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4612
4586
  }
4613
4587
  );
4614
4588
  }
4589
+ const successUrl = data.provider_metadata?.success_url;
4590
+ if (!successUrl) {
4591
+ throw new core.ConfigurationError(
4592
+ "success_url is required, this is the URL to redirect the user to the success page after the payment is successful",
4593
+ {
4594
+ provider: this.providerName,
4595
+ missingKeys: ["success_url"]
4596
+ }
4597
+ );
4598
+ }
4615
4599
  const goPayRequest = {
4616
4600
  payer: {
4617
4601
  allowed_payment_instruments: ["PAYMENT_CARD", "BANK_ACCOUNT"],
4618
4602
  default_payment_instrument: "PAYMENT_CARD",
4619
4603
  contact: { email: data.customer.email }
4620
4604
  },
4605
+ callback: { return_url: successUrl, notification_url: this.opts.webhookUrl },
4621
4606
  target: { type: "ACCOUNT", goid: parseInt(this.opts.goId) },
4622
4607
  amount: data.amount,
4623
4608
  currency: data.currency ?? "CZK",
@@ -4638,7 +4623,7 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4638
4623
  "/payments/payment",
4639
4624
  {
4640
4625
  body: JSON.stringify(goPayRequest),
4641
- headers: await this.authController.getAuthHeaders()
4626
+ headers: await this.tokenManager.getAuthHeaders()
4642
4627
  }
4643
4628
  );
4644
4629
  if (!response.ok) {
@@ -4653,7 +4638,7 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4653
4638
  `/payments/payment/${id}`,
4654
4639
  {
4655
4640
  headers: {
4656
- ...await this.authController.getAuthHeaders(),
4641
+ ...await this.tokenManager.getAuthHeaders(),
4657
4642
  "Content-Type": "application/x-www-form-urlencoded"
4658
4643
  }
4659
4644
  }
@@ -4674,9 +4659,7 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4674
4659
  capturePayment = async (id, params) => {
4675
4660
  const payment = await this._client.get(
4676
4661
  `/payments/payment/${id}/capture`,
4677
- {
4678
- headers: await this.authController.getAuthHeaders()
4679
- }
4662
+ { headers: await this.tokenManager.getAuthHeaders() }
4680
4663
  );
4681
4664
  if (!payment.ok) {
4682
4665
  throw new core.OperationFailedError("capturePayment", this.providerName, {
@@ -4701,19 +4684,16 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4701
4684
  `/payments/payment/${id}/capture`,
4702
4685
  {
4703
4686
  body: JSON.stringify(captureBody),
4704
- headers: await this.authController.getAuthHeaders()
4687
+ headers: await this.tokenManager.getAuthHeaders()
4705
4688
  }
4706
4689
  );
4707
4690
  return paykitPayment$InboundSchema(payment.value);
4708
4691
  };
4709
4692
  cancelPayment = async (id) => {
4710
- const response = await this._client.post(
4693
+ await this._client.post(
4711
4694
  `/payments/payment/${id}/void-authorization`,
4712
- {
4713
- headers: await this.authController.getAuthHeaders()
4714
- }
4695
+ { headers: await this.tokenManager.getAuthHeaders() }
4715
4696
  );
4716
- console.dir({ response }, { depth: 100 });
4717
4697
  const payment = await this.retrievePayment(id);
4718
4698
  if (!payment) {
4719
4699
  throw new core.OperationFailedError("cancelPayment", this.providerName, {
@@ -4749,7 +4729,7 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4749
4729
  const response = await this._client.post(`/payments/payment/${data.payment_id}/refund`, {
4750
4730
  body: new URLSearchParams({ amount: String(data.amount) }).toString(),
4751
4731
  headers: {
4752
- ...await this.authController.getAuthHeaders(),
4732
+ ...await this.tokenManager.getAuthHeaders(),
4753
4733
  "Content-Type": "application/x-www-form-urlencoded"
4754
4734
  }
4755
4735
  });
@@ -4770,7 +4750,6 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4770
4750
  const { fullUrl } = payload;
4771
4751
  const paymentId = new URL(fullUrl).searchParams.get("id");
4772
4752
  const parentId = new URL(fullUrl).searchParams.get("parent_id");
4773
- console.log({ paymentId, parentId });
4774
4753
  if (!paymentId) {
4775
4754
  throw new core.WebhookError("Payment ID is required", { provider: this.providerName });
4776
4755
  }
@@ -4780,12 +4759,11 @@ var GoPayProvider = class extends core.AbstractPayKitProvider {
4780
4759
  const [payment, error] = await core.tryCatchAsync(
4781
4760
  this._client.get(`/payments/payment/${paymentId}`, {
4782
4761
  headers: {
4783
- ...await this.authController.getAuthHeaders(),
4762
+ ...await this.tokenManager.getAuthHeaders(),
4784
4763
  "Content-Type": "application/x-www-form-urlencoded"
4785
4764
  }
4786
4765
  })
4787
4766
  );
4788
- console.log({ payment });
4789
4767
  if (error) {
4790
4768
  throw new core.WebhookError("Failed to retrieve payment", {
4791
4769
  provider: this.providerName
@@ -1,4 +1,4 @@
1
- import { schema, AbstractPayKitProvider, HTTPClient, createCheckoutSchema, ValidationError, InvalidTypeError, validateRequiredKeys, PAYKIT_METADATA_KEY, OperationFailedError, ProviderNotSupportedError, createSubscriptionSchema, createPaymentSchema, ConfigurationError, createRefundSchema, WebhookError, tryCatchAsync, paykitEvent$InboundSchema, omitInternalMetadata } from '@paykit-sdk/core';
1
+ import { schema, AbstractPayKitProvider, HTTPClient, OAuth2TokenManager, createCheckoutSchema, ValidationError, isEmailCustomer, InvalidTypeError, validateRequiredKeys, PAYKIT_METADATA_KEY, OperationFailedError, ProviderNotSupportedError, createSubscriptionSchema, ConfigurationError, createPaymentSchema, createRefundSchema, WebhookError, tryCatchAsync, paykitEvent$InboundSchema, omitInternalMetadata } from '@paykit-sdk/core';
2
2
  import * as crypto from 'crypto';
3
3
 
4
4
  var __defProp = Object.defineProperty;
@@ -4046,60 +4046,6 @@ var coerce = {
4046
4046
  date: ((arg) => ZodDate.create({ ...arg, coerce: true }))
4047
4047
  };
4048
4048
  var NEVER = INVALID;
4049
- var AuthController = class {
4050
- constructor(opts) {
4051
- this.opts = opts;
4052
- const debug = opts.debug ?? true;
4053
- this._client = new HTTPClient({
4054
- baseUrl: this.opts.baseUrl,
4055
- headers: {},
4056
- retryOptions: { max: 3, baseDelay: 1e3, debug }
4057
- });
4058
- }
4059
- _client;
4060
- _accessToken = null;
4061
- getAccessToken = async () => {
4062
- if (this._accessToken) {
4063
- const [token, , expiryStr] = this._accessToken.split("::paykit::");
4064
- const expiry = parseInt(expiryStr || "0", 10);
4065
- if (expiry > Date.now()) return token;
4066
- }
4067
- const credentials = Buffer.from(
4068
- `${this.opts.clientId}:${this.opts.clientSecret}`
4069
- ).toString("base64");
4070
- const body = new URLSearchParams({
4071
- grant_type: "client_credentials",
4072
- scope: "payment-all"
4073
- }).toString();
4074
- const response = await this._client.post("/oauth2/token", {
4075
- headers: {
4076
- Authorization: `Basic ${credentials}`,
4077
- "Content-Type": "application/x-www-form-urlencoded",
4078
- Accept: "application/json"
4079
- },
4080
- body
4081
- });
4082
- if (!response.ok || !response.value?.access_token) {
4083
- throw new OperationFailedError("getAccessToken", "gopay", {
4084
- cause: new Error(
4085
- `Failed to obtain GoPay access token: ${JSON.stringify(response.value || response.error)}`
4086
- )
4087
- });
4088
- }
4089
- const expiryTime = Date.now() + (response.value.expires_in - 300) * 1e3;
4090
- const accessToken = `${response.value.access_token}::paykit::${expiryTime}`;
4091
- this._accessToken = accessToken;
4092
- return response.value.access_token;
4093
- };
4094
- getAuthHeaders = async () => {
4095
- const token = await this.getAccessToken();
4096
- return {
4097
- Authorization: `Bearer ${token}`,
4098
- "Content-Type": "application/json",
4099
- Accept: "application/json"
4100
- };
4101
- };
4102
- };
4103
4049
  var decodeHtmlEntities = (str) => {
4104
4050
  return str.replace(/&#34;/g, '"').replace(/&#39;/g, "'").replace(/&quot;/g, '"').replace(/&apos;/g, "'");
4105
4051
  };
@@ -4306,16 +4252,36 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4306
4252
  headers: {},
4307
4253
  retryOptions: { max: 3, baseDelay: 1e3, debug }
4308
4254
  });
4309
- this.authController = new AuthController({ ...opts, baseUrl: this.baseUrl });
4255
+ this.tokenManager = new OAuth2TokenManager({
4256
+ client: this._client,
4257
+ provider: this.providerName,
4258
+ tokenEndpoint: "/oauth2/token",
4259
+ credentials: { username: opts.clientId, password: opts.clientSecret },
4260
+ responseAdapter: (response) => ({
4261
+ accessToken: response.access_token,
4262
+ expiresIn: response.expires_in
4263
+ }),
4264
+ expiryBuffer: 5 * 60,
4265
+ // 5 minutes
4266
+ requestBody: "grant_type=client_credentials&scope=payment-all",
4267
+ requestHeaders: {
4268
+ "Content-Type": "application/x-www-form-urlencoded",
4269
+ Accept: "application/json"
4270
+ },
4271
+ authHeaders: {
4272
+ "Content-Type": "application/json",
4273
+ Accept: "application/json"
4274
+ }
4275
+ });
4310
4276
  }
4311
4277
  providerName = providerName;
4312
4278
  _client;
4313
4279
  baseUrl;
4314
- authController;
4280
+ tokenManager;
4315
4281
  createCheckout = async (params) => {
4316
4282
  const { error, data } = createCheckoutSchema.safeParse(params);
4317
4283
  if (error) throw ValidationError.fromZodError(error, "gopay", "createCheckout");
4318
- if (typeof data.customer == "string" || typeof data.customer === "object" && !data.customer.email) {
4284
+ if (!isEmailCustomer(data.customer)) {
4319
4285
  throw new InvalidTypeError("customer", "object (customer) with email", "string", {
4320
4286
  provider: this.providerName,
4321
4287
  method: "createCheckout"
@@ -4375,7 +4341,7 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4375
4341
  "/payments/payment",
4376
4342
  {
4377
4343
  body: JSON.stringify(goPayRequest),
4378
- headers: await this.authController.getAuthHeaders()
4344
+ headers: await this.tokenManager.getAuthHeaders()
4379
4345
  }
4380
4346
  );
4381
4347
  if (!response.ok) {
@@ -4390,7 +4356,7 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4390
4356
  `/payments/payment/${id}`,
4391
4357
  {
4392
4358
  headers: {
4393
- ...await this.authController.getAuthHeaders(),
4359
+ ...await this.tokenManager.getAuthHeaders(),
4394
4360
  "Content-Type": "application/x-www-form-urlencoded"
4395
4361
  }
4396
4362
  }
@@ -4452,9 +4418,9 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4452
4418
  "The following fields must be present in the provider_metadata of createCheckout: {keys}"
4453
4419
  );
4454
4420
  if (this.opts.debug) {
4455
- if (data.billing_interval == "year") {
4421
+ if (data.billing_interval === "year") {
4456
4422
  console.info(
4457
- "GoPay does not support yearly subscriptions, using monthly instead"
4423
+ "GoPay does not support yearly subscriptions, the available options are `day`, `week`, `month` and `ON_DEMAND` \n raise an issue at https://github.com/usepaykit/paykit-sdk/issues if you need this feature"
4458
4424
  );
4459
4425
  }
4460
4426
  if (!data.provider_metadata?.description) {
@@ -4467,21 +4433,29 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4467
4433
  day: "DAY",
4468
4434
  week: "WEEK",
4469
4435
  month: "MONTH",
4470
- year: "MONTH"
4436
+ year: "ON_DEMAND"
4471
4437
  };
4438
+ const recurrenceCycle = intervalMap?.[data.billing_interval] ?? "ON_DEMAND";
4472
4439
  const currentPeriodEnd = (() => {
4473
- if (data.billing_interval === "day") {
4440
+ if (recurrenceCycle === "DAY") {
4474
4441
  return new Date(Date.now() + 1 * 24 * 60 * 60 * 1e3).toISOString();
4475
4442
  }
4476
- if (data.billing_interval === "week") {
4443
+ if (recurrenceCycle === "WEEK") {
4477
4444
  return new Date(Date.now() + 7 * 24 * 60 * 60 * 1e3).toISOString();
4478
4445
  }
4479
- if (data.billing_interval === "month") {
4446
+ if (recurrenceCycle === "MONTH") {
4480
4447
  return new Date(Date.now() + 30 * 24 * 60 * 60 * 1e3).toISOString();
4481
4448
  }
4482
- return new Date(Date.now() + 365 * 24 * 60 * 60 * 1e3).toISOString();
4449
+ if (recurrenceCycle === "ON_DEMAND") {
4450
+ throw new ConfigurationError(
4451
+ "ON_DEMAND subscriptions is not yet implemented by PayKit, please open an issue at https://github.com/usepaykit/paykit-sdk/issues",
4452
+ {
4453
+ provider: this.providerName
4454
+ }
4455
+ );
4456
+ }
4457
+ throw new Error("Invalid billing interval: " + data.billing_interval);
4483
4458
  })();
4484
- const recurrenceCycle = intervalMap[data.billing_interval] ?? "ON_DEMAND";
4485
4459
  const goPaySubscriptionOptions = {
4486
4460
  payer: {
4487
4461
  allowed_payment_instruments: ["PAYMENT_CARD"],
@@ -4515,7 +4489,7 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4515
4489
  "/payments/payment",
4516
4490
  {
4517
4491
  body: JSON.stringify(goPaySubscriptionOptions),
4518
- headers: await this.authController.getAuthHeaders()
4492
+ headers: await this.tokenManager.getAuthHeaders()
4519
4493
  }
4520
4494
  );
4521
4495
  if (!response.ok) {
@@ -4544,7 +4518,7 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4544
4518
  }
4545
4519
  const response = await this._client.post(`/payments/payment/${id}/void-recurrence`, {
4546
4520
  headers: {
4547
- ...await this.authController.getAuthHeaders(),
4521
+ ...await this.tokenManager.getAuthHeaders(),
4548
4522
  "Content-Type": "application/x-www-form-urlencoded"
4549
4523
  }
4550
4524
  });
@@ -4561,7 +4535,7 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4561
4535
  const response = await this._client.get(
4562
4536
  `/payments/payment/${id}`,
4563
4537
  {
4564
- headers: await this.authController.getAuthHeaders()
4538
+ headers: await this.tokenManager.getAuthHeaders()
4565
4539
  }
4566
4540
  );
4567
4541
  if (!response.ok) {
@@ -4590,12 +4564,23 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4590
4564
  }
4591
4565
  );
4592
4566
  }
4567
+ const successUrl = data.provider_metadata?.success_url;
4568
+ if (!successUrl) {
4569
+ throw new ConfigurationError(
4570
+ "success_url is required, this is the URL to redirect the user to the success page after the payment is successful",
4571
+ {
4572
+ provider: this.providerName,
4573
+ missingKeys: ["success_url"]
4574
+ }
4575
+ );
4576
+ }
4593
4577
  const goPayRequest = {
4594
4578
  payer: {
4595
4579
  allowed_payment_instruments: ["PAYMENT_CARD", "BANK_ACCOUNT"],
4596
4580
  default_payment_instrument: "PAYMENT_CARD",
4597
4581
  contact: { email: data.customer.email }
4598
4582
  },
4583
+ callback: { return_url: successUrl, notification_url: this.opts.webhookUrl },
4599
4584
  target: { type: "ACCOUNT", goid: parseInt(this.opts.goId) },
4600
4585
  amount: data.amount,
4601
4586
  currency: data.currency ?? "CZK",
@@ -4616,7 +4601,7 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4616
4601
  "/payments/payment",
4617
4602
  {
4618
4603
  body: JSON.stringify(goPayRequest),
4619
- headers: await this.authController.getAuthHeaders()
4604
+ headers: await this.tokenManager.getAuthHeaders()
4620
4605
  }
4621
4606
  );
4622
4607
  if (!response.ok) {
@@ -4631,7 +4616,7 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4631
4616
  `/payments/payment/${id}`,
4632
4617
  {
4633
4618
  headers: {
4634
- ...await this.authController.getAuthHeaders(),
4619
+ ...await this.tokenManager.getAuthHeaders(),
4635
4620
  "Content-Type": "application/x-www-form-urlencoded"
4636
4621
  }
4637
4622
  }
@@ -4652,9 +4637,7 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4652
4637
  capturePayment = async (id, params) => {
4653
4638
  const payment = await this._client.get(
4654
4639
  `/payments/payment/${id}/capture`,
4655
- {
4656
- headers: await this.authController.getAuthHeaders()
4657
- }
4640
+ { headers: await this.tokenManager.getAuthHeaders() }
4658
4641
  );
4659
4642
  if (!payment.ok) {
4660
4643
  throw new OperationFailedError("capturePayment", this.providerName, {
@@ -4679,19 +4662,16 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4679
4662
  `/payments/payment/${id}/capture`,
4680
4663
  {
4681
4664
  body: JSON.stringify(captureBody),
4682
- headers: await this.authController.getAuthHeaders()
4665
+ headers: await this.tokenManager.getAuthHeaders()
4683
4666
  }
4684
4667
  );
4685
4668
  return paykitPayment$InboundSchema(payment.value);
4686
4669
  };
4687
4670
  cancelPayment = async (id) => {
4688
- const response = await this._client.post(
4671
+ await this._client.post(
4689
4672
  `/payments/payment/${id}/void-authorization`,
4690
- {
4691
- headers: await this.authController.getAuthHeaders()
4692
- }
4673
+ { headers: await this.tokenManager.getAuthHeaders() }
4693
4674
  );
4694
- console.dir({ response }, { depth: 100 });
4695
4675
  const payment = await this.retrievePayment(id);
4696
4676
  if (!payment) {
4697
4677
  throw new OperationFailedError("cancelPayment", this.providerName, {
@@ -4727,7 +4707,7 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4727
4707
  const response = await this._client.post(`/payments/payment/${data.payment_id}/refund`, {
4728
4708
  body: new URLSearchParams({ amount: String(data.amount) }).toString(),
4729
4709
  headers: {
4730
- ...await this.authController.getAuthHeaders(),
4710
+ ...await this.tokenManager.getAuthHeaders(),
4731
4711
  "Content-Type": "application/x-www-form-urlencoded"
4732
4712
  }
4733
4713
  });
@@ -4748,7 +4728,6 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4748
4728
  const { fullUrl } = payload;
4749
4729
  const paymentId = new URL(fullUrl).searchParams.get("id");
4750
4730
  const parentId = new URL(fullUrl).searchParams.get("parent_id");
4751
- console.log({ paymentId, parentId });
4752
4731
  if (!paymentId) {
4753
4732
  throw new WebhookError("Payment ID is required", { provider: this.providerName });
4754
4733
  }
@@ -4758,12 +4737,11 @@ var GoPayProvider = class extends AbstractPayKitProvider {
4758
4737
  const [payment, error] = await tryCatchAsync(
4759
4738
  this._client.get(`/payments/payment/${paymentId}`, {
4760
4739
  headers: {
4761
- ...await this.authController.getAuthHeaders(),
4740
+ ...await this.tokenManager.getAuthHeaders(),
4762
4741
  "Content-Type": "application/x-www-form-urlencoded"
4763
4742
  }
4764
4743
  })
4765
4744
  );
4766
- console.log({ payment });
4767
4745
  if (error) {
4768
4746
  throw new WebhookError("Failed to retrieve payment", {
4769
4747
  provider: this.providerName