@djust-b2b/djust-front-sdk 3.0.0-beta.2 → 3.0.0-beta.20
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 +51 -7
- package/dist/.tsbuildinfo +1 -0
- package/dist/.tsbuildinfo-esm +1 -0
- package/dist/client/create-client.d.ts +248 -0
- package/dist/client/create-client.d.ts.map +1 -0
- package/dist/client/index.d.ts +14 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/performance.d.ts +203 -0
- package/dist/client/performance.d.ts.map +1 -0
- package/dist/client/transport.d.ts +372 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/errors/base.d.ts +101 -0
- package/dist/errors/base.d.ts.map +1 -0
- package/dist/errors/classes/auth.error.d.ts +64 -0
- package/dist/errors/classes/auth.error.d.ts.map +1 -0
- package/dist/errors/classes/forbidden.error.d.ts +52 -0
- package/dist/errors/classes/forbidden.error.d.ts.map +1 -0
- package/dist/errors/classes/index.d.ts +17 -0
- package/dist/errors/classes/index.d.ts.map +1 -0
- package/dist/errors/classes/network.error.d.ts +63 -0
- package/dist/errors/classes/network.error.d.ts.map +1 -0
- package/dist/errors/classes/not-found.error.d.ts +58 -0
- package/dist/errors/classes/not-found.error.d.ts.map +1 -0
- package/dist/errors/classes/rate-limit.error.d.ts +49 -0
- package/dist/errors/classes/rate-limit.error.d.ts.map +1 -0
- package/dist/errors/classes/server.error.d.ts +63 -0
- package/dist/errors/classes/server.error.d.ts.map +1 -0
- package/dist/errors/classes/timeout.error.d.ts +64 -0
- package/dist/errors/classes/timeout.error.d.ts.map +1 -0
- package/dist/errors/classes/unexpected.error.d.ts +70 -0
- package/dist/errors/classes/unexpected.error.d.ts.map +1 -0
- package/dist/errors/classes/validation.error.d.ts +68 -0
- package/dist/errors/classes/validation.error.d.ts.map +1 -0
- package/dist/errors/codes.d.ts +111 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/compat.d.ts +99 -0
- package/dist/errors/compat.d.ts.map +1 -0
- package/dist/errors/factory.d.ts +33 -0
- package/dist/errors/factory.d.ts.map +1 -0
- package/dist/errors/guards.d.ts +142 -0
- package/dist/errors/guards.d.ts.map +1 -0
- package/dist/errors/index.d.ts +25 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/types.d.ts +100 -0
- package/dist/errors/types.d.ts.map +1 -0
- package/dist/helpers/index.d.ts +42 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/parameters-validation.d.ts +3 -0
- package/dist/helpers/parameters-validation.d.ts.map +1 -0
- package/dist/helpers/utils.d.ts +5 -0
- package/dist/helpers/utils.d.ts.map +1 -0
- package/dist/index.cjs +182 -0
- package/dist/index.d.ts +266 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +11611 -0
- package/dist/interfaces/index.d.ts +31 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/models/address.d.ts +61 -0
- package/dist/interfaces/models/address.d.ts.map +1 -0
- package/dist/interfaces/models/attribute.d.ts +31 -0
- package/dist/interfaces/models/attribute.d.ts.map +1 -0
- package/dist/interfaces/models/auth.d.ts +37 -0
- package/dist/interfaces/models/auth.d.ts.map +1 -0
- package/dist/interfaces/models/cart.d.ts +64 -0
- package/dist/interfaces/models/cart.d.ts.map +1 -0
- package/dist/interfaces/models/common.d.ts +68 -0
- package/dist/interfaces/models/common.d.ts.map +1 -0
- package/dist/interfaces/models/custom-field.d.ts +57 -0
- package/dist/interfaces/models/custom-field.d.ts.map +1 -0
- package/dist/interfaces/models/customer-account.d.ts +52 -0
- package/dist/interfaces/models/customer-account.d.ts.map +1 -0
- package/dist/interfaces/models/customer-organisation.d.ts +14 -0
- package/dist/interfaces/models/customer-organisation.d.ts.map +1 -0
- package/dist/interfaces/models/customer-user.d.ts +114 -0
- package/dist/interfaces/models/customer-user.d.ts.map +1 -0
- package/dist/interfaces/models/incident.d.ts +37 -0
- package/dist/interfaces/models/incident.d.ts.map +1 -0
- package/dist/interfaces/models/navigation-category.d.ts +22 -0
- package/dist/interfaces/models/navigation-category.d.ts.map +1 -0
- package/dist/interfaces/models/offer.d.ts +151 -0
- package/dist/interfaces/models/offer.d.ts.map +1 -0
- package/dist/interfaces/models/order.d.ts +701 -0
- package/dist/interfaces/models/order.d.ts.map +1 -0
- package/dist/interfaces/models/payment.d.ts +20 -0
- package/dist/interfaces/models/payment.d.ts.map +1 -0
- package/dist/interfaces/models/price.d.ts +6 -0
- package/dist/interfaces/models/price.d.ts.map +1 -0
- package/dist/interfaces/models/product.d.ts +243 -0
- package/dist/interfaces/models/product.d.ts.map +1 -0
- package/dist/interfaces/models/quote.d.ts +77 -0
- package/dist/interfaces/models/quote.d.ts.map +1 -0
- package/dist/interfaces/models/searchProduct.d.ts +128 -0
- package/dist/interfaces/models/searchProduct.d.ts.map +1 -0
- package/dist/interfaces/models/supplier.d.ts +72 -0
- package/dist/interfaces/models/supplier.d.ts.map +1 -0
- package/dist/services/attributes/attributes.service.d.ts +18 -0
- package/dist/services/attributes/attributes.service.d.ts.map +1 -0
- package/dist/services/attributes/definitions.d.ts +28 -0
- package/dist/services/attributes/definitions.d.ts.map +1 -0
- package/dist/services/attributes/endpoints.d.ts +12 -0
- package/dist/services/attributes/endpoints.d.ts.map +1 -0
- package/dist/services/attributes/index.d.ts +33 -0
- package/dist/services/attributes/index.d.ts.map +1 -0
- package/dist/services/attributes/module.d.ts +11 -0
- package/dist/services/attributes/module.d.ts.map +1 -0
- package/dist/services/attributes/types.d.ts +35 -0
- package/dist/services/attributes/types.d.ts.map +1 -0
- package/dist/services/auth/__mocks__/auth.mocks.d.ts +249 -0
- package/dist/services/auth/__mocks__/auth.mocks.d.ts.map +1 -0
- package/dist/services/auth/auth.service.d.ts +286 -0
- package/dist/services/auth/auth.service.d.ts.map +1 -0
- package/dist/services/auth/definitions.d.ts +69 -0
- package/dist/services/auth/definitions.d.ts.map +1 -0
- package/dist/services/auth/definitions.requests.d.ts +25 -0
- package/dist/services/auth/definitions.requests.d.ts.map +1 -0
- package/dist/services/auth/endpoints.d.ts +30 -0
- package/dist/services/auth/endpoints.d.ts.map +1 -0
- package/dist/services/auth/index.d.ts +232 -0
- package/dist/services/auth/index.d.ts.map +1 -0
- package/dist/services/auth/module.d.ts +11 -0
- package/dist/services/auth/module.d.ts.map +1 -0
- package/dist/services/auth/types.d.ts +124 -0
- package/dist/services/auth/types.d.ts.map +1 -0
- package/dist/services/base.service.d.ts +83 -0
- package/dist/services/base.service.d.ts.map +1 -0
- package/dist/services/cart/cart.service.d.ts +443 -0
- package/dist/services/cart/cart.service.d.ts.map +1 -0
- package/dist/services/cart/definitions.d.ts +84 -0
- package/dist/services/cart/definitions.d.ts.map +1 -0
- package/dist/services/cart/endpoints.d.ts +24 -0
- package/dist/services/cart/endpoints.d.ts.map +1 -0
- package/dist/services/cart/index.d.ts +330 -0
- package/dist/services/cart/index.d.ts.map +1 -0
- package/dist/services/cart/module.d.ts +11 -0
- package/dist/services/cart/module.d.ts.map +1 -0
- package/dist/services/cart/types.d.ts +236 -0
- package/dist/services/cart/types.d.ts.map +1 -0
- package/dist/services/commercial-order/commercial-order.service.d.ts +435 -0
- package/dist/services/commercial-order/commercial-order.service.d.ts.map +1 -0
- package/dist/services/commercial-order/definitions.d.ts +181 -0
- package/dist/services/commercial-order/definitions.d.ts.map +1 -0
- package/dist/services/commercial-order/endpoints.d.ts +28 -0
- package/dist/services/commercial-order/endpoints.d.ts.map +1 -0
- package/dist/services/commercial-order/index.d.ts +712 -0
- package/dist/services/commercial-order/index.d.ts.map +1 -0
- package/dist/services/commercial-order/module.d.ts +11 -0
- package/dist/services/commercial-order/module.d.ts.map +1 -0
- package/dist/services/commercial-order/types.d.ts +244 -0
- package/dist/services/commercial-order/types.d.ts.map +1 -0
- package/dist/services/custom-field/custom-field.service.d.ts +23 -0
- package/dist/services/custom-field/custom-field.service.d.ts.map +1 -0
- package/dist/services/custom-field/definitions.d.ts +107 -0
- package/dist/services/custom-field/definitions.d.ts.map +1 -0
- package/dist/services/custom-field/endpoints.d.ts +13 -0
- package/dist/services/custom-field/endpoints.d.ts.map +1 -0
- package/dist/services/custom-field/index.d.ts +115 -0
- package/dist/services/custom-field/index.d.ts.map +1 -0
- package/dist/services/custom-field/module.d.ts +11 -0
- package/dist/services/custom-field/module.d.ts.map +1 -0
- package/dist/services/custom-field/types.d.ts +51 -0
- package/dist/services/custom-field/types.d.ts.map +1 -0
- package/dist/services/customer-account/customer-account.service.d.ts +387 -0
- package/dist/services/customer-account/customer-account.service.d.ts.map +1 -0
- package/dist/services/customer-account/definitions.d.ts +164 -0
- package/dist/services/customer-account/definitions.d.ts.map +1 -0
- package/dist/services/customer-account/endpoints.d.ts +25 -0
- package/dist/services/customer-account/endpoints.d.ts.map +1 -0
- package/dist/services/customer-account/index.d.ts +656 -0
- package/dist/services/customer-account/index.d.ts.map +1 -0
- package/dist/services/customer-account/module.d.ts +11 -0
- package/dist/services/customer-account/module.d.ts.map +1 -0
- package/dist/services/customer-account/types.d.ts +253 -0
- package/dist/services/customer-account/types.d.ts.map +1 -0
- package/dist/services/customer-user/customer-user.service.d.ts +280 -0
- package/dist/services/customer-user/customer-user.service.d.ts.map +1 -0
- package/dist/services/customer-user/definitions.d.ts +84 -0
- package/dist/services/customer-user/definitions.d.ts.map +1 -0
- package/dist/services/customer-user/endpoints.d.ts +19 -0
- package/dist/services/customer-user/endpoints.d.ts.map +1 -0
- package/dist/services/customer-user/index.d.ts +394 -0
- package/dist/services/customer-user/index.d.ts.map +1 -0
- package/dist/services/customer-user/module.d.ts +11 -0
- package/dist/services/customer-user/module.d.ts.map +1 -0
- package/dist/services/customer-user/types.d.ts +118 -0
- package/dist/services/customer-user/types.d.ts.map +1 -0
- package/dist/services/factory.d.ts +104 -0
- package/dist/services/factory.d.ts.map +1 -0
- package/dist/services/incident/definitions.d.ts +85 -0
- package/dist/services/incident/definitions.d.ts.map +1 -0
- package/dist/services/incident/endpoints.d.ts +17 -0
- package/dist/services/incident/endpoints.d.ts.map +1 -0
- package/dist/services/incident/incident.service.d.ts +24 -0
- package/dist/services/incident/incident.service.d.ts.map +1 -0
- package/dist/services/incident/index.d.ts +270 -0
- package/dist/services/incident/index.d.ts.map +1 -0
- package/dist/services/incident/module.d.ts +11 -0
- package/dist/services/incident/module.d.ts.map +1 -0
- package/dist/services/incident/types.d.ts +116 -0
- package/dist/services/incident/types.d.ts.map +1 -0
- package/dist/services/logistic-order/definitions.d.ts +296 -0
- package/dist/services/logistic-order/definitions.d.ts.map +1 -0
- package/dist/services/logistic-order/endpoints.d.ts +44 -0
- package/dist/services/logistic-order/endpoints.d.ts.map +1 -0
- package/dist/services/logistic-order/index.d.ts +1338 -0
- package/dist/services/logistic-order/index.d.ts.map +1 -0
- package/dist/services/logistic-order/logistic-order.service.d.ts +62 -0
- package/dist/services/logistic-order/logistic-order.service.d.ts.map +1 -0
- package/dist/services/logistic-order/module.d.ts +11 -0
- package/dist/services/logistic-order/module.d.ts.map +1 -0
- package/dist/services/logistic-order/types.d.ts +411 -0
- package/dist/services/logistic-order/types.d.ts.map +1 -0
- package/dist/services/module.d.ts +64 -0
- package/dist/services/module.d.ts.map +1 -0
- package/dist/services/navigation-category/definitions.d.ts +31 -0
- package/dist/services/navigation-category/definitions.d.ts.map +1 -0
- package/dist/services/navigation-category/endpoints.d.ts +15 -0
- package/dist/services/navigation-category/endpoints.d.ts.map +1 -0
- package/dist/services/navigation-category/index.d.ts +114 -0
- package/dist/services/navigation-category/index.d.ts.map +1 -0
- package/dist/services/navigation-category/module.d.ts +11 -0
- package/dist/services/navigation-category/module.d.ts.map +1 -0
- package/dist/services/navigation-category/navigation-category.service.d.ts +148 -0
- package/dist/services/navigation-category/navigation-category.service.d.ts.map +1 -0
- package/dist/services/navigation-category/types.d.ts +51 -0
- package/dist/services/navigation-category/types.d.ts.map +1 -0
- package/dist/services/offer-inventories/definitions.d.ts +73 -0
- package/dist/services/offer-inventories/definitions.d.ts.map +1 -0
- package/dist/services/offer-inventories/endpoints.d.ts +16 -0
- package/dist/services/offer-inventories/endpoints.d.ts.map +1 -0
- package/dist/services/offer-inventories/index.d.ts +120 -0
- package/dist/services/offer-inventories/index.d.ts.map +1 -0
- package/dist/services/offer-inventories/module.d.ts +11 -0
- package/dist/services/offer-inventories/module.d.ts.map +1 -0
- package/dist/services/offer-inventories/offer-inventories.service.d.ts +26 -0
- package/dist/services/offer-inventories/offer-inventories.service.d.ts.map +1 -0
- package/dist/services/offer-inventories/types.d.ts +85 -0
- package/dist/services/offer-inventories/types.d.ts.map +1 -0
- package/dist/services/offer-prices/__mocks__/offer-prices.mocks.d.ts +109 -0
- package/dist/services/offer-prices/__mocks__/offer-prices.mocks.d.ts.map +1 -0
- package/dist/services/offer-prices/definitions.d.ts +24 -0
- package/dist/services/offer-prices/definitions.d.ts.map +1 -0
- package/dist/services/offer-prices/endpoints.d.ts +12 -0
- package/dist/services/offer-prices/endpoints.d.ts.map +1 -0
- package/dist/services/offer-prices/index.d.ts +36 -0
- package/dist/services/offer-prices/index.d.ts.map +1 -0
- package/dist/services/offer-prices/module.d.ts +11 -0
- package/dist/services/offer-prices/module.d.ts.map +1 -0
- package/dist/services/offer-prices/offer-prices.service.d.ts +18 -0
- package/dist/services/offer-prices/offer-prices.service.d.ts.map +1 -0
- package/dist/services/offer-prices/types.d.ts +33 -0
- package/dist/services/offer-prices/types.d.ts.map +1 -0
- package/dist/services/operation/definitions.d.ts +280 -0
- package/dist/services/operation/definitions.d.ts.map +1 -0
- package/dist/services/operation/endpoints.d.ts +18 -0
- package/dist/services/operation/endpoints.d.ts.map +1 -0
- package/dist/services/operation/index.d.ts +520 -0
- package/dist/services/operation/index.d.ts.map +1 -0
- package/dist/services/operation/module.d.ts +11 -0
- package/dist/services/operation/module.d.ts.map +1 -0
- package/dist/services/operation/operation.service.d.ts +32 -0
- package/dist/services/operation/operation.service.d.ts.map +1 -0
- package/dist/services/operation/types.d.ts +174 -0
- package/dist/services/operation/types.d.ts.map +1 -0
- package/dist/services/payment/definitions.d.ts +79 -0
- package/dist/services/payment/definitions.d.ts.map +1 -0
- package/dist/services/payment/endpoints.d.ts +16 -0
- package/dist/services/payment/endpoints.d.ts.map +1 -0
- package/dist/services/payment/index.d.ts +150 -0
- package/dist/services/payment/index.d.ts.map +1 -0
- package/dist/services/payment/module.d.ts +11 -0
- package/dist/services/payment/module.d.ts.map +1 -0
- package/dist/services/payment/payment.service.d.ts +224 -0
- package/dist/services/payment/payment.service.d.ts.map +1 -0
- package/dist/services/payment/types.d.ts +93 -0
- package/dist/services/payment/types.d.ts.map +1 -0
- package/dist/services/product/definitions.d.ts +150 -0
- package/dist/services/product/definitions.d.ts.map +1 -0
- package/dist/services/product/endpoints.d.ts +40 -0
- package/dist/services/product/endpoints.d.ts.map +1 -0
- package/dist/services/product/index.d.ts +388 -0
- package/dist/services/product/index.d.ts.map +1 -0
- package/dist/services/product/module.d.ts +11 -0
- package/dist/services/product/module.d.ts.map +1 -0
- package/dist/services/product/product.service.d.ts +452 -0
- package/dist/services/product/product.service.d.ts.map +1 -0
- package/dist/services/product/types.d.ts +344 -0
- package/dist/services/product/types.d.ts.map +1 -0
- package/dist/services/product-variant/definitions.d.ts +172 -0
- package/dist/services/product-variant/definitions.d.ts.map +1 -0
- package/dist/services/product-variant/endpoints.d.ts +15 -0
- package/dist/services/product-variant/endpoints.d.ts.map +1 -0
- package/dist/services/product-variant/index.d.ts +123 -0
- package/dist/services/product-variant/index.d.ts.map +1 -0
- package/dist/services/product-variant/module.d.ts +11 -0
- package/dist/services/product-variant/module.d.ts.map +1 -0
- package/dist/services/product-variant/product-variant.service.d.ts +21 -0
- package/dist/services/product-variant/product-variant.service.d.ts.map +1 -0
- package/dist/services/product-variant/types.d.ts +73 -0
- package/dist/services/product-variant/types.d.ts.map +1 -0
- package/dist/services/quote/definitions.d.ts +102 -0
- package/dist/services/quote/definitions.d.ts.map +1 -0
- package/dist/services/quote/endpoints.d.ts +20 -0
- package/dist/services/quote/endpoints.d.ts.map +1 -0
- package/dist/services/quote/index.d.ts +378 -0
- package/dist/services/quote/index.d.ts.map +1 -0
- package/dist/services/quote/module.d.ts +11 -0
- package/dist/services/quote/module.d.ts.map +1 -0
- package/dist/services/quote/quote.service.d.ts +346 -0
- package/dist/services/quote/quote.service.d.ts.map +1 -0
- package/dist/services/quote/types.d.ts +160 -0
- package/dist/services/quote/types.d.ts.map +1 -0
- package/dist/services/supplier/__mocks__/supplier-mocks.d.ts +49 -0
- package/dist/services/supplier/__mocks__/supplier-mocks.d.ts.map +1 -0
- package/dist/services/supplier/definitions.d.ts +30 -0
- package/dist/services/supplier/definitions.d.ts.map +1 -0
- package/dist/services/supplier/endpoints.d.ts +14 -0
- package/dist/services/supplier/endpoints.d.ts.map +1 -0
- package/dist/services/supplier/index.d.ts +102 -0
- package/dist/services/supplier/index.d.ts.map +1 -0
- package/dist/services/supplier/module.d.ts +11 -0
- package/dist/services/supplier/module.d.ts.map +1 -0
- package/dist/services/supplier/supplier.service.d.ts +20 -0
- package/dist/services/supplier/supplier.service.d.ts.map +1 -0
- package/dist/services/supplier/types.d.ts +58 -0
- package/dist/services/supplier/types.d.ts.map +1 -0
- package/dist/services/types.d.ts +81 -0
- package/dist/services/types.d.ts.map +1 -0
- package/dist/settings/fetch-instance.d.ts +30 -0
- package/dist/settings/fetch-instance.d.ts.map +1 -0
- package/package.json +12 -10
- package/dist/djust-b2b-djust-front-sdk-3.0.0-beta.2.tgz +0 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DJUST SDK Performance Utilities
|
|
3
|
+
* Production-grade performance optimizations for the SDK.
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Request deduplication (prevents duplicate concurrent requests)
|
|
7
|
+
* - Response caching with TTL
|
|
8
|
+
* - Connection keep-alive management
|
|
9
|
+
* - Request batching
|
|
10
|
+
* - Compression support
|
|
11
|
+
*
|
|
12
|
+
* @author DJUST Engineering Team
|
|
13
|
+
* @since 2.17.0
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Request deduplicator - prevents duplicate concurrent requests to the same endpoint.
|
|
17
|
+
* If a request is already in-flight, returns the same promise instead of making a new request.
|
|
18
|
+
*/
|
|
19
|
+
export declare class RequestDeduplicator {
|
|
20
|
+
private pendingRequests;
|
|
21
|
+
private readonly maxAge;
|
|
22
|
+
constructor(maxAgeMs?: number);
|
|
23
|
+
/**
|
|
24
|
+
* Creates a unique key for the request
|
|
25
|
+
*/
|
|
26
|
+
createKey(method: string, url: string, body?: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Executes a request with deduplication
|
|
29
|
+
*/
|
|
30
|
+
execute<T>(key: string, requestFn: () => Promise<T>): Promise<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Clears all pending requests
|
|
33
|
+
*/
|
|
34
|
+
clear(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Gets the number of pending requests
|
|
37
|
+
*/
|
|
38
|
+
get size(): number;
|
|
39
|
+
}
|
|
40
|
+
interface CacheOptions {
|
|
41
|
+
/** Maximum number of entries. Default: 100 */
|
|
42
|
+
maxSize?: number;
|
|
43
|
+
/** Default TTL in milliseconds. Default: 60000 (1 minute) */
|
|
44
|
+
defaultTTL?: number;
|
|
45
|
+
/** Enable stale-while-revalidate. Default: true */
|
|
46
|
+
staleWhileRevalidate?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* LRU Response Cache with TTL support.
|
|
50
|
+
* Supports ETag-based validation and stale-while-revalidate pattern.
|
|
51
|
+
*/
|
|
52
|
+
export declare class ResponseCache {
|
|
53
|
+
private cache;
|
|
54
|
+
private readonly maxSize;
|
|
55
|
+
private readonly defaultTTL;
|
|
56
|
+
private readonly staleWhileRevalidate;
|
|
57
|
+
private hits;
|
|
58
|
+
private misses;
|
|
59
|
+
constructor(options?: CacheOptions);
|
|
60
|
+
/**
|
|
61
|
+
* Gets a cached response
|
|
62
|
+
*/
|
|
63
|
+
get<T>(key: string): {
|
|
64
|
+
data: T;
|
|
65
|
+
stale: boolean;
|
|
66
|
+
} | null;
|
|
67
|
+
/**
|
|
68
|
+
* Sets a cached response
|
|
69
|
+
*/
|
|
70
|
+
set<T>(key: string, data: T, etag?: string, headers?: Record<string, string>): void;
|
|
71
|
+
/**
|
|
72
|
+
* Gets ETag for a cached entry
|
|
73
|
+
*/
|
|
74
|
+
getETag(key: string): string | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Invalidates a cache entry
|
|
77
|
+
*/
|
|
78
|
+
invalidate(key: string): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Invalidates entries matching a pattern
|
|
81
|
+
*/
|
|
82
|
+
invalidatePattern(pattern: RegExp): number;
|
|
83
|
+
/**
|
|
84
|
+
* Clears all cached entries
|
|
85
|
+
*/
|
|
86
|
+
clear(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Gets cache statistics
|
|
89
|
+
*/
|
|
90
|
+
getStats(): {
|
|
91
|
+
size: number;
|
|
92
|
+
hits: number;
|
|
93
|
+
misses: number;
|
|
94
|
+
hitRate: number;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
interface BatchConfig<TParams, TResult> {
|
|
98
|
+
/** Maximum batch size. Default: 20 */
|
|
99
|
+
maxSize?: number;
|
|
100
|
+
/** Maximum wait time in ms. Default: 10 */
|
|
101
|
+
maxWaitMs?: number;
|
|
102
|
+
/** Function to execute the batch */
|
|
103
|
+
executeBatch: (params: TParams[]) => Promise<TResult[]>;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Request batcher for combining multiple requests into a single batch request.
|
|
107
|
+
* Useful for endpoints that support bulk operations.
|
|
108
|
+
*/
|
|
109
|
+
export declare class RequestBatcher<TParams, TResult> {
|
|
110
|
+
private queue;
|
|
111
|
+
private timer;
|
|
112
|
+
private readonly maxSize;
|
|
113
|
+
private readonly maxWaitMs;
|
|
114
|
+
private readonly executeBatch;
|
|
115
|
+
constructor(config: BatchConfig<TParams, TResult>);
|
|
116
|
+
/**
|
|
117
|
+
* Adds a request to the batch queue
|
|
118
|
+
*/
|
|
119
|
+
add(params: TParams): Promise<TResult>;
|
|
120
|
+
/**
|
|
121
|
+
* Flushes the current batch
|
|
122
|
+
*/
|
|
123
|
+
private flush;
|
|
124
|
+
/**
|
|
125
|
+
* Gets the current queue size
|
|
126
|
+
*/
|
|
127
|
+
get queueSize(): number;
|
|
128
|
+
}
|
|
129
|
+
interface RequestMetrics {
|
|
130
|
+
url: string;
|
|
131
|
+
method: string;
|
|
132
|
+
durationMs: number;
|
|
133
|
+
status: number;
|
|
134
|
+
size: number;
|
|
135
|
+
cached: boolean;
|
|
136
|
+
timestamp: number;
|
|
137
|
+
}
|
|
138
|
+
interface PerformanceReport {
|
|
139
|
+
totalRequests: number;
|
|
140
|
+
averageDurationMs: number;
|
|
141
|
+
p50DurationMs: number;
|
|
142
|
+
p95DurationMs: number;
|
|
143
|
+
p99DurationMs: number;
|
|
144
|
+
cacheHitRate: number;
|
|
145
|
+
errorRate: number;
|
|
146
|
+
requestsPerSecond: number;
|
|
147
|
+
slowestEndpoints: Array<{
|
|
148
|
+
endpoint: string;
|
|
149
|
+
avgDurationMs: number;
|
|
150
|
+
}>;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Performance monitor for tracking SDK metrics.
|
|
154
|
+
*/
|
|
155
|
+
export declare class PerformanceMonitor {
|
|
156
|
+
private metrics;
|
|
157
|
+
private readonly maxMetrics;
|
|
158
|
+
private readonly windowMs;
|
|
159
|
+
private errors;
|
|
160
|
+
private cacheHits;
|
|
161
|
+
constructor(maxMetrics?: number, windowMs?: number);
|
|
162
|
+
/**
|
|
163
|
+
* Records a request metric
|
|
164
|
+
*/
|
|
165
|
+
record(metric: Omit<RequestMetrics, "timestamp">): void;
|
|
166
|
+
/**
|
|
167
|
+
* Gets performance report
|
|
168
|
+
*/
|
|
169
|
+
getReport(): PerformanceReport;
|
|
170
|
+
/**
|
|
171
|
+
* Clears all metrics
|
|
172
|
+
*/
|
|
173
|
+
clear(): void;
|
|
174
|
+
}
|
|
175
|
+
interface PoolConfig {
|
|
176
|
+
/** Maximum connections per host. Default: 6 */
|
|
177
|
+
maxConnectionsPerHost?: number;
|
|
178
|
+
/** Connection timeout in ms. Default: 10000 */
|
|
179
|
+
connectionTimeout?: number;
|
|
180
|
+
/** Keep-alive timeout in ms. Default: 30000 */
|
|
181
|
+
keepAliveTimeout?: number;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Creates fetch options optimized for connection pooling (Node.js)
|
|
185
|
+
*/
|
|
186
|
+
export declare function createPooledFetchOptions(config?: PoolConfig): RequestInit;
|
|
187
|
+
/**
|
|
188
|
+
* Checks if response is compressed
|
|
189
|
+
*/
|
|
190
|
+
export declare function isCompressed(headers: Headers): boolean;
|
|
191
|
+
/**
|
|
192
|
+
* Gets compression ratio from response headers
|
|
193
|
+
*/
|
|
194
|
+
export declare function getCompressionRatio(headers: Headers): number | null;
|
|
195
|
+
export declare function getDeduplicator(): RequestDeduplicator;
|
|
196
|
+
export declare function getCache(options?: CacheOptions): ResponseCache;
|
|
197
|
+
export declare function getMonitor(): PerformanceMonitor;
|
|
198
|
+
/**
|
|
199
|
+
* Resets all performance singletons (useful for testing)
|
|
200
|
+
*/
|
|
201
|
+
export declare function resetPerformanceUtils(): void;
|
|
202
|
+
export {};
|
|
203
|
+
//# sourceMappingURL=performance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/client/performance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DJUST SDK Transport Layer
|
|
3
|
+
* Production-grade HTTP transport with timeout, retry, caching, and performance optimizations.
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Request deduplication (prevents duplicate concurrent requests)
|
|
7
|
+
* - Response caching with TTL and ETag support
|
|
8
|
+
* - Performance monitoring and metrics
|
|
9
|
+
* - Retry with exponential backoff
|
|
10
|
+
* - Request timeout
|
|
11
|
+
* - Connection keep-alive
|
|
12
|
+
* - Compression support
|
|
13
|
+
*
|
|
14
|
+
* @since 2.17.0
|
|
15
|
+
*/
|
|
16
|
+
import { SDKError } from "../errors/base";
|
|
17
|
+
export interface TransportConfig {
|
|
18
|
+
baseUrl: string;
|
|
19
|
+
clientId: string;
|
|
20
|
+
apiKey: string;
|
|
21
|
+
/** Request timeout in milliseconds. Default: 30000 (30s) */
|
|
22
|
+
timeout?: number;
|
|
23
|
+
/** Enable strict error mode (throws SDKError instead of legacy Error). Default: false */
|
|
24
|
+
strictErrors?: boolean;
|
|
25
|
+
/** Retry configuration. Default: disabled */
|
|
26
|
+
retry?: RetryConfig;
|
|
27
|
+
/** Observability hooks. Default: no-op */
|
|
28
|
+
hooks?: TransportHooks;
|
|
29
|
+
/** Authentication lifecycle hooks for session management */
|
|
30
|
+
authHooks?: AuthHooks;
|
|
31
|
+
/** Debug mode - logs requests. Default: false */
|
|
32
|
+
debug?: boolean;
|
|
33
|
+
/** Performance configuration */
|
|
34
|
+
performance?: PerformanceConfig;
|
|
35
|
+
}
|
|
36
|
+
export interface PerformanceConfig {
|
|
37
|
+
/** Enable request deduplication for GET requests. Default: true */
|
|
38
|
+
deduplication?: boolean;
|
|
39
|
+
/** Deduplication window in ms. Default: 100 */
|
|
40
|
+
deduplicationWindowMs?: number;
|
|
41
|
+
/** Enable response caching for GET requests. Default: false */
|
|
42
|
+
cache?: boolean;
|
|
43
|
+
/** Cache max size. Default: 100 */
|
|
44
|
+
cacheMaxSize?: number;
|
|
45
|
+
/** Cache TTL in ms. Default: 60000 (1 minute) */
|
|
46
|
+
cacheTTL?: number;
|
|
47
|
+
/** Enable stale-while-revalidate. Default: true */
|
|
48
|
+
staleWhileRevalidate?: boolean;
|
|
49
|
+
/** Enable performance monitoring. Default: false */
|
|
50
|
+
monitoring?: boolean;
|
|
51
|
+
/** Enable compression (Accept-Encoding header). Default: true */
|
|
52
|
+
compression?: boolean;
|
|
53
|
+
/** Enable connection keep-alive. Default: true */
|
|
54
|
+
keepAlive?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface RetryConfig {
|
|
57
|
+
enabled: boolean;
|
|
58
|
+
maxAttempts?: number;
|
|
59
|
+
initialDelayMs?: number;
|
|
60
|
+
maxDelayMs?: number;
|
|
61
|
+
jitter?: number;
|
|
62
|
+
retryableStatuses?: number[];
|
|
63
|
+
}
|
|
64
|
+
export interface TransportHooks {
|
|
65
|
+
onRequestStart?: (context: RequestHookContext) => void | Promise<void>;
|
|
66
|
+
onRequestEnd?: (context: ResponseHookContext) => void | Promise<void>;
|
|
67
|
+
onError?: (context: ErrorHookContext) => void | Promise<void>;
|
|
68
|
+
onRetry?: (context: RetryHookContext) => void | Promise<void>;
|
|
69
|
+
/** Called when response is served from cache */
|
|
70
|
+
onCacheHit?: (context: CacheHitContext) => void | Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Authentication lifecycle hooks for session management.
|
|
74
|
+
*
|
|
75
|
+
* These hooks allow consumers to react to authentication events
|
|
76
|
+
* without coupling storage logic to the SDK.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const client = createDjustClient({
|
|
81
|
+
* // ...
|
|
82
|
+
* authHooks: {
|
|
83
|
+
* onLogin: (response) => {
|
|
84
|
+
* // Store tokens in cookies/localStorage
|
|
85
|
+
* setCookie('access_token', response.token.accessToken);
|
|
86
|
+
* },
|
|
87
|
+
* onTokenRefresh: (response) => {
|
|
88
|
+
* // Update stored tokens
|
|
89
|
+
* setCookie('access_token', response.token.accessToken);
|
|
90
|
+
* },
|
|
91
|
+
* onLogout: () => {
|
|
92
|
+
* // Clear stored tokens
|
|
93
|
+
* deleteCookie('access_token');
|
|
94
|
+
* },
|
|
95
|
+
* onAuthFailure: (error) => {
|
|
96
|
+
* // Redirect to login
|
|
97
|
+
* router.push('/login?expired=true');
|
|
98
|
+
* },
|
|
99
|
+
* },
|
|
100
|
+
* });
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export interface AuthHooks {
|
|
104
|
+
/**
|
|
105
|
+
* Called after successful login.
|
|
106
|
+
* Use this to store tokens and user data.
|
|
107
|
+
*/
|
|
108
|
+
onLogin?: (context: LoginHookContext) => void | Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Called after successful token refresh.
|
|
111
|
+
* Use this to update stored tokens.
|
|
112
|
+
*/
|
|
113
|
+
onTokenRefresh?: (context: TokenRefreshHookContext) => void | Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* Called after logout (successful or not).
|
|
116
|
+
* Use this to clear stored tokens and redirect.
|
|
117
|
+
*/
|
|
118
|
+
onLogout?: (context: LogoutHookContext) => void | Promise<void>;
|
|
119
|
+
/**
|
|
120
|
+
* Called when authentication fails (401, invalid token, refresh failure).
|
|
121
|
+
* Use this to handle session expiration.
|
|
122
|
+
*/
|
|
123
|
+
onAuthFailure?: (context: AuthFailureHookContext) => void | Promise<void>;
|
|
124
|
+
/**
|
|
125
|
+
* Called before any authenticated request.
|
|
126
|
+
* Use this to implement custom token refresh logic.
|
|
127
|
+
* Return a new access token or undefined to use the current one.
|
|
128
|
+
*/
|
|
129
|
+
onBeforeAuthenticatedRequest?: (context: BeforeAuthRequestContext) => string | undefined | Promise<string | undefined>;
|
|
130
|
+
}
|
|
131
|
+
export interface LoginHookContext {
|
|
132
|
+
/** The login response from the API */
|
|
133
|
+
response: {
|
|
134
|
+
token: {
|
|
135
|
+
accessToken: string;
|
|
136
|
+
refreshToken: string;
|
|
137
|
+
expiresAt: number;
|
|
138
|
+
};
|
|
139
|
+
user?: {
|
|
140
|
+
id: string;
|
|
141
|
+
email: string;
|
|
142
|
+
[key: string]: unknown;
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
/** Request ID for tracing */
|
|
146
|
+
requestId: string;
|
|
147
|
+
/** Request duration in ms */
|
|
148
|
+
durationMs: number;
|
|
149
|
+
}
|
|
150
|
+
export interface TokenRefreshHookContext {
|
|
151
|
+
/** The refresh response from the API */
|
|
152
|
+
response: {
|
|
153
|
+
token: {
|
|
154
|
+
accessToken: string;
|
|
155
|
+
refreshToken: string;
|
|
156
|
+
expiresAt: number;
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
/** Whether this was an automatic refresh (vs manual) */
|
|
160
|
+
automatic: boolean;
|
|
161
|
+
/** Request ID for tracing */
|
|
162
|
+
requestId: string;
|
|
163
|
+
}
|
|
164
|
+
export interface LogoutHookContext {
|
|
165
|
+
/** Whether logout was successful */
|
|
166
|
+
success: boolean;
|
|
167
|
+
/** Error if logout failed */
|
|
168
|
+
error?: Error;
|
|
169
|
+
/** Request ID for tracing */
|
|
170
|
+
requestId: string;
|
|
171
|
+
}
|
|
172
|
+
export interface AuthFailureHookContext {
|
|
173
|
+
/** The error that caused the failure */
|
|
174
|
+
error: Error | SDKError;
|
|
175
|
+
/** HTTP status code if available */
|
|
176
|
+
httpStatus?: number;
|
|
177
|
+
/** The endpoint that failed */
|
|
178
|
+
endpoint: string;
|
|
179
|
+
/** Whether the SDK will attempt a token refresh */
|
|
180
|
+
willAttemptRefresh: boolean;
|
|
181
|
+
/** Request ID for tracing */
|
|
182
|
+
requestId: string;
|
|
183
|
+
}
|
|
184
|
+
export interface BeforeAuthRequestContext {
|
|
185
|
+
/** Current access token (may be expired) */
|
|
186
|
+
currentToken?: string;
|
|
187
|
+
/** The endpoint being called */
|
|
188
|
+
endpoint: string;
|
|
189
|
+
/** Request ID for tracing */
|
|
190
|
+
requestId: string;
|
|
191
|
+
}
|
|
192
|
+
export interface RequestHookContext {
|
|
193
|
+
requestId: string;
|
|
194
|
+
method: string;
|
|
195
|
+
url: string;
|
|
196
|
+
headers: Record<string, string>;
|
|
197
|
+
body?: string;
|
|
198
|
+
attempt: number;
|
|
199
|
+
startTime: number;
|
|
200
|
+
}
|
|
201
|
+
export interface ResponseHookContext extends RequestHookContext {
|
|
202
|
+
status: number;
|
|
203
|
+
durationMs: number;
|
|
204
|
+
responseHeaders: Headers;
|
|
205
|
+
cached?: boolean;
|
|
206
|
+
deduped?: boolean;
|
|
207
|
+
}
|
|
208
|
+
export interface ErrorHookContext extends RequestHookContext {
|
|
209
|
+
error: Error | SDKError;
|
|
210
|
+
durationMs: number;
|
|
211
|
+
willRetry: boolean;
|
|
212
|
+
}
|
|
213
|
+
export interface RetryHookContext {
|
|
214
|
+
requestId: string;
|
|
215
|
+
attempt: number;
|
|
216
|
+
maxAttempts: number;
|
|
217
|
+
delayMs: number;
|
|
218
|
+
error: Error | SDKError;
|
|
219
|
+
reason: string;
|
|
220
|
+
}
|
|
221
|
+
export interface CacheHitContext {
|
|
222
|
+
requestId: string;
|
|
223
|
+
url: string;
|
|
224
|
+
cacheKey: string;
|
|
225
|
+
stale: boolean;
|
|
226
|
+
age: number;
|
|
227
|
+
}
|
|
228
|
+
export interface RequestContext {
|
|
229
|
+
accessToken?: string;
|
|
230
|
+
customerAccountId?: string;
|
|
231
|
+
storeId?: string;
|
|
232
|
+
storeViewId?: string;
|
|
233
|
+
locale?: string;
|
|
234
|
+
headers?: Record<string, string>;
|
|
235
|
+
requestId?: string;
|
|
236
|
+
service?: string;
|
|
237
|
+
/** SDK method name (e.g., "updateCommercialOrderLines") */
|
|
238
|
+
sdkMethod?: string;
|
|
239
|
+
/** Skip cache for this request */
|
|
240
|
+
skipCache?: boolean;
|
|
241
|
+
/** Skip deduplication for this request */
|
|
242
|
+
skipDedup?: boolean;
|
|
243
|
+
/** Custom cache TTL for this request */
|
|
244
|
+
cacheTTL?: number;
|
|
245
|
+
}
|
|
246
|
+
export interface TransportRequest {
|
|
247
|
+
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
248
|
+
path: string;
|
|
249
|
+
params?: Record<string, unknown>;
|
|
250
|
+
body?: unknown;
|
|
251
|
+
timeout?: number;
|
|
252
|
+
signal?: AbortSignal;
|
|
253
|
+
/** Cache key override */
|
|
254
|
+
cacheKey?: string;
|
|
255
|
+
}
|
|
256
|
+
export interface TransportResponse<T = unknown> {
|
|
257
|
+
data: T;
|
|
258
|
+
headers: Headers;
|
|
259
|
+
status: number;
|
|
260
|
+
durationMs: number;
|
|
261
|
+
requestId: string;
|
|
262
|
+
/** Whether response was served from cache */
|
|
263
|
+
cached?: boolean;
|
|
264
|
+
/** Whether request was deduplicated */
|
|
265
|
+
deduped?: boolean;
|
|
266
|
+
}
|
|
267
|
+
interface PerformanceMetrics {
|
|
268
|
+
requestCount: number;
|
|
269
|
+
cacheHits: number;
|
|
270
|
+
cacheMisses: number;
|
|
271
|
+
dedupedRequests: number;
|
|
272
|
+
totalDurationMs: number;
|
|
273
|
+
errors: number;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Production-grade HTTP transport for DJUST SDK.
|
|
277
|
+
* Includes built-in performance optimizations and auth lifecycle hooks.
|
|
278
|
+
*/
|
|
279
|
+
export declare class Transport {
|
|
280
|
+
private readonly config;
|
|
281
|
+
private readonly retryConfig;
|
|
282
|
+
private readonly perfConfig;
|
|
283
|
+
private readonly hooks;
|
|
284
|
+
private readonly authHooks;
|
|
285
|
+
private readonly cache;
|
|
286
|
+
private readonly pendingRequests;
|
|
287
|
+
private readonly metrics;
|
|
288
|
+
constructor(config: TransportConfig);
|
|
289
|
+
/**
|
|
290
|
+
* Triggers the onLogin hook after successful login.
|
|
291
|
+
* Called by AuthService.login()
|
|
292
|
+
*/
|
|
293
|
+
triggerLoginHook(context: LoginHookContext): Promise<void>;
|
|
294
|
+
/**
|
|
295
|
+
* Triggers the onTokenRefresh hook after successful token refresh.
|
|
296
|
+
* Called by AuthService.refreshToken()
|
|
297
|
+
*/
|
|
298
|
+
triggerTokenRefreshHook(context: TokenRefreshHookContext): Promise<void>;
|
|
299
|
+
/**
|
|
300
|
+
* Triggers the onLogout hook after logout attempt.
|
|
301
|
+
* Called by AuthService.logout()
|
|
302
|
+
*/
|
|
303
|
+
triggerLogoutHook(context: LogoutHookContext): Promise<void>;
|
|
304
|
+
/**
|
|
305
|
+
* Triggers the onAuthFailure hook when authentication fails.
|
|
306
|
+
* Called on 401 errors or refresh token failures.
|
|
307
|
+
*/
|
|
308
|
+
triggerAuthFailureHook(context: AuthFailureHookContext): Promise<void>;
|
|
309
|
+
/**
|
|
310
|
+
* Calls the onBeforeAuthenticatedRequest hook to potentially refresh tokens.
|
|
311
|
+
* Returns a new token if provided by the hook.
|
|
312
|
+
*/
|
|
313
|
+
callBeforeAuthRequestHook(context: BeforeAuthRequestContext): Promise<string | undefined>;
|
|
314
|
+
/**
|
|
315
|
+
* Checks if auth hooks are configured.
|
|
316
|
+
*/
|
|
317
|
+
hasAuthHooks(): boolean;
|
|
318
|
+
/**
|
|
319
|
+
* Executes an HTTP request with full error handling, caching, and retry support.
|
|
320
|
+
*/
|
|
321
|
+
request<T = unknown>(request: TransportRequest, context?: RequestContext): Promise<TransportResponse<T>>;
|
|
322
|
+
/**
|
|
323
|
+
* Gets performance metrics
|
|
324
|
+
*/
|
|
325
|
+
getMetrics(): PerformanceMetrics & {
|
|
326
|
+
cacheHitRate: number;
|
|
327
|
+
avgDurationMs: number;
|
|
328
|
+
cacheSize: number;
|
|
329
|
+
pendingRequests: number;
|
|
330
|
+
};
|
|
331
|
+
/**
|
|
332
|
+
* Clears the response cache
|
|
333
|
+
*/
|
|
334
|
+
clearCache(): void;
|
|
335
|
+
/**
|
|
336
|
+
* Invalidates cache entries matching a pattern
|
|
337
|
+
*/
|
|
338
|
+
invalidateCache(pattern: string | RegExp): number;
|
|
339
|
+
/**
|
|
340
|
+
* Resets performance metrics
|
|
341
|
+
*/
|
|
342
|
+
resetMetrics(): void;
|
|
343
|
+
private executeWithRetry;
|
|
344
|
+
private executeRequest;
|
|
345
|
+
private shouldUseCache;
|
|
346
|
+
private getFromCache;
|
|
347
|
+
private setCache;
|
|
348
|
+
private buildCacheKey;
|
|
349
|
+
private parseCacheMaxAge;
|
|
350
|
+
private revalidateInBackground;
|
|
351
|
+
private shouldDedupe;
|
|
352
|
+
private shouldRetry;
|
|
353
|
+
private calculateRetryDelay;
|
|
354
|
+
private getRetryReason;
|
|
355
|
+
private buildUrl;
|
|
356
|
+
/**
|
|
357
|
+
* Serializes params so that arrays become repeated keys: &brand=1664&brand=1664+BLANC
|
|
358
|
+
* (API search and customer-accounts/orders expect this format, not comma or bracket).
|
|
359
|
+
*/
|
|
360
|
+
private stringifyParamsRepeat;
|
|
361
|
+
private buildHeaders;
|
|
362
|
+
private buildHeadersObject;
|
|
363
|
+
private serializeBody;
|
|
364
|
+
private generateRequestId;
|
|
365
|
+
private sleep;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Creates a new Transport instance with performance optimizations.
|
|
369
|
+
*/
|
|
370
|
+
export declare function createTransport(config: TransportConfig): Transport;
|
|
371
|
+
export {};
|
|
372
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DJUST SDK Base Error
|
|
3
|
+
* Foundation class for all SDK errors.
|
|
4
|
+
*
|
|
5
|
+
* @module errors/base
|
|
6
|
+
* @since 2.17.0
|
|
7
|
+
*/
|
|
8
|
+
import type { SDKErrorCodeType } from "./codes";
|
|
9
|
+
import type { SDKErrorOptions, RequestMetadata, SerializedError, ClientSafeError } from "./types";
|
|
10
|
+
/**
|
|
11
|
+
* Base class for all DJUST SDK errors.
|
|
12
|
+
*
|
|
13
|
+
* Provides structured error information suitable for:
|
|
14
|
+
* - Programmatic error handling (via `code`)
|
|
15
|
+
* - Logging and observability (via `toJSON()`)
|
|
16
|
+
* - Client responses (via `toClientSafe()`)
|
|
17
|
+
* - Retry logic (via `retriable` and `retryAfterMs`)
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { SDKError, SDKErrorCode } from '@djust-b2b/djust-front-sdk';
|
|
22
|
+
*
|
|
23
|
+
* try {
|
|
24
|
+
* await sdk.getCart({ cartId: '123', currency: 'EUR' });
|
|
25
|
+
* } catch (error) {
|
|
26
|
+
* if (error instanceof SDKError) {
|
|
27
|
+
* // Structured error handling
|
|
28
|
+
* console.log('Code:', error.code);
|
|
29
|
+
* console.log('Status:', error.httpStatus);
|
|
30
|
+
* console.log('Retriable:', error.retriable);
|
|
31
|
+
*
|
|
32
|
+
* // Logging (safe)
|
|
33
|
+
* logger.error('SDK error', error.toJSON());
|
|
34
|
+
*
|
|
35
|
+
* // Client response (no sensitive data)
|
|
36
|
+
* res.status(error.httpStatus).json(error.toClientSafe());
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare class SDKError extends Error {
|
|
42
|
+
/** Stable error code for programmatic handling */
|
|
43
|
+
readonly code: SDKErrorCodeType;
|
|
44
|
+
/** HTTP status code (0 for non-HTTP errors) */
|
|
45
|
+
readonly httpStatus: number;
|
|
46
|
+
/** Additional structured details */
|
|
47
|
+
readonly details: Record<string, unknown>;
|
|
48
|
+
/** Original error that caused this error */
|
|
49
|
+
readonly cause?: Error;
|
|
50
|
+
/** Whether the operation can be retried */
|
|
51
|
+
readonly retriable: boolean;
|
|
52
|
+
/** Suggested delay before retry in milliseconds */
|
|
53
|
+
readonly retryAfterMs?: number;
|
|
54
|
+
/** Request context metadata */
|
|
55
|
+
readonly metadata: RequestMetadata;
|
|
56
|
+
/** ISO timestamp when error was created */
|
|
57
|
+
readonly timestamp: string;
|
|
58
|
+
constructor(options: SDKErrorOptions);
|
|
59
|
+
/**
|
|
60
|
+
* Returns a JSON-serializable representation for logging.
|
|
61
|
+
*
|
|
62
|
+
* Safe for logging - excludes stack trace and cause details
|
|
63
|
+
* that might contain sensitive information.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* logger.error('API call failed', error.toJSON());
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
toJSON(): SerializedError;
|
|
71
|
+
/**
|
|
72
|
+
* Returns a client-safe representation.
|
|
73
|
+
*
|
|
74
|
+
* Excludes internal details, metadata, and any potentially
|
|
75
|
+
* sensitive information. Safe to return in HTTP responses.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* // In Nuxt server handler
|
|
80
|
+
* catch (error) {
|
|
81
|
+
* if (error instanceof SDKError) {
|
|
82
|
+
* throw createError({
|
|
83
|
+
* statusCode: error.httpStatus,
|
|
84
|
+
* data: error.toClientSafe(),
|
|
85
|
+
* });
|
|
86
|
+
* }
|
|
87
|
+
* }
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
toClientSafe(): ClientSafeError;
|
|
91
|
+
/**
|
|
92
|
+
* Creates a copy of this error with additional metadata.
|
|
93
|
+
* Useful for enriching errors as they bubble up.
|
|
94
|
+
*/
|
|
95
|
+
withMetadata(metadata: Partial<RequestMetadata>): SDKError;
|
|
96
|
+
/**
|
|
97
|
+
* Creates a copy of this error with additional details.
|
|
98
|
+
*/
|
|
99
|
+
withDetails(details: Record<string, unknown>): SDKError;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=base.d.ts.map
|