@spotsdev/sdk 1.4.0 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/index.cjs +2166 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +1656 -0
  4. package/dist/index.d.ts +1655 -36
  5. package/dist/index.js +2021 -64
  6. package/dist/index.js.map +1 -0
  7. package/package.json +22 -6
  8. package/src/api/entities.ts +171 -170
  9. package/src/api/mutations/products.ts +18 -2
  10. package/src/api/queries/index.ts +4 -0
  11. package/src/api/queries/payments.ts +67 -0
  12. package/dist/api/client.d.ts +0 -12
  13. package/dist/api/client.js +0 -72
  14. package/dist/api/entities.d.ts +0 -305
  15. package/dist/api/entities.js +0 -13
  16. package/dist/api/mutations/clubs.d.ts +0 -47
  17. package/dist/api/mutations/clubs.js +0 -97
  18. package/dist/api/mutations/conversations.d.ts +0 -45
  19. package/dist/api/mutations/conversations.js +0 -114
  20. package/dist/api/mutations/index.d.ts +0 -14
  21. package/dist/api/mutations/index.js +0 -40
  22. package/dist/api/mutations/notifications.d.ts +0 -38
  23. package/dist/api/mutations/notifications.js +0 -64
  24. package/dist/api/mutations/orders.d.ts +0 -73
  25. package/dist/api/mutations/orders.js +0 -114
  26. package/dist/api/mutations/posts.d.ts +0 -123
  27. package/dist/api/mutations/posts.js +0 -242
  28. package/dist/api/mutations/products.d.ts +0 -81
  29. package/dist/api/mutations/products.js +0 -98
  30. package/dist/api/mutations/redemptions.d.ts +0 -33
  31. package/dist/api/mutations/redemptions.js +0 -63
  32. package/dist/api/mutations/spots.d.ts +0 -93
  33. package/dist/api/mutations/spots.js +0 -167
  34. package/dist/api/mutations/users.d.ts +0 -73
  35. package/dist/api/mutations/users.js +0 -175
  36. package/dist/api/queries/auth.d.ts +0 -37
  37. package/dist/api/queries/auth.js +0 -61
  38. package/dist/api/queries/clubs.d.ts +0 -52
  39. package/dist/api/queries/clubs.js +0 -116
  40. package/dist/api/queries/conversations.d.ts +0 -52
  41. package/dist/api/queries/conversations.js +0 -83
  42. package/dist/api/queries/index.d.ts +0 -28
  43. package/dist/api/queries/index.js +0 -69
  44. package/dist/api/queries/misc.d.ts +0 -30
  45. package/dist/api/queries/misc.js +0 -91
  46. package/dist/api/queries/notifications.d.ts +0 -34
  47. package/dist/api/queries/notifications.js +0 -62
  48. package/dist/api/queries/orders.d.ts +0 -45
  49. package/dist/api/queries/orders.js +0 -93
  50. package/dist/api/queries/posts.d.ts +0 -92
  51. package/dist/api/queries/posts.js +0 -233
  52. package/dist/api/queries/products.d.ts +0 -48
  53. package/dist/api/queries/products.js +0 -87
  54. package/dist/api/queries/spots.d.ts +0 -93
  55. package/dist/api/queries/spots.js +0 -250
  56. package/dist/api/queries/templates.d.ts +0 -39
  57. package/dist/api/queries/templates.js +0 -81
  58. package/dist/api/queries/users.d.ts +0 -104
  59. package/dist/api/queries/users.js +0 -235
  60. package/dist/api/queries/wallet.d.ts +0 -109
  61. package/dist/api/queries/wallet.js +0 -136
  62. package/dist/api/services/index.d.ts +0 -2
  63. package/dist/api/services/index.js +0 -8
  64. package/dist/api/services/marketplace.d.ts +0 -129
  65. package/dist/api/services/marketplace.js +0 -168
  66. package/dist/api/types.d.ts +0 -57
  67. package/dist/api/types.js +0 -33
@@ -1,87 +0,0 @@
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 /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(`/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 /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(`/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 /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(`/spots/${spotId}/products/slug/${slug}`);
81
- return response.data.data;
82
- },
83
- enabled: !!spotId && !!slug,
84
- ...options,
85
- });
86
- }
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvcHJvZHVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQXNESCwwQ0F3QkM7QUFPRCxnQ0FnQkM7QUFPRCw0Q0FpQkM7QUEzSEQsdURBQXlGO0FBQ3pGLHNDQUFzQztBQVV0QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUVsRSxRQUFBLFdBQVcsR0FBRztJQUN6QixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQVU7SUFDMUIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDbEQsSUFBSSxFQUFFLENBQUMsT0FBaUMsRUFBRSxFQUFFLENBQzFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBVTtJQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBVTtJQUN0RCxNQUFNLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBVTtJQUMvRCxNQUFNLEVBQUUsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLEVBQUUsQ0FDdkMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFVO0lBQ3JELE1BQU0sRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG1CQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQVU7Q0FDMUUsQ0FBQTtBQWtCRCwrRUFBK0U7QUFDL0UsY0FBYztBQUNkLCtFQUErRTtBQUUvRTs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixNQUFjLEVBQ2QsTUFBNEQsRUFDNUQsT0FHQztJQUVELE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLG1CQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxPQUFPLEVBQUUsS0FBSyxJQUF5QyxFQUFFO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7WUFDekMsSUFBSSxNQUFNLEVBQUUsS0FBSztnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDakUsSUFBSSxNQUFNLEVBQUUsSUFBSTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDOUQsSUFBSSxNQUFNLEVBQUUsSUFBSTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixVQUFVLE1BQU0sYUFBYSxXQUFXLEVBQUUsQ0FDM0MsQ0FBQTtZQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDM0IsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTTtRQUNqQixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsU0FBaUIsRUFDakIsT0FBd0U7SUFFeEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxLQUFLLElBQThCLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUE7WUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixhQUFhLFNBQVMsRUFBRSxDQUN6QixDQUFBO1lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUMzQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTO1FBQ3BCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLE1BQWMsRUFDZCxJQUFZLEVBQ1osT0FBd0U7SUFFeEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsbUJBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUMxQyxPQUFPLEVBQUUsS0FBSyxJQUE4QixFQUFFO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FDL0IsVUFBVSxNQUFNLGtCQUFrQixJQUFJLEVBQUUsQ0FDekMsQ0FBQTtZQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDM0IsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJO1FBQzNCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb2R1Y3RzIFF1ZXJ5IEhvb2tzXG4gKlxuICogVGFuU3RhY2sgUXVlcnkgaG9va3MgZm9yIHByb2R1Y3QtcmVsYXRlZCBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7dXNlUXVlcnksIHR5cGUgVXNlUXVlcnlPcHRpb25zLCB0eXBlIFVzZVF1ZXJ5UmVzdWx0fSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknXG5pbXBvcnQge2dldEFwaUNsaWVudH0gZnJvbSAnLi4vY2xpZW50J1xuaW1wb3J0IHR5cGUge1xuICBQcm9kdWN0LFxuICBBcGlSZXNwb25zZSxcbiAgUGFnaW5hdGVkUmVzcG9uc2UsXG4gIFByb2R1Y3RUeXBlLFxuICBQcm9kdWN0U3RhdHVzLFxuICBTcG90LFxufSBmcm9tICcuLi90eXBlcydcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgcHJvZHVjdEtleXMgPSB7XG4gIGFsbDogWydwcm9kdWN0cyddIGFzIGNvbnN0LFxuICBsaXN0czogKCkgPT4gWy4uLnByb2R1Y3RLZXlzLmFsbCwgJ2xpc3QnXSBhcyBjb25zdCxcbiAgbGlzdDogKGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT5cbiAgICBbLi4ucHJvZHVjdEtleXMubGlzdHMoKSwgZmlsdGVyc10gYXMgY29uc3QsXG4gIGRldGFpbHM6ICgpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdkZXRhaWwnXSBhcyBjb25zdCxcbiAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLnByb2R1Y3RLZXlzLmRldGFpbHMoKSwgaWRdIGFzIGNvbnN0LFxuICBieVNsdWc6IChzcG90SWQ6IHN0cmluZywgc2x1Zzogc3RyaW5nKSA9PlxuICAgIFsuLi5wcm9kdWN0S2V5cy5hbGwsICdzbHVnJywgc3BvdElkLCBzbHVnXSBhcyBjb25zdCxcbiAgYnlTcG90OiAoc3BvdElkOiBzdHJpbmcpID0+IFsuLi5wcm9kdWN0S2V5cy5hbGwsICdzcG90Jywgc3BvdElkXSBhcyBjb25zdCxcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0RmlsdGVycyB7XG4gIHNwb3RJZD86IHN0cmluZ1xuICB0eXBlPzogUHJvZHVjdFR5cGVcbiAgc3RhdHVzPzogUHJvZHVjdFN0YXR1c1xuICBsaW1pdD86IG51bWJlclxuICBwYWdlPzogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdFdpdGhTcG90IGV4dGVuZHMgUHJvZHVjdCB7XG4gIHNwb3Q6IFBpY2s8U3BvdCwgJ2lkJyB8ICduYW1lJyB8ICdzbHVnJz5cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgcHJvZHVjdHMgZm9yIGEgc3BvdCAocHVibGljIGJyb3dzZSlcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9zcG90cy97c3BvdElkfS9wcm9kdWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdFByb2R1Y3RzKFxuICBzcG90SWQ6IHN0cmluZyxcbiAgcGFyYW1zPzoge3R5cGU/OiBQcm9kdWN0VHlwZTsgbGltaXQ/OiBudW1iZXI7IHBhZ2U/OiBudW1iZXJ9LFxuICBvcHRpb25zPzogT21pdDxcbiAgICBVc2VRdWVyeU9wdGlvbnM8UGFnaW5hdGVkUmVzcG9uc2U8UHJvZHVjdD4+LFxuICAgICdxdWVyeUtleScgfCAncXVlcnlGbidcbiAgPixcbik6IFVzZVF1ZXJ5UmVzdWx0PFBhZ2luYXRlZFJlc3BvbnNlPFByb2R1Y3Q+PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJ5U3BvdChzcG90SWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPFByb2R1Y3Q+PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgIGlmIChwYXJhbXM/LmxpbWl0KSBxdWVyeVBhcmFtcy5zZXQoJ2xpbWl0JywgU3RyaW5nKHBhcmFtcy5saW1pdCkpXG4gICAgICBpZiAocGFyYW1zPy5wYWdlKSBxdWVyeVBhcmFtcy5zZXQoJ3BhZ2UnLCBTdHJpbmcocGFyYW1zLnBhZ2UpKVxuICAgICAgaWYgKHBhcmFtcz8udHlwZSkgcXVlcnlQYXJhbXMuc2V0KCd0eXBlJywgcGFyYW1zLnR5cGUpXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8UGFnaW5hdGVkUmVzcG9uc2U8UHJvZHVjdD4+PihcbiAgICAgICAgYC9zcG90cy8ke3Nwb3RJZH0vcHJvZHVjdHM/JHtxdWVyeVBhcmFtc31gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFzcG90SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgYSBwcm9kdWN0IGJ5IElEXG4gKlxuICogQGVuZHBvaW50IEdFVCAvcHJvZHVjdHMve3Byb2R1Y3RJZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3QoXG4gIHByb2R1Y3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UHJvZHVjdFdpdGhTcG90PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz4sXG4pOiBVc2VRdWVyeVJlc3VsdDxQcm9kdWN0V2l0aFNwb3Q+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcHJvZHVjdEtleXMuZGV0YWlsKHByb2R1Y3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UHJvZHVjdFdpdGhTcG90PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFByb2R1Y3RXaXRoU3BvdD4+KFxuICAgICAgICBgL3Byb2R1Y3RzLyR7cHJvZHVjdElkfWAsXG4gICAgICApXG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhXG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXByb2R1Y3RJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuXG4vKipcbiAqIEdldCBhIHByb2R1Y3QgYnkgc2x1ZyAod2l0aGluIGEgc3BvdClcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9zcG90cy97c3BvdElkfS9wcm9kdWN0cy9zbHVnL3tzbHVnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZHVjdEJ5U2x1ZyhcbiAgc3BvdElkOiBzdHJpbmcsXG4gIHNsdWc6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFByb2R1Y3RXaXRoU3BvdD4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8UHJvZHVjdFdpdGhTcG90PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHByb2R1Y3RLZXlzLmJ5U2x1ZyhzcG90SWQsIHNsdWcpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFByb2R1Y3RXaXRoU3BvdD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQcm9kdWN0V2l0aFNwb3Q+PihcbiAgICAgICAgYC9zcG90cy8ke3Nwb3RJZH0vcHJvZHVjdHMvc2x1Zy8ke3NsdWd9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGFcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhc3BvdElkICYmICEhc2x1ZyxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuIl19
@@ -1,93 +0,0 @@
1
- /**
2
- * Spots Query Hooks
3
- *
4
- * TanStack Query hooks for spot-related operations.
5
- */
6
- import { type UseQueryOptions, type UseQueryResult, type UseInfiniteQueryOptions, type UseInfiniteQueryResult } from '@tanstack/react-query';
7
- import { type PaginatedResponse, type Spot, type SpotImage } 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
20
- *
21
- * @endpoint GET /spots
22
- */
23
- export declare function useSpots(params?: {
24
- limit?: number;
25
- city?: string;
26
- type?: string;
27
- lat?: number;
28
- lng?: number;
29
- radius?: number;
30
- search?: string;
31
- vibes?: string;
32
- cityId?: string;
33
- page?: number;
34
- }, options?: Omit<UseQueryOptions<Spot[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot[]>;
35
- /**
36
- * Get a spot by ID
37
- *
38
- * @endpoint GET /spots/{spotId}
39
- */
40
- export declare function useSpot(spotId: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
41
- /**
42
- * Get a spot by slug
43
- *
44
- * @endpoint GET /spots/slug/{slug}
45
- */
46
- export declare function useSpotBySlug(slug: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
47
- /**
48
- * Get a spot by QR code
49
- *
50
- * @endpoint GET /spots/qr/{qrCode}
51
- */
52
- export declare function useSpotByQR(qrCode: string, options?: Omit<UseQueryOptions<Spot>, 'queryKey' | 'queryFn'>): UseQueryResult<Spot>;
53
- /**
54
- * Get images for a spot
55
- *
56
- * @endpoint GET /spots/{spotId}/images
57
- */
58
- export declare function useSpotImages(spotId: string, options?: Omit<UseQueryOptions<SpotImage[]>, 'queryKey' | 'queryFn'>): UseQueryResult<SpotImage[]>;
59
- /**
60
- * Check if a spot is favorited by the current user
61
- *
62
- * @endpoint GET /spots/{spotId}/favorite
63
- */
64
- export declare function useSpotFavoriteStatus(spotId: string, options?: Omit<UseQueryOptions<{
65
- isFavorite: boolean;
66
- }>, 'queryKey' | 'queryFn'>): UseQueryResult<{
67
- isFavorite: boolean;
68
- }>;
69
- /**
70
- * Params for infinite spots query
71
- */
72
- export interface InfiniteSpotsParams {
73
- limit?: number;
74
- city?: string;
75
- cityId?: string;
76
- type?: string;
77
- templateSlugs?: string[];
78
- vibeIds?: string[];
79
- search?: string;
80
- }
81
- /**
82
- * Infinite scroll query for spots
83
- *
84
- * @endpoint GET /spots (paginated)
85
- * @returns Infinite query with pages of spots
86
- */
87
- export declare function useInfiniteSpots(params?: InfiniteSpotsParams, options?: Omit<UseInfiniteQueryOptions<PaginatedResponse<Spot>, Error, {
88
- pages: PaginatedResponse<Spot>[];
89
- pageParams: number[];
90
- }>, 'queryKey' | 'queryFn' | 'getNextPageParam' | 'initialPageParam'>): UseInfiniteQueryResult<{
91
- pages: PaginatedResponse<Spot>[];
92
- pageParams: number[];
93
- }, Error>;
@@ -1,250 +0,0 @@
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.useSpotFavoriteStatus = useSpotFavoriteStatus;
15
- exports.useInfiniteSpots = useInfiniteSpots;
16
- const react_query_1 = require("@tanstack/react-query");
17
- const client_1 = require("../client");
18
- // ============================================================================
19
- // HELPER FUNCTIONS
20
- // ============================================================================
21
- /**
22
- * Extract array data from API response
23
- * API returns { success, data: { data: [...], meta: {...} } } or { success, data: [...] }
24
- */
25
- function extractArrayData(data) {
26
- if (Array.isArray(data)) {
27
- return data;
28
- }
29
- if (data && typeof data === 'object' && 'data' in data) {
30
- const nested = data.data;
31
- if (Array.isArray(nested)) {
32
- return nested;
33
- }
34
- }
35
- return [];
36
- }
37
- /**
38
- * Extract single object data from API response
39
- */
40
- function extractObjectData(data) {
41
- if (data &&
42
- typeof data === 'object' &&
43
- 'data' in data &&
44
- !Array.isArray(data)) {
45
- const nested = data.data;
46
- if (nested &&
47
- typeof nested === 'object' &&
48
- 'data' in nested &&
49
- !Array.isArray(nested)) {
50
- return nested.data;
51
- }
52
- return nested;
53
- }
54
- return data;
55
- }
56
- // ============================================================================
57
- // QUERY KEYS
58
- // ============================================================================
59
- exports.spotKeys = {
60
- all: ['spots'],
61
- lists: () => [...exports.spotKeys.all, 'list'],
62
- list: (filters) => [...exports.spotKeys.lists(), filters],
63
- details: () => [...exports.spotKeys.all, 'detail'],
64
- detail: (id) => [...exports.spotKeys.details(), id],
65
- bySlug: (slug) => [...exports.spotKeys.all, 'slug', slug],
66
- byQR: (qrCode) => [...exports.spotKeys.all, 'qr', qrCode],
67
- images: (spotId) => [...exports.spotKeys.detail(spotId), 'images'],
68
- };
69
- // ============================================================================
70
- // QUERY HOOKS
71
- // ============================================================================
72
- /**
73
- * Get all spots
74
- *
75
- * @endpoint GET /spots
76
- */
77
- function useSpots(params, options) {
78
- return (0, react_query_1.useQuery)({
79
- queryKey: exports.spotKeys.list(params),
80
- queryFn: async () => {
81
- const client = (0, client_1.getApiClient)();
82
- const queryParams = new URLSearchParams();
83
- if (params?.limit)
84
- queryParams.set('limit', String(params.limit));
85
- if (params?.city)
86
- queryParams.set('city', params.city);
87
- if (params?.type)
88
- queryParams.set('type', params.type);
89
- if (params?.lat)
90
- queryParams.set('lat', String(params.lat));
91
- if (params?.lng)
92
- queryParams.set('lng', String(params.lng));
93
- if (params?.radius)
94
- queryParams.set('radius', String(params.radius));
95
- if (params?.search)
96
- queryParams.set('search', params.search);
97
- if (params?.vibes)
98
- queryParams.set('vibeIds', params.vibes);
99
- if (params?.cityId)
100
- queryParams.set('cityId', params.cityId);
101
- if (params?.page)
102
- queryParams.set('page', String(params.page));
103
- const response = await client.get(`/spots?${queryParams}`);
104
- return extractArrayData(response.data.data);
105
- },
106
- ...options,
107
- });
108
- }
109
- /**
110
- * Get a spot by ID
111
- *
112
- * @endpoint GET /spots/{spotId}
113
- */
114
- function useSpot(spotId, options) {
115
- return (0, react_query_1.useQuery)({
116
- queryKey: exports.spotKeys.detail(spotId),
117
- queryFn: async () => {
118
- const client = (0, client_1.getApiClient)();
119
- const response = await client.get(`/spots/${spotId}`);
120
- return extractObjectData(response.data.data);
121
- },
122
- enabled: !!spotId,
123
- ...options,
124
- });
125
- }
126
- /**
127
- * Get a spot by slug
128
- *
129
- * @endpoint GET /spots/slug/{slug}
130
- */
131
- function useSpotBySlug(slug, options) {
132
- return (0, react_query_1.useQuery)({
133
- queryKey: exports.spotKeys.bySlug(slug),
134
- queryFn: async () => {
135
- const client = (0, client_1.getApiClient)();
136
- const response = await client.get(`/spots/slug/${slug}`);
137
- return extractObjectData(response.data.data);
138
- },
139
- enabled: !!slug,
140
- ...options,
141
- });
142
- }
143
- /**
144
- * Get a spot by QR code
145
- *
146
- * @endpoint GET /spots/qr/{qrCode}
147
- */
148
- function useSpotByQR(qrCode, options) {
149
- return (0, react_query_1.useQuery)({
150
- queryKey: exports.spotKeys.byQR(qrCode),
151
- queryFn: async () => {
152
- const client = (0, client_1.getApiClient)();
153
- const response = await client.get(`/spots/qr/${qrCode}`);
154
- return extractObjectData(response.data.data);
155
- },
156
- enabled: !!qrCode,
157
- ...options,
158
- });
159
- }
160
- /**
161
- * Get images for a spot
162
- *
163
- * @endpoint GET /spots/{spotId}/images
164
- */
165
- function useSpotImages(spotId, options) {
166
- return (0, react_query_1.useQuery)({
167
- queryKey: exports.spotKeys.images(spotId),
168
- queryFn: async () => {
169
- const client = (0, client_1.getApiClient)();
170
- const response = await client.get(`/spots/${spotId}/images`);
171
- return extractArrayData(response.data.data);
172
- },
173
- enabled: !!spotId,
174
- ...options,
175
- });
176
- }
177
- /**
178
- * Check if a spot is favorited by the current user
179
- *
180
- * @endpoint GET /spots/{spotId}/favorite
181
- */
182
- function useSpotFavoriteStatus(spotId, options) {
183
- return (0, react_query_1.useQuery)({
184
- queryKey: [...exports.spotKeys.detail(spotId), 'favorite'],
185
- queryFn: async () => {
186
- const client = (0, client_1.getApiClient)();
187
- const response = await client.get(`/spots/${spotId}/favorite`);
188
- return extractObjectData(response.data.data);
189
- },
190
- enabled: !!spotId,
191
- ...options,
192
- });
193
- }
194
- /**
195
- * Infinite scroll query for spots
196
- *
197
- * @endpoint GET /spots (paginated)
198
- * @returns Infinite query with pages of spots
199
- */
200
- function useInfiniteSpots(params, options) {
201
- return (0, react_query_1.useInfiniteQuery)({
202
- queryKey: [...exports.spotKeys.lists(), 'infinite', params],
203
- queryFn: async ({ pageParam = 1 }) => {
204
- const client = (0, client_1.getApiClient)();
205
- const queryParams = new URLSearchParams();
206
- queryParams.set('page', String(pageParam));
207
- if (params?.limit)
208
- queryParams.set('limit', String(params.limit));
209
- if (params?.city)
210
- queryParams.set('city', params.city);
211
- if (params?.cityId)
212
- queryParams.set('cityId', params.cityId);
213
- if (params?.type && params.type !== 'All')
214
- queryParams.set('type', params.type);
215
- if (params?.search?.trim())
216
- queryParams.set('search', params.search.trim());
217
- if (params?.templateSlugs) {
218
- params.templateSlugs.forEach((slug) => queryParams.append('templateSlugs', slug));
219
- }
220
- if (params?.vibeIds) {
221
- params.vibeIds.forEach((id) => queryParams.append('vibeIds', id));
222
- }
223
- const response = await client.get(`/spots?${queryParams}`);
224
- // Handle nested response structure
225
- const data = response.data.data;
226
- if (data && typeof data === 'object' && 'data' in data) {
227
- return data;
228
- }
229
- // Fallback for array response
230
- const page = pageParam;
231
- return {
232
- data: extractArrayData(data),
233
- meta: {
234
- total: 0,
235
- page,
236
- limit: params?.limit || 20,
237
- totalPages: 1,
238
- hasNextPage: false,
239
- hasPreviousPage: page > 1,
240
- },
241
- };
242
- },
243
- initialPageParam: 1,
244
- getNextPageParam: (lastPage) => {
245
- return lastPage.meta.hasNextPage ? lastPage.meta.page + 1 : undefined;
246
- },
247
- ...options,
248
- });
249
- }
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvc3BvdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQW9GSCw0QkFxQ0M7QUFPRCwwQkFnQkM7QUFPRCxzQ0FnQkM7QUFPRCxrQ0FnQkM7QUFPRCxzQ0FnQkM7QUFPRCxzREFtQkM7QUF5QkQsNENBK0RDO0FBclVELHVEQU84QjtBQUU5QixzQ0FBc0M7QUFHdEMsK0VBQStFO0FBQy9FLG1CQUFtQjtBQUNuQiwrRUFBK0U7QUFFL0U7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBSSxJQUFhO0lBQ3hDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUNELElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkQsTUFBTSxNQUFNLEdBQUksSUFBd0IsQ0FBQyxJQUFJLENBQUE7UUFDN0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxNQUFNLENBQUE7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBSSxJQUFhO0lBQ3pDLElBQ0UsSUFBSTtRQUNKLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFDeEIsTUFBTSxJQUFJLElBQUk7UUFDZCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQ3BCLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBSSxJQUF3QixDQUFDLElBQUksQ0FBQTtRQUM3QyxJQUNFLE1BQU07WUFDTixPQUFPLE1BQU0sS0FBSyxRQUFRO1lBQzFCLE1BQU0sSUFBSSxNQUFNO1lBQ2hCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFDdEIsQ0FBQztZQUNELE9BQVEsTUFBb0IsQ0FBQyxJQUFJLENBQUE7UUFDbkMsQ0FBQztRQUNELE9BQU8sTUFBVyxDQUFBO0lBQ3BCLENBQUM7SUFDRCxPQUFPLElBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsK0VBQStFO0FBQy9FLGFBQWE7QUFDYiwrRUFBK0U7QUFFbEUsUUFBQSxRQUFRLEdBQUc7SUFDdEIsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFVO0lBQ3ZCLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFVO0lBQy9DLElBQUksRUFBRSxDQUFDLE9BQWlDLEVBQUUsRUFBRSxDQUMxQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQVU7SUFDekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxnQkFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQVU7SUFDbkQsTUFBTSxFQUFFLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQVU7SUFDNUQsTUFBTSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBVTtJQUNsRSxJQUFJLEVBQUUsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxnQkFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFVO0lBQ2xFLE1BQU0sRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBVTtDQUM1RSxDQUFBO0FBRUQsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCwrRUFBK0U7QUFFL0U7Ozs7R0FJRztBQUNILFNBQWdCLFFBQVEsQ0FDdEIsTUFXQyxFQUNELE9BQStEO0lBRS9ELE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLGdCQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixPQUFPLEVBQUUsS0FBSyxJQUFxQixFQUFFO1lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7WUFDekMsSUFBSSxNQUFNLEVBQUUsS0FBSztnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDakUsSUFBSSxNQUFNLEVBQUUsSUFBSTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEQsSUFBSSxNQUFNLEVBQUUsSUFBSTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEQsSUFBSSxNQUFNLEVBQUUsR0FBRztnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDM0QsSUFBSSxNQUFNLEVBQUUsR0FBRztnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDM0QsSUFBSSxNQUFNLEVBQUUsTUFBTTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDcEUsSUFBSSxNQUFNLEVBQUUsTUFBTTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDNUQsSUFBSSxNQUFNLEVBQUUsS0FBSztnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDM0QsSUFBSSxNQUFNLEVBQUUsTUFBTTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDNUQsSUFBSSxNQUFNLEVBQUUsSUFBSTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDOUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixVQUFVLFdBQVcsRUFBRSxDQUN4QixDQUFBO1lBQ0QsT0FBTyxnQkFBZ0IsQ0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ25ELENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLE9BQU8sQ0FDckIsTUFBYyxFQUNkLE9BQTZEO0lBRTdELE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLGdCQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNqQyxPQUFPLEVBQUUsS0FBSyxJQUFtQixFQUFFO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FDL0IsVUFBVSxNQUFNLEVBQUUsQ0FDbkIsQ0FBQTtZQUNELE9BQU8saUJBQWlCLENBQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNwRCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ2pCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsYUFBYSxDQUMzQixJQUFZLEVBQ1osT0FBNkQ7SUFFN0QsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQy9CLE9BQU8sRUFBRSxLQUFLLElBQW1CLEVBQUU7WUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUE7WUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixlQUFlLElBQUksRUFBRSxDQUN0QixDQUFBO1lBQ0QsT0FBTyxpQkFBaUIsQ0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3BELENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDZixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVcsQ0FDekIsTUFBYyxFQUNkLE9BQTZEO0lBRTdELE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLGdCQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixPQUFPLEVBQUUsS0FBSyxJQUFtQixFQUFFO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FDL0IsYUFBYSxNQUFNLEVBQUUsQ0FDdEIsQ0FBQTtZQUNELE9BQU8saUJBQWlCLENBQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNwRCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ2pCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsYUFBYSxDQUMzQixNQUFjLEVBQ2QsT0FBb0U7SUFFcEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2pDLE9BQU8sRUFBRSxLQUFLLElBQTBCLEVBQUU7WUFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUE7WUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixVQUFVLE1BQU0sU0FBUyxDQUMxQixDQUFBO1lBQ0QsT0FBTyxnQkFBZ0IsQ0FBWSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hELENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDakIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsTUFBYyxFQUNkLE9BR0M7SUFFRCxPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFVO1FBQzNELE9BQU8sRUFBRSxLQUFLLElBQW9DLEVBQUU7WUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUE7WUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixVQUFVLE1BQU0sV0FBVyxDQUM1QixDQUFBO1lBQ0QsT0FBTyxpQkFBaUIsQ0FBd0IsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyRSxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ2pCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFtQkQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsTUFBNEIsRUFDNUIsT0FPQztJQUtELE9BQU8sSUFBQSw4QkFBZ0IsRUFBQztRQUN0QixRQUFRLEVBQUUsQ0FBQyxHQUFHLGdCQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBVTtRQUM1RCxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsU0FBUyxHQUFHLENBQUMsRUFBQyxFQUFvQyxFQUFFO1lBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7WUFDekMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFDMUMsSUFBSSxNQUFNLEVBQUUsS0FBSztnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDakUsSUFBSSxNQUFNLEVBQUUsSUFBSTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEQsSUFBSSxNQUFNLEVBQUUsTUFBTTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDNUQsSUFBSSxNQUFNLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSztnQkFDdkMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3RDLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ3hCLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtZQUNqRCxJQUFJLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNwQyxXQUFXLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FDMUMsQ0FBQTtZQUNILENBQUM7WUFDRCxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDbkUsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FDL0IsVUFBVSxXQUFXLEVBQUUsQ0FDeEIsQ0FBQTtZQUNELG1DQUFtQztZQUNuQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtZQUMvQixJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2RCxPQUFPLElBQStCLENBQUE7WUFDeEMsQ0FBQztZQUNELDhCQUE4QjtZQUM5QixNQUFNLElBQUksR0FBRyxTQUFtQixDQUFBO1lBQ2hDLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLGdCQUFnQixDQUFPLElBQUksQ0FBQztnQkFDbEMsSUFBSSxFQUFFO29CQUNKLEtBQUssRUFBRSxDQUFDO29CQUNSLElBQUk7b0JBQ0osS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRTtvQkFDMUIsVUFBVSxFQUFFLENBQUM7b0JBQ2IsV0FBVyxFQUFFLEtBQUs7b0JBQ2xCLGVBQWUsRUFBRSxJQUFJLEdBQUcsQ0FBQztpQkFDMUI7YUFDRixDQUFBO1FBQ0gsQ0FBQztRQUNELGdCQUFnQixFQUFFLENBQUM7UUFDbkIsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUM3QixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUN2RSxDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3BvdHMgUXVlcnkgSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBob29rcyBmb3Igc3BvdC1yZWxhdGVkIG9wZXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHtcbiAgdXNlUXVlcnksXG4gIHVzZUluZmluaXRlUXVlcnksXG4gIHR5cGUgVXNlUXVlcnlPcHRpb25zLFxuICB0eXBlIFVzZVF1ZXJ5UmVzdWx0LFxuICB0eXBlIFVzZUluZmluaXRlUXVlcnlPcHRpb25zLFxuICB0eXBlIFVzZUluZmluaXRlUXVlcnlSZXN1bHQsXG59IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSdcblxuaW1wb3J0IHtnZXRBcGlDbGllbnR9IGZyb20gJy4uL2NsaWVudCdcbmltcG9ydCB7dHlwZSBBcGlSZXNwb25zZSwgdHlwZSBQYWdpbmF0ZWRSZXNwb25zZSwgdHlwZSBTcG90LCB0eXBlIFNwb3RJbWFnZX0gZnJvbSAnLi4vdHlwZXMnXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFeHRyYWN0IGFycmF5IGRhdGEgZnJvbSBBUEkgcmVzcG9uc2VcbiAqIEFQSSByZXR1cm5zIHsgc3VjY2VzcywgZGF0YTogeyBkYXRhOiBbLi4uXSwgbWV0YTogey4uLn0gfSB9IG9yIHsgc3VjY2VzcywgZGF0YTogWy4uLl0gfVxuICovXG5mdW5jdGlvbiBleHRyYWN0QXJyYXlEYXRhPFQ+KGRhdGE6IHVua25vd24pOiBUW10ge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIHJldHVybiBkYXRhXG4gIH1cbiAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiBkYXRhKSB7XG4gICAgY29uc3QgbmVzdGVkID0gKGRhdGEgYXMge2RhdGE6IHVua25vd259KS5kYXRhXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmVzdGVkKSkge1xuICAgICAgcmV0dXJuIG5lc3RlZFxuICAgIH1cbiAgfVxuICByZXR1cm4gW11cbn1cblxuLyoqXG4gKiBFeHRyYWN0IHNpbmdsZSBvYmplY3QgZGF0YSBmcm9tIEFQSSByZXNwb25zZVxuICovXG5mdW5jdGlvbiBleHRyYWN0T2JqZWN0RGF0YTxUPihkYXRhOiB1bmtub3duKTogVCB7XG4gIGlmIChcbiAgICBkYXRhICYmXG4gICAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmXG4gICAgJ2RhdGEnIGluIGRhdGEgJiZcbiAgICAhQXJyYXkuaXNBcnJheShkYXRhKVxuICApIHtcbiAgICBjb25zdCBuZXN0ZWQgPSAoZGF0YSBhcyB7ZGF0YTogdW5rbm93bn0pLmRhdGFcbiAgICBpZiAoXG4gICAgICBuZXN0ZWQgJiZcbiAgICAgIHR5cGVvZiBuZXN0ZWQgPT09ICdvYmplY3QnICYmXG4gICAgICAnZGF0YScgaW4gbmVzdGVkICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShuZXN0ZWQpXG4gICAgKSB7XG4gICAgICByZXR1cm4gKG5lc3RlZCBhcyB7ZGF0YTogVH0pLmRhdGFcbiAgICB9XG4gICAgcmV0dXJuIG5lc3RlZCBhcyBUXG4gIH1cbiAgcmV0dXJuIGRhdGEgYXMgVFxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBLRVlTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBzcG90S2V5cyA9IHtcbiAgYWxsOiBbJ3Nwb3RzJ10gYXMgY29uc3QsXG4gIGxpc3RzOiAoKSA9PiBbLi4uc3BvdEtleXMuYWxsLCAnbGlzdCddIGFzIGNvbnN0LFxuICBsaXN0OiAoZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PlxuICAgIFsuLi5zcG90S2V5cy5saXN0cygpLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgZGV0YWlsczogKCkgPT4gWy4uLnNwb3RLZXlzLmFsbCwgJ2RldGFpbCddIGFzIGNvbnN0LFxuICBkZXRhaWw6IChpZDogc3RyaW5nKSA9PiBbLi4uc3BvdEtleXMuZGV0YWlscygpLCBpZF0gYXMgY29uc3QsXG4gIGJ5U2x1ZzogKHNsdWc6IHN0cmluZykgPT4gWy4uLnNwb3RLZXlzLmFsbCwgJ3NsdWcnLCBzbHVnXSBhcyBjb25zdCxcbiAgYnlRUjogKHFyQ29kZTogc3RyaW5nKSA9PiBbLi4uc3BvdEtleXMuYWxsLCAncXInLCBxckNvZGVdIGFzIGNvbnN0LFxuICBpbWFnZXM6IChzcG90SWQ6IHN0cmluZykgPT4gWy4uLnNwb3RLZXlzLmRldGFpbChzcG90SWQpLCAnaW1hZ2VzJ10gYXMgY29uc3QsXG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IGFsbCBzcG90c1xuICpcbiAqIEBlbmRwb2ludCBHRVQgL3Nwb3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTcG90cyhcbiAgcGFyYW1zPzoge1xuICAgIGxpbWl0PzogbnVtYmVyXG4gICAgY2l0eT86IHN0cmluZ1xuICAgIHR5cGU/OiBzdHJpbmdcbiAgICBsYXQ/OiBudW1iZXJcbiAgICBsbmc/OiBudW1iZXJcbiAgICByYWRpdXM/OiBudW1iZXJcbiAgICBzZWFyY2g/OiBzdHJpbmdcbiAgICB2aWJlcz86IHN0cmluZ1xuICAgIGNpdHlJZD86IHN0cmluZ1xuICAgIHBhZ2U/OiBudW1iZXJcbiAgfSxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFNwb3RbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8U3BvdFtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHNwb3RLZXlzLmxpc3QocGFyYW1zKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxTcG90W10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgaWYgKHBhcmFtcz8ubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSlcbiAgICAgIGlmIChwYXJhbXM/LmNpdHkpIHF1ZXJ5UGFyYW1zLnNldCgnY2l0eScsIHBhcmFtcy5jaXR5KVxuICAgICAgaWYgKHBhcmFtcz8udHlwZSkgcXVlcnlQYXJhbXMuc2V0KCd0eXBlJywgcGFyYW1zLnR5cGUpXG4gICAgICBpZiAocGFyYW1zPy5sYXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGF0JywgU3RyaW5nKHBhcmFtcy5sYXQpKVxuICAgICAgaWYgKHBhcmFtcz8ubG5nKSBxdWVyeVBhcmFtcy5zZXQoJ2xuZycsIFN0cmluZyhwYXJhbXMubG5nKSlcbiAgICAgIGlmIChwYXJhbXM/LnJhZGl1cykgcXVlcnlQYXJhbXMuc2V0KCdyYWRpdXMnLCBTdHJpbmcocGFyYW1zLnJhZGl1cykpXG4gICAgICBpZiAocGFyYW1zPy5zZWFyY2gpIHF1ZXJ5UGFyYW1zLnNldCgnc2VhcmNoJywgcGFyYW1zLnNlYXJjaClcbiAgICAgIGlmIChwYXJhbXM/LnZpYmVzKSBxdWVyeVBhcmFtcy5zZXQoJ3ZpYmVJZHMnLCBwYXJhbXMudmliZXMpXG4gICAgICBpZiAocGFyYW1zPy5jaXR5SWQpIHF1ZXJ5UGFyYW1zLnNldCgnY2l0eUlkJywgcGFyYW1zLmNpdHlJZClcbiAgICAgIGlmIChwYXJhbXM/LnBhZ2UpIHF1ZXJ5UGFyYW1zLnNldCgncGFnZScsIFN0cmluZyhwYXJhbXMucGFnZSkpXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8dW5rbm93bj4+KFxuICAgICAgICBgL3Nwb3RzPyR7cXVlcnlQYXJhbXN9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiBleHRyYWN0QXJyYXlEYXRhPFNwb3Q+KHJlc3BvbnNlLmRhdGEuZGF0YSlcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pXG59XG5cbi8qKlxuICogR2V0IGEgc3BvdCBieSBJRFxuICpcbiAqIEBlbmRwb2ludCBHRVQgL3Nwb3RzL3tzcG90SWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTcG90KFxuICBzcG90SWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFNwb3Q+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPixcbik6IFVzZVF1ZXJ5UmVzdWx0PFNwb3Q+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogc3BvdEtleXMuZGV0YWlsKHNwb3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8U3BvdD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTx1bmtub3duPj4oXG4gICAgICAgIGAvc3BvdHMvJHtzcG90SWR9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiBleHRyYWN0T2JqZWN0RGF0YTxTcG90PihyZXNwb25zZS5kYXRhLmRhdGEpXG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXNwb3RJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuXG4vKipcbiAqIEdldCBhIHNwb3QgYnkgc2x1Z1xuICpcbiAqIEBlbmRwb2ludCBHRVQgL3Nwb3RzL3NsdWcve3NsdWd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTcG90QnlTbHVnKFxuICBzbHVnOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxTcG90PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz4sXG4pOiBVc2VRdWVyeVJlc3VsdDxTcG90PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHNwb3RLZXlzLmJ5U2x1ZyhzbHVnKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxTcG90PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPHVua25vd24+PihcbiAgICAgICAgYC9zcG90cy9zbHVnLyR7c2x1Z31gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIGV4dHJhY3RPYmplY3REYXRhPFNwb3Q+KHJlc3BvbnNlLmRhdGEuZGF0YSlcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhc2x1ZyxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuXG4vKipcbiAqIEdldCBhIHNwb3QgYnkgUVIgY29kZVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL3Nwb3RzL3FyL3txckNvZGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTcG90QnlRUihcbiAgcXJDb2RlOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxTcG90PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz4sXG4pOiBVc2VRdWVyeVJlc3VsdDxTcG90PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHNwb3RLZXlzLmJ5UVIocXJDb2RlKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxTcG90PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPHVua25vd24+PihcbiAgICAgICAgYC9zcG90cy9xci8ke3FyQ29kZX1gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIGV4dHJhY3RPYmplY3REYXRhPFNwb3Q+KHJlc3BvbnNlLmRhdGEuZGF0YSlcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhcXJDb2RlLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pXG59XG5cbi8qKlxuICogR2V0IGltYWdlcyBmb3IgYSBzcG90XG4gKlxuICogQGVuZHBvaW50IEdFVCAvc3BvdHMve3Nwb3RJZH0vaW1hZ2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTcG90SW1hZ2VzKFxuICBzcG90SWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFNwb3RJbWFnZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz4sXG4pOiBVc2VRdWVyeVJlc3VsdDxTcG90SW1hZ2VbXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBzcG90S2V5cy5pbWFnZXMoc3BvdElkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxTcG90SW1hZ2VbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTx1bmtub3duPj4oXG4gICAgICAgIGAvc3BvdHMvJHtzcG90SWR9L2ltYWdlc2AsXG4gICAgICApXG4gICAgICByZXR1cm4gZXh0cmFjdEFycmF5RGF0YTxTcG90SW1hZ2U+KHJlc3BvbnNlLmRhdGEuZGF0YSlcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhc3BvdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzcG90IGlzIGZhdm9yaXRlZCBieSB0aGUgY3VycmVudCB1c2VyXG4gKlxuICogQGVuZHBvaW50IEdFVCAvc3BvdHMve3Nwb3RJZH0vZmF2b3JpdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNwb3RGYXZvcml0ZVN0YXR1cyhcbiAgc3BvdElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZVF1ZXJ5T3B0aW9uczx7aXNGYXZvcml0ZTogYm9vbGVhbn0+LFxuICAgICdxdWVyeUtleScgfCAncXVlcnlGbidcbiAgPixcbik6IFVzZVF1ZXJ5UmVzdWx0PHtpc0Zhdm9yaXRlOiBib29sZWFufT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBbLi4uc3BvdEtleXMuZGV0YWlsKHNwb3RJZCksICdmYXZvcml0ZSddIGFzIGNvbnN0LFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPHtpc0Zhdm9yaXRlOiBib29sZWFufT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTx7aXNGYXZvcml0ZTogYm9vbGVhbn0+PihcbiAgICAgICAgYC9zcG90cy8ke3Nwb3RJZH0vZmF2b3JpdGVgLFxuICAgICAgKVxuICAgICAgcmV0dXJuIGV4dHJhY3RPYmplY3REYXRhPHtpc0Zhdm9yaXRlOiBib29sZWFufT4ocmVzcG9uc2UuZGF0YS5kYXRhKVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFzcG90SWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSU5GSU5JVEUgUVVFUlkgSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIGluZmluaXRlIHNwb3RzIHF1ZXJ5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5maW5pdGVTcG90c1BhcmFtcyB7XG4gIGxpbWl0PzogbnVtYmVyXG4gIGNpdHk/OiBzdHJpbmdcbiAgY2l0eUlkPzogc3RyaW5nXG4gIHR5cGU/OiBzdHJpbmdcbiAgdGVtcGxhdGVTbHVncz86IHN0cmluZ1tdXG4gIHZpYmVJZHM/OiBzdHJpbmdbXVxuICBzZWFyY2g/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBJbmZpbml0ZSBzY3JvbGwgcXVlcnkgZm9yIHNwb3RzXG4gKlxuICogQGVuZHBvaW50IEdFVCAvc3BvdHMgKHBhZ2luYXRlZClcbiAqIEByZXR1cm5zIEluZmluaXRlIHF1ZXJ5IHdpdGggcGFnZXMgb2Ygc3BvdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUluZmluaXRlU3BvdHMoXG4gIHBhcmFtcz86IEluZmluaXRlU3BvdHNQYXJhbXMsXG4gIG9wdGlvbnM/OiBPbWl0PFxuICAgIFVzZUluZmluaXRlUXVlcnlPcHRpb25zPFxuICAgICAgUGFnaW5hdGVkUmVzcG9uc2U8U3BvdD4sXG4gICAgICBFcnJvcixcbiAgICAgIHtwYWdlczogUGFnaW5hdGVkUmVzcG9uc2U8U3BvdD5bXTsgcGFnZVBhcmFtczogbnVtYmVyW119XG4gICAgPixcbiAgICAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nIHwgJ2dldE5leHRQYWdlUGFyYW0nIHwgJ2luaXRpYWxQYWdlUGFyYW0nXG4gID4sXG4pOiBVc2VJbmZpbml0ZVF1ZXJ5UmVzdWx0PFxuICB7cGFnZXM6IFBhZ2luYXRlZFJlc3BvbnNlPFNwb3Q+W107IHBhZ2VQYXJhbXM6IG51bWJlcltdfSxcbiAgRXJyb3Jcbj4ge1xuICByZXR1cm4gdXNlSW5maW5pdGVRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFsuLi5zcG90S2V5cy5saXN0cygpLCAnaW5maW5pdGUnLCBwYXJhbXNdIGFzIGNvbnN0LFxuICAgIHF1ZXJ5Rm46IGFzeW5jICh7cGFnZVBhcmFtID0gMX0pOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPFNwb3Q+PiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgIHF1ZXJ5UGFyYW1zLnNldCgncGFnZScsIFN0cmluZyhwYWdlUGFyYW0pKVxuICAgICAgaWYgKHBhcmFtcz8ubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSlcbiAgICAgIGlmIChwYXJhbXM/LmNpdHkpIHF1ZXJ5UGFyYW1zLnNldCgnY2l0eScsIHBhcmFtcy5jaXR5KVxuICAgICAgaWYgKHBhcmFtcz8uY2l0eUlkKSBxdWVyeVBhcmFtcy5zZXQoJ2NpdHlJZCcsIHBhcmFtcy5jaXR5SWQpXG4gICAgICBpZiAocGFyYW1zPy50eXBlICYmIHBhcmFtcy50eXBlICE9PSAnQWxsJylcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCd0eXBlJywgcGFyYW1zLnR5cGUpXG4gICAgICBpZiAocGFyYW1zPy5zZWFyY2g/LnRyaW0oKSlcbiAgICAgICAgcXVlcnlQYXJhbXMuc2V0KCdzZWFyY2gnLCBwYXJhbXMuc2VhcmNoLnRyaW0oKSlcbiAgICAgIGlmIChwYXJhbXM/LnRlbXBsYXRlU2x1Z3MpIHtcbiAgICAgICAgcGFyYW1zLnRlbXBsYXRlU2x1Z3MuZm9yRWFjaCgoc2x1ZykgPT5cbiAgICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ3RlbXBsYXRlU2x1Z3MnLCBzbHVnKSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcz8udmliZUlkcykge1xuICAgICAgICBwYXJhbXMudmliZUlkcy5mb3JFYWNoKChpZCkgPT4gcXVlcnlQYXJhbXMuYXBwZW5kKCd2aWJlSWRzJywgaWQpKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFBhZ2luYXRlZFJlc3BvbnNlPFNwb3Q+Pj4oXG4gICAgICAgIGAvc3BvdHM/JHtxdWVyeVBhcmFtc31gLFxuICAgICAgKVxuICAgICAgLy8gSGFuZGxlIG5lc3RlZCByZXNwb25zZSBzdHJ1Y3R1cmVcbiAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhLmRhdGFcbiAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGF0YSkge1xuICAgICAgICByZXR1cm4gZGF0YSBhcyBQYWdpbmF0ZWRSZXNwb25zZTxTcG90PlxuICAgICAgfVxuICAgICAgLy8gRmFsbGJhY2sgZm9yIGFycmF5IHJlc3BvbnNlXG4gICAgICBjb25zdCBwYWdlID0gcGFnZVBhcmFtIGFzIG51bWJlclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogZXh0cmFjdEFycmF5RGF0YTxTcG90PihkYXRhKSxcbiAgICAgICAgbWV0YToge1xuICAgICAgICAgIHRvdGFsOiAwLFxuICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgbGltaXQ6IHBhcmFtcz8ubGltaXQgfHwgMjAsXG4gICAgICAgICAgdG90YWxQYWdlczogMSxcbiAgICAgICAgICBoYXNOZXh0UGFnZTogZmFsc2UsXG4gICAgICAgICAgaGFzUHJldmlvdXNQYWdlOiBwYWdlID4gMSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXRpYWxQYWdlUGFyYW06IDEsXG4gICAgZ2V0TmV4dFBhZ2VQYXJhbTogKGxhc3RQYWdlKSA9PiB7XG4gICAgICByZXR1cm4gbGFzdFBhZ2UubWV0YS5oYXNOZXh0UGFnZSA/IGxhc3RQYWdlLm1ldGEucGFnZSArIDEgOiB1bmRlZmluZWRcbiAgICB9LFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pXG59XG4iXX0=
@@ -1,39 +0,0 @@
1
- /**
2
- * Templates Query Hooks
3
- *
4
- * TanStack Query hooks for post template operations.
5
- */
6
- import { type UseQueryOptions, type UseQueryResult } from '@tanstack/react-query';
7
- import { type Template } from '../types';
8
- export declare const templateKeys: {
9
- all: readonly ["templates"];
10
- lists: () => readonly ["templates", "list"];
11
- list: (filters?: {
12
- spotType?: string;
13
- }) => readonly ["templates", "list", {
14
- spotType?: string;
15
- } | undefined];
16
- details: () => readonly ["templates", "detail"];
17
- detail: (id: string) => readonly ["templates", "detail", string];
18
- bySlug: (slug: string) => readonly ["templates", "slug", string];
19
- };
20
- /**
21
- * Get all templates
22
- *
23
- * @endpoint GET /templates
24
- */
25
- export declare function useTemplates(params?: {
26
- spotType?: string;
27
- }, options?: Omit<UseQueryOptions<Template[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Template[]>;
28
- /**
29
- * Get a template by ID
30
- *
31
- * @endpoint GET /templates/{templateId}
32
- */
33
- export declare function useTemplate(templateId: string, options?: Omit<UseQueryOptions<Template>, 'queryKey' | 'queryFn'>): UseQueryResult<Template>;
34
- /**
35
- * Get a template by slug
36
- *
37
- * @endpoint GET /templates/slug/{slug}
38
- */
39
- export declare function useTemplateBySlug(slug: string, options?: Omit<UseQueryOptions<Template>, 'queryKey' | 'queryFn'>): UseQueryResult<Template>;
@@ -1,81 +0,0 @@
1
- "use strict";
2
- /**
3
- * Templates Query Hooks
4
- *
5
- * TanStack Query hooks for post template operations.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.templateKeys = void 0;
9
- exports.useTemplates = useTemplates;
10
- exports.useTemplate = useTemplate;
11
- exports.useTemplateBySlug = useTemplateBySlug;
12
- const react_query_1 = require("@tanstack/react-query");
13
- const client_1 = require("../client");
14
- // ============================================================================
15
- // QUERY KEYS
16
- // ============================================================================
17
- exports.templateKeys = {
18
- all: ['templates'],
19
- lists: () => [...exports.templateKeys.all, 'list'],
20
- list: (filters) => [...exports.templateKeys.lists(), filters],
21
- details: () => [...exports.templateKeys.all, 'detail'],
22
- detail: (id) => [...exports.templateKeys.details(), id],
23
- bySlug: (slug) => [...exports.templateKeys.all, 'slug', slug],
24
- };
25
- // ============================================================================
26
- // QUERY HOOKS
27
- // ============================================================================
28
- /**
29
- * Get all templates
30
- *
31
- * @endpoint GET /templates
32
- */
33
- function useTemplates(params, options) {
34
- return (0, react_query_1.useQuery)({
35
- queryKey: exports.templateKeys.list(params),
36
- queryFn: async () => {
37
- const client = (0, client_1.getApiClient)();
38
- const queryParams = new URLSearchParams();
39
- if (params?.spotType)
40
- queryParams.set('spotType', params.spotType);
41
- const response = await client.get(`/templates?${queryParams}`);
42
- return response.data.data;
43
- },
44
- ...options,
45
- });
46
- }
47
- /**
48
- * Get a template by ID
49
- *
50
- * @endpoint GET /templates/{templateId}
51
- */
52
- function useTemplate(templateId, options) {
53
- return (0, react_query_1.useQuery)({
54
- queryKey: exports.templateKeys.detail(templateId),
55
- queryFn: async () => {
56
- const client = (0, client_1.getApiClient)();
57
- const response = await client.get(`/templates/${templateId}`);
58
- return response.data.data;
59
- },
60
- enabled: !!templateId,
61
- ...options,
62
- });
63
- }
64
- /**
65
- * Get a template by slug
66
- *
67
- * @endpoint GET /templates/slug/{slug}
68
- */
69
- function useTemplateBySlug(slug, options) {
70
- return (0, react_query_1.useQuery)({
71
- queryKey: exports.templateKeys.bySlug(slug),
72
- queryFn: async () => {
73
- const client = (0, client_1.getApiClient)();
74
- const response = await client.get(`/templates/slug/${slug}`);
75
- return response.data.data;
76
- },
77
- enabled: !!slug,
78
- ...options,
79
- });
80
- }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9xdWVyaWVzL3RlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBa0NILG9DQWlCQztBQU9ELGtDQWdCQztBQU9ELDhDQWdCQztBQS9GRCx1REFJOEI7QUFFOUIsc0NBQXNDO0FBR3RDLCtFQUErRTtBQUMvRSxhQUFhO0FBQ2IsK0VBQStFO0FBRWxFLFFBQUEsWUFBWSxHQUFHO0lBQzFCLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBVTtJQUMzQixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLG9CQUFZLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBVTtJQUNuRCxJQUFJLEVBQUUsQ0FBQyxPQUE2QixFQUFFLEVBQUUsQ0FDdEMsQ0FBQyxHQUFHLG9CQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFVO0lBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsb0JBQVksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFVO0lBQ3ZELE1BQU0sRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG9CQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFVO0lBQ2hFLE1BQU0sRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLG9CQUFZLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQVU7Q0FDdkUsQ0FBQTtBQUVELCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsK0VBQStFO0FBRS9FOzs7O0dBSUc7QUFDSCxTQUFnQixZQUFZLENBQzFCLE1BQTRCLEVBQzVCLE9BQW1FO0lBRW5FLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLG9CQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxPQUFPLEVBQUUsS0FBSyxJQUF5QixFQUFFO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7WUFDekMsSUFBSSxNQUFNLEVBQUUsUUFBUTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDbEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixjQUFjLFdBQVcsRUFBRSxDQUM1QixDQUFBO1lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUMzQixDQUFDO1FBQ0QsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixXQUFXLENBQ3pCLFVBQWtCLEVBQ2xCLE9BQWlFO0lBRWpFLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLG9CQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUN6QyxPQUFPLEVBQUUsS0FBSyxJQUF1QixFQUFFO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFBO1lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FDL0IsY0FBYyxVQUFVLEVBQUUsQ0FDM0IsQ0FBQTtZQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDM0IsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVTtRQUNyQixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixJQUFZLEVBQ1osT0FBaUU7SUFFakUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsb0JBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ25DLE9BQU8sRUFBRSxLQUFLLElBQXVCLEVBQUU7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUE7WUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUMvQixtQkFBbUIsSUFBSSxFQUFFLENBQzFCLENBQUE7WUFDRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQzNCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDZixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUZW1wbGF0ZXMgUXVlcnkgSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBob29rcyBmb3IgcG9zdCB0ZW1wbGF0ZSBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7XG4gIHVzZVF1ZXJ5LFxuICB0eXBlIFVzZVF1ZXJ5T3B0aW9ucyxcbiAgdHlwZSBVc2VRdWVyeVJlc3VsdCxcbn0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5J1xuXG5pbXBvcnQge2dldEFwaUNsaWVudH0gZnJvbSAnLi4vY2xpZW50J1xuaW1wb3J0IHt0eXBlIEFwaVJlc3BvbnNlLCB0eXBlIFRlbXBsYXRlfSBmcm9tICcuLi90eXBlcydcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgdGVtcGxhdGVLZXlzID0ge1xuICBhbGw6IFsndGVtcGxhdGVzJ10gYXMgY29uc3QsXG4gIGxpc3RzOiAoKSA9PiBbLi4udGVtcGxhdGVLZXlzLmFsbCwgJ2xpc3QnXSBhcyBjb25zdCxcbiAgbGlzdDogKGZpbHRlcnM/OiB7c3BvdFR5cGU/OiBzdHJpbmd9KSA9PlxuICAgIFsuLi50ZW1wbGF0ZUtleXMubGlzdHMoKSwgZmlsdGVyc10gYXMgY29uc3QsXG4gIGRldGFpbHM6ICgpID0+IFsuLi50ZW1wbGF0ZUtleXMuYWxsLCAnZGV0YWlsJ10gYXMgY29uc3QsXG4gIGRldGFpbDogKGlkOiBzdHJpbmcpID0+IFsuLi50ZW1wbGF0ZUtleXMuZGV0YWlscygpLCBpZF0gYXMgY29uc3QsXG4gIGJ5U2x1ZzogKHNsdWc6IHN0cmluZykgPT4gWy4uLnRlbXBsYXRlS2V5cy5hbGwsICdzbHVnJywgc2x1Z10gYXMgY29uc3QsXG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IGFsbCB0ZW1wbGF0ZXNcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC90ZW1wbGF0ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRlbXBsYXRlcyhcbiAgcGFyYW1zPzoge3Nwb3RUeXBlPzogc3RyaW5nfSxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFRlbXBsYXRlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPixcbik6IFVzZVF1ZXJ5UmVzdWx0PFRlbXBsYXRlW10+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogdGVtcGxhdGVLZXlzLmxpc3QocGFyYW1zKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKVxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgIGlmIChwYXJhbXM/LnNwb3RUeXBlKSBxdWVyeVBhcmFtcy5zZXQoJ3Nwb3RUeXBlJywgcGFyYW1zLnNwb3RUeXBlKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFRlbXBsYXRlW10+PihcbiAgICAgICAgYC90ZW1wbGF0ZXM/JHtxdWVyeVBhcmFtc31gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YVxuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSlcbn1cblxuLyoqXG4gKiBHZXQgYSB0ZW1wbGF0ZSBieSBJRFxuICpcbiAqIEBlbmRwb2ludCBHRVQgL3RlbXBsYXRlcy97dGVtcGxhdGVJZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRlbXBsYXRlKFxuICB0ZW1wbGF0ZUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxUZW1wbGF0ZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8VGVtcGxhdGU+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogdGVtcGxhdGVLZXlzLmRldGFpbCh0ZW1wbGF0ZUlkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxUZW1wbGF0ZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxUZW1wbGF0ZT4+KFxuICAgICAgICBgL3RlbXBsYXRlcy8ke3RlbXBsYXRlSWR9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGFcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhdGVtcGxhdGVJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KVxufVxuXG4vKipcbiAqIEdldCBhIHRlbXBsYXRlIGJ5IHNsdWdcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC90ZW1wbGF0ZXMvc2x1Zy97c2x1Z31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRlbXBsYXRlQnlTbHVnKFxuICBzbHVnOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxUZW1wbGF0ZT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+LFxuKTogVXNlUXVlcnlSZXN1bHQ8VGVtcGxhdGU+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogdGVtcGxhdGVLZXlzLmJ5U2x1ZyhzbHVnKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxUZW1wbGF0ZT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxUZW1wbGF0ZT4+KFxuICAgICAgICBgL3RlbXBsYXRlcy9zbHVnLyR7c2x1Z31gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YVxuICAgIH0sXG4gICAgZW5hYmxlZDogISFzbHVnLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pXG59XG4iXX0=