@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.
- package/dist/api/client.d.ts +12 -0
- package/dist/api/client.js +68 -0
- package/dist/api/mutations/clubs.d.ts +47 -0
- package/dist/api/mutations/clubs.js +95 -0
- package/dist/api/mutations/conversations.d.ts +45 -0
- package/dist/api/mutations/conversations.js +110 -0
- package/dist/api/mutations/index.d.ts +13 -0
- package/dist/api/mutations/index.js +38 -0
- package/dist/api/mutations/notifications.d.ts +38 -0
- package/dist/api/mutations/notifications.js +64 -0
- package/dist/api/mutations/orders.d.ts +73 -0
- package/dist/api/mutations/orders.js +116 -0
- package/dist/api/mutations/posts.d.ts +123 -0
- package/dist/api/mutations/posts.js +229 -0
- package/dist/api/mutations/products.d.ts +81 -0
- package/dist/api/mutations/products.js +102 -0
- package/dist/api/mutations/spots.d.ts +59 -0
- package/dist/api/mutations/spots.js +129 -0
- package/dist/api/mutations/users.d.ts +71 -0
- package/dist/api/mutations/users.js +173 -0
- package/dist/api/queries/auth.d.ts +37 -0
- package/dist/api/queries/auth.js +61 -0
- package/dist/api/queries/clubs.d.ts +52 -0
- package/dist/api/queries/clubs.js +116 -0
- package/dist/api/queries/conversations.d.ts +52 -0
- package/dist/api/queries/conversations.js +83 -0
- package/dist/api/queries/index.d.ts +26 -0
- package/dist/api/queries/index.js +65 -0
- package/dist/api/queries/misc.d.ts +54 -0
- package/dist/api/queries/misc.js +129 -0
- package/dist/api/queries/notifications.d.ts +34 -0
- package/dist/api/queries/notifications.js +62 -0
- package/dist/api/queries/orders.d.ts +45 -0
- package/dist/api/queries/orders.js +93 -0
- package/dist/api/queries/posts.d.ts +55 -0
- package/dist/api/queries/posts.js +130 -0
- package/dist/api/queries/products.d.ts +52 -0
- package/dist/api/queries/products.js +89 -0
- package/dist/api/queries/spots.d.ts +78 -0
- package/dist/api/queries/spots.js +168 -0
- package/dist/api/queries/templates.d.ts +42 -0
- package/dist/api/queries/templates.js +86 -0
- package/dist/api/queries/users.d.ts +90 -0
- package/dist/api/queries/users.js +187 -0
- package/dist/api/services/index.d.ts +2 -0
- package/dist/api/services/index.js +8 -0
- package/dist/api/services/marketplace.d.ts +129 -0
- package/dist/api/services/marketplace.js +168 -0
- package/dist/api/types.d.ts +54 -0
- package/dist/api/types.js +34 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.js +73 -0
- package/package.json +57 -0
- package/src/api/client.ts +78 -0
- package/src/api/mutations/clubs.ts +107 -0
- package/src/api/mutations/conversations.ts +124 -0
- package/src/api/mutations/index.ts +29 -0
- package/src/api/mutations/notifications.ts +70 -0
- package/src/api/mutations/orders.ts +174 -0
- package/src/api/mutations/posts.ts +278 -0
- package/src/api/mutations/products.ts +160 -0
- package/src/api/mutations/spots.ts +146 -0
- package/src/api/mutations/users.ts +197 -0
- package/src/api/queries/auth.ts +67 -0
- package/src/api/queries/clubs.ts +135 -0
- package/src/api/queries/conversations.ts +94 -0
- package/src/api/queries/index.ts +48 -0
- package/src/api/queries/misc.ts +140 -0
- package/src/api/queries/notifications.ts +66 -0
- package/src/api/queries/orders.ts +119 -0
- package/src/api/queries/posts.ts +142 -0
- package/src/api/queries/products.ts +123 -0
- package/src/api/queries/spots.ts +201 -0
- package/src/api/queries/templates.ts +95 -0
- package/src/api/queries/users.ts +206 -0
- package/src/api/services/index.ts +6 -0
- package/src/api/services/marketplace.ts +265 -0
- package/src/api/types.ts +144 -0
- package/src/index.ts +63 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Misc Query Hooks
|
|
4
|
+
*
|
|
5
|
+
* TanStack Query hooks for cities, vibes, and other reference data.
|
|
6
|
+
* All types come from @prisma/client (via ../types re-export).
|
|
7
|
+
*
|
|
8
|
+
* API Response Patterns:
|
|
9
|
+
* - Reference data (vibes, templates, interests): { success, data: T[], timestamp }
|
|
10
|
+
* - Large datasets (cities, spots, posts): { success, data: { data: T[], meta }, timestamp }
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.miscKeys = void 0;
|
|
14
|
+
exports.useCities = useCities;
|
|
15
|
+
exports.useVibes = useVibes;
|
|
16
|
+
exports.useLifeSituations = useLifeSituations;
|
|
17
|
+
exports.useInterests = useInterests;
|
|
18
|
+
exports.useIntentions = useIntentions;
|
|
19
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
20
|
+
const client_1 = require("../client");
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// QUERY KEYS
|
|
23
|
+
// ============================================================================
|
|
24
|
+
exports.miscKeys = {
|
|
25
|
+
cities: () => ['cities'],
|
|
26
|
+
vibes: () => ['vibes'],
|
|
27
|
+
lifeSituations: () => ['life-situations'],
|
|
28
|
+
interests: () => ['interests'],
|
|
29
|
+
intentions: () => ['intentions'],
|
|
30
|
+
};
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// QUERY HOOKS
|
|
33
|
+
// ============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Get all cities (paginated endpoint)
|
|
36
|
+
*
|
|
37
|
+
* @endpoint GET /api/v1/cities
|
|
38
|
+
* @returns PaginatedResponse with cities array
|
|
39
|
+
*/
|
|
40
|
+
function useCities(options) {
|
|
41
|
+
return (0, react_query_1.useQuery)({
|
|
42
|
+
queryKey: exports.miscKeys.cities(),
|
|
43
|
+
queryFn: async () => {
|
|
44
|
+
const client = (0, client_1.getApiClient)();
|
|
45
|
+
const response = await client.get('/api/v1/cities');
|
|
46
|
+
// Cities endpoint returns paginated format: { data: { data: [], meta: {} } }
|
|
47
|
+
return response.data.data.data;
|
|
48
|
+
},
|
|
49
|
+
staleTime: 1000 * 60 * 60,
|
|
50
|
+
...options,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get all vibes (flat array - reference data)
|
|
55
|
+
*
|
|
56
|
+
* @endpoint GET /api/v1/vibes
|
|
57
|
+
* @returns Flat array of vibes (not paginated)
|
|
58
|
+
*/
|
|
59
|
+
function useVibes(options) {
|
|
60
|
+
return (0, react_query_1.useQuery)({
|
|
61
|
+
queryKey: exports.miscKeys.vibes(),
|
|
62
|
+
queryFn: async () => {
|
|
63
|
+
const client = (0, client_1.getApiClient)();
|
|
64
|
+
const response = await client.get('/api/v1/vibes');
|
|
65
|
+
// Vibes endpoint returns flat array: { data: [] }
|
|
66
|
+
return response.data.data;
|
|
67
|
+
},
|
|
68
|
+
staleTime: 1000 * 60 * 60,
|
|
69
|
+
...options,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get all life situations (flat array - reference data for onboarding)
|
|
74
|
+
*
|
|
75
|
+
* @endpoint GET /api/v1/life-situations
|
|
76
|
+
* @returns Flat array of life situations (not paginated)
|
|
77
|
+
*/
|
|
78
|
+
function useLifeSituations(options) {
|
|
79
|
+
return (0, react_query_1.useQuery)({
|
|
80
|
+
queryKey: exports.miscKeys.lifeSituations(),
|
|
81
|
+
queryFn: async () => {
|
|
82
|
+
const client = (0, client_1.getApiClient)();
|
|
83
|
+
const response = await client.get('/api/v1/life-situations');
|
|
84
|
+
// Life situations endpoint returns flat array: { data: [] }
|
|
85
|
+
return response.data.data;
|
|
86
|
+
},
|
|
87
|
+
staleTime: 1000 * 60 * 60,
|
|
88
|
+
...options,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get all interests (flat array - reference data)
|
|
93
|
+
*
|
|
94
|
+
* @endpoint GET /api/v1/interests
|
|
95
|
+
* @returns Flat array of interests (not paginated)
|
|
96
|
+
*/
|
|
97
|
+
function useInterests(options) {
|
|
98
|
+
return (0, react_query_1.useQuery)({
|
|
99
|
+
queryKey: exports.miscKeys.interests(),
|
|
100
|
+
queryFn: async () => {
|
|
101
|
+
const client = (0, client_1.getApiClient)();
|
|
102
|
+
const response = await client.get('/api/v1/interests');
|
|
103
|
+
// Interests endpoint returns flat array: { data: [] }
|
|
104
|
+
return response.data.data;
|
|
105
|
+
},
|
|
106
|
+
staleTime: 1000 * 60 * 60,
|
|
107
|
+
...options,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get all intentions (flat array - reference data)
|
|
112
|
+
*
|
|
113
|
+
* @endpoint GET /api/v1/intentions
|
|
114
|
+
* @returns Flat array of intentions (not paginated)
|
|
115
|
+
*/
|
|
116
|
+
function useIntentions(options) {
|
|
117
|
+
return (0, react_query_1.useQuery)({
|
|
118
|
+
queryKey: exports.miscKeys.intentions(),
|
|
119
|
+
queryFn: async () => {
|
|
120
|
+
const client = (0, client_1.getApiClient)();
|
|
121
|
+
const response = await client.get('/api/v1/intentions');
|
|
122
|
+
// Intentions endpoint returns flat array: { data: [] }
|
|
123
|
+
return response.data.data;
|
|
124
|
+
},
|
|
125
|
+
staleTime: 1000 * 60 * 60,
|
|
126
|
+
...options,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9taXNjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7OztBQTRCSCw4QkFjQztBQVFELDRCQWNDO0FBUUQsOENBY0M7QUFRRCxvQ0FjQztBQVFELHNDQWNDO0FBaElELHVEQUFrRjtBQUNsRixzQ0FBeUM7QUFHekMsK0VBQStFO0FBQy9FLGFBQWE7QUFDYiwrRUFBK0U7QUFFbEUsUUFBQSxRQUFRLEdBQUc7SUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFVO0lBQ2pDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBVTtJQUMvQixjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBVTtJQUNsRCxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQVU7SUFDdkMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFVO0NBQzFDLENBQUM7QUFFRiwrRUFBK0U7QUFDL0UsY0FBYztBQUNkLCtFQUErRTtBQUUvRTs7Ozs7R0FLRztBQUNILFNBQWdCLFNBQVMsQ0FDdkIsT0FBK0Q7SUFFL0QsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxNQUFNLEVBQUU7UUFDM0IsT0FBTyxFQUFFLEtBQUssSUFBcUIsRUFBRTtZQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQXVDLGdCQUFnQixDQUFDLENBQUM7WUFDMUYsNkVBQTZFO1lBQzdFLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFFBQVEsQ0FDdEIsT0FBK0Q7SUFFL0QsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDMUIsT0FBTyxFQUFFLEtBQUssSUFBcUIsRUFBRTtZQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQXNCLGVBQWUsQ0FBQyxDQUFDO1lBQ3hFLGtEQUFrRDtZQUNsRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixPQUF3RTtJQUV4RSxPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSxnQkFBUSxDQUFDLGNBQWMsRUFBRTtRQUNuQyxPQUFPLEVBQUUsS0FBSyxJQUE4QixFQUFFO1lBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBK0IseUJBQXlCLENBQUMsQ0FBQztZQUMzRiw0REFBNEQ7WUFDNUQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixDQUFDO1FBQ0QsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUN6QixHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixZQUFZLENBQzFCLE9BQW1FO0lBRW5FLE9BQU8sSUFBQSxzQkFBUSxFQUFDO1FBQ2QsUUFBUSxFQUFFLGdCQUFRLENBQUMsU0FBUyxFQUFFO1FBQzlCLE9BQU8sRUFBRSxLQUFLLElBQXlCLEVBQUU7WUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxHQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUEwQixtQkFBbUIsQ0FBQyxDQUFDO1lBQ2hGLHNEQUFzRDtZQUN0RCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGFBQWEsQ0FDM0IsT0FBb0U7SUFFcEUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsZ0JBQVEsQ0FBQyxVQUFVLEVBQUU7UUFDL0IsT0FBTyxFQUFFLEtBQUssSUFBMEIsRUFBRTtZQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQTJCLG9CQUFvQixDQUFDLENBQUM7WUFDbEYsdURBQXVEO1lBQ3ZELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDNUIsQ0FBQztRQUNELFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDekIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWlzYyBRdWVyeSBIb29rc1xuICpcbiAqIFRhblN0YWNrIFF1ZXJ5IGhvb2tzIGZvciBjaXRpZXMsIHZpYmVzLCBhbmQgb3RoZXIgcmVmZXJlbmNlIGRhdGEuXG4gKiBBbGwgdHlwZXMgY29tZSBmcm9tIEBwcmlzbWEvY2xpZW50ICh2aWEgLi4vdHlwZXMgcmUtZXhwb3J0KS5cbiAqXG4gKiBBUEkgUmVzcG9uc2UgUGF0dGVybnM6XG4gKiAtIFJlZmVyZW5jZSBkYXRhICh2aWJlcywgdGVtcGxhdGVzLCBpbnRlcmVzdHMpOiB7IHN1Y2Nlc3MsIGRhdGE6IFRbXSwgdGltZXN0YW1wIH1cbiAqIC0gTGFyZ2UgZGF0YXNldHMgKGNpdGllcywgc3BvdHMsIHBvc3RzKTogeyBzdWNjZXNzLCBkYXRhOiB7IGRhdGE6IFRbXSwgbWV0YSB9LCB0aW1lc3RhbXAgfVxuICovXG5cbmltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMsIFVzZVF1ZXJ5UmVzdWx0IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IENpdHksIFZpYmUsIExpZmVTaXR1YXRpb24sIEludGVyZXN0LCBJbnRlbnRpb24sIEFwaVJlc3BvbnNlLCBQYWdpbmF0ZWRSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgbWlzY0tleXMgPSB7XG4gIGNpdGllczogKCkgPT4gWydjaXRpZXMnXSBhcyBjb25zdCxcbiAgdmliZXM6ICgpID0+IFsndmliZXMnXSBhcyBjb25zdCxcbiAgbGlmZVNpdHVhdGlvbnM6ICgpID0+IFsnbGlmZS1zaXR1YXRpb25zJ10gYXMgY29uc3QsXG4gIGludGVyZXN0czogKCkgPT4gWydpbnRlcmVzdHMnXSBhcyBjb25zdCxcbiAgaW50ZW50aW9uczogKCkgPT4gWydpbnRlbnRpb25zJ10gYXMgY29uc3QsXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBhbGwgY2l0aWVzIChwYWdpbmF0ZWQgZW5kcG9pbnQpXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL2NpdGllc1xuICogQHJldHVybnMgUGFnaW5hdGVkUmVzcG9uc2Ugd2l0aCBjaXRpZXMgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNpdGllcyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPENpdHlbXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxDaXR5W10+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogbWlzY0tleXMuY2l0aWVzKCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8Q2l0eVtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQYWdpbmF0ZWRSZXNwb25zZTxDaXR5Pj4+KCcvYXBpL3YxL2NpdGllcycpO1xuICAgICAgLy8gQ2l0aWVzIGVuZHBvaW50IHJldHVybnMgcGFnaW5hdGVkIGZvcm1hdDogeyBkYXRhOiB7IGRhdGE6IFtdLCBtZXRhOiB7fSB9IH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNjAsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGFsbCB2aWJlcyAoZmxhdCBhcnJheSAtIHJlZmVyZW5jZSBkYXRhKVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS92aWJlc1xuICogQHJldHVybnMgRmxhdCBhcnJheSBvZiB2aWJlcyAobm90IHBhZ2luYXRlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVZpYmVzKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8VmliZVtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFZpYmVbXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBtaXNjS2V5cy52aWJlcygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPFZpYmVbXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8VmliZVtdPj4oJy9hcGkvdjEvdmliZXMnKTtcbiAgICAgIC8vIFZpYmVzIGVuZHBvaW50IHJldHVybnMgZmxhdCBhcnJheTogeyBkYXRhOiBbXSB9XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgc3RhbGVUaW1lOiAxMDAwICogNjAgKiA2MCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIGxpZmUgc2l0dWF0aW9ucyAoZmxhdCBhcnJheSAtIHJlZmVyZW5jZSBkYXRhIGZvciBvbmJvYXJkaW5nKVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9saWZlLXNpdHVhdGlvbnNcbiAqIEByZXR1cm5zIEZsYXQgYXJyYXkgb2YgbGlmZSBzaXR1YXRpb25zIChub3QgcGFnaW5hdGVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTGlmZVNpdHVhdGlvbnMoXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxMaWZlU2l0dWF0aW9uW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8TGlmZVNpdHVhdGlvbltdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IG1pc2NLZXlzLmxpZmVTaXR1YXRpb25zKCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8TGlmZVNpdHVhdGlvbltdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxMaWZlU2l0dWF0aW9uW10+PignL2FwaS92MS9saWZlLXNpdHVhdGlvbnMnKTtcbiAgICAgIC8vIExpZmUgc2l0dWF0aW9ucyBlbmRwb2ludCByZXR1cm5zIGZsYXQgYXJyYXk6IHsgZGF0YTogW10gfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNjAsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGFsbCBpbnRlcmVzdHMgKGZsYXQgYXJyYXkgLSByZWZlcmVuY2UgZGF0YSlcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvaW50ZXJlc3RzXG4gKiBAcmV0dXJucyBGbGF0IGFycmF5IG9mIGludGVyZXN0cyAobm90IHBhZ2luYXRlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUludGVyZXN0cyhcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPEludGVyZXN0W10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8SW50ZXJlc3RbXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBtaXNjS2V5cy5pbnRlcmVzdHMoKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxJbnRlcmVzdFtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxJbnRlcmVzdFtdPj4oJy9hcGkvdjEvaW50ZXJlc3RzJyk7XG4gICAgICAvLyBJbnRlcmVzdHMgZW5kcG9pbnQgcmV0dXJucyBmbGF0IGFycmF5OiB7IGRhdGE6IFtdIH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBzdGFsZVRpbWU6IDEwMDAgKiA2MCAqIDYwLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhbGwgaW50ZW50aW9ucyAoZmxhdCBhcnJheSAtIHJlZmVyZW5jZSBkYXRhKVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9pbnRlbnRpb25zXG4gKiBAcmV0dXJucyBGbGF0IGFycmF5IG9mIGludGVudGlvbnMgKG5vdCBwYWdpbmF0ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbnRlbnRpb25zKFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8SW50ZW50aW9uW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8SW50ZW50aW9uW10+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogbWlzY0tleXMuaW50ZW50aW9ucygpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpOiBQcm9taXNlPEludGVudGlvbltdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxJbnRlbnRpb25bXT4+KCcvYXBpL3YxL2ludGVudGlvbnMnKTtcbiAgICAgIC8vIEludGVudGlvbnMgZW5kcG9pbnQgcmV0dXJucyBmbGF0IGFycmF5OiB7IGRhdGE6IFtdIH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBzdGFsZVRpbWU6IDEwMDAgKiA2MCAqIDYwLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notifications Query Hooks
|
|
3
|
+
*
|
|
4
|
+
* TanStack Query hooks for notification operations.
|
|
5
|
+
*/
|
|
6
|
+
import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
|
|
7
|
+
import type { Notification } from '../types';
|
|
8
|
+
export declare const notificationKeys: {
|
|
9
|
+
all: readonly ["notifications"];
|
|
10
|
+
lists: () => readonly ["notifications", "list"];
|
|
11
|
+
list: (params?: {
|
|
12
|
+
limit?: number;
|
|
13
|
+
unreadOnly?: boolean;
|
|
14
|
+
}) => readonly ["notifications", "list", {
|
|
15
|
+
limit?: number;
|
|
16
|
+
unreadOnly?: boolean;
|
|
17
|
+
} | undefined];
|
|
18
|
+
unreadCount: () => readonly ["notifications", "unreadCount"];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Get notifications for current user
|
|
22
|
+
*
|
|
23
|
+
* @endpoint GET /api/v1/notifications
|
|
24
|
+
*/
|
|
25
|
+
export declare function useNotifications(params?: {
|
|
26
|
+
limit?: number;
|
|
27
|
+
unreadOnly?: boolean;
|
|
28
|
+
}, options?: Omit<UseQueryOptions<Notification[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Notification[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Get unread notification count
|
|
31
|
+
*
|
|
32
|
+
* @endpoint GET /api/v1/notifications/unread-count
|
|
33
|
+
*/
|
|
34
|
+
export declare function useUnreadNotificationCount(options?: Omit<UseQueryOptions<number>, 'queryKey' | 'queryFn'>): UseQueryResult<number>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Notifications Query Hooks
|
|
4
|
+
*
|
|
5
|
+
* TanStack Query hooks for notification operations.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.notificationKeys = void 0;
|
|
9
|
+
exports.useNotifications = useNotifications;
|
|
10
|
+
exports.useUnreadNotificationCount = useUnreadNotificationCount;
|
|
11
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
12
|
+
const client_1 = require("../client");
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// QUERY KEYS
|
|
15
|
+
// ============================================================================
|
|
16
|
+
exports.notificationKeys = {
|
|
17
|
+
all: ['notifications'],
|
|
18
|
+
lists: () => [...exports.notificationKeys.all, 'list'],
|
|
19
|
+
list: (params) => [...exports.notificationKeys.lists(), params],
|
|
20
|
+
unreadCount: () => [...exports.notificationKeys.all, 'unreadCount'],
|
|
21
|
+
};
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// QUERY HOOKS
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Get notifications for current user
|
|
27
|
+
*
|
|
28
|
+
* @endpoint GET /api/v1/notifications
|
|
29
|
+
*/
|
|
30
|
+
function useNotifications(params, options) {
|
|
31
|
+
return (0, react_query_1.useQuery)({
|
|
32
|
+
queryKey: exports.notificationKeys.list(params),
|
|
33
|
+
queryFn: async () => {
|
|
34
|
+
const client = (0, client_1.getApiClient)();
|
|
35
|
+
const queryParams = new URLSearchParams();
|
|
36
|
+
if (params?.limit)
|
|
37
|
+
queryParams.set('limit', String(params.limit));
|
|
38
|
+
if (params?.unreadOnly)
|
|
39
|
+
queryParams.set('unreadOnly', String(params.unreadOnly));
|
|
40
|
+
const response = await client.get(`/api/v1/notifications?${queryParams}`);
|
|
41
|
+
return response.data.data;
|
|
42
|
+
},
|
|
43
|
+
...options,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get unread notification count
|
|
48
|
+
*
|
|
49
|
+
* @endpoint GET /api/v1/notifications/unread-count
|
|
50
|
+
*/
|
|
51
|
+
function useUnreadNotificationCount(options) {
|
|
52
|
+
return (0, react_query_1.useQuery)({
|
|
53
|
+
queryKey: exports.notificationKeys.unreadCount(),
|
|
54
|
+
queryFn: async () => {
|
|
55
|
+
const client = (0, client_1.getApiClient)();
|
|
56
|
+
const response = await client.get('/api/v1/notifications/unread-count');
|
|
57
|
+
return response.data.data.count;
|
|
58
|
+
},
|
|
59
|
+
...options,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcXVlcmllcy9ub3RpZmljYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUEwQkgsNENBZ0JDO0FBT0QsZ0VBWUM7QUEzREQsdURBQWtGO0FBQ2xGLHNDQUF5QztBQUd6QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUVsRSxRQUFBLGdCQUFnQixHQUFHO0lBQzlCLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBVTtJQUMvQixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLHdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDdkQsSUFBSSxFQUFFLENBQUMsTUFBaUQsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLHdCQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sQ0FBVTtJQUMzRyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLHdCQUFnQixDQUFDLEdBQUcsRUFBRSxhQUFhLENBQVU7Q0FDckUsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsK0VBQStFO0FBRS9FOzs7O0dBSUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FDOUIsTUFBaUQsRUFDakQsT0FBdUU7SUFFdkUsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFDZCxRQUFRLEVBQUUsd0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxPQUFPLEVBQUUsS0FBSyxJQUE2QixFQUFFO1lBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksR0FBRSxDQUFDO1lBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDMUMsSUFBSSxNQUFNLEVBQUUsS0FBSztnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbEUsSUFBSSxNQUFNLEVBQUUsVUFBVTtnQkFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDakYsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUE4Qix5QkFBeUIsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN2RyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxHQUFHLE9BQU87S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLDBCQUEwQixDQUN4QyxPQUErRDtJQUUvRCxPQUFPLElBQUEsc0JBQVEsRUFBQztRQUNkLFFBQVEsRUFBRSx3QkFBZ0IsQ0FBQyxXQUFXLEVBQUU7UUFDeEMsT0FBTyxFQUFFLEtBQUssSUFBcUIsRUFBRTtZQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztZQUM5QixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQWlDLG9DQUFvQyxDQUFDLENBQUM7WUFDeEcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEMsQ0FBQztRQUNELEdBQUcsT0FBTztLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5vdGlmaWNhdGlvbnMgUXVlcnkgSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBob29rcyBmb3Igbm90aWZpY2F0aW9uIG9wZXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgdXNlUXVlcnksIFVzZVF1ZXJ5T3B0aW9ucywgVXNlUXVlcnlSZXN1bHQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgTm90aWZpY2F0aW9uLCBBcGlSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3Qgbm90aWZpY2F0aW9uS2V5cyA9IHtcbiAgYWxsOiBbJ25vdGlmaWNhdGlvbnMnXSBhcyBjb25zdCxcbiAgbGlzdHM6ICgpID0+IFsuLi5ub3RpZmljYXRpb25LZXlzLmFsbCwgJ2xpc3QnXSBhcyBjb25zdCxcbiAgbGlzdDogKHBhcmFtcz86IHsgbGltaXQ/OiBudW1iZXI7IHVucmVhZE9ubHk/OiBib29sZWFuIH0pID0+IFsuLi5ub3RpZmljYXRpb25LZXlzLmxpc3RzKCksIHBhcmFtc10gYXMgY29uc3QsXG4gIHVucmVhZENvdW50OiAoKSA9PiBbLi4ubm90aWZpY2F0aW9uS2V5cy5hbGwsICd1bnJlYWRDb3VudCddIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgSE9PS1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgbm90aWZpY2F0aW9ucyBmb3IgY3VycmVudCB1c2VyXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL25vdGlmaWNhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU5vdGlmaWNhdGlvbnMoXG4gIHBhcmFtcz86IHsgbGltaXQ/OiBudW1iZXI7IHVucmVhZE9ubHk/OiBib29sZWFuIH0sXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxOb3RpZmljYXRpb25bXT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxOb3RpZmljYXRpb25bXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBub3RpZmljYXRpb25LZXlzLmxpc3QocGFyYW1zKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxOb3RpZmljYXRpb25bXT4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIGlmIChwYXJhbXM/LmxpbWl0KSBxdWVyeVBhcmFtcy5zZXQoJ2xpbWl0JywgU3RyaW5nKHBhcmFtcy5saW1pdCkpO1xuICAgICAgaWYgKHBhcmFtcz8udW5yZWFkT25seSkgcXVlcnlQYXJhbXMuc2V0KCd1bnJlYWRPbmx5JywgU3RyaW5nKHBhcmFtcy51bnJlYWRPbmx5KSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8Tm90aWZpY2F0aW9uW10+PihgL2FwaS92MS9ub3RpZmljYXRpb25zPyR7cXVlcnlQYXJhbXN9YCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHVucmVhZCBub3RpZmljYXRpb24gY291bnRcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvbm90aWZpY2F0aW9ucy91bnJlYWQtY291bnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVucmVhZE5vdGlmaWNhdGlvbkNvdW50KFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8bnVtYmVyPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PG51bWJlcj4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBub3RpZmljYXRpb25LZXlzLnVucmVhZENvdW50KCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTx7IGNvdW50OiBudW1iZXIgfT4+KCcvYXBpL3YxL25vdGlmaWNhdGlvbnMvdW5yZWFkLWNvdW50Jyk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhLmNvdW50O1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orders Query Hooks
|
|
3
|
+
*
|
|
4
|
+
* TanStack Query hooks for order-related operations.
|
|
5
|
+
*/
|
|
6
|
+
import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
|
|
7
|
+
import type { Order, OrderItem, Product, Spot, OrderStatus, PaginatedResponse } from '../types';
|
|
8
|
+
export declare const orderKeys: {
|
|
9
|
+
all: readonly ["orders"];
|
|
10
|
+
lists: () => readonly ["orders", "list"];
|
|
11
|
+
list: (filters?: Record<string, unknown>) => readonly ["orders", "list", Record<string, unknown> | undefined];
|
|
12
|
+
details: () => readonly ["orders", "detail"];
|
|
13
|
+
detail: (id: string) => readonly ["orders", "detail", string];
|
|
14
|
+
myOrders: () => readonly ["orders", "my"];
|
|
15
|
+
spotOrders: (spotId: string) => readonly ["orders", "spot", string];
|
|
16
|
+
};
|
|
17
|
+
export interface OrderWithDetails extends Order {
|
|
18
|
+
items: (OrderItem & {
|
|
19
|
+
product: Pick<Product, 'id' | 'name' | 'slug' | 'type' | 'imageUrl'>;
|
|
20
|
+
})[];
|
|
21
|
+
spot: Pick<Spot, 'id' | 'name' | 'slug'>;
|
|
22
|
+
}
|
|
23
|
+
export interface OrderFilters {
|
|
24
|
+
status?: OrderStatus;
|
|
25
|
+
limit?: number;
|
|
26
|
+
page?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get current user's orders (purchases)
|
|
30
|
+
*
|
|
31
|
+
* @endpoint GET /api/v1/users/me/orders
|
|
32
|
+
*/
|
|
33
|
+
export declare function useMyOrders(params?: OrderFilters, options?: Omit<UseQueryOptions<PaginatedResponse<OrderWithDetails>>, 'queryKey' | 'queryFn'>): UseQueryResult<PaginatedResponse<OrderWithDetails>>;
|
|
34
|
+
/**
|
|
35
|
+
* Get a single order by ID
|
|
36
|
+
*
|
|
37
|
+
* @endpoint GET /api/v1/orders/{orderId}
|
|
38
|
+
*/
|
|
39
|
+
export declare function useOrder(orderId: string, options?: Omit<UseQueryOptions<OrderWithDetails>, 'queryKey' | 'queryFn'>): UseQueryResult<OrderWithDetails>;
|
|
40
|
+
/**
|
|
41
|
+
* Get orders for a spot (seller view)
|
|
42
|
+
*
|
|
43
|
+
* @endpoint GET /api/v1/seller/spots/{spotId}/orders
|
|
44
|
+
*/
|
|
45
|
+
export declare function useSpotOrders(spotId: string, params?: OrderFilters, options?: Omit<UseQueryOptions<PaginatedResponse<OrderWithDetails>>, 'queryKey' | 'queryFn'>): UseQueryResult<PaginatedResponse<OrderWithDetails>>;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Orders Query Hooks
|
|
4
|
+
*
|
|
5
|
+
* TanStack Query hooks for order-related operations.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.orderKeys = void 0;
|
|
9
|
+
exports.useMyOrders = useMyOrders;
|
|
10
|
+
exports.useOrder = useOrder;
|
|
11
|
+
exports.useSpotOrders = useSpotOrders;
|
|
12
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
13
|
+
const client_1 = require("../client");
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// QUERY KEYS
|
|
16
|
+
// ============================================================================
|
|
17
|
+
exports.orderKeys = {
|
|
18
|
+
all: ['orders'],
|
|
19
|
+
lists: () => [...exports.orderKeys.all, 'list'],
|
|
20
|
+
list: (filters) => [...exports.orderKeys.lists(), filters],
|
|
21
|
+
details: () => [...exports.orderKeys.all, 'detail'],
|
|
22
|
+
detail: (id) => [...exports.orderKeys.details(), id],
|
|
23
|
+
myOrders: () => [...exports.orderKeys.all, 'my'],
|
|
24
|
+
spotOrders: (spotId) => [...exports.orderKeys.all, 'spot', spotId],
|
|
25
|
+
};
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// QUERY HOOKS
|
|
28
|
+
// ============================================================================
|
|
29
|
+
/**
|
|
30
|
+
* Get current user's orders (purchases)
|
|
31
|
+
*
|
|
32
|
+
* @endpoint GET /api/v1/users/me/orders
|
|
33
|
+
*/
|
|
34
|
+
function useMyOrders(params, options) {
|
|
35
|
+
return (0, react_query_1.useQuery)({
|
|
36
|
+
queryKey: exports.orderKeys.list({ ...params, my: true }),
|
|
37
|
+
queryFn: async () => {
|
|
38
|
+
const client = (0, client_1.getApiClient)();
|
|
39
|
+
const queryParams = new URLSearchParams();
|
|
40
|
+
if (params?.status)
|
|
41
|
+
queryParams.set('status', params.status);
|
|
42
|
+
if (params?.limit)
|
|
43
|
+
queryParams.set('limit', String(params.limit));
|
|
44
|
+
if (params?.page)
|
|
45
|
+
queryParams.set('page', String(params.page));
|
|
46
|
+
const response = await client.get(`/api/v1/users/me/orders?${queryParams}`);
|
|
47
|
+
return response.data.data;
|
|
48
|
+
},
|
|
49
|
+
...options,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get a single order by ID
|
|
54
|
+
*
|
|
55
|
+
* @endpoint GET /api/v1/orders/{orderId}
|
|
56
|
+
*/
|
|
57
|
+
function useOrder(orderId, options) {
|
|
58
|
+
return (0, react_query_1.useQuery)({
|
|
59
|
+
queryKey: exports.orderKeys.detail(orderId),
|
|
60
|
+
queryFn: async () => {
|
|
61
|
+
const client = (0, client_1.getApiClient)();
|
|
62
|
+
const response = await client.get(`/api/v1/orders/${orderId}`);
|
|
63
|
+
return response.data.data;
|
|
64
|
+
},
|
|
65
|
+
enabled: !!orderId,
|
|
66
|
+
...options,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get orders for a spot (seller view)
|
|
71
|
+
*
|
|
72
|
+
* @endpoint GET /api/v1/seller/spots/{spotId}/orders
|
|
73
|
+
*/
|
|
74
|
+
function useSpotOrders(spotId, params, options) {
|
|
75
|
+
return (0, react_query_1.useQuery)({
|
|
76
|
+
queryKey: exports.orderKeys.spotOrders(spotId),
|
|
77
|
+
queryFn: async () => {
|
|
78
|
+
const client = (0, client_1.getApiClient)();
|
|
79
|
+
const queryParams = new URLSearchParams();
|
|
80
|
+
if (params?.status)
|
|
81
|
+
queryParams.set('status', params.status);
|
|
82
|
+
if (params?.limit)
|
|
83
|
+
queryParams.set('limit', String(params.limit));
|
|
84
|
+
if (params?.page)
|
|
85
|
+
queryParams.set('page', String(params.page));
|
|
86
|
+
const response = await client.get(`/api/v1/seller/spots/${spotId}/orders?${queryParams}`);
|
|
87
|
+
return response.data.data;
|
|
88
|
+
},
|
|
89
|
+
enabled: !!spotId,
|
|
90
|
+
...options,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9xdWVyaWVzL29yZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBOENILGtDQW1CQztBQU9ELDRCQWNDO0FBT0Qsc0NBcUJDO0FBaEhELHVEQUFrRjtBQUNsRixzQ0FBeUM7QUFHekMsK0VBQStFO0FBQy9FLGFBQWE7QUFDYiwrRUFBK0U7QUFFbEUsUUFBQSxTQUFTLEdBQUc7SUFDdkIsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFVO0lBQ3hCLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsaUJBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFVO0lBQ2hELElBQUksRUFBRSxDQUFDLE9BQWlDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBVTtJQUNyRixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBVTtJQUNwRCxNQUFNLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBVTtJQUM3RCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLGlCQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBVTtJQUNqRCxVQUFVLEVBQUUsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFVO0NBQzVFLENBQUM7QUFtQkYsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCwrRUFBK0U7QUFFL0U7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVcsQ0FDekIsTUFBcUIsRUFDckIsT0FBNEY7SUFFNUYsT0FBTyxJQUFBLHNCQUFRLEVBQUM7UUFD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Y2VzQ29udGVudCI6WyIvKipcbiAqIE9yZGVycyBRdWVyeSBIb29rc1xuICpcbiAqIFRhblN0YWNrIFF1ZXJ5IGhvb2tzIGZvciBvcmRlci1yZWxhdGVkIG9wZXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgdXNlUXVlcnksIFVzZVF1ZXJ5T3B0aW9ucywgVXNlUXVlcnlSZXN1bHQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgZ2V0QXBpQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgT3JkZXIsIE9yZGVySXRlbSwgUHJvZHVjdCwgU3BvdCwgT3JkZXJTdGF0dXMsIEFwaVJlc3BvbnNlLCBQYWdpbmF0ZWRSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUVVFUlkgS0VZU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3Qgb3JkZXJLZXlzID0ge1xuICBhbGw6IFsnb3JkZXJzJ10gYXMgY29uc3QsXG4gIGxpc3RzOiAoKSA9PiBbLi4ub3JkZXJLZXlzLmFsbCwgJ2xpc3QnXSBhcyBjb25zdCxcbiAgbGlzdDogKGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gWy4uLm9yZGVyS2V5cy5saXN0cygpLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgZGV0YWlsczogKCkgPT4gWy4uLm9yZGVyS2V5cy5hbGwsICdkZXRhaWwnXSBhcyBjb25zdCxcbiAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4gWy4uLm9yZGVyS2V5cy5kZXRhaWxzKCksIGlkXSBhcyBjb25zdCxcbiAgbXlPcmRlcnM6ICgpID0+IFsuLi5vcmRlcktleXMuYWxsLCAnbXknXSBhcyBjb25zdCxcbiAgc3BvdE9yZGVyczogKHNwb3RJZDogc3RyaW5nKSA9PiBbLi4ub3JkZXJLZXlzLmFsbCwgJ3Nwb3QnLCBzcG90SWRdIGFzIGNvbnN0LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBPcmRlcldpdGhEZXRhaWxzIGV4dGVuZHMgT3JkZXIge1xuICBpdGVtczogKE9yZGVySXRlbSAmIHtcbiAgICBwcm9kdWN0OiBQaWNrPFByb2R1Y3QsICdpZCcgfCAnbmFtZScgfCAnc2x1ZycgfCAndHlwZScgfCAnaW1hZ2VVcmwnPjtcbiAgfSlbXTtcbiAgc3BvdDogUGljazxTcG90LCAnaWQnIHwgJ25hbWUnIHwgJ3NsdWcnPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmRlckZpbHRlcnMge1xuICBzdGF0dXM/OiBPcmRlclN0YXR1cztcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHBhZ2U/OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEhPT0tTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IGN1cnJlbnQgdXNlcidzIG9yZGVycyAocHVyY2hhc2VzKVxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS91c2Vycy9tZS9vcmRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU15T3JkZXJzKFxuICBwYXJhbXM/OiBPcmRlckZpbHRlcnMsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQYWdpbmF0ZWRSZXNwb25zZTxPcmRlcldpdGhEZXRhaWxzPj4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pOiBVc2VRdWVyeVJlc3VsdDxQYWdpbmF0ZWRSZXNwb25zZTxPcmRlcldpdGhEZXRhaWxzPj4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBvcmRlcktleXMubGlzdCh7IC4uLnBhcmFtcywgbXk6IHRydWUgfSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8T3JkZXJXaXRoRGV0YWlscz4+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBpZiAocGFyYW1zPy5zdGF0dXMpIHF1ZXJ5UGFyYW1zLnNldCgnc3RhdHVzJywgcGFyYW1zLnN0YXR1cyk7XG4gICAgICBpZiAocGFyYW1zPy5saW1pdCkgcXVlcnlQYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhwYXJhbXMubGltaXQpKTtcbiAgICAgIGlmIChwYXJhbXM/LnBhZ2UpIHF1ZXJ5UGFyYW1zLnNldCgncGFnZScsIFN0cmluZyhwYXJhbXMucGFnZSkpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFBhZ2luYXRlZFJlc3BvbnNlPE9yZGVyV2l0aERldGFpbHM+Pj4oXG4gICAgICAgIGAvYXBpL3YxL3VzZXJzL21lL29yZGVycz8ke3F1ZXJ5UGFyYW1zfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGEgc2luZ2xlIG9yZGVyIGJ5IElEXG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL29yZGVycy97b3JkZXJJZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyKFxuICBvcmRlcklkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxPcmRlcldpdGhEZXRhaWxzPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PE9yZGVyV2l0aERldGFpbHM+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogb3JkZXJLZXlzLmRldGFpbChvcmRlcklkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxPcmRlcldpdGhEZXRhaWxzPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxPcmRlcldpdGhEZXRhaWxzPj4oYC9hcGkvdjEvb3JkZXJzLyR7b3JkZXJJZH1gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIW9yZGVySWQsXG4gICAgLi4ub3B0aW9ucyxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IG9yZGVycyBmb3IgYSBzcG90IChzZWxsZXIgdmlldylcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvc2VsbGVyL3Nwb3RzL3tzcG90SWR9L29yZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3BvdE9yZGVycyhcbiAgc3BvdElkOiBzdHJpbmcsXG4gIHBhcmFtcz86IE9yZGVyRmlsdGVycyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBhZ2luYXRlZFJlc3BvbnNlPE9yZGVyV2l0aERldGFpbHM+PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFBhZ2luYXRlZFJlc3BvbnNlPE9yZGVyV2l0aERldGFpbHM+PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IG9yZGVyS2V5cy5zcG90T3JkZXJzKHNwb3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8T3JkZXJXaXRoRGV0YWlscz4+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICBpZiAocGFyYW1zPy5zdGF0dXMpIHF1ZXJ5UGFyYW1zLnNldCgnc3RhdHVzJywgcGFyYW1zLnN0YXR1cyk7XG4gICAgICBpZiAocGFyYW1zPy5saW1pdCkgcXVlcnlQYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhwYXJhbXMubGltaXQpKTtcbiAgICAgIGlmIChwYXJhbXM/LnBhZ2UpIHF1ZXJ5UGFyYW1zLnNldCgncGFnZScsIFN0cmluZyhwYXJhbXMucGFnZSkpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFBhZ2luYXRlZFJlc3BvbnNlPE9yZGVyV2l0aERldGFpbHM+Pj4oXG4gICAgICAgIGAvYXBpL3YxL3NlbGxlci9zcG90cy8ke3Nwb3RJZH0vb3JkZXJzPyR7cXVlcnlQYXJhbXN9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXNwb3RJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Posts Query Hooks
|
|
3
|
+
*
|
|
4
|
+
* TanStack Query hooks for post/board operations.
|
|
5
|
+
*/
|
|
6
|
+
import { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
|
|
7
|
+
import type { Post, PostResponse, PostStatusDto } from '../types';
|
|
8
|
+
export declare const postKeys: {
|
|
9
|
+
all: readonly ["posts"];
|
|
10
|
+
lists: () => readonly ["posts", "list"];
|
|
11
|
+
list: (filters?: Record<string, unknown>) => readonly ["posts", "list", Record<string, unknown> | undefined];
|
|
12
|
+
bySpot: (spotId: string, filters?: Record<string, unknown>) => readonly ["posts", "spot", string, Record<string, unknown> | undefined];
|
|
13
|
+
details: () => readonly ["posts", "detail"];
|
|
14
|
+
detail: (id: string) => readonly ["posts", "detail", string];
|
|
15
|
+
responses: (postId: string) => readonly ["posts", "detail", string, "responses"];
|
|
16
|
+
status: (postId: string) => readonly ["posts", "detail", string, "status"];
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Get posts for a spot
|
|
20
|
+
*
|
|
21
|
+
* @endpoint GET /api/v1/spots/{spotId}/posts
|
|
22
|
+
*/
|
|
23
|
+
export declare function useSpotPosts(spotId: string, params?: {
|
|
24
|
+
postType?: string;
|
|
25
|
+
status?: string;
|
|
26
|
+
page?: number;
|
|
27
|
+
limit?: number;
|
|
28
|
+
}, options?: Omit<UseQueryOptions<Post[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Post[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Get a single post by ID
|
|
31
|
+
*
|
|
32
|
+
* @endpoint GET /api/v1/posts/{postId}
|
|
33
|
+
*/
|
|
34
|
+
export declare function usePost(postId: string, options?: Omit<UseQueryOptions<Post>, 'queryKey' | 'queryFn'>): UseQueryResult<Post>;
|
|
35
|
+
/**
|
|
36
|
+
* Get responses for a post
|
|
37
|
+
*
|
|
38
|
+
* @endpoint GET /api/v1/posts/{postId}/responses
|
|
39
|
+
*/
|
|
40
|
+
export declare function usePostResponses(postId: string, options?: Omit<UseQueryOptions<PostResponse[]>, 'queryKey' | 'queryFn'>): UseQueryResult<PostResponse[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Get all posts (with filters)
|
|
43
|
+
*
|
|
44
|
+
* @endpoint GET /api/v1/posts
|
|
45
|
+
*/
|
|
46
|
+
export declare function usePosts(params?: {
|
|
47
|
+
postType?: string;
|
|
48
|
+
limit?: number;
|
|
49
|
+
}, options?: Omit<UseQueryOptions<Post[]>, 'queryKey' | 'queryFn'>): UseQueryResult<Post[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Get user's status for a post (read/hidden/pinned)
|
|
52
|
+
*
|
|
53
|
+
* @endpoint GET /api/v1/posts/{postId}/status
|
|
54
|
+
*/
|
|
55
|
+
export declare function usePostStatus(postId: string, options?: Omit<UseQueryOptions<PostStatusDto>, 'queryKey' | 'queryFn'>): UseQueryResult<PostStatusDto>;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Posts Query Hooks
|
|
4
|
+
*
|
|
5
|
+
* TanStack Query hooks for post/board operations.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.postKeys = void 0;
|
|
9
|
+
exports.useSpotPosts = useSpotPosts;
|
|
10
|
+
exports.usePost = usePost;
|
|
11
|
+
exports.usePostResponses = usePostResponses;
|
|
12
|
+
exports.usePosts = usePosts;
|
|
13
|
+
exports.usePostStatus = usePostStatus;
|
|
14
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
15
|
+
const client_1 = require("../client");
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// QUERY KEYS
|
|
18
|
+
// ============================================================================
|
|
19
|
+
exports.postKeys = {
|
|
20
|
+
all: ['posts'],
|
|
21
|
+
lists: () => [...exports.postKeys.all, 'list'],
|
|
22
|
+
list: (filters) => [...exports.postKeys.lists(), filters],
|
|
23
|
+
bySpot: (spotId, filters) => [...exports.postKeys.all, 'spot', spotId, filters],
|
|
24
|
+
details: () => [...exports.postKeys.all, 'detail'],
|
|
25
|
+
detail: (id) => [...exports.postKeys.details(), id],
|
|
26
|
+
responses: (postId) => [...exports.postKeys.detail(postId), 'responses'],
|
|
27
|
+
status: (postId) => [...exports.postKeys.detail(postId), 'status'],
|
|
28
|
+
};
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// QUERY HOOKS
|
|
31
|
+
// ============================================================================
|
|
32
|
+
/**
|
|
33
|
+
* Get posts for a spot
|
|
34
|
+
*
|
|
35
|
+
* @endpoint GET /api/v1/spots/{spotId}/posts
|
|
36
|
+
*/
|
|
37
|
+
function useSpotPosts(spotId, params, options) {
|
|
38
|
+
return (0, react_query_1.useQuery)({
|
|
39
|
+
queryKey: exports.postKeys.bySpot(spotId, params),
|
|
40
|
+
queryFn: async () => {
|
|
41
|
+
const client = (0, client_1.getApiClient)();
|
|
42
|
+
const queryParams = new URLSearchParams();
|
|
43
|
+
if (params?.postType)
|
|
44
|
+
queryParams.set('postType', params.postType);
|
|
45
|
+
if (params?.status)
|
|
46
|
+
queryParams.set('status', params.status);
|
|
47
|
+
if (params?.page)
|
|
48
|
+
queryParams.set('page', String(params.page));
|
|
49
|
+
if (params?.limit)
|
|
50
|
+
queryParams.set('limit', String(params.limit));
|
|
51
|
+
const response = await client.get(`/api/v1/spots/${spotId}/posts?${queryParams}`);
|
|
52
|
+
return response.data.data;
|
|
53
|
+
},
|
|
54
|
+
enabled: !!spotId,
|
|
55
|
+
...options,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get a single post by ID
|
|
60
|
+
*
|
|
61
|
+
* @endpoint GET /api/v1/posts/{postId}
|
|
62
|
+
*/
|
|
63
|
+
function usePost(postId, options) {
|
|
64
|
+
return (0, react_query_1.useQuery)({
|
|
65
|
+
queryKey: exports.postKeys.detail(postId),
|
|
66
|
+
queryFn: async () => {
|
|
67
|
+
const client = (0, client_1.getApiClient)();
|
|
68
|
+
const response = await client.get(`/api/v1/posts/${postId}`);
|
|
69
|
+
return response.data.data;
|
|
70
|
+
},
|
|
71
|
+
enabled: !!postId,
|
|
72
|
+
...options,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get responses for a post
|
|
77
|
+
*
|
|
78
|
+
* @endpoint GET /api/v1/posts/{postId}/responses
|
|
79
|
+
*/
|
|
80
|
+
function usePostResponses(postId, options) {
|
|
81
|
+
return (0, react_query_1.useQuery)({
|
|
82
|
+
queryKey: exports.postKeys.responses(postId),
|
|
83
|
+
queryFn: async () => {
|
|
84
|
+
const client = (0, client_1.getApiClient)();
|
|
85
|
+
const response = await client.get(`/api/v1/posts/${postId}/responses`);
|
|
86
|
+
return response.data.data;
|
|
87
|
+
},
|
|
88
|
+
enabled: !!postId,
|
|
89
|
+
...options,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get all posts (with filters)
|
|
94
|
+
*
|
|
95
|
+
* @endpoint GET /api/v1/posts
|
|
96
|
+
*/
|
|
97
|
+
function usePosts(params, options) {
|
|
98
|
+
return (0, react_query_1.useQuery)({
|
|
99
|
+
queryKey: exports.postKeys.list(params),
|
|
100
|
+
queryFn: async () => {
|
|
101
|
+
const client = (0, client_1.getApiClient)();
|
|
102
|
+
const queryParams = new URLSearchParams();
|
|
103
|
+
if (params?.postType)
|
|
104
|
+
queryParams.set('postType', params.postType);
|
|
105
|
+
if (params?.limit)
|
|
106
|
+
queryParams.set('limit', String(params.limit));
|
|
107
|
+
const response = await client.get(`/api/v1/posts?${queryParams}`);
|
|
108
|
+
return response.data.data;
|
|
109
|
+
},
|
|
110
|
+
...options,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get user's status for a post (read/hidden/pinned)
|
|
115
|
+
*
|
|
116
|
+
* @endpoint GET /api/v1/posts/{postId}/status
|
|
117
|
+
*/
|
|
118
|
+
function usePostStatus(postId, options) {
|
|
119
|
+
return (0, react_query_1.useQuery)({
|
|
120
|
+
queryKey: exports.postKeys.status(postId),
|
|
121
|
+
queryFn: async () => {
|
|
122
|
+
const client = (0, client_1.getApiClient)();
|
|
123
|
+
const response = await client.get(`/api/v1/posts/${postId}/status`);
|
|
124
|
+
return response.data.data;
|
|
125
|
+
},
|
|
126
|
+
enabled: !!postId,
|
|
127
|
+
...options,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3F1ZXJpZXMvcG9zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQThCSCxvQ0FvQkM7QUFPRCwwQkFjQztBQU9ELDRDQWNDO0FBT0QsNEJBZ0JDO0FBUUQsc0NBY0M7QUF2SUQsdURBQWtGO0FBQ2xGLHNDQUF5QztBQUd6QywrRUFBK0U7QUFDL0UsYUFBYTtBQUNiLCtFQUErRTtBQUVsRSxRQUFBLFFBQVEsR0FBRztJQUN0QixHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQVU7SUFDdkIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxnQkFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQVU7SUFDL0MsSUFBSSxFQUFFLENBQUMsT0FBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFVO0lBQ3BGLE1BQU0sRUFBRSxDQUFDLE1BQWMsRUFBRSxPQUFpQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQVU7SUFDbEgsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxnQkFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQVU7SUFDbkQsTUFBTSxFQUFFLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQVU7SUFDNUQsU0FBUyxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZ0JBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFVO0lBQ2pGLE1BQU0sRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGdCQUFRLENBQUMsTUFB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Q0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUG9zdHMgUXVlcnkgSG9va3NcbiAqXG4gKiBUYW5TdGFjayBRdWVyeSBob29rcyBmb3IgcG9zdC9ib2FyZCBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7IHVzZVF1ZXJ5LCBVc2VRdWVyeU9wdGlvbnMsIFVzZVF1ZXJ5UmVzdWx0IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IGdldEFwaUNsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IFBvc3QsIFBvc3RSZXNwb25zZSwgQXBpUmVzcG9uc2UsIFBvc3RTdGF0dXNEdG8gfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFFVRVJZIEtFWVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNvbnN0IHBvc3RLZXlzID0ge1xuICBhbGw6IFsncG9zdHMnXSBhcyBjb25zdCxcbiAgbGlzdHM6ICgpID0+IFsuLi5wb3N0S2V5cy5hbGwsICdsaXN0J10gYXMgY29uc3QsXG4gIGxpc3Q6IChmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFsuLi5wb3N0S2V5cy5saXN0cygpLCBmaWx0ZXJzXSBhcyBjb25zdCxcbiAgYnlTcG90OiAoc3BvdElkOiBzdHJpbmcsIGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gWy4uLnBvc3RLZXlzLmFsbCwgJ3Nwb3QnLCBzcG90SWQsIGZpbHRlcnNdIGFzIGNvbnN0LFxuICBkZXRhaWxzOiAoKSA9PiBbLi4ucG9zdEtleXMuYWxsLCAnZGV0YWlsJ10gYXMgY29uc3QsXG4gIGRldGFpbDogKGlkOiBzdHJpbmcpID0+IFsuLi5wb3N0S2V5cy5kZXRhaWxzKCksIGlkXSBhcyBjb25zdCxcbiAgcmVzcG9uc2VzOiAocG9zdElkOiBzdHJpbmcpID0+IFsuLi5wb3N0S2V5cy5kZXRhaWwocG9zdElkKSwgJ3Jlc3BvbnNlcyddIGFzIGNvbnN0LFxuICBzdGF0dXM6IChwb3N0SWQ6IHN0cmluZykgPT4gWy4uLnBvc3RLZXlzLmRldGFpbChwb3N0SWQpLCAnc3RhdHVzJ10gYXMgY29uc3QsXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRVUVSWSBIT09LU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBwb3N0cyBmb3IgYSBzcG90XG4gKlxuICogQGVuZHBvaW50IEdFVCAvYXBpL3YxL3Nwb3RzL3tzcG90SWR9L3Bvc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTcG90UG9zdHMoXG4gIHNwb3RJZDogc3RyaW5nLFxuICBwYXJhbXM/OiB7IHBvc3RUeXBlPzogc3RyaW5nOyBzdGF0dXM/OiBzdHJpbmc7IHBhZ2U/OiBudW1iZXI7IGxpbWl0PzogbnVtYmVyIH0sXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQb3N0W10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFtdPiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IHBvc3RLZXlzLmJ5U3BvdChzcG90SWQsIHBhcmFtcyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UG9zdFtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgaWYgKHBhcmFtcz8ucG9zdFR5cGUpIHF1ZXJ5UGFyYW1zLnNldCgncG9zdFR5cGUnLCBwYXJhbXMucG9zdFR5cGUpO1xuICAgICAgaWYgKHBhcmFtcz8uc3RhdHVzKSBxdWVyeVBhcmFtcy5zZXQoJ3N0YXR1cycsIHBhcmFtcy5zdGF0dXMpO1xuICAgICAgaWYgKHBhcmFtcz8ucGFnZSkgcXVlcnlQYXJhbXMuc2V0KCdwYWdlJywgU3RyaW5nKHBhcmFtcy5wYWdlKSk7XG4gICAgICBpZiAocGFyYW1zPy5saW1pdCkgcXVlcnlQYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhwYXJhbXMubGltaXQpKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQb3N0W10+PihgL2FwaS92MS9zcG90cy8ke3Nwb3RJZH0vcG9zdHM/JHtxdWVyeVBhcmFtc31gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBlbmFibGVkOiAhIXNwb3RJZCxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgYSBzaW5nbGUgcG9zdCBieSBJRFxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9wb3N0cy97cG9zdElkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUG9zdChcbiAgcG9zdElkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxQb3N0PiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFBvc3Q+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcG9zdEtleXMuZGV0YWlsKHBvc3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UG9zdD4gPT4ge1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0QXBpQ2xpZW50KCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8UG9zdD4+KGAvYXBpL3YxL3Bvc3RzLyR7cG9zdElkfWApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhcG9zdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCByZXNwb25zZXMgZm9yIGEgcG9zdFxuICpcbiAqIEBlbmRwb2ludCBHRVQgL2FwaS92MS9wb3N0cy97cG9zdElkfS9yZXNwb25zZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvc3RSZXNwb25zZXMoXG4gIHBvc3RJZDogc3RyaW5nLFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UG9zdFJlc3BvbnNlW10+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFJlc3BvbnNlW10+IHtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICBxdWVyeUtleTogcG9zdEtleXMucmVzcG9uc2VzKHBvc3RJZCksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UG9zdFJlc3BvbnNlW10+ID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldEFwaUNsaWVudCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PEFwaVJlc3BvbnNlPFBvc3RSZXNwb25zZVtdPj4oYC9hcGkvdjEvcG9zdHMvJHtwb3N0SWR9L3Jlc3BvbnNlc2ApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhcG9zdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBhbGwgcG9zdHMgKHdpdGggZmlsdGVycylcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvcG9zdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvc3RzKFxuICBwYXJhbXM/OiB7IHBvc3RUeXBlPzogc3RyaW5nOyBsaW1pdD86IG51bWJlciB9LFxuICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8UG9zdFtdPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbik6IFVzZVF1ZXJ5UmVzdWx0PFBvc3RbXT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBwb3N0S2V5cy5saXN0KHBhcmFtcyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCk6IFByb21pc2U8UG9zdFtdPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgaWYgKHBhcmFtcz8ucG9zdFR5cGUpIHF1ZXJ5UGFyYW1zLnNldCgncG9zdFR5cGUnLCBwYXJhbXMucG9zdFR5cGUpO1xuICAgICAgaWYgKHBhcmFtcz8ubGltaXQpIHF1ZXJ5UGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcocGFyYW1zLmxpbWl0KSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8QXBpUmVzcG9uc2U8UG9zdFtdPj4oYC9hcGkvdjEvcG9zdHM/JHtxdWVyeVBhcmFtc31gKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuXG4vKipcbiAqIEdldCB1c2VyJ3Mgc3RhdHVzIGZvciBhIHBvc3QgKHJlYWQvaGlkZGVuL3Bpbm5lZClcbiAqXG4gKiBAZW5kcG9pbnQgR0VUIC9hcGkvdjEvcG9zdHMve3Bvc3RJZH0vc3RhdHVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQb3N0U3RhdHVzKFxuICBwb3N0SWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFBvc3RTdGF0dXNEdG8+LCAncXVlcnlLZXknIHwgJ3F1ZXJ5Rm4nPlxuKTogVXNlUXVlcnlSZXN1bHQ8UG9zdFN0YXR1c0R0bz4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBwb3N0S2V5cy5zdGF0dXMocG9zdElkKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKTogUHJvbWlzZTxQb3N0U3RhdHVzRHRvPiA9PiB7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRBcGlDbGllbnQoKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxBcGlSZXNwb25zZTxQb3N0U3RhdHVzRHRvPj4oYC9hcGkvdjEvcG9zdHMvJHtwb3N0SWR9L3N0YXR1c2ApO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6ICEhcG9zdElkLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuIl19
|