@neosianexus/super-tebex 3.4.0 → 3.4.2

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/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm version](https://img.shields.io/npm/v/@neosianexus/super-tebex?color=blue)](https://www.npmjs.com/package/@neosianexus/super-tebex)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/@neosianexus/super-tebex)](https://www.npmjs.com/package/@neosianexus/super-tebex)
5
5
  [![Coverage](https://img.shields.io/badge/coverage-97%25-brightgreen)](https://github.com/NeosiaNexus/super-tebex)
6
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
6
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
8
 
9
9
  > Tebex Headless SDK optimized for Next.js App Router with TanStack Query and Zustand.
@@ -278,7 +278,7 @@ const {
278
278
  });
279
279
 
280
280
  // IMPORTANT: Requires Tebex.js script in your page
281
- // <script src="https://js.tebex.io/v/1.1.js" async />
281
+ // <script src="https://js.tebex.io/v/1.9.0.js" async />
282
282
  ```
283
283
 
284
284
  #### useUser
@@ -286,7 +286,7 @@ const {
286
286
  ```typescript
287
287
  const {
288
288
  username, // string | null
289
- setUsername, // (username: string) => void
289
+ setUsername, // (username: string) => boolean
290
290
  clearUsername, // () => void
291
291
  isAuthenticated, // boolean
292
292
  } = useUser();
@@ -405,6 +405,7 @@ if (errorCode) {
405
405
  | **Creator Code** | `CREATOR_CODE_INVALID` |
406
406
  | **Checkout** | `CHECKOUT_FAILED`, `CHECKOUT_CANCELLED`, `TEBEX_JS_NOT_LOADED` |
407
407
  | **Network** | `NETWORK_ERROR`, `TIMEOUT`, `RATE_LIMITED` |
408
+ | **HTTP** | `SERVER_ERROR`, `FORBIDDEN`, `VALIDATION_ERROR`, `NOT_FOUND`, `BASKET_LOCKED`, `PACKAGE_DISABLED` |
408
409
  | **Unknown** | `UNKNOWN` |
409
410
 
410
411
  ---
@@ -467,12 +468,19 @@ import { TebexError, TebexErrorCode } from '@neosianexus/super-tebex';
467
468
 
468
469
  // Type guards
469
470
  import {
470
- isTebexError, // (error: unknown) => error is TebexError
471
- isSuccess, // (result: Result<T,E>) => result is { ok: true, data: T }
472
- isError, // (result: Result<T,E>) => result is { ok: false, error: E }
473
- isDefined, // <T>(value: T | null | undefined) => value is T
471
+ isTebexError, // (error: unknown) => error is TebexError (duck-typing, cross-realm safe)
472
+ isSuccess, // (result: Result<T,E>) => result is { success: true, data: T }
473
+ isError, // (result: Result<T,E>) => result is { success: false, error: E }
474
+ isDefined, // <T>(value: T | null | undefined) => value is T
475
+ isNonEmptyString, // (value: unknown) => value is string
476
+ isPositiveInteger, // (value: unknown) => value is number
477
+ isPositiveNumber, // (value: unknown) => value is number
478
+ isValidMinecraftUsername, // (value: unknown) => value is string (3-16 chars, alphanumeric + underscore)
474
479
  } from '@neosianexus/super-tebex';
475
480
 
481
+ // Query key type
482
+ import type { TebexQueryKey } from '@neosianexus/super-tebex';
483
+
476
484
  // Result utilities
477
485
  import { ok, err } from '@neosianexus/super-tebex';
478
486
  ```
@@ -803,7 +811,7 @@ if (errorCode === TebexErrorCode.BASKET_NOT_FOUND) {
803
811
 
804
812
  ### Requirements
805
813
  - Must wrap app with `TebexProvider`
806
- - Checkout requires `<script src="https://js.tebex.io/v/1.1.js" async />`
814
+ - Checkout requires `<script src="https://js.tebex.io/v/1.9.0.js" async />`
807
815
  - Username required before adding to basket
808
816
 
809
817
  </details>
@@ -7,11 +7,19 @@ export declare class TebexError extends Error {
7
7
  readonly code: TebexErrorCode;
8
8
  readonly cause?: unknown;
9
9
  constructor(code: TebexErrorCode, message?: string, cause?: unknown);
10
+ private static extractStatusCode;
10
11
  /**
11
12
  * Converts an unknown error to a TebexError.
12
13
  * If the error is already a TebexError, it returns it as-is.
13
14
  */
14
15
  static fromUnknown(error: unknown): TebexError;
16
+ /**
17
+ * Creates a TebexError from a JSON representation.
18
+ */
19
+ static fromJSON(json: {
20
+ code: TebexErrorCode;
21
+ message?: string;
22
+ }): TebexError;
15
23
  /**
16
24
  * Returns a JSON representation of the error.
17
25
  */
@@ -19,6 +27,7 @@ export declare class TebexError extends Error {
19
27
  name: string;
20
28
  code: TebexErrorCode;
21
29
  message: string;
30
+ cause?: string;
22
31
  };
23
32
  }
24
33
  //# sourceMappingURL=TebexError.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TebexError.d.ts","sourceRoot":"","sources":["../../src/errors/TebexError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;;GAGG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,SAAgB,IAAI,EAAE,cAAc,CAAC;IACrC,SAAgB,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEpB,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;IAanE;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU;IA+C9C;;OAEG;IACH,MAAM,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAOlE"}
1
+ {"version":3,"file":"TebexError.d.ts","sourceRoot":"","sources":["../../src/errors/TebexError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;;GAGG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,SAAgB,IAAI,EAAE,cAAc,CAAC;IACrC,SAAgB,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEpB,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;IAYnE,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAahC;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU;IA6E9C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU;IAI7E;;OAEG;IACH,MAAM,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;CAQlF"}
@@ -28,6 +28,12 @@ export declare enum TebexErrorCode {
28
28
  NETWORK_ERROR = "NETWORK_ERROR",
29
29
  TIMEOUT = "TIMEOUT",
30
30
  RATE_LIMITED = "RATE_LIMITED",
31
+ SERVER_ERROR = "SERVER_ERROR",
32
+ FORBIDDEN = "FORBIDDEN",
33
+ VALIDATION_ERROR = "VALIDATION_ERROR",
34
+ NOT_FOUND = "NOT_FOUND",
35
+ BASKET_LOCKED = "BASKET_LOCKED",
36
+ PACKAGE_DISABLED = "PACKAGE_DISABLED",
31
37
  UNKNOWN = "UNKNOWN"
32
38
  }
33
39
  //# sourceMappingURL=codes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../src/errors/codes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,cAAc;IAExB,kBAAkB,uBAAuB;IACzC,cAAc,mBAAmB;IAGjC,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IAGrC,gBAAgB,qBAAqB;IACrC,sBAAsB,2BAA2B;IACjD,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAG7B,iBAAiB,sBAAsB;IACvC,oBAAoB,yBAAyB;IAC7C,qBAAqB,0BAA0B;IAC/C,gBAAgB,qBAAqB;IAGrC,kBAAkB,uBAAuB;IAGzC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,mBAAmB,wBAAwB;IAC3C,gBAAgB,qBAAqB;IACrC,6BAA6B,kCAAkC;IAC/D,oBAAoB,yBAAyB;IAG7C,eAAe,oBAAoB;IACnC,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAG3C,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,YAAY,iBAAiB;IAG7B,OAAO,YAAY;CACpB"}
1
+ {"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../src/errors/codes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,cAAc;IAExB,kBAAkB,uBAAuB;IACzC,cAAc,mBAAmB;IAGjC,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IAGrC,gBAAgB,qBAAqB;IACrC,sBAAsB,2BAA2B;IACjD,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAG7B,iBAAiB,sBAAsB;IACvC,oBAAoB,yBAAyB;IAC7C,qBAAqB,0BAA0B;IAC/C,gBAAgB,qBAAqB;IAGrC,kBAAkB,uBAAuB;IAGzC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,mBAAmB,wBAAwB;IAC3C,gBAAgB,qBAAqB;IACrC,6BAA6B,kCAAkC;IAC/D,oBAAoB,yBAAyB;IAG7C,eAAe,oBAAoB;IACnC,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAG3C,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,YAAY,iBAAiB;IAG7B,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,gBAAgB,qBAAqB;IACrC,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,gBAAgB,qBAAqB;IAGrC,OAAO,YAAY;CACpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBasket.d.ts","sourceRoot":"","sources":["../../src/hooks/useBasket.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAA0C,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE9F;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,IAAI,eAAe,CA4T3C"}
1
+ {"version":3,"file":"useBasket.d.ts","sourceRoot":"","sources":["../../src/hooks/useBasket.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAA0C,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAe9F;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,IAAI,eAAe,CA8U3C"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCategories.d.ts","sourceRoot":"","sources":["../../src/hooks/useCategories.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEhF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,CA6CrF"}
1
+ {"version":3,"file":"useCategories.d.ts","sourceRoot":"","sources":["../../src/hooks/useCategories.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEhF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,CAiDrF"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCategory.d.ts","sourceRoot":"","sources":["../../src/hooks/useCategory.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CA0B1E"}
1
+ {"version":3,"file":"useCategory.d.ts","sourceRoot":"","sources":["../../src/hooks/useCategory.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CA2B1E"}
@@ -9,7 +9,6 @@ interface TebexCheckout {
9
9
  }) => void;
10
10
  launch: () => void;
11
11
  on: (event: string, callback: (data?: unknown) => void) => void;
12
- off: (event: string, callback: (data?: unknown) => void) => void;
13
12
  close: () => void;
14
13
  }
15
14
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"useCheckout.d.ts","sourceRoot":"","sources":["../../src/hooks/useCheckout.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG5E;;;GAGG;AACH,UAAU,aAAa;IACrB,IAAI,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;IAChE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;IACjE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,KAAK,CAAC,EAAE;YACN,QAAQ,EAAE,aAAa,CAAC;SACzB,CAAC;KACH;CACF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CA8F/E"}
1
+ {"version":3,"file":"useCheckout.d.ts","sourceRoot":"","sources":["../../src/hooks/useCheckout.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG5E;;;GAGG;AACH,UAAU,aAAa;IACrB,IAAI,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;IAChE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,KAAK,CAAC,EAAE;YACN,QAAQ,EAAE,aAAa,CAAC;SACzB,CAAC;KACH;CACF;AAYD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CAuJ/E"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCoupons.d.ts","sourceRoot":"","sources":["../../src/hooks/useCoupons.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CA+G7C"}
1
+ {"version":3,"file":"useCoupons.d.ts","sourceRoot":"","sources":["../../src/hooks/useCoupons.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAmH7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCreatorCodes.d.ts","sourceRoot":"","sources":["../../src/hooks/useCreatorCodes.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAG5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,IAAI,qBAAqB,CAuGvD"}
1
+ {"version":3,"file":"useCreatorCodes.d.ts","sourceRoot":"","sources":["../../src/hooks/useCreatorCodes.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAG5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,IAAI,qBAAqB,CAkHvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGiftCards.d.ts","sourceRoot":"","sources":["../../src/hooks/useGiftCards.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,IAAI,kBAAkB,CAyGjD"}
1
+ {"version":3,"file":"useGiftCards.d.ts","sourceRoot":"","sources":["../../src/hooks/useGiftCards.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,IAAI,kBAAkB,CAqHjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGiftPackage.d.ts","sourceRoot":"","sources":["../../src/hooks/useGiftPackage.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,IAAI,oBAAoB,CAoHrD"}
1
+ {"version":3,"file":"useGiftPackage.d.ts","sourceRoot":"","sources":["../../src/hooks/useGiftPackage.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,IAAI,oBAAoB,CAgHrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePackage.d.ts","sourceRoot":"","sources":["../../src/hooks/usePackage.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE1E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CA0BvE"}
1
+ {"version":3,"file":"usePackage.d.ts","sourceRoot":"","sources":["../../src/hooks/usePackage.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE1E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CA2BvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePackages.d.ts","sourceRoot":"","sources":["../../src/hooks/usePackages.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE5E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CAqD/E"}
1
+ {"version":3,"file":"usePackages.d.ts","sourceRoot":"","sources":["../../src/hooks/usePackages.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE5E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CAwD/E"}
@@ -1 +1 @@
1
- {"version":3,"file":"useWebstore.d.ts","sourceRoot":"","sources":["../../src/hooks/useWebstore.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAgB,MAAM,gBAAgB,CAAC;AA2BtE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,IAAI,iBAAiB,CA4B/C"}
1
+ {"version":3,"file":"useWebstore.d.ts","sourceRoot":"","sources":["../../src/hooks/useWebstore.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAgB,MAAM,gBAAgB,CAAC;AA8CtE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,IAAI,iBAAiB,CA4B/C"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,4 @@
1
1
  'use client';
2
- var{defineProperty:_A,getOwnPropertyNames:yA,getOwnPropertyDescriptor:xA}=Object,cA=Object.prototype.hasOwnProperty;var IA=new WeakMap,dA=(A)=>{var O=IA.get(A),_;if(O)return O;if(O=_A({},"__esModule",{value:!0}),A&&typeof A==="object"||typeof A==="function")yA(A).map((N)=>!cA.call(O,N)&&_A(O,N,{get:()=>A[N],enumerable:!(_=xA(A,N))||_.enumerable}));return IA.set(A,O),O};var bA=(A,O)=>{for(var _ in O)_A(A,_,{get:O[_],enumerable:!0,configurable:!0,set:(N)=>O[_]=()=>N})};var oA={};bA(oA,{useWebstore:()=>wA,useUserStore:()=>K,useUser:()=>QA,useTebexContext:()=>C,useTebexConfig:()=>S,usePackages:()=>jA,usePackage:()=>PA,useGiftPackage:()=>zA,useGiftCards:()=>WA,useCreatorCodes:()=>HA,useCoupons:()=>$A,useCheckout:()=>ZA,useCategory:()=>JA,useCategories:()=>XA,useBasketStore:()=>j,useBasket:()=>h,tebexKeys:()=>R,ok:()=>KA,isTebexError:()=>GA,isTebexClientInitialized:()=>NA,isSuccess:()=>UA,isError:()=>YA,isDefined:()=>VA,getTebexClient:()=>H,err:()=>hA,TebexProvider:()=>FA,TebexErrorCode:()=>u,TebexError:()=>L});module.exports=dA(oA);var o=require("@tanstack/react-query"),B=require("react");var fA=require("tebex_headless"),i=null;function DA(A){i=new fA.TebexHeadless(A)}function H(){if(i===null)throw Error("Tebex client not initialized. Make sure you are using TebexProvider.");return i}function NA(){return i!==null}var n=require("react");var u;((W)=>{W.PROVIDER_NOT_FOUND="PROVIDER_NOT_FOUND";W.INVALID_CONFIG="INVALID_CONFIG";W.NOT_AUTHENTICATED="NOT_AUTHENTICATED";W.INVALID_USERNAME="INVALID_USERNAME";W.BASKET_NOT_FOUND="BASKET_NOT_FOUND";W.BASKET_CREATION_FAILED="BASKET_CREATION_FAILED";W.BASKET_EXPIRED="BASKET_EXPIRED";W.BASKET_EMPTY="BASKET_EMPTY";W.PACKAGE_NOT_FOUND="PACKAGE_NOT_FOUND";W.PACKAGE_OUT_OF_STOCK="PACKAGE_OUT_OF_STOCK";W.PACKAGE_ALREADY_OWNED="PACKAGE_ALREADY_OWNED";W.INVALID_QUANTITY="INVALID_QUANTITY";W.CATEGORY_NOT_FOUND="CATEGORY_NOT_FOUND";W.COUPON_INVALID="COUPON_INVALID";W.COUPON_EXPIRED="COUPON_EXPIRED";W.COUPON_ALREADY_USED="COUPON_ALREADY_USED";W.GIFTCARD_INVALID="GIFTCARD_INVALID";W.GIFTCARD_INSUFFICIENT_BALANCE="GIFTCARD_INSUFFICIENT_BALANCE";W.CREATOR_CODE_INVALID="CREATOR_CODE_INVALID";W.CHECKOUT_FAILED="CHECKOUT_FAILED";W.CHECKOUT_CANCELLED="CHECKOUT_CANCELLED";W.TEBEX_JS_NOT_LOADED="TEBEX_JS_NOT_LOADED";W.NETWORK_ERROR="NETWORK_ERROR";W.TIMEOUT="TIMEOUT";W.RATE_LIMITED="RATE_LIMITED";W.UNKNOWN="UNKNOWN"})(u||={});class L extends Error{code;cause;constructor(A,O,_){super(O??A);if(this.name="TebexError",this.code=A,this.cause=_,typeof Error.captureStackTrace==="function")Error.captureStackTrace(this,L)}static fromUnknown(A){if(A instanceof L)return A;if(A instanceof Error){let O=A.message.toLowerCase();if(O.includes("network")||O.includes("fetch"))return new L("NETWORK_ERROR",A.message,A);if(O.includes("timeout"))return new L("TIMEOUT",A.message,A);if(O.includes("rate limit")||O.includes("429"))return new L("RATE_LIMITED",A.message,A);if(O.includes("basket")&&O.includes("not found"))return new L("BASKET_NOT_FOUND",A.message,A);if(O.includes("package")&&O.includes("not found"))return new L("PACKAGE_NOT_FOUND",A.message,A);if(O.includes("coupon")&&O.includes("invalid"))return new L("COUPON_INVALID",A.message,A);if(O.includes("coupon")&&O.includes("expired"))return new L("COUPON_EXPIRED",A.message,A);if(O.includes("gift")&&O.includes("invalid"))return new L("GIFTCARD_INVALID",A.message,A);return new L("UNKNOWN",A.message,A)}return new L("UNKNOWN",String(A))}toJSON(){return{name:this.name,code:this.code,message:this.message}}}var RA=n.createContext(null);function C(){let A=n.useContext(RA);if(A===null)throw new L("PROVIDER_NOT_FOUND","useTebexContext must be used within TebexProvider or TebexMockProvider");return A}function S(){let{config:A}=C();return A}var LA=require("react/jsx-runtime"),iA={defaultOptions:{queries:{staleTime:60000,gcTime:300000,retry:3,retryDelay:(A)=>Math.min(1000*2**A,30000),refetchOnWindowFocus:!1,refetchOnReconnect:!0},mutations:{retry:2,retryDelay:(A)=>Math.min(500*2**A,5000)}}};function uA(A){let O=A.baseUrl.replace(/\/$/,""),_=A.urls?.complete??"/shop/complete",N=A.urls?.cancel??"/shop/cancel";return{publicKey:A.publicKey,baseUrl:O,completeUrl:`${O}${_}`,cancelUrl:`${O}${N}`,onError:A.onError}}function FA({children:A,config:O,queryClient:_}){let N=B.useMemo(()=>uA(O),[O]),[Y]=B.useState(()=>_??new o.QueryClient(iA));B.useState(()=>{DA(N.publicKey)});let V=B.useMemo(()=>({config:N,queryClient:Y}),[N,Y]);return LA.jsx(RA.Provider,{value:V,children:LA.jsx(o.QueryClientProvider,{client:Y,children:A})})}var I=require("@tanstack/react-query"),Q=require("react");var R={all:["tebex"],categories:()=>[...R.all,"categories"],categoriesList:(A)=>[...R.categories(),"list",{includePackages:A}],category:(A)=>[...R.categories(),"detail",A],packages:()=>[...R.all,"packages"],packagesList:(A)=>[...R.packages(),"list",{categoryId:A}],package:(A)=>[...R.packages(),"detail",A],baskets:()=>[...R.all,"baskets"],basket:(A)=>[...R.baskets(),A],webstore:()=>[...R.all,"webstore"]};var BA=require("zustand"),s=require("zustand/middleware"),j=BA.create()(s.subscribeWithSelector(s.persist((A)=>({basketIdent:null,setBasketIdent:(O)=>{A({basketIdent:O})},clearBasketIdent:()=>{A({basketIdent:null})}}),{name:"tebex-basket-store",skipHydration:typeof window>"u"})));var MA=require("zustand"),a=require("zustand/middleware");var K=MA.create()(a.subscribeWithSelector(a.persist((A)=>({username:null,setUsername:(O)=>{A({username:O})},clearUsername:()=>{A({username:null}),j.getState().clearBasketIdent()}}),{name:"tebex-user-store",skipHydration:typeof window>"u"})));function GA(A){return A instanceof L}function UA(A){return A.success}function YA(A){return!A.success}function VA(A){return A!==null&&A!==void 0}function M(A){return typeof A==="number"&&Number.isInteger(A)&&A>0}function g(A){if(typeof A!=="string")return!1;return/^[a-zA-Z0-9_]{3,16}$/.test(A)}function h(){let A=S(),O=I.useQueryClient(),_=j((G)=>G.basketIdent),N=j((G)=>G.setBasketIdent),Y=j((G)=>G.clearBasketIdent),V=K((G)=>G.username),Z=I.useQuery({queryKey:R.basket(_),queryFn:async()=>{if(_===null)return null;return H().getBasket(_)},enabled:_!==null,retry:(G,J)=>{let P=L.fromUnknown(J);if(P.code==="BASKET_NOT_FOUND"||P.code==="BASKET_EXPIRED")return!1;return G<3}});Q.useEffect(()=>{if(Z.error!==null){let G=L.fromUnknown(Z.error);if(G.code==="BASKET_NOT_FOUND"||G.code==="BASKET_EXPIRED")Y()}},[Z.error,Y]);let z=Q.useCallback(async()=>{if(_!==null)return _;if(V===null||V.length===0)throw new L("NOT_AUTHENTICATED","Username is required to create a basket");let J=await H().createMinecraftBasket(V,A.completeUrl,A.cancelUrl);return N(J.ident),J.ident},[_,V,A.completeUrl,A.cancelUrl,N]),U=I.useMutation({mutationFn:async(G)=>{let J=G.quantity??1;if(!M(J))throw new L("INVALID_QUANTITY","Quantity must be a positive integer");let P=await z(),v=H();return await v.addPackageToBasket(P,G.packageId,J,G.type,G.variableData),v.getBasket(P)},onMutate:async(G)=>{await O.cancelQueries({queryKey:R.basket(_)});let J=O.getQueryData(R.basket(_));if(J!==null&&J!==void 0){let P={id:G.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:G.quantity??1,price:0,gift_username_id:null,gift_username:null}},v=J.packages.findIndex((f)=>f.id===G.packageId),lA=v>=0?J.packages.map((f,W)=>W===v?{...f,in_basket:{...f.in_basket,quantity:f.in_basket.quantity+(G.quantity??1)}}:f):[...J.packages,P];O.setQueryData(R.basket(_),{...J,packages:lA})}return{previousBasket:J}},onError:(G,J,P)=>{if(P?.previousBasket!==void 0)O.setQueryData(R.basket(_),P.previousBasket);A.onError?.(L.fromUnknown(G))},onSuccess:(G)=>{O.setQueryData(R.basket(_),G)}}),$=I.useMutation({mutationFn:async(G)=>{if(_===null)throw new L("BASKET_NOT_FOUND");let J=H();return await J.removePackage(_,G),J.getBasket(_)},onMutate:async(G)=>{await O.cancelQueries({queryKey:R.basket(_)});let J=O.getQueryData(R.basket(_));if(J!==null&&J!==void 0)O.setQueryData(R.basket(_),{...J,packages:J.packages.filter((P)=>P.id!==G)});return{previousBasket:J}},onError:(G,J,P)=>{if(P?.previousBasket!==void 0)O.setQueryData(R.basket(_),P.previousBasket);A.onError?.(L.fromUnknown(G))},onSuccess:(G)=>{O.setQueryData(R.basket(_),G)}}),D=I.useMutation({mutationFn:async(G)=>{if(!M(G.quantity))throw new L("INVALID_QUANTITY","Quantity must be a positive integer");if(_===null)throw new L("BASKET_NOT_FOUND");let J=H();return await J.updateQuantity(_,G.packageId,G.quantity),J.getBasket(_)},onMutate:async(G)=>{await O.cancelQueries({queryKey:R.basket(_)});let J=O.getQueryData(R.basket(_));if(J!==null&&J!==void 0)O.setQueryData(R.basket(_),{...J,packages:J.packages.map((P)=>P.id===G.packageId?{...P,in_basket:{...P.in_basket,quantity:G.quantity}}:P)});return{previousBasket:J}},onError:(G,J,P)=>{if(P?.previousBasket!==void 0)O.setQueryData(R.basket(_),P.previousBasket);A.onError?.(L.fromUnknown(G))},onSuccess:(G)=>{O.setQueryData(R.basket(_),G)}}),F=Q.useCallback(()=>{Y(),O.removeQueries({queryKey:R.baskets()})},[Y,O]),X=Z.data??null,w=Q.useMemo(()=>X?.packages??[],[X?.packages]),d=Q.useMemo(()=>w.reduce((G,J)=>G+J.in_basket.quantity,0),[w]),b=Q.useMemo(()=>X?.total_price??0,[X]),E=Q.useMemo(()=>Z.error!==null?L.fromUnknown(Z.error):null,[Z.error]),T=Q.useCallback(async(G)=>{await U.mutateAsync(G)},[U]),OA=Q.useCallback(async(G)=>{await $.mutateAsync(G)},[$]),q=Q.useCallback(async(G)=>{await D.mutateAsync(G)},[D]);return{basket:X,data:X,basketIdent:_,packages:w,isLoading:Z.isLoading,isFetching:Z.isFetching,isAddingPackage:U.isPending,isRemovingPackage:$.isPending,isUpdatingQuantity:D.isPending,error:E,errorCode:E?.code??null,addPackage:T,removePackage:OA,updateQuantity:q,clearBasket:F,refetch:Z.refetch,itemCount:d,total:b,isEmpty:w.length===0}}var EA=require("@tanstack/react-query"),m=require("react");function XA(A={}){let{includePackages:O=!0,enabled:_=!0}=A,N=EA.useQuery({queryKey:R.categoriesList(O),queryFn:async()=>{return H().getCategories(O)},enabled:_}),Y=m.useMemo(()=>N.error!==null?L.fromUnknown(N.error):null,[N.error]),V=m.useMemo(()=>(U)=>N.data?.find(($)=>$.name.toLowerCase()===U.toLowerCase()),[N.data]),Z=m.useMemo(()=>(U)=>N.data?.find(($)=>$.id===U),[N.data]),z=m.useMemo(()=>(U)=>N.data?.find(($)=>$.slug===U),[N.data]);return{categories:N.data??null,data:N.data??null,isLoading:N.isLoading,isFetching:N.isFetching,error:Y,errorCode:Y?.code??null,refetch:N.refetch,getByName:V,getById:Z,getBySlug:z}}var TA=require("@tanstack/react-query"),qA=require("react");function JA(A){let{id:O,enabled:_=!0}=A,N=TA.useQuery({queryKey:R.category(O),queryFn:async()=>{return H().getCategory(O)},enabled:_}),Y=qA.useMemo(()=>N.error!==null?L.fromUnknown(N.error):null,[N.error]);return{category:N.data??null,data:N.data??null,isLoading:N.isLoading,isFetching:N.isFetching,error:Y,errorCode:Y?.code??null,refetch:N.refetch}}var vA=require("@tanstack/react-query"),t=require("react");function ZA(A={}){let{basket:O,basketIdent:_,clearBasket:N,isEmpty:Y}=h(),V=S(),Z=vA.useMutation({mutationFn:async()=>{if(_===null||O===null)throw new L("BASKET_NOT_FOUND");if(Y)throw new L("BASKET_EMPTY","Basket is empty");if(typeof window>"u")throw new L("TEBEX_JS_NOT_LOADED","Cannot checkout on server side.");let $=window.Tebex;if($===void 0)throw new L("TEBEX_JS_NOT_LOADED",'Tebex.js not loaded. Add <script src="https://js.tebex.io/v/1.js"></script> to your page.');return new Promise((D,F)=>{let X=$.checkout,w=!1,d=()=>{if(w)return;w=!0,T(),N(),A.onSuccess?.(),D()},b=(OA)=>{if(w)return;w=!0,T();let q=new L("CHECKOUT_FAILED",String(OA));A.onError?.(q),V.onError?.(q),F(q)},E=()=>{if(w)return;w=!0,T(),A.onClose?.(),D()},T=()=>{X.off("payment:complete",d),X.off("payment:error",b),X.off("close",E)};X.init({ident:_}),X.on("payment:complete",d),X.on("payment:error",b),X.on("close",E),X.launch()})}}),z=t.useCallback(async()=>{await Z.mutateAsync()},[Z]),U=t.useMemo(()=>Z.error!==null?L.fromUnknown(Z.error):null,[Z.error]);return{launch:z,isLaunching:Z.isPending,error:U,errorCode:U?.code??null,canCheckout:O!==null&&!Y,checkoutUrl:O?.links.checkout??null}}var p=require("@tanstack/react-query"),k=require("react");function $A(){let{basket:A}=h(),O=j((D)=>D.basketIdent),_=p.useQueryClient(),N=S(),Y=p.useMutation({mutationFn:async(D)=>{if(O===null)throw new L("BASKET_NOT_FOUND");let F=H();return await F.apply(O,"coupons",{coupon_code:D}),F.getBasket(O)},onMutate:async(D)=>{await _.cancelQueries({queryKey:R.basket(O)});let F=_.getQueryData(R.basket(O));if(F!==null&&F!==void 0)_.setQueryData(R.basket(O),{...F,coupons:[...F.coupons,{code:D}]});return{previousBasket:F}},onError:(D,F,X)=>{if(X?.previousBasket!==void 0)_.setQueryData(R.basket(O),X.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),V=p.useMutation({mutationFn:async(D)=>{if(O===null)throw new L("BASKET_NOT_FOUND");let F=H();return await F.remove(O,"coupons",{coupon_code:D}),F.getBasket(O)},onMutate:async(D)=>{await _.cancelQueries({queryKey:R.basket(O)});let F=_.getQueryData(R.basket(O));if(F!==null&&F!==void 0)_.setQueryData(R.basket(O),{...F,coupons:F.coupons.filter((X)=>X.code!==D)});return{previousBasket:F}},onError:(D,F,X)=>{if(X?.previousBasket!==void 0)_.setQueryData(R.basket(O),X.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),Z=k.useCallback(async(D)=>{await Y.mutateAsync(D)},[Y]),z=k.useCallback(async(D)=>{await V.mutateAsync(D)},[V]),U=Y.error??V.error,$=k.useMemo(()=>U!==null?L.fromUnknown(U):null,[U]);return{coupons:A?.coupons??[],apply:Z,remove:z,isApplying:Y.isPending,isRemoving:V.isPending,error:$,errorCode:$?.code??null}}var l=require("@tanstack/react-query"),y=require("react");function HA(){let{basket:A}=h(),O=j((D)=>D.basketIdent),_=l.useQueryClient(),N=S(),Y=l.useMutation({mutationFn:async(D)=>{if(O===null)throw new L("BASKET_NOT_FOUND");let F=H();return await F.apply(O,"creator-codes",{creator_code:D}),F.getBasket(O)},onMutate:async(D)=>{await _.cancelQueries({queryKey:R.basket(O)});let F=_.getQueryData(R.basket(O));if(F!==null&&F!==void 0)_.setQueryData(R.basket(O),{...F,creator_code:D});return{previousBasket:F}},onError:(D,F,X)=>{if(X?.previousBasket!==void 0)_.setQueryData(R.basket(O),X.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),V=l.useMutation({mutationFn:async()=>{if(O===null)throw new L("BASKET_NOT_FOUND");let D=H();return await D.remove(O,"creator-codes",{creator_code:""}),D.getBasket(O)},onMutate:async()=>{await _.cancelQueries({queryKey:R.basket(O)});let D=_.getQueryData(R.basket(O));if(D!==null&&D!==void 0)_.setQueryData(R.basket(O),{...D,creator_code:""});return{previousBasket:D}},onError:(D,F,X)=>{if(X?.previousBasket!==void 0)_.setQueryData(R.basket(O),X.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),Z=y.useCallback(async(D)=>{await Y.mutateAsync(D)},[Y]),z=y.useCallback(async()=>{await V.mutateAsync()},[V]),U=Y.error??V.error,$=y.useMemo(()=>U!==null?L.fromUnknown(U):null,[U]);return{creatorCode:A?.creator_code??null,apply:Z,remove:z,isApplying:Y.isPending,isRemoving:V.isPending,error:$,errorCode:$?.code??null}}var x=require("@tanstack/react-query"),c=require("react");function WA(){let{basket:A}=h(),O=j((D)=>D.basketIdent),_=x.useQueryClient(),N=S(),Y=x.useMutation({mutationFn:async(D)=>{if(O===null)throw new L("BASKET_NOT_FOUND");let F=H();return await F.apply(O,"giftcards",{card_number:D}),F.getBasket(O)},onMutate:async(D)=>{await _.cancelQueries({queryKey:R.basket(O)});let F=_.getQueryData(R.basket(O));if(F!==null&&F!==void 0)_.setQueryData(R.basket(O),{...F,giftcards:[...F.giftcards,{card_number:D}]});return{previousBasket:F}},onError:(D,F,X)=>{if(X?.previousBasket!==void 0)_.setQueryData(R.basket(O),X.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),V=x.useMutation({mutationFn:async(D)=>{if(O===null)throw new L("BASKET_NOT_FOUND");let F=H();return await F.remove(O,"giftcards",{card_number:D}),F.getBasket(O)},onMutate:async(D)=>{await _.cancelQueries({queryKey:R.basket(O)});let F=_.getQueryData(R.basket(O));if(F!==null&&F!==void 0)_.setQueryData(R.basket(O),{...F,giftcards:F.giftcards.filter((X)=>X.card_number!==D)});return{previousBasket:F}},onError:(D,F,X)=>{if(X?.previousBasket!==void 0)_.setQueryData(R.basket(O),X.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),Z=c.useCallback(async(D)=>{await Y.mutateAsync(D)},[Y]),z=c.useCallback(async(D)=>{await V.mutateAsync(D)},[V]),U=Y.error??V.error,$=c.useMemo(()=>U!==null?L.fromUnknown(U):null,[U]);return{giftCards:A?.giftcards??[],apply:Z,remove:z,isApplying:Y.isPending,isRemoving:V.isPending,error:$,errorCode:$?.code??null}}var r=require("@tanstack/react-query"),e=require("react");function zA(){let A=j((U)=>U.basketIdent),O=j((U)=>U.setBasketIdent),_=K((U)=>U.username),N=r.useQueryClient(),Y=S(),V=r.useMutation({mutationFn:async(U)=>{if(_===null||_.length===0)throw new L("NOT_AUTHENTICATED","Username is required to gift a package");if(!g(U.targetUsername))throw new L("INVALID_USERNAME","Target username must be 3-16 alphanumeric characters");let $=U.quantity??1;if(!M($))throw new L("INVALID_QUANTITY","Quantity must be a positive integer");let D=H(),F=A;if(F===null)F=(await D.createMinecraftBasket(_,Y.completeUrl,Y.cancelUrl)).ident,O(F);return await D.addPackageToBasket(F,U.packageId,$,"single",{gift_username:U.targetUsername}),D.getBasket(F)},onMutate:async(U)=>{await N.cancelQueries({queryKey:R.basket(A)});let $=N.getQueryData(R.basket(A));if($!==null&&$!==void 0){let D={id:U.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:U.quantity??1,price:0,gift_username_id:null,gift_username:U.targetUsername}};N.setQueryData(R.basket(A),{...$,packages:[...$.packages,D]})}return{previousBasket:$}},onError:(U,$,D)=>{if(D?.previousBasket!==void 0)N.setQueryData(R.basket(A),D.previousBasket);Y.onError?.(L.fromUnknown(U))},onSuccess:(U)=>{N.setQueryData(R.basket(A),U)}}),Z=e.useCallback(async(U)=>{await V.mutateAsync(U)},[V]),z=e.useMemo(()=>V.error!==null?L.fromUnknown(V.error):null,[V.error]);return{gift:Z,isGifting:V.isPending,error:z,errorCode:z?.code??null}}var CA=require("@tanstack/react-query"),gA=require("react");function PA(A){let{id:O,enabled:_=!0}=A,N=CA.useQuery({queryKey:R.package(O),queryFn:async()=>{return H().getPackage(O)},enabled:_}),Y=gA.useMemo(()=>N.error!==null?L.fromUnknown(N.error):null,[N.error]);return{package:N.data??null,data:N.data??null,isLoading:N.isLoading,isFetching:N.isFetching,error:Y,errorCode:Y?.code??null,refetch:N.refetch}}var mA=require("@tanstack/react-query"),AA=require("react");function jA(A={}){let{categoryId:O,enabled:_=!0}=A,N=mA.useQuery({queryKey:R.packagesList(O),queryFn:async()=>{let z=H();if(O!==void 0)return(await z.getCategory(O)).packages;let U=await z.getCategories(!0),$=[];for(let D of U)$.push(...D.packages);return $},enabled:_}),Y=AA.useMemo(()=>N.error!==null?L.fromUnknown(N.error):null,[N.error]),V=AA.useMemo(()=>(z)=>N.data?.find((U)=>U.id===z),[N.data]),Z=AA.useMemo(()=>(z)=>N.data?.find((U)=>U.name.toLowerCase()===z.toLowerCase()),[N.data]);return{packages:N.data??null,data:N.data??null,isLoading:N.isLoading,isFetching:N.isFetching,error:Y,errorCode:Y?.code??null,refetch:N.refetch,getById:V,getByName:Z}}var SA=require("react");function QA(){let A=K((Z)=>Z.username),O=K((Z)=>Z.setUsername),_=K((Z)=>Z.clearUsername),N=SA.useCallback((Z)=>{let z=Z.trim();if(g(z))return O(z),!0;return!1},[O]),Y=SA.useCallback(()=>{_()},[_]),V=A!==null&&A.length>0;return{username:A,setUsername:N,clearUsername:Y,isAuthenticated:V}}var pA=require("@tanstack/react-query"),kA=require("react");function nA(A){let O=A.currency;return{id:A.id,name:A.name,description:A.description,currency:O.iso_4217,domain:A.webstore_url,logo:A.logo.length>0?A.logo:null}}function wA(){let A=pA.useQuery({queryKey:R.webstore(),queryFn:async()=>{let N=await H().getWebstore();return nA(N)},staleTime:300000}),O=kA.useMemo(()=>A.error!==null?L.fromUnknown(A.error):null,[A.error]);return{webstore:A.data??null,data:A.data??null,name:A.data?.name??null,currency:A.data?.currency??null,domain:A.data?.domain??null,isLoading:A.isLoading,isFetching:A.isFetching,error:O,errorCode:O?.code??null,refetch:A.refetch}}function KA(A){return{success:!0,data:A}}function hA(A){return{success:!1,error:A}}
2
+ 'use strict';var reactQuery=require('@tanstack/react-query'),react=require('react'),tebex_headless=require('tebex_headless'),zustand=require('zustand'),middleware=require('zustand/middleware'),jsxRuntime=require('react/jsx-runtime');var V=(g=>(g.PROVIDER_NOT_FOUND="PROVIDER_NOT_FOUND",g.INVALID_CONFIG="INVALID_CONFIG",g.NOT_AUTHENTICATED="NOT_AUTHENTICATED",g.INVALID_USERNAME="INVALID_USERNAME",g.BASKET_NOT_FOUND="BASKET_NOT_FOUND",g.BASKET_CREATION_FAILED="BASKET_CREATION_FAILED",g.BASKET_EXPIRED="BASKET_EXPIRED",g.BASKET_EMPTY="BASKET_EMPTY",g.PACKAGE_NOT_FOUND="PACKAGE_NOT_FOUND",g.PACKAGE_OUT_OF_STOCK="PACKAGE_OUT_OF_STOCK",g.PACKAGE_ALREADY_OWNED="PACKAGE_ALREADY_OWNED",g.INVALID_QUANTITY="INVALID_QUANTITY",g.CATEGORY_NOT_FOUND="CATEGORY_NOT_FOUND",g.COUPON_INVALID="COUPON_INVALID",g.COUPON_EXPIRED="COUPON_EXPIRED",g.COUPON_ALREADY_USED="COUPON_ALREADY_USED",g.GIFTCARD_INVALID="GIFTCARD_INVALID",g.GIFTCARD_INSUFFICIENT_BALANCE="GIFTCARD_INSUFFICIENT_BALANCE",g.CREATOR_CODE_INVALID="CREATOR_CODE_INVALID",g.CHECKOUT_FAILED="CHECKOUT_FAILED",g.CHECKOUT_CANCELLED="CHECKOUT_CANCELLED",g.TEBEX_JS_NOT_LOADED="TEBEX_JS_NOT_LOADED",g.NETWORK_ERROR="NETWORK_ERROR",g.TIMEOUT="TIMEOUT",g.RATE_LIMITED="RATE_LIMITED",g.SERVER_ERROR="SERVER_ERROR",g.FORBIDDEN="FORBIDDEN",g.VALIDATION_ERROR="VALIDATION_ERROR",g.NOT_FOUND="NOT_FOUND",g.BASKET_LOCKED="BASKET_LOCKED",g.PACKAGE_DISABLED="PACKAGE_DISABLED",g.UNKNOWN="UNKNOWN",g))(V||{});var u=class e extends Error{code;cause;constructor(t,o,r){super(o??t),Object.setPrototypeOf(this,e.prototype),this.name="TebexError",this.code=t,this.cause=r,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,e);}static extractStatusCode(t){if(typeof t=="object"&&t!==null){if("response"in t){let o=t.response;if(o&&typeof o.status=="number")return o.status}if("status"in t&&typeof t.status=="number")return t.status}return null}static fromUnknown(t){if(t instanceof e)return t;let o=t instanceof Error?t.message:String(t),r=e.extractStatusCode(t);if(r!==null)switch(r){case 401:case 403:return new e("FORBIDDEN",o,t);case 404:{let l=o.toLowerCase();return l.includes("basket")?new e("BASKET_NOT_FOUND",o,t):l.includes("package")?new e("PACKAGE_NOT_FOUND",o,t):new e("NOT_FOUND",o,t)}case 410:return new e("BASKET_EXPIRED",o,t);case 422:return new e("VALIDATION_ERROR",o,t);case 429:return new e("RATE_LIMITED",o,t);case 500:case 502:case 503:return new e("SERVER_ERROR",o,t)}if(t instanceof Error){let l=o.toLowerCase();return l.includes("network")||l.includes("fetch")?new e("NETWORK_ERROR",o,t):l.includes("timeout")?new e("TIMEOUT",o,t):l.includes("rate limit")||l.includes("429")?new e("RATE_LIMITED",o,t):l.includes("basket")&&l.includes("not found")?new e("BASKET_NOT_FOUND",o,t):l.includes("package")&&l.includes("not found")?new e("PACKAGE_NOT_FOUND",o,t):l.includes("coupon")&&l.includes("invalid")?new e("COUPON_INVALID",o,t):l.includes("coupon")&&l.includes("expired")?new e("COUPON_EXPIRED",o,t):l.includes("gift")&&l.includes("invalid")?new e("GIFTCARD_INVALID",o,t):new e("UNKNOWN",o,t)}return new e("UNKNOWN",o)}static fromJSON(t){return new e(t.code,t.message??t.code)}toJSON(){return {name:this.name,code:this.code,message:this.message,...this.cause instanceof Error?{cause:this.cause.message}:{}}}};var v=null;function W(e){v=new tebex_headless.TebexHeadless(e);}function C(){if(v===null)throw new u("PROVIDER_NOT_FOUND","Tebex client not initialized. Ensure TebexProvider wraps your component tree.");return v}function j(){return v!==null}var U=zustand.create()(middleware.subscribeWithSelector(middleware.persist(e=>({basketIdent:null,setBasketIdent:t=>{e({basketIdent:t});},clearBasketIdent:()=>{e({basketIdent:null});}}),{name:"tebex-basket-store",skipHydration:true,version:1,partialize:e=>({basketIdent:e.basketIdent}),migrate:e=>e,onRehydrateStorage:()=>(e,t)=>{t!==void 0&&console.warn("[tebex] Failed to rehydrate basket store:",t);}})));var P=zustand.create()(middleware.subscribeWithSelector(middleware.persist(e=>({username:null,setUsername:t=>{e({username:t});},clearUsername:()=>{e({username:null}),U.getState().clearBasketIdent();}}),{name:"tebex-user-store",skipHydration:true,version:1,partialize:e=>({username:e.username}),migrate:e=>e,onRehydrateStorage:()=>(e,t)=>{t!==void 0&&console.warn("[tebex] Failed to rehydrate user store:",t);}})));var H=react.createContext(null);function K(){let e=react.useContext(H);if(e===null)throw new u("PROVIDER_NOT_FOUND","useTebexContext must be used within TebexProvider or TebexMockProvider");return e}function B(){let{config:e}=K();return e}var Le={defaultOptions:{queries:{staleTime:60*1e3,gcTime:300*1e3,retry:3,retryDelay:e=>Math.min(1e3*2**e,3e4),refetchOnWindowFocus:false,refetchOnReconnect:true},mutations:{retry:2,retryDelay:e=>Math.min(500*2**e,5e3)}}};function qe(e){let t=e.baseUrl.replace(/\/$/,""),o=e.urls?.complete??"/shop/complete",r=e.urls?.cancel??"/shop/cancel";return {publicKey:e.publicKey,baseUrl:t,completeUrl:`${t}${o}`,cancelUrl:`${t}${r}`,onError:e.onError}}function ee({children:e,config:t,queryClient:o}){let r=react.useMemo(()=>qe(t),[t]),[l]=react.useState(()=>o??new reactQuery.QueryClient(Le));react.useState(()=>{W(r.publicKey);}),react.useEffect(()=>{U.persist.rehydrate(),P.persist.rehydrate();},[]),react.useEffect(()=>{let f=x=>{(x.key==="tebex-basket-store"||x.key==="tebex-user-store")&&(U.persist.rehydrate(),P.persist.rehydrate());};return window.addEventListener("storage",f),()=>{window.removeEventListener("storage",f);}},[]);let k=react.useMemo(()=>({config:r,queryClient:l}),[r,l]);return jsxRuntime.jsx(H.Provider,{value:k,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:l,children:e})})}var i={all:["tebex"],categories:()=>[...i.all,"categories"],categoriesList:e=>[...i.categories(),"list",{includePackages:e}],category:e=>[...i.categories(),"detail",e],packages:()=>[...i.all,"packages"],packagesList:e=>[...i.packages(),"list",{categoryId:e}],package:e=>[...i.packages(),"detail",e],baskets:()=>[...i.all,"baskets"],basket:e=>[...i.baskets(),e],webstore:()=>[...i.all,"webstore"]};function te(e){return e instanceof u?true:typeof e=="object"&&e!==null&&"name"in e&&"code"in e&&e.name==="TebexError"}function re(e){return e.success}function ne(e){return !e.success}function se(e){return e!=null}function oe(e){return typeof e=="string"&&e.length>0}function ae(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function R(e){return typeof e=="number"&&Number.isInteger(e)&&e>0}function N(e){return typeof e!="string"?false:/^[a-zA-Z0-9_]{3,16}$/.test(e)}var S=null;function _(){let e=B(),t=reactQuery.useQueryClient(),o=U(c=>c.basketIdent),r=U(c=>c.setBasketIdent),l=U(c=>c.clearBasketIdent),k=P(c=>c.username),f=react.useRef(o);f.current=o;let x=reactQuery.useQuery({queryKey:i.basket(o),queryFn:async()=>o===null?null:C().getBasket(o),enabled:o!==null,retry:(c,p)=>{let d=u.fromUnknown(p);return d.code==="BASKET_NOT_FOUND"||d.code==="BASKET_EXPIRED"?false:c<3}});react.useEffect(()=>{if(x.error!==null){let c=u.fromUnknown(x.error);(c.code==="BASKET_NOT_FOUND"||c.code==="BASKET_EXPIRED")&&l();}},[x.error,l]);let E=react.useCallback(async()=>{let c=U.getState().basketIdent;return c!==null?c:(S!==null||(S=(async()=>{if(k===null||k.length===0)throw new u("NOT_AUTHENTICATED","Username is required to create a basket");let T=await C().createMinecraftBasket(k,e.completeUrl,e.cancelUrl);return r(T.ident),T.ident})().finally(()=>{S=null;})),S)},[k,e.completeUrl,e.cancelUrl,r]),m=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async c=>{let p=c.quantity??1;if(!R(p))throw new u("INVALID_QUANTITY","Quantity must be a positive integer");let d=await E(),T=C();return await T.addPackageToBasket(d,c.packageId,p,c.type,c.variableData),T.getBasket(d)},onMutate:async c=>{let p=f.current;if(p===null)return {previousBasket:void 0,ident:p};await t.cancelQueries({queryKey:i.basket(p)});let d=t.getQueryData(i.basket(p));if(d!=null){let T={id:c.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:c.quantity??1,price:0,gift_username_id:null,gift_username:null}},G=d.packages.findIndex(A=>A.id===c.packageId),Oe=G>=0?d.packages.map((A,Re)=>Re===G?{...A,in_basket:{...A.in_basket,quantity:A.in_basket.quantity+(c.quantity??1)}}:A):[...d.packages,T];t.setQueryData(i.basket(p),{...d,packages:Oe});}return {previousBasket:d,ident:p}},onError:(c,p,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(i.basket(d.ident),d.previousBasket),e.onError?.(u.fromUnknown(c));},onSuccess:(c,p,d)=>{let T=d.ident??f.current;T!==null&&t.setQueryData(i.basket(T),c);}}),y=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async c=>{if(o===null)throw new u("BASKET_NOT_FOUND");let p=C();return await p.removePackage(o,c),p.getBasket(o)},onMutate:async c=>{let p=f.current;if(p===null)return {previousBasket:void 0,ident:p};await t.cancelQueries({queryKey:i.basket(p)});let d=t.getQueryData(i.basket(p));return d!=null&&t.setQueryData(i.basket(p),{...d,packages:d.packages.filter(T=>T.id!==c)}),{previousBasket:d,ident:p}},onError:(c,p,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(i.basket(d.ident),d.previousBasket),e.onError?.(u.fromUnknown(c));},onSuccess:(c,p,d)=>{let T=d.ident??f.current;T!==null&&t.setQueryData(i.basket(T),c);}}),n=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async c=>{if(!R(c.quantity))throw new u("INVALID_QUANTITY","Quantity must be a positive integer");if(o===null)throw new u("BASKET_NOT_FOUND");let p=C();return await p.updateQuantity(o,c.packageId,c.quantity),p.getBasket(o)},onMutate:async c=>{let p=f.current;if(p===null)return {previousBasket:void 0,ident:p};await t.cancelQueries({queryKey:i.basket(p)});let d=t.getQueryData(i.basket(p));return d!=null&&t.setQueryData(i.basket(p),{...d,packages:d.packages.map(T=>T.id===c.packageId?{...T,in_basket:{...T.in_basket,quantity:c.quantity}}:T)}),{previousBasket:d,ident:p}},onError:(c,p,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(i.basket(d.ident),d.previousBasket),e.onError?.(u.fromUnknown(c));},onSuccess:(c,p,d)=>{let T=d.ident??f.current;T!==null&&t.setQueryData(i.basket(T),c);}}),a=react.useCallback(()=>{l(),t.removeQueries({queryKey:i.baskets()});},[l,t]),s=x.data??null,b=react.useMemo(()=>s?.packages??[],[s?.packages]),M=react.useMemo(()=>b.reduce((c,p)=>c+p.in_basket.quantity,0),[b]),L=react.useMemo(()=>s?.total_price??0,[s?.total_price]),I=x.error??m.error??y.error??n.error,w=react.useMemo(()=>I!==null?u.fromUnknown(I):null,[I]),O=react.useCallback(async c=>{await m.mutateAsync(c);},[m]),q=react.useCallback(async c=>{await y.mutateAsync(c);},[y]),D=react.useCallback(async c=>{await n.mutateAsync(c);},[n]);return {basket:s,data:s,basketIdent:o,packages:b,isLoading:x.isLoading,isFetching:x.isFetching,isAddingPackage:m.isPending,isRemovingPackage:y.isPending,isUpdatingQuantity:n.isPending,error:w,errorCode:w?.code??null,addPackage:O,removePackage:q,updateQuantity:D,clearBasket:a,refetch:x.refetch,itemCount:M,total:L,isEmpty:b.length===0}}function ie(e={}){let{includePackages:t=true,enabled:o=true}=e,r=reactQuery.useQuery({queryKey:i.categoriesList(t),queryFn:async()=>C().getCategories(t),enabled:o,staleTime:300*1e3}),l=react.useMemo(()=>r.error!==null?u.fromUnknown(r.error):null,[r.error]),k=react.useRef(r.data);k.current=r.data;let f=react.useCallback(m=>k.current?.find(y=>y.name.toLowerCase()===m.toLowerCase()),[]),x=react.useCallback(m=>k.current?.find(y=>y.id===m),[]),E=react.useCallback(m=>k.current?.find(y=>y.slug===m),[]);return {categories:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:l,errorCode:l?.code??null,refetch:r.refetch,getByName:f,getById:x,getBySlug:E}}function ue(e){let{id:t,enabled:o=true}=e,r=reactQuery.useQuery({queryKey:i.category(t),queryFn:async()=>C().getCategory(t),enabled:o&&t>0&&Number.isInteger(t),staleTime:300*1e3}),l=react.useMemo(()=>r.error!==null?u.fromUnknown(r.error):null,[r.error]);return {category:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:l,errorCode:l?.code??null,refetch:r.refetch}}var tt=1800*1e3,F=0;function ce(e={}){let{basket:t,basketIdent:o,clearBasket:r,isEmpty:l}=_(),k=B(),f=reactQuery.useMutation({mutationFn:async()=>{if(o===null||t===null)throw new u("BASKET_NOT_FOUND");if(l)throw new u("BASKET_EMPTY","Basket is empty");if(typeof window>"u")throw new u("TEBEX_JS_NOT_LOADED","Cannot checkout on server side.");let m=window.Tebex;if(m===void 0)throw new u("TEBEX_JS_NOT_LOADED",'Tebex.js not loaded. Add <script src="https://js.tebex.io/v/1.9.0.js"></script> to your page.');return new Promise((y,n)=>{let a=m.checkout,s=false,b=++F,M=()=>{b!==F||s||(s=true,D(),r(),e.onSuccess?.(),y());},L=d=>{if(b!==F||s)return;s=true,D();let T=new u("CHECKOUT_FAILED",String(d));e.onError?.(T),k.onError?.(T),n(T);},I=()=>{b!==F||s||(s=true,D(),e.onClose?.(),y());},w=null,O=null,q=setTimeout(()=>{s||(s=true,D(),n(new u("TIMEOUT","Checkout session timed out")));},tt),D=()=>{clearTimeout(q),w!==null&&(w.disconnect(),w=null),O!==null&&(clearTimeout(O),O=null);},c=()=>document.querySelector('iframe[src*="tebex"]')??document.querySelector('[class*="tebex-js"]')??document.querySelector("tebex-checkout[open]"),p=()=>{let d=false,T=()=>{if(s)return;c()!==null?d=true:d&&I();};w=new MutationObserver(()=>{s||(O!==null&&clearTimeout(O),O=setTimeout(T,50));}),w.observe(document.body,{childList:true,subtree:true}),c()!==null&&(d=true);};a.init({ident:o}),a.on("payment:complete",M),a.on("payment:error",L),a.on("close",I),a.launch(),p();})}}),x=react.useCallback(async()=>{await f.mutateAsync();},[f]),E=react.useMemo(()=>f.error!==null?u.fromUnknown(f.error):null,[f.error]);return {launch:x,isLaunching:f.isPending,error:E,errorCode:E?.code??null,canCheckout:t!==null&&!l,checkoutUrl:t?.links.checkout??null}}function de(){let{basket:e}=_(),t=U(n=>n.basketIdent),o=react.useRef(t);o.current=t;let r=reactQuery.useQueryClient(),l=B(),k=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async n=>{let a=o.current;if(a===null)throw new u("BASKET_NOT_FOUND");let s=C();return await s.apply(a,"coupons",{coupon_code:n}),s.getBasket(a)},onMutate:async n=>{let a=o.current;if(a===null)return;await r.cancelQueries({queryKey:i.basket(a)});let s=r.getQueryData(i.basket(a));return s!==void 0&&r.setQueryData(i.basket(a),{...s,coupons:[...s.coupons,{code:n}]}),{previousBasket:s,ident:a}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),f=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async n=>{let a=o.current;if(a===null)throw new u("BASKET_NOT_FOUND");let s=C();return await s.remove(a,"coupons",{coupon_code:n}),s.getBasket(a)},onMutate:async n=>{let a=o.current;if(a===null)return;await r.cancelQueries({queryKey:i.basket(a)});let s=r.getQueryData(i.basket(a));return s!==void 0&&r.setQueryData(i.basket(a),{...s,coupons:s.coupons.filter(b=>b.code!==n)}),{previousBasket:s,ident:a}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),x=react.useCallback(async n=>{await k.mutateAsync(n);},[k]),E=react.useCallback(async n=>{await f.mutateAsync(n);},[f]),m=k.error??f.error,y=react.useMemo(()=>m!==null?u.fromUnknown(m):null,[m]);return {coupons:e?.coupons??[],apply:x,remove:E,isApplying:k.isPending,isRemoving:f.isPending,error:y,errorCode:y?.code??null}}function ke(){let{basket:e}=_(),t=U(n=>n.basketIdent),o=react.useRef(t);o.current=t;let r=reactQuery.useQueryClient(),l=B(),k=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async n=>{let a=o.current;if(a===null)throw new u("BASKET_NOT_FOUND");let s=C();return await s.apply(a,"creator-codes",{creator_code:n}),s.getBasket(a)},onMutate:async n=>{let a=o.current;if(a===null)return;await r.cancelQueries({queryKey:i.basket(a)});let s=r.getQueryData(i.basket(a));return s!==void 0&&r.setQueryData(i.basket(a),{...s,creator_code:n}),{previousBasket:s,ident:a}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),f=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async()=>{let n=o.current;if(n===null)throw new u("BASKET_NOT_FOUND");let a=C();return await a.remove(n,"creator-codes",{creator_code:""}),a.getBasket(n)},onMutate:async()=>{let n=o.current;if(n===null)return;await r.cancelQueries({queryKey:i.basket(n)});let a=r.getQueryData(i.basket(n));return a!==void 0&&r.setQueryData(i.basket(n),{...a,creator_code:""}),{previousBasket:a,ident:n}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),x=react.useCallback(async n=>{await k.mutateAsync(n);},[k]),E=react.useCallback(async()=>{await f.mutateAsync();},[f]),m=k.error??f.error,y=react.useMemo(()=>m!==null?u.fromUnknown(m):null,[m]);return {creatorCode:e?.creator_code??null,apply:x,remove:E,isApplying:k.isPending,isRemoving:f.isPending,error:y,errorCode:y?.code??null}}function be(){let{basket:e}=_(),t=U(n=>n.basketIdent),o=react.useRef(t);o.current=t;let r=reactQuery.useQueryClient(),l=B(),k=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async n=>{let a=o.current;if(a===null)throw new u("BASKET_NOT_FOUND");let s=C();return await s.apply(a,"giftcards",{card_number:n}),s.getBasket(a)},onMutate:async n=>{let a=o.current;if(a===null)return;await r.cancelQueries({queryKey:i.basket(a)});let s=r.getQueryData(i.basket(a));return s!==void 0&&r.setQueryData(i.basket(a),{...s,giftcards:[...s.giftcards,{card_number:n}]}),{previousBasket:s,ident:a}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),f=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async n=>{let a=o.current;if(a===null)throw new u("BASKET_NOT_FOUND");let s=C();return await s.remove(a,"giftcards",{card_number:n}),s.getBasket(a)},onMutate:async n=>{let a=o.current;if(a===null)return;await r.cancelQueries({queryKey:i.basket(a)});let s=r.getQueryData(i.basket(a));return s!==void 0&&r.setQueryData(i.basket(a),{...s,giftcards:s.giftcards.filter(b=>b.card_number!==n)}),{previousBasket:s,ident:a}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),x=react.useCallback(async n=>{await k.mutateAsync(n);},[k]),E=react.useCallback(async n=>{await f.mutateAsync(n);},[f]),m=k.error??f.error,y=react.useMemo(()=>m!==null?u.fromUnknown(m):null,[m]);return {giftCards:e?.giftcards??[],apply:x,remove:E,isApplying:k.isPending,isRemoving:f.isPending,error:y,errorCode:y?.code??null}}function Te(){let e=U(m=>m.basketIdent),t=react.useRef(e);t.current=e;let o=U(m=>m.setBasketIdent),r=P(m=>m.username),l=reactQuery.useQueryClient(),k=B(),f=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async m=>{if(r===null||r.length===0)throw new u("NOT_AUTHENTICATED","Username is required to gift a package");if(!N(m.targetUsername))throw new u("INVALID_USERNAME","Target username must be 3-16 alphanumeric characters");let y=m.quantity??1;if(!R(y))throw new u("INVALID_QUANTITY","Quantity must be a positive integer");let n=C(),a=U.getState().basketIdent;return a===null&&(a=(await n.createMinecraftBasket(r,k.completeUrl,k.cancelUrl)).ident,o(a)),await n.addPackageToBasket(a,m.packageId,y,"single",{gift_username:m.targetUsername}),n.getBasket(a)},onMutate:async m=>{let y=t.current;if(y===null)return;await l.cancelQueries({queryKey:i.basket(y)});let n=l.getQueryData(i.basket(y));if(n!==void 0){let a={id:m.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:m.quantity??1,price:0,gift_username_id:null,gift_username:m.targetUsername}};l.setQueryData(i.basket(y),{...n,packages:[...n.packages,a]});}return {previousBasket:n,ident:y}},onError:(m,y,n)=>{n?.previousBasket!==void 0&&l.setQueryData(i.basket(n.ident),n.previousBasket),k.onError?.(u.fromUnknown(m));},onSuccess:(m,y,n)=>{let a=n?.ident??t.current;a!==null&&l.setQueryData(i.basket(a),m);}}),x=react.useCallback(async m=>{await f.mutateAsync(m);},[f]),E=react.useMemo(()=>f.error!==null?u.fromUnknown(f.error):null,[f.error]);return {gift:x,isGifting:f.isPending,error:E,errorCode:E?.code??null}}function Ce(e){let{id:t,enabled:o=true}=e,r=reactQuery.useQuery({queryKey:i.package(t),queryFn:async()=>C().getPackage(t),enabled:o&&t>0&&Number.isInteger(t),staleTime:300*1e3}),l=react.useMemo(()=>r.error!==null?u.fromUnknown(r.error):null,[r.error]);return {package:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:l,errorCode:l?.code??null,refetch:r.refetch}}function Ee(e={}){let{categoryId:t,enabled:o=true}=e,r=reactQuery.useQuery({queryKey:i.packagesList(t),queryFn:async()=>{let E=C();if(t!==void 0)return (await E.getCategory(t)).packages;let m=await E.getCategories(true),y=[];for(let n of m)y.push(...n.packages);return y},enabled:o,staleTime:300*1e3}),l=react.useMemo(()=>r.error!==null?u.fromUnknown(r.error):null,[r.error]),k=react.useRef(r.data);k.current=r.data;let f=react.useCallback(E=>k.current?.find(m=>m.id===E),[]),x=react.useCallback(E=>k.current?.find(m=>m.name.toLowerCase()===E.toLowerCase()),[]);return {packages:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:l,errorCode:l?.code??null,refetch:r.refetch,getById:f,getByName:x}}function Be(){let e=P(f=>f.username),t=P(f=>f.setUsername),o=P(f=>f.clearUsername),r=react.useCallback(f=>{let x=f.trim();return N(x)?(t(x),true):false},[t]),l=react.useCallback(()=>{o();},[o]),k=e!==null&&e.length>0;return {username:e,setUsername:r,clearUsername:l,isAuthenticated:k}}function Ut(e){return typeof e=="object"&&e!==null&&"iso_4217"in e&&typeof e.iso_4217=="string"}function Bt(e){let t=e.currency,o;return Ut(t)?o=t.iso_4217:typeof t=="string"?o=t:o="USD",{id:e.id,name:e.name,description:e.description,currency:o,domain:e.webstore_url,logo:e.logo.length>0?e.logo:null}}function Pe(){let e=reactQuery.useQuery({queryKey:i.webstore(),queryFn:async()=>{let r=await C().getWebstore();return Bt(r)},staleTime:3e5}),t=react.useMemo(()=>e.error!==null?u.fromUnknown(e.error):null,[e.error]);return {webstore:e.data??null,data:e.data??null,name:e.data?.name??null,currency:e.data?.currency??null,domain:e.data?.domain??null,isLoading:e.isLoading,isFetching:e.isFetching,error:t,errorCode:t?.code??null,refetch:e.refetch}}function _e(e){return {success:true,data:e}}function we(e){return {success:false,error:e}}
3
+ exports.TebexError=u;exports.TebexErrorCode=V;exports.TebexProvider=ee;exports.err=we;exports.getTebexClient=C;exports.isDefined=se;exports.isError=ne;exports.isNonEmptyString=oe;exports.isPositiveInteger=R;exports.isPositiveNumber=ae;exports.isSuccess=re;exports.isTebexClientInitialized=j;exports.isTebexError=te;exports.isValidMinecraftUsername=N;exports.ok=_e;exports.tebexKeys=i;exports.useBasket=_;exports.useBasketStore=U;exports.useCategories=ie;exports.useCategory=ue;exports.useCheckout=ce;exports.useCoupons=de;exports.useCreatorCodes=ke;exports.useGiftCards=be;exports.useGiftPackage=Te;exports.usePackage=Ce;exports.usePackages=Ee;exports.useTebexConfig=B;exports.useTebexContext=K;exports.useUser=Be;exports.useUserStore=P;exports.useWebstore=Pe;//# sourceMappingURL=index.cjs.map
4
+ //# sourceMappingURL=index.cjs.map