@neosianexus/super-tebex 3.4.1 → 3.4.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.
- package/README.md +16 -8
- package/dist/errors/TebexError.d.ts +9 -0
- package/dist/errors/TebexError.d.ts.map +1 -1
- package/dist/errors/codes.d.ts +6 -0
- package/dist/errors/codes.d.ts.map +1 -1
- package/dist/hooks/useBasket.d.ts.map +1 -1
- package/dist/hooks/useCategories.d.ts.map +1 -1
- package/dist/hooks/useCategory.d.ts.map +1 -1
- package/dist/hooks/useCheckout.d.ts.map +1 -1
- package/dist/hooks/useCoupons.d.ts.map +1 -1
- package/dist/hooks/useCreatorCodes.d.ts.map +1 -1
- package/dist/hooks/useGiftCards.d.ts.map +1 -1
- package/dist/hooks/useGiftPackage.d.ts.map +1 -1
- package/dist/hooks/usePackage.d.ts.map +1 -1
- package/dist/hooks/usePackages.d.ts.map +1 -1
- package/dist/hooks/useWebstore.d.ts.map +1 -1
- package/dist/index.cjs +3 -1
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -0
- package/dist/provider/TebexProvider.d.ts +1 -1
- package/dist/provider/TebexProvider.d.ts.map +1 -1
- package/dist/provider/context.d.ts +6 -0
- package/dist/provider/context.d.ts.map +1 -1
- package/dist/provider/index.d.ts +1 -1
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/services/api.d.ts.map +1 -1
- package/dist/stores/basketStore.d.ts +9 -3
- package/dist/stores/basketStore.d.ts.map +1 -1
- package/dist/stores/userStore.d.ts +9 -3
- package/dist/stores/userStore.d.ts.map +1 -1
- package/dist/testing/TebexMockProvider.d.ts.map +1 -1
- package/dist/testing/index.cjs +3 -1
- package/dist/testing/index.cjs.map +1 -0
- package/dist/testing/index.js +3 -1
- package/dist/testing/index.js.map +1 -0
- package/dist/types/guards.d.ts.map +1 -1
- package/package.json +31 -28
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@neosianexus/super-tebex)
|
|
4
4
|
[](https://www.npmjs.com/package/@neosianexus/super-tebex)
|
|
5
5
|
[](https://github.com/NeosiaNexus/super-tebex)
|
|
6
|
-
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](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.
|
|
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) =>
|
|
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,
|
|
471
|
-
isSuccess,
|
|
472
|
-
isError,
|
|
473
|
-
isDefined,
|
|
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.
|
|
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: string;
|
|
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;
|
|
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;IAoJ9C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU;IAQrE;;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"}
|
package/dist/errors/codes.d.ts
CHANGED
|
@@ -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;
|
|
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,CAgW3C"}
|
|
@@ -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,
|
|
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,
|
|
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"}
|
|
@@ -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,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;
|
|
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,CA8J/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCoupons.d.ts","sourceRoot":"","sources":["../../src/hooks/useCoupons.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCoupons.d.ts","sourceRoot":"","sources":["../../src/hooks/useCoupons.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAyH7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCreatorCodes.d.ts","sourceRoot":"","sources":["../../src/hooks/useCreatorCodes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCreatorCodes.d.ts","sourceRoot":"","sources":["../../src/hooks/useCreatorCodes.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAG5D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,IAAI,qBAAqB,CAqHvD"}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"useGiftCards.d.ts","sourceRoot":"","sources":["../../src/hooks/useGiftCards.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIzD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,IAAI,kBAAkB,CA2HjD"}
|
|
@@ -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,
|
|
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,CAuHrD"}
|
|
@@ -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,
|
|
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,
|
|
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;
|
|
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 BA=new WeakMap,dA=(A)=>{var O=BA.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 BA.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:()=>h,useUser:()=>QA,useTebexContext:()=>g,useTebexConfig:()=>S,usePackages:()=>jA,usePackage:()=>WA,useGiftPackage:()=>PA,useGiftCards:()=>zA,useCreatorCodes:()=>HA,useCoupons:()=>$A,useCheckout:()=>ZA,useCategory:()=>JA,useCategories:()=>XA,useBasketStore:()=>j,useBasket:()=>I,tebexKeys:()=>R,ok:()=>KA,isTebexError:()=>GA,isTebexClientInitialized:()=>NA,isSuccess:()=>UA,isError:()=>YA,isDefined:()=>VA,getTebexClient:()=>H,err:()=>hA,TebexProvider:()=>FA,TebexErrorCode:()=>i,TebexError:()=>L});module.exports=dA(oA);var n=require("@tanstack/react-query"),T=require("react");var fA=require("tebex_headless"),b=null;function DA(A){b=new fA.TebexHeadless(A)}function H(){if(b===null)throw Error("Tebex client not initialized. Make sure you are using TebexProvider.");return b}function NA(){return b!==null}var u=require("react");var i;((P)=>{P.PROVIDER_NOT_FOUND="PROVIDER_NOT_FOUND";P.INVALID_CONFIG="INVALID_CONFIG";P.NOT_AUTHENTICATED="NOT_AUTHENTICATED";P.INVALID_USERNAME="INVALID_USERNAME";P.BASKET_NOT_FOUND="BASKET_NOT_FOUND";P.BASKET_CREATION_FAILED="BASKET_CREATION_FAILED";P.BASKET_EXPIRED="BASKET_EXPIRED";P.BASKET_EMPTY="BASKET_EMPTY";P.PACKAGE_NOT_FOUND="PACKAGE_NOT_FOUND";P.PACKAGE_OUT_OF_STOCK="PACKAGE_OUT_OF_STOCK";P.PACKAGE_ALREADY_OWNED="PACKAGE_ALREADY_OWNED";P.INVALID_QUANTITY="INVALID_QUANTITY";P.CATEGORY_NOT_FOUND="CATEGORY_NOT_FOUND";P.COUPON_INVALID="COUPON_INVALID";P.COUPON_EXPIRED="COUPON_EXPIRED";P.COUPON_ALREADY_USED="COUPON_ALREADY_USED";P.GIFTCARD_INVALID="GIFTCARD_INVALID";P.GIFTCARD_INSUFFICIENT_BALANCE="GIFTCARD_INSUFFICIENT_BALANCE";P.CREATOR_CODE_INVALID="CREATOR_CODE_INVALID";P.CHECKOUT_FAILED="CHECKOUT_FAILED";P.CHECKOUT_CANCELLED="CHECKOUT_CANCELLED";P.TEBEX_JS_NOT_LOADED="TEBEX_JS_NOT_LOADED";P.NETWORK_ERROR="NETWORK_ERROR";P.TIMEOUT="TIMEOUT";P.RATE_LIMITED="RATE_LIMITED";P.UNKNOWN="UNKNOWN"})(i||={});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=u.createContext(null);function g(){let A=u.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}=g();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=T.useMemo(()=>uA(O),[O]),[Y]=T.useState(()=>_??new n.QueryClient(iA));T.useState(()=>{DA(N.publicKey)});let X=T.useMemo(()=>({config:N,queryClient:Y}),[N,Y]);return LA.jsx(RA.Provider,{value:X,children:LA.jsx(n.QueryClientProvider,{client:Y,children:A})})}var f=require("@tanstack/react-query"),w=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 EA=require("zustand"),o=require("zustand/middleware"),j=EA.create()(o.subscribeWithSelector(o.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"),s=require("zustand/middleware");var h=MA.create()(s.subscribeWithSelector(s.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 q(A){return typeof A==="number"&&Number.isInteger(A)&&A>0}function m(A){if(typeof A!=="string")return!1;return/^[a-zA-Z0-9_]{3,16}$/.test(A)}function I(){let A=S(),O=f.useQueryClient(),_=j((G)=>G.basketIdent),N=j((G)=>G.setBasketIdent),Y=j((G)=>G.clearBasketIdent),X=h((G)=>G.username),J=f.useQuery({queryKey:R.basket(_),queryFn:async()=>{if(_===null)return null;return H().getBasket(_)},enabled:_!==null,retry:(G,V)=>{let z=L.fromUnknown(V);if(z.code==="BASKET_NOT_FOUND"||z.code==="BASKET_EXPIRED")return!1;return G<3}});w.useEffect(()=>{if(J.error!==null){let G=L.fromUnknown(J.error);if(G.code==="BASKET_NOT_FOUND"||G.code==="BASKET_EXPIRED")Y()}},[J.error,Y]);let W=w.useCallback(async()=>{if(_!==null)return _;if(X===null||X.length===0)throw new L("NOT_AUTHENTICATED","Username is required to create a basket");let V=await H().createMinecraftBasket(X,A.completeUrl,A.cancelUrl);return N(V.ident),V.ident},[_,X,A.completeUrl,A.cancelUrl,N]),U=f.useMutation({mutationFn:async(G)=>{let V=G.quantity??1;if(!q(V))throw new L("INVALID_QUANTITY","Quantity must be a positive integer");let z=await W(),K=H();return await K.addPackageToBasket(z,G.packageId,V,G.type,G.variableData),K.getBasket(z)},onMutate:async(G)=>{await O.cancelQueries({queryKey:R.basket(_)});let V=O.getQueryData(R.basket(_));if(V!==null&&V!==void 0){let z={id:G.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:G.quantity??1,price:0,gift_username_id:null,gift_username:null}},K=V.packages.findIndex((M)=>M.id===G.packageId),IA=K>=0?V.packages.map((M,P)=>P===K?{...M,in_basket:{...M.in_basket,quantity:M.in_basket.quantity+(G.quantity??1)}}:M):[...V.packages,z];O.setQueryData(R.basket(_),{...V,packages:IA})}return{previousBasket:V}},onError:(G,V,z)=>{if(z?.previousBasket!==void 0)O.setQueryData(R.basket(_),z.previousBasket);A.onError?.(L.fromUnknown(G))},onSuccess:(G)=>{O.setQueryData(R.basket(_),G)}}),$=f.useMutation({mutationFn:async(G)=>{if(_===null)throw new L("BASKET_NOT_FOUND");let V=H();return await V.removePackage(_,G),V.getBasket(_)},onMutate:async(G)=>{await O.cancelQueries({queryKey:R.basket(_)});let V=O.getQueryData(R.basket(_));if(V!==null&&V!==void 0)O.setQueryData(R.basket(_),{...V,packages:V.packages.filter((z)=>z.id!==G)});return{previousBasket:V}},onError:(G,V,z)=>{if(z?.previousBasket!==void 0)O.setQueryData(R.basket(_),z.previousBasket);A.onError?.(L.fromUnknown(G))},onSuccess:(G)=>{O.setQueryData(R.basket(_),G)}}),D=f.useMutation({mutationFn:async(G)=>{if(!q(G.quantity))throw new L("INVALID_QUANTITY","Quantity must be a positive integer");if(_===null)throw new L("BASKET_NOT_FOUND");let V=H();return await V.updateQuantity(_,G.packageId,G.quantity),V.getBasket(_)},onMutate:async(G)=>{await O.cancelQueries({queryKey:R.basket(_)});let V=O.getQueryData(R.basket(_));if(V!==null&&V!==void 0)O.setQueryData(R.basket(_),{...V,packages:V.packages.map((z)=>z.id===G.packageId?{...z,in_basket:{...z.in_basket,quantity:G.quantity}}:z)});return{previousBasket:V}},onError:(G,V,z)=>{if(z?.previousBasket!==void 0)O.setQueryData(R.basket(_),z.previousBasket);A.onError?.(L.fromUnknown(G))},onSuccess:(G)=>{O.setQueryData(R.basket(_),G)}}),F=w.useCallback(()=>{Y(),O.removeQueries({queryKey:R.baskets()})},[Y,O]),Z=J.data??null,Q=w.useMemo(()=>Z?.packages??[],[Z?.packages]),AA=w.useMemo(()=>Q.reduce((G,V)=>G+V.in_basket.quantity,0),[Q]),OA=w.useMemo(()=>Z?.total_price??0,[Z]),v=w.useMemo(()=>J.error!==null?L.fromUnknown(J.error):null,[J.error]),E=w.useCallback(async(G)=>{await U.mutateAsync(G)},[U]),B=w.useCallback(async(G)=>{await $.mutateAsync(G)},[$]),C=w.useCallback(async(G)=>{await D.mutateAsync(G)},[D]);return{basket:Z,data:Z,basketIdent:_,packages:Q,isLoading:J.isLoading,isFetching:J.isFetching,isAddingPackage:U.isPending,isRemovingPackage:$.isPending,isUpdatingQuantity:D.isPending,error:v,errorCode:v?.code??null,addPackage:E,removePackage:B,updateQuantity:C,clearBasket:F,refetch:J.refetch,itemCount:AA,total:OA,isEmpty:Q.length===0}}var TA=require("@tanstack/react-query"),p=require("react");function XA(A={}){let{includePackages:O=!0,enabled:_=!0}=A,N=TA.useQuery({queryKey:R.categoriesList(O),queryFn:async()=>{return H().getCategories(O)},enabled:_}),Y=p.useMemo(()=>N.error!==null?L.fromUnknown(N.error):null,[N.error]),X=p.useMemo(()=>(U)=>N.data?.find(($)=>$.name.toLowerCase()===U.toLowerCase()),[N.data]),J=p.useMemo(()=>(U)=>N.data?.find(($)=>$.id===U),[N.data]),W=p.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:X,getById:J,getBySlug:W}}var qA=require("@tanstack/react-query"),vA=require("react");function JA(A){let{id:O,enabled:_=!0}=A,N=qA.useQuery({queryKey:R.category(O),queryFn:async()=>{return H().getCategory(O)},enabled:_}),Y=vA.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 CA=require("@tanstack/react-query"),a=require("react");function ZA(A={}){let{basket:O,basketIdent:_,clearBasket:N,isEmpty:Y}=I(),X=S(),J=CA.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.9.0.js"></script> to your page.');return new Promise((D,F)=>{let Z=$.checkout,Q=!1,AA=()=>{if(Q)return;Q=!0,C(),N(),A.onSuccess?.(),D()},OA=(z)=>{if(Q)return;Q=!0,C();let K=new L("CHECKOUT_FAILED",String(z));A.onError?.(K),X.onError?.(K),F(K)},v=()=>{if(Q)return;Q=!0,C(),A.onClose?.(),D()},E=null,B=null,C=()=>{if(E!==null)E.disconnect(),E=null;if(B!==null)clearTimeout(B),B=null},G=()=>document.querySelector('iframe[src*="tebex"]')??document.querySelector('[class*="tebex-js"]')??document.querySelector("tebex-checkout[open]"),V=()=>{let z=!1,K=()=>{if(Q)return;if(G()!==null)z=!0;else if(z)v()};if(E=new MutationObserver(()=>{if(Q)return;if(B!==null)clearTimeout(B);B=setTimeout(K,50)}),E.observe(document.body,{childList:!0,subtree:!0}),G()!==null)z=!0};Z.init({ident:_}),Z.on("payment:complete",AA),Z.on("payment:error",OA),Z.on("close",v),Z.launch(),V()})}}),W=a.useCallback(async()=>{await J.mutateAsync()},[J]),U=a.useMemo(()=>J.error!==null?L.fromUnknown(J.error):null,[J.error]);return{launch:W,isLaunching:J.isPending,error:U,errorCode:U?.code??null,canCheckout:O!==null&&!Y,checkoutUrl:O?.links.checkout??null}}var k=require("@tanstack/react-query"),l=require("react");function $A(){let{basket:A}=I(),O=j((D)=>D.basketIdent),_=k.useQueryClient(),N=S(),Y=k.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,Z)=>{if(Z?.previousBasket!==void 0)_.setQueryData(R.basket(O),Z.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),X=k.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((Z)=>Z.code!==D)});return{previousBasket:F}},onError:(D,F,Z)=>{if(Z?.previousBasket!==void 0)_.setQueryData(R.basket(O),Z.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),J=l.useCallback(async(D)=>{await Y.mutateAsync(D)},[Y]),W=l.useCallback(async(D)=>{await X.mutateAsync(D)},[X]),U=Y.error??X.error,$=l.useMemo(()=>U!==null?L.fromUnknown(U):null,[U]);return{coupons:A?.coupons??[],apply:J,remove:W,isApplying:Y.isPending,isRemoving:X.isPending,error:$,errorCode:$?.code??null}}var y=require("@tanstack/react-query"),x=require("react");function HA(){let{basket:A}=I(),O=j((D)=>D.basketIdent),_=y.useQueryClient(),N=S(),Y=y.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,Z)=>{if(Z?.previousBasket!==void 0)_.setQueryData(R.basket(O),Z.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),X=y.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,Z)=>{if(Z?.previousBasket!==void 0)_.setQueryData(R.basket(O),Z.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),J=x.useCallback(async(D)=>{await Y.mutateAsync(D)},[Y]),W=x.useCallback(async()=>{await X.mutateAsync()},[X]),U=Y.error??X.error,$=x.useMemo(()=>U!==null?L.fromUnknown(U):null,[U]);return{creatorCode:A?.creator_code??null,apply:J,remove:W,isApplying:Y.isPending,isRemoving:X.isPending,error:$,errorCode:$?.code??null}}var c=require("@tanstack/react-query"),d=require("react");function zA(){let{basket:A}=I(),O=j((D)=>D.basketIdent),_=c.useQueryClient(),N=S(),Y=c.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,Z)=>{if(Z?.previousBasket!==void 0)_.setQueryData(R.basket(O),Z.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),X=c.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((Z)=>Z.card_number!==D)});return{previousBasket:F}},onError:(D,F,Z)=>{if(Z?.previousBasket!==void 0)_.setQueryData(R.basket(O),Z.previousBasket);N.onError?.(L.fromUnknown(D))},onSuccess:(D)=>{_.setQueryData(R.basket(O),D)}}),J=d.useCallback(async(D)=>{await Y.mutateAsync(D)},[Y]),W=d.useCallback(async(D)=>{await X.mutateAsync(D)},[X]),U=Y.error??X.error,$=d.useMemo(()=>U!==null?L.fromUnknown(U):null,[U]);return{giftCards:A?.giftcards??[],apply:J,remove:W,isApplying:Y.isPending,isRemoving:X.isPending,error:$,errorCode:$?.code??null}}var t=require("@tanstack/react-query"),r=require("react");function PA(){let A=j((U)=>U.basketIdent),O=j((U)=>U.setBasketIdent),_=h((U)=>U.username),N=t.useQueryClient(),Y=S(),X=t.useMutation({mutationFn:async(U)=>{if(_===null||_.length===0)throw new L("NOT_AUTHENTICATED","Username is required to gift a package");if(!m(U.targetUsername))throw new L("INVALID_USERNAME","Target username must be 3-16 alphanumeric characters");let $=U.quantity??1;if(!q($))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)}}),J=r.useCallback(async(U)=>{await X.mutateAsync(U)},[X]),W=r.useMemo(()=>X.error!==null?L.fromUnknown(X.error):null,[X.error]);return{gift:J,isGifting:X.isPending,error:W,errorCode:W?.code??null}}var gA=require("@tanstack/react-query"),mA=require("react");function WA(A){let{id:O,enabled:_=!0}=A,N=gA.useQuery({queryKey:R.package(O),queryFn:async()=>{return H().getPackage(O)},enabled:_}),Y=mA.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 pA=require("@tanstack/react-query"),e=require("react");function jA(A={}){let{categoryId:O,enabled:_=!0}=A,N=pA.useQuery({queryKey:R.packagesList(O),queryFn:async()=>{let W=H();if(O!==void 0)return(await W.getCategory(O)).packages;let U=await W.getCategories(!0),$=[];for(let D of U)$.push(...D.packages);return $},enabled:_}),Y=e.useMemo(()=>N.error!==null?L.fromUnknown(N.error):null,[N.error]),X=e.useMemo(()=>(W)=>N.data?.find((U)=>U.id===W),[N.data]),J=e.useMemo(()=>(W)=>N.data?.find((U)=>U.name.toLowerCase()===W.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:X,getByName:J}}var SA=require("react");function QA(){let A=h((J)=>J.username),O=h((J)=>J.setUsername),_=h((J)=>J.clearUsername),N=SA.useCallback((J)=>{let W=J.trim();if(m(W))return O(W),!0;return!1},[O]),Y=SA.useCallback(()=>{_()},[_]),X=A!==null&&A.length>0;return{username:A,setUsername:N,clearUsername:Y,isAuthenticated:X}}var kA=require("@tanstack/react-query"),lA=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=kA.useQuery({queryKey:R.webstore(),queryFn:async()=>{let N=await H().getWebstore();return nA(N)},staleTime:300000}),O=lA.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 h=(b=>(b.PROVIDER_NOT_FOUND="PROVIDER_NOT_FOUND",b.INVALID_CONFIG="INVALID_CONFIG",b.NOT_AUTHENTICATED="NOT_AUTHENTICATED",b.INVALID_USERNAME="INVALID_USERNAME",b.BASKET_NOT_FOUND="BASKET_NOT_FOUND",b.BASKET_CREATION_FAILED="BASKET_CREATION_FAILED",b.BASKET_EXPIRED="BASKET_EXPIRED",b.BASKET_EMPTY="BASKET_EMPTY",b.PACKAGE_NOT_FOUND="PACKAGE_NOT_FOUND",b.PACKAGE_OUT_OF_STOCK="PACKAGE_OUT_OF_STOCK",b.PACKAGE_ALREADY_OWNED="PACKAGE_ALREADY_OWNED",b.INVALID_QUANTITY="INVALID_QUANTITY",b.CATEGORY_NOT_FOUND="CATEGORY_NOT_FOUND",b.COUPON_INVALID="COUPON_INVALID",b.COUPON_EXPIRED="COUPON_EXPIRED",b.COUPON_ALREADY_USED="COUPON_ALREADY_USED",b.GIFTCARD_INVALID="GIFTCARD_INVALID",b.GIFTCARD_INSUFFICIENT_BALANCE="GIFTCARD_INSUFFICIENT_BALANCE",b.CREATOR_CODE_INVALID="CREATOR_CODE_INVALID",b.CHECKOUT_FAILED="CHECKOUT_FAILED",b.CHECKOUT_CANCELLED="CHECKOUT_CANCELLED",b.TEBEX_JS_NOT_LOADED="TEBEX_JS_NOT_LOADED",b.NETWORK_ERROR="NETWORK_ERROR",b.TIMEOUT="TIMEOUT",b.RATE_LIMITED="RATE_LIMITED",b.SERVER_ERROR="SERVER_ERROR",b.FORBIDDEN="FORBIDDEN",b.VALIDATION_ERROR="VALIDATION_ERROR",b.NOT_FOUND="NOT_FOUND",b.BASKET_LOCKED="BASKET_LOCKED",b.PACKAGE_DISABLED="PACKAGE_DISABLED",b.UNKNOWN="UNKNOWN",b))(h||{});var c=class e extends Error{code;cause;constructor(t,n,r){super(n??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 n=t.response;if(n&&typeof n.status=="number")return n.status}if("status"in t&&typeof t.status=="number")return t.status}return null}static fromUnknown(t){if(t instanceof e)return t;let n=t instanceof Error?t.message:String(t),r=e.extractStatusCode(t);if(r!==null)switch(r){case 400:return new e("VALIDATION_ERROR",n,t);case 401:case 403:return new e("FORBIDDEN",n,t);case 404:{let i=n.toLowerCase();return i.includes("basket")?new e("BASKET_NOT_FOUND",n,t):i.includes("package")?new e("PACKAGE_NOT_FOUND",n,t):i.includes("category")?new e("CATEGORY_NOT_FOUND",n,t):new e("NOT_FOUND",n,t)}case 408:return new e("TIMEOUT",n,t);case 409:return new e("BASKET_LOCKED",n,t);case 410:return new e("BASKET_EXPIRED",n,t);case 422:{let i=n.toLowerCase();return i.includes("coupon")&&i.includes("already")?new e("COUPON_ALREADY_USED",n,t):i.includes("coupon")&&i.includes("invalid")?new e("COUPON_INVALID",n,t):i.includes("coupon")&&i.includes("expired")?new e("COUPON_EXPIRED",n,t):i.includes("gift")&&i.includes("invalid")?new e("GIFTCARD_INVALID",n,t):i.includes("gift")&&i.includes("balance")?new e("GIFTCARD_INSUFFICIENT_BALANCE",n,t):i.includes("creator")&&i.includes("invalid")?new e("CREATOR_CODE_INVALID",n,t):i.includes("locked")||i.includes("lock")?new e("BASKET_LOCKED",n,t):i.includes("disabled")?new e("PACKAGE_DISABLED",n,t):i.includes("out of stock")||i.includes("stock")?new e("PACKAGE_OUT_OF_STOCK",n,t):i.includes("already own")?new e("PACKAGE_ALREADY_OWNED",n,t):new e("VALIDATION_ERROR",n,t)}case 423:return new e("BASKET_LOCKED",n,t);case 429:return new e("RATE_LIMITED",n,t);case 500:case 502:case 503:return new e("SERVER_ERROR",n,t);case 504:return new e("TIMEOUT",n,t)}if(t instanceof Error){if(t.name==="AbortError")return new e("TIMEOUT",n,t);if("code"in t){let m=t.code;if(typeof m=="string"){if(m==="ERR_NETWORK"||m==="ERR_FR_TOO_MANY_REDIRECTS")return new e("NETWORK_ERROR",n,t);if(m==="ECONNABORTED"||m==="ERR_CANCELED")return new e("TIMEOUT",n,t)}}let i=n.toLowerCase();return i.includes("network")||i.includes("fetch")||i.includes("load failed")||i.includes("enotfound")||i.includes("econnreset")||i.includes("econnrefused")||i.includes("econnaborted")||i.includes("err_network")?new e("NETWORK_ERROR",n,t):i.includes("timeout")||i.includes("etimedout")?new e("TIMEOUT",n,t):i.includes("rate limit")||i.includes("429")?new e("RATE_LIMITED",n,t):i.includes("basket")&&i.includes("not found")?new e("BASKET_NOT_FOUND",n,t):i.includes("package")&&i.includes("not found")?new e("PACKAGE_NOT_FOUND",n,t):i.includes("coupon")&&i.includes("invalid")?new e("COUPON_INVALID",n,t):i.includes("coupon")&&i.includes("expired")?new e("COUPON_EXPIRED",n,t):i.includes("gift")&&i.includes("invalid")?new e("GIFTCARD_INVALID",n,t):new e("UNKNOWN",n,t)}return new e("UNKNOWN",n)}static fromJSON(t){let r=Object.values(h).includes(t.code)?t.code:"UNKNOWN";return new e(r,t.message??t.code)}toJSON(){return {name:this.name,code:this.code,message:this.message,...this.cause instanceof Error?{cause:this.cause.message}:{}}}};var M=null;function H(e){let t=e.trim();if(t.length===0)throw new c("INVALID_CONFIG","publicKey must be a non-empty string");M=new tebex_headless.TebexHeadless(t);}function T(){if(M===null)throw new c("PROVIDER_NOT_FOUND","Tebex client not initialized. Ensure TebexProvider wraps your component tree.");return M}function $(){return M!==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=>{if(typeof e=="object"&&e!==null&&"basketIdent"in e){let t=e;return {basketIdent:typeof t.basketIdent=="string"?t.basketIdent:null}}return {basketIdent:null}},onRehydrateStorage:()=>(e,t)=>{t!==void 0&&console.warn("[tebex] Failed to rehydrate basket store:",t);}})));var O=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=>{if(typeof e=="object"&&e!==null&&"username"in e){let t=e;return {username:typeof t.username=="string"?t.username:null}}return {username:null}},onRehydrateStorage:()=>(e,t)=>{t!==void 0&&console.warn("[tebex] Failed to rehydrate user store:",t);}})));var Y=react.createContext(null);function F(){let e=react.useContext(Y);if(e===null)throw new c("PROVIDER_NOT_FOUND","useTebexContext must be used within TebexProvider or TebexMockProvider");return e}function I(){let{config:e}=F();return e}function X(){let{isHydrated:e}=F();return e}var qe={defaultOptions:{queries:{staleTime:60*1e3,gcTime:300*1e3,retry:3,retryDelay:e=>Math.min(1e3*2**e,3e4),refetchOnWindowFocus:false,refetchOnReconnect:true},mutations:{retry:false}}};function Ge(e){if(typeof e.publicKey!="string"||e.publicKey.trim().length===0)throw new c("INVALID_CONFIG","publicKey must be a non-empty string");if(typeof e.baseUrl!="string"||e.baseUrl.trim().length===0)throw new c("INVALID_CONFIG","baseUrl must be a non-empty string");let t=e.baseUrl.replace(/\/$/,""),n=e.urls?.complete??"/shop/complete",r=e.urls?.cancel??"/shop/cancel";return {publicKey:e.publicKey,baseUrl:t,completeUrl:`${t}${n}`,cancelUrl:`${t}${r}`,onError:e.onError}}function ne({children:e,config:t,queryClient:n}){let r=react.useMemo(()=>Ge(t),[t]),[i]=react.useState(()=>n??new reactQuery.QueryClient(qe));react.useState(()=>{H(r.publicKey);});let[m,p]=react.useState(()=>U.persist.hasHydrated()&&O.persist.hasHydrated()),x=react.useCallback(()=>{U.persist.hasHydrated()&&O.persist.hasHydrated()&&p(true);},[]);react.useEffect(()=>{if(m)return;let f=U.persist.onFinishHydration(x),g=O.persist.onFinishHydration(x);return U.persist.rehydrate(),O.persist.rehydrate(),x(),()=>{f(),g();}},[m,x]),react.useEffect(()=>{let f=g=>{(g.key==="tebex-basket-store"||g.key==="tebex-user-store")&&(U.persist.rehydrate(),O.persist.rehydrate());};return window.addEventListener("storage",f),()=>{window.removeEventListener("storage",f);}},[]);let y=react.useMemo(()=>({config:r,queryClient:i,isHydrated:m}),[r,i,m]);return jsxRuntime.jsx(Y.Provider,{value:y,children:jsxRuntime.jsx(reactQuery.QueryClientProvider,{client:i,children:e})})}var u={all:["tebex"],categories:()=>[...u.all,"categories"],categoriesList:e=>[...u.categories(),"list",{includePackages:e}],category:e=>[...u.categories(),"detail",e],packages:()=>[...u.all,"packages"],packagesList:e=>[...u.packages(),"list",{categoryId:e}],package:e=>[...u.packages(),"detail",e],baskets:()=>[...u.all,"baskets"],basket:e=>[...u.baskets(),e],webstore:()=>[...u.all,"webstore"]};function re(e){if(e instanceof c)return true;if(typeof e=="object"&&e!==null&&"name"in e&&"code"in e&&e.name==="TebexError"){let t=e.code;return typeof t=="string"&&Object.values(h).includes(t)}return false}function se(e){return e.success}function oe(e){return !e.success}function ae(e){return e!=null}function B(e){return typeof e=="string"&&e.length>0}function ie(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function D(e){return typeof e=="number"&&Number.isInteger(e)&&e>0}function S(e){return typeof e!="string"?false:/^[a-zA-Z0-9_]{3,16}$/.test(e)}var Q=null;function _(){let e=I(),t=reactQuery.useQueryClient(),n=U(l=>l.basketIdent),r=U(l=>l.setBasketIdent),i=U(l=>l.clearBasketIdent),m=react.useRef(n);m.current=n;let p=reactQuery.useQuery({queryKey:u.basket(n),queryFn:async()=>n===null?null:T().getBasket(n),enabled:n!==null,retry:(l,k)=>{let d=c.fromUnknown(k);return d.code==="BASKET_NOT_FOUND"||d.code==="BASKET_EXPIRED"?false:l<3}});react.useEffect(()=>{if(p.error!==null){let l=c.fromUnknown(p.error);(l.code==="BASKET_NOT_FOUND"||l.code==="BASKET_EXPIRED")&&(i(),t.removeQueries({queryKey:u.baskets()}));}},[p.error,i,t]);let x=react.useCallback(async()=>{let l=U.getState().basketIdent;return l!==null?l:(Q!==null||(Q=(async()=>{let d=O.getState().username;if(d===null||d.length===0)throw new c("NOT_AUTHENTICATED","Username is required to create a basket");let w=await T().createMinecraftBasket(d,e.completeUrl,e.cancelUrl);return r(w.ident),w.ident})().finally(()=>{Q=null;})),Q)},[e.completeUrl,e.cancelUrl,r]),y=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async l=>{let k=l.quantity??1;if(!D(k))throw new c("INVALID_QUANTITY","Quantity must be a positive integer");let d=async w=>{let A=T();return await A.addPackageToBasket(w,l.packageId,k,l.type,l.variableData),A.getBasket(w)},C=await x();try{return await d(C)}catch(w){let A=c.fromUnknown(w);if(A.code==="BASKET_NOT_FOUND"||A.code==="BASKET_EXPIRED"){i();let P=await x();return d(P)}throw w}},onMutate:async l=>{let k=m.current;if(k===null)return {previousBasket:void 0,ident:k};await t.cancelQueries({queryKey:u.basket(k)});let d=t.getQueryData(u.basket(k));if(d!=null){let C={id:l.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:l.quantity??1,price:0,gift_username_id:null,gift_username:null}},w=d.packages.findIndex(P=>P.id===l.packageId),A=w>=0?d.packages.map((P,Re)=>Re===w?{...P,in_basket:{...P.in_basket,quantity:P.in_basket.quantity+(l.quantity??1)}}:P):[...d.packages,C];t.setQueryData(u.basket(k),{...d,packages:A});}return {previousBasket:d,ident:k}},onError:(l,k,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(u.basket(d.ident),d.previousBasket),e.onError?.(c.fromUnknown(l));},onSuccess:(l,k,d)=>{let C=d.ident??m.current;C!==null&&t.setQueryData(u.basket(C),l);}}),f=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async l=>{let k=U.getState().basketIdent;if(k===null)throw new c("BASKET_NOT_FOUND");let d=T();return await d.removePackage(k,l),d.getBasket(k)},onMutate:async l=>{let k=m.current;if(k===null)return {previousBasket:void 0,ident:k};await t.cancelQueries({queryKey:u.basket(k)});let d=t.getQueryData(u.basket(k));return d!=null&&t.setQueryData(u.basket(k),{...d,packages:d.packages.filter(C=>C.id!==l)}),{previousBasket:d,ident:k}},onError:(l,k,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(u.basket(d.ident),d.previousBasket),e.onError?.(c.fromUnknown(l));},onSuccess:(l,k,d)=>{let C=d.ident??m.current;C!==null&&t.setQueryData(u.basket(C),l);}}),g=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async l=>{if(!D(l.quantity))throw new c("INVALID_QUANTITY","Quantity must be a positive integer");let k=U.getState().basketIdent;if(k===null)throw new c("BASKET_NOT_FOUND");let d=T();return await d.updateQuantity(k,l.packageId,l.quantity),d.getBasket(k)},onMutate:async l=>{let k=m.current;if(k===null)return {previousBasket:void 0,ident:k};await t.cancelQueries({queryKey:u.basket(k)});let d=t.getQueryData(u.basket(k));return d!=null&&t.setQueryData(u.basket(k),{...d,packages:d.packages.map(C=>C.id===l.packageId?{...C,in_basket:{...C.in_basket,quantity:l.quantity}}:C)}),{previousBasket:d,ident:k}},onError:(l,k,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(u.basket(d.ident),d.previousBasket),e.onError?.(c.fromUnknown(l));},onSuccess:(l,k,d)=>{let C=d.ident??m.current;C!==null&&t.setQueryData(u.basket(C),l);}}),s=react.useCallback(()=>{i(),t.removeQueries({queryKey:u.baskets()});},[i,t]),a=p.data??null,o=react.useMemo(()=>a?.packages??[],[a?.packages]),E=react.useMemo(()=>o.reduce((l,k)=>l+k.in_basket.quantity,0),[o]),V=react.useMemo(()=>a?.total_price??0,[a?.total_price]),v=p.error??y.error??f.error??g.error,K=react.useMemo(()=>v!==null?c.fromUnknown(v):null,[v]),N=react.useCallback(async l=>{await y.mutateAsync(l);},[y]),R=react.useCallback(async l=>{await f.mutateAsync(l);},[f]),W=react.useCallback(async l=>{await g.mutateAsync(l);},[g]);return {basket:a,data:a,basketIdent:n,packages:o,isLoading:p.isLoading,isFetching:p.isFetching,isAddingPackage:y.isPending,isRemovingPackage:f.isPending,isUpdatingQuantity:g.isPending,error:K,errorCode:K?.code??null,addPackage:N,removePackage:R,updateQuantity:W,clearBasket:s,refetch:p.refetch,itemCount:E,total:V,isEmpty:o.length===0}}function ue(e={}){let{includePackages:t=true,enabled:n=true}=e,r=reactQuery.useQuery({queryKey:u.categoriesList(t),queryFn:async()=>T().getCategories(t),enabled:n,staleTime:300*1e3}),i=react.useMemo(()=>r.error!==null?c.fromUnknown(r.error):null,[r.error]),m=react.useRef(r.data);m.current=r.data;let p=react.useCallback(f=>m.current?.find(g=>g.name.toLowerCase()===f.toLowerCase()),[]),x=react.useCallback(f=>m.current?.find(g=>g.id===f),[]),y=react.useCallback(f=>m.current?.find(g=>g.slug===f),[]);return {categories:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:i,errorCode:i?.code??null,refetch:r.refetch,getByName:p,getById:x,getBySlug:y}}function ce(e){let{id:t,enabled:n=true}=e,r=reactQuery.useQuery({queryKey:u.category(t),queryFn:async()=>T().getCategory(t),enabled:n&&t>0&&Number.isInteger(t),staleTime:300*1e3}),i=react.useMemo(()=>r.error!==null?c.fromUnknown(r.error):null,[r.error]);return {category:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:i,errorCode:i?.code??null,refetch:r.refetch}}var nt=1800*1e3,G=0;function le(e={}){let{basket:t,basketIdent:n,clearBasket:r,isEmpty:i}=_(),m=I(),p=reactQuery.useMutation({scope:{id:"basket-mutations"},retry:false,mutationFn:async()=>{if(n===null||t===null)throw new c("BASKET_NOT_FOUND");if(i)throw new c("BASKET_EMPTY","Basket is empty");if(typeof window>"u")throw new c("TEBEX_JS_NOT_LOADED","Cannot checkout on server side.");let f=window.Tebex;if(f===void 0)throw new c("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((g,s)=>{let a=f.checkout,o=false,E=++G,V=()=>{E!==G||o||(o=true,l(),r(),e.onSuccess?.(),g());},v=C=>{if(E!==G||o)return;o=true,l();let w=new c("CHECKOUT_FAILED",String(C));e.onError?.(w),m.onError?.(w),s(w);},K=()=>{E!==G||o||(o=true,l(),e.onClose?.(),g());},N=null,R=null,W=setTimeout(()=>{if(!o){o=true,l();let C=new c("TIMEOUT","Checkout session timed out");e.onError?.(C),m.onError?.(C),s(C);}},nt),l=()=>{clearTimeout(W),N!==null&&(N.disconnect(),N=null),R!==null&&(clearTimeout(R),R=null);},k=()=>document.querySelector('iframe[src*="tebex"]')??document.querySelector('[class*="tebex-js"]')??document.querySelector("tebex-checkout[open]"),d=()=>{let C=false,w=()=>{if(o)return;k()!==null?C=true:C&&K();};N=new MutationObserver(()=>{o||(R!==null&&clearTimeout(R),R=setTimeout(w,50));}),N.observe(document.body,{childList:true,subtree:true,attributes:true,attributeFilter:["open","style","class"]}),k()!==null&&(C=true);};a.init({ident:n}),a.on("payment:complete",V),a.on("payment:error",v),a.on("close",K),a.launch(),d();})}}),x=react.useCallback(async()=>{await p.mutateAsync();},[p]),y=react.useMemo(()=>p.error!==null?c.fromUnknown(p.error):null,[p.error]);return {launch:x,isLaunching:p.isPending,error:y,errorCode:y?.code??null,canCheckout:t!==null&&!i&&!p.isPending,checkoutUrl:t?.links.checkout??null}}function fe(){let{basket:e}=_(),t=U(s=>s.basketIdent),n=react.useRef(t);n.current=t;let r=reactQuery.useQueryClient(),i=I(),m=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async s=>{if(!B(s.trim()))throw new c("COUPON_INVALID","Coupon code must be a non-empty string");let a=n.current;if(a===null)throw new c("BASKET_NOT_FOUND");let o=T();return await o.apply(a,"coupons",{coupon_code:s}),o.getBasket(a)},onMutate:async s=>{let a=n.current;if(a===null)return;await r.cancelQueries({queryKey:u.basket(a)});let o=r.getQueryData(u.basket(a));return o!==void 0&&r.setQueryData(u.basket(a),{...o,coupons:[...o.coupons,{code:s}]}),{previousBasket:o,ident:a}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),p=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async s=>{if(!B(s.trim()))throw new c("COUPON_INVALID","Coupon code must be a non-empty string");let a=n.current;if(a===null)throw new c("BASKET_NOT_FOUND");let o=T();return await o.remove(a,"coupons",{coupon_code:s}),o.getBasket(a)},onMutate:async s=>{let a=n.current;if(a===null)return;await r.cancelQueries({queryKey:u.basket(a)});let o=r.getQueryData(u.basket(a));return o!==void 0&&r.setQueryData(u.basket(a),{...o,coupons:o.coupons.filter(E=>E.code!==s)}),{previousBasket:o,ident:a}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),x=react.useCallback(async s=>{await m.mutateAsync(s);},[m]),y=react.useCallback(async s=>{await p.mutateAsync(s);},[p]),f=m.error??p.error,g=react.useMemo(()=>f!==null?c.fromUnknown(f):null,[f]);return {coupons:e?.coupons??[],apply:x,remove:y,isApplying:m.isPending,isRemoving:p.isPending,error:g,errorCode:g?.code??null}}function ye(){let{basket:e}=_(),t=U(s=>s.basketIdent),n=react.useRef(t);n.current=t;let r=reactQuery.useQueryClient(),i=I(),m=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async s=>{if(!B(s.trim()))throw new c("CREATOR_CODE_INVALID","Creator code must be a non-empty string");let a=n.current;if(a===null)throw new c("BASKET_NOT_FOUND");let o=T();return await o.apply(a,"creator-codes",{creator_code:s}),o.getBasket(a)},onMutate:async s=>{let a=n.current;if(a===null)return;await r.cancelQueries({queryKey:u.basket(a)});let o=r.getQueryData(u.basket(a));return o!==void 0&&r.setQueryData(u.basket(a),{...o,creator_code:s}),{previousBasket:o,ident:a}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),p=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async()=>{let s=n.current;if(s===null)throw new c("BASKET_NOT_FOUND");let a=T();return await a.remove(s,"creator-codes",{creator_code:""}),a.getBasket(s)},onMutate:async()=>{let s=n.current;if(s===null)return;await r.cancelQueries({queryKey:u.basket(s)});let a=r.getQueryData(u.basket(s));return a!==void 0&&r.setQueryData(u.basket(s),{...a,creator_code:""}),{previousBasket:a,ident:s}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),x=react.useCallback(async s=>{await m.mutateAsync(s);},[m]),y=react.useCallback(async()=>{await p.mutateAsync();},[p]),f=m.error??p.error,g=react.useMemo(()=>f!==null?c.fromUnknown(f):null,[f]);return {creatorCode:e?.creator_code??null,apply:x,remove:y,isApplying:m.isPending,isRemoving:p.isPending,error:g,errorCode:g?.code??null}}function Ce(){let{basket:e}=_(),t=U(s=>s.basketIdent),n=react.useRef(t);n.current=t;let r=reactQuery.useQueryClient(),i=I(),m=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async s=>{if(!B(s.trim()))throw new c("GIFTCARD_INVALID","Gift card number must be a non-empty string");let a=n.current;if(a===null)throw new c("BASKET_NOT_FOUND");let o=T();return await o.apply(a,"giftcards",{card_number:s}),o.getBasket(a)},onMutate:async s=>{let a=n.current;if(a===null)return;await r.cancelQueries({queryKey:u.basket(a)});let o=r.getQueryData(u.basket(a));return o!==void 0&&r.setQueryData(u.basket(a),{...o,giftcards:[...o.giftcards,{card_number:s}]}),{previousBasket:o,ident:a}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),p=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async s=>{if(!B(s.trim()))throw new c("GIFTCARD_INVALID","Gift card number must be a non-empty string");let a=n.current;if(a===null)throw new c("BASKET_NOT_FOUND");let o=T();return await o.remove(a,"giftcards",{card_number:s}),o.getBasket(a)},onMutate:async s=>{let a=n.current;if(a===null)return;await r.cancelQueries({queryKey:u.basket(a)});let o=r.getQueryData(u.basket(a));return o!==void 0&&r.setQueryData(u.basket(a),{...o,giftcards:o.giftcards.filter(E=>E.card_number!==s)}),{previousBasket:o,ident:a}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),x=react.useCallback(async s=>{await m.mutateAsync(s);},[m]),y=react.useCallback(async s=>{await p.mutateAsync(s);},[p]),f=m.error??p.error,g=react.useMemo(()=>f!==null?c.fromUnknown(f):null,[f]);return {giftCards:e?.giftcards??[],apply:x,remove:y,isApplying:m.isPending,isRemoving:p.isPending,error:g,errorCode:g?.code??null}}function Te(){let e=U(y=>y.basketIdent),t=react.useRef(e);t.current=e;let n=U(y=>y.setBasketIdent),r=reactQuery.useQueryClient(),i=I(),m=reactQuery.useMutation({scope:{id:"basket-mutations"},mutationFn:async y=>{let f=O.getState().username;if(f===null||f.length===0)throw new c("NOT_AUTHENTICATED","Username is required to gift a package");if(!S(y.targetUsername))throw new c("INVALID_USERNAME","Target username must be 3-16 alphanumeric characters");let g=y.quantity??1;if(!D(g))throw new c("INVALID_QUANTITY","Quantity must be a positive integer");if(!D(y.packageId))throw new c("PACKAGE_NOT_FOUND","Package ID must be a positive integer");let s=T(),a=U.getState().basketIdent;return a===null&&(a=(await s.createMinecraftBasket(f,i.completeUrl,i.cancelUrl)).ident,n(a)),await s.addPackageToBasket(a,y.packageId,g,"single",{gift_username:y.targetUsername}),s.getBasket(a)},onMutate:async y=>{let f=t.current;if(f===null)return;await r.cancelQueries({queryKey:u.basket(f)});let g=r.getQueryData(u.basket(f));if(g!==void 0){let s={id:y.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:y.quantity??1,price:0,gift_username_id:null,gift_username:y.targetUsername}};r.setQueryData(u.basket(f),{...g,packages:[...g.packages,s]});}return {previousBasket:g,ident:f}},onError:(y,f,g)=>{g?.previousBasket!==void 0&&r.setQueryData(u.basket(g.ident),g.previousBasket),i.onError?.(c.fromUnknown(y));},onSuccess:(y,f,g)=>{let s=g?.ident??t.current;s!==null&&r.setQueryData(u.basket(s),y);}}),p=react.useCallback(async y=>{await m.mutateAsync(y);},[m]),x=react.useMemo(()=>m.error!==null?c.fromUnknown(m.error):null,[m.error]);return {gift:p,isGifting:m.isPending,error:x,errorCode:x?.code??null}}function Ee(e){let{id:t,enabled:n=true}=e,r=reactQuery.useQuery({queryKey:u.package(t),queryFn:async()=>T().getPackage(t),enabled:n&&t>0&&Number.isInteger(t),staleTime:300*1e3}),i=react.useMemo(()=>r.error!==null?c.fromUnknown(r.error):null,[r.error]);return {package:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:i,errorCode:i?.code??null,refetch:r.refetch}}function xe(e={}){let{categoryId:t,enabled:n=true}=e,r=reactQuery.useQuery({queryKey:u.packagesList(t),queryFn:async()=>{let y=T();if(t!==void 0)return (await y.getCategory(t)).packages;let f=await y.getCategories(true),g=[];for(let s of f)g.push(...s.packages);return g},enabled:n,staleTime:300*1e3}),i=react.useMemo(()=>r.error!==null?c.fromUnknown(r.error):null,[r.error]),m=react.useRef(r.data);m.current=r.data;let p=react.useCallback(y=>m.current?.find(f=>f.id===y),[]),x=react.useCallback(y=>m.current?.find(f=>f.name.toLowerCase()===y.toLowerCase()),[]);return {packages:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:i,errorCode:i?.code??null,refetch:r.refetch,getById:p,getByName:x}}function Oe(){let e=O(p=>p.username),t=O(p=>p.setUsername),n=O(p=>p.clearUsername),r=react.useCallback(p=>{let x=p.trim();return S(x)?(t(x),true):false},[t]),i=react.useCallback(()=>{n();},[n]),m=e!==null&&e.length>0;return {username:e,setUsername:r,clearUsername:i,isAuthenticated:m}}function wt(e){return typeof e=="object"&&e!==null&&"iso_4217"in e&&typeof e.iso_4217=="string"}function Ot(e){let t=e.currency,n;return wt(t)?n=t.iso_4217:typeof t=="string"?n=t:n="USD",{id:e.id,name:e.name,description:e.description,currency:n,domain:e.webstore_url,logo:typeof e.logo=="string"&&e.logo.length>0?e.logo:null}}function Ie(){let e=reactQuery.useQuery({queryKey:u.webstore(),queryFn:async()=>{let r=await T().getWebstore();return Ot(r)},staleTime:3e5}),t=react.useMemo(()=>e.error!==null?c.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 Be(e){return {success:true,data:e}}function _e(e){return {success:false,error:e}}
|
|
3
|
+
exports.TebexError=c;exports.TebexErrorCode=h;exports.TebexProvider=ne;exports.err=_e;exports.getTebexClient=T;exports.isDefined=ae;exports.isError=oe;exports.isNonEmptyString=B;exports.isPositiveInteger=D;exports.isPositiveNumber=ie;exports.isSuccess=se;exports.isTebexClientInitialized=$;exports.isTebexError=re;exports.isValidMinecraftUsername=S;exports.ok=Be;exports.tebexKeys=u;exports.useBasket=_;exports.useBasketStore=U;exports.useCategories=ue;exports.useCategory=ce;exports.useCheckout=le;exports.useCoupons=fe;exports.useCreatorCodes=ye;exports.useGiftCards=Ce;exports.useGiftPackage=Te;exports.usePackage=Ee;exports.usePackages=xe;exports.useTebexConfig=I;exports.useTebexContext=F;exports.useTebexHydrated=X;exports.useUser=Oe;exports.useUserStore=O;exports.useWebstore=Ie;//# sourceMappingURL=index.cjs.map
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|