@voyantjs/distribution-react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +32 -0
  2. package/dist/client.d.ts +14 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +59 -0
  5. package/dist/constants.d.ts +100 -0
  6. package/dist/constants.d.ts.map +1 -0
  7. package/dist/constants.js +47 -0
  8. package/dist/hooks/index.d.ts +12 -0
  9. package/dist/hooks/index.d.ts.map +1 -0
  10. package/dist/hooks/index.js +12 -0
  11. package/dist/hooks/use-booking-links.d.ts +20 -0
  12. package/dist/hooks/use-booking-links.d.ts.map +1 -0
  13. package/dist/hooks/use-booking-links.js +9 -0
  14. package/dist/hooks/use-bookings.d.ts +14 -0
  15. package/dist/hooks/use-bookings.d.ts.map +1 -0
  16. package/dist/hooks/use-bookings.js +9 -0
  17. package/dist/hooks/use-channel-mutation.d.ts +68 -0
  18. package/dist/hooks/use-channel-mutation.d.ts.map +1 -0
  19. package/dist/hooks/use-channel-mutation.js +49 -0
  20. package/dist/hooks/use-channel.d.ts +16 -0
  21. package/dist/hooks/use-channel.d.ts.map +1 -0
  22. package/dist/hooks/use-channel.js +13 -0
  23. package/dist/hooks/use-channels.d.ts +20 -0
  24. package/dist/hooks/use-channels.d.ts.map +1 -0
  25. package/dist/hooks/use-channels.js +9 -0
  26. package/dist/hooks/use-commission-rules.d.ts +23 -0
  27. package/dist/hooks/use-commission-rules.d.ts.map +1 -0
  28. package/dist/hooks/use-commission-rules.js +9 -0
  29. package/dist/hooks/use-contracts.d.ts +22 -0
  30. package/dist/hooks/use-contracts.d.ts.map +1 -0
  31. package/dist/hooks/use-contracts.js +9 -0
  32. package/dist/hooks/use-mappings.d.ts +19 -0
  33. package/dist/hooks/use-mappings.d.ts.map +1 -0
  34. package/dist/hooks/use-mappings.js +9 -0
  35. package/dist/hooks/use-products.d.ts +14 -0
  36. package/dist/hooks/use-products.d.ts.map +1 -0
  37. package/dist/hooks/use-products.js +9 -0
  38. package/dist/hooks/use-suppliers.d.ts +14 -0
  39. package/dist/hooks/use-suppliers.d.ts.map +1 -0
  40. package/dist/hooks/use-suppliers.js +9 -0
  41. package/dist/hooks/use-webhook-events.d.ts +21 -0
  42. package/dist/hooks/use-webhook-events.d.ts.map +1 -0
  43. package/dist/hooks/use-webhook-events.js +9 -0
  44. package/dist/index.d.ts +9 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +8 -0
  47. package/dist/provider.d.ts +2 -0
  48. package/dist/provider.d.ts.map +1 -0
  49. package/dist/provider.js +1 -0
  50. package/dist/query-keys.d.ts +61 -0
  51. package/dist/query-keys.d.ts.map +1 -0
  52. package/dist/query-keys.js +30 -0
  53. package/dist/query-options.d.ts +999 -0
  54. package/dist/query-options.d.ts.map +1 -0
  55. package/dist/query-options.js +219 -0
  56. package/dist/schemas.d.ts +610 -0
  57. package/dist/schemas.d.ts.map +1 -0
  58. package/dist/schemas.js +143 -0
  59. package/dist/utils.d.ts +10 -0
  60. package/dist/utils.d.ts.map +1 -0
  61. package/dist/utils.js +44 -0
  62. package/package.json +79 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-mappings.d.ts","sourceRoot":"","sources":["../../src/hooks/use-mappings.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAG3D,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB;;;;;;;;;;;;;UAI3D"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { useVoyantDistributionContext } from "../provider.js";
4
+ import { getMappingsQueryOptions } from "../query-options.js";
5
+ export function useMappings(options = {}) {
6
+ const client = useVoyantDistributionContext();
7
+ const { enabled = true } = options;
8
+ return useQuery({ ...getMappingsQueryOptions(client, options), enabled });
9
+ }
@@ -0,0 +1,14 @@
1
+ import type { ProductsListFilters } from "../query-keys.js";
2
+ export interface UseProductsOptions extends ProductsListFilters {
3
+ enabled?: boolean;
4
+ }
5
+ export declare function useProducts(options?: UseProductsOptions): import("@tanstack/react-query").UseQueryResult<{
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ }[];
10
+ total: number;
11
+ limit: number;
12
+ offset: number;
13
+ }, Error>;
14
+ //# sourceMappingURL=use-products.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-products.d.ts","sourceRoot":"","sources":["../../src/hooks/use-products.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAG3D,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB;;;;;;;;UAI3D"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { useVoyantDistributionContext } from "../provider.js";
4
+ import { getProductsQueryOptions } from "../query-options.js";
5
+ export function useProducts(options = {}) {
6
+ const client = useVoyantDistributionContext();
7
+ const { enabled = true } = options;
8
+ return useQuery({ ...getProductsQueryOptions(client, options), enabled });
9
+ }
@@ -0,0 +1,14 @@
1
+ import type { SuppliersListFilters } from "../query-keys.js";
2
+ export interface UseSuppliersOptions extends SuppliersListFilters {
3
+ enabled?: boolean;
4
+ }
5
+ export declare function useSuppliers(options?: UseSuppliersOptions): import("@tanstack/react-query").UseQueryResult<{
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ }[];
10
+ total: number;
11
+ limit: number;
12
+ offset: number;
13
+ }, Error>;
14
+ //# sourceMappingURL=use-suppliers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-suppliers.d.ts","sourceRoot":"","sources":["../../src/hooks/use-suppliers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAG5D,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB;;;;;;;;UAI7D"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { useVoyantDistributionContext } from "../provider.js";
4
+ import { getSuppliersQueryOptions } from "../query-options.js";
5
+ export function useSuppliers(options = {}) {
6
+ const client = useVoyantDistributionContext();
7
+ const { enabled = true } = options;
8
+ return useQuery({ ...getSuppliersQueryOptions(client, options), enabled });
9
+ }
@@ -0,0 +1,21 @@
1
+ import type { WebhookEventsListFilters } from "../query-keys.js";
2
+ export interface UseWebhookEventsOptions extends WebhookEventsListFilters {
3
+ enabled?: boolean;
4
+ }
5
+ export declare function useWebhookEvents(options?: UseWebhookEventsOptions): import("@tanstack/react-query").UseQueryResult<{
6
+ data: {
7
+ id: string;
8
+ channelId: string;
9
+ eventType: string;
10
+ externalEventId: string | null;
11
+ payload: Record<string, unknown>;
12
+ receivedAt: string | null;
13
+ processedAt: string | null;
14
+ status: "pending" | "processed" | "failed" | "ignored";
15
+ errorMessage: string | null;
16
+ }[];
17
+ total: number;
18
+ limit: number;
19
+ offset: number;
20
+ }, Error>;
21
+ //# sourceMappingURL=use-webhook-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-webhook-events.d.ts","sourceRoot":"","sources":["../../src/hooks/use-webhook-events.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAGhE,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACvE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B;;;;;;;;;;;;;;;UAIrE"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { useVoyantDistributionContext } from "../provider.js";
4
+ import { getWebhookEventsQueryOptions } from "../query-options.js";
5
+ export function useWebhookEvents(options = {}) {
6
+ const client = useVoyantDistributionContext();
7
+ const { enabled = true } = options;
8
+ return useQuery({ ...getWebhookEventsQueryOptions(client, options), enabled });
9
+ }
@@ -0,0 +1,9 @@
1
+ export { defaultFetcher, fetchWithValidation, VoyantApiError, type VoyantFetcher, } from "./client.js";
2
+ export * from "./constants.js";
3
+ export * from "./hooks/index.js";
4
+ export { useVoyantDistributionContext, type VoyantDistributionContextValue, VoyantDistributionProvider, type VoyantDistributionProviderProps, } from "./provider.js";
5
+ export { distributionQueryKeys } from "./query-keys.js";
6
+ export { getBookingLinkQueryOptions, getBookingLinksQueryOptions, getBookingQueryOptions, getBookingsQueryOptions, getChannelQueryOptions, getChannelsQueryOptions, getCommissionRuleQueryOptions, getCommissionRulesQueryOptions, getContractQueryOptions, getContractsQueryOptions, getMappingQueryOptions, getMappingsQueryOptions, getProductQueryOptions, getProductsQueryOptions, getSupplierQueryOptions, getSuppliersQueryOptions, getWebhookEventQueryOptions, getWebhookEventsQueryOptions, } from "./query-options.js";
7
+ export * from "./schemas.js";
8
+ export * from "./utils.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,KAAK,aAAa,GACnB,MAAM,aAAa,CAAA;AACpB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,OAAO,EACL,4BAA4B,EAC5B,KAAK,8BAA8B,EACnC,0BAA0B,EAC1B,KAAK,+BAA+B,GACrC,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC7B,8BAA8B,EAC9B,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,oBAAoB,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { defaultFetcher, fetchWithValidation, VoyantApiError, } from "./client.js";
2
+ export * from "./constants.js";
3
+ export * from "./hooks/index.js";
4
+ export { useVoyantDistributionContext, VoyantDistributionProvider, } from "./provider.js";
5
+ export { distributionQueryKeys } from "./query-keys.js";
6
+ export { getBookingLinkQueryOptions, getBookingLinksQueryOptions, getBookingQueryOptions, getBookingsQueryOptions, getChannelQueryOptions, getChannelsQueryOptions, getCommissionRuleQueryOptions, getCommissionRulesQueryOptions, getContractQueryOptions, getContractsQueryOptions, getMappingQueryOptions, getMappingsQueryOptions, getProductQueryOptions, getProductsQueryOptions, getSupplierQueryOptions, getSuppliersQueryOptions, getWebhookEventQueryOptions, getWebhookEventsQueryOptions, } from "./query-options.js";
7
+ export * from "./schemas.js";
8
+ export * from "./utils.js";
@@ -0,0 +1,2 @@
1
+ export { useVoyantReactContext as useVoyantDistributionContext, type VoyantReactContextValue as VoyantDistributionContextValue, VoyantReactProvider as VoyantDistributionProvider, type VoyantReactProviderProps as VoyantDistributionProviderProps, } from "@voyantjs/react";
2
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,IAAI,4BAA4B,EACrD,KAAK,uBAAuB,IAAI,8BAA8B,EAC9D,mBAAmB,IAAI,0BAA0B,EACjD,KAAK,wBAAwB,IAAI,+BAA+B,GACjE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1 @@
1
+ export { useVoyantReactContext as useVoyantDistributionContext, VoyantReactProvider as VoyantDistributionProvider, } from "@voyantjs/react";
@@ -0,0 +1,61 @@
1
+ export interface PaginationFilters {
2
+ limit?: number | undefined;
3
+ offset?: number | undefined;
4
+ }
5
+ export interface SuppliersListFilters extends PaginationFilters {
6
+ }
7
+ export interface ProductsListFilters extends PaginationFilters {
8
+ }
9
+ export interface BookingsListFilters extends PaginationFilters {
10
+ }
11
+ export interface ChannelsListFilters extends PaginationFilters {
12
+ }
13
+ export interface ContractsListFilters extends PaginationFilters {
14
+ channelId?: string | undefined;
15
+ }
16
+ export interface CommissionRulesListFilters extends PaginationFilters {
17
+ contractId?: string | undefined;
18
+ }
19
+ export interface MappingsListFilters extends PaginationFilters {
20
+ channelId?: string | undefined;
21
+ }
22
+ export interface BookingLinksListFilters extends PaginationFilters {
23
+ channelId?: string | undefined;
24
+ }
25
+ export interface WebhookEventsListFilters extends PaginationFilters {
26
+ channelId?: string | undefined;
27
+ }
28
+ export interface ContractsByChannelListFilters extends PaginationFilters {
29
+ channelId?: string | undefined;
30
+ }
31
+ export declare const distributionQueryKeys: {
32
+ readonly all: readonly ["voyant", "distribution"];
33
+ readonly suppliers: () => readonly ["voyant", "distribution", "suppliers"];
34
+ readonly suppliersList: (filters: SuppliersListFilters) => readonly ["voyant", "distribution", "suppliers", "list", SuppliersListFilters];
35
+ readonly products: () => readonly ["voyant", "distribution", "products"];
36
+ readonly productsList: (filters: ProductsListFilters) => readonly ["voyant", "distribution", "products", "list", ProductsListFilters];
37
+ readonly bookings: () => readonly ["voyant", "distribution", "bookings"];
38
+ readonly bookingsList: (filters: BookingsListFilters) => readonly ["voyant", "distribution", "bookings", "list", BookingsListFilters];
39
+ readonly channels: () => readonly ["voyant", "distribution", "channels"];
40
+ readonly channelsList: (filters: ChannelsListFilters) => readonly ["voyant", "distribution", "channels", "list", ChannelsListFilters];
41
+ readonly channel: (id: string) => readonly ["voyant", "distribution", "channels", "detail", string];
42
+ readonly contracts: () => readonly ["voyant", "distribution", "contracts"];
43
+ readonly contractsList: (filters: ContractsListFilters) => readonly ["voyant", "distribution", "contracts", "list", ContractsListFilters];
44
+ readonly contract: (id: string) => readonly ["voyant", "distribution", "contracts", "detail", string];
45
+ readonly commissionRules: () => readonly ["voyant", "distribution", "commission-rules"];
46
+ readonly commissionRulesList: (filters: CommissionRulesListFilters) => readonly ["voyant", "distribution", "commission-rules", "list", CommissionRulesListFilters];
47
+ readonly commissionRule: (id: string) => readonly ["voyant", "distribution", "commission-rules", "detail", string];
48
+ readonly mappings: () => readonly ["voyant", "distribution", "product-mappings"];
49
+ readonly mappingsList: (filters: MappingsListFilters) => readonly ["voyant", "distribution", "product-mappings", "list", MappingsListFilters];
50
+ readonly mapping: (id: string) => readonly ["voyant", "distribution", "product-mappings", "detail", string];
51
+ readonly bookingLinks: () => readonly ["voyant", "distribution", "booking-links"];
52
+ readonly bookingLinksList: (filters: BookingLinksListFilters) => readonly ["voyant", "distribution", "booking-links", "list", BookingLinksListFilters];
53
+ readonly bookingLink: (id: string) => readonly ["voyant", "distribution", "booking-links", "detail", string];
54
+ readonly webhookEvents: () => readonly ["voyant", "distribution", "webhook-events"];
55
+ readonly webhookEventsList: (filters: WebhookEventsListFilters) => readonly ["voyant", "distribution", "webhook-events", "list", WebhookEventsListFilters];
56
+ readonly webhookEvent: (id: string) => readonly ["voyant", "distribution", "webhook-events", "detail", string];
57
+ readonly supplier: (id: string) => readonly ["voyant", "distribution", "suppliers", "detail", string];
58
+ readonly product: (id: string) => readonly ["voyant", "distribution", "products", "detail", string];
59
+ readonly booking: (id: string) => readonly ["voyant", "distribution", "bookings", "detail", string];
60
+ };
61
+ //# sourceMappingURL=query-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-keys.d.ts","sourceRoot":"","sources":["../src/query-keys.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;CAAG;AAClE,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;CAAG;AACjE,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;CAAG;AACjE,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;CAAG;AACjE,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AACD,MAAM,WAAW,0BAA2B,SAAQ,iBAAiB;IACnE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAChC;AACD,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AACD,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AACD,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AACD,MAAM,WAAW,6BAA8B,SAAQ,iBAAiB;IACtE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AAED,eAAO,MAAM,qBAAqB;;;sCAIP,oBAAoB;;qCAIrB,mBAAmB;;qCAInB,mBAAmB;;qCAInB,mBAAmB;2BAE7B,MAAM;;sCAGK,oBAAoB;4BAE9B,MAAM;;4CAGU,0BAA0B;kCAEpC,MAAM;;qCAIH,mBAAmB;2BAE7B,MAAM;;yCAGQ,uBAAuB;+BAEjC,MAAM;;0CAGK,wBAAwB;gCAElC,MAAM;4BAEV,MAAM;2BACP,MAAM;2BACN,MAAM;CACZ,CAAA"}
@@ -0,0 +1,30 @@
1
+ export const distributionQueryKeys = {
2
+ all: ["voyant", "distribution"],
3
+ suppliers: () => [...distributionQueryKeys.all, "suppliers"],
4
+ suppliersList: (filters) => [...distributionQueryKeys.suppliers(), "list", filters],
5
+ products: () => [...distributionQueryKeys.all, "products"],
6
+ productsList: (filters) => [...distributionQueryKeys.products(), "list", filters],
7
+ bookings: () => [...distributionQueryKeys.all, "bookings"],
8
+ bookingsList: (filters) => [...distributionQueryKeys.bookings(), "list", filters],
9
+ channels: () => [...distributionQueryKeys.all, "channels"],
10
+ channelsList: (filters) => [...distributionQueryKeys.channels(), "list", filters],
11
+ channel: (id) => [...distributionQueryKeys.channels(), "detail", id],
12
+ contracts: () => [...distributionQueryKeys.all, "contracts"],
13
+ contractsList: (filters) => [...distributionQueryKeys.contracts(), "list", filters],
14
+ contract: (id) => [...distributionQueryKeys.contracts(), "detail", id],
15
+ commissionRules: () => [...distributionQueryKeys.all, "commission-rules"],
16
+ commissionRulesList: (filters) => [...distributionQueryKeys.commissionRules(), "list", filters],
17
+ commissionRule: (id) => [...distributionQueryKeys.commissionRules(), "detail", id],
18
+ mappings: () => [...distributionQueryKeys.all, "product-mappings"],
19
+ mappingsList: (filters) => [...distributionQueryKeys.mappings(), "list", filters],
20
+ mapping: (id) => [...distributionQueryKeys.mappings(), "detail", id],
21
+ bookingLinks: () => [...distributionQueryKeys.all, "booking-links"],
22
+ bookingLinksList: (filters) => [...distributionQueryKeys.bookingLinks(), "list", filters],
23
+ bookingLink: (id) => [...distributionQueryKeys.bookingLinks(), "detail", id],
24
+ webhookEvents: () => [...distributionQueryKeys.all, "webhook-events"],
25
+ webhookEventsList: (filters) => [...distributionQueryKeys.webhookEvents(), "list", filters],
26
+ webhookEvent: (id) => [...distributionQueryKeys.webhookEvents(), "detail", id],
27
+ supplier: (id) => [...distributionQueryKeys.suppliers(), "detail", id],
28
+ product: (id) => [...distributionQueryKeys.products(), "detail", id],
29
+ booking: (id) => [...distributionQueryKeys.bookings(), "detail", id],
30
+ };