@doswiftly/storefront-operations 11.0.0 → 11.2.0

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/AGENTS.md CHANGED
@@ -27,10 +27,10 @@ consumer's `codegen.ts` references this package's `.graphql` files as
27
27
  live in the consumer's repo.
28
28
 
29
29
  <!-- AUTOGEN:STATS:BEGIN — auto-regenerated, do not edit by hand -->
30
- - **Schema version**: 11.0.0
30
+ - **Schema version**: 11.2.0
31
31
  - **Queries**: 48
32
- - **Mutations**: 39
33
- - **Fragments**: 99
32
+ - **Mutations**: 40
33
+ - **Fragments**: 100
34
34
  <!-- AUTOGEN:STATS:END -->
35
35
 
36
36
  ## Loading order
package/CHANGELOG.md CHANGED
@@ -1,5 +1,68 @@
1
1
  # Changelog
2
2
 
3
+ ## 11.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 760f965: Added automatic stale-cart recovery to the core SDK so every consumer (React, Vue, mobile, CLI, SSR) gets the same protection against `CART_NOT_FOUND` / `ALREADY_COMPLETED` errors without re-implementing detection, cookie cleanup, and retry orchestration.
8
+
9
+ **What's new** (importable from `@doswiftly/storefront-sdk`):
10
+ - `isCartRecoverableError(err)` — type-safe predicate that inspects `err.userErrors[].code` (works across PL/EN/any backend locale, unlike message string matching).
11
+ - `CART_RECOVERABLE_ERROR_CODES` — readonly tuple of codes that warrant cart recreation; mirrored against the backend `CartErrorCode` enum by a drift test.
12
+ - `executeWithCartRecovery(opts)` — pure async orchestrator for any consumer.
13
+ - `createCartRecoveryRunner({ cartClient, cookieStore })` — DX-friendly factory that curries the dependencies, shares a Phase-0 concurrency mutex across operations, and exposes an `onExpired(listener)` subscription for global UI feedback.
14
+ - `CartCookieStore` — port interface (`get` / `set` / `clear`) the caller implements once per runtime. From `@doswiftly/storefront-sdk/react` we now also export `createBrowserCartCookieStore()` (SSR-safe).
15
+ - `CartRecoveryNotPossibleError` — thrown when an operation cannot be safely replayed (line-id / shipping-method references the dead cart). Carries `reason: 'state-dependent' | 'recreate-failed' | 'retry-also-failed'` for diagnostic UX.
16
+ - `recreateWithInput(input)` / `recreateWithLines(lines)` — sugar helpers for the most common atomic `cartCreate(payload)` recovery strategies.
17
+
18
+ **Per-operation taxonomy (decision is in the SDK, not in caller code):**
19
+
20
+ | Operation | Strategy |
21
+ | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
22
+ | `addItems`, `updateBuyerIdentity`, `setShippingAddress`, `updateDiscountCodes`, `updateNote` | Auto-replay via a single atomic `cartCreate(input)` — recovery is invisible to the caller |
23
+ | `updateItems`, `removeItems` | Bail with `CartRecoveryNotPossibleError` and emit a `cart-expired` event — replaying on a fresh empty cart would silently lose the user's intent |
24
+
25
+ **React updates:**
26
+ - `useCartManager` now uses the recovery runner internally. Detection is code-based (no more PL/EN regression — previous implementation matched `'cart not found'` in the error message, which never matched a Polish backend response). Recovery now covers all mutations exposed by the hook, not just `addItem`. New methods: `updateBuyerIdentity`, `setShippingAddress`. New API: `onExpired(listener)` returning an unsubscribe function.
27
+ - `createCartStore` now recovers `addToCart` automatically. New optional `CartActions.createCartWithLines(lines)` lets templates wire the atomic single-round-trip path; without it the store falls back to `createCart()` + `addLines()`. `updateQuantity` and `removeFromCart` bail with the `cart-expired` event when the cart is gone (previously the store kept its local id pointing at a dead cart). `CartStoreConfig.onExpired?(event)` lets the consumer subscribe.
28
+
29
+ **Migration:**
30
+ - No required code changes for existing React consumers — `useCartManager` and `createCartStore` keep their public surface.
31
+ - If you previously caught `StorefrontError` to detect stale carts via message string matching, switch to `isCartRecoverableError(err)` (code-based, locale-proof) or — preferably — subscribe to `runner.onExpired(...)` / `useCartManager().onExpired(...)` / `createCartStore({ onExpired })`.
32
+ - Non-React consumers should wrap their cart mutations in `createCartRecoveryRunner` and implement a `CartCookieStore` adapter for their environment (browser via `createBrowserCartCookieStore()`, server-side via `next/headers`, CLI via in-memory `Map`, mobile via AsyncStorage).
33
+
34
+ `@doswiftly/storefront-operations` is bumped in lockstep (no code change — required because the packages are linked and ship together).
35
+
36
+ ## 11.1.0
37
+
38
+ ### Minor Changes
39
+
40
+ - c2e80b2: Add `paymentCreate` — initiate a payment session for a completed order.
41
+
42
+ After `cartComplete` returns an order, call `paymentCreate` (when `order.canCreatePayment` is `true`) to start the payment. Orders with an offline payment method (cash on delivery, manual bank transfer) skip this step. The returned `PaymentSession` is flow-aware — branch on `session.flow`:
43
+ - `ONLINE_REDIRECT` → redirect the browser to `session.redirectUrl`
44
+ - `ONLINE_EMBEDDED` → render an in-page widget with `session.clientSecret`
45
+ - `INSTANT_DIRECT` → already settled, read `session.status`
46
+
47
+ **`@doswiftly/storefront-operations`** — new `PaymentCreate` mutation and `PaymentSession` fragment.
48
+
49
+ **`@doswiftly/storefront-sdk`** — new `CartClient.createPayment(input)` method, plus the `PaymentSession`, `PaymentCreateInput`, `PaymentInitiationFlow` and `PaymentErrorCode` types.
50
+
51
+ ```ts
52
+ const { order } = await cartClient.complete({ cartId });
53
+ if (order.canCreatePayment) {
54
+ const session = await cartClient.createPayment({
55
+ orderId: order.id,
56
+ returnUrl: "https://my-shop.example/checkout/complete",
57
+ });
58
+ if (session.flow === "ONLINE_REDIRECT") {
59
+ window.location.href = session.redirectUrl!;
60
+ }
61
+ }
62
+ ```
63
+
64
+ `paymentCreate` is idempotent on the order — re-calling returns the existing still-valid session instead of creating a duplicate, so it is safe to retry. `returnUrl` / `cancelUrl` are optional and, when supplied, must point to a verified domain of the shop. The call throws on validation/business errors — inspect `error.userErrors[0].code` (`PaymentErrorCode`): `ORDER_NOT_FOUND`, `ORDER_ALREADY_PAID`, `ORDER_NOT_PAYABLE`, `PAYMENT_PROVIDER_NOT_CONFIGURED`, `RETURN_URL_INVALID`, `INVALID_ID_FORMAT`, `PAYMENT_FAILED`.
65
+
3
66
  ## 11.0.0
4
67
 
5
68
  ### Major Changes
package/README.md CHANGED
@@ -381,6 +381,7 @@ full executable body of each operation.
381
381
  | `CartRemoveGiftCard` | Removes a gift card from the applied list and recalculates FIFO `appliedAmount` for the remaining cards. Since gift card balances are only debited at `cartComplete`, removing before completion has no effect on the underlying gift card balance. |
382
382
  | `CartUpdateGiftCardRecipient` | Sets per-line-item recipient details (name, email, message) for digital gift card products in the cart (line items where the variant represents a gift-card SKU). Required before `cartComplete` for any line item with a gift-card variant. Recipient details propagated to the resulting order. |
383
383
  | `CartComplete` | Finalizes the cart — creates the `Order`, deducts gift cards, sends order-created confirmation — all atomically. **Idempotent on `idempotencyKey`** (auto-generated from cartId + minute timestamp if caller omits it). Returns `order` field after completion. Note: `paymentUrl` is intentionally NOT in payload — for hosted gateways (online providers) the storefront calls a separate `paymentCreate` mutation after this returns (check `order.canCreatePayment` first). Errors: `EMAIL_REQUIRED`, `SHIPPING_ADDRESS_REQUIRED`, `SHIPPING_METHOD_REQUIRED`, `PAYMENT_METHOD_REQUIRED`, `INSUFFICIENT_STOCK`, `ALREADY_COMPLETED`. |
384
+ | `PaymentCreate` | Initiates a payment session for an order created by `cartComplete` — call this when `order.canCreatePayment` is `true` (orders with an offline payment method like cash-on-delivery skip this step). `orderId` is required; `returnUrl` / `cancelUrl` are optional and, when supplied, must point to a verified domain of the shop (open-redirect protected). Branch on the returned `payment.flow`: `ONLINE_REDIRECT` → redirect to `payment.redirectUrl`, `ONLINE_EMBEDDED` → render a widget with `payment.clientSecret`, `INSTANT_DIRECT` → already settled, read `payment.status`. Public, but ownership-checked — an authenticated customer cannot pay for another customer's order. **Idempotent** — calling it again for the same order returns the existing still-valid session instead of creating a duplicate (safe to retry). Rate limit: 5 requests/minute. `userErrors[].code`: `ORDER_NOT_FOUND`, `ORDER_ALREADY_PAID`, `ORDER_NOT_PAYABLE`, `PAYMENT_PROVIDER_NOT_CONFIGURED`, `RETURN_URL_INVALID`, `INVALID_ID_FORMAT`, `PAYMENT_FAILED`. |
384
385
 
385
386
  #### Return Mutations
386
387
 
@@ -503,6 +504,7 @@ full executable body of each operation.
503
504
  | --- | --- | --- |
504
505
  | `PaymentMethod` | `PaymentMethod` | Single payment method enabled for the shop — type (CARD / BANK_TRANSFER / BLIK / PAYPAL / APPLE_PAY / GOOGLE_PAY / CASH_ON_DELIVERY / OTHER), provider, icon, supported currencies, default flag, sort position. Spread on the checkout payment step. |
505
506
  | `AvailablePaymentMethods` | `AvailablePaymentMethods` | Active payment methods list with the merchant's `defaultMethod`. Returned by the `availablePaymentMethods` query. |
507
+ | `PaymentSession` | `PaymentSession` | Initiated payment session for an order — returned by the `paymentCreate` mutation. Branch on `flow`: `ONLINE_REDIRECT` (redirect the browser to `redirectUrl`), `ONLINE_EMBEDDED` (render an in-page widget with `clientSecret`), `INSTANT_DIRECT` (settled with no UI — read `status`). `expiresAt` is ISO 8601, present when the gateway session has a TTL. |
506
508
 
507
509
  #### Shipments / Tracking
508
510
 
package/fragments.graphql CHANGED
@@ -672,6 +672,18 @@ fragment AvailablePaymentMethods on AvailablePaymentMethods {
672
672
  }
673
673
  }
674
674
 
675
+ # Initiated payment session for an order — returned by the `paymentCreate` mutation. Branch on `flow`: `ONLINE_REDIRECT` (redirect the browser to `redirectUrl`), `ONLINE_EMBEDDED` (render an in-page widget with `clientSecret`), `INSTANT_DIRECT` (settled with no UI — read `status`). `expiresAt` is ISO 8601, present when the gateway session has a TTL.
676
+ fragment PaymentSession on PaymentSession {
677
+ id
678
+ orderId
679
+ flow
680
+ provider
681
+ redirectUrl
682
+ clientSecret
683
+ status
684
+ expiresAt
685
+ }
686
+
675
687
  # ============================================
676
688
  # Discount Code Validation
677
689
  # ============================================
package/llms-full.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  # DoSwiftly Storefront Operations — Full Reference
2
2
 
3
- > Schema version: **11.0.0**
4
- > 48 queries · 39 mutations · 99 fragments
3
+ > Schema version: **11.2.0**
4
+ > 48 queries · 40 mutations · 100 fragments
5
5
 
6
6
  Auto-generated from `.graphql` source files. Do not edit by hand — this file is
7
7
  regenerated on every release to match the published schema.
@@ -2011,6 +2011,31 @@ mutation CartComplete($input: CartCompleteInput!) {
2011
2011
  }
2012
2012
  ```
2013
2013
 
2014
+ ### Mutation: `PaymentCreate`
2015
+
2016
+ **Section**: Cart Completion Mutations
2017
+
2018
+ **Description**: Initiates a payment session for an order created by `cartComplete` — call this when `order.canCreatePayment` is `true` (orders with an offline payment method like cash-on-delivery skip this step). `orderId` is required; `returnUrl` / `cancelUrl` are optional and, when supplied, must point to a verified domain of the shop (open-redirect protected). Branch on the returned `payment.flow`: `ONLINE_REDIRECT` → redirect to `payment.redirectUrl`, `ONLINE_EMBEDDED` → render a widget with `payment.clientSecret`, `INSTANT_DIRECT` → already settled, read `payment.status`. Public, but ownership-checked — an authenticated customer cannot pay for another customer's order. **Idempotent** — calling it again for the same order returns the existing still-valid session instead of creating a duplicate (safe to retry). Rate limit: 5 requests/minute. `userErrors[].code`: `ORDER_NOT_FOUND`, `ORDER_ALREADY_PAID`, `ORDER_NOT_PAYABLE`, `PAYMENT_PROVIDER_NOT_CONFIGURED`, `RETURN_URL_INVALID`, `INVALID_ID_FORMAT`, `PAYMENT_FAILED`.
2019
+
2020
+ **Variables**:
2021
+ - `$input`: `PaymentCreateInput!`
2022
+
2023
+ **Fragments used**: `PaymentSession`, `UserError`
2024
+
2025
+ **GraphQL**:
2026
+ ```graphql
2027
+ mutation PaymentCreate($input: PaymentCreateInput!) {
2028
+ paymentCreate(input: $input) {
2029
+ payment {
2030
+ ...PaymentSession
2031
+ }
2032
+ userErrors {
2033
+ ...UserError
2034
+ }
2035
+ }
2036
+ }
2037
+ ```
2038
+
2014
2039
  ### Mutation: `ReturnCreate`
2015
2040
 
2016
2041
  **Section**: Return Mutations
@@ -3315,6 +3340,26 @@ fragment AvailablePaymentMethods on AvailablePaymentMethods {
3315
3340
  }
3316
3341
  ```
3317
3342
 
3343
+ ### Fragment: `PaymentSession` on `PaymentSession`
3344
+
3345
+ **Section**: Payment Methods
3346
+
3347
+ **Description**: Initiated payment session for an order — returned by the `paymentCreate` mutation. Branch on `flow`: `ONLINE_REDIRECT` (redirect the browser to `redirectUrl`), `ONLINE_EMBEDDED` (render an in-page widget with `clientSecret`), `INSTANT_DIRECT` (settled with no UI — read `status`). `expiresAt` is ISO 8601, present when the gateway session has a TTL.
3348
+
3349
+ **GraphQL**:
3350
+ ```graphql
3351
+ fragment PaymentSession on PaymentSession {
3352
+ id
3353
+ orderId
3354
+ flow
3355
+ provider
3356
+ redirectUrl
3357
+ clientSecret
3358
+ status
3359
+ expiresAt
3360
+ }
3361
+ ```
3362
+
3318
3363
  ### Fragment: `ShipmentEvent` on `ShipmentEvent`
3319
3364
 
3320
3365
  **Section**: Shipments / Tracking
package/mutations.graphql CHANGED
@@ -404,6 +404,18 @@ mutation CartComplete($input: CartCompleteInput!) {
404
404
  }
405
405
  }
406
406
 
407
+ # Initiates a payment session for an order created by `cartComplete` — call this when `order.canCreatePayment` is `true` (orders with an offline payment method like cash-on-delivery skip this step). `orderId` is required; `returnUrl` / `cancelUrl` are optional and, when supplied, must point to a verified domain of the shop (open-redirect protected). Branch on the returned `payment.flow`: `ONLINE_REDIRECT` → redirect to `payment.redirectUrl`, `ONLINE_EMBEDDED` → render a widget with `payment.clientSecret`, `INSTANT_DIRECT` → already settled, read `payment.status`. Public, but ownership-checked — an authenticated customer cannot pay for another customer's order. **Idempotent** — calling it again for the same order returns the existing still-valid session instead of creating a duplicate (safe to retry). Rate limit: 5 requests/minute. `userErrors[].code`: `ORDER_NOT_FOUND`, `ORDER_ALREADY_PAID`, `ORDER_NOT_PAYABLE`, `PAYMENT_PROVIDER_NOT_CONFIGURED`, `RETURN_URL_INVALID`, `INVALID_ID_FORMAT`, `PAYMENT_FAILED`.
408
+ mutation PaymentCreate($input: PaymentCreateInput!) {
409
+ paymentCreate(input: $input) {
410
+ payment {
411
+ ...PaymentSession
412
+ }
413
+ userErrors {
414
+ ...UserError
415
+ }
416
+ }
417
+ }
418
+
407
419
  # ============================================
408
420
  # Return Mutations
409
421
  # ============================================
package/operations.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "schemaVersion": "11.0.0",
2
+ "schemaVersion": "11.2.0",
3
3
  "queries": [
4
4
  {
5
5
  "name": "Shop",
@@ -1540,6 +1540,24 @@
1540
1540
  ],
1541
1541
  "body": "mutation CartComplete($input: CartCompleteInput!) {\n cartComplete(input: $input) {\n order {\n ...Order\n }\n userErrors {\n ...UserError\n }\n warnings {\n ...CartWarning\n }\n }\n}"
1542
1542
  },
1543
+ {
1544
+ "name": "PaymentCreate",
1545
+ "kind": "mutation",
1546
+ "section": "Cart Completion Mutations",
1547
+ "description": "Initiates a payment session for an order created by `cartComplete` — call this when `order.canCreatePayment` is `true` (orders with an offline payment method like cash-on-delivery skip this step). `orderId` is required; `returnUrl` / `cancelUrl` are optional and, when supplied, must point to a verified domain of the shop (open-redirect protected). Branch on the returned `payment.flow`: `ONLINE_REDIRECT` → redirect to `payment.redirectUrl`, `ONLINE_EMBEDDED` → render a widget with `payment.clientSecret`, `INSTANT_DIRECT` → already settled, read `payment.status`. Public, but ownership-checked — an authenticated customer cannot pay for another customer's order. **Idempotent** — calling it again for the same order returns the existing still-valid session instead of creating a duplicate (safe to retry). Rate limit: 5 requests/minute. `userErrors[].code`: `ORDER_NOT_FOUND`, `ORDER_ALREADY_PAID`, `ORDER_NOT_PAYABLE`, `PAYMENT_PROVIDER_NOT_CONFIGURED`, `RETURN_URL_INVALID`, `INVALID_ID_FORMAT`, `PAYMENT_FAILED`.",
1548
+ "variables": [
1549
+ {
1550
+ "name": "input",
1551
+ "type": "PaymentCreateInput!",
1552
+ "defaultValue": null
1553
+ }
1554
+ ],
1555
+ "fragmentRefs": [
1556
+ "PaymentSession",
1557
+ "UserError"
1558
+ ],
1559
+ "body": "mutation PaymentCreate($input: PaymentCreateInput!) {\n paymentCreate(input: $input) {\n payment {\n ...PaymentSession\n }\n userErrors {\n ...UserError\n }\n }\n}"
1560
+ },
1543
1561
  {
1544
1562
  "name": "ReturnCreate",
1545
1563
  "kind": "mutation",
@@ -2240,6 +2258,16 @@
2240
2258
  "body": "fragment AvailablePaymentMethods on AvailablePaymentMethods {\n methods {\n ...PaymentMethod\n }\n defaultMethod {\n ...PaymentMethod\n }\n}",
2241
2259
  "onType": "AvailablePaymentMethods"
2242
2260
  },
2261
+ {
2262
+ "name": "PaymentSession",
2263
+ "kind": "fragment",
2264
+ "section": "Payment Methods",
2265
+ "description": "Initiated payment session for an order — returned by the `paymentCreate` mutation. Branch on `flow`: `ONLINE_REDIRECT` (redirect the browser to `redirectUrl`), `ONLINE_EMBEDDED` (render an in-page widget with `clientSecret`), `INSTANT_DIRECT` (settled with no UI — read `status`). `expiresAt` is ISO 8601, present when the gateway session has a TTL.",
2266
+ "variables": [],
2267
+ "fragmentRefs": [],
2268
+ "body": "fragment PaymentSession on PaymentSession {\n id\n orderId\n flow\n provider\n redirectUrl\n clientSecret\n status\n expiresAt\n}",
2269
+ "onType": "PaymentSession"
2270
+ },
2243
2271
  {
2244
2272
  "name": "ShipmentEvent",
2245
2273
  "kind": "fragment",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doswiftly/storefront-operations",
3
- "version": "11.0.0",
3
+ "version": "11.2.0",
4
4
  "description": "GraphQL operations for DoSwiftly Storefront - SSOT from backend",
5
5
  "homepage": "https://doswiftly.pl",
6
6
  "publishConfig": {
package/schema.graphql CHANGED
@@ -2272,6 +2272,7 @@ enum DiscountApplicationType {
2272
2272
 
2273
2273
  """Error codes for discount validation"""
2274
2274
  enum DiscountErrorCode {
2275
+ CUSTOMER_GROUP_NOT_ELIGIBLE
2275
2276
  CUSTOMER_NOT_ELIGIBLE
2276
2277
  CUSTOMER_USAGE_LIMIT_REACHED
2277
2278
  DISCOUNT_COMBINATION_NOT_ALLOWED
@@ -3509,6 +3510,11 @@ type Mutation {
3509
3510
  """Redeem a loyalty reward"""
3510
3511
  loyaltyRedeemReward(input: RedeemRewardInput!): RedeemRewardPayload!
3511
3512
 
3513
+ """
3514
+ Initiate a payment session for an order — call after cartComplete when order.canCreatePayment is true
3515
+ """
3516
+ paymentCreate(input: PaymentCreateInput!): PaymentCreatePayload!
3517
+
3512
3518
  """Cancel a return request"""
3513
3519
  returnCancel(id: ID!): ReturnCancelPayload!
3514
3520
 
@@ -3717,6 +3723,41 @@ enum PageSortKeys {
3717
3723
  UPDATED_AT
3718
3724
  }
3719
3725
 
3726
+ """Input dla paymentCreate mutation"""
3727
+ input PaymentCreateInput {
3728
+ """
3729
+ URL powrotu klienta po anulowaniu płatności — musi być na zweryfikowanej domenie sklepu
3730
+ """
3731
+ cancelUrl: URL
3732
+
3733
+ """ID zamówienia (z cartComplete) do opłacenia"""
3734
+ orderId: ID!
3735
+
3736
+ """
3737
+ URL powrotu klienta po płatności — musi być na zweryfikowanej domenie sklepu
3738
+ """
3739
+ returnUrl: URL
3740
+ }
3741
+
3742
+ """Wynik paymentCreate mutation"""
3743
+ type PaymentCreatePayload {
3744
+ """Utworzona sesja płatności (null gdy userErrors)"""
3745
+ payment: PaymentSession
3746
+
3747
+ """Błędy walidacji / biznesowe"""
3748
+ userErrors: [UserError!]!
3749
+ }
3750
+
3751
+ """
3752
+ Sposób uruchomienia płatności po stronie klienta — storefront rozgałęzia krok po tej wartości
3753
+ """
3754
+ enum PaymentInitiationFlow {
3755
+ INSTANT_DIRECT
3756
+ OFFLINE_MANUAL
3757
+ ONLINE_EMBEDDED
3758
+ ONLINE_REDIRECT
3759
+ }
3760
+
3720
3761
  """Payment method available for checkout"""
3721
3762
  type PaymentMethod {
3722
3763
  """Description for customers"""
@@ -3756,6 +3797,33 @@ enum PaymentMethodType {
3756
3797
  OTHER
3757
3798
  }
3758
3799
 
3800
+ """Sesja płatności utworzona dla zamówienia"""
3801
+ type PaymentSession {
3802
+ """Token/secret do widgetu in-page — wypełniony dla flow ONLINE_EMBEDDED"""
3803
+ clientSecret: String
3804
+
3805
+ """Kiedy redirectUrl/clientSecret przestaje być ważny (ISO 8601)"""
3806
+ expiresAt: String
3807
+
3808
+ """Sposób uruchomienia — storefront robi switch(flow)"""
3809
+ flow: PaymentInitiationFlow!
3810
+
3811
+ """ID rekordu płatności"""
3812
+ id: ID!
3813
+
3814
+ """ID zamówienia"""
3815
+ orderId: ID!
3816
+
3817
+ """Kod providera płatności (np. PAYU)"""
3818
+ provider: String!
3819
+
3820
+ """URL hosted gateway — wypełniony dla flow ONLINE_REDIRECT"""
3821
+ redirectUrl: URL
3822
+
3823
+ """Status płatności zamówienia"""
3824
+ status: OrderPaymentStatus!
3825
+ }
3826
+
3759
3827
  """Shop payment configuration (currency, country, providers)"""
3760
3828
  type PaymentSettings {
3761
3829
  """Country code sklepu — driver dostępności metod płatności"""