@spotsdev/sdk 1.0.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 (79) hide show
  1. package/dist/api/client.d.ts +12 -0
  2. package/dist/api/client.js +68 -0
  3. package/dist/api/mutations/clubs.d.ts +47 -0
  4. package/dist/api/mutations/clubs.js +95 -0
  5. package/dist/api/mutations/conversations.d.ts +45 -0
  6. package/dist/api/mutations/conversations.js +110 -0
  7. package/dist/api/mutations/index.d.ts +13 -0
  8. package/dist/api/mutations/index.js +38 -0
  9. package/dist/api/mutations/notifications.d.ts +38 -0
  10. package/dist/api/mutations/notifications.js +64 -0
  11. package/dist/api/mutations/orders.d.ts +73 -0
  12. package/dist/api/mutations/orders.js +116 -0
  13. package/dist/api/mutations/posts.d.ts +123 -0
  14. package/dist/api/mutations/posts.js +229 -0
  15. package/dist/api/mutations/products.d.ts +81 -0
  16. package/dist/api/mutations/products.js +102 -0
  17. package/dist/api/mutations/spots.d.ts +59 -0
  18. package/dist/api/mutations/spots.js +129 -0
  19. package/dist/api/mutations/users.d.ts +71 -0
  20. package/dist/api/mutations/users.js +173 -0
  21. package/dist/api/queries/auth.d.ts +37 -0
  22. package/dist/api/queries/auth.js +61 -0
  23. package/dist/api/queries/clubs.d.ts +52 -0
  24. package/dist/api/queries/clubs.js +116 -0
  25. package/dist/api/queries/conversations.d.ts +52 -0
  26. package/dist/api/queries/conversations.js +83 -0
  27. package/dist/api/queries/index.d.ts +26 -0
  28. package/dist/api/queries/index.js +65 -0
  29. package/dist/api/queries/misc.d.ts +54 -0
  30. package/dist/api/queries/misc.js +129 -0
  31. package/dist/api/queries/notifications.d.ts +34 -0
  32. package/dist/api/queries/notifications.js +62 -0
  33. package/dist/api/queries/orders.d.ts +45 -0
  34. package/dist/api/queries/orders.js +93 -0
  35. package/dist/api/queries/posts.d.ts +55 -0
  36. package/dist/api/queries/posts.js +130 -0
  37. package/dist/api/queries/products.d.ts +52 -0
  38. package/dist/api/queries/products.js +89 -0
  39. package/dist/api/queries/spots.d.ts +78 -0
  40. package/dist/api/queries/spots.js +168 -0
  41. package/dist/api/queries/templates.d.ts +42 -0
  42. package/dist/api/queries/templates.js +86 -0
  43. package/dist/api/queries/users.d.ts +90 -0
  44. package/dist/api/queries/users.js +187 -0
  45. package/dist/api/services/index.d.ts +2 -0
  46. package/dist/api/services/index.js +8 -0
  47. package/dist/api/services/marketplace.d.ts +129 -0
  48. package/dist/api/services/marketplace.js +168 -0
  49. package/dist/api/types.d.ts +54 -0
  50. package/dist/api/types.js +34 -0
  51. package/dist/index.d.ts +38 -0
  52. package/dist/index.js +73 -0
  53. package/package.json +57 -0
  54. package/src/api/client.ts +78 -0
  55. package/src/api/mutations/clubs.ts +107 -0
  56. package/src/api/mutations/conversations.ts +124 -0
  57. package/src/api/mutations/index.ts +29 -0
  58. package/src/api/mutations/notifications.ts +70 -0
  59. package/src/api/mutations/orders.ts +174 -0
  60. package/src/api/mutations/posts.ts +278 -0
  61. package/src/api/mutations/products.ts +160 -0
  62. package/src/api/mutations/spots.ts +146 -0
  63. package/src/api/mutations/users.ts +197 -0
  64. package/src/api/queries/auth.ts +67 -0
  65. package/src/api/queries/clubs.ts +135 -0
  66. package/src/api/queries/conversations.ts +94 -0
  67. package/src/api/queries/index.ts +48 -0
  68. package/src/api/queries/misc.ts +140 -0
  69. package/src/api/queries/notifications.ts +66 -0
  70. package/src/api/queries/orders.ts +119 -0
  71. package/src/api/queries/posts.ts +142 -0
  72. package/src/api/queries/products.ts +123 -0
  73. package/src/api/queries/spots.ts +201 -0
  74. package/src/api/queries/templates.ts +95 -0
  75. package/src/api/queries/users.ts +206 -0
  76. package/src/api/services/index.ts +6 -0
  77. package/src/api/services/marketplace.ts +265 -0
  78. package/src/api/types.ts +144 -0
  79. package/src/index.ts +63 -0
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Products Query Hooks
3
+ *
4
+ * TanStack Query hooks for product-related operations.
5
+ */
6
+ import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
7
+ import type { Product, PaginatedResponse, ProductType, ProductStatus } from '../types';
8
+ export declare const productKeys: {
9
+ all: readonly ["products"];
10
+ lists: () => readonly ["products", "list"];
11
+ list: (filters?: Record<string, unknown>) => readonly ["products", "list", Record<string, unknown> | undefined];
12
+ details: () => readonly ["products", "detail"];
13
+ detail: (id: string) => readonly ["products", "detail", string];
14
+ bySlug: (spotId: string, slug: string) => readonly ["products", "slug", string, string];
15
+ bySpot: (spotId: string) => readonly ["products", "spot", string];
16
+ };
17
+ export interface ProductFilters {
18
+ spotId?: string;
19
+ type?: ProductType;
20
+ status?: ProductStatus;
21
+ limit?: number;
22
+ page?: number;
23
+ }
24
+ export interface ProductWithSpot extends Product {
25
+ spot: {
26
+ id: string;
27
+ name: string;
28
+ slug: string;
29
+ };
30
+ }
31
+ /**
32
+ * Get products for a spot (public browse)
33
+ *
34
+ * @endpoint GET /api/v1/spots/{spotId}/products
35
+ */
36
+ export declare function useSpotProducts(spotId: string, params?: {
37
+ type?: ProductType;
38
+ limit?: number;
39
+ page?: number;
40
+ }, options?: Omit<UseQueryOptions<PaginatedResponse<Product>>, 'queryKey' | 'queryFn'>): UseQueryResult<PaginatedResponse<Product>>;
41
+ /**
42
+ * Get a product by ID
43
+ *
44
+ * @endpoint GET /api/v1/products/{productId}
45
+ */
46
+ export declare function useProduct(productId: string, options?: Omit<UseQueryOptions<ProductWithSpot>, 'queryKey' | 'queryFn'>): UseQueryResult<ProductWithSpot>;
47
+ /**
48
+ * Get a product by slug (within a spot)
49
+ *
50
+ * @endpoint GET /api/v1/spots/{spotId}/products/slug/{slug}
51
+ */
52
+ export declare function useProductBySlug(spotId: string, slug: string, options?: Omit<UseQueryOptions<ProductWithSpot>, 'queryKey' | 'queryFn'>): UseQueryResult<ProductWithSpot>;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * Products Query Hooks
4
+ *
5
+ * TanStack Query hooks for product-related operations.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.productKeys = void 0;
9
+ exports.useSpotProducts = useSpotProducts;
10
+ exports.useProduct = useProduct;
11
+ exports.useProductBySlug = useProductBySlug;
12
+ const react_query_1 = require("@tanstack/react-query");
13
+ const client_1 = require("../client");
14
+ // ============================================================================
15
+ // QUERY KEYS
16
+ // ============================================================================
17
+ exports.productKeys = {
18
+ all: ['products'],
19
+ lists: () => [...exports.productKeys.all, 'list'],
20
+ list: (filters) => [...exports.productKeys.lists(), filters],
21
+ details: () => [...exports.productKeys.all, 'detail'],
22
+ detail: (id) => [...exports.productKeys.details(), id],
23
+ bySlug: (spotId, slug) => [...exports.productKeys.all, 'slug', spotId, slug],
24
+ bySpot: (spotId) => [...exports.productKeys.all, 'spot', spotId],
25
+ };
26
+ // ============================================================================
27
+ // QUERY HOOKS
28
+ // ============================================================================
29
+ /**
30
+ * Get products for a spot (public browse)
31
+ *
32
+ * @endpoint GET /api/v1/spots/{spotId}/products
33
+ */
34
+ function useSpotProducts(spotId, params, options) {
35
+ return (0, react_query_1.useQuery)({
36
+ queryKey: exports.productKeys.bySpot(spotId),
37
+ queryFn: async () => {
38
+ const client = (0, client_1.getApiClient)();
39
+ const queryParams = new URLSearchParams();
40
+ if (params?.limit)
41
+ queryParams.set('limit', String(params.limit));
42
+ if (params?.page)
43
+ queryParams.set('page', String(params.page));
44
+ if (params?.type)
45
+ queryParams.set('type', params.type);
46
+ const response = await client.get(`/api/v1/spots/${spotId}/products?${queryParams}`);
47
+ return response.data.data;
48
+ },
49
+ enabled: !!spotId,
50
+ ...options,
51
+ });
52
+ }
53
+ /**
54
+ * Get a product by ID
55
+ *
56
+ * @endpoint GET /api/v1/products/{productId}
57
+ */
58
+ function useProduct(productId, options) {
59
+ return (0, react_query_1.useQuery)({
60
+ queryKey: exports.productKeys.detail(productId),
61
+ queryFn: async () => {
62
+ const client = (0, client_1.getApiClient)();
63
+ const response = await client.get(`/api/v1/products/${productId}`);
64
+ return response.data.data;
65
+ },
66
+ enabled: !!productId,
67
+ ...options,
68
+ });
69
+ }
70
+ /**
71
+ * Get a product by slug (within a spot)
72
+ *
73
+ * @endpoint GET /api/v1/spots/{spotId}/products/slug/{slug}
74
+ */
75
+ function useProductBySlug(spotId, slug, options) {
76
+ return (0, react_query_1.useQuery)({
77
+ queryKey: exports.productKeys.bySlug(spotId, slug),
78
+ queryFn: async () => {
79
+ const client = (0, client_1.getApiClient)();
80
+ const response = await client.get(`/api/v1/spots/${spotId}/products/slug/${slug}`);
81
+ return response.data.data;
82
+ },
83
+ enabled: !!spotId && !!slug,
84
+ ...options,
85
+ });
86
+ }
87
+ // Note: To list products as a seller, use useSpotProducts with your spot ID.
88
+ // There is no cross-spot product listing endpoint currently.
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvcHJvZHVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQWlESCwwQ0FxQkM7QUFPRCxnQ0FjQztBQU9ELDRDQWlCQztBQWpIRCx1REFBa0Y7QUFDbEYsc0NBQXlDO0FBR3pDLCtFQUErRTtBQUMvRSxhQUFhO0FBQ2IsK0VBQStFO0FBRWxFLFFBQUEsV0FBVyxHQUFHO0lBQ3pCLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBVTtJQUMxQixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBVTtJQUNsRCxJQUFJLEVBQUUsQ0FBQyxPQUFpQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQVU7SUFDdkYsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQVU7SUFDdEQsTUFBTSxFQUFFLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsbUJBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQVU7SUFDL0QsTUFBTSxFQUFFLENBQUMsTUFBYyxFQUFFLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFVO0lBQzdGLE1BQU0sRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQVU7Q0FDMUUsQ0FBQztBQXNCRiwrRUFBK0U7QUFDL0UsY0FBYztBQUNkLCtFQUErRTtBQUUvRTs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixNQUFjLEVBQ2QsTUFBOEQsRUFDOUQsT0FBbUY7SUFFbkYsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxLQUFLLElBQXlDLEVBQUU7WUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUMxQyxJQUFJLE1BQU0sRUFBRSxLQUFLO2dCQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNsRSxJQUFJLE1BQU0sRUFBRSxJQUFJO2dCQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMvRCxJQUFJLE1BQU0sRUFBRSxJQUFJO2dCQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQy9CLGlCQUFpQixNQUFNLGFBQWEsV0FBVyxFQUFFLENBQ2xELENBQUM7WUFDRixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDakIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixVQUFVLENBQ3hCLFNBQWlCLEVBQ2pCLE9BQXdFO0lBRXhFLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLG1CQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUN2QyxPQUFPLEVBQUUsS0FBSyxJQUE4QixFQUFFO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBK0Isb0JBQW9CLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDakcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTO1FBQ3BCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLE1BQWMsRUFDZCxJQUFZLEVBQ1osT0FBd0U7SUFFeEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUMxQyxPQUFPLEVBQUUsS0FBSyxJQUE4QixFQUFFO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FDL0IsaUJBQWlCLE1BQU0sa0JBQWtCLElBQUksRUFBRSxDQUNoRCxDQUFDO1lBQ0YsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUk7UUFDM0IsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSw2REFBNkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb2R1Y3RzIFF1ZXJ5IEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgaG9va3MgZm9yIHByb2R1Y3QtcmVsYXRlZCBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMsIFVzZVF1ZXJ5UmVzdWx0IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IFByb2R1Y3QsIEFwaVJlc3BvbnNlLCBQYWdpbmF0ZWRSZXNwb25zZSwgUHJvZHVjdFR5cGUsIFByb2R1Y3RTdGF0dXMgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IHByb2R1Y3RLZXlzID0ge1xuICBhbGw6IFsncHJvZHVjdHMnXSBhcyBjb25zdCxcbiAgbGlzdHM6ICgpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFsuLi5wcm9kdWN0S2V5cy5saXN0cygpLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgZGV0YWlsczogKCkgPT4gWy4uLnByb2R1Y3RLZXlzLmFsbCwgJ2RldGFpbCddIGFzIGNvbnN0LFxuICBkZXRhaWw6IChpZDogc3RyaW5nKSA9PiBbLi4ucHJvZHVjdEtleXMuZGV0YWlscygpLCBpZF0gYXMgY29uc3QsXG4gIGJ5U2x1ZzogKHNwb3RJZDogc3RyaW5nLCBzbHVnOiBzdHJpbmcpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdzbHVnJywgc3BvdElkLCBzbHVnXSBhcyBjb25zdCxcbiAgYnlTcG90OiAoc3BvdElkOiBzdHJpbmcpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdzcG90Jywgc3BvdElkXSBhcyBjb25zdCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdEZpbHRlcnMge1xuICBzcG90SWQ/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9kdWN0VHlwZTtcbiAgc3RhdHVzPzogUHJvZHVjdFN0YXR1cztcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHBhZ2U/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdFdpdGhTcG90IGV4dGVuZHMgUHJvZHVjdCB7XG4gIHNwb3Q6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzbHVnOiBzdHJpbmc7XG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IHByb2R1Y3RzIGZvciBhIHNwb3QgKHB1YmxpYyBicm93c2UpXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL3Nwb3RzL3tzcG90SWR9L3Byb2R1Y3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTcG90UHJvZHVjdHMoXG4gIHNwb3RJZDogc3RyaW5nLFxuICBwYXJhbXM/OiB7IHR5cGU/OiBQcm9kdWN0VHlwZTsgbGltaXQ/OiBudW1iZXI7IHBhZ2U/OiBudW1iZXIgfSxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBhZ2luYXRlZFJlc3BvbnNlPFByb2R1Y3Q+PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFBhZ2luYXRlZFJlc3BvbnNlPFByb2R1Y3Q+PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJ5U3BvdChzcG90SWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPFByb2R1Y3Q+PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgaWYgKHBhcmFtcz8ubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSk7XG4gICAgICBpZiAocGFyYW1zPy5wYWdlKSBxdWVyeVBhcmFtcy5zZXQoJ3BhZ2UnLCBTdHJpbmcocGFyYW1zLnBhZ2UpKTtcbiAgICAgIGlmIChwYXJhbXM/LnR5cGUpIHF1ZXJ5UGFyYW1zLnNldCgndHlwZScsIHBhcmFtcy50eXBlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQYWdpbmF0ZWRSZXNwb25zZTxQcm9kdWN0Pj4+KFxuICAgICAgICBgL2FwaS92MS9zcG90cy8ke3Nwb3RJZH0vcHJvZHVjdHM/JHtxdWVyeVBhcmFtc31gXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhc3BvdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhIHByb2R1Y3QgYnkgSURcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvcHJvZHVjdHMve3Byb2R1Y3RJZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3QoXG4gIHByb2R1Y3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UHJvZHVjdFdpdGhTcG90PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFByb2R1Y3RXaXRoU3BvdD4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBwcm9kdWN0S2V5cy5kZXRhaWwocHJvZHVjdElkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQcm9kdWN0V2l0aFNwb3Q+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFByb2R1Y3RXaXRoU3BvdD4+KGAvYXBpL3YxL3Byb2R1Y3RzLyR7cHJvZHVjdElkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhcHJvZHVjdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhIHByb2R1Y3QgYnkgc2x1ZyAod2l0aGluIGEgc3BvdClcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvc3BvdHMve3Nwb3RJZH0vcHJvZHVjdHMvc2x1Zy97c2x1Z31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3RCeVNsdWcoXG4gIHNwb3RJZDogc3RyaW5nLFxuICBzbHVnOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQcm9kdWN0V2l0aFNwb3Q+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8UHJvZHVjdFdpdGhTcG90PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJ5U2x1ZyhzcG90SWQsIHNsdWcpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFByb2R1Y3RXaXRoU3BvdD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8UHJvZHVjdFdpdGhTcG90Pj4oXG4gICAgICAgIGAvYXBpL3YxL3Nwb3RzLyR7c3BvdElkfS9wcm9kdWN0cy9zbHVnLyR7c2x1Z31gXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhc3BvdElkICYmICEhc2x1ZyxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLy8gTm90ZTogVG8gbGlzdCBwcm9kdWN0cyBhcyBhIHNlbGxlciwgdXNlIHVzZVNwb3RQcm9kdWN0cyB3aXRoIHlvdXIgc3BvdCBJRC5cbi8vIFRoZXJlIGlzIG5vIGNyb3NzLXNwb3QgcHJvZHVjdCBsaXN0aW5nIGVuZHBvaW50IGN1cnJlbnRseS5cbiJdfQ==
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Spots Query Hooks
3
+ *
4
+ * TanStack Query hooks for spot-related operations.
5
+ */
6
+ import { UseQueryOptions, UseQueryResult, UseInfiniteQueryOptions, UseInfiniteQueryResult } from '@tanstack/react-query';
7
+ import type { Spot, SpotImage, PaginatedResponse } from '../types';
8
+ export declare const spotKeys: {
9
+ all: readonly ["spots"];
10
+ lists: () => readonly ["spots", "list"];
11
+ list: (filters?: Record<string, unknown>) => readonly ["spots", "list", Record<string, unknown> | undefined];
12
+ details: () => readonly ["spots", "detail"];
13
+ detail: (id: string) => readonly ["spots", "detail", string];
14
+ bySlug: (slug: string) => readonly ["spots", "slug", string];
15
+ byQR: (qrCode: string) => readonly ["spots", "qr", string];
16
+ images: (spotId: string) => readonly ["spots", "detail", string, "images"];
17
+ };
18
+ /**
19
+ * Get all spots (paginated)
20
+ *
21
+ * @endpoint GET /api/v1/spots
22
+ * @returns PaginatedResponse with spots array and meta
23
+ */
24
+ export declare function useSpots(params?: {
25
+ limit?: number;
26
+ page?: number;
27
+ city?: string;
28
+ type?: string;
29
+ templateSlugs?: string[];
30
+ vibeIds?: string[];
31
+ search?: string;
32
+ }, options?: Omit<UseQueryOptions<PaginatedResponse<Spot>>, 'queryKey' | 'queryFn'>): UseQueryResult<PaginatedResponse<Spot>>;
33
+ /**
34
+ * Get a spot by ID
35
+ *
36
+ * @endpoint GET /api/v1/spots/{spotId}
37
+ */
38
+ export declare function useSpot(spotId: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
39
+ /**
40
+ * Get a spot by slug
41
+ *
42
+ * @endpoint GET /api/v1/spots/slug/{slug}
43
+ */
44
+ export declare function useSpotBySlug(slug: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
45
+ /**
46
+ * Get a spot by QR code
47
+ *
48
+ * @endpoint GET /api/v1/spots/qr/{qrCode}
49
+ */
50
+ export declare function useSpotByQR(qrCode: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
51
+ /**
52
+ * Get images for a spot
53
+ *
54
+ * @endpoint GET /api/v1/spots/{spotId}/images
55
+ */
56
+ export declare function useSpotImages(spotId: string, options?: Omit<UseQueryOptions<SpotImage[]>, 'queryKey' | 'queryFn'>): UseQueryResult<SpotImage[]>;
57
+ /**
58
+ * Infinite scroll query for spots
59
+ *
60
+ * @endpoint GET /api/v1/spots (paginated)
61
+ * @returns Infinite query with pages of spots
62
+ */
63
+ export interface InfiniteSpotsParams {
64
+ limit?: number;
65
+ city?: string;
66
+ cityId?: string;
67
+ type?: string;
68
+ templateSlugs?: string[];
69
+ vibeIds?: string[];
70
+ search?: string;
71
+ }
72
+ export declare function useInfiniteSpots(params?: InfiniteSpotsParams, options?: Omit<UseInfiniteQueryOptions<PaginatedResponse<Spot>, Error, {
73
+ pages: PaginatedResponse<Spot>[];
74
+ pageParams: number[];
75
+ }>, 'queryKey' | 'queryFn' | 'getNextPageParam' | 'initialPageParam'>): UseInfiniteQueryResult<{
76
+ pages: PaginatedResponse<Spot>[];
77
+ pageParams: number[];
78
+ }, Error>;
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ /**
3
+ * Spots Query Hooks
4
+ *
5
+ * TanStack Query hooks for spot-related operations.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.spotKeys = void 0;
9
+ exports.useSpots = useSpots;
10
+ exports.useSpot = useSpot;
11
+ exports.useSpotBySlug = useSpotBySlug;
12
+ exports.useSpotByQR = useSpotByQR;
13
+ exports.useSpotImages = useSpotImages;
14
+ exports.useInfiniteSpots = useInfiniteSpots;
15
+ const react_query_1 = require("@tanstack/react-query");
16
+ const client_1 = require("../client");
17
+ // ============================================================================
18
+ // QUERY KEYS
19
+ // ============================================================================
20
+ exports.spotKeys = {
21
+ all: ['spots'],
22
+ lists: () => [...exports.spotKeys.all, 'list'],
23
+ list: (filters) => [...exports.spotKeys.lists(), filters],
24
+ details: () => [...exports.spotKeys.all, 'detail'],
25
+ detail: (id) => [...exports.spotKeys.details(), id],
26
+ bySlug: (slug) => [...exports.spotKeys.all, 'slug', slug],
27
+ byQR: (qrCode) => [...exports.spotKeys.all, 'qr', qrCode],
28
+ images: (spotId) => [...exports.spotKeys.detail(spotId), 'images'],
29
+ };
30
+ // ============================================================================
31
+ // QUERY HOOKS
32
+ // ============================================================================
33
+ /**
34
+ * Get all spots (paginated)
35
+ *
36
+ * @endpoint GET /api/v1/spots
37
+ * @returns PaginatedResponse with spots array and meta
38
+ */
39
+ function useSpots(params, options) {
40
+ return (0, react_query_1.useQuery)({
41
+ queryKey: exports.spotKeys.list(params),
42
+ queryFn: async () => {
43
+ const client = (0, client_1.getApiClient)();
44
+ const queryParams = new URLSearchParams();
45
+ if (params?.limit)
46
+ queryParams.set('limit', String(params.limit));
47
+ if (params?.page)
48
+ queryParams.set('page', String(params.page));
49
+ if (params?.city)
50
+ queryParams.set('city', params.city);
51
+ if (params?.type)
52
+ queryParams.set('type', params.type);
53
+ if (params?.search)
54
+ queryParams.set('search', params.search);
55
+ if (params?.templateSlugs) {
56
+ params.templateSlugs.forEach(slug => queryParams.append('templateSlugs', slug));
57
+ }
58
+ if (params?.vibeIds) {
59
+ params.vibeIds.forEach(id => queryParams.append('vibeIds', id));
60
+ }
61
+ const response = await client.get(`/api/v1/spots?${queryParams}`);
62
+ return response.data.data;
63
+ },
64
+ ...options,
65
+ });
66
+ }
67
+ /**
68
+ * Get a spot by ID
69
+ *
70
+ * @endpoint GET /api/v1/spots/{spotId}
71
+ */
72
+ function useSpot(spotId, options) {
73
+ return (0, react_query_1.useQuery)({
74
+ queryKey: exports.spotKeys.detail(spotId),
75
+ queryFn: async () => {
76
+ const client = (0, client_1.getApiClient)();
77
+ const response = await client.get(`/api/v1/spots/${spotId}`);
78
+ return response.data.data;
79
+ },
80
+ enabled: !!spotId,
81
+ ...options,
82
+ });
83
+ }
84
+ /**
85
+ * Get a spot by slug
86
+ *
87
+ * @endpoint GET /api/v1/spots/slug/{slug}
88
+ */
89
+ function useSpotBySlug(slug, options) {
90
+ return (0, react_query_1.useQuery)({
91
+ queryKey: exports.spotKeys.bySlug(slug),
92
+ queryFn: async () => {
93
+ const client = (0, client_1.getApiClient)();
94
+ const response = await client.get(`/api/v1/spots/slug/${slug}`);
95
+ return response.data.data;
96
+ },
97
+ enabled: !!slug,
98
+ ...options,
99
+ });
100
+ }
101
+ /**
102
+ * Get a spot by QR code
103
+ *
104
+ * @endpoint GET /api/v1/spots/qr/{qrCode}
105
+ */
106
+ function useSpotByQR(qrCode, options) {
107
+ return (0, react_query_1.useQuery)({
108
+ queryKey: exports.spotKeys.byQR(qrCode),
109
+ queryFn: async () => {
110
+ const client = (0, client_1.getApiClient)();
111
+ const response = await client.get(`/api/v1/spots/qr/${qrCode}`);
112
+ return response.data.data;
113
+ },
114
+ enabled: !!qrCode,
115
+ ...options,
116
+ });
117
+ }
118
+ /**
119
+ * Get images for a spot
120
+ *
121
+ * @endpoint GET /api/v1/spots/{spotId}/images
122
+ */
123
+ function useSpotImages(spotId, options) {
124
+ return (0, react_query_1.useQuery)({
125
+ queryKey: exports.spotKeys.images(spotId),
126
+ queryFn: async () => {
127
+ const client = (0, client_1.getApiClient)();
128
+ const response = await client.get(`/api/v1/spots/${spotId}/images`);
129
+ return response.data.data;
130
+ },
131
+ enabled: !!spotId,
132
+ ...options,
133
+ });
134
+ }
135
+ function useInfiniteSpots(params, options) {
136
+ return (0, react_query_1.useInfiniteQuery)({
137
+ queryKey: [...exports.spotKeys.lists(), 'infinite', params],
138
+ queryFn: async ({ pageParam }) => {
139
+ const client = (0, client_1.getApiClient)();
140
+ const queryParams = new URLSearchParams();
141
+ queryParams.set('page', String(pageParam));
142
+ if (params?.limit)
143
+ queryParams.set('limit', String(params.limit));
144
+ if (params?.city)
145
+ queryParams.set('city', params.city);
146
+ if (params?.cityId)
147
+ queryParams.set('cityId', params.cityId);
148
+ if (params?.type && params.type !== 'All')
149
+ queryParams.set('type', params.type);
150
+ if (params?.search?.trim())
151
+ queryParams.set('search', params.search.trim());
152
+ if (params?.templateSlugs) {
153
+ params.templateSlugs.forEach(slug => queryParams.append('templateSlugs', slug));
154
+ }
155
+ if (params?.vibeIds) {
156
+ params.vibeIds.forEach(id => queryParams.append('vibeIds', id));
157
+ }
158
+ const response = await client.get(`/api/v1/spots?${queryParams}`);
159
+ return response.data.data;
160
+ },
161
+ initialPageParam: 1,
162
+ getNextPageParam: (lastPage) => {
163
+ return lastPage.meta.hasNextPage ? lastPage.meta.page + 1 : undefined;
164
+ },
165
+ ...options,
166
+ });
167
+ }
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvc3BvdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQStCSCw0QkFpQ0M7QUFPRCwwQkFjQztBQU9ELHNDQWNDO0FBT0Qsa0NBY0M7QUFPRCxzQ0FjQztBQWtCRCw0Q0E4QkM7QUFsTUQsdURBQXFKO0FBQ3JKLHNDQUF5QztBQUd6QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUVsRSxRQUFBLFFBQVEsR0FBRztJQUN0QixHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQVU7SUFDdkIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxnQkFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDL0MsSUFBSSxFQUFFLENBQUMsT0FBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFVO0lBQ3BGLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFVO0lBQ25ELE1BQU0sRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFVO0lBQzVELE1BQU0sRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQVU7SUFDbEUsSUFBSSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBVTtJQUNsRSxNQUFNLEVBQUUsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxnQkFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENB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QkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRixDQUFDO1lBQ0QsSUFBSSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUF1QyxpQkFBaUIsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN4RyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLGdCQUFnQixFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDN0IsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDeEUsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNwb3RzIFF1ZXJ5IEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgaG9va3MgZm9yIHNwb3QtcmVsYXRlZCBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7IHVzZVF1ZXJ5LCB1c2VJbmZpbml0ZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMsIFVzZVF1ZXJ5UmVzdWx0LCBVc2VJbmZpbml0ZVF1ZXJ5T3B0aW9ucywgVXNlSW5maW5pdGVRdWVyeVJlc3VsdCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBTcG90LCBTcG90SW1hZ2UsIEFwaVJlc3BvbnNlLCBQYWdpbmF0ZWRSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3Qgc3BvdEtleXMgPSB7XG4gIGFsbDogWydzcG90cyddIGFzIGNvbnN0LFxuICBsaXN0czogKCkgPT4gWy4uLnNwb3RLZXlzLmFsbCwgJ2xpc3QnXSBhcyBjb25zdCxcbiAgbGlzdDogKGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gWy4uLnNwb3RLZXlzLmxpc3RzKCksIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBkZXRhaWxzOiAoKSA9PiBbLi4uc3BvdEtleXMuYWxsLCAnZGV0YWlsJ10gYXMgY29uc3QsXG4gIGRldGFpbDogKGlkOiBzdHJpbmcpID0+IFsuLi5zcG90S2V5cy5kZXRhaWxzKCksIGlkXSBhcyBjb25zdCxcbiAgYnlTbHVnOiAoc2x1Zzogc3RyaW5nKSA9PiBbLi4uc3BvdEtleXMuYWxsLCAnc2x1ZycsIHNsdWddIGFzIGNvbnN0LFxuICBieVFSOiAocXJDb2RlOiBzdHJpbmcpID0+IFsuLi5zcG90S2V5cy5hbGwsICdxcicsIHFyQ29kZV0gYXMgY29uc3QsXG4gIGltYWdlczogKHNwb3RJZDogc3RyaW5nKSA9PiBbLi4uc3BvdEtleXMuZGV0YWlsKHNwb3RJZCksICdpbWFnZXMnXSBhcyBjb25zdCxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IGFsbCBzcG90cyAocGFnaW5hdGVkKVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9zcG90c1xuICogQHJldHVybnMgUGFnaW5hdGVkUmVzcG9uc2Ugd2l0aCBzcG90cyBhcnJheSBhbmQgbWV0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdHMoXG4gIHBhcmFtcz86IHtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBwYWdlPzogbnVtYmVyO1xuICAgIGNpdHk/OiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICB0ZW1wbGF0ZVNsdWdzPzogc3RyaW5nW107XG4gICAgdmliZUlkcz86IHN0cmluZ1tdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgfSxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBhZ2luYXRlZFJlc3BvbnNlPFNwb3Q+PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFBhZ2luYXRlZFJlc3BvbnNlPFNwb3Q+PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHNwb3RLZXlzLmxpc3QocGFyYW1zKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXNwb25zZTxTcG90Pj4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIGlmIChwYXJhbXM/LmxpbWl0KSBxdWVyeVBhcmFtcy5zZXQoJ2xpbWl0JywgU3RyaW5nKHBhcmFtcy5saW1pdCkpO1xuICAgICAgaWYgKHBhcmFtcz8ucGFnZSkgcXVlcnlQYXJhbXMuc2V0KCdwYWdlJywgU3RyaW5nKHBhcmFtcy5wYWdlKSk7XG4gICAgICBpZiAocGFyYW1zPy5jaXR5KSBxdWVyeVBhcmFtcy5zZXQoJ2NpdHknLCBwYXJhbXMuY2l0eSk7XG4gICAgICBpZiAocGFyYW1zPy50eXBlKSBxdWVyeVBhcmFtcy5zZXQoJ3R5cGUnLCBwYXJhbXMudHlwZSk7XG4gICAgICBpZiAocGFyYW1zPy5zZWFyY2gpIHF1ZXJ5UGFyYW1zLnNldCgnc2VhcmNoJywgcGFyYW1zLnNlYXJjaCk7XG4gICAgICBpZiAocGFyYW1zPy50ZW1wbGF0ZVNsdWdzKSB7XG4gICAgICAgIHBhcmFtcy50ZW1wbGF0ZVNsdWdzLmZvckVhY2goc2x1ZyA9PiBxdWVyeVBhcmFtcy5hcHBlbmQoJ3RlbXBsYXRlU2x1Z3MnLCBzbHVnKSk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zPy52aWJlSWRzKSB7XG4gICAgICAgIHBhcmFtcy52aWJlSWRzLmZvckVhY2goaWQgPT4gcXVlcnlQYXJhbXMuYXBwZW5kKCd2aWJlSWRzJywgaWQpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQYWdpbmF0ZWRSZXNwb25zZTxTcG90Pj4+KGAvYXBpL3YxL3Nwb3RzPyR7cXVlcnlQYXJhbXN9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGEgc3BvdCBieSBJRFxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9zcG90cy97c3BvdElkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdChcbiAgc3BvdElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxTcG90PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFNwb3Q+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogc3BvdEtleXMuZGV0YWlsKHNwb3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8U3BvdD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8U3BvdD4+KGAvYXBpL3YxL3Nwb3RzLyR7c3BvdElkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhc3BvdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhIHNwb3QgYnkgc2x1Z1xuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9zcG90cy9zbHVnL3tzbHVnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdEJ5U2x1ZyhcbiAgc2x1Zzogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8U3BvdD4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxTcG90PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHNwb3RLZXlzLmJ5U2x1ZyhzbHVnKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxTcG90PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxTcG90Pj4oYC9hcGkvdjEvc3BvdHMvc2x1Zy8ke3NsdWd9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISFzbHVnLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhIHNwb3QgYnkgUVIgY29kZVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9zcG90cy9xci97cXJDb2RlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdEJ5UVIoXG4gIHFyQ29kZTogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8U3BvdD4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxTcG90PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHNwb3RLZXlzLmJ5UVIocXJDb2RlKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxTcG90PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxTcG90Pj4oYC9hcGkvdjEvc3BvdHMvcXIvJHtxckNvZGV9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISFxckNvZGUsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGltYWdlcyBmb3IgYSBzcG90XG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL3Nwb3RzL3tzcG90SWR9L2ltYWdlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdEltYWdlcyhcbiAgc3BvdElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxTcG90SW1hZ2VbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxTcG90SW1hZ2VbXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzcG90S2V5cy5pbWFnZXMoc3BvdElkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxTcG90SW1hZ2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8U3BvdEltYWdlW10+PihgL2FwaS92MS9zcG90cy8ke3Nwb3RJZH0vaW1hZ2VzYCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISFzcG90SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogSW5maW5pdGUgc2Nyb2xsIHF1ZXJ5IGZvciBzcG90c1xuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9zcG90cyAocGFnaW5hdGVkKVxuICogQHJldHVybnMgSW5maW5pdGUgcXVlcnkgd2l0aCBwYWdlcyBvZiBzcG90c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZmluaXRlU3BvdHNQYXJhbXMge1xuICBsaW1pdD86IG51bWJlcjtcbiAgY2l0eT86IHN0cmluZztcbiAgY2l0eUlkPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICB0ZW1wbGF0ZVNsdWdzPzogc3RyaW5nW107XG4gIHZpYmVJZHM/OiBzdHJpbmdbXTtcbiAgc2VhcmNoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlSW5maW5pdGVTcG90cyhcbiAgcGFyYW1zPzogSW5maW5pdGVTcG90c1BhcmFtcyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlSW5maW5pdGVRdWVyeU9wdGlvbnM8UGFnaW5hdGVkUmVzcG9uc2U8U3BvdD4sIEVycm9yLCB7IHBhZ2VzOiBQYWdpbmF0ZWRSZXNwb25zZTxTcG90PltdOyBwYWdlUGFyYW1zOiBudW1iZXJbXSB9PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJyB8ICdnZXROZXh0UGFnZVBhcmFtJyB8ICdpbml0aWFsUGFnZVBhcmFtJz5cbik6IFVzZUluZmluaXRlUXVlcnlSZXN1bHQ8eyBwYWdlczogUGFnaW5hdGVkUmVzcG9uc2U8U3BvdD5bXTsgcGFnZVBhcmFtczogbnVtYmVyW10gfSwgRXJyb3I+IHtcbiAgcmV0dXJuIHVzZUluZmluaXRlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBbLi4uc3BvdEtleXMubGlzdHMoKSwgJ2luZmluaXRlJywgcGFyYW1zXSBhcyBjb25zdCxcbiAgICBxdWVyeUZuOiBhc3luYyAoeyBwYWdlUGFyYW0gfSk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8U3BvdD4+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBxdWVyeVBhcmFtcy5zZXQoJ3BhZ2UnLCBTdHJpbmcocGFnZVBhcmFtKSk7XG4gICAgICBpZiAocGFyYW1zPy5saW1pdCkgcXVlcnlQYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhwYXJhbXMubGltaXQpKTtcbiAgICAgIGlmIChwYXJhbXM/LmNpdHkpIHF1ZXJ5UGFyYW1zLnNldCgnY2l0eScsIHBhcmFtcy5jaXR5KTtcbiAgICAgIGlmIChwYXJhbXM/LmNpdHlJZCkgcXVlcnlQYXJhbXMuc2V0KCdjaXR5SWQnLCBwYXJhbXMuY2l0eUlkKTtcbiAgICAgIGlmIChwYXJhbXM/LnR5cGUgJiYgcGFyYW1zLnR5cGUgIT09ICdBbGwnKSBxdWVyeVBhcmFtcy5zZXQoJ3R5cGUnLCBwYXJhbXMudHlwZSk7XG4gICAgICBpZiAocGFyYW1zPy5zZWFyY2g/LnRyaW0oKSkgcXVlcnlQYXJhbXMuc2V0KCdzZWFyY2gnLCBwYXJhbXMuc2VhcmNoLnRyaW0oKSk7XG4gICAgICBpZiAocGFyYW1zPy50ZW1wbGF0ZVNsdWdzKSB7XG4gICAgICAgIHBhcmFtcy50ZW1wbGF0ZVNsdWdzLmZvckVhY2goc2x1ZyA9PiBxdWVyeVBhcmFtcy5hcHBlbmQoJ3RlbXBsYXRlU2x1Z3MnLCBzbHVnKSk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zPy52aWJlSWRzKSB7XG4gICAgICAgIHBhcmFtcy52aWJlSWRzLmZvckVhY2goaWQgPT4gcXVlcnlQYXJhbXMuYXBwZW5kKCd2aWJlSWRzJywgaWQpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQYWdpbmF0ZWRSZXNwb25zZTxTcG90Pj4+KGAvYXBpL3YxL3Nwb3RzPyR7cXVlcnlQYXJhbXN9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgaW5pdGlhbFBhZ2VQYXJhbTogMSxcbiAgICBnZXROZXh0UGFnZVBhcmFtOiAobGFzdFBhZ2UpID0+IHtcbiAgICAgIHJldHVybiBsYXN0UGFnZS5tZXRhLmhhc05leHRQYWdlID8gbGFzdFBhZ2UubWV0YS5wYWdlICsgMSA6IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Templates Query Hooks
3
+ *
4
+ * TanStack Query hooks for post template operations.
5
+ *
6
+ * Templates are reference data (flat array), not paginated.
7
+ */
8
+ import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
9
+ import type { Template } from '../types';
10
+ export declare const templateKeys: {
11
+ all: readonly ["templates"];
12
+ lists: () => readonly ["templates", "list"];
13
+ list: (filters?: {
14
+ spotType?: string;
15
+ }) => readonly ["templates", "list", {
16
+ spotType?: string;
17
+ } | undefined];
18
+ details: () => readonly ["templates", "detail"];
19
+ detail: (id: string) => readonly ["templates", "detail", string];
20
+ bySlug: (slug: string) => readonly ["templates", "slug", string];
21
+ };
22
+ /**
23
+ * Get all templates (flat array - reference data)
24
+ *
25
+ * @endpoint GET /api/v1/templates
26
+ * @returns Flat array of templates (not paginated)
27
+ */
28
+ export declare function useTemplates(params?: {
29
+ spotType?: string;
30
+ }, options?: Omit<UseQueryOptions<Template[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Template[]>;
31
+ /**
32
+ * Get a template by ID
33
+ *
34
+ * @endpoint GET /api/v1/templates/{templateId}
35
+ */
36
+ export declare function useTemplate(templateId: string, options?: Omit<UseQueryOptions<Template>, 'queryKey' | 'queryFn'>): UseQueryResult<Template>;
37
+ /**
38
+ * Get a template by slug
39
+ *
40
+ * @endpoint GET /api/v1/templates/slug/{slug}
41
+ */
42
+ export declare function useTemplateBySlug(slug: string, options?: Omit<UseQueryOptions<Template>, 'queryKey' | 'queryFn'>): UseQueryResult<Template>;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * Templates Query Hooks
4
+ *
5
+ * TanStack Query hooks for post template operations.
6
+ *
7
+ * Templates are reference data (flat array), not paginated.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.templateKeys = void 0;
11
+ exports.useTemplates = useTemplates;
12
+ exports.useTemplate = useTemplate;
13
+ exports.useTemplateBySlug = useTemplateBySlug;
14
+ const react_query_1 = require("@tanstack/react-query");
15
+ const client_1 = require("../client");
16
+ // ============================================================================
17
+ // QUERY KEYS
18
+ // ============================================================================
19
+ exports.templateKeys = {
20
+ all: ['templates'],
21
+ lists: () => [...exports.templateKeys.all, 'list'],
22
+ list: (filters) => [...exports.templateKeys.lists(), filters],
23
+ details: () => [...exports.templateKeys.all, 'detail'],
24
+ detail: (id) => [...exports.templateKeys.details(), id],
25
+ bySlug: (slug) => [...exports.templateKeys.all, 'slug', slug],
26
+ };
27
+ // ============================================================================
28
+ // QUERY HOOKS
29
+ // ============================================================================
30
+ /**
31
+ * Get all templates (flat array - reference data)
32
+ *
33
+ * @endpoint GET /api/v1/templates
34
+ * @returns Flat array of templates (not paginated)
35
+ */
36
+ function useTemplates(params, options) {
37
+ return (0, react_query_1.useQuery)({
38
+ queryKey: exports.templateKeys.list(params),
39
+ queryFn: async () => {
40
+ const client = (0, client_1.getApiClient)();
41
+ const queryParams = new URLSearchParams();
42
+ if (params?.spotType)
43
+ queryParams.set('spotType', params.spotType);
44
+ const response = await client.get(`/api/v1/templates?${queryParams}`);
45
+ // Templates endpoint returns flat array: { data: [] }
46
+ return response.data.data;
47
+ },
48
+ staleTime: 1000 * 60 * 60, // Cache for 1 hour (reference data)
49
+ ...options,
50
+ });
51
+ }
52
+ /**
53
+ * Get a template by ID
54
+ *
55
+ * @endpoint GET /api/v1/templates/{templateId}
56
+ */
57
+ function useTemplate(templateId, options) {
58
+ return (0, react_query_1.useQuery)({
59
+ queryKey: exports.templateKeys.detail(templateId),
60
+ queryFn: async () => {
61
+ const client = (0, client_1.getApiClient)();
62
+ const response = await client.get(`/api/v1/templates/${templateId}`);
63
+ return response.data.data;
64
+ },
65
+ enabled: !!templateId,
66
+ ...options,
67
+ });
68
+ }
69
+ /**
70
+ * Get a template by slug
71
+ *
72
+ * @endpoint GET /api/v1/templates/slug/{slug}
73
+ */
74
+ function useTemplateBySlug(slug, options) {
75
+ return (0, react_query_1.useQuery)({
76
+ queryKey: exports.templateKeys.bySlug(slug),
77
+ queryFn: async () => {
78
+ const client = (0, client_1.getApiClient)();
79
+ const response = await client.get(`/api/v1/templates/slug/${slug}`);
80
+ return response.data.data;
81
+ },
82
+ enabled: !!slug,
83
+ ...options,
84
+ });
85
+ }
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9xdWVyaWVzL3RlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUE2Qkgsb0NBaUJDO0FBT0Qsa0NBY0M7QUFPRCw4Q0FjQztBQXRGRCx1REFBa0Y7QUFDbEYsc0NBQXlDO0FBR3pDLCtFQUErRTtBQUMvRSxhQUFhO0FBQ2IsK0VBQStFO0FBRWxFLFFBQUEsWUFBWSxHQUFHO0lBQzFCLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBVTtJQUMzQixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG9CQUFZLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBVTtJQUNuRCxJQUFJLEVBQUUsQ0FBQyxPQUErQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsb0JBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQVU7SUFDdEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxvQkFBWSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQVU7SUFDdkQsTUFBTSxFQUFFLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsb0JBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQVU7SUFDaEUsTUFBTSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsb0JBQVksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBVTtDQUN2RSxDQUFDO0FBRUYsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCwrRUFBK0U7QUFFL0U7Ozs7O0dBS0c7QUFDSCxTQUFnQixZQUFZLENBQzFCLE1BQThCLEVBQzlCLE9BQW1FO0lBRW5FLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLG9CQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxPQUFPLEVBQUUsS0FBSyxJQUF5QixFQUFFO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDMUMsSUFBSSxNQUFNLEVBQUUsUUFBUTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkUsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUEwQixxQkFBcUIsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUMvRixzREFBc0Q7WUFDdEQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixDQUFDO1FBQ0QsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLG9DQUFvQztRQUMvRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVcsQ0FDekIsVUFBa0IsRUFDbEIsT0FBaUU7SUFFakUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsb0JBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3pDLE9BQU8sRUFBRSxLQUFLLElBQXVCLEVBQUU7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUF3QixxQkFBcUIsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUM1RixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLFVBQVU7UUFDckIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FDL0IsSUFBWSxFQUNaLE9BQWlFO0lBRWpFLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLG9CQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNuQyxPQUFPLEVBQUUsS0FBSyxJQUF1QixFQUFFO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBd0IsMEJBQTBCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0YsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJO1FBQ2YsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVtcGxhdGVzIFF1ZXJ5IEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgaG9va3MgZm9yIHBvc3QgdGVtcGxhdGUgb3BlcmF0aW9ucy5cbiAqXG4gKiBUZW1wbGF0ZXMgYXJlIHJlZmVyZW5jZSBkYXRhIChmbGF0IGFycmF5KSwgbm90IHBhZ2luYXRlZC5cbiAqL1xuXG5pbXBvcnQgeyB1c2VRdWVyeSwgVXNlUXVlcnlPcHRpb25zLCBVc2VRdWVyeVJlc3VsdCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBnZXRBcGlDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSwgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IHRlbXBsYXRlS2V5cyA9IHtcbiAgYWxsOiBbJ3RlbXBsYXRlcyddIGFzIGNvbnN0LFxuICBsaXN0czogKCkgPT4gWy4uLnRlbXBsYXRlS2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogeyBzcG90VHlwZT86IHN0cmluZyB9KSA9PiBbLi4udGVtcGxhdGVLZXlzLmxpc3RzKCksIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBkZXRhaWxzOiAoKSA9PiBbLi4udGVtcGxhdGVLZXlzLmFsbCwgJ2RldGFpbCddIGFzIGNvbnN0LFxuICBkZXRhaWw6IChpZDogc3RyaW5nKSA9PiBbLi4udGVtcGxhdGVLZXlzLmRldGFpbHMoKSwgaWRdIGFzIGNvbnN0LFxuICBieVNsdWc6IChzbHVnOiBzdHJpbmcpID0+IFsuLi50ZW1wbGF0ZUtleXMuYWxsLCAnc2x1ZycsIHNsdWddIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgYWxsIHRlbXBsYXRlcyAoZmxhdCBhcnJheSAtIHJlZmVyZW5jZSBkYXRhKVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS90ZW1wbGF0ZXNcbiAqIEByZXR1cm5zIEZsYXQgYXJyYXkgb2YgdGVtcGxhdGVzIChub3QgcGFnaW5hdGVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVGVtcGxhdGVzKFxuICBwYXJhbXM/OiB7IHNwb3RUeXBlPzogc3RyaW5nIH0sXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxUZW1wbGF0ZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFRlbXBsYXRlW10+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogdGVtcGxhdGVLZXlzLmxpc3QocGFyYW1zKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgaWYgKHBhcmFtcz8uc3BvdFR5cGUpIHF1ZXJ5UGFyYW1zLnNldCgnc3BvdFR5cGUnLCBwYXJhbXMuc3BvdFR5cGUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFRlbXBsYXRlW10+PihgL2FwaS92MS90ZW1wbGF0ZXM/JHtxdWVyeVBhcmFtc31gKTtcbiAgICAgIC8vIFRlbXBsYXRlcyBlbmRwb2ludCByZXR1cm5zIGZsYXQgYXJyYXk6IHsgZGF0YTogW10gfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNjAsIC8vIENhY2hlIGZvciAxIGhvdXIgKHJlZmVyZW5jZSBkYXRhKVxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhIHRlbXBsYXRlIGJ5IElEXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL3RlbXBsYXRlcy97dGVtcGxhdGVJZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRlbXBsYXRlKFxuICB0ZW1wbGF0ZUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxUZW1wbGF0ZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxUZW1wbGF0ZT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiB0ZW1wbGF0ZUtleXMuZGV0YWlsKHRlbXBsYXRlSWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFRlbXBsYXRlPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxUZW1wbGF0ZT4+KGAvYXBpL3YxL3RlbXBsYXRlcy8ke3RlbXBsYXRlSWR9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISF0ZW1wbGF0ZUlkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhIHRlbXBsYXRlIGJ5IHNsdWdcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvdGVtcGxhdGVzL3NsdWcve3NsdWd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VUZW1wbGF0ZUJ5U2x1ZyhcbiAgc2x1Zzogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8VGVtcGxhdGU+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8VGVtcGxhdGU+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogdGVtcGxhdGVLZXlzLmJ5U2x1ZyhzbHVnKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxUZW1wbGF0ZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8VGVtcGxhdGU+PihgL2FwaS92MS90ZW1wbGF0ZXMvc2x1Zy8ke3NsdWd9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgZW5hYmxlZDogISFzbHVnLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19